libmodulor 0.28.0 → 0.30.0

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 (189) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +3 -3
  3. package/dist/esm/apps/Helper/src/lib/layers/product.js +1 -1
  4. package/dist/esm/apps/Helper/src/lib/layers/project.js +7 -7
  5. package/dist/esm/apps/Helper/src/lib/layers/target.js +27 -11
  6. package/dist/esm/convention.d.ts +2 -0
  7. package/dist/esm/convention.js +1 -0
  8. package/dist/esm/dt/base/TBase.d.ts +2 -0
  9. package/dist/esm/dt/base/TBase.js +5 -0
  10. package/dist/esm/dt/base/TBoolean.d.ts +2 -0
  11. package/dist/esm/dt/base/TBoolean.js +3 -0
  12. package/dist/esm/dt/base/TInt.d.ts +2 -0
  13. package/dist/esm/dt/base/TInt.js +3 -0
  14. package/dist/esm/dt/base/TNumber.d.ts +2 -0
  15. package/dist/esm/dt/base/TNumber.js +3 -0
  16. package/dist/esm/dt/base/TObject.d.ts +2 -0
  17. package/dist/esm/dt/base/TObject.js +37 -0
  18. package/dist/esm/dt/final/TApiKey.d.ts +2 -0
  19. package/dist/esm/dt/final/TApiKey.js +3 -0
  20. package/dist/esm/dt/final/TDateISO8601.d.ts +2 -0
  21. package/dist/esm/dt/final/TDateISO8601.js +3 -0
  22. package/dist/esm/dt/final/TDomainName.d.ts +2 -0
  23. package/dist/esm/dt/final/TDomainName.js +3 -0
  24. package/dist/esm/dt/final/TEmail.d.ts +2 -0
  25. package/dist/esm/dt/final/TEmail.js +3 -0
  26. package/dist/esm/dt/final/TEncryptionKey.d.ts +2 -0
  27. package/dist/esm/dt/final/TEncryptionKey.js +3 -0
  28. package/dist/esm/dt/final/TFile.d.ts +2 -0
  29. package/dist/esm/dt/final/TFile.js +3 -0
  30. package/dist/esm/dt/final/TIPv4.d.ts +2 -0
  31. package/dist/esm/dt/final/TIPv4.js +3 -0
  32. package/dist/esm/dt/final/TIPv6.d.ts +2 -0
  33. package/dist/esm/dt/final/TIPv6.js +3 -0
  34. package/dist/esm/dt/final/TJWT.d.ts +2 -0
  35. package/dist/esm/dt/final/TJWT.js +3 -0
  36. package/dist/esm/dt/final/TPassword.d.ts +2 -0
  37. package/dist/esm/dt/final/TPassword.js +3 -0
  38. package/dist/esm/dt/final/TSSHPrivateKey.d.ts +2 -0
  39. package/dist/esm/dt/final/TSSHPrivateKey.js +3 -0
  40. package/dist/esm/dt/final/TTime.d.ts +2 -0
  41. package/dist/esm/dt/final/TTime.js +3 -0
  42. package/dist/esm/dt/final/TURL.d.ts +2 -0
  43. package/dist/esm/dt/final/TURL.js +3 -0
  44. package/dist/esm/dt/index.d.ts +1 -0
  45. package/dist/esm/dt/targets/json-schema.d.ts +36 -0
  46. package/dist/esm/error/funcs.d.ts +4 -0
  47. package/dist/esm/error/funcs.js +5 -1
  48. package/dist/esm/error/index.d.ts +1 -1
  49. package/dist/esm/error/index.js +1 -1
  50. package/dist/esm/i18n/locales/de.js +2 -0
  51. package/dist/esm/i18n/locales/en.js +2 -0
  52. package/dist/esm/i18n/locales/es.js +2 -0
  53. package/dist/esm/i18n/locales/fr.js +2 -0
  54. package/dist/esm/i18n/types.d.ts +1 -1
  55. package/dist/esm/index.d.ts +3 -0
  56. package/dist/esm/index.js +3 -0
  57. package/dist/esm/index.node-express.d.ts +2 -0
  58. package/dist/esm/index.node-express.js +1 -0
  59. package/dist/esm/index.node-hono.d.ts +2 -0
  60. package/dist/esm/index.node-hono.js +1 -0
  61. package/dist/esm/index.node-mcp-express.d.ts +3 -0
  62. package/dist/esm/index.node-mcp-express.js +2 -0
  63. package/dist/esm/index.node-mcp-hono.d.ts +3 -0
  64. package/dist/esm/index.node-mcp-hono.js +2 -0
  65. package/dist/esm/index.node-mcp.d.ts +3 -1
  66. package/dist/esm/index.node-mcp.js +3 -1
  67. package/dist/esm/product/manifest.d.ts +2 -0
  68. package/dist/esm/products/Helper/i18n.d.ts +2 -0
  69. package/dist/esm/std/impl/SimpleMapI18nManager.d.ts +1 -1
  70. package/dist/esm/std/impl/SimpleMapI18nManager.js +4 -2
  71. package/dist/esm/std/lib/settings.js +4 -5
  72. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +8 -2
  73. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +20 -9
  74. package/dist/esm/target/index.d.ts +2 -1
  75. package/dist/esm/target/index.js +1 -1
  76. package/dist/esm/target/lib/client/AuthDataStore.d.ts +5 -0
  77. package/dist/esm/target/lib/client/AuthDataStore.js +1 -0
  78. package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.d.ts +7 -0
  79. package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.js +20 -0
  80. package/dist/esm/target/lib/client/impl/MixedServerClientManager.d.ts +15 -0
  81. package/dist/esm/target/lib/client/impl/MixedServerClientManager.js +44 -0
  82. package/dist/esm/target/lib/json-schema/error.d.ts +3 -0
  83. package/dist/esm/target/lib/json-schema/error.js +14 -0
  84. package/dist/esm/target/lib/json-schema/input.d.ts +16 -0
  85. package/dist/esm/target/lib/json-schema/input.js +67 -0
  86. package/dist/esm/target/lib/json-schema/output.d.ts +19 -0
  87. package/dist/esm/target/lib/json-schema/output.js +128 -0
  88. package/dist/esm/target/lib/manifest.d.ts +32 -1
  89. package/dist/esm/target/lib/manifest.js +22 -1
  90. package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.d.ts +16 -0
  91. package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.js +54 -0
  92. package/dist/esm/target/lib/mcp-server/consts.d.ts +1 -0
  93. package/dist/esm/target/lib/mcp-server/consts.js +1 -0
  94. package/dist/esm/target/lib/mcp-server/funcs.d.ts +13 -0
  95. package/dist/esm/target/lib/mcp-server/funcs.js +84 -0
  96. package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.d.ts +14 -0
  97. package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.js +1 -0
  98. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.d.ts +5 -0
  99. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.js +18 -0
  100. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.d.ts +15 -0
  101. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.js +88 -0
  102. package/dist/esm/target/lib/mcp-server/http/express/types.d.ts +3 -0
  103. package/dist/esm/target/lib/mcp-server/http/express/types.js +1 -0
  104. package/dist/esm/target/lib/mcp-server/http/funcs.d.ts +6 -0
  105. package/dist/esm/target/lib/mcp-server/http/funcs.js +50 -0
  106. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.d.ts +5 -0
  107. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.js +18 -0
  108. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.d.ts +15 -0
  109. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.js +88 -0
  110. package/dist/esm/target/lib/mcp-server/http/hono/types.d.ts +3 -0
  111. package/dist/esm/target/lib/mcp-server/http/hono/types.js +1 -0
  112. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.d.ts +31 -0
  113. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.js +108 -0
  114. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.d.ts +7 -0
  115. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.js +36 -0
  116. package/dist/esm/target/lib/mcp-server/stdio/consts.d.ts +2 -0
  117. package/dist/esm/target/lib/mcp-server/stdio/consts.js +3 -0
  118. package/dist/esm/target/lib/mcp-server/stdio/funcs.d.ts +2 -0
  119. package/dist/esm/target/lib/mcp-server/stdio/funcs.js +10 -0
  120. package/dist/esm/target/lib/mcp-server/stdio/input.d.ts +10 -0
  121. package/dist/esm/target/lib/mcp-server/stdio/input.js +15 -0
  122. package/dist/esm/target/lib/mcp-server/types.d.ts +2 -0
  123. package/dist/esm/target/lib/mcp-server/types.js +1 -0
  124. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.d.ts +25 -0
  125. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +135 -0
  126. package/dist/esm/target/lib/openapi/funcs.d.ts +11 -0
  127. package/dist/esm/target/lib/openapi/funcs.js +148 -0
  128. package/dist/esm/target/lib/openapi/types.d.ts +98 -0
  129. package/dist/esm/target/lib/openapi/types.js +1 -0
  130. package/dist/esm/target/lib/rn/input.d.ts +3 -0
  131. package/dist/esm/target/lib/server/AuthCookieCreator.d.ts +2 -1
  132. package/dist/esm/target/lib/server/ServerBooter.d.ts +4 -2
  133. package/dist/esm/target/lib/server/ServerBooter.js +44 -11
  134. package/dist/esm/target/lib/server/ServerManager.d.ts +29 -9
  135. package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +10 -6
  136. package/dist/esm/target/lib/server/ServerRequestHandler.js +35 -25
  137. package/dist/esm/target/lib/server/consts.d.ts +4 -0
  138. package/dist/esm/target/lib/server/consts.js +26 -0
  139. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.d.ts +15 -0
  140. package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.js +55 -0
  141. package/dist/esm/target/lib/server-express/funcs.d.ts +2 -1
  142. package/dist/esm/target/lib/server-express/funcs.js +6 -5
  143. package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.d.ts +14 -0
  144. package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.js +46 -0
  145. package/dist/esm/target/lib/server-hono/funcs.d.ts +2 -1
  146. package/dist/esm/target/lib/server-hono/funcs.js +6 -3
  147. package/dist/esm/target/lib/shared.d.ts +5 -0
  148. package/dist/esm/target/lib/shared.js +3 -1
  149. package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +5 -1
  150. package/dist/esm/target/nextjs-server/NextJSServerManager.js +6 -0
  151. package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +12 -4
  152. package/dist/esm/target/node-express-server/NodeExpressServerManager.js +34 -15
  153. package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +11 -3
  154. package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +31 -12
  155. package/dist/esm/target/{node-mcp-server/NodeLocalStdioMCPServerManager.d.ts → node-mcp-server-stdio/NodeMCPStdioServerManager.d.ts} +12 -21
  156. package/dist/esm/target/node-mcp-server-stdio/NodeMCPStdioServerManager.js +108 -0
  157. package/dist/esm/testing/impl/newNodeAppTester.js +5 -0
  158. package/dist/esm/uc/UC.d.ts +2 -0
  159. package/dist/esm/uc/UC.js +16 -1
  160. package/dist/esm/uc/cardinality.d.ts +7 -0
  161. package/dist/esm/uc/cardinality.js +14 -0
  162. package/dist/esm/uc/examples.d.ts +2 -0
  163. package/dist/esm/uc/examples.js +12 -0
  164. package/dist/esm/uc/helpers/UCOutputReader.d.ts +2 -2
  165. package/dist/esm/uc/helpers/UCOutputReader.js +2 -2
  166. package/dist/esm/uc/index.d.ts +2 -0
  167. package/dist/esm/uc/index.js +2 -0
  168. package/dist/esm/uc/input-field.d.ts +3 -6
  169. package/dist/esm/uc/input-field.js +5 -21
  170. package/dist/esm/uc/metadata.d.ts +7 -0
  171. package/dist/esm/uc/metadata.js +10 -0
  172. package/dist/esm/uc/opi.d.ts +3 -1
  173. package/dist/esm/uc/opi.js +4 -1
  174. package/dist/esm/uc/output-field.d.ts +14 -1
  175. package/dist/esm/uc/output-field.js +11 -1
  176. package/dist/esm/uc/utils/ucHTTPContract.js +1 -1
  177. package/dist/esm/utils/bundling/funcs.js +1 -1
  178. package/dist/esm/utils/bundling/vite/plugin.d.ts +1 -1
  179. package/dist/esm/utils/http/types.d.ts +5 -0
  180. package/dist/esm/utils/index.d.ts +2 -1
  181. package/dist/esm/utils/index.js +1 -0
  182. package/dist/esm/utils/streams/funcs.d.ts +2 -0
  183. package/dist/esm/utils/streams/funcs.js +10 -0
  184. package/package.json +25 -14
  185. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +0 -183
  186. package/dist/esm/target/node-mcp-server/funcs.d.ts +0 -7
  187. package/dist/esm/target/node-mcp-server/funcs.js +0 -45
  188. package/dist/esm/target/node-mcp-server/types.d.ts +0 -19
  189. /package/dist/esm/{target/node-mcp-server/types.js → dt/targets/json-schema.js} +0 -0
