@contember/engine-server 1.1.0-alpha.0 → 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
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectGroupContainerFactory = void 0;
4
+ const dic_1 = require("@contember/dic");
5
+ const database_1 = require("@contember/database");
6
+ const engine_http_1 = require("@contember/engine-http");
7
+ const project_1 = require("../project");
8
+ const crypto_1 = require("crypto");
9
+ class ProjectGroupContainerFactory {
10
+ constructor(providers, systemContainerFactory, tenantContainerFactory, projectContainerFactoryFactory, projectConfigResolver, tenantGraphQLHandlerFactory, systemGraphQLHandlerFactory) {
11
+ this.providers = providers;
12
+ this.systemContainerFactory = systemContainerFactory;
13
+ this.tenantContainerFactory = tenantContainerFactory;
14
+ this.projectContainerFactoryFactory = projectContainerFactoryFactory;
15
+ this.projectConfigResolver = projectConfigResolver;
16
+ this.tenantGraphQLHandlerFactory = tenantGraphQLHandlerFactory;
17
+ this.systemGraphQLHandlerFactory = systemGraphQLHandlerFactory;
18
+ }
19
+ create({ config, slug }) {
20
+ return new dic_1.Builder({})
21
+ .addService('slug', () => slug)
22
+ .addService('providers', () => this.providers)
23
+ .addService('tenantConnection', () => new database_1.Connection(config.db, {}))
24
+ .addService('projectSchemaResolver', () => new project_1.ProjectSchemaResolverProxy())
25
+ .addService('projectInitializer', () => new project_1.ProjectInitializerProxy())
26
+ .addService('tenantContainer', ({ tenantConnection, projectSchemaResolver, projectInitializer }) => {
27
+ const encryptionKey = config.secrets.encryptionKey
28
+ ? (0, crypto_1.createSecretKey)(Buffer.from(config.secrets.encryptionKey, 'hex'))
29
+ : undefined;
30
+ const cryptoWrapper = new engine_http_1.CryptoWrapper(encryptionKey);
31
+ return this.tenantContainerFactory.create({
32
+ connection: tenantConnection,
33
+ mailOptions: config.mailer,
34
+ tenantCredentials: config.credentials,
35
+ projectInitializer,
36
+ projectSchemaResolver,
37
+ cryptoProviders: {
38
+ decrypt: cryptoWrapper.decrypt.bind(cryptoWrapper),
39
+ encrypt: cryptoWrapper.encrypt.bind(cryptoWrapper),
40
+ },
41
+ });
42
+ })
43
+ .addService('tenantDatabase', ({ tenantContainer }) => tenantContainer.databaseContext)
44
+ .addService('identityFetcher', ({ tenantContainer: { identityFetcher } }) => identityFetcher)
45
+ .addService('systemContainer', ({ identityFetcher }) => this.systemContainerFactory.create({ identityFetcher }))
46
+ .addService('schemaVersionBuilder', ({ systemContainer }) => systemContainer.schemaVersionBuilder)
47
+ .addService('projectContainerFactory', ({ schemaVersionBuilder }) => this.projectContainerFactoryFactory.create(schemaVersionBuilder))
48
+ .addService('tenantProjectManager', ({ tenantContainer }) => tenantContainer.projectManager)
49
+ .addService('projectContainerResolver', ({ projectContainerFactory, tenantProjectManager, systemContainer, tenantContainer }) => new project_1.ProjectContainerResolver(projectContainerFactory, this.projectConfigResolver, tenantProjectManager, systemContainer.projectInitializer, tenantContainer.databaseContext, config))
50
+ .setupService('projectSchemaResolver', (it, { projectContainerResolver, schemaVersionBuilder }) => {
51
+ it.setResolver(new project_1.ProjectSchemaResolver(projectContainerResolver, schemaVersionBuilder));
52
+ })
53
+ .setupService('projectInitializer', (it, { projectContainerResolver }) => {
54
+ it.setInitializer(new project_1.ProjectInitializer(projectContainerResolver));
55
+ })
56
+ .addService('tenantGraphQLHandler', ({ tenantContainer }) => this.tenantGraphQLHandlerFactory.create(tenantContainer.resolvers))
57
+ .addService('systemGraphQLHandler', ({ systemContainer }) => this.systemGraphQLHandlerFactory.create(systemContainer.systemResolversFactory))
58
+ .addService('authenticator', ({ tenantDatabase, tenantContainer }) => new engine_http_1.Authenticator(tenantDatabase, tenantContainer.apiKeyManager))
59
+ .build()
60
+ .pick('projectContainerResolver', 'projectSchemaResolver', 'projectInitializer', 'systemContainer', 'systemGraphQLHandler', 'tenantContainer', 'tenantDatabase', 'authenticator', 'tenantGraphQLHandler', 'slug');
61
+ }
62
+ }
63
+ exports.ProjectGroupContainerFactory = ProjectGroupContainerFactory;
64
+ //# sourceMappingURL=ProjectGroupContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectGroupContainer.js","sourceRoot":"","sources":["../../../src/projectGroup/ProjectGroupContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { TenantConfigResolver } from '../config/tenantConfigResolver';
2
+ import { ProjectGroupContainer, ProjectGroupContainerResolver as ProjectGroupContainerResolverInterface } from '@contember/engine-http';
3
+ import { ProjectGroupContainerFactory } from './ProjectGroupContainer';
4
+ export declare class ProjectGroupContainerResolver implements ProjectGroupContainerResolverInterface {
5
+ private readonly configResolver;
6
+ private readonly containerFactory;
7
+ private containers;
8
+ readonly onCreate: ((container: ProjectGroupContainer, slug: string | undefined) => void | (() => void))[];
9
+ constructor(configResolver: TenantConfigResolver, containerFactory: ProjectGroupContainerFactory);
10
+ getProjectGroupContainer(slug: string | undefined, config?: any): Promise<ProjectGroupContainer>;
11
+ }
12
+ //# sourceMappingURL=ProjectGroupContainerResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectGroupContainerResolver.d.ts","sourceRoot":"","sources":["../../../src/projectGroup/ProjectGroupContainerResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EACN,qBAAqB,EACrB,6BAA6B,IAAI,sCAAsC,EACvE,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAUtE,qBAAa,6BAA8B,YAAW,sCAAsC;IAM1F,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANlC,OAAO,CAAC,UAAU,CAA0D;IAE5E,SAAgB,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAK;gBAGpG,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,4BAA4B;IAGnD,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,GAAE,GAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAqBjH"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectGroupContainerResolver = void 0;
4
+ const engine_common_1 = require("@contember/engine-common");
5
+ const util_1 = require("util");
6
+ class ProjectGroupContainerResolver {
7
+ constructor(configResolver, containerFactory) {
8
+ this.configResolver = configResolver;
9
+ this.containerFactory = containerFactory;
10
+ this.containers = new engine_common_1.PromiseMap();
11
+ this.onCreate = [];
12
+ }
13
+ async getProjectGroupContainer(slug, config = {}) {
14
+ const existing = this.containers.get(slug);
15
+ if (existing) {
16
+ const existingAwaited = await existing;
17
+ if ((0, util_1.isDeepStrictEqual)(config, existingAwaited.inputConfig)) {
18
+ return existingAwaited.container;
19
+ }
20
+ existingAwaited.cleanups.forEach(it => it());
21
+ this.containers.delete(slug);
22
+ }
23
+ return (await this.containers.fetch(slug, async (slug) => {
24
+ const container = this.containerFactory.create({
25
+ config: this.configResolver(slug, config),
26
+ slug,
27
+ });
28
+ const cleanups = this.onCreate.map(it => it(container, slug) || (() => null));
29
+ // eslint-disable-next-line no-console
30
+ await container.tenantContainer.migrationsRunner.run(console.log);
31
+ return { container, inputConfig: config, cleanups };
32
+ })).container;
33
+ }
34
+ }
35
+ exports.ProjectGroupContainerResolver = ProjectGroupContainerResolver;
36
+ //# sourceMappingURL=ProjectGroupContainerResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectGroupContainerResolver.js","sourceRoot":"","sources":["../../../src/projectGroup/ProjectGroupContainerResolver.ts"],"names":[],"mappings":";;;AAMA,4DAAqD;AACrD,+BAAwC;AAQxC,MAAa,6BAA6B;IAKzC,YACkB,cAAoC,EACpC,gBAA8C;QAD9C,mBAAc,GAAd,cAAc,CAAsB;QACpC,qBAAgB,GAAhB,gBAAgB,CAA8B;QANxD,eAAU,GAAG,IAAI,0BAAU,EAAyC,CAAA;QAE5D,aAAQ,GAA4F,EAAE,CAAA;IAKnH,CAAC;IAEG,KAAK,CAAC,wBAAwB,CAAC,IAAwB,EAAE,SAAc,EAAE;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE;YACb,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAA;YACtC,IAAI,IAAA,wBAAiB,EAAC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE;gBAC3D,OAAO,eAAe,CAAC,SAAS,CAAA;aAChC;YACD,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;SAC5B;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC9C,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;gBACzC,IAAI;aACJ,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YAC7E,sCAAsC;YACtC,MAAM,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACjE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACpD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACd,CAAC;CACD;AA/BD,sEA+BC"}
package/dist/src/start.js CHANGED
@@ -82,38 +82,39 @@ const createServerTerminator = () => {
82
82
  configSources.push({ type: configType, data: envValue });
83
83
  }
