@frontmcp/sdk 0.5.0 → 0.6.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 (226) hide show
  1. package/README.md +3 -3
  2. package/package.json +8 -19
  3. package/src/adapter/adapter.instance.js +5 -0
  4. package/src/adapter/adapter.instance.js.map +1 -1
  5. package/src/auth/authorization/authorization.class.d.ts +1 -4
  6. package/src/auth/authorization/authorization.class.js +6 -13
  7. package/src/auth/authorization/authorization.class.js.map +1 -1
  8. package/src/auth/flows/session.verify.flow.d.ts +1 -0
  9. package/src/auth/flows/session.verify.flow.js +11 -1
  10. package/src/auth/flows/session.verify.flow.js.map +1 -1
  11. package/src/auth/flows/well-known.jwks.flow.js +2 -2
  12. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  13. package/src/auth/jwks/dev-key-persistence.d.ts +63 -0
  14. package/src/auth/jwks/dev-key-persistence.js +219 -0
  15. package/src/auth/jwks/dev-key-persistence.js.map +1 -0
  16. package/src/auth/jwks/index.d.ts +1 -0
  17. package/src/auth/jwks/index.js +1 -0
  18. package/src/auth/jwks/index.js.map +1 -1
  19. package/src/auth/jwks/jwks.service.d.ts +7 -4
  20. package/src/auth/jwks/jwks.service.js +81 -12
  21. package/src/auth/jwks/jwks.service.js.map +1 -1
  22. package/src/auth/jwks/jwks.types.d.ts +7 -0
  23. package/src/auth/jwks/jwks.types.js.map +1 -1
  24. package/src/auth/machine-id.d.ts +5 -0
  25. package/src/auth/machine-id.js +32 -0
  26. package/src/auth/machine-id.js.map +1 -0
  27. package/src/auth/session/index.d.ts +1 -0
  28. package/src/auth/session/index.js +3 -1
  29. package/src/auth/session/index.js.map +1 -1
  30. package/src/auth/session/record/session.base.js +5 -3
  31. package/src/auth/session/record/session.base.js.map +1 -1
  32. package/src/auth/session/record/session.stateless.d.ts +2 -2
  33. package/src/auth/session/record/session.stateless.js +5 -3
  34. package/src/auth/session/record/session.stateless.js.map +1 -1
  35. package/src/auth/session/redis-session.store.d.ts +64 -0
  36. package/src/auth/session/redis-session.store.js +204 -0
  37. package/src/auth/session/redis-session.store.js.map +1 -0
  38. package/src/auth/session/session.service.d.ts +0 -2
  39. package/src/auth/session/session.service.js +1 -7
  40. package/src/auth/session/session.service.js.map +1 -1
  41. package/src/auth/session/transport-session.manager.js +3 -5
  42. package/src/auth/session/transport-session.manager.js.map +1 -1
  43. package/src/auth/session/transport-session.types.d.ts +4 -0
  44. package/src/auth/session/transport-session.types.js +4 -3
  45. package/src/auth/session/transport-session.types.js.map +1 -1
  46. package/src/auth/session/utils/session-id.utils.d.ts +12 -1
  47. package/src/auth/session/utils/session-id.utils.js +48 -9
  48. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  49. package/src/auth/ui/base-layout.d.ts +0 -8
  50. package/src/auth/ui/base-layout.js +1 -14
  51. package/src/auth/ui/base-layout.js.map +1 -1
  52. package/src/auth/ui/index.d.ts +3 -4
  53. package/src/auth/ui/index.js +10 -11
  54. package/src/auth/ui/index.js.map +1 -1
  55. package/src/auth/ui/{htmx-templates.d.ts → templates.d.ts} +5 -6
  56. package/src/auth/ui/{htmx-templates.js → templates.js} +8 -15
  57. package/src/auth/ui/templates.js.map +1 -0
  58. package/src/common/decorators/decorator-utils.js.map +1 -1
  59. package/src/common/decorators/front-mcp.decorator.js +28 -2
  60. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  61. package/src/common/index.d.ts +0 -1
  62. package/src/common/index.js +0 -1
  63. package/src/common/index.js.map +1 -1
  64. package/src/common/interfaces/adapter.interface.d.ts +6 -0
  65. package/src/common/interfaces/adapter.interface.js.map +1 -1
  66. package/src/common/interfaces/execution-context.interface.d.ts +52 -3
  67. package/src/common/interfaces/execution-context.interface.js +88 -3
  68. package/src/common/interfaces/execution-context.interface.js.map +1 -1
  69. package/src/common/interfaces/flow.interface.d.ts +13 -0
  70. package/src/common/interfaces/flow.interface.js +24 -0
  71. package/src/common/interfaces/flow.interface.js.map +1 -1
  72. package/src/common/interfaces/server.interface.d.ts +9 -0
  73. package/src/common/interfaces/server.interface.js.map +1 -1
  74. package/src/common/metadata/app.metadata.d.ts +108 -0
  75. package/src/common/metadata/front-mcp.metadata.d.ts +659 -2
  76. package/src/common/metadata/front-mcp.metadata.js +3 -1
  77. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  78. package/src/common/metadata/provider.metadata.d.ts +14 -0
  79. package/src/common/metadata/provider.metadata.js +18 -2
  80. package/src/common/metadata/provider.metadata.js.map +1 -1
  81. package/src/common/metadata/tool.metadata.d.ts +33 -1
  82. package/src/common/metadata/tool.metadata.js.map +1 -1
  83. package/src/common/migrate/auth-transport.migrate.d.ts +62 -0
  84. package/src/common/migrate/auth-transport.migrate.js +140 -0
  85. package/src/common/migrate/auth-transport.migrate.js.map +1 -0
  86. package/src/common/migrate/index.d.ts +1 -0
  87. package/src/common/migrate/index.js +6 -0
  88. package/src/common/migrate/index.js.map +1 -0
  89. package/src/common/schemas/http-output.schema.d.ts +10 -2
  90. package/src/common/schemas/index.d.ts +1 -0
  91. package/src/common/schemas/index.js +1 -0
  92. package/src/common/schemas/index.js.map +1 -1
  93. package/src/common/schemas/session-header.schema.d.ts +16 -0
  94. package/src/common/schemas/session-header.schema.js +42 -0
  95. package/src/common/schemas/session-header.schema.js.map +1 -0
  96. package/src/common/tokens/front-mcp.tokens.js +3 -1
  97. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  98. package/src/common/types/options/auth.options.d.ts +233 -3
  99. package/src/common/types/options/auth.options.js +29 -40
  100. package/src/common/types/options/auth.options.js.map +1 -1
  101. package/src/common/types/options/index.d.ts +2 -0
  102. package/src/common/types/options/index.js +2 -0
  103. package/src/common/types/options/index.js.map +1 -1
  104. package/src/common/types/options/redis.options.d.ts +22 -0
  105. package/src/common/types/options/redis.options.js +45 -0
  106. package/src/common/types/options/redis.options.js.map +1 -0
  107. package/src/common/types/options/transport.options.d.ts +84 -0
  108. package/src/common/types/options/transport.options.js +121 -0
  109. package/src/common/types/options/transport.options.js.map +1 -0
  110. package/src/completion/flows/complete.flow.d.ts +17 -2
  111. package/src/context/frontmcp-context-storage.d.ts +94 -0
  112. package/src/context/frontmcp-context-storage.js +183 -0
  113. package/src/context/frontmcp-context-storage.js.map +1 -0
  114. package/src/context/frontmcp-context.d.ts +269 -0
  115. package/src/context/frontmcp-context.js +360 -0
  116. package/src/context/frontmcp-context.js.map +1 -0
  117. package/src/context/frontmcp-context.provider.d.ts +43 -0
  118. package/src/context/frontmcp-context.provider.js +61 -0
  119. package/src/context/frontmcp-context.provider.js.map +1 -0
  120. package/src/context/index.d.ts +34 -0
  121. package/src/context/index.js +64 -0
  122. package/src/context/index.js.map +1 -0
  123. package/src/context/request-context-storage.d.ts +89 -0
  124. package/src/context/request-context-storage.js +183 -0
  125. package/src/context/request-context-storage.js.map +1 -0
  126. package/src/context/request-context.d.ts +184 -0
  127. package/src/context/request-context.js +209 -0
  128. package/src/context/request-context.js.map +1 -0
  129. package/src/context/request-context.provider.d.ts +37 -0
  130. package/src/context/request-context.provider.js +51 -0
  131. package/src/context/request-context.provider.js.map +1 -0
  132. package/src/context/session-key.provider.d.ts +45 -0
  133. package/src/context/session-key.provider.js +65 -0
  134. package/src/context/session-key.provider.js.map +1 -0
  135. package/src/context/trace-context.d.ts +43 -0
  136. package/src/context/trace-context.js +142 -0
  137. package/src/context/trace-context.js.map +1 -0
  138. package/src/errors/index.d.ts +1 -1
  139. package/src/errors/index.js +3 -1
  140. package/src/errors/index.js.map +1 -1
  141. package/src/errors/mcp.error.d.ts +7 -0
  142. package/src/errors/mcp.error.js +11 -1
  143. package/src/errors/mcp.error.js.map +1 -1
  144. package/src/flows/flow.instance.d.ts +16 -0
  145. package/src/flows/flow.instance.js +166 -80
  146. package/src/flows/flow.instance.js.map +1 -1
  147. package/src/flows/flow.registry.d.ts +5 -0
  148. package/src/flows/flow.registry.js +45 -3
  149. package/src/flows/flow.registry.js.map +1 -1
  150. package/src/front-mcp/front-mcp.d.ts +12 -0
  151. package/src/front-mcp/front-mcp.js +22 -3
  152. package/src/front-mcp/front-mcp.js.map +1 -1
  153. package/src/front-mcp/front-mcp.providers.d.ts +266 -1
  154. package/src/front-mcp/front-mcp.providers.js +2 -1
  155. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  156. package/src/front-mcp/serverless-handler.d.ts +28 -0
  157. package/src/front-mcp/serverless-handler.js +61 -0
  158. package/src/front-mcp/serverless-handler.js.map +1 -0
  159. package/src/hooks/hooks.utils.d.ts +1 -1
  160. package/src/hooks/hooks.utils.js +10 -3
  161. package/src/hooks/hooks.utils.js.map +1 -1
  162. package/src/index.d.ts +8 -4
  163. package/src/index.js +20 -1
  164. package/src/index.js.map +1 -1
  165. package/src/logger/instances/instance.logger.js +0 -1
  166. package/src/logger/instances/instance.logger.js.map +1 -1
  167. package/src/logging/flows/set-level.flow.d.ts +17 -2
  168. package/src/notification/notification.service.js +5 -1
  169. package/src/notification/notification.service.js.map +1 -1
  170. package/src/prompt/flows/get-prompt.flow.d.ts +97 -2
  171. package/src/prompt/flows/prompts-list.flow.d.ts +12 -1
  172. package/src/provider/provider.registry.d.ts +97 -5
  173. package/src/provider/provider.registry.js +306 -9
  174. package/src/provider/provider.registry.js.map +1 -1
  175. package/src/provider/provider.types.d.ts +21 -3
  176. package/src/provider/provider.types.js.map +1 -1
  177. package/src/resource/flows/read-resource.flow.d.ts +22 -3
  178. package/src/resource/flows/resource-templates-list.flow.d.ts +20 -1
  179. package/src/resource/flows/resources-list.flow.d.ts +20 -1
  180. package/src/resource/flows/subscribe-resource.flow.d.ts +17 -2
  181. package/src/resource/flows/unsubscribe-resource.flow.d.ts +17 -2
  182. package/src/scope/flows/http.request.flow.js +43 -7
  183. package/src/scope/flows/http.request.flow.js.map +1 -1
  184. package/src/scope/scope.instance.js +12 -5
  185. package/src/scope/scope.instance.js.map +1 -1
  186. package/src/server/adapters/base.host.adapter.d.ts +9 -0
  187. package/src/server/adapters/base.host.adapter.js.map +1 -1
  188. package/src/server/adapters/express.host.adapter.d.ts +12 -0
  189. package/src/server/adapters/express.host.adapter.js +21 -1
  190. package/src/server/adapters/express.host.adapter.js.map +1 -1
  191. package/src/server/server.instance.d.ts +3 -0
  192. package/src/server/server.instance.js +14 -7
  193. package/src/server/server.instance.js.map +1 -1
  194. package/src/tool/flows/call-tool.flow.d.ts +118 -13
  195. package/src/tool/flows/call-tool.flow.js +240 -194
  196. package/src/tool/flows/call-tool.flow.js.map +1 -1
  197. package/src/tool/flows/tools-list.flow.d.ts +25 -11
  198. package/src/tool/flows/tools-list.flow.js +82 -31
  199. package/src/tool/flows/tools-list.flow.js.map +1 -1
  200. package/src/tool/tool.instance.d.ts +1 -4
  201. package/src/transport/adapters/transport.streamable-http.adapter.js +1 -0
  202. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  203. package/src/transport/flows/handle.sse.flow.js +9 -2
  204. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  205. package/src/transport/flows/handle.streamable-http.flow.js +63 -6
  206. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  207. package/src/transport/mcp-handlers/complete-request.handler.d.ts +27 -1
  208. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +52 -1
  209. package/src/transport/mcp-handlers/index.d.ts +413 -7
  210. package/src/transport/mcp-handlers/initialize-request.handler.js +12 -2
  211. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  212. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +27 -1
  213. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +32 -1
  214. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +32 -1
  215. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +30 -1
  216. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +20 -0
  217. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +27 -1
  218. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +20 -0
  219. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +20 -0
  220. package/src/transport/transport.registry.d.ts +68 -4
  221. package/src/transport/transport.registry.js +313 -11
  222. package/src/transport/transport.registry.js.map +1 -1
  223. package/src/auth/ui/htmx-templates.js.map +0 -1
  224. package/src/common/providers/session.provider.d.ts +0 -13
  225. package/src/common/providers/session.provider.js +0 -27
  226. package/src/common/providers/session.provider.js.map +0 -1
