Add vocabulary url to config
[arvados-workbench2.git] / src / common / config.ts
index 759a20158f9f8cafac459cd4ee2213f36c00890d..c74277e42cc1ff78a9499e688f9f3bc171ca2835 100644 (file)
@@ -7,8 +7,49 @@ import Axios from "axios";
 export const CONFIG_URL = process.env.REACT_APP_ARVADOS_CONFIG_URL || "/config.json";
 
 export interface Config {
-    apiHost: string;
-    keepWebHost: string;
+    auth: {};
+    basePath: string;
+    baseUrl: string;
+    batchPath: string;
+    blobSignatureTtl: number;
+    crunchLimitLogBytesPerJob: number;
+    crunchLogBytesPerEvent: number;
+    crunchLogPartialLineThrottlePeriod: number;
+    crunchLogSecondsBetweenEvents: number;
+    crunchLogThrottleBytes: number;
+    crunchLogThrottleLines: number;
+    crunchLogThrottlePeriod: number;
+    defaultCollectionReplication: number;
+    defaultTrashLifetime: number;
+    description: string;
+    discoveryVersion: string;
+    dockerImageFormats: string[];
+    documentationLink: string;
+    generatedAt: string;
+    gitUrl: string;
+    id: string;
+    keepWebServiceUrl: string;
+    kind: string;
+    maxRequestSize: number;
+    name: string;
+    packageVersion: string;
+    parameters: {};
+    protocol: string;
+    remoteHosts: string;
+    remoteHostsViaDNS: boolean;
+    resources: {};
+    revision: string;
+    rootUrl: string;
+    schemas: {};
+    servicePath: string;
+    sourceVersion: string;
+    source_version: string;
+    title: string;
+    uuidPrefix: string;
+    version: string;
+    websocketUrl: string;
+    workbenchUrl: string;
+    vocabularyUrl: string;
 }
 
 export const fetchConfig = () => {
@@ -16,22 +57,70 @@ export const fetchConfig = () => {
         .get<ConfigJSON>(CONFIG_URL + "?nocache=" + (new Date()).getTime())
         .then(response => response.data)
         .catch(() => Promise.resolve(getDefaultConfig()))
-        .then(mapConfig);
+        .then(config => Axios
+            .get<Config>(getDiscoveryURL(config.API_HOST))
+            .then(response => ({ 
+                config: {...response.data, vocabularyUrl: config.VOCABULARY_URL }, 
+                apiHost: config.API_HOST, 
+            })));
+
 };
 
+export const mockConfig = (config: Partial<Config>): Config => ({
+    auth: {},
+    basePath: '',
+    baseUrl: '',
+    batchPath: '',
+    blobSignatureTtl: 0,
+    crunchLimitLogBytesPerJob: 0,
+    crunchLogBytesPerEvent: 0,
+    crunchLogPartialLineThrottlePeriod: 0,
+    crunchLogSecondsBetweenEvents: 0,
+    crunchLogThrottleBytes: 0,
+    crunchLogThrottleLines: 0,
+    crunchLogThrottlePeriod: 0,
+    defaultCollectionReplication: 0,
+    defaultTrashLifetime: 0,
+    description: '',
+    discoveryVersion: '',
+    dockerImageFormats: [],
+    documentationLink: '',
+    generatedAt: '',
+    gitUrl: '',
+    id: '',
+    keepWebServiceUrl: '',
+    kind: '',
+    maxRequestSize: 0,
+    name: '',
+    packageVersion: '',
+    parameters: {},
+    protocol: '',
+    remoteHosts: '',
+    remoteHostsViaDNS: false,
+    resources: {},
+    revision: '',
+    rootUrl: '',
+    schemas: {},
+    servicePath: '',
+    sourceVersion: '',
+    source_version: '',
+    title: '',
+    uuidPrefix: '',
+    version: '',
+    websocketUrl: '',
+    workbenchUrl: '',
+    vocabularyUrl: '',
+    ...config
+});
+
 interface ConfigJSON {
     API_HOST: string;
-    KEEP_WEB_HOST: string;
+    VOCABULARY_URL: string;
 }
 
-const mapConfig = (config: ConfigJSON): Config => ({
-    apiHost: addProtocol(config.API_HOST),
-    keepWebHost: addProtocol(config.KEEP_WEB_HOST)
-});
-
 const getDefaultConfig = (): ConfigJSON => ({
     API_HOST: process.env.REACT_APP_ARVADOS_API_HOST || "",
-    KEEP_WEB_HOST: process.env.REACT_APP_ARVADOS_KEEP_WEB_HOST || ""
+    VOCABULARY_URL: "",
 });
 
-const addProtocol = (url: string) => `${window.location.protocol}//${url}`;
+const getDiscoveryURL = (apiHost: string) => `${window.location.protocol}//${apiHost}/discovery/v1/apis/arvados/v1/rest`;