@contember/engine-server 1.1.0-alpha.2 → 1.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/alpine.dockerfile +3 -1
  2. package/debian.dockerfile +3 -1
  3. package/dist/src/MasterContainer.d.ts +104 -8
  4. package/dist/src/MasterContainer.d.ts.map +1 -1
  5. package/dist/src/MasterContainer.js +65 -84
  6. package/dist/src/MasterContainer.js.map +1 -1
  7. package/dist/src/bootstrap/Initializer.d.ts +3 -12
  8. package/dist/src/bootstrap/Initializer.d.ts.map +1 -1
  9. package/dist/src/bootstrap/Initializer.js +8 -24
  10. package/dist/src/bootstrap/Initializer.js.map +1 -1
  11. package/dist/src/config/config.d.ts +7 -49
  12. package/dist/src/config/config.d.ts.map +1 -1
  13. package/dist/src/config/config.js +11 -188
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/configSchema.d.ts +84 -0
  16. package/dist/src/config/configSchema.d.ts.map +1 -0
  17. package/dist/src/config/configSchema.js +80 -0
  18. package/dist/src/config/configSchema.js.map +1 -0
  19. package/dist/src/config/configTemplate.d.ts +2 -0
  20. package/dist/src/config/configTemplate.d.ts.map +1 -0
  21. package/dist/src/config/configTemplate.js +62 -0
  22. package/dist/src/config/configTemplate.js.map +1 -0
  23. package/dist/src/config/projectConfigResolver.d.ts +8 -0
  24. package/dist/src/config/projectConfigResolver.d.ts.map +1 -0
  25. package/dist/src/config/projectConfigResolver.js +63 -0
  26. package/dist/src/config/projectConfigResolver.js.map +1 -0
  27. package/dist/src/config/tenantConfigResolver.d.ts +8 -0
  28. package/dist/src/config/tenantConfigResolver.d.ts.map +1 -0
  29. package/dist/src/config/tenantConfigResolver.js +31 -0
  30. package/dist/src/config/tenantConfigResolver.js.map +1 -0
  31. package/dist/src/http/CollectHttpMetricsMiddelware.d.ts +2 -2
  32. package/dist/src/http/CollectHttpMetricsMiddelware.d.ts.map +1 -1
  33. package/dist/src/http/CollectHttpMetricsMiddelware.js +6 -5
  34. package/dist/src/http/CollectHttpMetricsMiddelware.js.map +1 -1
  35. package/dist/src/project/ProjectContainer.d.ts +14 -16
  36. package/dist/src/project/ProjectContainer.d.ts.map +1 -1
  37. package/dist/src/project/ProjectContainer.js +17 -12
  38. package/dist/src/project/ProjectContainer.js.map +1 -1
  39. package/dist/src/project/ProjectContainerResolver.d.ts +12 -10
  40. package/dist/src/project/ProjectContainerResolver.d.ts.map +1 -1
  41. package/dist/src/project/ProjectContainerResolver.js +26 -33
  42. package/dist/src/project/ProjectContainerResolver.js.map +1 -1
  43. package/dist/src/project/{ProjectGroupState.d.ts → ProjectContainerStore.d.ts} +2 -2
  44. package/dist/src/project/ProjectContainerStore.d.ts.map +1 -0
  45. package/dist/src/project/{ProjectGroupState.js → ProjectContainerStore.js} +4 -4
  46. package/dist/src/project/ProjectContainerStore.js.map +1 -0
  47. package/dist/src/project/ProjectInitializer.d.ts +3 -3
  48. package/dist/src/project/ProjectInitializer.d.ts.map +1 -1
  49. package/dist/src/project/ProjectInitializer.js +4 -4
  50. package/dist/src/project/ProjectInitializer.js.map +1 -1
  51. package/dist/src/project/ProjectSchemaResolver.d.ts +3 -3
  52. package/dist/src/project/ProjectSchemaResolver.d.ts.map +1 -1
  53. package/dist/src/project/ProjectSchemaResolver.js +5 -5
  54. package/dist/src/project/ProjectSchemaResolver.js.map +1 -1
  55. package/dist/src/projectGroup/ProjectGroupContainer.d.ts +23 -0
  56. package/dist/src/projectGroup/ProjectGroupContainer.d.ts.map +1 -0
  57. package/dist/src/projectGroup/ProjectGroupContainer.js +64 -0
  58. package/dist/src/projectGroup/ProjectGroupContainer.js.map +1 -0
  59. package/dist/src/projectGroup/ProjectGroupContainerResolver.d.ts +12 -0
  60. package/dist/src/projectGroup/ProjectGroupContainerResolver.d.ts.map +1 -0
  61. package/dist/src/projectGroup/ProjectGroupContainerResolver.js +36 -0
  62. package/dist/src/projectGroup/ProjectGroupContainerResolver.js.map +1 -0
  63. package/dist/src/start.js +9 -8
  64. package/dist/src/start.js.map +1 -1
  65. package/dist/src/tsconfig.tsbuildinfo +1 -1
  66. package/dist/src/utils/dbMetrics.d.ts +6 -2
  67. package/dist/src/utils/dbMetrics.d.ts.map +1 -1
  68. package/dist/src/utils/dbMetrics.js +13 -16
  69. package/dist/src/utils/dbMetrics.js.map +1 -1
  70. package/dist/tests/cases/http.js +30 -19
  71. package/dist/tests/cases/http.js.map +1 -1
  72. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +22 -21
  74. package/src/MasterContainer.ts +145 -204
  75. package/src/bootstrap/Initializer.ts +9 -34
  76. package/src/config/config.ts +23 -234
  77. package/src/config/configSchema.ts +114 -0
  78. package/src/config/configTemplate.ts +58 -0
  79. package/src/config/projectConfigResolver.ts +83 -0
  80. package/src/config/tenantConfigResolver.ts +41 -0
  81. package/src/http/CollectHttpMetricsMiddelware.ts +6 -5
  82. package/src/project/ProjectContainer.ts +25 -18
  83. package/src/project/ProjectContainerResolver.ts +29 -37
  84. package/src/project/{ProjectGroupState.ts → ProjectContainerStore.ts} +1 -1
  85. package/src/project/ProjectInitializer.ts +5 -9
  86. package/src/project/ProjectSchemaResolver.ts +6 -10
  87. package/src/projectGroup/ProjectGroupContainer.ts +120 -0
  88. package/src/projectGroup/ProjectGroupContainerResolver.ts +47 -0
  89. package/src/start.ts +9 -8
  90. package/src/utils/dbMetrics.ts +19 -20
  91. package/tests/cases/http.ts +35 -22
  92. package/dist/src/project/ProjectGroupState.d.ts.map +0 -1
  93. package/dist/src/project/ProjectGroupState.js.map +0 -1
@@ -2,138 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readConfig = void 0;
4
4
  const config_loader_1 = require("@contember/config-loader");