@@ -9,4 +9,16 @@ export declare class FrontMcpInstance implements FrontMcpInterface {
9
9
  initialize(): Promise<void>;
10
10
  start(): void;
11
11
  static bootstrap(options: FrontMcpConfigType): Promise<void>;
12
+ /**
13
+ * Creates and initializes a FrontMCP instance without starting the HTTP server.
14
+ * Returns the underlying HTTP handler for serverless deployments (Vercel, Lambda).
15
+ *
16
+ * @example
17
+ * // In index.ts for Vercel
18
+ * import { FrontMcpInstance } from '@frontmcp/sdk';
19
+ * import config from '../src/main';
20
+ *
21
+ * export default FrontMcpInstance.createHandler(config);
22
+ */
23
+ static createHandler(options: FrontMcpConfigType): Promise<unknown>;
12
24
  }
@@ -18,9 +18,7 @@ class FrontMcpInstance {
18
18
  this.ready = this.initialize();
19
19
  }
20
20
  async initialize() {
21
- this.providers = new provider_registry_1.default([
22
- ...(0, front_mcp_providers_1.createMcpGlobalProviders)(this.config),
23
- ]);
21
+ this.providers = new provider_registry_1.default([...(0, front_mcp_providers_1.createMcpGlobalProviders)(this.config)]);
24
22
  await this.providers.ready;
25
23
  this.logger = new logger_registry_1.default(this.providers);
26
24
  await this.logger.ready;
@@ -39,6 +37,27 @@ class FrontMcpInstance {
39
37
  await frontMcp.ready;
40
38
  frontMcp.start();
41
39
  }
40
+ /**
41
+ * Creates and initializes a FrontMCP instance without starting the HTTP server.
42
+ * Returns the underlying HTTP handler for serverless deployments (Vercel, Lambda).
43
+ *
44
+ * @example
45
+ * // In index.ts for Vercel
46
+ * import { FrontMcpInstance } from '@frontmcp/sdk';
47
+ * import config from '../src/main';
48
+ *
49
+ * export default FrontMcpInstance.createHandler(config);
50
+ */
51
+ static async createHandler(options) {
52
+ const frontMcp = new FrontMcpInstance(options);
53
+ await frontMcp.ready;
54
+ const server = frontMcp.providers.get(common_1.FrontMcpServer);
55
+ if (!server) {
56
+ throw new Error('Server not found');
57
+ }
58
+ server.prepare();
59
+ return server.getHandler();
60
+ }
42
61
  }
