import { v4 as uuidv4 } from "uuid"; import { requireEnv } from "../util"; const coreConfig = { projectId: requireEnv("GOOGLE_CLOUD_PROJECT"), pitsUrl: requireEnv("PITS_URL", "http://localhost:8082"), tokenDefaultTTL: Number(requireEnv("TOKEN_TTL", String(24 * 60 * 60))), graphqlPath: requireEnv("GRAPHQL_PATH", "/"), restPath: requireEnv("REST_PATH", "/"), }; const buildConfig = { bundleBuildCallbackUrl: requireEnv("BUNDLE_BUILD_CALLBACK_URL"), bundleBuildCallbackMethod: requireEnv("BUNDLE_BUILD_CALLBACK_METHOD", "POST"), }; const playerConfig = { controllerEndpointTemplate: requireEnv("CONTROLLER_UPDATE_URL", "/$sessionId"), controllerEndpointSecret: requireEnv("CONTROLLER_UPDATE_SECRET", uuidv4()), }; const typeToIndexName = (type: string) => { if (!type) { throw new Error("no type provided"); } switch (type.toLowerCase()) { case "item": return `${coreConfig.projectId}-item`; case "piecontent": return `${coreConfig.projectId}-piecontent`; default: throw new Error(`unknown type ${type}`); } }; const searchConfig = { docType: "_doc", elasticSearchUri: requireEnv("ELASTICSEARCH_URI"), indexName: (type: string) => `${typeToIndexName(type)}-${requireEnv("ELASTICSEARCH_INDEX_POSTFIX", "alias")}`, }; const pubsubConfig = { topics: { contentItemImport: requireEnv("CONTENT_ITEM_IMPORT_PUBSUB_TOPIC", ""), pieContentImport: requireEnv("PIE_CONTENT_IMPORT_PUBSUB_TOPIC", ""), checkPendingBuilds: requireEnv("CHECK_PENDING_BUILDS_PUBSUB_TOPIC", ""), checkPendingBuild: requireEnv("CHECK_PENDING_BUILD_PUBSUB_TOPIC", ""), checkBuild: requireEnv("CHECK_BUILD_PUBSUB_TOPIC", `${coreConfig.projectId}-check-build`), indexSearchMetaData: requireEnv("INDEX_SEARCH_METADATA_PUBSUB_TOPIC", `${coreConfig.projectId}-index-metadata`), buildCompleted: requireEnv("BUILD_COMPLETED_PUBSUB_TOPIC", ""), }, localResolution: { indexSearchMetaData: false, checkBuild: false, }, }; const storageConfig = { buckets: { contentItemImport: requireEnv("CONTENT_ITEM_IMPORT_STORAGE_BUCKET", ""), pieContentImport: requireEnv("PIE_CONTENT_IMPORT_STORAGE_BUCKET", ""), assets: requireEnv("ASSETS_STORAGE_BUCKET", ""), firestoreBackup: requireEnv("FIRESTORE_BACKUP_STORAGE_BUCKET", ""), }, }; // valid values for NODE_ENV const validEnvironments = ["development", "staging", "production"]; /** * Whether emulators should be loaded instead of actual service references. This function tried to detect * whether we are running code in the context of unit tests or if not, if NODE_ENV is set to an appropriate value. */ const shouldUseEmulators = () => { if (process.env.JEST_WORKER_ID || typeof jest !== "undefined" || "FIRESTORE_EMULATOR_HOST" in process.env) { return true; } if (!("NODE_ENV" in process.env) || !validEnvironments.includes(process.env.NODE_ENV)) { throw Error(`NODE_ENV needs to be set to a valid value`); } return false; }; export { coreConfig, buildConfig, searchConfig, pubsubConfig, storageConfig, playerConfig, shouldUseEmulators };