5
- const utils_1 = require("../utils");
6
- const engine_common_1 = require("@contember/engine-common");
7
- const dbCredentialsSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
8
- host: engine_common_1.Typesafe.string,
9
- port: engine_common_1.Typesafe.number,
10
- user: engine_common_1.Typesafe.string,
11
- password: engine_common_1.Typesafe.string,
12
- database: engine_common_1.Typesafe.string,
13
- }), engine_common_1.Typesafe.partial({
14
- ssl: engine_common_1.Typesafe.boolean,
15
- }));
16
- const tenantConfigSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
17
- db: dbCredentialsSchema,
18
- mailer: engine_common_1.Typesafe.transform(engine_common_1.Typesafe.partial({
19
- from: engine_common_1.Typesafe.string,
20
- host: engine_common_1.Typesafe.string,
21
- port: engine_common_1.Typesafe.number,
22
- user: engine_common_1.Typesafe.string,
23
- password: engine_common_1.Typesafe.string,
24
- }), (value, input) => {
25
- return {
26
- ...input,
27
- ...value,
28
- ...(value.user ? { auth: { user: value.user, pass: value.password } } : {}),
29
- };
30
- }),
31
- credentials: engine_common_1.Typesafe.partial({
32
- rootToken: engine_common_1.Typesafe.string,
33
- rootTokenHash: engine_common_1.Typesafe.string,
34
- rootPassword: engine_common_1.Typesafe.string,
35
- rootEmail: engine_common_1.Typesafe.string,
36
- loginToken: engine_common_1.Typesafe.string,
37
- }),
38
- }), engine_common_1.Typesafe.object({
39
- secrets: engine_common_1.Typesafe.partial({
40
- encryptionKey: engine_common_1.Typesafe.string,
41
- }),
42
- }));
43
- const serverConfigSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
44
- port: engine_common_1.Typesafe.number,
45
- monitoringPort: engine_common_1.Typesafe.number,
46
- http: engine_common_1.Typesafe.partial({
47
- requestBodySize: engine_common_1.Typesafe.string,
48
- }),
49
- logging: engine_common_1.Typesafe.union(val => engine_common_1.Typesafe.valueAt(val, ['sentry', 'dsn']) === undefined ? {} : engine_common_1.Typesafe.fail([]), engine_common_1.Typesafe.partial({
50
- sentry: engine_common_1.Typesafe.object({
51
- dsn: engine_common_1.Typesafe.string,
52
- }),
53
- })),
54
- }), engine_common_1.Typesafe.partial({
55
- workerCount: engine_common_1.Typesafe.union(engine_common_1.Typesafe.number, engine_common_1.Typesafe.string),
56
- projectGroup: (val, path) => engine_common_1.Typesafe.valueAt(val, ['domainMapping']) === undefined ? undefined : engine_common_1.Typesafe.object({
57
- domainMapping: engine_common_1.Typesafe.string,
58
- })(val, path),
59
- }));
60
- const configSchema = engine_common_1.Typesafe.object({
61
- tenant: tenantConfigSchema,
62
- server: serverConfigSchema,
63
- });
64
- const stageConfig = engine_common_1.Typesafe.map(engine_common_1.Typesafe.object({
65
- name: engine_common_1.Typesafe.union(engine_common_1.Typesafe.string, (_, path = []) => (0, utils_1.upperCaseFirst)(String(path[path.length - 2]))),
66
- slug: (_, path = []) => String(path[path.length - 2]),
67
- }));
68
- const projectConfigSchema = engine_common_1.Typesafe.object({
69
- name: engine_common_1.Typesafe.union(engine_common_1.Typesafe.string, (_, path = []) => (0, utils_1.upperCaseFirst)(String(path[path.length - 2])).replace(/-/g, ' ')),
70
- slug: (_, path = []) => String(path[path.length - 2]),
71
- stages: (input, path = []) => Object.values(stageConfig(input, path)),
72
- db: dbCredentialsSchema,
73
- });
74
- const defaultTemplate = {
75
- tenant: {
76
- db: {
77
- host: `%tenant.env.DB_HOST%`,
78
- port: `%tenant.env.DB_PORT::number%`,
79
- user: `%tenant.env.DB_USER%`,
80
- password: `%tenant.env.DB_PASSWORD%`,
81
- database: `%tenant.env.DB_NAME%`,
82
- ssl: `%?tenant.env.DB_SSL::bool%`,
83
- },
84
- mailer: {
85
- from: '%?tenant.env.MAILER_FROM%',
86
- host: '%?tenant.env.MAILER_HOST::string%',
87
- port: '%?tenant.env.MAILER_PORT::number%',
88
- secure: '%?tenant.env.MAILER_SECURE::bool%',
89
- user: '%?tenant.env.MAILER_USER%',
90
- password: '%?tenant.env.MAILER_PASSWORD%',
91
- },
92
- credentials: {
93
- rootEmail: '%?env.CONTEMBER_ROOT_EMAIL%',
94
- rootToken: '%?env.CONTEMBER_ROOT_TOKEN%',
95
- rootTokenHash: '%?env.CONTEMBER_ROOT_TOKEN_HASH%',
96
- rootPassword: '%?env.CONTEMBER_ROOT_PASSWORD%',
97
- loginToken: '%?env.CONTEMBER_LOGIN_TOKEN%',
98
- },
99
- secrets: {
100
- encryptionKey: '%?env.CONTEMBER_ENCRYPTION_KEY%',
101
- },
102
- },
103
- projectDefaults: {
104
- db: {
105
- host: `%project.env.DB_HOST%`,
106
- port: `%project.env.DB_PORT::number%`,
107
- user: `%project.env.DB_USER%`,
108
- password: `%project.secret.db.password||project.env.DB_PASSWORD%`,
109
- ssl: `%?project.env.DB_SSL::bool%`,
110
- database: `%project.env.DB_NAME||project.slug%`,
111
- },
112
- },
113
- server: {
114
- port: '%env.CONTEMBER_PORT::number%',
115
- monitoringPort: '%env.CONTEMBER_MONITORING_PORT::number%',
116
- workerCount: '%?env.CONTEMBER_WORKER_COUNT::string%',
117
- http: {
118
- requestBodySize: '%?env.CONTEMBER_HTTP_REQUEST_BODY_SIZE::string%',
119
- },
120
- projectGroup: {
121
- domainMapping: '%?env.CONTEMBER_PROJECT_GROUP_DOMAIN_MAPPING%',
122
- },
123
- logging: {
124
- sentry: {
125
- dsn: '%?env.SENTRY_DSN%',
126
- },
127
- },
128
- },
129
- };
130
- const projectNameToEnvName = (projectName) => {
131
- const envName = projectName.toUpperCase().replace(/-/g, '_');
132
- if (envName === 'TENANT') {
133
- throw new Error('Forbidden project name');
134
- }
135
- return envName;
136
- };
5
+ const configSchema_1 = require("./configSchema");
6
+ const configTemplate_1 = require("./configTemplate");
7
+ const projectConfigResolver_1 = require("./projectConfigResolver");
8
+ const tenantConfigResolver_1 = require("./tenantConfigResolver");
137
9
  async function readConfig(configSources, configProcessors = []) {
138
10
  const loader = new config_loader_1.ConfigLoader();
139
11
  const configs = await Promise.all(configSources.map(it => (it.type === 'file' ? loader.load(it.data) : loader.loadString(it.data, it.type))));
@@ -143,64 +15,15 @@ async function readConfig(configSources, configProcessors = []) {
143
15
  }),