43
62
  exports.FrontMcpInstance = FrontMcpInstance;
44
63
  //# sourceMappingURL=front-mcp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"front-mcp.js","sourceRoot":"","sources":["../../../src/front-mcp/front-mcp.ts"],"names":[],"mappings":";;;;AAAA,sCAAgF;AAChF,4DAAsD;AACtD,8FAA6D;AAC7D,+DAA+D;AAC/D,wFAAuD;AAEvD,MAAa,gBAAgB;IAC3B,MAAM,CAAqB;IAClB,KAAK,CAAgB;IAEtB,MAAM,CAAiB;IACvB,SAAS,CAAmB;IAC5B,MAAM,CAAgB;IAE9B,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU;QAEd,IAAI,CAAC,SAAS,GAAG,IAAI,2BAAgB,CAAC;YACpC,GAAG,IAAA,8CAAwB,EAAC,IAAI,CAAC,MAAM,CAAC;SACzC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,MAAM,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAE1B,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAc,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAA2B;QACvD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,KAAK,CAAC;QAErB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AA1CD,4CA0CC","sourcesContent":["import {FrontMcpConfigType, FrontMcpInterface, FrontMcpServer} from '../common';\nimport {ScopeRegistry} from '../scope/scope.registry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {createMcpGlobalProviders} from './front-mcp.providers';\nimport LoggerRegistry from '../logger/logger.registry';\n\nexport class FrontMcpInstance implements FrontMcpInterface {\n config: FrontMcpConfigType;\n readonly ready: Promise<void>;\n\n private logger: LoggerRegistry;\n private providers: ProviderRegistry;\n private scopes: ScopeRegistry;\n\n constructor(config: FrontMcpConfigType) {\n this.config = config;\n this.ready = this.initialize();\n }\n\n async initialize(): Promise<void> {\n\n this.providers = new ProviderRegistry([\n ...createMcpGlobalProviders(this.config),\n ]);\n await this.providers.ready;\n\n this.logger = new LoggerRegistry(this.providers);\n await this.logger.ready;\n\n this.scopes = new ScopeRegistry(this.providers);\n await this.scopes.ready;\n\n }\n\n start() {\n const server = this.providers.get(FrontMcpServer);\n if (!server) {\n throw new Error('Server not found');\n }\n server.start();\n }\n\n public static async bootstrap(options: FrontMcpConfigType) {\n const frontMcp = new FrontMcpInstance(options);\n await frontMcp.ready;\n\n frontMcp.start();\n }\n}\n"]}
