libmodulor 0.29.0 → 0.31.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 (156) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +2 -2
  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/TObject.js +13 -5
  9. package/dist/esm/dt/index.d.ts +1 -1
  10. package/dist/esm/dt/targets/json-schema.d.ts +23 -11
  11. package/dist/esm/error/funcs.d.ts +1 -0
  12. package/dist/esm/error/funcs.js +4 -0
  13. package/dist/esm/error/index.d.ts +1 -1
  14. package/dist/esm/error/index.js +1 -1
  15. package/dist/esm/i18n/WordingManager.js +12 -4
  16. package/dist/esm/i18n/locales/de.js +2 -0
  17. package/dist/esm/i18n/locales/en.js +2 -0
  18. package/dist/esm/i18n/locales/es.js +2 -0
  19. package/dist/esm/i18n/locales/fr.js +2 -0
  20. package/dist/esm/i18n/types.d.ts +1 -1
  21. package/dist/esm/index.d.ts +3 -0
  22. package/dist/esm/index.instrumentation-otl.d.ts +1 -0
  23. package/dist/esm/index.instrumentation-otl.js +1 -0
  24. package/dist/esm/index.js +3 -0
  25. package/dist/esm/index.node-express.d.ts +2 -0
  26. package/dist/esm/index.node-express.js +1 -0
  27. package/dist/esm/index.node-hono.d.ts +2 -0
  28. package/dist/esm/index.node-hono.js +1 -0
  29. package/dist/esm/index.node-mcp-express.d.ts +3 -0
  30. package/dist/esm/index.node-mcp-express.js +2 -0
  31. package/dist/esm/index.node-mcp-hono.d.ts +3 -0
  32. package/dist/esm/index.node-mcp-hono.js +2 -0
  33. package/dist/esm/index.node-mcp.d.ts +3 -1
  34. package/dist/esm/index.node-mcp.js +3 -1
  35. package/dist/esm/instrumentation/instrumentation-otl.d.ts +12 -0
  36. package/dist/esm/instrumentation/instrumentation-otl.js +119 -0
  37. package/dist/esm/products/Helper/i18n.d.ts +2 -0
  38. package/dist/esm/std/CryptoManager.d.ts +1 -1
  39. package/dist/esm/std/HTTPAPICaller.d.ts +2 -1
  40. package/dist/esm/std/impl/JoseJWTManager.js +9 -4
  41. package/dist/esm/std/impl/SimpleHTTPAPICaller.js +13 -7
  42. package/dist/esm/std/lib/settings.js +4 -5
  43. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +2 -0
  44. package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +3 -0
  45. package/dist/esm/target/index.d.ts +1 -1
  46. package/dist/esm/target/index.js +1 -1
  47. package/dist/esm/target/lib/client/AuthDataStore.d.ts +5 -0
  48. package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.d.ts +7 -0
  49. package/dist/esm/target/lib/client/impl/InMemoryAuthDataStore.js +20 -0
  50. package/dist/esm/target/lib/client/impl/MixedServerClientManager.d.ts +15 -0
  51. package/dist/esm/target/lib/client/impl/MixedServerClientManager.js +44 -0
  52. package/dist/esm/target/lib/json-schema/error.d.ts +3 -0
  53. package/dist/esm/target/lib/json-schema/error.js +14 -0
  54. package/dist/esm/target/lib/json-schema/input.d.ts +16 -0
  55. package/dist/esm/target/lib/json-schema/input.js +67 -0
  56. package/dist/esm/target/lib/json-schema/output.d.ts +19 -0
  57. package/dist/esm/target/lib/json-schema/output.js +128 -0
  58. package/dist/esm/target/lib/manifest.d.ts +32 -1
  59. package/dist/esm/target/lib/manifest.js +22 -1
  60. package/dist/esm/target/lib/mcp-server/MCPServerRequestChecker.d.ts +22 -0
  61. package/dist/esm/target/lib/mcp-server/MCPServerRequestChecker.js +71 -0
  62. package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.d.ts +16 -0
  63. package/dist/esm/target/lib/mcp-server/MCPServerRequestHandler.js +54 -0
  64. package/dist/esm/target/lib/mcp-server/consts.d.ts +1 -0
  65. package/dist/esm/target/lib/mcp-server/consts.js +1 -0
  66. package/dist/esm/target/lib/mcp-server/funcs.d.ts +13 -0
  67. package/dist/esm/target/lib/mcp-server/funcs.js +84 -0
  68. package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.d.ts +14 -0
  69. package/dist/esm/target/lib/mcp-server/http/MCPHTTPRequestHandlerBuilder.js +1 -0
  70. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.d.ts +5 -0
  71. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressFakeRequestHandlerBuilder.js +18 -0
  72. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.d.ts +17 -0
  73. package/dist/esm/target/lib/mcp-server/http/express/MCPHTTPExpressProtocolRequestHandlerBuilder.js +100 -0
  74. package/dist/esm/target/lib/mcp-server/http/express/types.d.ts +3 -0
  75. package/dist/esm/target/lib/mcp-server/http/express/types.js +1 -0
  76. package/dist/esm/target/lib/mcp-server/http/funcs.d.ts +6 -0
  77. package/dist/esm/target/lib/mcp-server/http/funcs.js +50 -0
  78. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.d.ts +5 -0
  79. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoFakeRequestHandlerBuilder.js +18 -0
  80. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.d.ts +17 -0
  81. package/dist/esm/target/lib/mcp-server/http/hono/MCPHTTPHonoProtocolRequestHandlerBuilder.js +100 -0
  82. package/dist/esm/target/lib/mcp-server/http/hono/types.d.ts +3 -0
  83. package/dist/esm/target/lib/mcp-server/http/hono/types.js +1 -0
  84. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.d.ts +31 -0
  85. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioRequestHandler.js +108 -0
  86. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.d.ts +7 -0
  87. package/dist/esm/target/lib/mcp-server/stdio/MCPStdioUCClientConfirmManager.js +36 -0
  88. package/dist/esm/target/lib/mcp-server/stdio/consts.d.ts +2 -0
  89. package/dist/esm/target/lib/mcp-server/stdio/consts.js +3 -0
  90. package/dist/esm/target/lib/mcp-server/stdio/funcs.d.ts +2 -0
  91. package/dist/esm/target/lib/mcp-server/stdio/funcs.js +10 -0
  92. package/dist/esm/target/lib/mcp-server/stdio/input.d.ts +10 -0
  93. package/dist/esm/target/lib/mcp-server/stdio/input.js +15 -0
  94. package/dist/esm/target/lib/mcp-server/types.d.ts +2 -0
  95. package/dist/esm/target/lib/mcp-server/types.js +1 -0
  96. package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +8 -4
  97. package/dist/esm/target/lib/openapi/funcs.d.ts +4 -9
  98. package/dist/esm/target/lib/openapi/funcs.js +18 -119
  99. package/dist/esm/target/lib/openapi/types.d.ts +5 -16
  100. package/dist/esm/target/lib/react/useAction.js +0 -1
  101. package/dist/esm/target/lib/react/useUC.js +0 -3
  102. package/dist/esm/target/lib/server/AuthenticationChecker.js +15 -10
  103. package/dist/esm/target/lib/server/JWTAuthenticationChecker.d.ts +1 -0
  104. package/dist/esm/target/lib/server/JWTAuthenticationChecker.js +11 -2
  105. package/dist/esm/target/lib/server/ServerBooter.d.ts +1 -1
  106. package/dist/esm/target/lib/server/ServerBooter.js +10 -0
  107. package/dist/esm/target/lib/server/ServerManager.d.ts +10 -0
  108. package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +10 -5
  109. package/dist/esm/target/lib/server/ServerRequestHandler.js +35 -25
  110. package/dist/esm/target/lib/server/consts.js +4 -0
  111. package/dist/esm/target/lib/server-express/funcs.js +2 -6
  112. package/dist/esm/target/lib/server-hono/funcs.js +4 -2
  113. package/dist/esm/target/lib/shared.d.ts +1 -0
  114. package/dist/esm/target/lib/shared.js +1 -0
  115. package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +2 -0
  116. package/dist/esm/target/nextjs-server/NextJSServerManager.js +3 -0
  117. package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +6 -2
  118. package/dist/esm/target/node-express-server/NodeExpressServerManager.js +15 -6
  119. package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +6 -2
  120. package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +15 -6
  121. package/dist/esm/target/{node-mcp-server/NodeLocalStdioMCPServerManager.d.ts → node-mcp-server-stdio/NodeMCPStdioServerManager.d.ts} +9 -20
  122. package/dist/esm/target/node-mcp-server-stdio/NodeMCPStdioServerManager.js +108 -0
  123. package/dist/esm/target/react-native-pure/UCFormFieldControl.js +0 -1
  124. package/dist/esm/testing/impl/NodeAppTesterConfigurator.js +7 -0
  125. package/dist/esm/testing/impl/newNodeAppTester.js +12 -0
  126. package/dist/esm/uc/cardinality.d.ts +7 -0
  127. package/dist/esm/uc/cardinality.js +14 -0
  128. package/dist/esm/uc/examples.d.ts +2 -0
  129. package/dist/esm/uc/examples.js +12 -0
  130. package/dist/esm/uc/helpers/UCOutputReader.d.ts +2 -2
  131. package/dist/esm/uc/helpers/UCOutputReader.js +2 -2
  132. package/dist/esm/uc/index.d.ts +2 -0
  133. package/dist/esm/uc/index.js +2 -0
  134. package/dist/esm/uc/input-field.d.ts +3 -6
  135. package/dist/esm/uc/input-field.js +5 -21
  136. package/dist/esm/uc/opi.d.ts +3 -1
  137. package/dist/esm/uc/opi.js +4 -1
  138. package/dist/esm/uc/output-field.d.ts +13 -1
  139. package/dist/esm/uc/output-field.js +9 -11
  140. package/dist/esm/utils/bundling/funcs.js +1 -1
  141. package/dist/esm/utils/bundling/vite/plugin.d.ts +1 -1
  142. package/dist/esm/utils/index.d.ts +1 -0
  143. package/dist/esm/utils/index.js +1 -0
  144. package/dist/esm/utils/streams/funcs.d.ts +2 -0
  145. package/dist/esm/utils/streams/funcs.js +10 -0
  146. package/dist/esm/utils/strings/humanize.js +4 -1
  147. package/package.json +47 -20
  148. package/dist/esm/target/lib/openapi/consts.d.ts +0 -2
  149. package/dist/esm/target/lib/openapi/consts.js +0 -1
  150. package/dist/esm/target/lib/openapi/input.d.ts +0 -16
  151. package/dist/esm/target/lib/openapi/input.js +0 -33
  152. package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +0 -188
  153. package/dist/esm/target/node-mcp-server/funcs.d.ts +0 -7
  154. package/dist/esm/target/node-mcp-server/funcs.js +0 -45
  155. package/dist/esm/target/node-mcp-server/types.d.ts +0 -15
  156. /package/dist/esm/target/{node-mcp-server/types.js → lib/client/AuthDataStore.js} +0 -0