144
16
  ...Object.fromEntries(Object.entries(process.env).filter((it) => it[1] !== undefined)),
145
17
  };
146
- const template = configProcessors.reduce((tpl, processor) => { var _a; return ((_a = processor.prepareConfigTemplate) === null || _a === void 0 ? void 0 : _a.call(processor, tpl, { env })) || tpl; }, defaultTemplate);
147
- let { projectDefaults, ...config } = config_loader_1.Merger.merge(template, ...configs);
18
+ const template = configProcessors.reduce((tpl, processor) => { var _a; return ((_a = processor.prepareConfigTemplate) === null || _a === void 0 ? void 0 : _a.call(processor, tpl, { env })) || tpl; }, configTemplate_1.configTemplate);
19
+ const rawConfig = config_loader_1.Merger.merge(template, ...configs);
148
20
  const parametersResolver = (0, config_loader_1.createObjectParametersResolver)({ env });
149
- config = (0, config_loader_1.resolveParameters)(config, (parts, path, dataResolver) => {
150
- if (parts[0] === 'tenant') {
151
- if (path[0] !== 'tenant') {
152
- throw new Error(`Invalid use of ${parts.join('.')} variable in path ${path.join('.')}.`);
153
- }
154
- if (parts[1] === 'env') {
155
- const envName = parts[2];
156
- const envValue = env['TENANT_' + envName] || env['DEFAULT_' + envName];
157
- if (envValue === undefined) {
158
- throw new config_loader_1.UndefinedParameterError(`ENV variable "${'TENANT_' + envName}" not found.`);
159
- }
160
- return envValue;
161
- }
162
- throw new config_loader_1.UndefinedParameterError(`Parameter "${parts.join('.')}" not found.`);
163
- }
164
- return parametersResolver(parts, path, dataResolver);
165
- });
166
- const baseConfig = configSchema(config);
21
+ const config = (0, config_loader_1.resolveParameters)(rawConfig.server, parametersResolver);
22
+ const serverConfig = (0, configSchema_1.serverConfigSchema)(config);
167
23
  return {
168
- config: baseConfig,
169
- projectConfigResolver: (slug, additionalConfig, secrets) => {
170
- var _a;
171
- const mergedConfig = config_loader_1.Merger.merge(projectDefaults, (_a = config === null || config === void 0 ? void 0 : config.projects) === null || _a === void 0 ? void 0 : _a[slug], additionalConfig);
172
- if (!mergedConfig.stages) {
173
- mergedConfig.stages = { live: {} };
174
- }
175
- const resolvedConfig = (0, config_loader_1.resolveParameters)(mergedConfig, (parts, path, dataResolver) => {
176
- if (parts[0] === 'project') {
177
- if (parts[1] === 'env') {
178
- const envName = parts[2];
179
- const projectEnvName = projectNameToEnvName(slug);
180
- const envValue = env[projectEnvName + '_' + envName] || env['DEFAULT_' + envName];
181
- if (envValue === undefined) {
182
- throw new config_loader_1.UndefinedParameterError(`ENV variable "${projectEnvName + '_' + envName}" not found.`);
183
- }
184
- return envValue;
185
- }
186
- else if (parts[1] === 'slug') {
187
- return slug;
188
- }
189
- else if (parts[1] === 'secret') {
190
- const key = parts.slice(2).join('.');
191
- const value = secrets[key];
192
- if (value === undefined) {
193
- throw new config_loader_1.UndefinedParameterError(`Project secret ${parts[2]} not found`);
194
- }
195
- return value;
196
- }
197
- }
198
- throw new config_loader_1.UndefinedParameterError(`Parameter "${parts.join('.')}" not found.`);
199
- });
200
- const projectConfigSchemaWithPlugins = configProcessors.reduce((schema, current) => (current.getProjectConfigSchema ? engine_common_1.Typesafe.intersection(schema, current.getProjectConfigSchema(slug)) : schema), projectConfigSchema);
201
- const projectConfig = projectConfigSchemaWithPlugins(resolvedConfig, ['project', slug]);
202
- return projectConfig;
203
- },
24
+ serverConfig,
25
+ projectConfigResolver: (0, projectConfigResolver_1.createProjectConfigResolver)(env, rawConfig, configProcessors),
26
+ tenantConfigResolver: (0, tenantConfigResolver_1.createTenantConfigResolver)(env, rawConfig.tenant),
204
27
  };
205
28
  }