@@ -26,12 +26,15 @@ export interface ServerRequestHandlerRes {
26
26
  redirect: (location: URL | URLPath) => Promise<void>;
27
27
  setCookie: (info: AuthCookieCreatorOutput) => Promise<void>;
28
28
  }
29
- interface Input<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> {
29
+ export interface ServerRequestHandlerInput<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> {
30
30
  appManifest: AppManifest;
31
+ dangerouslySkipAuthCheck?: boolean | undefined;
32
+ dangerouslySkipPubApiKeyCheck?: boolean | undefined;
31
33
  envelope: HTTPDataEnvelope;
32
34
  execOpts?: UCManagerExecServerOpts<OPI0, OPI1> | undefined;
33
35
  req: ServerRequestHandlerReq;
34
36
  res: ServerRequestHandlerRes;
37
+ skipSideEffects?: boolean | undefined;
35
38
  ucd: UCDef<I, OPI0, OPI1>;
36
39
  /**
37
40
  * It is not injected in the handler constructor because it must be the same as the one used in ServerManager.
@@ -41,15 +44,18 @@ interface Input<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBas
41
44
  ucManager: UCManager;
42
45
  }
43
46
  type BodylessStatus = 204 | 302;
44
- type Output<OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> = {
47
+ type Output<OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined> = ({
45
48
  body: undefined;
46
49
  status: BodylessStatus;
47
50
  } | {
48
51
  body: UCOutput<OPI0, OPI1> | object;
52
+ rawErr?: Error;
49
53
  status: Exclude<HTTPStatusNumber, BodylessStatus>;
54
+ }) & {
55
+ rawErr?: Error;
50
56
  };
51
57
  type S = Pick<ServerManagerSettings, 'server_cookies_name_auth' | 'server_public_api_key_header_name'>;
52
- export declare class ServerRequestHandler implements Worker<Input, Promise<Output>> {
58
+ export declare class ServerRequestHandler implements Worker<ServerRequestHandlerInput, Promise<Output>> {
53
59
  private authCookieCreator;
54
60
  private authenticationChecker;
55
61
  private customerFacingErrorBuilder;
@@ -58,11 +64,9 @@ export declare class ServerRequestHandler implements Worker<Input, Promise<Outpu
58
64
  private requestLogger;
59
65
  private settingsManager;
60
66
  private ucBuilder;
61
- private static AUTHORIZATION_HEADER_NAME;
62
- private static X_FORWARDED_PROTO_HEADER_NAME;
63
67
  constructor(authCookieCreator: AuthCookieCreator, authenticationChecker: AuthenticationChecker, customerFacingErrorBuilder: CustomerFacingErrorBuilder, publicApiKeyChecker: PublicApiKeyChecker, requestChecker: RequestChecker, requestLogger: RequestLogger, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder);
64
68
  s(): S;
65
- exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ appManifest, envelope, execOpts, req, res, ucd, ucManager, }: Input<I, OPI0, OPI1>): Promise<Output<OPI0, OPI1>>;
69
+ exec<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>({ appManifest, dangerouslySkipAuthCheck, dangerouslySkipPubApiKeyCheck, envelope, execOpts, req, res, skipSideEffects, ucd, ucManager, }: ServerRequestHandlerInput<I, OPI0, OPI1>): Promise<Output<OPI0, OPI1>>;
66
70
  private fill;
67
71
  private applySideEffects;
68
72
  private applyClearAuthSideEffect;
@@ -10,10 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
- var ServerRequestHandler_1;
14
13
  import { inject, injectable } from 'inversify';
15
- import { IllegalArgumentError, isEmptyJSON } from '../../../error/index.js';
14
+ import { IllegalArgumentError, isEmptyJSON, logDevWarning, } from '../../../error/index.js';
16
15
  import { UCBuilder, UCOutputReader, UCOutputSideEffectType, } from '../../../uc/index.js';
16
+ import { AUTHORIZATION_HEADER_NAME, X_FORWARDED_PROTO_HEADER_NAME, } from '../shared.js';
17
17
  import { AuthCookieCreator, } from './AuthCookieCreator.js';
18
18
  import { AuthenticationChecker } from './AuthenticationChecker.js';
19
19
  import { CustomerFacingErrorBuilder } from './CustomerFacingErrorBuilder.js';
@@ -21,7 +21,6 @@ import { PublicApiKeyChecker } from './PublicApiKeyChecker.js';
21
21
  import { RequestChecker } from './RequestChecker.js';
22
22
  import { RequestLogger } from './RequestLogger.js';
23
23
  let ServerRequestHandler = class ServerRequestHandler {
24
- static { ServerRequestHandler_1 = this; }
25
24
  authCookieCreator;
26
25
  authenticationChecker;
27
26
  customerFacingErrorBuilder;
@@ -30,8 +29,6 @@ let ServerRequestHandler = class ServerRequestHandler {
30
29
  requestLogger;
31
30
  settingsManager;
32
31
  ucBuilder;
33
- static AUTHORIZATION_HEADER_NAME = 'Authorization';
34
- static X_FORWARDED_PROTO_HEADER_NAME = 'X-Forwarded-Proto';
35
32
  constructor(authCookieCreator, authenticationChecker, customerFacingErrorBuilder, publicApiKeyChecker, requestChecker, requestLogger, settingsManager, ucBuilder) {
36
33
  this.authCookieCreator = authCookieCreator;
37
34
  this.authenticationChecker = authenticationChecker;
@@ -48,7 +45,7 @@ let ServerRequestHandler = class ServerRequestHandler {
48
45
  server_public_api_key_header_name: this.settingsManager.get()('server_public_api_key_header_name'),
49
46
  };
50
47
  }
51
- async exec({ appManifest, envelope, execOpts, req, res, ucd, ucManager, }) {
48
+ async exec({ appManifest, dangerouslySkipAuthCheck = false, dangerouslySkipPubApiKeyCheck = false, envelope, execOpts, req, res, skipSideEffects = false, ucd, ucManager, }) {
52
49
  try {
53
50
  const { bodyRaw, cookie, header, method, secure, url } = req;
54
51
  this.requestLogger.exec({
@@ -59,34 +56,46 @@ let ServerRequestHandler = class ServerRequestHandler {
59
56
  this.requestChecker.exec({
60
57
  secure,
61
58
  url,
62
- xForwardedProtoHeader: await header(ServerRequestHandler_1.X_FORWARDED_PROTO_HEADER_NAME),
59
+ xForwardedProtoHeader: await header(X_FORWARDED_PROTO_HEADER_NAME),
63
60
  });
64
61
  const { ext, sec } = ucd;
65
- await this.publicApiKeyChecker.exec({
66
- checkType: sec?.publicApiKeyCheckType,
67
- value: await header(this.s().server_public_api_key_header_name),
68
- });
62
+ if (dangerouslySkipPubApiKeyCheck) {
63
+ logDevWarning('Skipping pub api key check');
64
+ }
65
+ else {
66
+ await this.publicApiKeyChecker.exec({
67
+ checkType: sec?.publicApiKeyCheckType,
68
+ value: await header(this.s().server_public_api_key_header_name),
69
+ });
70
+ }
69
71
  const uc = this.ucBuilder.exec({
70
72
  appManifest,
71
73
  auth: null,
72
74
  def: ucd,
73
75
  });
74
- const { auth } = await this.authenticationChecker.exec({
75
- authCookie: await cookie(this.s().server_cookies_name_auth),
76
- authorizationHeader: await header(ServerRequestHandler_1.AUTHORIZATION_HEADER_NAME),
77
- uc,
78
- });
79
- if (auth) {
80
- uc.auth = auth;
76
+ if (dangerouslySkipAuthCheck) {
77
+ logDevWarning('Skipping auth check');
78
+ }
79
+ else {
80
+ const { auth } = await this.authenticationChecker.exec({
81
+ authCookie: await cookie(this.s().server_cookies_name_auth),
82
+ authorizationHeader: await header(AUTHORIZATION_HEADER_NAME),
83
+ uc,
84
+ });
85
+ if (auth) {
86
+ uc.auth = auth;
87
+ }
81
88
  }
82
89
  await this.fill(req, envelope, uc);
83
90
  const output = await ucManager.execServer(uc, execOpts);
84
- const { status } = await this.applySideEffects(res, ucd, output);
85
- if (status !== undefined) {
86
- return {
87
- body: undefined,
88
- status,
89
- };
91
+ if (!skipSideEffects) {
92
+ const { status } = await this.applySideEffects(res, ucd, output);
93
+ if (status !== undefined) {
94
+ return {
95
+ body: undefined,
96
+ status,
97
+ };
98
+ }
90
99
  }
91
100
  if (!output) {
92
101
  return {
@@ -106,6 +115,7 @@ let ServerRequestHandler = class ServerRequestHandler {
106
115
  });
107
116
  return {
108
117
  body: error.toObj(),
118
+ rawErr: err,
109
119
  status: error.httpStatus,
110
120
  };
111
121
  }
@@ -186,7 +196,7 @@ let ServerRequestHandler = class ServerRequestHandler {
186
196
  res.setCookie(output);
187
197
  }
188
198
  };
189
- ServerRequestHandler = ServerRequestHandler_1 = __decorate([
199
+ ServerRequestHandler = __decorate([
190
200
  injectable(),
191
201
  __param(0, inject(AuthCookieCreator)),
192
202
  __param(1, inject(AuthenticationChecker)),
@@ -1,5 +1,9 @@
1
+ import type { HTTPMethod } from '../../../dt/index.js';
2
+ import type { HTTPHeaderName } from '../../../utils/index.js';
1
3
  import type { ServerManagerSettings } from './ServerManager.js';
2
4
  /**
3
5
  * @see TARGET_DEFAULT_SERVER_CLIENT_MANAGER_SETTINGS
4
6
  */
5
7
  export declare const TARGET_DEFAULT_SERVER_MANAGER_SETTINGS: ServerManagerSettings;
8
+ export declare const TARGET_USUAL_SERVER_MANAGER_CORS_HEADERS: HTTPHeaderName[];
9
+ export declare const TARGET_USUAL_SERVER_MANAGER_CORS_METHODS: HTTPMethod[];
@@ -10,9 +10,19 @@ export const TARGET_DEFAULT_SERVER_MANAGER_SETTINGS = {
10
10
  server_cookies_name_auth: 'auth',
11
11
  server_cookies_same_site: 'strict',
12
12
  server_cookies_secure: true,
13
+ server_cors_credentials: false,
14
+ server_cors_headers: [],
15
+ server_cors_methods: [],
16
+ server_cors_origins: [],
13
17
  server_csp_default_src: [],
14
18
  server_csp_img_src: [],
15
19
  server_csp_script_src: [],
20
+ server_expose_mcp: false,
21
+ server_expose_mcp_at: '/mcp',
22
+ server_expose_openapi_spec: false,
23
+ server_expose_openapi_spec_at: '/api/openapi.json',
24
+ server_mcp_dangerously_skip_auth_check: false,
25
+ server_mcp_dangerously_skip_pub_api_key_check: false,
16
26
  server_private_api_key_entries: [],
17
27
  server_public_api_key_entries: [unsafeDefaultSetting()],
18
28
  server_public_api_key_header_name: 'X-API-Key',
@@ -23,3 +33,19 @@ export const TARGET_DEFAULT_SERVER_MANAGER_SETTINGS = {
23
33
  server_stop_mode: 'patient',
24
34
  server_tmp_path: 'tmp',
25
35
  };
36
+ export const TARGET_USUAL_SERVER_MANAGER_CORS_HEADERS = [
37
+ 'Accept',
38
+ 'Authorization',
39
+ 'Content-Type',
40
+ 'Cookie',
41
+ 'Origin',
42
+ 'X-Requested-With',
43
+ ];
44
+ export const TARGET_USUAL_SERVER_MANAGER_CORS_METHODS = [
45
+ 'DELETE',
46
+ 'GET',
47
+ 'HEAD',
48
+ 'OPTIONS',
49
+ 'POST',
50
+ 'PUT',
51
+ ];
@@ -0,0 +1,15 @@
1
+ import type { RequestHandler } from 'express';
2
+ import type { Configurable, SettingsManager, Worker } from '../../../std/index.js';
3
+ import type { ServerManagerSettings } from '../server/ServerManager.js';
4
+ interface Input {
5
+ }
6
+ type Output = RequestHandler;
7
+ type S = Pick<ServerManagerSettings, 'server_cors_credentials' | 'server_cors_headers' | 'server_cors_methods' | 'server_cors_origins' | 'server_public_api_key_header_name'>;
8
+ export declare class CORSMiddlewareBuilder implements Configurable<S>, Worker<Input, Output> {
9
+ private settingsManager;
10
+ constructor(settingsManager: SettingsManager<S>);
11
+ s(): S;
12
+ exec(_input: Input): Output;
13
+ private fmt;
14
+ }
15
+ export {};
@@ -0,0 +1,55 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { inject, injectable } from 'inversify';
14
+ let CORSMiddlewareBuilder = class CORSMiddlewareBuilder {
15
+ settingsManager;
16
+ constructor(settingsManager) {
17
+ this.settingsManager = settingsManager;
18
+ }
19
+ s() {
20
+ return {
21
+ server_cors_credentials: this.settingsManager.get()('server_cors_credentials'),
22
+ server_cors_headers: this.settingsManager.get()('server_cors_headers'),
23
+ server_cors_methods: this.settingsManager.get()('server_cors_methods'),
24
+ server_cors_origins: this.settingsManager.get()('server_cors_origins'),
25
+ server_public_api_key_header_name: this.settingsManager.get()('server_public_api_key_header_name'),
26
+ };
27
+ }
28
+ exec(_input) {
29
+ return (req, res, next) => {
30
+ res.header('Access-Control-Allow-Credentials', String(this.s().server_cors_credentials));
31
+ res.header('Access-Control-Allow-Headers', this.fmt([
32
+ ...this.s().server_cors_headers,
33
+ this.s().server_public_api_key_header_name,
34
+ ]));
35
+ res.header('Access-Control-Allow-Methods', this.fmt(this.s().server_cors_methods));
36
+ const { origin } = req.headers;
37
+ if (origin) {
38
+ const electedOrigin = this.s().server_cors_origins.find((o) => o.startsWith(origin));
39
+ if (electedOrigin) {
40
+ res.header('Access-Control-Allow-Origin', electedOrigin);
41
+ }
42
+ }
43
+ next();
44
+ };
45
+ }
46
+ fmt(arr) {
47
+ return arr.join(', ');
48
+ }
49
+ };
50
+ CORSMiddlewareBuilder = __decorate([
51
+ injectable(),
52
+ __param(0, inject('SettingsManager')),
53
+ __metadata("design:paramtypes", [Object])
54
+ ], CORSMiddlewareBuilder);
55
+ export { CORSMiddlewareBuilder };
@@ -7,9 +7,10 @@ import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../..
7
7
  import type { CustomerFacingErrorBuilder } from '../server/CustomerFacingErrorBuilder.js';
8
8
  import type { ServerManagerSettings } from '../server/ServerManager.js';
9
9
  import type { ServerRequestHandler, ServerRequestHandlerReq, ServerRequestHandlerRes } from '../server/ServerRequestHandler.js';
10
+ import type { CORSMiddlewareBuilder } from './CORSMiddlewareBuilder.js';
10
11
  import type { HelmetMiddlewareBuilder } from './HelmetMiddlewareBuilder.js';
11
12
  export declare function buildHandler<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract, serverRequestHandler: ServerRequestHandler, ucManager: UCManager): RequestHandler;
12
- export declare function init(helmetMB: HelmetMiddlewareBuilder, loggerLevel: LoggerLevel, serverTmpPath: ServerManagerSettings['server_tmp_path']): Express;
13
+ export declare function init(corsMB: CORSMiddlewareBuilder, helmetMB: HelmetMiddlewareBuilder, loggerLevel: LoggerLevel, serverTmpPath: ServerManagerSettings['server_tmp_path']): Express;
13
14
  export declare function mountHandler(contract: UCHTTPContract, express: Express, handler: RequestHandler): void;
14
15
  export declare function postInit(app: Express, customerFacingErrorBuilder: CustomerFacingErrorBuilder): void;
15
16
  export declare function toFile(f: fileUpload.UploadedFile): File;
@@ -1,7 +1,7 @@
1
1
  import cookieParser from 'cookie-parser';
2
2
  import express, {} from 'express';
3
3
  import fileUpload from 'express-fileupload';
4
- import { fmtSingleDataMsg, fmtSSEError, isError, SSE_HEADERS, } from '../../../utils/index.js';
4
+ import { defaultStreamOnClose, fmtSingleDataMsg, fmtSSEError, isError, SSE_HEADERS, } from '../../../utils/index.js';
5
5
  export function buildHandler(appManifest, ucd, contract, serverRequestHandler, ucManager) {
6
6
  const { envelope } = contract;
7
7
  const handler = async (req, res) => {
@@ -12,12 +12,12 @@ export function buildHandler(appManifest, ucd, contract, serverRequestHandler, u
12
12
  // Nothing to do
13
13
  break;
14
14
  case 'stream': {
15
+ let streamedOnce = false;
15
16
  execOpts = {
16
17
  stream: {
17
- onClose: async () => {
18
- throw new Error('execOpts.stream.onClose needs to be set in the UC ServerMain');
19
- },
18
+ onClose: defaultStreamOnClose(streamedOnce),
20
19
  onData: async (output) => {
20
+ streamedOnce = true;
21
21
  if (!output) {
22
22
  return;
23
23
  }
@@ -72,9 +72,10 @@ export function buildHandler(appManifest, ucd, contract, serverRequestHandler, u
72
72
  };
73
73
  return handler;
74
74
  }
75
- export function init(helmetMB, loggerLevel, serverTmpPath) {
75
+ export function init(corsMB, helmetMB, loggerLevel, serverTmpPath) {
76
76
  const app = express();
77
77
  app.use(helmetMB.exec({}));
78
+ app.use(corsMB.exec({}));
78
79
  app.use(fileUpload({
79
80
  createParentPath: true,
80
81
  debug: loggerLevel === 'trace',
@@ -0,0 +1,14 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { Configurable, SettingsManager, Worker } from '../../../std/index.js';
3
+ import type { ServerManagerSettings } from '../server/ServerManager.js';
4
+ interface Input {
5
+ }
6
+ type Output = MiddlewareHandler;
7
+ type S = Pick<ServerManagerSettings, 'server_cors_credentials' | 'server_cors_headers' | 'server_cors_methods' | 'server_cors_origins' | 'server_public_api_key_header_name'>;
8
+ export declare class CORSMiddlewareBuilder implements Configurable<S>, Worker<Input, Output> {
9
+ private settingsManager;
10
+ constructor(settingsManager: SettingsManager<S>);
11
+ s(): S;
12
+ exec(_input: Input): Output;
13
+ }
14
+ export {};
@@ -0,0 +1,46 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { cors } from 'hono/cors';
14
+ import { inject, injectable } from 'inversify';
15
+ let CORSMiddlewareBuilder = class CORSMiddlewareBuilder {
16
+ settingsManager;
17
+ constructor(settingsManager) {
18
+ this.settingsManager = settingsManager;
19
+ }
20
+ s() {
21
+ return {
22
+ server_cors_credentials: this.settingsManager.get()('server_cors_credentials'),
23
+ server_cors_headers: this.settingsManager.get()('server_cors_headers'),
24
+ server_cors_methods: this.settingsManager.get()('server_cors_methods'),
25
+ server_cors_origins: this.settingsManager.get()('server_cors_origins'),
26
+ server_public_api_key_header_name: this.settingsManager.get()('server_public_api_key_header_name'),
27
+ };
28
+ }
29
+ exec(_input) {
30
+ return cors({
31
+ allowHeaders: [
32
+ ...this.s().server_cors_headers,
33
+ this.s().server_public_api_key_header_name,
34
+ ],
35
+ allowMethods: this.s().server_cors_methods,
36
+ credentials: true,
37
+ origin: this.s().server_cors_origins,
38
+ });
39
+ }
40
+ };
41
+ CORSMiddlewareBuilder = __decorate([
42
+ injectable(),
43
+ __param(0, inject('SettingsManager')),
44
+ __metadata("design:paramtypes", [Object])
45
+ ], CORSMiddlewareBuilder);
46
+ export { CORSMiddlewareBuilder };
@@ -4,8 +4,9 @@ import type { AppManifest } from '../../../app/index.js';
4
4
  import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../../uc/index.js';
5
5
  import type { CustomerFacingErrorBuilder } from '../server/CustomerFacingErrorBuilder.js';
6
6
  import type { ServerRequestHandler, ServerRequestHandlerReq, ServerRequestHandlerRes } from '../server/ServerRequestHandler.js';
7
+ import type { CORSMiddlewareBuilder } from './CORSMiddlewareBuilder.js';
7
8
  export declare function buildHandler<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract, serverRequestHandler: ServerRequestHandler, ucManager: UCManager, beforeExec?: (c: Context) => Promise<void>): Handler;
8
- export declare function init<E extends Env = BlankEnv>(customerFacingErrorBuilder: CustomerFacingErrorBuilder): Hono<E>;
9
+ export declare function init<E extends Env = BlankEnv>(corsMB: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder): Hono<E>;
9
10
  export declare function mountHandler(contract: UCHTTPContract, hono: Hono, handler: Handler): void;
10
11
  export declare function toReq(c: Context): ServerRequestHandlerReq;
11
12
  export declare function toRes(c: Context): ServerRequestHandlerRes;
@@ -3,7 +3,7 @@ import { deleteCookie, getCookie, setCookie } from 'hono/cookie';
3
3
  import { logger } from 'hono/logger';
4
4
  import { secureHeaders } from 'hono/secure-headers';
5
5
  import { NotFoundError } from '../../../error/index.js';
6
- import { fmtSingleDataMsg, fmtSSEError, fromFormData, isError, SSE_HEADERS, } from '../../../utils/index.js';
6
+ import { defaultStreamOnClose, fmtSingleDataMsg, fmtSSEError, fromFormData, isError, SSE_HEADERS, } from '../../../utils/index.js';
7
7
  export function buildHandler(appManifest, ucd, contract, serverRequestHandler, ucManager, beforeExec) {
8
8
  const { envelope } = contract;
9
9
  const handler = async (c) => {
@@ -28,10 +28,12 @@ export function buildHandler(appManifest, ucd, contract, serverRequestHandler, u
28
28
  ctrl.close();
29
29
  closed = true;
30
30
  };
31
+ let streamedOnce = false;
31
32
  execOpts = {
32
33
  stream: {
33
- onClose: async () => { },
34
+ onClose: defaultStreamOnClose(streamedOnce),
34
35
  onData: async (output) => {
36
+ streamedOnce = true;
35
37
  if (!output || closed) {
36
38
  return;
37
39
  }
@@ -86,9 +88,10 @@ export function buildHandler(appManifest, ucd, contract, serverRequestHandler, u
86
88
  };
87
89
  return handler;
88
90
  }
89
- export function init(customerFacingErrorBuilder) {
91
+ export function init(corsMB, customerFacingErrorBuilder) {
90
92
  const app = new Hono();
91
93
  app.use(secureHeaders());
94
+ app.use(corsMB.exec({}));
92
95
  app.use(logger());
93
96
  app.notFound((c) => {
94
97
  const error = new NotFoundError();
@@ -1,2 +1,7 @@
1
+ import type { SemVerVersion } from '../../dt/index.js';
2
+ import type { HTTPHeaderName } from '../../utils/index.js';
1
3
  export type AuthCookieName = 'auth';
2
4
  export type PublicApiKeyHeaderName = 'X-API-Key' | (string & {});
5
+ export declare const AUTHORIZATION_HEADER_NAME: HTTPHeaderName;
6
+ export declare const X_FORWARDED_PROTO_HEADER_NAME: HTTPHeaderName;
7
+ export declare const DEFAULT_VERSION: SemVerVersion;
@@ -1 +1,3 @@
1
- export {};
1
+ export const AUTHORIZATION_HEADER_NAME = 'Authorization';
2
+ export const X_FORWARDED_PROTO_HEADER_NAME = 'X-Forwarded-Proto';
3
+ export const DEFAULT_VERSION = '0.1.0';
@@ -1,6 +1,8 @@
1
1
  import type { AppManifest } from '../../app/index.js';
2
- import type { DirPath } from '../../dt/index.js';
2
+ import type { DirPath, URLPath } from '../../dt/index.js';
3
+ import type { ProductUCsLoaderOutput } from '../../product/index.js';
3
4
  import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../uc/index.js';
5
+ import type { OpenAPISpec } from '../lib/openapi/types.js';
4
6
  import type { ServerManager } from '../lib/server/ServerManager.js';
5
7
  export declare class NextJSServerManager implements ServerManager {
6
8
  overrideUCManager(_ucManager: UCManager): void;
@@ -8,6 +10,8 @@ export declare class NextJSServerManager implements ServerManager {
8
10
  initSync(): void;
9
11
  mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(_appManifest: AppManifest, _ucd: UCDef<I, OPI0, OPI1>, _contract: UCHTTPContract): Promise<void>;
10
12
  mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(_appManifest: AppManifest, _ucd: UCDef<I, OPI0, OPI1>, _contract: UCHTTPContract): void;
13
+ mountMCP(_ucs: ProductUCsLoaderOutput, _at: URLPath): Promise<void>;
14
+ mountOpenAPISpec(_spec: OpenAPISpec, _at: URLPath): Promise<void>;
11
15
  mountStaticDir(_dirPath: DirPath): Promise<void>;
12
16
  start(): Promise<void>;
13
17
  stop(): Promise<void>;
@@ -21,6 +21,12 @@ let NextJSServerManager = class NextJSServerManager {
21
21
  mountSync(_appManifest, _ucd, _contract) {
22
22
  // Nothing to do
23
23
  }
24
+ async mountMCP(_ucs, _at) {
25
+ // Nothing to do
26
+ }
27
+ async mountOpenAPISpec(_spec, _at) {
28
+ // Nothing to do
29
+ }
24
30
  async mountStaticDir(_dirPath) {
25
31
  // Nothing to do
26
32
  }
@@ -1,29 +1,35 @@
1
- import { type Express } from 'express';
1
+ import { type Express, type RequestHandler } from 'express';
2
2
  import type { AppManifest } from '../../app/index.js';
3
- import type { DirPath } from '../../dt/index.js';
3
+ import type { DirPath, URLPath } from '../../dt/index.js';
4
+ import type { ProductUCsLoaderOutput } from '../../product/index.js';
4
5
  import type { Configurable, EnvironmentManager, Logger, LoggerSettings, SettingsManager } from '../../std/index.js';
5
6
  import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../uc/index.js';
7
+ import type { MCPHTTPRequestHandlerBuilder } from '../lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.js';
8
+ import type { OpenAPISpec } from '../lib/openapi/types.js';
6
9
  import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
7
10
  import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
8
11
  import type { ServerManager, ServerManagerSettings } from '../lib/server/ServerManager.js';
9
12
  import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
10
13
  import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
14
+ import { CORSMiddlewareBuilder } from '../lib/server-express/CORSMiddlewareBuilder.js';
11
15
  import { HelmetMiddlewareBuilder } from '../lib/server-express/HelmetMiddlewareBuilder.js';
12
16
  import type { ListenSettings, StopSettings } from '../lib/server-node/types.js';
13
17
  type S = ListenSettings & Pick<LoggerSettings, 'logger_level'> & Pick<ServerManagerSettings, 'server_tmp_path'> & StopSettings;
14
18
  export declare class NodeExpressServerManager implements Configurable<S>, ServerManager {
19
+ private corsMiddlewareBuilder;
15
20
  private customerFacingErrorBuilder;
16
21
  private entrypointsBuilder;
17
22
  protected environmentManager: EnvironmentManager;
18
- private helmetMB;
23
+ private helmetMiddlewareBuilder;
19
24
  protected logger: Logger;
25
+ private mcpHTTPRequestHandlerBuilder;
20
26
  private serverRequestHandler;
21
27
  private serverSSLCertLoader;
22
28
  private settingsManager;
23
29
  private ucManager;
24
30
  protected runtime: Express;
25
31
  private server;
26
- constructor(customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, helmetMB: HelmetMiddlewareBuilder, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
32
+ constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, helmetMiddlewareBuilder: HelmetMiddlewareBuilder, logger: Logger, mcpHTTPRequestHandlerBuilder: MCPHTTPRequestHandlerBuilder<RequestHandler>, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
27
33
  s(): S;
28
34
  getRuntime(): Express;
29
35
  overrideUCManager(ucManager: UCManager): void;
@@ -31,6 +37,8 @@ export declare class NodeExpressServerManager implements Configurable<S>, Server
31
37
  initSync(): void;
32
38
  mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
33
39
  mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
40
+ mountMCP(ucs: ProductUCsLoaderOutput, at: URLPath): Promise<void>;
41
+ mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
34
42
  mountStaticDir(dirPath: DirPath): Promise<void>;
35
43
  start(): Promise<void>;
36
44
  stop(): Promise<void>;