1
+ {"version":3,"file":"front-mcp.js","sourceRoot":"","sources":["../../../src/front-mcp/front-mcp.ts"],"names":[],"mappings":";;;;AAAA,sCAAkF;AAClF,4DAAwD;AACxD,8FAA6D;AAC7D,+DAAiE;AACjE,wFAAuD;AAEvD,MAAa,gBAAgB;IAC3B,MAAM,CAAqB;IAClB,KAAK,CAAgB;IAEtB,MAAM,CAAiB;IACvB,SAAS,CAAmB;IAC5B,MAAM,CAAgB;IAE9B,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,2BAAgB,CAAC,CAAC,GAAG,IAAA,8CAAwB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,MAAM,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAc,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAA2B;QACvD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,KAAK,CAAC;QAErB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAA2B;QAC3D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,KAAK,CAAC;QAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAc,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;CACF;AA9DD,4CA8DC","sourcesContent":["import { FrontMcpConfigType, FrontMcpInterface, FrontMcpServer } from '../common';\nimport { ScopeRegistry } from '../scope/scope.registry';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { createMcpGlobalProviders } from './front-mcp.providers';\nimport LoggerRegistry from '../logger/logger.registry';\n\nexport class FrontMcpInstance implements FrontMcpInterface {\n config: FrontMcpConfigType;\n readonly ready: Promise<void>;\n\n private logger: LoggerRegistry;\n private providers: ProviderRegistry;\n private scopes: ScopeRegistry;\n\n constructor(config: FrontMcpConfigType) {\n this.config = config;\n this.ready = this.initialize();\n }\n\n async initialize(): Promise<void> {\n this.providers = new ProviderRegistry([...createMcpGlobalProviders(this.config)]);\n await this.providers.ready;\n\n this.logger = new LoggerRegistry(this.providers);\n await this.logger.ready;\n\n this.scopes = new ScopeRegistry(this.providers);\n await this.scopes.ready;\n }\n\n start() {\n const server = this.providers.get(FrontMcpServer);\n if (!server) {\n throw new Error('Server not found');\n }\n server.start();\n }\n\n public static async bootstrap(options: FrontMcpConfigType) {\n const frontMcp = new FrontMcpInstance(options);\n await frontMcp.ready;\n\n frontMcp.start();\n }\n\n /**\n * Creates and initializes a FrontMCP instance without starting the HTTP server.\n * Returns the underlying HTTP handler for serverless deployments (Vercel, Lambda).\n *\n * @example\n * // In index.ts for Vercel\n * import { FrontMcpInstance } from '@frontmcp/sdk';\n * import config from '../src/main';\n *\n * export default FrontMcpInstance.createHandler(config);\n */\n public static async createHandler(options: FrontMcpConfigType): Promise<unknown> {\n const frontMcp = new FrontMcpInstance(options);\n await frontMcp.ready;\n\n const server = frontMcp.providers.get(FrontMcpServer);\n if (!server) {\n throw new Error('Server not found');\n }\n\n server.prepare();\n return server.getHandler();\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { FrontMcpConfigType, FrontMcpServer, ProviderValueType } from '../common';
2
- export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType): (ProviderValueType<{
2
+ import { FrontMcpContextStorage } from '../context';
3
+ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType): (typeof FrontMcpContextStorage | ProviderValueType<{
3
4
  info: {
4
5
  name: string;
5
6
  version: string;
@@ -16,12 +17,51 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
16
17
  resources: import("../common").Type<unknown>[];
17
18
  apps: import("../common").Type<unknown>[];
18
19
  serve: boolean;
20
+ transport: {
21
+ sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
22
+ transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
23
+ enableLegacySSE: boolean;
24
+ enableSseListener: boolean;
25
+ enableStreamableHttp: boolean;
26
+ enableStatelessHttp: boolean;
27
+ enableStatefulHttp: boolean;
28
+ requireSessionForStreamable: boolean;
29
+ platformDetection?: {
30
+ customOnly: boolean;
31
+ mappings?: {
32
+ pattern: string | RegExp;
33
+ platform: "unknown" | "continue" | "openai" | "claude" | "gemini" | "cursor" | "cody" | "generic-mcp" | "ext-apps";
34
+ }[] | undefined;
35
+ } | undefined;
36
+ persistence?: {
37
+ enabled: boolean;
38
+ defaultTtlMs: number;
39
+ redis?: {
40
+ host: string;
41
+ port: number;
42
+ db: number;
43
+ tls: boolean;
44
+ keyPrefix: string;
45
+ defaultTtlMs: number;
46
+ password?: string | undefined;
47
+ } | undefined;
48
+ } | undefined;
49
+ };
19
50
  splitByApp: false;
20
51
  http?: {
21
52
  port: number;
22
53
  entryPath: string;
23
54
  hostFactory?: any;
24
55
  } | undefined;
56
+ redis?: {
57
+ host: string;
58
+ port: number;
59
+ db: number;
60
+ tls: boolean;
61
+ keyPrefix: string;
62
+ defaultTtlMs: number;
63
+ password?: string | undefined;
64
+ } | undefined;
25
65
  session?: {
26
66
  sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
27
67
  transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
@@ -60,6 +100,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
60
100
  enableStatelessHttp: boolean;
61
101
  enableStatefulHttp: boolean;
62
102
  requireSessionForStreamable: boolean;
103
+ recreation?: {
104
+ enabled: boolean;
105
+ defaultTtlMs: number;
106
+ redis?: {
107
+ host: string;
108
+ port: number;
109
+ db: number;
110
+ tls: boolean;
111
+ keyPrefix: string;
112
+ defaultTtlMs: number;
113
+ password?: string | undefined;
114
+ } | undefined;
115
+ } | undefined;
63
116
  } | undefined;
64
117
  } | {
65
118
  mode: "transparent";
@@ -96,6 +149,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
96
149
  enableStatelessHttp: boolean;
97
150
  enableStatefulHttp: boolean;
98
151
  requireSessionForStreamable: boolean;
152
+ recreation?: {
153
+ enabled: boolean;
154
+ defaultTtlMs: number;
155
+ redis?: {
156
+ host: string;
157
+ port: number;
158
+ db: number;
159
+ tls: boolean;
160
+ keyPrefix: string;
161
+ defaultTtlMs: number;
162
+ password?: string | undefined;
163
+ } | undefined;
164
+ } | undefined;
99
165
  } | undefined;
100
166
  } | {
101
167
  mode: "orchestrated";
@@ -110,6 +176,7 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
110
176
  db: number;
111
177
  tls: boolean;
112
178
  keyPrefix: string;
179
+ defaultTtlMs: number;
113
180
  password?: string | undefined;
114
181
  };
115
182
  };
@@ -157,6 +224,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
157
224
  enableStatelessHttp: boolean;
158
225
  enableStatefulHttp: boolean;
159
226
  requireSessionForStreamable: boolean;
227
+ recreation?: {
228
+ enabled: boolean;
229
+ defaultTtlMs: number;
230
+ redis?: {
231
+ host: string;
232
+ port: number;
233
+ db: number;
234
+ tls: boolean;
235
+ keyPrefix: string;
236
+ defaultTtlMs: number;
237
+ password?: string | undefined;
238
+ } | undefined;
239
+ } | undefined;
160
240
  } | undefined;
161
241
  } | {
162
242
  mode: "orchestrated";
@@ -188,6 +268,7 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
188
268
  db: number;
189
269
  tls: boolean;
190
270
  keyPrefix: string;
271
+ defaultTtlMs: number;
191
272
  password?: string | undefined;
192
273
  };
193
274
  };
@@ -235,6 +316,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
235
316
  enableStatelessHttp: boolean;
236
317
  enableStatefulHttp: boolean;
237
318
  requireSessionForStreamable: boolean;