@@ -5,7 +5,6 @@ export function useAction({ action, autoExec = false, confirm, onError, onInit,
5
5
  const [errMsg, setErrMsg] = useState(null);
6
6
  const [execRes, setExecRes] = useState(null);
7
7
  const [execState, setExecState] = useState(onInit ? UCExecState.INITIALIZING : UCExecState.IDLE);
8
- // biome-ignore lint/correctness/useExhaustiveDependencies : must run only once
9
8
  useEffect(() => {
10
9
  (async () => {
11
10
  if (execState === UCExecState.INITIALIZING) {
@@ -21,9 +21,6 @@ export function useUC(appManifest, def, auth, opts) {
21
21
  }
22
22
  return v;
23
23
  });
24
- // biome-ignore lint/correctness/useExhaustiveDependencies(appManifest): avoid infinite re-rendering
25
- // biome-ignore lint/correctness/useExhaustiveDependencies(def): avoid infinite re-rendering
26
- // biome-ignore lint/correctness/useExhaustiveDependencies(opts?.fillWith): avoid infinite re-rendering
27
24
  useEffect(() => {
28
25
  const v = new UC(appManifest, def, auth);
29
26
  if (opts?.fillWith) {
@@ -30,19 +30,20 @@ let AuthenticationChecker = class AuthenticationChecker {
30
30
  this.ucPolicyFactory = ucPolicyFactory;
31
31
  }
32
32
  async exec({ authCookie, authorizationHeader, uc, }) {
33
+ const { lifecycle: { server }, sec, } = uc.def;
34
+ const authType = sec?.authType ?? DEFAULT_UC_SEC_AT;
33
35
  this.logger.trace('Checking auth', {
34
36
  authCookie,
35
37
  authorizationHeader,
38
+ authType,
36
39
  });
37
40
  const output = {
38
41
  allowed: false, // By default it's not allowed
39
42
  auth: null,
40
43
  };
41
- const { lifecycle: { server }, sec, } = uc.def;
42
44
  if (typeof server !== 'object') {
43
45
  return output;
44
46
  }
45
- const authType = sec?.authType ?? DEFAULT_UC_SEC_AT;
46
47
  const policy = (await this.ucPolicyFactory(server.policy));
47
48
  const canBeExecutedPreAuth = await policy.canBeExecutedPreAuth();
48
49
  if (canBeExecutedPreAuth) {
@@ -53,29 +54,33 @@ let AuthenticationChecker = class AuthenticationChecker {
53
54
  }
54
55
  else {
55
56
  // Follows the OpenAPI spec : https://swagger.io/docs/specification/authentication
57
+ const fromAuthHeader = authorizationHeader && !Array.isArray(authorizationHeader)
58
+ ? authorizationHeader
59
+ : undefined;
60
+ const fromCookie = authCookie && !Array.isArray(authCookie)
61
+ ? authCookie
62
+ : undefined;
56
63
  switch (authType) {
57
64
  case 'apiKey':
58
- if (authorizationHeader &&
59
- !Array.isArray(authorizationHeader)) {
65
+ if (fromAuthHeader) {
60
66
  output.auth =
61
67
  await this.privateApiKeyAuthenticationChecker.exec({
62
- rawValue: authorizationHeader,
68
+ rawValue: fromAuthHeader,
63
69
  });
64
70
  }
65
71
  break;
66
72
  case 'basic':
67
- if (authorizationHeader &&
68
- !Array.isArray(authorizationHeader)) {
73
+ if (fromAuthHeader) {
69
74
  output.auth =
70
75
  await this.basicAuthenticationChecker.exec({
71
- rawValue: authorizationHeader,
76
+ rawValue: fromAuthHeader,
72
77
  });
73
78
  }
74
79
  break;
75
80
  case 'jwt':
76
- if (authCookie && !Array.isArray(authCookie)) {
81
+ if (fromCookie || fromAuthHeader) {
77
82
  output.auth = await this.jwtAuthenticationChecker.exec({
78
- rawValue: authCookie,
83
+ rawValue: fromCookie ?? fromAuthHeader,
79
84
  });
80
85
  }
81
86
  break;
@@ -9,6 +9,7 @@ export declare class JWTAuthenticationChecker implements Configurable<S>, Worker
9
9
  private jwtManager;
10
10
  private logger;
11
11
  private settingsManager;
12
+ private static PREFIXES;
12
13
  constructor(jwtManager: JWTManager, logger: Logger, settingsManager: SettingsManager<S>);
13
14
  s(): S;
14
15
  exec({ rawValue }: Input): Promise<Output | null>;
@@ -10,12 +10,18 @@ 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 JWTAuthenticationChecker_1;
13
14
  import { inject, injectable } from 'inversify';
14
15
  import { UnauthorizedError } from '../../../error/index.js';
15
16
  let JWTAuthenticationChecker = class JWTAuthenticationChecker {
17
+ static { JWTAuthenticationChecker_1 = this; }
16
18
  jwtManager;
17
19
  logger;
18
20
  settingsManager;
21
+ static PREFIXES = [
22
+ 'Bearer',
23
+ 'JWT',
24
+ ];
19
25
  constructor(jwtManager, logger, settingsManager) {
20
26
  this.jwtManager = jwtManager;
21
27
  this.logger = logger;
@@ -27,7 +33,10 @@ let JWTAuthenticationChecker = class JWTAuthenticationChecker {
27
33
  };
28
34
  }
29
35
  async exec({ rawValue }) {
30
- const value = rawValue?.replace('JWT ', '');
36
+ let value = rawValue;
37
+ for (const p of JWTAuthenticationChecker_1.PREFIXES) {
38
+ value = value?.replaceAll(`${p} `, '');
39
+ }
31
40
  if (!value) {
32
41
  return null;
33
42
  }
@@ -68,7 +77,7 @@ let JWTAuthenticationChecker = class JWTAuthenticationChecker {
68
77
  return false;
69
78
  }
70
79
  };
71
- JWTAuthenticationChecker = __decorate([
80
+ JWTAuthenticationChecker = JWTAuthenticationChecker_1 = __decorate([
72
81
  injectable(),
73
82
  __param(0, inject('JWTManager')),
74
83
  __param(1, inject('Logger')),
@@ -5,7 +5,7 @@ import type { TargetEntrypointInput } from '../entrypoint.js';
5
5
  import { OpenAPISpecBuilder } from '../openapi/OpenAPISpecBuilder.js';
6
6
  import { ServerInstaller } from './ServerInstaller.js';
7
7
  import type { ServerManager, ServerManagerSettings } from './ServerManager.js';
8
- type S = Pick<ServerManagerSettings, 'server_expose_openapi_spec' | 'server_expose_openapi_spec_at' | 'server_static_dir_path' | 'server_tmp_path'>;
8
+ type S = Pick<ServerManagerSettings, 'server_expose_mcp' | 'server_expose_mcp_at' | 'server_expose_openapi_spec' | 'server_expose_openapi_spec_at' | 'server_static_dir_path' | 'server_tmp_path'>;
9
9
  type Input = TargetEntrypointInput & {
10
10
  autoMountUCs?: boolean;
11
11
  };
@@ -43,6 +43,8 @@ let ServerBooter = class ServerBooter {
43
43
  }
44
44
  s() {
45
45
  return {
46
+ server_expose_mcp: this.settingsManager.get()('server_expose_mcp'),
47
+ server_expose_mcp_at: this.settingsManager.get()('server_expose_mcp_at'),
46
48
  server_expose_openapi_spec: this.settingsManager.get()('server_expose_openapi_spec'),
47
49
  server_expose_openapi_spec_at: this.settingsManager.get()('server_expose_openapi_spec_at'),
48
50
  server_static_dir_path: this.settingsManager.get()('server_static_dir_path'),
@@ -97,6 +99,14 @@ let ServerBooter = class ServerBooter {
97
99
  });
98
100
  await this.serverManager.mountOpenAPISpec(spec, at);
99
101
  }
102
+ if (this.s().server_expose_mcp) {
103
+ const at = this.s().server_expose_mcp_at;
104
+ this.logger.info('Mounting MCP', {
105
+ at,
106
+ mountedUCs: mountedUCs.length,
107
+ });
108
+ await this.serverManager.mountMCP(mountedUCs, at);
109
+ }
100
110
  await this.serverManager.warmUp();
101
111
  await this.serverManager.start();
102
112
  }
@@ -1,5 +1,6 @@
1
1
  import type { AppManifest } from '../../../app/index.js';
2
2
  import type { ApiKey, DirPath, FilePath, HostPort, HTTPMethod, Password, URL, URLPath, Username } from '../../../dt/index.js';
3
+ import type { ProductUCsLoaderOutput } from '../../../product/index.js';
3
4
  import type { Settings } from '../../../std/index.js';
4
5
  import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../../uc/index.js';
5
6
  import type { HTTPCSPValue } from '../../../utils/http/types.js';
@@ -25,8 +26,12 @@ export interface ServerManagerSettings extends ServerManagerAuthSettings, Settin
25
26
  server_cors_headers: HTTPHeaderName[];
26
27
  server_cors_methods: HTTPMethod[];
27
28
  server_cors_origins: URL[];
29
+ server_expose_mcp: boolean;
30
+ server_expose_mcp_at: URLPath;
28
31
  server_expose_openapi_spec: boolean;
29
32
  server_expose_openapi_spec_at: URLPath;
33
+ server_mcp_dangerously_skip_pub_api_key_check: boolean;
34
+ server_mcp_dangerously_skip_auth_check: boolean;
30
35
  server_public_api_key_header_name: PublicApiKeyHeaderName;
31
36
  server_public_url: URL;
32
37
  server_ssl_fullchain_path: FilePath | null;
@@ -51,6 +56,11 @@ export interface ServerManager extends Initializable {
51
56
  * @param contract
52
57
  */
53
58
  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;
59
+ /**
60
+ * Mount the MCP endpoint
61
+ * @param spec
62
+ */
63
+ mountMCP(ucs: ProductUCsLoaderOutput, at: URLPath): Promise<void>;
54
64
  /**
55
65
  * Mount the OpenAPI spec
56
66
  * @param spec
@@ -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,10 +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 X_FORWARDED_PROTO_HEADER_NAME;
62
67
  constructor(authCookieCreator: AuthCookieCreator, authenticationChecker: AuthenticationChecker, customerFacingErrorBuilder: CustomerFacingErrorBuilder, publicApiKeyChecker: PublicApiKeyChecker, requestChecker: RequestChecker, requestLogger: RequestLogger, settingsManager: SettingsManager<S>, ucBuilder: UCBuilder);
63
68
  s(): S;
64
- 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>>;
65
70
  private fill;
66
71
  private applySideEffects;
67
72
  private applyClearAuthSideEffect;
@@ -10,11 +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';
17
- import { AUTHORIZATION_HEADER_NAME } from '../shared.js';
16
+ import { AUTHORIZATION_HEADER_NAME, X_FORWARDED_PROTO_HEADER_NAME, } from '../shared.js';
18
17
  import { AuthCookieCreator, } from './AuthCookieCreator.js';
19
18
  import { AuthenticationChecker } from './AuthenticationChecker.js';
20
19
  import { CustomerFacingErrorBuilder } from './CustomerFacingErrorBuilder.js';
@@ -22,7 +21,6 @@ import { PublicApiKeyChecker } from './PublicApiKeyChecker.js';
22
21
  import { RequestChecker } from './RequestChecker.js';
23
22
  import { RequestLogger } from './RequestLogger.js';
24
23
  let ServerRequestHandler = class ServerRequestHandler {
25
- static { ServerRequestHandler_1 = this; }
26
24
  authCookieCreator;
27
25
  authenticationChecker;
28
26
  customerFacingErrorBuilder;
@@ -31,7 +29,6 @@ let ServerRequestHandler = class ServerRequestHandler {
31
29
  requestLogger;
32
30
  settingsManager;
33
31
  ucBuilder;
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(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)),
@@ -17,8 +17,12 @@ export const TARGET_DEFAULT_SERVER_MANAGER_SETTINGS = {
17
17
  server_csp_default_src: [],
18
18
  server_csp_img_src: [],
19
19
  server_csp_script_src: [],
20
+ server_expose_mcp: false,
21
+ server_expose_mcp_at: '/mcp',
20
22
  server_expose_openapi_spec: false,
21
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,
22
26
  server_private_api_key_entries: [],
23
27
  server_public_api_key_entries: [unsafeDefaultSetting()],
24
28
  server_public_api_key_header_name: 'X-API-Key',
@@ -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) => {
@@ -15,11 +15,7 @@ export function buildHandler(appManifest, ucd, contract, serverRequestHandler, u
15
15
  let streamedOnce = false;
16
16
  execOpts = {
17
17
  stream: {
18
- onClose: async () => {
19
- if (streamedOnce) {
20
- throw new Error('execOpts.stream.onClose needs to be set in the UC ServerMain');
21
- }
22
- },
18
+ onClose: defaultStreamOnClose(streamedOnce),
23
19
  onData: async (output) => {
24
20
  streamedOnce = true;
25
21
  if (!output) {
@@ -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
  }
@@ -3,4 +3,5 @@ import type { HTTPHeaderName } from '../../utils/index.js';
3
3
  export type AuthCookieName = 'auth';
4
4
  export type PublicApiKeyHeaderName = 'X-API-Key' | (string & {});
5
5
  export declare const AUTHORIZATION_HEADER_NAME: HTTPHeaderName;
6
+ export declare const X_FORWARDED_PROTO_HEADER_NAME: HTTPHeaderName;
6
7
  export declare const DEFAULT_VERSION: SemVerVersion;
@@ -1,2 +1,3 @@
1
1
  export const AUTHORIZATION_HEADER_NAME = 'Authorization';
2
+ export const X_FORWARDED_PROTO_HEADER_NAME = 'X-Forwarded-Proto';
2
3
  export const DEFAULT_VERSION = '0.1.0';
@@ -1,5 +1,6 @@
1
1
  import type { AppManifest } from '../../app/index.js';
2
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';
4
5
  import type { OpenAPISpec } from '../lib/openapi/types.js';
5
6
  import type { ServerManager } from '../lib/server/ServerManager.js';
@@ -9,6 +10,7 @@ export declare class NextJSServerManager implements ServerManager {
9
10
  initSync(): void;
10
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>;
11
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>;
12
14
  mountOpenAPISpec(_spec: OpenAPISpec, _at: URLPath): Promise<void>;
13
15
  mountStaticDir(_dirPath: DirPath): Promise<void>;
14
16
  start(): Promise<void>;
@@ -21,6 +21,9 @@ 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
+ }
24
27
  async mountOpenAPISpec(_spec, _at) {
25
28
  // Nothing to do
26
29
  }
@@ -1,8 +1,10 @@
1
- import { type Express } from 'express';
1
+ import { type Express, type RequestHandler } from 'express';
2
2
  import type { AppManifest } from '../../app/index.js';
3
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';
6
8
  import type { OpenAPISpec } from '../lib/openapi/types.js';
7
9
  import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
8
10
  import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
@@ -20,13 +22,14 @@ export declare class NodeExpressServerManager implements Configurable<S>, Server
20
22
  protected environmentManager: EnvironmentManager;
21
23
  private helmetMiddlewareBuilder;
22
24
  protected logger: Logger;
25
+ private mcpHTTPRequestHandlerBuilder;
23
26
  private serverRequestHandler;
24
27
  private serverSSLCertLoader;
25
28
  private settingsManager;
26
29
  private ucManager;
27
30
  protected runtime: Express;
28
31
  private server;
29
- constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, helmetMiddlewareBuilder: 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);
30
33
  s(): S;
31
34
  getRuntime(): Express;
32
35
  overrideUCManager(ucManager: UCManager): void;
@@ -34,6 +37,7 @@ export declare class NodeExpressServerManager implements Configurable<S>, Server
34
37
  initSync(): void;
35
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>;
36
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>;
37
41
  mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
38
42
  mountStaticDir(dirPath: DirPath): Promise<void>;
39
43
  start(): Promise<void>;
@@ -30,19 +30,21 @@ let NodeExpressServerManager = class NodeExpressServerManager {
30
30
  environmentManager;
31
31
  helmetMiddlewareBuilder;
32
32
  logger;
33
+ mcpHTTPRequestHandlerBuilder;
33
34
  serverRequestHandler;
34
35
  serverSSLCertLoader;
35
36
  settingsManager;
36
37
  ucManager;
37
38
  runtime;
38
39
  server;
39
- constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, helmetMiddlewareBuilder, logger, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
40
+ constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, helmetMiddlewareBuilder, logger, mcpHTTPRequestHandlerBuilder, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
40
41
  this.corsMiddlewareBuilder = corsMiddlewareBuilder;
41
42
  this.customerFacingErrorBuilder = customerFacingErrorBuilder;
42
43
  this.entrypointsBuilder = entrypointsBuilder;
43
44
  this.environmentManager = environmentManager;
44
45
  this.helmetMiddlewareBuilder = helmetMiddlewareBuilder;
45
46
  this.logger = logger;
47
+ this.mcpHTTPRequestHandlerBuilder = mcpHTTPRequestHandlerBuilder;
46
48
  this.serverRequestHandler = serverRequestHandler;
47
49
  this.serverSSLCertLoader = serverSSLCertLoader;
48
50
  this.settingsManager = settingsManager;
@@ -79,6 +81,12 @@ let NodeExpressServerManager = class NodeExpressServerManager {
79
81
  mountSync(appManifest, ucd, contract) {
80
82
  this.mountCommon(appManifest, ucd, contract);
81
83
  }
84
+ async mountMCP(ucs, at) {
85
+ this.runtime.post(at, this.mcpHTTPRequestHandlerBuilder.exec({
86
+ ucManager: this.ucManager,
87
+ ucs,
88
+ }));
89
+ }
82
90
  async mountOpenAPISpec(spec, at) {
83
91
  this.runtime.get(at, (_req, res) => {
84
92
  res.send(spec);
@@ -119,13 +127,14 @@ NodeExpressServerManager = __decorate([
119
127
  __param(3, inject('EnvironmentManager')),
120
128
  __param(4, inject(HelmetMiddlewareBuilder)),
121
129
  __param(5, inject('Logger')),
122
- __param(6, inject(ServerRequestHandler)),
123
- __param(7, inject(ServerSSLCertLoader)),
124
- __param(8, inject('SettingsManager')),
125
- __param(9, inject('UCManager')),
130
+ __param(6, inject('MCPHTTPRequestHandlerBuilder')),
131
+ __param(7, inject(ServerRequestHandler)),
132
+ __param(8, inject(ServerSSLCertLoader)),
133
+ __param(9, inject('SettingsManager')),
134
+ __param(10, inject('UCManager')),
126
135
  __metadata("design:paramtypes", [CORSMiddlewareBuilder,
127
136
  CustomerFacingErrorBuilder,
128
- EntrypointsBuilder, Object, HelmetMiddlewareBuilder, Object, ServerRequestHandler,
137
+ EntrypointsBuilder, Object, HelmetMiddlewareBuilder, Object, Object, ServerRequestHandler,
129
138
  ServerSSLCertLoader, Object, Object])
130
139
  ], NodeExpressServerManager);
131
140
  export { NodeExpressServerManager };
@@ -1,8 +1,10 @@
1
- import type { Hono } from 'hono';
1
+ import type { Hono, MiddlewareHandler } from 'hono';
2
2
  import type { AppManifest } from '../../app/index.js';
3
3
  import type { DirPath, URLPath } from '../../dt/index.js';
4
+ import type { ProductUCsLoaderOutput } from '../../product/index.js';
4
5
  import type { Configurable, EnvironmentManager, Logger, 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';
6
8
  import type { OpenAPISpec } from '../lib/openapi/types.js';
7
9
  import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
8
10
  import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
@@ -18,13 +20,14 @@ export declare class NodeHonoServerManager implements Configurable<S>, ServerMan
18
20
  private entrypointsBuilder;
19
21
  protected environmentManager: EnvironmentManager;
20
22
  private logger;
23
+ private mcpHTTPRequestHandlerBuilder;
21
24
  private serverRequestHandler;
22
25
  private serverSSLCertLoader;
23
26
  private settingsManager;
24
27
  private ucManager;
25
28
  protected runtime: Hono;
26
29
  private server;
27
- constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
30
+ constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, mcpHTTPRequestHandlerBuilder: MCPHTTPRequestHandlerBuilder<MiddlewareHandler>, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
28
31
  s(): S;
29
32
  getRuntime(): Hono;
30
33
  overrideUCManager(ucManager: UCManager): void;
@@ -32,6 +35,7 @@ export declare class NodeHonoServerManager implements Configurable<S>, ServerMan
32
35
  initSync(): void;
33
36
  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>;
34
37
  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;
38
+ mountMCP(ucs: ProductUCsLoaderOutput, at: URLPath): Promise<void>;
35
39
  mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
36
40
  mountStaticDir(dirPath: DirPath): Promise<void>;
37
41
  start(): Promise<void>;