206
29
  exports.readConfig = readConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":";;;AAAA,4DAMiC;AACjC,oCAAyC;AAEzC,4DAAmD;AAOnD,MAAM,mBAAmB,GAAG,wBAAQ,CAAC,YAAY,CAChD,wBAAQ,CAAC,MAAM,CAAC;IACf,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;IACzB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;CACzB,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;IAChB,GAAG,EAAE,wBAAQ,CAAC,OAAO;CACrB,CAAC,CACF,CAAA;AAED,MAAM,kBAAkB,GAAG,wBAAQ,CAAC,YAAY,CAC/C,wBAAQ,CAAC,MAAM,CAAC;IACf,EAAE,EAAE,mBAAmB;IACvB,MAAM,EAAE,wBAAQ,CAAC,SAAS,CAAC,wBAAQ,CAAC,OAAO,CAAC;QAC3C,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;KACzB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAiB,EAAE;QACnC,OAAO;YACN,GAAI,KAAuB;YAC3B,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAA;IACF,CAAC,CAAC;IACF,WAAW,EAAE,wBAAQ,CAAC,OAAO,CAAC;QAC7B,SAAS,EAAE,wBAAQ,CAAC,MAAM;QAC1B,aAAa,EAAE,wBAAQ,CAAC,MAAM;QAC9B,YAAY,EAAE,wBAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,wBAAQ,CAAC,MAAM;QAC1B,UAAU,EAAE,wBAAQ,CAAC,MAAM;KAC3B,CAAC;CACF,CAAC,EACF,wBAAQ,CAAC,MAAM,CAAC;IACf,OAAO,EAAE,wBAAQ,CAAC,OAAO,CAAC;QACzB,aAAa,EAAE,wBAAQ,CAAC,MAAM;KAC9B,CAAC;CACF,CAAC,CACF,CAAA;AACD,MAAM,kBAAkB,GAAG,wBAAQ,CAAC,YAAY,CAC/C,wBAAQ,CAAC,MAAM,CAAC;IACf,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,cAAc,EAAE,wBAAQ,CAAC,MAAM;IAC/B,IAAI,EAAE,wBAAQ,CAAC,OAAO,CAAC;QACtB,eAAe,EAAE,wBAAQ,CAAC,MAAM;KAChC,CAAC;IACF,OAAO,EAAE,wBAAQ,CAAC,KAAK,CACtB,GAAG,CAAC,EAAE,CAAC,wBAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EACtF,wBAAQ,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,wBAAQ,CAAC,MAAM,CAAC;YACvB,GAAG,EAAE,wBAAQ,CAAC,MAAM;SACpB,CAAC;KACF,CAAC,CACF;CACD,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;IAChB,WAAW,EAAE,wBAAQ,CAAC,KAAK,CAAC,wBAAQ,CAAC,MAAM,EAAE,wBAAQ,CAAC,MAAM,CAAC;IAC7D,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAQ,CAAC,MAAM,CAAC;QACjH,aAAa,EAAE,wBAAQ,CAAC,MAAM;KAC9B,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;CACb,CAAC,CACF,CAAA;AACD,MAAM,YAAY,GAAG,wBAAQ,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;CAC1B,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG,wBAAQ,CAAC,GAAG,CAAC,wBAAQ,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,wBAAQ,CAAC,KAAK,CACnB,wBAAQ,CAAC,MAAM,EACf,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/D;IACD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CACrD,CAAC,CAAC,CAAA;AAEH,MAAM,mBAAmB,GAAG,wBAAQ,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,wBAAQ,CAAC,KAAK,CACnB,wBAAQ,CAAC,MAAM,EACf,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAClF;IACD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrE,EAAE,EAAE,mBAAmB;CACvB,CAAC,CAAA;AAEF,MAAM,eAAe,GAAQ;IAC5B,MAAM,EAAE;QACP,EAAE,EAAE;YACH,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,8BAA8B;YACpC,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,0BAA0B;YACpC,QAAQ,EAAE,sBAAsB;YAChC,GAAG,EAAE,4BAA4B;SACjC;QACD,MAAM,EAAE;YACP,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,mCAAmC;YACzC,MAAM,EAAE,mCAAmC;YAC3C,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,+BAA+B;SACzC;QACD,WAAW,EAAE;YACZ,SAAS,EAAE,6BAA6B;YACxC,SAAS,EAAE,6BAA6B;YACxC,aAAa,EAAE,kCAAkC;YACjD,YAAY,EAAE,gCAAgC;YAC9C,UAAU,EAAE,8BAA8B;SAC1C;QACD,OAAO,EAAE;YACR,aAAa,EAAE,iCAAiC;SAChD;KACD;IACD,eAAe,EAAE;QAChB,EAAE,EAAE;YACH,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,+BAA+B;YACrC,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,uDAAuD;YACjE,GAAG,EAAE,6BAA6B;YAClC,QAAQ,EAAE,qCAAqC;SAC/C;KACD;IACD,MAAM,EAAE;QACP,IAAI,EAAE,8BAA8B;QACpC,cAAc,EAAE,yCAAyC;QACzD,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE;YACL,eAAe,EAAE,iDAAiD;SAClE;QACD,YAAY,EAAE;YACb,aAAa,EAAE,+CAA+C;SAC9D;QACD,OAAO,EAAE;YACR,MAAM,EAAE;gBACP,GAAG,EAAE,mBAAmB;aACxB;SACD;KACD;CACD,CAAA;AAGD,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAU,EAAE;IAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC5D,IAAI,OAAO,KAAK,QAAQ,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;KACzC;IACD,OAAO,OAAO,CAAA;AACf,CAAC,CAAA;AAIM,KAAK,UAAU,UAAU,CAC/B,aAA6B,EAC7B,mBAAsC,EAAE;IAKxC,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1G,CAAA;IACD,MAAM,GAAG,GAA2B;QACnC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAC,OAAA,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,+CAAlB,IAAI,CAAkB,KAAI,EAAE,CAAC,EAAE,CAAC,CAAA,EAAA,EAAE;YAC1F,eAAe,EAAE,MAAM;SACvB,CAAC;QACF,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAA0B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;KAC9G,CAAA;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,SAAS,CAAC,qBAAqB,+CAA/B,SAAS,EAAyB,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,KAAI,GAAG,CAAA,EAAA,EAC1E,eAAe,CACf,CAAA;IAED,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,GAAG,sBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAA;IAEvE,MAAM,kBAAkB,GAAG,IAAA,8CAA8B,EAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAClE,MAAM,GAAG,IAAA,iCAAiB,EAAC,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;QAChE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;gBACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;aACxF;YACD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBACvB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;gBACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;gBACtE,IAAI,QAAQ,KAAK,SAAS,EAAE;oBAC3B,MAAM,IAAI,uCAAuB,CAAC,iBAAiB,SAAS,GAAG,OAAO,cAAc,CAAC,CAAA;iBACrF;gBACD,OAAO,QAAQ,CAAA;aACf;YACD,MAAM,IAAI,uCAAuB,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;SAC9E;QAED,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO;QACN,MAAM,EAAE,UAAU;QAClB,qBAAqB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE;;YAC1D,MAAM,YAAY,GAAG,sBAAM,CAAC,KAAK,CAChC,eAAsB,EACtB,MAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAgB,0CAAG,IAAI,CAAQ,EACxC,gBAAgB,CAChB,CAAA;YACD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBACzB,YAAY,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;aAClC;YACD,MAAM,cAAc,GAAG,IAAA,iCAAiB,EAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;gBACpF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;oBAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;wBACvB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;wBACxB,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;wBACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;wBACjF,IAAI,QAAQ,KAAK,SAAS,EAAE;4BAC3B,MAAM,IAAI,uCAAuB,CAAC,iBAAiB,cAAc,GAAG,GAAG,GAAG,OAAO,cAAc,CAAC,CAAA;yBAChG;wBACD,OAAO,QAAQ,CAAA;qBACf;yBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;wBAC/B,OAAO,IAAI,CAAA;qBACX;yBAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;wBACjC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;wBACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;wBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;4BACxB,MAAM,IAAI,uCAAuB,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;yBACzE;wBACD,OAAO,KAAK,CAAA;qBACZ;iBACD;gBACD,MAAM,IAAI,uCAAuB,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAC/E,CAAC,CAAC,CAAA;YAEF,MAAM,8BAA8B,GAAG,gBAAgB,CAAC,MAAM,CAC7D,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CACpB,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,wBAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAC7G,EACD,mBAAmB,CACnB,CAAA;YACD,MAAM,aAAa,GAAG,8BAA8B,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;YACvF,OAAO,aAAa,CAAA;QACrB,CAAC;KACD,CAAA;AACF,CAAC;AA3FD,gCA2FC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":";;;AAAA,4DAAkH;AAElH,iDAAuE;AACvE,qDAAiD;AACjD,mEAA4F;AAC5F,iEAAyF;AASlF,KAAK,UAAU,UAAU,CAC/B,aAA6B,EAC7B,mBAAsC,EAAE;IAMxC,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1G,CAAA;IACD,MAAM,GAAG,GAAQ;QAChB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAC,OAAA,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,+CAAlB,IAAI,CAAkB,KAAI,EAAE,CAAC,EAAE,CAAC,CAAA,EAAA,EAAE;YAC1F,eAAe,EAAE,MAAM;SACvB,CAAC;QACF,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAA0B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;KAC9G,CAAA;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CACvC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,SAAS,CAAC,qBAAqB,+CAA/B,SAAS,EAAyB,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,KAAI,GAAG,CAAA,EAAA,EAC1E,+BAAc,CACd,CAAA;IAED,MAAM,SAAS,GAAG,sBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAA;IAEpD,MAAM,kBAAkB,GAAG,IAAA,8CAA8B,EAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,IAAA,iCAAiB,EAAC,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAEtE,MAAM,YAAY,GAAG,IAAA,iCAAkB,EAAC,MAAM,CAAC,CAAA;IAC/C,OAAO;QACN,YAAY;QACZ,qBAAqB,EAAE,IAAA,mDAA2B,EAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,CAAC;QACpF,oBAAoB,EAAE,IAAA,iDAA0B,EAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;KACvE,CAAA;AACF,CAAC;AAnCD,gCAmCC"}