319
+ recreation?: {
320
+ enabled: boolean;
321
+ defaultTtlMs: number;
322
+ redis?: {
323
+ host: string;
324
+ port: number;
325
+ db: number;
326
+ tls: boolean;
327
+ keyPrefix: string;
328
+ defaultTtlMs: number;
329
+ password?: string | undefined;
330
+ } | undefined;
331
+ } | undefined;
238
332
  } | undefined;
239
333
  } | undefined;
240
334
  } | {
@@ -254,12 +348,51 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
254
348
  resources: import("../common").Type<unknown>[];
255
349
  apps: import("../common").Type<unknown>[];
256
350
  serve: boolean;
351
+ transport: {
352
+ sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
353
+ transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
354
+ enableLegacySSE: boolean;
355
+ enableSseListener: boolean;
356
+ enableStreamableHttp: boolean;
357
+ enableStatelessHttp: boolean;
358
+ enableStatefulHttp: boolean;
359
+ requireSessionForStreamable: boolean;
360
+ platformDetection?: {
361
+ customOnly: boolean;
362
+ mappings?: {
363
+ pattern: string | RegExp;
364
+ platform: "unknown" | "continue" | "openai" | "claude" | "gemini" | "cursor" | "cody" | "generic-mcp" | "ext-apps";
365
+ }[] | undefined;
366
+ } | undefined;
367
+ persistence?: {
368
+ enabled: boolean;
369
+ defaultTtlMs: number;
370
+ redis?: {
371
+ host: string;
372
+ port: number;
373
+ db: number;
374
+ tls: boolean;
375
+ keyPrefix: string;
376
+ defaultTtlMs: number;
377
+ password?: string | undefined;
378
+ } | undefined;
379
+ } | undefined;
380
+ };
257
381
  splitByApp: true;
258
382
  http?: {
259
383
  port: number;
260
384
  entryPath: string;
261
385
  hostFactory?: any;
262
386
  } | undefined;
387
+ redis?: {
388
+ host: string;
389
+ port: number;
390
+ db: number;
391
+ tls: boolean;
392
+ keyPrefix: string;
393
+ defaultTtlMs: number;
394
+ password?: string | undefined;
395
+ } | undefined;
263
396
  session?: {
264
397
  sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
265
398
  transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
@@ -295,12 +428,51 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
295
428
  resources: import("../common").Type<unknown>[];
296
429
  apps: import("../common").Type<unknown>[];
297
430
  serve: boolean;
431
+ transport: {
432
+ sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
433
+ transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
434
+ enableLegacySSE: boolean;
435
+ enableSseListener: boolean;
436
+ enableStreamableHttp: boolean;
437
+ enableStatelessHttp: boolean;
438
+ enableStatefulHttp: boolean;
439
+ requireSessionForStreamable: boolean;
440
+ platformDetection?: {
441
+ customOnly: boolean;
442
+ mappings?: {
443
+ pattern: string | RegExp;
444
+ platform: "unknown" | "continue" | "openai" | "claude" | "gemini" | "cursor" | "cody" | "generic-mcp" | "ext-apps";
445
+ }[] | undefined;
446
+ } | undefined;
447
+ persistence?: {
448
+ enabled: boolean;
449
+ defaultTtlMs: number;
450
+ redis?: {
451
+ host: string;
452
+ port: number;
453
+ db: number;
454
+ tls: boolean;
455
+ keyPrefix: string;
456
+ defaultTtlMs: number;
457
+ password?: string | undefined;
458
+ } | undefined;
459
+ } | undefined;
460
+ };
298
461
  splitByApp: false;
299
462
  http?: {
300
463
  port: number;
301
464
  entryPath: string;
302
465
  hostFactory?: any;
303
466
  } | undefined;
467
+ redis?: {
468
+ host: string;
469
+ port: number;
470
+ db: number;
471
+ tls: boolean;
472
+ keyPrefix: string;
473
+ defaultTtlMs: number;
474
+ password?: string | undefined;
475
+ } | undefined;
304
476
  session?: {
305
477
  sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
306
478
  transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
@@ -339,6 +511,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
339
511
  enableStatelessHttp: boolean;
340
512
  enableStatefulHttp: boolean;
341
513
  requireSessionForStreamable: boolean;
514
+ recreation?: {
515
+ enabled: boolean;
516
+ defaultTtlMs: number;
517
+ redis?: {
518
+ host: string;
519
+ port: number;
520
+ db: number;
521
+ tls: boolean;
522
+ keyPrefix: string;
523
+ defaultTtlMs: number;
524
+ password?: string | undefined;
525
+ } | undefined;
526
+ } | undefined;
342
527
  } | undefined;
343
528
  } | {
344
529
  mode: "transparent";
@@ -375,6 +560,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
375
560
  enableStatelessHttp: boolean;
376
561
  enableStatefulHttp: boolean;
377
562
  requireSessionForStreamable: boolean;
563
+ recreation?: {
564
+ enabled: boolean;
565
+ defaultTtlMs: number;
566
+ redis?: {
567
+ host: string;
568
+ port: number;
569
+ db: number;
570
+ tls: boolean;
571
+ keyPrefix: string;
572
+ defaultTtlMs: number;
573
+ password?: string | undefined;
574
+ } | undefined;
575
+ } | undefined;
378
576
  } | undefined;
379
577
  } | {
380
578
  mode: "orchestrated";
@@ -389,6 +587,7 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
389
587
  db: number;
390
588
  tls: boolean;
391
589
  keyPrefix: string;
590
+ defaultTtlMs: number;
392
591
  password?: string | undefined;
393
592
  };
394
593
  };
@@ -436,6 +635,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
436
635
  enableStatelessHttp: boolean;
437
636
  enableStatefulHttp: boolean;
438
637
  requireSessionForStreamable: boolean;
638
+ recreation?: {
639
+ enabled: boolean;
640
+ defaultTtlMs: number;
641
+ redis?: {
642
+ host: string;
643
+ port: number;
644
+ db: number;
645
+ tls: boolean;
646
+ keyPrefix: string;
647
+ defaultTtlMs: number;
648
+ password?: string | undefined;
649
+ } | undefined;
650
+ } | undefined;
439
651
  } | undefined;
440
652
  } | {
441
653
  mode: "orchestrated";
@@ -467,6 +679,7 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
467
679
  db: number;
468
680
  tls: boolean;
469
681
  keyPrefix: string;
682
+ defaultTtlMs: number;
470
683
  password?: string | undefined;
471
684
  };
472
685
  };
@@ -514,6 +727,19 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
514
727
  enableStatelessHttp: boolean;
515
728
  enableStatefulHttp: boolean;
516
729
  requireSessionForStreamable: boolean;
730
+ recreation?: {
731
+ enabled: boolean;
732
+ defaultTtlMs: number;
733
+ redis?: {
734
+ host: string;
735
+ port: number;
736
+ db: number;
737
+ tls: boolean;
738
+ keyPrefix: string;
739
+ defaultTtlMs: number;
740
+ password?: string | undefined;
741
+ } | undefined;
742
+ } | undefined;
517
743
  } | undefined;