84
84
  }
85
- const { config, projectConfigResolver } = await (0, index_1.readConfig)(configSources, configProcessors);
85
+ const { serverConfig, projectConfigResolver, tenantConfigResolver } = await (0, index_1.readConfig)(configSources, configProcessors);
86
86
  if (process.argv[2] === 'validate') {
87
87
  process.exit(0);
88
88
  }
89
- 'sentry' in config.server.logging && (0, utils_1.initSentry)((_a = config.server.logging.sentry) === null || _a === void 0 ? void 0 : _a.dsn);
90
- const workerConfig = config.server.workerCount || 1;
89
+ 'sentry' in serverConfig.logging && (0, utils_1.initSentry)((_a = serverConfig.logging.sentry) === null || _a === void 0 ? void 0 : _a.dsn);
90
+ const workerConfig = serverConfig.workerCount || 1;
91
91
  const workerCount = workerConfig === 'auto' ? os_1.default.cpus().length : Number(workerConfig);
92
92
  const isClusterMode = workerCount > 1;
93
93
  const processType = (0, utils_1.getClusterProcessType)(isClusterMode);
94
94
  const container = (0, index_1.createContainer)({
95
95
  debugMode: isDebug,
96
- config,
96
+ serverConfig,
97
97
  projectConfigResolver,
98
+ tenantConfigResolver,
98
99
  plugins,
99
100
  processType,
100
101
  version,
101
102
  });
102
103
  let initializedProjects = [];
103
104
  if (cluster_1.default.isMaster) {
104
- const monitoringPort = config.server.monitoringPort;
105
+ const monitoringPort = serverConfig.monitoringPort;
105
106
  const terminator = createServerTerminator();
106
107
  terminator.push(container.monitoringKoa.listen(monitoringPort, () => {
107
108
  // eslint-disable-next-line no-console
108
109
  console.log(`Monitoring running on http://localhost:${monitoringPort}`);
109
110
  }));
110
- if (!config.server.projectGroup) {
111
+ if (!serverConfig.projectGroup) {
111
112
  initializedProjects = await container.initializer.initialize();
112
113
  }
113
114
  }
114
- const port = config.server.port;
115
+ const port = serverConfig.port;
115
116
  const printStarted = () => {
116
- if (config.server.projectGroup) {
117
+ if (serverConfig.projectGroup) {
117
118
  // eslint-disable-next-line no-console
118
119
  console.log('Contember Cloud running');
119
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}