@@ -0,0 +1,84 @@
1
+ import { Typesafe } from '@contember/engine-common';
2
+ import { MailerOptions } from '@contember/engine-tenant-api';
3
+ export declare const dbCredentialsSchema: Typesafe.Type<{
4
+ readonly host: string;
5
+ readonly port: number;
6
+ readonly user: string;
7
+ readonly password: string;
8
+ readonly database: string;
9
+ } & {
10
+ readonly ssl?: boolean | undefined;
11
+ }>;
12
+ export declare const tenantConfigSchema: Typesafe.Type<{
13
+ readonly db: {
14
+ readonly host: string;
15
+ readonly port: number;
16
+ readonly user: string;
17
+ readonly password: string;
18
+ readonly database: string;
19
+ } & {
20
+ readonly ssl?: boolean | undefined;
21
+ };
22
+ readonly mailer: MailerOptions;
23
+ readonly credentials: {
24
+ readonly rootToken?: string | undefined;
25
+ readonly rootTokenHash?: string | undefined;
26
+ readonly rootPassword?: string | undefined;
27
+ readonly rootEmail?: string | undefined;
28
+ readonly loginToken?: string | undefined;
29
+ };
30
+ } & {
31
+ readonly secrets: {
32
+ readonly encryptionKey?: string | undefined;
33
+ };
34
+ }>;
35
+ export declare const serverConfigSchema: Typesafe.Type<{
36
+ readonly port: number;
37
+ readonly monitoringPort: number;
38
+ readonly http: {
39
+ readonly requestBodySize?: string | undefined;
40
+ };
41
+ readonly logging: {} | {
42
+ readonly sentry?: {
43
+ readonly dsn: string;
44
+ } | undefined;
45
+ };
46
+ } & {
47
+ readonly workerCount?: string | number | undefined;
48
+ readonly projectGroup?: ({
49
+ readonly domainMapping: string;
50
+ } & {
51
+ readonly configHeader?: string | undefined;
52
+ readonly configEncryptionKey?: string | undefined;
53
+ }) | undefined;
54
+ }>;
55
+ export declare const stageConfig: (input: unknown, path?: PropertyKey[] | undefined) => Record<string, {
56
+ readonly name: string;
57
+ readonly slug: string;
58
+ } & {
59
+ readonly schema?: string | undefined;
60
+ }>;
61
+ export declare const projectConfigSchema: Typesafe.Type<{
62
+ readonly name: string;
63
+ readonly slug: string;
64
+ readonly stages: ({
65
+ readonly name: string;
66
+ readonly slug: string;
67
+ } & {
68
+ readonly schema?: string | undefined;
69
+ })[];
70
+ readonly db: (({
71
+ readonly host: string;
72
+ readonly port: number;
73
+ readonly user: string;
74
+ readonly password: string;
75
+ readonly database: string;
76
+ } & {
77
+ readonly ssl?: boolean | undefined;
78
+ }) | {
79
+ readonly useTenantDb: boolean;
80
+ }) & {
81
+ readonly systemSchema?: string | undefined;
82
+ };
83
+ }>;
84
+ //# sourceMappingURL=configSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.d.ts","sourceRoot":"","sources":["../../../src/config/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAI5D,eAAO,MAAM,mBAAmB;;;;;;;;EAW/B,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;EA6B9B,CAAA;AACD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;EA8B9B,CAAA;AAED,eAAO,MAAM,WAAW;;;;;EAavB,CAAA;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;EAkB9B,CAAA"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.projectConfigSchema = exports.stageConfig = exports.serverConfigSchema = exports.tenantConfigSchema = exports.dbCredentialsSchema = void 0;
4
+ const engine_common_1 = require("@contember/engine-common");
5
+ const utils_1 = require("../utils");
6
+ exports.dbCredentialsSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
7
+ host: engine_common_1.Typesafe.string,
8
+ port: engine_common_1.Typesafe.number,
9
+ user: engine_common_1.Typesafe.string,
10
+ password: engine_common_1.Typesafe.string,
11
+ database: engine_common_1.Typesafe.string,
12
+ }), engine_common_1.Typesafe.partial({
13
+ ssl: engine_common_1.Typesafe.boolean,
14
+ }));
15
+ exports.tenantConfigSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
16
+ db: exports.dbCredentialsSchema,
17
+ mailer: engine_common_1.Typesafe.transform(engine_common_1.Typesafe.partial({
18
+ from: engine_common_1.Typesafe.string,
19
+ host: engine_common_1.Typesafe.string,
20
+ port: engine_common_1.Typesafe.number,
21
+ user: engine_common_1.Typesafe.string,
22
+ password: engine_common_1.Typesafe.string,
23
+ }), (value, input) => {
24
+ return {
25
+ ...input,
26
+ ...value,
27
+ ...(value.user ? { auth: { user: value.user, pass: value.password } } : {}),
28
+ };
29
+ }),
30
+ credentials: engine_common_1.Typesafe.partial({
31
+ rootToken: engine_common_1.Typesafe.string,
32
+ rootTokenHash: engine_common_1.Typesafe.string,
33
+ rootPassword: engine_common_1.Typesafe.string,
34
+ rootEmail: engine_common_1.Typesafe.string,
35
+ loginToken: engine_common_1.Typesafe.string,
36
+ }),
37
+ }), engine_common_1.Typesafe.object({
38
+ secrets: engine_common_1.Typesafe.partial({
39
+ encryptionKey: engine_common_1.Typesafe.string,
40
+ }),
41
+ }));
42
+ exports.serverConfigSchema = engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
43
+ port: engine_common_1.Typesafe.number,
44
+ monitoringPort: engine_common_1.Typesafe.number,
45
+ http: engine_common_1.Typesafe.partial({
46
+ requestBodySize: engine_common_1.Typesafe.string,
47
+ }),
48
+ logging: engine_common_1.Typesafe.union(val => engine_common_1.Typesafe.valueAt(val, ['sentry', 'dsn']) === undefined ? {} : engine_common_1.Typesafe.fail([]), engine_common_1.Typesafe.partial({
49
+ sentry: engine_common_1.Typesafe.object({
50
+ dsn: engine_common_1.Typesafe.string,
51
+ }),
52
+ })),
53
+ }), engine_common_1.Typesafe.partial({
54
+ workerCount: engine_common_1.Typesafe.union(engine_common_1.Typesafe.number, engine_common_1.Typesafe.string),
55
+ projectGroup: (val, path) => engine_common_1.Typesafe.valueAt(val, ['domainMapping']) === undefined
56
+ ? undefined
57
+ : engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
58
+ domainMapping: engine_common_1.Typesafe.string,
59
+ }), engine_common_1.Typesafe.partial({
60
+ configHeader: engine_common_1.Typesafe.string,
61
+ configEncryptionKey: engine_common_1.Typesafe.string,
62
+ }))(val, path),
63
+ }));
64
+ exports.stageConfig = engine_common_1.Typesafe.map(engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.object({
65
+ name: engine_common_1.Typesafe.union(engine_common_1.Typesafe.string, (_, path = []) => (0, utils_1.upperCaseFirst)(String(path[path.length - 2]))),
66
+ slug: (_, path = []) => String(path[path.length - 2]),
67
+ }), engine_common_1.Typesafe.partial({
68
+ schema: engine_common_1.Typesafe.string,
69
+ })));
70
+ exports.projectConfigSchema = engine_common_1.Typesafe.object({
71
+ name: engine_common_1.Typesafe.union(engine_common_1.Typesafe.string, (_, path = []) => (0, utils_1.upperCaseFirst)(String(path[path.length - 2])).replace(/-/g, ' ')),
72
+ slug: (_, path = []) => String(path[path.length - 2]),
73
+ stages: (input, path = []) => Object.values((0, exports.stageConfig)(input, path)),
74
+ db: engine_common_1.Typesafe.intersection(engine_common_1.Typesafe.union(engine_common_1.Typesafe.object({
75
+ useTenantDb: engine_common_1.Typesafe.literal(true),
76
+ }), exports.dbCredentialsSchema), engine_common_1.Typesafe.partial({
77
+ systemSchema: engine_common_1.Typesafe.string,
78
+ })),
79
+ });
80
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../../src/config/configSchema.ts"],"names":[],"mappings":";;;AAAA,4DAAmD;AAEnD,oCAAyC;AAG5B,QAAA,mBAAmB,GAAG,wBAAQ,CAAC,YAAY,CACvD,wBAAQ,CAAC,MAAM,CAAC;IACf,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;IACzB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;CACzB,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;IAChB,GAAG,EAAE,wBAAQ,CAAC,OAAO;CACrB,CAAC,CACF,CAAA;AAEY,QAAA,kBAAkB,GAAG,wBAAQ,CAAC,YAAY,CACtD,wBAAQ,CAAC,MAAM,CAAC;IACf,EAAE,EAAE,2BAAmB;IACvB,MAAM,EAAE,wBAAQ,CAAC,SAAS,CAAC,wBAAQ,CAAC,OAAO,CAAC;QAC3C,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,IAAI,EAAE,wBAAQ,CAAC,MAAM;QACrB,QAAQ,EAAE,wBAAQ,CAAC,MAAM;KACzB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAiB,EAAE;QACnC,OAAO;YACN,GAAI,KAAuB;YAC3B,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAA;IACF,CAAC,CAAC;IACF,WAAW,EAAE,wBAAQ,CAAC,OAAO,CAAC;QAC7B,SAAS,EAAE,wBAAQ,CAAC,MAAM;QAC1B,aAAa,EAAE,wBAAQ,CAAC,MAAM;QAC9B,YAAY,EAAE,wBAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,wBAAQ,CAAC,MAAM;QAC1B,UAAU,EAAE,wBAAQ,CAAC,MAAM;KAC3B,CAAC;CACF,CAAC,EACF,wBAAQ,CAAC,MAAM,CAAC;IACf,OAAO,EAAE,wBAAQ,CAAC,OAAO,CAAC;QACzB,aAAa,EAAE,wBAAQ,CAAC,MAAM;KAC9B,CAAC;CACF,CAAC,CACF,CAAA;AACY,QAAA,kBAAkB,GAAG,wBAAQ,CAAC,YAAY,CACtD,wBAAQ,CAAC,MAAM,CAAC;IACf,IAAI,EAAE,wBAAQ,CAAC,MAAM;IACrB,cAAc,EAAE,wBAAQ,CAAC,MAAM;IAC/B,IAAI,EAAE,wBAAQ,CAAC,OAAO,CAAC;QACtB,eAAe,EAAE,wBAAQ,CAAC,MAAM;KAChC,CAAC;IACF,OAAO,EAAE,wBAAQ,CAAC,KAAK,CACtB,GAAG,CAAC,EAAE,CAAC,wBAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EACtF,wBAAQ,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,wBAAQ,CAAC,MAAM,CAAC;YACvB,GAAG,EAAE,wBAAQ,CAAC,MAAM;SACpB,CAAC;KACF,CAAC,CACF;CACD,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;IAChB,WAAW,EAAE,wBAAQ,CAAC,KAAK,CAAC,wBAAQ,CAAC,MAAM,EAAE,wBAAQ,CAAC,MAAM,CAAC;IAC7D,YAAY,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,KAAK,SAAS;QAClF,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAQ,CAAC,YAAY,CACtB,wBAAQ,CAAC,MAAM,CAAC;YACf,aAAa,EAAE,wBAAQ,CAAC,MAAM;SAC9B,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;YAChB,YAAY,EAAE,wBAAQ,CAAC,MAAM;YAC7B,mBAAmB,EAAE,wBAAQ,CAAC,MAAM;SACpC,CAAC,CACF,CAAC,GAAG,EAAE,IAAI,CAAC;CACb,CAAC,CACF,CAAA;AAEY,QAAA,WAAW,GAAG,wBAAQ,CAAC,GAAG,CACtC,wBAAQ,CAAC,YAAY,CACpB,wBAAQ,CAAC,MAAM,CAAC;IACf,IAAI,EAAE,wBAAQ,CAAC,KAAK,CACnB,wBAAQ,CAAC,MAAM,EACf,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/D;IACD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CACrD,CAAC,EACF,wBAAQ,CAAC,OAAO,CAAC;IAChB,MAAM,EAAE,wBAAQ,CAAC,MAAM;CACvB,CAAC,CACF,CACD,CAAA;AAEY,QAAA,mBAAmB,GAAG,wBAAQ,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,wBAAQ,CAAC,KAAK,CACnB,wBAAQ,CAAC,MAAM,EACf,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAClF;IACD,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAA,mBAAW,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrE,EAAE,EAAE,wBAAQ,CAAC,YAAY,CACxB,wBAAQ,CAAC,KAAK,CACb,wBAAQ,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,wBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC,EACF,2BAAmB,CACnB,EACD,wBAAQ,CAAC,OAAO,CAAC;QAChB,YAAY,EAAE,wBAAQ,CAAC,MAAM;KAC7B,CAAC,CACF;CACD,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const configTemplate: any;
2
+ //# sourceMappingURL=configTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configTemplate.d.ts","sourceRoot":"","sources":["../../../src/config/configTemplate.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,EAAE,GAyD5B,CAAA"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configTemplate = void 0;
4
+ exports.configTemplate = {
5
+ tenant: {
6
+ db: {
7
+ host: `%tenant.env.DB_HOST%`,
8
+ port: `%tenant.env.DB_PORT::number%`,
9
+ user: `%tenant.env.DB_USER%`,
10
+ password: `%tenant.env.DB_PASSWORD%`,
11
+ database: `%tenant.env.DB_NAME%`,
12
+ ssl: `%?tenant.env.DB_SSL::bool%`,
13
+ },
14
+ mailer: {
15
+ from: '%?tenant.env.MAILER_FROM%',
16
+ host: '%?tenant.env.MAILER_HOST::string%',
17
+ port: '%?tenant.env.MAILER_PORT::number%',
18
+ secure: '%?tenant.env.MAILER_SECURE::bool%',
19
+ user: '%?tenant.env.MAILER_USER%',
20
+ password: '%?tenant.env.MAILER_PASSWORD%',
21
+ },
22
+ credentials: {
23
+ rootEmail: '%?env.CONTEMBER_ROOT_EMAIL%',
24
+ rootToken: '%?env.CONTEMBER_ROOT_TOKEN%',
25
+ rootTokenHash: '%?env.CONTEMBER_ROOT_TOKEN_HASH%',
26
+ rootPassword: '%?env.CONTEMBER_ROOT_PASSWORD%',
27
+ loginToken: '%?env.CONTEMBER_LOGIN_TOKEN%',
28
+ },
29
+ secrets: {
30
+ encryptionKey: '%?env.CONTEMBER_ENCRYPTION_KEY%',
31
+ },
32
+ },
33
+ projectDefaults: {
34
+ db: {
35
+ host: `%?project.env.DB_HOST%`,
36
+ port: `%?project.env.DB_PORT::number%`,
37
+ user: `%?project.env.DB_USER%`,
38
+ password: `%?project.secret.db.password||project.env.DB_PASSWORD%`,
39
+ database: `%?project.env.DB_NAME||project.slug%`,
40
+ ssl: `%?project.env.DB_SSL::bool%`,
41
+ },
42
+ },
43
+ server: {
44
+ port: '%env.CONTEMBER_PORT::number%',
45
+ monitoringPort: '%env.CONTEMBER_MONITORING_PORT::number%',
46
+ workerCount: '%?env.CONTEMBER_WORKER_COUNT::string%',
47
+ http: {
48
+ requestBodySize: '%?env.CONTEMBER_HTTP_REQUEST_BODY_SIZE::string%',
49
+ },
50
+ projectGroup: {
51
+ domainMapping: '%?env.CONTEMBER_PROJECT_GROUP_DOMAIN_MAPPING%',
52
+ configHeader: '%?env.CONTEMBER_PROJECT_GROUP_CONFIG_HEADER%',
53
+ configEncryptionKey: '%?env.CONTEMBER_PROJECT_GROUP_CONFIG_ENCRYPTION_KEY%',
54
+ },
55
+ logging: {
56
+ sentry: {
57
+ dsn: '%?env.SENTRY_DSN%',
58
+ },
59
+ },
60
+ },
61
+ };
62
+ //# sourceMappingURL=configTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configTemplate.js","sourceRoot":"","sources":["../../../src/config/configTemplate.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAQ;IAClC,MAAM,EAAE;QACP,EAAE,EAAE;YACH,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE,8BAA8B;YACpC,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,0BAA0B;YACpC,QAAQ,EAAE,sBAAsB;YAChC,GAAG,EAAE,4BAA4B;SACjC;QACD,MAAM,EAAE;YACP,IAAI,EAAE,2BAA2B;YACjC,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,mCAAmC;YACzC,MAAM,EAAE,mCAAmC;YAC3C,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,+BAA+B;SACzC;QACD,WAAW,EAAE;YACZ,SAAS,EAAE,6BAA6B;YACxC,SAAS,EAAE,6BAA6B;YACxC,aAAa,EAAE,kCAAkC;YACjD,YAAY,EAAE,gCAAgC;YAC9C,UAAU,EAAE,8BAA8B;SAC1C;QACD,OAAO,EAAE;YACR,aAAa,EAAE,iCAAiC;SAChD;KACD;IACD,eAAe,EAAE;QAChB,EAAE,EAAE;YACH,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE,gCAAgC;YACtC,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,wDAAwD;YAClE,QAAQ,EAAE,sCAAsC;YAChD,GAAG,EAAE,6BAA6B;SAClC;KACD;IACD,MAAM,EAAE;QACP,IAAI,EAAE,8BAA8B;QACpC,cAAc,EAAE,yCAAyC;QACzD,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE;YACL,eAAe,EAAE,iDAAiD;SAClE;QACD,YAAY,EAAE;YACb,aAAa,EAAE,+CAA+C;YAC9D,YAAY,EAAE,8CAA8C;YAC5D,mBAAmB,EAAE,sDAAsD;SAC3E;QACD,OAAO,EAAE;YACR,MAAM,EAAE;gBACP,GAAG,EAAE,mBAAmB;aACxB;SACD;KACD;CACD,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { ProjectConfig, ProjectSecrets } from '@contember/engine-http';
2
+ import { ConfigProcessor } from '@contember/engine-plugins';
3
+ import { TenantConfig } from './config';
4
+ export declare type ProjectConfigResolver = (slug: string, additionalConfig: any, secrets: ProjectSecrets, tenantConfig: TenantConfig) => ProjectConfig;
5
+ declare type Env = Record<string, string>;
6
+ export declare const createProjectConfigResolver: (env: Env, config: any, configProcessors: ConfigProcessor[]) => ProjectConfigResolver;
7
+ export {};
8
+ //# sourceMappingURL=projectConfigResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConfigResolver.d.ts","sourceRoot":"","sources":["../../../src/config/projectConfigResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAI3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,qBAAqB,GAAG,CACnC,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,GAAG,EACrB,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,YAAY,KACtB,aAAa,CAAA;AAElB,aAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjC,eAAO,MAAM,2BAA2B,QAAS,GAAG,UAAU,GAAG,oBAAoB,eAAe,EAAE,KAAG,qBAgCvG,CAAA"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProjectConfigResolver = void 0;
4
+ const config_loader_1 = require("@contember/config-loader");
5
+ const engine_common_1 = require("@contember/engine-common");
6
+ const configSchema_1 = require("./configSchema");
7
+ const createProjectConfigResolver = (env, config, configProcessors) => (slug, additionalConfig, secrets, tenantConfig) => {
8
+ var _a;
9
+ const mergedConfig = config_loader_1.Merger.merge(config.projectDefaults, (_a = config === null || config === void 0 ? void 0 : config.projects) === null || _a === void 0 ? void 0 : _a[slug], additionalConfig);
10
+ if (!mergedConfig.stages) {
11
+ mergedConfig.stages = { live: {} };
12
+ }
13
+ const resolvedConfig = (0, config_loader_1.resolveParameters)(mergedConfig, createProjectParametersResolver(slug, env, secrets));
14
+ const projectConfigSchemaWithPlugins = configProcessors.reduce((schema, current) => (current.getProjectConfigSchema ? engine_common_1.Typesafe.intersection(schema, current.getProjectConfigSchema(slug)) : schema), configSchema_1.projectConfigSchema);
15
+ const projectConfig = projectConfigSchemaWithPlugins(resolvedConfig, ['project', slug]);
16
+ if (!('host' in projectConfig.db)) {
17
+ return {
18
+ ...projectConfig,
19
+ db: {
20
+ ...tenantConfig.db,
21
+ ...projectConfig.db,
22
+ },
23
+ };
24
+ }
25
+ return {
26
+ ...projectConfig,
27
+ db: projectConfig.db,
28
+ };
29
+ };
30
+ exports.createProjectConfigResolver = createProjectConfigResolver;
31
+ const createProjectParametersResolver = (slug, env, secrets) => parts => {
32
+ if (parts[0] === 'project') {
33
+ if (parts[1] === 'env') {
34
+ const envName = parts[2];
35
+ const projectEnvName = projectNameToEnvName(slug);
36
+ const envValue = env[projectEnvName + '_' + envName] || env['DEFAULT_' + envName];
37
+ if (envValue === undefined) {
38
+ throw new config_loader_1.UndefinedParameterError(`ENV variable "${projectEnvName + '_' + envName}" not found.`);
39
+ }
40
+ return envValue;
41
+ }
42
+ else if (parts[1] === 'slug') {
43
+ return slug;
44
+ }
45
+ else if (parts[1] === 'secret') {
46
+ const key = parts.slice(2).join('.');
47
+ const value = secrets[key];
48
+ if (value === undefined) {
49
+ throw new config_loader_1.UndefinedParameterError(`Project secret ${parts[2]} not found`);
50
+ }
51
+ return value;
52
+ }
53
+ }
54
+ throw new config_loader_1.UndefinedParameterError(`Parameter "${parts.join('.')}" not found.`);
55
+ };
56
+ const projectNameToEnvName = (projectName) => {
57
+ const envName = projectName.toUpperCase().replace(/-/g, '_');
58
+ if (envName === 'TENANT') {
59
+ throw new Error('Forbidden project name');
60
+ }
61
+ return envName;
62
+ };
63
+ //# sourceMappingURL=projectConfigResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConfigResolver.js","sourceRoot":"","sources":["../../../src/config/projectConfigResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TenantConfig } from './config';
2
+ import { ParametersResolver } from '@contember/config-loader';
3
+ export declare type TenantConfigResolver = (slug: string | undefined, additionalConfig: any) => TenantConfig;
4
+ declare type Env = Record<string, string>;
5
+ export declare const createTenantConfigResolver: (env: Env, tenantConfig: any) => TenantConfigResolver;
6
+ export declare const createTenantParametersResolver: (env: Env) => ParametersResolver;
7
+ export {};
8
+ //# sourceMappingURL=tenantConfigResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenantConfigResolver.d.ts","sourceRoot":"","sources":["../../../src/config/tenantConfigResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAGN,kBAAkB,EAGlB,MAAM,0BAA0B,CAAA;AAGjC,oBAAY,oBAAoB,GAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,GAAG,KAAK,YAAY,CAAA;AAErG,aAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjC,eAAO,MAAM,0BAA0B,QAAS,GAAG,gBAAgB,GAAG,KAAG,oBAYvE,CAAA;AAGF,eAAO,MAAM,8BAA8B,QAAS,GAAG,KAAG,kBAWxD,CAAA"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTenantParametersResolver = exports.createTenantConfigResolver = void 0;
4
+ const config_loader_1 = require("@contember/config-loader");
5
+ const configSchema_1 = require("./configSchema");
6
+ const createTenantConfigResolver = (env, tenantConfig) => (slug, additionalConfig) => {
7
+ const mergedConfig = config_loader_1.Merger.merge(tenantConfig, additionalConfig);
8
+ const parametersResolver = (0, config_loader_1.createObjectParametersResolver)({ env });
9
+ const tenantParametersResolver = (0, exports.createTenantParametersResolver)(env);
10
+ const resolvedConfig = (0, config_loader_1.resolveParameters)(mergedConfig, (parts, path, dataResolver) => {
11
+ if (parts[0] === 'tenant') {
12
+ return tenantParametersResolver(parts, path, dataResolver);
13
+ }
14
+ return parametersResolver(parts, path, dataResolver);
15
+ });
16
+ return (0, configSchema_1.tenantConfigSchema)(resolvedConfig);
17
+ };
18
+ exports.createTenantConfigResolver = createTenantConfigResolver;
19
+ const createTenantParametersResolver = (env) => parts => {
20
+ if (parts[1] === 'env') {
21
+ const envName = parts[2];
22
+ const envValue = env['TENANT_' + envName] || env['DEFAULT_' + envName];
23
+ if (envValue === undefined) {
24
+ throw new config_loader_1.UndefinedParameterError(`ENV variable "${'TENANT_' + envName}" not found.`);
25
+ }
26
+ return envValue;
27
+ }
28
+ throw new config_loader_1.UndefinedParameterError(`Parameter "${parts.join('.')}" not found.`);
29
+ };
30
+ exports.createTenantParametersResolver = createTenantParametersResolver;
31
+ //# sourceMappingURL=tenantConfigResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenantConfigResolver.js","sourceRoot":"","sources":["../../../src/config/tenantConfigResolver.ts"],"names":[],"mappings":";;;AACA,4DAMiC;AACjC,iDAAmD;AAM5C,MAAM,0BAA0B,GAAG,CAAC,GAAQ,EAAE,YAAiB,EAAwB,EAAE,CAC/F,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE;IAC1B,MAAM,YAAY,GAAG,sBAAM,CAAC,KAAK,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;IACjE,MAAM,kBAAkB,GAAG,IAAA,8CAA8B,EAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAClE,MAAM,wBAAwB,GAAG,IAAA,sCAA8B,EAAC,GAAG,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,IAAA,iCAAiB,EAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;QACpF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC1B,OAAO,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;SAC1D;QACD,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IACF,OAAO,IAAA,iCAAkB,EAAC,cAAc,CAAC,CAAA;AAC1C,CAAC,CAAA;AAZW,QAAA,0BAA0B,8BAYrC;AAGK,MAAM,8BAA8B,GAAG,CAAC,GAAQ,EAAsB,EAAE,CAC9E,KAAK,CAAC,EAAE;IACP,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,CAAA;QACtE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC3B,MAAM,IAAI,uCAAuB,CAAC,iBAAiB,SAAS,GAAG,OAAO,cAAc,CAAC,CAAA;SACrF;QACD,OAAO,QAAQ,CAAA;KACf;IACD,MAAM,IAAI,uCAAuB,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AAC/E,CAAC,CAAA;AAXW,QAAA,8BAA8B,kCAWzC"}
@@ -1,5 +1,5 @@
1
- import { KoaMiddleware, ModuleInfoMiddlewareState, ProjectResolveMiddlewareState } from '@contember/engine-http';
1
+ import { KoaMiddleware, ModuleInfoMiddlewareState, ProjectInfoMiddlewareState } from '@contember/engine-http';
2
2
  import prom from 'prom-client';
3
3
  import { GraphQLKoaState } from '@contember/engine-http';
4
- export declare const createColllectHttpMetricsMiddleware: (registry: prom.Registry) => KoaMiddleware<Partial<ProjectResolveMiddlewareState & ModuleInfoMiddlewareState & GraphQLKoaState>>;
4
+ export declare const createColllectHttpMetricsMiddleware: (registry: prom.Registry) => KoaMiddleware<Partial<ProjectInfoMiddlewareState & ModuleInfoMiddlewareState & GraphQLKoaState>>;
5
5
  //# sourceMappingURL=CollectHttpMetricsMiddelware.d.ts.map