@twin.org/engine-server 0.0.3-next.50 → 0.0.3-next.52

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.
@@ -169,7 +169,7 @@ export class EngineServer {
169
169
  }
170
170
  /**
171
171
  * Start the engine server.
172
- * @returns Nothing.
172
+ * @returns A promise that resolves when the server has started and is ready to accept requests.
173
173
  */
174
174
  async start() {
175
175
  await this._engineCore.start();
@@ -179,7 +179,7 @@ export class EngineServer {
179
179
  }
180
180
  /**
181
181
  * Stop the engine server.
182
- * @returns Nothing.
182
+ * @returns A promise that resolves when the server has stopped and all connections are closed.
183
183
  */
184
184
  async stop() {
185
185
  await ContextIdStore.run(this._engineCore.getContextIds() ?? {}, async () => {
@@ -193,6 +193,7 @@ export class EngineServer {
193
193
  }
194
194
  /**
195
195
  * Starts the web server.
196
+ * @returns A promise that resolves when the web server is built and listening.
196
197
  * @internal
197
198
  */
198
199
  async startWebServer() {
@@ -245,6 +246,7 @@ export class EngineServer {
245
246
  * @param typeKey The key for the default types.
246
247
  * @param module The module containing the route generator.
247
248
  * @param method The method to generate the routes.
249
+ * @returns A promise that resolves when all REST routes for the type have been added.
248
250
  * @internal
249
251
  */
250
252
  async initialiseRestTypeRoute(routes, typeKey, module, method) {
@@ -277,6 +279,7 @@ export class EngineServer {
277
279
  * @param typeKey The key for the default types.
278
280
  * @param module The module containing the generator.
279
281
  * @param method The method to call on the module.
282
+ * @returns A promise that resolves when all socket routes for the type have been added.
280
283
  * @internal
281
284
  */
282
285
  async initialiseSocketTypeRoute(routes, typeKey, module, method) {
@@ -1 +1 @@
1
- {"version":3,"file":"engineServer.js","sourceRoot":"","sources":["../../src/engineServer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tMimeTypeProcessorFactory,\n\tRestRouteProcessorFactory,\n\tSocketRouteProcessorFactory,\n\ttype IRestRoute,\n\ttype ISocketRoute,\n\ttype IWebServer\n} from \"@twin.org/api-models\";\nimport { FastifyWebServer } from \"@twin.org/api-server-fastify\";\nimport { ContextIdStore } from \"@twin.org/context\";\nimport { Guards, Is, StringHelper } from \"@twin.org/core\";\nimport type { IEngineCore, IEngineCoreTypeConfig, IEngineServer } from \"@twin.org/engine-models\";\nimport {\n\tRestRouteProcessorType,\n\tSocketRouteProcessorType,\n\ttype IEngineServerConfig\n} from \"@twin.org/engine-server-types\";\nimport { ModuleHelper } from \"@twin.org/modules\";\nimport { nameof } from \"@twin.org/nameof\";\nimport serverRestRouteGenerators from \"./data/serverRestRouteGenerators.json\" with { type: \"json\" };\nimport serverSocketRouteGenerators from \"./data/serverSocketRouteGenerators.json\" with { type: \"json\" };\nimport serverTypeInitialisers from \"./data/serverTypeInitialisers.json\" with { type: \"json\" };\n\n/**\n * Server for the engine.\n */\nexport class EngineServer<\n\tT extends IEngineServerConfig = IEngineServerConfig\n> implements IEngineServer {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<EngineServer>();\n\n\t/**\n\t * The engine.\n\t * @internal\n\t */\n\tprivate readonly _engineCore: IEngineCore<T>;\n\n\t/**\n\t * The REST route generators.\n\t * @internal\n\t */\n\tprivate readonly _restRouteGenerators: {\n\t\ttype: string;\n\t\tmodule: string;\n\t\tmethod: string;\n\t}[];\n\n\t/**\n\t * The socket route generators.\n\t * @internal\n\t */\n\tprivate readonly _socketRouteGenerators: {\n\t\ttype: string;\n\t\tmodule: string;\n\t\tmethod: string;\n\t}[];\n\n\t/**\n\t * The web server.\n\t * @internal\n\t */\n\tprivate _webServer?: IWebServer<unknown>;\n\n\t/**\n\t * The REST routes for the application.\n\t * @internal\n\t */\n\tprivate _restRoutes: IRestRoute[];\n\n\t/**\n\t * The Socket routes for the application.\n\t * @internal\n\t */\n\tprivate _socketRoutes: ISocketRoute[];\n\n\t/**\n\t * Create a new instance of EngineServer.\n\t * @param options The options for the engine.\n\t * @param options.engineCore The engine core to serve from.\n\t */\n\tconstructor(options: { engineCore: IEngineCore<T> }) {\n\t\tGuards.object(EngineServer.CLASS_NAME, nameof(options), options);\n\t\tGuards.object(EngineServer.CLASS_NAME, nameof(options.engineCore), options.engineCore);\n\n\t\tthis._engineCore = options.engineCore;\n\t\tthis._restRouteGenerators = [];\n\t\tthis._socketRouteGenerators = [];\n\t\tthis._restRoutes = [];\n\t\tthis._socketRoutes = [];\n\n\t\tconst coreConfig = this._engineCore.getConfig();\n\n\t\tif (!Is.arrayValue(coreConfig.types.restRouteProcessor)) {\n\t\t\tcoreConfig.types.restRouteProcessor = [];\n\n\t\t\tif (!coreConfig.silent) {\n\t\t\t\tcoreConfig.types.restRouteProcessor.push({\n\t\t\t\t\ttype: RestRouteProcessorType.Logging,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tincludeBody: coreConfig.debug\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tcoreConfig.types.restRouteProcessor.push({\n\t\t\t\ttype: RestRouteProcessorType.RestRoute,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tincludeErrorStack: coreConfig.debug\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (!Is.arrayValue(coreConfig.types.socketRouteProcessor)) {\n\t\t\tcoreConfig.types.socketRouteProcessor = [];\n\n\t\t\tif (!coreConfig.silent) {\n\t\t\t\tcoreConfig.types.socketRouteProcessor.push({\n\t\t\t\t\ttype: SocketRouteProcessorType.Logging,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tincludeBody: coreConfig.debug\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tcoreConfig.types.socketRouteProcessor.push({\n\t\t\t\ttype: SocketRouteProcessorType.SocketRoute,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tincludeErrorStack: coreConfig.debug\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.addServerTypeInitialisers();\n\t\tthis.addServerRestRouteGenerators();\n\t\tthis.addServerSocketRouteGenerators();\n\t}\n\n\t/**\n\t * Add a REST route generator.\n\t * @param type The type to add the generator for.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t */\n\tpublic addRestRouteGenerator(type: string, module: string, method: string): void {\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(type), type);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(module), module);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(method), method);\n\n\t\tconst currentIndex = this._restRouteGenerators.findIndex(r => r.type === type);\n\t\tif (currentIndex >= 0) {\n\t\t\tthis._restRouteGenerators[currentIndex].module = module;\n\t\t\tthis._restRouteGenerators[currentIndex].method = method;\n\t\t} else {\n\t\t\tthis._restRouteGenerators.push({\n\t\t\t\ttype,\n\t\t\t\tmodule,\n\t\t\t\tmethod\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Add a socket route generator.\n\t * @param type The type to add the generator for.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t */\n\tpublic addSocketRouteGenerator(type: string, module: string, method: string): void {\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(type), type);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(module), module);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(method), method);\n\n\t\tconst currentIndex = this._socketRouteGenerators.findIndex(s => s.type === type);\n\t\tif (currentIndex >= 0) {\n\t\t\tthis._socketRouteGenerators[currentIndex].module = module;\n\t\t\tthis._socketRouteGenerators[currentIndex].method = method;\n\t\t} else {\n\t\t\tthis._socketRouteGenerators.push({\n\t\t\t\ttype,\n\t\t\t\tmodule,\n\t\t\t\tmethod\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get the built REST routes.\n\t * @returns The REST routes.\n\t */\n\tpublic getRestRoutes(): IRestRoute[] {\n\t\treturn this._restRoutes;\n\t}\n\n\t/**\n\t * Get the built socket routes.\n\t * @returns The socket routes.\n\t */\n\tpublic getSocketRoutes(): ISocketRoute[] {\n\t\treturn this._socketRoutes;\n\t}\n\n\t/**\n\t * Start the engine server.\n\t * @returns Nothing.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tawait this._engineCore.start();\n\n\t\tawait ContextIdStore.run(this._engineCore.getContextIds() ?? {}, async () => {\n\t\t\tawait this.startWebServer();\n\t\t});\n\t}\n\n\t/**\n\t * Stop the engine server.\n\t * @returns Nothing.\n\t */\n\tpublic async stop(): Promise<void> {\n\t\tawait ContextIdStore.run(this._engineCore.getContextIds() ?? {}, async () => {\n\t\t\tif (this._webServer) {\n\t\t\t\tconst webServer = this._webServer;\n\t\t\t\tthis._webServer = undefined;\n\t\t\t\tawait webServer.stop();\n\t\t\t}\n\t\t});\n\n\t\tawait this._engineCore.stop();\n\t}\n\n\t/**\n\t * Starts the web server.\n\t * @internal\n\t */\n\tprivate async startWebServer(): Promise<void> {\n\t\tthis._restRoutes = await this.buildRestRoutes();\n\t\tthis._socketRoutes = await this.buildSocketRoutes();\n\t\tconst restRouteProcessors = RestRouteProcessorFactory.names().map(n =>\n\t\t\tRestRouteProcessorFactory.get(n)\n\t\t);\n\t\tconst socketRouteProcessors = SocketRouteProcessorFactory.names().map(n =>\n\t\t\tSocketRouteProcessorFactory.get(n)\n\t\t);\n\t\tconst mimeTypeProcessors = MimeTypeProcessorFactory.names().map(n =>\n\t\t\tMimeTypeProcessorFactory.get(n)\n\t\t);\n\n\t\tconst coreConfig = this._engineCore.getConfig();\n\t\tconst loggingComponentType = coreConfig.silent\n\t\t\t? undefined\n\t\t\t: this._engineCore.getRegisteredLoggerType(nameof(FastifyWebServer));\n\t\tconst hostingComponentType =\n\t\t\tthis._engineCore.getRegisteredInstanceTypeOptional(\"hostingComponent\");\n\n\t\tthis._webServer = new FastifyWebServer({\n\t\t\tloggingComponentType,\n\t\t\thostingComponentType,\n\t\t\tmimeTypeProcessors\n\t\t});\n\n\t\tawait this._engineCore.addRegisteredComponent(\"webServer\", this._webServer);\n\n\t\tawait this._webServer.build(\n\t\t\trestRouteProcessors,\n\t\t\tthis._restRoutes,\n\t\t\tsocketRouteProcessors,\n\t\t\tthis._socketRoutes,\n\t\t\tcoreConfig.web\n\t\t);\n\t\tawait this._webServer.start();\n\t}\n\n\t/**\n\t * The REST routes for the application.\n\t * @returns The REST routes for the application.\n\t * @internal\n\t */\n\tprivate async buildRestRoutes(): Promise<IRestRoute[]> {\n\t\tconst routes: IRestRoute[] = [];\n\n\t\tfor (const { type, module, method } of this._restRouteGenerators) {\n\t\t\tawait this.initialiseRestTypeRoute(routes, type, module, method);\n\t\t}\n\n\t\treturn routes;\n\t}\n\n\t/**\n\t * The socket routes for the application.\n\t * @returns The socket routes for the application.\n\t * @internal\n\t */\n\tprivate async buildSocketRoutes(): Promise<ISocketRoute[]> {\n\t\tconst routes: ISocketRoute[] = [];\n\n\t\tfor (const { type, module, method } of this._socketRouteGenerators) {\n\t\t\tawait this.initialiseSocketTypeRoute(routes, type, module, method);\n\t\t}\n\n\t\treturn routes;\n\t}\n\n\t/**\n\t * Initialise the rest routes from connector.\n\t * @param routes The routes to add to.\n\t * @param typeKey The key for the default types.\n\t * @param module The module containing the route generator.\n\t * @param method The method to generate the routes.\n\t * @internal\n\t */\n\tprivate async initialiseRestTypeRoute(\n\t\troutes: IRestRoute[],\n\t\ttypeKey: string,\n\t\tmodule: string,\n\t\tmethod: string\n\t): Promise<void> {\n\t\tconst typeConfig: IEngineCoreTypeConfig[] | undefined = this._engineCore.getTypeConfig(typeKey);\n\n\t\tif (Is.arrayValue(typeConfig)) {\n\t\t\tconst generateRoutes = await ModuleHelper.getModuleEntry<\n\t\t\t\t(baseRouteName: string, componentName: string, options?: unknown) => IRestRoute[]\n\t\t\t>(module, method);\n\n\t\t\tfor (let i = 0; i < typeConfig.length; i++) {\n\t\t\t\tconst restPath = typeConfig[i].restPath;\n\t\t\t\tconst restOptions = typeConfig[i].restOptions;\n\n\t\t\t\tif (Is.string(restPath)) {\n\t\t\t\t\tconst serviceType =\n\t\t\t\t\t\ttypeConfig[i].overrideInstanceType ??\n\t\t\t\t\t\tthis._engineCore.getRegisteredInstanceType(typeKey);\n\t\t\t\t\tif (Is.stringValue(serviceType)) {\n\t\t\t\t\t\tconst generatedRoutes = generateRoutes(restPath, serviceType, restOptions);\n\t\t\t\t\t\tfor (const route of generatedRoutes) {\n\t\t\t\t\t\t\t// Don't strip trailing slashes from the root path.\n\t\t\t\t\t\t\tif (Is.stringValue(route.path) && route.path.length > 1) {\n\t\t\t\t\t\t\t\troute.path = StringHelper.trimTrailingSlashes(route.path);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\troutes.push(...generatedRoutes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialise the socket routes from connector.\n\t * @param routes The routes to add to.\n\t * @param typeKey The key for the default types.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t * @internal\n\t */\n\tprivate async initialiseSocketTypeRoute(\n\t\troutes: ISocketRoute[],\n\t\ttypeKey: string,\n\t\tmodule: string,\n\t\tmethod: string\n\t): Promise<void> {\n\t\tconst typeConfig: IEngineCoreTypeConfig[] | undefined = this._engineCore.getTypeConfig(typeKey);\n\n\t\tif (Is.arrayValue(typeConfig)) {\n\t\t\tconst generateRoutes = await ModuleHelper.getModuleEntry<\n\t\t\t\t(baseRouteName: string, componentName: string, options?: unknown) => ISocketRoute[]\n\t\t\t>(module, method);\n\n\t\t\tfor (let i = 0; i < typeConfig.length; i++) {\n\t\t\t\tconst socketPath = typeConfig[i].socketPath;\n\t\t\t\tconst socketOptions = typeConfig[i].socketOptions;\n\t\t\t\tif (Is.string(socketPath)) {\n\t\t\t\t\tconst serviceType =\n\t\t\t\t\t\ttypeConfig[i].overrideInstanceType ??\n\t\t\t\t\t\tthis._engineCore.getRegisteredInstanceType(typeKey);\n\t\t\t\t\tif (Is.stringValue(serviceType)) {\n\t\t\t\t\t\troutes.push(...generateRoutes(socketPath, serviceType, socketOptions));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add the server type initializers.\n\t * @internal\n\t */\n\tprivate addServerTypeInitialisers(): void {\n\t\tfor (const initializer of serverTypeInitialisers) {\n\t\t\tthis._engineCore.addTypeInitialiser(initializer.type, initializer.module, initializer.method);\n\t\t}\n\t}\n\n\t/**\n\t * Add the server REST route generators.\n\t * @internal\n\t */\n\tprivate addServerRestRouteGenerators(): void {\n\t\tfor (const generator of serverRestRouteGenerators) {\n\t\t\tthis.addRestRouteGenerator(generator.type, generator.module, generator.method);\n\t\t}\n\t}\n\n\t/**\n\t * Add the server socket route generators.\n\t * @internal\n\t */\n\tprivate addServerSocketRouteGenerators(): void {\n\t\tfor (const generator of serverSocketRouteGenerators) {\n\t\t\tthis.addSocketRouteGenerator(generator.type, generator.module, generator.method);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"engineServer.js","sourceRoot":"","sources":["../../src/engineServer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tMimeTypeProcessorFactory,\n\tRestRouteProcessorFactory,\n\tSocketRouteProcessorFactory,\n\ttype IRestRoute,\n\ttype ISocketRoute,\n\ttype IWebServer\n} from \"@twin.org/api-models\";\nimport { FastifyWebServer } from \"@twin.org/api-server-fastify\";\nimport { ContextIdStore } from \"@twin.org/context\";\nimport { Guards, Is, StringHelper } from \"@twin.org/core\";\nimport type { IEngineCore, IEngineCoreTypeConfig, IEngineServer } from \"@twin.org/engine-models\";\nimport {\n\tRestRouteProcessorType,\n\tSocketRouteProcessorType,\n\ttype IEngineServerConfig\n} from \"@twin.org/engine-server-types\";\nimport { ModuleHelper } from \"@twin.org/modules\";\nimport { nameof } from \"@twin.org/nameof\";\nimport serverRestRouteGenerators from \"./data/serverRestRouteGenerators.json\" with { type: \"json\" };\nimport serverSocketRouteGenerators from \"./data/serverSocketRouteGenerators.json\" with { type: \"json\" };\nimport serverTypeInitialisers from \"./data/serverTypeInitialisers.json\" with { type: \"json\" };\n\n/**\n * Server for the engine.\n */\nexport class EngineServer<\n\tT extends IEngineServerConfig = IEngineServerConfig\n> implements IEngineServer {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<EngineServer>();\n\n\t/**\n\t * The engine.\n\t * @internal\n\t */\n\tprivate readonly _engineCore: IEngineCore<T>;\n\n\t/**\n\t * The REST route generators.\n\t * @internal\n\t */\n\tprivate readonly _restRouteGenerators: {\n\t\ttype: string;\n\t\tmodule: string;\n\t\tmethod: string;\n\t}[];\n\n\t/**\n\t * The socket route generators.\n\t * @internal\n\t */\n\tprivate readonly _socketRouteGenerators: {\n\t\ttype: string;\n\t\tmodule: string;\n\t\tmethod: string;\n\t}[];\n\n\t/**\n\t * The web server.\n\t * @internal\n\t */\n\tprivate _webServer?: IWebServer<unknown>;\n\n\t/**\n\t * The REST routes for the application.\n\t * @internal\n\t */\n\tprivate _restRoutes: IRestRoute[];\n\n\t/**\n\t * The Socket routes for the application.\n\t * @internal\n\t */\n\tprivate _socketRoutes: ISocketRoute[];\n\n\t/**\n\t * Create a new instance of EngineServer.\n\t * @param options The options for the engine.\n\t * @param options.engineCore The engine core to serve from.\n\t */\n\tconstructor(options: { engineCore: IEngineCore<T> }) {\n\t\tGuards.object(EngineServer.CLASS_NAME, nameof(options), options);\n\t\tGuards.object(EngineServer.CLASS_NAME, nameof(options.engineCore), options.engineCore);\n\n\t\tthis._engineCore = options.engineCore;\n\t\tthis._restRouteGenerators = [];\n\t\tthis._socketRouteGenerators = [];\n\t\tthis._restRoutes = [];\n\t\tthis._socketRoutes = [];\n\n\t\tconst coreConfig = this._engineCore.getConfig();\n\n\t\tif (!Is.arrayValue(coreConfig.types.restRouteProcessor)) {\n\t\t\tcoreConfig.types.restRouteProcessor = [];\n\n\t\t\tif (!coreConfig.silent) {\n\t\t\t\tcoreConfig.types.restRouteProcessor.push({\n\t\t\t\t\ttype: RestRouteProcessorType.Logging,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tincludeBody: coreConfig.debug\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tcoreConfig.types.restRouteProcessor.push({\n\t\t\t\ttype: RestRouteProcessorType.RestRoute,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tincludeErrorStack: coreConfig.debug\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (!Is.arrayValue(coreConfig.types.socketRouteProcessor)) {\n\t\t\tcoreConfig.types.socketRouteProcessor = [];\n\n\t\t\tif (!coreConfig.silent) {\n\t\t\t\tcoreConfig.types.socketRouteProcessor.push({\n\t\t\t\t\ttype: SocketRouteProcessorType.Logging,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tincludeBody: coreConfig.debug\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tcoreConfig.types.socketRouteProcessor.push({\n\t\t\t\ttype: SocketRouteProcessorType.SocketRoute,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tincludeErrorStack: coreConfig.debug\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis.addServerTypeInitialisers();\n\t\tthis.addServerRestRouteGenerators();\n\t\tthis.addServerSocketRouteGenerators();\n\t}\n\n\t/**\n\t * Add a REST route generator.\n\t * @param type The type to add the generator for.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t */\n\tpublic addRestRouteGenerator(type: string, module: string, method: string): void {\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(type), type);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(module), module);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(method), method);\n\n\t\tconst currentIndex = this._restRouteGenerators.findIndex(r => r.type === type);\n\t\tif (currentIndex >= 0) {\n\t\t\tthis._restRouteGenerators[currentIndex].module = module;\n\t\t\tthis._restRouteGenerators[currentIndex].method = method;\n\t\t} else {\n\t\t\tthis._restRouteGenerators.push({\n\t\t\t\ttype,\n\t\t\t\tmodule,\n\t\t\t\tmethod\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Add a socket route generator.\n\t * @param type The type to add the generator for.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t */\n\tpublic addSocketRouteGenerator(type: string, module: string, method: string): void {\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(type), type);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(module), module);\n\t\tGuards.stringValue(EngineServer.CLASS_NAME, nameof(method), method);\n\n\t\tconst currentIndex = this._socketRouteGenerators.findIndex(s => s.type === type);\n\t\tif (currentIndex >= 0) {\n\t\t\tthis._socketRouteGenerators[currentIndex].module = module;\n\t\t\tthis._socketRouteGenerators[currentIndex].method = method;\n\t\t} else {\n\t\t\tthis._socketRouteGenerators.push({\n\t\t\t\ttype,\n\t\t\t\tmodule,\n\t\t\t\tmethod\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Get the built REST routes.\n\t * @returns The REST routes.\n\t */\n\tpublic getRestRoutes(): IRestRoute[] {\n\t\treturn this._restRoutes;\n\t}\n\n\t/**\n\t * Get the built socket routes.\n\t * @returns The socket routes.\n\t */\n\tpublic getSocketRoutes(): ISocketRoute[] {\n\t\treturn this._socketRoutes;\n\t}\n\n\t/**\n\t * Start the engine server.\n\t * @returns A promise that resolves when the server has started and is ready to accept requests.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tawait this._engineCore.start();\n\n\t\tawait ContextIdStore.run(this._engineCore.getContextIds() ?? {}, async () => {\n\t\t\tawait this.startWebServer();\n\t\t});\n\t}\n\n\t/**\n\t * Stop the engine server.\n\t * @returns A promise that resolves when the server has stopped and all connections are closed.\n\t */\n\tpublic async stop(): Promise<void> {\n\t\tawait ContextIdStore.run(this._engineCore.getContextIds() ?? {}, async () => {\n\t\t\tif (this._webServer) {\n\t\t\t\tconst webServer = this._webServer;\n\t\t\t\tthis._webServer = undefined;\n\t\t\t\tawait webServer.stop();\n\t\t\t}\n\t\t});\n\n\t\tawait this._engineCore.stop();\n\t}\n\n\t/**\n\t * Starts the web server.\n\t * @returns A promise that resolves when the web server is built and listening.\n\t * @internal\n\t */\n\tprivate async startWebServer(): Promise<void> {\n\t\tthis._restRoutes = await this.buildRestRoutes();\n\t\tthis._socketRoutes = await this.buildSocketRoutes();\n\t\tconst restRouteProcessors = RestRouteProcessorFactory.names().map(n =>\n\t\t\tRestRouteProcessorFactory.get(n)\n\t\t);\n\t\tconst socketRouteProcessors = SocketRouteProcessorFactory.names().map(n =>\n\t\t\tSocketRouteProcessorFactory.get(n)\n\t\t);\n\t\tconst mimeTypeProcessors = MimeTypeProcessorFactory.names().map(n =>\n\t\t\tMimeTypeProcessorFactory.get(n)\n\t\t);\n\n\t\tconst coreConfig = this._engineCore.getConfig();\n\t\tconst loggingComponentType = coreConfig.silent\n\t\t\t? undefined\n\t\t\t: this._engineCore.getRegisteredLoggerType(nameof(FastifyWebServer));\n\t\tconst hostingComponentType =\n\t\t\tthis._engineCore.getRegisteredInstanceTypeOptional(\"hostingComponent\");\n\n\t\tthis._webServer = new FastifyWebServer({\n\t\t\tloggingComponentType,\n\t\t\thostingComponentType,\n\t\t\tmimeTypeProcessors\n\t\t});\n\n\t\tawait this._engineCore.addRegisteredComponent(\"webServer\", this._webServer);\n\n\t\tawait this._webServer.build(\n\t\t\trestRouteProcessors,\n\t\t\tthis._restRoutes,\n\t\t\tsocketRouteProcessors,\n\t\t\tthis._socketRoutes,\n\t\t\tcoreConfig.web\n\t\t);\n\t\tawait this._webServer.start();\n\t}\n\n\t/**\n\t * The REST routes for the application.\n\t * @returns The REST routes for the application.\n\t * @internal\n\t */\n\tprivate async buildRestRoutes(): Promise<IRestRoute[]> {\n\t\tconst routes: IRestRoute[] = [];\n\n\t\tfor (const { type, module, method } of this._restRouteGenerators) {\n\t\t\tawait this.initialiseRestTypeRoute(routes, type, module, method);\n\t\t}\n\n\t\treturn routes;\n\t}\n\n\t/**\n\t * The socket routes for the application.\n\t * @returns The socket routes for the application.\n\t * @internal\n\t */\n\tprivate async buildSocketRoutes(): Promise<ISocketRoute[]> {\n\t\tconst routes: ISocketRoute[] = [];\n\n\t\tfor (const { type, module, method } of this._socketRouteGenerators) {\n\t\t\tawait this.initialiseSocketTypeRoute(routes, type, module, method);\n\t\t}\n\n\t\treturn routes;\n\t}\n\n\t/**\n\t * Initialise the rest routes from connector.\n\t * @param routes The routes to add to.\n\t * @param typeKey The key for the default types.\n\t * @param module The module containing the route generator.\n\t * @param method The method to generate the routes.\n\t * @returns A promise that resolves when all REST routes for the type have been added.\n\t * @internal\n\t */\n\tprivate async initialiseRestTypeRoute(\n\t\troutes: IRestRoute[],\n\t\ttypeKey: string,\n\t\tmodule: string,\n\t\tmethod: string\n\t): Promise<void> {\n\t\tconst typeConfig: IEngineCoreTypeConfig[] | undefined = this._engineCore.getTypeConfig(typeKey);\n\n\t\tif (Is.arrayValue(typeConfig)) {\n\t\t\tconst generateRoutes = await ModuleHelper.getModuleEntry<\n\t\t\t\t(baseRouteName: string, componentName: string, options?: unknown) => IRestRoute[]\n\t\t\t>(module, method);\n\n\t\t\tfor (let i = 0; i < typeConfig.length; i++) {\n\t\t\t\tconst restPath = typeConfig[i].restPath;\n\t\t\t\tconst restOptions = typeConfig[i].restOptions;\n\n\t\t\t\tif (Is.string(restPath)) {\n\t\t\t\t\tconst serviceType =\n\t\t\t\t\t\ttypeConfig[i].overrideInstanceType ??\n\t\t\t\t\t\tthis._engineCore.getRegisteredInstanceType(typeKey);\n\t\t\t\t\tif (Is.stringValue(serviceType)) {\n\t\t\t\t\t\tconst generatedRoutes = generateRoutes(restPath, serviceType, restOptions);\n\t\t\t\t\t\tfor (const route of generatedRoutes) {\n\t\t\t\t\t\t\t// Don't strip trailing slashes from the root path.\n\t\t\t\t\t\t\tif (Is.stringValue(route.path) && route.path.length > 1) {\n\t\t\t\t\t\t\t\troute.path = StringHelper.trimTrailingSlashes(route.path);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\troutes.push(...generatedRoutes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialise the socket routes from connector.\n\t * @param routes The routes to add to.\n\t * @param typeKey The key for the default types.\n\t * @param module The module containing the generator.\n\t * @param method The method to call on the module.\n\t * @returns A promise that resolves when all socket routes for the type have been added.\n\t * @internal\n\t */\n\tprivate async initialiseSocketTypeRoute(\n\t\troutes: ISocketRoute[],\n\t\ttypeKey: string,\n\t\tmodule: string,\n\t\tmethod: string\n\t): Promise<void> {\n\t\tconst typeConfig: IEngineCoreTypeConfig[] | undefined = this._engineCore.getTypeConfig(typeKey);\n\n\t\tif (Is.arrayValue(typeConfig)) {\n\t\t\tconst generateRoutes = await ModuleHelper.getModuleEntry<\n\t\t\t\t(baseRouteName: string, componentName: string, options?: unknown) => ISocketRoute[]\n\t\t\t>(module, method);\n\n\t\t\tfor (let i = 0; i < typeConfig.length; i++) {\n\t\t\t\tconst socketPath = typeConfig[i].socketPath;\n\t\t\t\tconst socketOptions = typeConfig[i].socketOptions;\n\t\t\t\tif (Is.string(socketPath)) {\n\t\t\t\t\tconst serviceType =\n\t\t\t\t\t\ttypeConfig[i].overrideInstanceType ??\n\t\t\t\t\t\tthis._engineCore.getRegisteredInstanceType(typeKey);\n\t\t\t\t\tif (Is.stringValue(serviceType)) {\n\t\t\t\t\t\troutes.push(...generateRoutes(socketPath, serviceType, socketOptions));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add the server type initializers.\n\t * @internal\n\t */\n\tprivate addServerTypeInitialisers(): void {\n\t\tfor (const initializer of serverTypeInitialisers) {\n\t\t\tthis._engineCore.addTypeInitialiser(initializer.type, initializer.module, initializer.method);\n\t\t}\n\t}\n\n\t/**\n\t * Add the server REST route generators.\n\t * @internal\n\t */\n\tprivate addServerRestRouteGenerators(): void {\n\t\tfor (const generator of serverRestRouteGenerators) {\n\t\t\tthis.addRestRouteGenerator(generator.type, generator.module, generator.method);\n\t\t}\n\t}\n\n\t/**\n\t * Add the server socket route generators.\n\t * @internal\n\t */\n\tprivate addServerSocketRouteGenerators(): void {\n\t\tfor (const generator of serverSocketRouteGenerators) {\n\t\t\tthis.addSocketRouteGenerator(generator.type, generator.module, generator.method);\n\t\t}\n\t}\n}\n"]}
@@ -43,12 +43,12 @@ export declare class EngineServer<T extends IEngineServerConfig = IEngineServerC
43
43
  getSocketRoutes(): ISocketRoute[];
44
44
  /**
45
45
  * Start the engine server.
46
- * @returns Nothing.
46
+ * @returns A promise that resolves when the server has started and is ready to accept requests.
47
47
  */
48
48
  start(): Promise<void>;
49
49
  /**
50
50
  * Stop the engine server.
51
- * @returns Nothing.
51
+ * @returns A promise that resolves when the server has stopped and all connections are closed.
52
52
  */
53
53
  stop(): Promise<void>;
54
54
  }
package/docs/changelog.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.52](https://github.com/iotaledger/twin-engine/compare/engine-server-v0.0.3-next.51...engine-server-v0.0.3-next.52) (2026-06-16)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * update test endpoints ([d7015fb](https://github.com/iotaledger/twin-engine/commit/d7015fb2cc90fc712fda75c04aaeff07836381fe))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/engine-core bumped from 0.0.3-next.51 to 0.0.3-next.52
16
+ * @twin.org/engine-models bumped from 0.0.3-next.51 to 0.0.3-next.52
17
+ * @twin.org/engine-server-types bumped from 0.0.3-next.51 to 0.0.3-next.52
18
+ * devDependencies
19
+ * @twin.org/engine bumped from 0.0.3-next.51 to 0.0.3-next.52
20
+
21
+ ## [0.0.3-next.51](https://github.com/iotaledger/twin-engine/compare/engine-server-v0.0.3-next.50...engine-server-v0.0.3-next.51) (2026-06-15)
22
+
23
+
24
+ ### Features
25
+
26
+ * memory entity storage prefix ([e85dd71](https://github.com/iotaledger/twin-engine/commit/e85dd7113943dea92dce46963d054e265d3b481a))
27
+
28
+
29
+ ### Dependencies
30
+
31
+ * The following workspace dependencies were updated
32
+ * dependencies
33
+ * @twin.org/engine-core bumped from 0.0.3-next.50 to 0.0.3-next.51
34
+ * @twin.org/engine-models bumped from 0.0.3-next.50 to 0.0.3-next.51
35
+ * @twin.org/engine-server-types bumped from 0.0.3-next.50 to 0.0.3-next.51
36
+ * devDependencies
37
+ * @twin.org/engine bumped from 0.0.3-next.50 to 0.0.3-next.51
38
+
3
39
  ## [0.0.3-next.50](https://github.com/iotaledger/twin-engine/compare/engine-server-v0.0.3-next.49...engine-server-v0.0.3-next.50) (2026-06-11)
4
40
 
5
41
 
@@ -156,7 +156,7 @@ Start the engine server.
156
156
 
157
157
  `Promise`\<`void`\>
158
158
 
159
- Nothing.
159
+ A promise that resolves when the server has started and is ready to accept requests.
160
160
 
161
161
  #### Implementation of
162
162
 
@@ -174,7 +174,7 @@ Stop the engine server.
174
174
 
175
175
  `Promise`\<`void`\>
176
176
 
177
- Nothing.
177
+ A promise that resolves when the server has stopped and all connections are closed.
178
178
 
179
179
  #### Implementation of
180
180
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/engine-server",
3
- "version": "0.0.3-next.50",
3
+ "version": "0.0.3-next.52",
4
4
  "description": "Server runtime that exposes engine components through REST and socket routes.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,9 +18,9 @@
18
18
  "@twin.org/api-server-fastify": "next",
19
19
  "@twin.org/context": "next",
20
20
  "@twin.org/core": "next",
21
- "@twin.org/engine-core": "0.0.3-next.50",
22
- "@twin.org/engine-models": "0.0.3-next.50",
23
- "@twin.org/engine-server-types": "0.0.3-next.50",
21
+ "@twin.org/engine-core": "0.0.3-next.52",
22
+ "@twin.org/engine-models": "0.0.3-next.52",
23
+ "@twin.org/engine-server-types": "0.0.3-next.52",
24
24
  "@twin.org/modules": "next",
25
25
  "@twin.org/nameof": "next"
26
26
  },