{"version":3,"file":"configSchema.cjs","sources":["../../../../../packages/engine-http/src/config/configSchema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { MailerOptions } from '@contember/engine-tenant-api'\nimport { upperCaseFirst } from '../utils/strings'\n\n\nconst dbConfigRequired = {\n\thost: Typesafe.string,\n\tport: Typesafe.number,\n\tuser: Typesafe.string,\n\tpassword: Typesafe.string,\n\tdatabase: Typesafe.string,\n}\nconst dbConfigOptional = {\n\tssl: Typesafe.boolean,\n\tqueryTimeoutMs: Typesafe.number,\n\tstatementTimeoutMs: Typesafe.number,\n\tconnectionTimeoutMs: Typesafe.number,\n\tpool: Typesafe.partial({\n\t\tmaxConnections: Typesafe.number,\n\t\tmaxConnecting: Typesafe.number,\n\t\tmaxIdle: Typesafe.number,\n\t\treconnectIntervalMs: Typesafe.number,\n\t\trateLimitCount: Typesafe.number,\n\t\trateLimitPeriodMs: Typesafe.number,\n\t\tidleTimeoutMs: Typesafe.number,\n\t\tacquireTimeoutMs: Typesafe.number,\n\t\tmaxUses: Typesafe.number,\n\t\tmaxAgeMs: Typesafe.number,\n\t}),\n}\n\nconst dbConfigSchemaInner = Typesafe.intersection(\n\tTypesafe.object(dbConfigRequired),\n\tTypesafe.partial(dbConfigOptional),\n)\n\nconst readDbSchema = Typesafe.intersection(\n\tTypesafe.partial(dbConfigRequired),\n\tTypesafe.partial(dbConfigOptional),\n)\n\nexport const dbConfigSchema = Typesafe.intersection(\n\tdbConfigSchemaInner,\n\tTypesafe.partial({\n\t\tread: (val: unknown) => {\n\t\t\tconst readDb = readDbSchema(val)\n\t\t\tif ('host' in readDb) {\n\t\t\t\treturn readDb\n\t\t\t}\n\t\t\treturn undefined\n\t\t},\n\t}),\n)\n\nexport const tenantConfigSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tdb: dbConfigSchema,\n\t\tmailer: Typesafe.transform(Typesafe.partial({\n\t\t\tfrom: Typesafe.string,\n\t\t\thost: Typesafe.string,\n\t\t\tport: Typesafe.number,\n\t\t\tuser: Typesafe.string,\n\t\t\tpassword: Typesafe.string,\n\t\t}), (value, input): MailerOptions & Typesafe.JsonObject => {\n\t\t\treturn {\n\t\t\t\t...(input as any),\n\t\t\t\t...value,\n\t\t\t\t...(value.user ? { auth: { user: value.user, pass: value.password } } : {}),\n\t\t\t}\n\t\t}),\n\t\tcredentials: Typesafe.partial({\n\t\t\trootToken: Typesafe.string,\n\t\t\trootTokenHash: Typesafe.string,\n\t\t\trootPassword: Typesafe.string,\n\t\t\trootEmail: Typesafe.string,\n\t\t\tloginToken: Typesafe.string,\n\t\t}),\n\t}),\n\tTypesafe.object({\n\t\tsecrets: Typesafe.partial({\n\t\t\tencryptionKey: Typesafe.string,\n\t\t}),\n\t}),\n)\n\nexport const serverConfigSchema = Typesafe.partial({\n\tport: Typesafe.number,\n\thttp: Typesafe.partial({\n\t\trequestBodySize: Typesafe.string,\n\t\tsuppressAccessLog: (val: unknown) => {\n\t\t\tif (!val) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (val === 'true' || val === '1' || val === 'on') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (val === 'false' || val === '0' || val === 'off') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (typeof val === 'string') {\n\t\t\t\treturn val\n\t\t\t}\n\t\t\tTypesafe.fail([])\n\t\t},\n\t}),\n\tcontentApi: Typesafe.partial({\n\t\tschemaCacheTtlSeconds: Typesafe.integer,\n\t\twhereOptimizer: Typesafe.partial({\n\t\t\tdisable: Typesafe.boolean,\n\t\t\tmaxCrossOptimizationInput: Typesafe.number,\n\t\t}),\n\t}),\n\tlogging: Typesafe.union(\n\t\t(val): { sentry?: { dsn: string } } => Typesafe.valueAt(val, ['sentry', 'dsn']) === undefined ? {} : Typesafe.fail([]),\n\t\tTypesafe.partial({\n\t\t\tsentry: Typesafe.object({\n\t\t\t\tdsn: Typesafe.string,\n\t\t\t}),\n\t\t}),\n\t),\n\tprojectGroup: (val: unknown, path: PropertyKey[] = []) => Typesafe.valueAt(val, ['domainMapping']) === undefined\n\t\t? undefined\n\t\t: Typesafe.intersection(\n\t\t\tTypesafe.object({\n\t\t\t\tdomainMapping: Typesafe.string,\n\t\t\t}),\n\t\t\tTypesafe.partial({\n\t\t\t\tconfigHeader: Typesafe.string,\n\t\t\t\tconfigEncryptionKey: Typesafe.string,\n\t\t\t}),\n\t\t)(val, path),\n\tmonitoringPort: Typesafe.number,\n\tworkerCount: Typesafe.union(Typesafe.number, Typesafe.string),\n\tapplicationWorker: Typesafe.string,\n})\n\nexport const stageConfig = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.intersection(\n\t\tTypesafe.object({\n\t\t\tname: Typesafe.union(\n\t\t\t\tTypesafe.string,\n\t\t\t\t(_: unknown, path: PropertyKey[] = []) => upperCaseFirst(String(path[path.length - 2])),\n\t\t\t),\n\t\t\tslug: (_: unknown, path: PropertyKey[] = []) => String(path[path.length - 2]),\n\t\t}),\n\t\tTypesafe.partial({\n\t\t\tschema: Typesafe.string,\n\t\t}),\n\t),\n)\n\nexport const projectConfigSchema = Typesafe.object({\n\tname: Typesafe.union(\n\t\tTypesafe.string,\n\t\t(_: unknown, path: PropertyKey[] = []) => upperCaseFirst(String(path[path.length - 2])).replace(/-/g, ' '),\n\t),\n\tslug: (_, path = []) => String(path[path.length - 2]),\n\tstages: (input, path = []) => Object.values(stageConfig(input, path)),\n\tdb: Typesafe.intersection(\n\t\tTypesafe.union(\n\t\t\tTypesafe.object({\n\t\t\t\tuseTenantDb: Typesafe.literal(true),\n\t\t\t}),\n\t\t\tdbConfigSchema,\n\t\t),\n\t\tTypesafe.partial({\n\t\t\tsystemSchema: Typesafe.string,\n\t\t}),\n\t),\n})\n"],"names":["Typesafe","upperCaseFirst"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKA,MAAM,mBAAmB;AAAA,EACxB,MAAMA,oBAAS;AAAA,EACf,MAAMA,oBAAS;AAAA,EACf,MAAMA,oBAAS;AAAA,EACf,UAAUA,oBAAS;AAAA,EACnB,UAAUA,oBAAS;AACpB;AACA,MAAM,mBAAmB;AAAA,EACxB,KAAKA,oBAAS;AAAA,EACd,gBAAgBA,oBAAS;AAAA,EACzB,oBAAoBA,oBAAS;AAAA,EAC7B,qBAAqBA,oBAAS;AAAA,EAC9B,MAAMA,oBAAS,QAAQ;AAAA,IACtB,gBAAgBA,oBAAS;AAAA,IACzB,eAAeA,oBAAS;AAAA,IACxB,SAASA,oBAAS;AAAA,IAClB,qBAAqBA,oBAAS;AAAA,IAC9B,gBAAgBA,oBAAS;AAAA,IACzB,mBAAmBA,oBAAS;AAAA,IAC5B,eAAeA,oBAAS;AAAA,IACxB,kBAAkBA,oBAAS;AAAA,IAC3B,SAASA,oBAAS;AAAA,IAClB,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAEA,MAAM,sBAAsBA,oBAAS;AAAA,EACpCA,oBAAS,OAAO,gBAAgB;AAAA,EAChCA,oBAAS,QAAQ,gBAAgB;AAClC;AAEA,MAAM,eAAeA,oBAAS;AAAA,EAC7BA,oBAAS,QAAQ,gBAAgB;AAAA,EACjCA,oBAAS,QAAQ,gBAAgB;AAClC;AAEO,MAAM,iBAAiBA,oBAAS;AAAA,EACtC;AAAA,EACAA,oBAAS,QAAQ;AAAA,IAChB,MAAM,CAAC,QAAiB;AACjB,YAAA,SAAS,aAAa,GAAG;AAC/B,UAAI,UAAU,QAAQ;AACd,eAAA;AAAA,MAAA;AAED,aAAA;AAAA,IAAA;AAAA,EAER,CAAA;AACF;AAEO,MAAM,qBAAqBA,oBAAS;AAAA,EAC1CA,oBAAS,OAAO;AAAA,IACf,IAAI;AAAA,IACJ,QAAQA,oBAAS,UAAUA,oBAAS,QAAQ;AAAA,MAC3C,MAAMA,oBAAS;AAAA,MACf,MAAMA,oBAAS;AAAA,MACf,MAAMA,oBAAS;AAAA,MACf,MAAMA,oBAAS;AAAA,MACf,UAAUA,oBAAS;AAAA,IAAA,CACnB,GAAG,CAAC,OAAO,UAA+C;AACnD,aAAA;AAAA,QACN,GAAI;AAAA,QACJ,GAAG;AAAA,QACH,GAAI,MAAM,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,SAAS,EAAA,IAAM,CAAA;AAAA,MACzE;AAAA,IAAA,CACA;AAAA,IACD,aAAaA,oBAAS,QAAQ;AAAA,MAC7B,WAAWA,oBAAS;AAAA,MACpB,eAAeA,oBAAS;AAAA,MACxB,cAAcA,oBAAS;AAAA,MACvB,WAAWA,oBAAS;AAAA,MACpB,YAAYA,oBAAS;AAAA,IACrB,CAAA;AAAA,EAAA,CACD;AAAA,EACDA,oBAAS,OAAO;AAAA,IACf,SAASA,oBAAS,QAAQ;AAAA,MACzB,eAAeA,oBAAS;AAAA,IACxB,CAAA;AAAA,EACD,CAAA;AACF;AAEa,MAAA,qBAAqBA,oBAAS,QAAQ;AAAA,EAClD,MAAMA,oBAAS;AAAA,EACf,MAAMA,oBAAS,QAAQ;AAAA,IACtB,iBAAiBA,oBAAS;AAAA,IAC1B,mBAAmB,CAAC,QAAiB;AACpC,UAAI,CAAC,KAAK;AACF,eAAA;AAAA,MAAA;AAER,UAAI,QAAQ,UAAU,QAAQ,OAAO,QAAQ,MAAM;AAC3C,eAAA;AAAA,MAAA;AAER,UAAI,QAAQ,WAAW,QAAQ,OAAO,QAAQ,OAAO;AAC7C,eAAA;AAAA,MAAA;AAEJ,UAAA,OAAO,QAAQ,UAAU;AACrB,eAAA;AAAA,MAAA;AAECA,0BAAA,KAAK,EAAE;AAAA,IAAA;AAAA,EACjB,CACA;AAAA,EACD,YAAYA,oBAAS,QAAQ;AAAA,IAC5B,uBAAuBA,oBAAS;AAAA,IAChC,gBAAgBA,oBAAS,QAAQ;AAAA,MAChC,SAASA,oBAAS;AAAA,MAClB,2BAA2BA,oBAAS;AAAA,IACpC,CAAA;AAAA,EAAA,CACD;AAAA,EACD,SAASA,oBAAS;AAAA,IACjB,CAAC,QAAsCA,oBAAS,QAAQ,KAAK,CAAC,UAAU,KAAK,CAAC,MAAM,SAAY,CAAA,IAAKA,oBAAS,KAAK,CAAA,CAAE;AAAA,IACrHA,oBAAS,QAAQ;AAAA,MAChB,QAAQA,oBAAS,OAAO;AAAA,QACvB,KAAKA,oBAAS;AAAA,MACd,CAAA;AAAA,IACD,CAAA;AAAA,EACF;AAAA,EACA,cAAc,CAAC,KAAc,OAAsB,CAAA,MAAOA,oBAAS,QAAQ,KAAK,CAAC,eAAe,CAAC,MAAM,SACpG,SACAA,oBAAS;AAAA,IACVA,oBAAS,OAAO;AAAA,MACf,eAAeA,oBAAS;AAAA,IAAA,CACxB;AAAA,IACDA,oBAAS,QAAQ;AAAA,MAChB,cAAcA,oBAAS;AAAA,MACvB,qBAAqBA,oBAAS;AAAA,IAC9B,CAAA;AAAA,EAAA,EACA,KAAK,IAAI;AAAA,EACZ,gBAAgBA,oBAAS;AAAA,EACzB,aAAaA,oBAAS,MAAMA,oBAAS,QAAQA,oBAAS,MAAM;AAAA,EAC5D,mBAAmBA,oBAAS;AAC7B,CAAC;AAEM,MAAM,cAAcA,oBAAS;AAAA,EACnCA,oBAAS;AAAA,EACTA,oBAAS;AAAA,IACRA,oBAAS,OAAO;AAAA,MACf,MAAMA,oBAAS;AAAA,QACdA,oBAAS;AAAA,QACT,CAAC,GAAY,OAAsB,CAAA,MAAOC,QAAA,eAAe,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,MACvF;AAAA,MACA,MAAM,CAAC,GAAY,OAAsB,CAAO,MAAA,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,IAAA,CAC5E;AAAA,IACDD,oBAAS,QAAQ;AAAA,MAChB,QAAQA,oBAAS;AAAA,IACjB,CAAA;AAAA,EAAA;AAEH;AAEa,MAAA,sBAAsBA,oBAAS,OAAO;AAAA,EAClD,MAAMA,oBAAS;AAAA,IACdA,oBAAS;AAAA,IACT,CAAC,GAAY,OAAsB,CAAC,MAAMC,uBAAe,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,GAAG;AAAA,EAC1G;AAAA,EACA,MAAM,CAAC,GAAG,OAAO,CAAO,MAAA,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,EACpD,QAAQ,CAAC,OAAO,OAAO,CAAO,MAAA,OAAO,OAAO,YAAY,OAAO,IAAI,CAAC;AAAA,EACpE,IAAID,oBAAS;AAAA,IACZA,oBAAS;AAAA,MACRA,oBAAS,OAAO;AAAA,QACf,aAAaA,oBAAS,QAAQ,IAAI;AAAA,MAAA,CAClC;AAAA,MACD;AAAA,IACD;AAAA,IACAA,oBAAS,QAAQ;AAAA,MAChB,cAAcA,oBAAS;AAAA,IACvB,CAAA;AAAA,EAAA;AAEH,CAAC;;;;;;"}