518
744
  } | undefined;
519
745
  } | {
@@ -533,12 +759,51 @@ export declare function createMcpGlobalProviders(metadata: FrontMcpConfigType):
533
759
  resources: import("../common").Type<unknown>[];
534
760
  apps: import("../common").Type<unknown>[];
535
761
  serve: boolean;
762
+ transport: {
763
+ sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
764
+ transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
765
+ enableLegacySSE: boolean;
766
+ enableSseListener: boolean;
767
+ enableStreamableHttp: boolean;
768
+ enableStatelessHttp: boolean;
769
+ enableStatefulHttp: boolean;
770
+ requireSessionForStreamable: boolean;
771
+ platformDetection?: {
772
+ customOnly: boolean;
773
+ mappings?: {
774
+ pattern: string | RegExp;
775
+ platform: "unknown" | "continue" | "openai" | "claude" | "gemini" | "cursor" | "cody" | "generic-mcp" | "ext-apps";
776
+ }[] | undefined;
777
+ } | undefined;
778
+ persistence?: {
779
+ enabled: boolean;
780
+ defaultTtlMs: number;
781
+ redis?: {
782
+ host: string;
783
+ port: number;
784
+ db: number;
785
+ tls: boolean;
786
+ keyPrefix: string;
787
+ defaultTtlMs: number;
788
+ password?: string | undefined;
789
+ } | undefined;
790
+ } | undefined;
791
+ };
536
792
  splitByApp: true;
537
793
  http?: {
538
794
  port: number;
539
795
  entryPath: string;
540
796
  hostFactory?: any;
541
797
  } | undefined;
798
+ redis?: {
799
+ host: string;
800
+ port: number;
801
+ db: number;
802
+ tls: boolean;
803
+ keyPrefix: string;
804
+ defaultTtlMs: number;
805
+ password?: string | undefined;
806
+ } | undefined;
542
807
  session?: {
543
808
  sessionMode: "stateful" | "stateless" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
544
809
  transportIdMode: "uuid" | "jwt" | import("zod/v4/core").$InferOuterFunctionType<import("zod/v4/core").$ZodFunctionArgs, import("zod/v4/core").$ZodFunctionOut>;
@@ -4,6 +4,7 @@ exports.createMcpGlobalProviders = createMcpGlobalProviders;
4
4
  const common_1 = require("../common");
5
5
  const server_instance_1 = require("../server/server.instance");
6
6
  const front_mcp_tokens_1 = require("./front-mcp.tokens");
7
+ const context_1 = require("../context");
7
8
  const frontMcpConfig = {
8
9
  with: (metadata) => ({
9
10
  name: 'frontmcp:config',
@@ -23,6 +24,6 @@ const frontMcpServer = (0, common_1.AsyncProvider)({
23
24
  },
24
25
  });
25
26
  function createMcpGlobalProviders(metadata) {
26
- return [frontMcpConfig.with(metadata), frontMcpServer];
27
+ return [frontMcpConfig.with(metadata), frontMcpServer, context_1.FrontMcpContextStorage];
27
28
  }
28
29
  //# sourceMappingURL=front-mcp.providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"front-mcp.providers.js","sourceRoot":"","sources":["../../../src/front-mcp/front-mcp.providers.ts"],"names":[],"mappings":";;AAyBA,4DAEC;AA3BD,sCAAgH;AAChH,+DAAmE;AACnE,yDAAoD;AAEpD,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,CAAC,QAA4B,EAAyC,EAAE,CAAC,CAAC;QAC9E,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iCAAc;QACvB,KAAK,EAAE,sBAAa,CAAC,MAAM;QAC3B,QAAQ,EAAE,QAAQ;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAE/D,MAAM,cAAc,GAAG,IAAA,sBAAa,EAAC;IACnC,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,sBAAa,CAAC,MAAM;IAC3B,OAAO,EAAE,uBAAc;IACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,iCAAc,CAAC;IAC9B,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;QACrB,OAAO,IAAI,wCAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC;IACzE,CAAC;CACF,CAAC,CAAC;AAEH,SAAgB,wBAAwB,CAAC,QAA4B;IACnE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import { FrontMcpConfigType, ProviderScope, FrontMcpServer, ProviderValueType, AsyncProvider } from '../common';\nimport { FrontMcpServerInstance } from '../server/server.instance';\nimport { FrontMcpConfig } from './front-mcp.tokens';\n\nconst frontMcpConfig = {\n with: (metadata: FrontMcpConfigType): ProviderValueType<FrontMcpConfigType> => ({\n name: 'frontmcp:config',\n provide: FrontMcpConfig,\n scope: ProviderScope.GLOBAL,\n useValue: metadata,\n }),\n};\n\nconst DEFAULT_HTTP_OPTIONS = { port: 3000, entryPath: '/mcp' };\n\nconst frontMcpServer = AsyncProvider({\n name: 'frontmcp:server',\n scope: ProviderScope.GLOBAL,\n provide: FrontMcpServer,\n inject: () => [FrontMcpConfig],\n useFactory: (config) => {\n return new FrontMcpServerInstance(config.http ?? DEFAULT_HTTP_OPTIONS);\n },\n});\n\nexport function createMcpGlobalProviders(metadata: FrontMcpConfigType) {\n return [frontMcpConfig.with(metadata), frontMcpServer];\n}\n"]}
1
+ {"version":3,"file":"front-mcp.providers.js","sourceRoot":"","sources":["../../../src/front-mcp/front-mcp.providers.ts"],"names":[],"mappings":";;AA0BA,4DAEC;AA5BD,sCAAgH;AAChH,+DAAmE;AACnE,yDAAoD;AACpD,wCAAoD;AAEpD,MAAM,cAAc,GAAG;IACrB,IAAI,EAAE,CAAC,QAA4B,EAAyC,EAAE,CAAC,CAAC;QAC9E,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iCAAc;QACvB,KAAK,EAAE,sBAAa,CAAC,MAAM;QAC3B,QAAQ,EAAE,QAAQ;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAE/D,MAAM,cAAc,GAAG,IAAA,sBAAa,EAAC;IACnC,IAAI,EAAE,iBAAiB;IACvB,KAAK,EAAE,sBAAa,CAAC,MAAM;IAC3B,OAAO,EAAE,uBAAc;IACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,iCAAc,CAAC;IAC9B,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;QACrB,OAAO,IAAI,wCAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC;IACzE,CAAC;CACF,CAAC,CAAC;AAEH,SAAgB,wBAAwB,CAAC,QAA4B;IACnE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,gCAAsB,CAAC,CAAC;AACjF,CAAC","sourcesContent":["import { FrontMcpConfigType, ProviderScope, FrontMcpServer, ProviderValueType, AsyncProvider } from '../common';\nimport { FrontMcpServerInstance } from '../server/server.instance';\nimport { FrontMcpConfig } from './front-mcp.tokens';\nimport { FrontMcpContextStorage } from '../context';\n\nconst frontMcpConfig = {\n with: (metadata: FrontMcpConfigType): ProviderValueType<FrontMcpConfigType> => ({\n name: 'frontmcp:config',\n provide: FrontMcpConfig,\n scope: ProviderScope.GLOBAL,\n useValue: metadata,\n }),\n};\n\nconst DEFAULT_HTTP_OPTIONS = { port: 3000, entryPath: '/mcp' };\n\nconst frontMcpServer = AsyncProvider({\n name: 'frontmcp:server',\n scope: ProviderScope.GLOBAL,\n provide: FrontMcpServer,\n inject: () => [FrontMcpConfig],\n useFactory: (config) => {\n return new FrontMcpServerInstance(config.http ?? DEFAULT_HTTP_OPTIONS);\n },\n});\n\nexport function createMcpGlobalProviders(metadata: FrontMcpConfigType) {\n return [frontMcpConfig.with(metadata), frontMcpServer, FrontMcpContextStorage];\n}\n"]}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Global handler registry for serverless deployments.
3
+ * The @FrontMcp decorator stores the handler here when running in serverless mode.
4
+ */
5
+ /**
6
+ * Store the serverless handler (called by decorator after handler is ready)
7
+ */
8
+ export declare function setServerlessHandler(handler: unknown): void;
9
+ /**
10
+ * Store the promise that resolves to the handler (called by decorator immediately)
11
+ */
12
+ export declare function setServerlessHandlerPromise(promise: Promise<unknown>): void;
13
+ /**
14
+ * Store an error that occurred during handler initialization
15
+ */
16
+ export declare function setServerlessHandlerError(error: Error): void;
17
+ /**
18
+ * Get the serverless handler synchronously.
19
+ * Returns null if handler is not ready yet.
20
+ * @throws Error if handler initialization failed
21
+ */
22
+ export declare function getServerlessHandler(): unknown;
23
+ /**
24
+ * Get the serverless handler asynchronously.
25
+ * Waits for the handler to be ready if needed.
26
+ * @throws Error if handler initialization failed or not initialized
27
+ */
28
+ export declare function getServerlessHandlerAsync(): Promise<unknown>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Global handler registry for serverless deployments.
4
+ * The @FrontMcp decorator stores the handler here when running in serverless mode.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.setServerlessHandler = setServerlessHandler;
8
+ exports.setServerlessHandlerPromise = setServerlessHandlerPromise;
9
+ exports.setServerlessHandlerError = setServerlessHandlerError;
10
+ exports.getServerlessHandler = getServerlessHandler;
11
+ exports.getServerlessHandlerAsync = getServerlessHandlerAsync;
12
+ let globalHandler = null;
13
+ let globalHandlerPromise = null;
14
+ let globalHandlerError = null;
15
+ /**
16
+ * Store the serverless handler (called by decorator after handler is ready)
17
+ */
18
+ function setServerlessHandler(handler) {
19
+ globalHandler = handler;
20
+ }
21
+ /**
22
+ * Store the promise that resolves to the handler (called by decorator immediately)
23
+ */
24
+ function setServerlessHandlerPromise(promise) {
25
+ globalHandlerPromise = promise;
26
+ }
27
+ /**
28
+ * Store an error that occurred during handler initialization
29
+ */
30
+ function setServerlessHandlerError(error) {
31
+ globalHandlerError = error;
32
+ }
33
+ /**
34
+ * Get the serverless handler synchronously.
35
+ * Returns null if handler is not ready yet.
36
+ * @throws Error if handler initialization failed
37
+ */
38
+ function getServerlessHandler() {
39
+ if (globalHandlerError) {
40
+ throw globalHandlerError;
41
+ }
42
+ return globalHandler;
43
+ }
44
+ /**
45
+ * Get the serverless handler asynchronously.
46
+ * Waits for the handler to be ready if needed.
47
+ * @throws Error if handler initialization failed or not initialized
48
+ */
49
+ async function getServerlessHandlerAsync() {
50
+ if (globalHandlerError) {
51
+ throw globalHandlerError;
52
+ }
53
+ if (globalHandlerPromise) {
54
+ return globalHandlerPromise;
55
+ }
56
+ if (!globalHandler) {
57
+ throw new Error('Serverless handler not initialized. Ensure @FrontMcp decorator ran and FRONTMCP_SERVERLESS=1 is set.');
58
+ }
59
+ return globalHandler;
60
+ }
61
+ //# sourceMappingURL=serverless-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverless-handler.js","sourceRoot":"","sources":["../../../src/front-mcp/serverless-handler.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,oDAEC;AAKD,kEAEC;AAKD,8DAEC;AAOD,oDAKC;AAOD,8DAaC;AAvDD,IAAI,aAAa,GAAY,IAAI,CAAC;AAClC,IAAI,oBAAoB,GAA4B,IAAI,CAAC;AACzD,IAAI,kBAAkB,GAAiB,IAAI,CAAC;AAE5C;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,aAAa,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,OAAyB;IACnE,oBAAoB,GAAG,OAAO,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,KAAY;IACpD,kBAAkB,GAAG,KAAK,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB;IAClC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC;IAC3B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,yBAAyB;IAC7C,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC;IAC3B,CAAC;IACD,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["/**\n * Global handler registry for serverless deployments.\n * The @FrontMcp decorator stores the handler here when running in serverless mode.\n */\n\nlet globalHandler: unknown = null;\nlet globalHandlerPromise: Promise<unknown> | null = null;\nlet globalHandlerError: Error | null = null;\n\n/**\n * Store the serverless handler (called by decorator after handler is ready)\n */\nexport function setServerlessHandler(handler: unknown): void {\n globalHandler = handler;\n}\n\n/**\n * Store the promise that resolves to the handler (called by decorator immediately)\n */\nexport function setServerlessHandlerPromise(promise: Promise<unknown>): void {\n globalHandlerPromise = promise;\n}\n\n/**\n * Store an error that occurred during handler initialization\n */\nexport function setServerlessHandlerError(error: Error): void {\n globalHandlerError = error;\n}\n\n/**\n * Get the serverless handler synchronously.\n * Returns null if handler is not ready yet.\n * @throws Error if handler initialization failed\n */\nexport function getServerlessHandler(): unknown {\n if (globalHandlerError) {\n throw globalHandlerError;\n }\n return globalHandler;\n}\n\n/**\n * Get the serverless handler asynchronously.\n * Waits for the handler to be ready if needed.\n * @throws Error if handler initialization failed or not initialized\n */\nexport async function getServerlessHandlerAsync(): Promise<unknown> {\n if (globalHandlerError) {\n throw globalHandlerError;\n }\n if (globalHandlerPromise) {\n return globalHandlerPromise;\n }\n if (!globalHandler) {\n throw new Error(\n 'Serverless handler not initialized. Ensure @FrontMcp decorator ran and FRONTMCP_SERVERLESS=1 is set.',\n );\n }\n return globalHandler;\n}\n"]}
@@ -1,3 +1,3 @@
1
- import { HookMetadata, HookRecord, Token } from "../common";
1
+ import { HookMetadata, HookRecord, Token } from '../common';
2
2
  export declare function collectHook(cls: Token): HookMetadata[];
3
3
  export declare function normalizeHooksFromCls(instance: any): HookRecord[];
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectHook = collectHook;
4
4
  exports.normalizeHooksFromCls = normalizeHooksFromCls;
5
5
  const common_1 = require("../common");
6
+ const hook_decorator_1 = require("../common/decorators/hook.decorator");
6
7
  const metadata_utils_1 = require("../utils/metadata.utils");
7
8
  const token_utils_1 = require("../utils/token.utils");
8
9
  function collectHook(cls) {
@@ -11,14 +12,20 @@ function collectHook(cls) {
11
12
  function normalizeHooksFromCls(instance) {
12
13
  const item = instance.constructor;
13
14
  if ((0, token_utils_1.isClass)(item)) {
14
- const hooks = collectHook(item);
15
- return hooks.map(hook => ({
15
+ // Get hooks from legacy decorators (Reflect.metadata)
16
+ const legacyHooks = collectHook(item);
17
+ // Get hooks from TC39 decorators (pending registry)
18
+ // This is needed when running with tsx/esbuild which uses TC39 decorators
19
+ const tc39Hooks = (0, hook_decorator_1.resolvePendingTC39HooksForClass)(item);
20
+ // Combine both sources
21
+ const allHooks = [...legacyHooks, ...tc39Hooks];
22
+ return allHooks.map((hook) => ({
16
23
  kind: common_1.HookKind.METHOD_TOKEN,
17
24
  provide: hook.static ? item[hook.method] : instance[hook.method],
18
25
  metadata: {
19
26
  ...hook,
20
27
  target: hook.static ? item : instance,
21
- }
28
+ },
22
29
  }));
23
30
  }
24
31
  // ignore hooks from non-class items
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.utils.js","sourceRoot":"","sources":["../../../src/hooks/hooks.utils.ts"],"names":[],"mappings":";;AAKA,kCAEC;AAGD,sDAeC;AAzBD,sCAA4F;AAC5F,4DAAoD;AACpD,sDAA6C;AAG7C,SAAgB,WAAW,CAAC,GAAU;IACpC,OAAO,CAAC,IAAA,4BAAW,EAAC,+BAAsB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;AAClF,CAAC;AAGD,SAAgB,qBAAqB,CAAC,QAAa;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;IAClC,IAAI,IAAA,qBAAO,EAAC,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,iBAAQ,CAAC,YAAY;YAC3B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAChE,QAAQ,EAAE;gBACR,GAAG,IAAI;gBACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;aACtC;SACF,CAAC,CAAC,CAAA;IACL,CAAC;IACD,oCAAoC;IACpC,OAAO,EAAE,CAAA;AACX,CAAC","sourcesContent":["import {FrontMcpFlowHookTokens, HookKind, HookMetadata, HookRecord, Token} from \"../common\";\nimport {getMetadata} from \"../utils/metadata.utils\";\nimport {isClass} from \"../utils/token.utils\";\n\n\nexport function collectHook(cls: Token): HookMetadata[] {\n return (getMetadata(FrontMcpFlowHookTokens.hooks, cls) ?? []) as HookMetadata[];\n}\n\n\nexport function normalizeHooksFromCls(instance: any): HookRecord[] {\n const item = instance.constructor;\n if (isClass(item)) {\n const hooks = collectHook(item);\n return hooks.map(hook => ({\n kind: HookKind.METHOD_TOKEN,\n provide: hook.static ? item[hook.method] : instance[hook.method],\n metadata: {\n ...hook,\n target: hook.static ? item : instance,\n }\n }))\n }\n // ignore hooks from non-class items\n return []\n}"]}
1
+ {"version":3,"file":"hooks.utils.js","sourceRoot":"","sources":["../../../src/hooks/hooks.utils.ts"],"names":[],"mappings":";;AAKA,kCAEC;AAED,sDAwBC;AAjCD,sCAA8F;AAC9F,wEAAsF;AACtF,4DAAsD;AACtD,sDAA+C;AAE/C,SAAgB,WAAW,CAAC,GAAU;IACpC,OAAO,CAAC,IAAA,4BAAW,EAAC,+BAAsB,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;AAClF,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAa;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;IAClC,IAAI,IAAA,qBAAO,EAAC,IAAI,CAAC,EAAE,CAAC;QAClB,sDAAsD;QACtD,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEtC,oDAAoD;QACpD,0EAA0E;QAC1E,MAAM,SAAS,GAAG,IAAA,gDAA+B,EAAC,IAAI,CAAC,CAAC;QAExD,uBAAuB;QACvB,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC,CAAC;QAEhD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,iBAAQ,CAAC,YAAY;YAC3B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAChE,QAAQ,EAAE;gBACR,GAAG,IAAI;gBACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;aACtC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IACD,oCAAoC;IACpC,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import { FrontMcpFlowHookTokens, HookKind, HookMetadata, HookRecord, Token } from '../common';\nimport { resolvePendingTC39HooksForClass } from '../common/decorators/hook.decorator';\nimport { getMetadata } from '../utils/metadata.utils';\nimport { isClass } from '../utils/token.utils';\n\nexport function collectHook(cls: Token): HookMetadata[] {\n return (getMetadata(FrontMcpFlowHookTokens.hooks, cls) ?? []) as HookMetadata[];\n}\n\nexport function normalizeHooksFromCls(instance: any): HookRecord[] {\n const item = instance.constructor;\n if (isClass(item)) {\n // Get hooks from legacy decorators (Reflect.metadata)\n const legacyHooks = collectHook(item);\n\n // Get hooks from TC39 decorators (pending registry)\n // This is needed when running with tsx/esbuild which uses TC39 decorators\n const tc39Hooks = resolvePendingTC39HooksForClass(item);\n\n // Combine both sources\n const allHooks = [...legacyHooks, ...tc39Hooks];\n\n return allHooks.map((hook) => ({\n kind: HookKind.METHOD_TOKEN,\n provide: hook.static ? item[hook.method] : instance[hook.method],\n metadata: {\n ...hook,\n target: hook.static ? item : instance,\n },\n }));\n }\n // ignore hooks from non-class items\n return [];\n}\n"]}