@frontmcp/sdk 0.5.1 → 0.6.1

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 (265) hide show
  1. package/README.md +1 -0
  2. package/package.json +12 -16
  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 +2 -0
  28. package/src/auth/session/index.js +5 -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/session/vercel-kv-session.store.d.ts +96 -0
  50. package/src/auth/session/vercel-kv-session.store.js +216 -0
  51. package/src/auth/session/vercel-kv-session.store.js.map +1 -0
  52. package/src/auth/ui/base-layout.d.ts +0 -8
  53. package/src/auth/ui/base-layout.js +1 -14
  54. package/src/auth/ui/base-layout.js.map +1 -1
  55. package/src/auth/ui/index.d.ts +3 -4
  56. package/src/auth/ui/index.js +10 -11
  57. package/src/auth/ui/index.js.map +1 -1
  58. package/src/auth/ui/{htmx-templates.d.ts → templates.d.ts} +5 -6
  59. package/src/auth/ui/{htmx-templates.js → templates.js} +8 -15
  60. package/src/auth/ui/templates.js.map +1 -0
  61. package/src/common/decorators/decorator-utils.js.map +1 -1
  62. package/src/common/decorators/front-mcp.decorator.js +26 -3
  63. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  64. package/src/common/index.d.ts +0 -1
  65. package/src/common/index.js +0 -1
  66. package/src/common/index.js.map +1 -1
  67. package/src/common/interfaces/adapter.interface.d.ts +6 -0
  68. package/src/common/interfaces/adapter.interface.js.map +1 -1
  69. package/src/common/interfaces/execution-context.interface.d.ts +52 -3
  70. package/src/common/interfaces/execution-context.interface.js +88 -3
  71. package/src/common/interfaces/execution-context.interface.js.map +1 -1
  72. package/src/common/interfaces/flow.interface.d.ts +13 -0
  73. package/src/common/interfaces/flow.interface.js +24 -0
  74. package/src/common/interfaces/flow.interface.js.map +1 -1
  75. package/src/common/interfaces/server.interface.d.ts +9 -0
  76. package/src/common/interfaces/server.interface.js.map +1 -1
  77. package/src/common/metadata/app.metadata.d.ts +108 -0
  78. package/src/common/metadata/front-mcp.metadata.d.ts +1341 -2
  79. package/src/common/metadata/front-mcp.metadata.js +4 -1
  80. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  81. package/src/common/metadata/prompt.metadata.d.ts +4 -0
  82. package/src/common/metadata/provider.metadata.d.ts +14 -0
  83. package/src/common/metadata/provider.metadata.js +18 -2
  84. package/src/common/metadata/provider.metadata.js.map +1 -1
  85. package/src/common/metadata/resource.metadata.d.ts +8 -0
  86. package/src/common/metadata/tool-ui.metadata.d.ts +2 -2
  87. package/src/common/metadata/tool-ui.metadata.js +1 -1
  88. package/src/common/metadata/tool-ui.metadata.js.map +1 -1
  89. package/src/common/metadata/tool.metadata.d.ts +5 -1
  90. package/src/common/metadata/tool.metadata.js.map +1 -1
  91. package/src/common/migrate/auth-transport.migrate.d.ts +62 -0
  92. package/src/common/migrate/auth-transport.migrate.js +140 -0
  93. package/src/common/migrate/auth-transport.migrate.js.map +1 -0
  94. package/src/common/migrate/index.d.ts +1 -0
  95. package/src/common/migrate/index.js +6 -0
  96. package/src/common/migrate/index.js.map +1 -0
  97. package/src/common/schemas/http-output.schema.d.ts +24 -6
  98. package/src/common/schemas/index.d.ts +1 -0
  99. package/src/common/schemas/index.js +1 -0
  100. package/src/common/schemas/index.js.map +1 -1
  101. package/src/common/schemas/session-header.schema.d.ts +16 -0
  102. package/src/common/schemas/session-header.schema.js +42 -0
  103. package/src/common/schemas/session-header.schema.js.map +1 -0
  104. package/src/common/tokens/front-mcp.tokens.js +4 -1
  105. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  106. package/src/common/types/options/auth.options.d.ts +233 -3
  107. package/src/common/types/options/auth.options.js +29 -40
  108. package/src/common/types/options/auth.options.js.map +1 -1
  109. package/src/common/types/options/index.d.ts +2 -0
  110. package/src/common/types/options/index.js +2 -0
  111. package/src/common/types/options/index.js.map +1 -1
  112. package/src/common/types/options/redis.options.d.ts +190 -0
  113. package/src/common/types/options/redis.options.js +191 -0
  114. package/src/common/types/options/redis.options.js.map +1 -0
  115. package/src/common/types/options/server-info.options.d.ts +4 -0
  116. package/src/common/types/options/transport.options.d.ts +148 -0
  117. package/src/common/types/options/transport.options.js +121 -0
  118. package/src/common/types/options/transport.options.js.map +1 -0
  119. package/src/common/utils/global-config.utils.d.ts +36 -0
  120. package/src/common/utils/global-config.utils.js +44 -0
  121. package/src/common/utils/global-config.utils.js.map +1 -0
  122. package/src/common/utils/index.d.ts +1 -0
  123. package/src/common/utils/index.js +1 -0
  124. package/src/common/utils/index.js.map +1 -1
  125. package/src/completion/flows/complete.flow.d.ts +6 -8
  126. package/src/context/frontmcp-context-storage.d.ts +94 -0
  127. package/src/context/frontmcp-context-storage.js +183 -0
  128. package/src/context/frontmcp-context-storage.js.map +1 -0
  129. package/src/context/frontmcp-context.d.ts +269 -0
  130. package/src/context/frontmcp-context.js +360 -0
  131. package/src/context/frontmcp-context.js.map +1 -0
  132. package/src/context/frontmcp-context.provider.d.ts +43 -0
  133. package/src/context/frontmcp-context.provider.js +61 -0
  134. package/src/context/frontmcp-context.provider.js.map +1 -0
  135. package/src/context/index.d.ts +34 -0
  136. package/src/context/index.js +64 -0
  137. package/src/context/index.js.map +1 -0
  138. package/src/context/request-context-storage.d.ts +89 -0
  139. package/src/context/request-context-storage.js +183 -0
  140. package/src/context/request-context-storage.js.map +1 -0
  141. package/src/context/request-context.d.ts +184 -0
  142. package/src/context/request-context.js +209 -0
  143. package/src/context/request-context.js.map +1 -0
  144. package/src/context/request-context.provider.d.ts +37 -0
  145. package/src/context/request-context.provider.js +51 -0
  146. package/src/context/request-context.provider.js.map +1 -0
  147. package/src/context/session-key.provider.d.ts +45 -0
  148. package/src/context/session-key.provider.js +65 -0
  149. package/src/context/session-key.provider.js.map +1 -0
  150. package/src/context/trace-context.d.ts +43 -0
  151. package/src/context/trace-context.js +142 -0
  152. package/src/context/trace-context.js.map +1 -0
  153. package/src/errors/index.d.ts +1 -1
  154. package/src/errors/index.js +4 -1
  155. package/src/errors/index.js.map +1 -1
  156. package/src/errors/mcp.error.d.ts +16 -0
  157. package/src/errors/mcp.error.js +29 -1
  158. package/src/errors/mcp.error.js.map +1 -1
  159. package/src/flows/flow.instance.d.ts +16 -0
  160. package/src/flows/flow.instance.js +166 -80
  161. package/src/flows/flow.instance.js.map +1 -1
  162. package/src/flows/flow.registry.d.ts +5 -0
  163. package/src/flows/flow.registry.js +45 -3
  164. package/src/flows/flow.registry.js.map +1 -1
  165. package/src/front-mcp/front-mcp.d.ts +12 -0
  166. package/src/front-mcp/front-mcp.js +22 -3
  167. package/src/front-mcp/front-mcp.js.map +1 -1
  168. package/src/front-mcp/front-mcp.providers.d.ts +474 -1
  169. package/src/front-mcp/front-mcp.providers.js +2 -1
  170. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  171. package/src/front-mcp/index.d.ts +1 -0
  172. package/src/front-mcp/index.js +3 -0
  173. package/src/front-mcp/index.js.map +1 -1
  174. package/src/front-mcp/serverless-handler.d.ts +28 -0
  175. package/src/front-mcp/serverless-handler.js +61 -0
  176. package/src/front-mcp/serverless-handler.js.map +1 -0
  177. package/src/hooks/hooks.utils.d.ts +1 -1
  178. package/src/hooks/hooks.utils.js +10 -3
  179. package/src/hooks/hooks.utils.js.map +1 -1
  180. package/src/index.d.ts +9 -5
  181. package/src/index.js +21 -1
  182. package/src/index.js.map +1 -1
  183. package/src/logger/instances/instance.logger.js +0 -1
  184. package/src/logger/instances/instance.logger.js.map +1 -1
  185. package/src/logging/flows/set-level.flow.d.ts +6 -8
  186. package/src/notification/notification.service.js +5 -1
  187. package/src/notification/notification.service.js.map +1 -1
  188. package/src/prompt/flows/get-prompt.flow.d.ts +14 -8
  189. package/src/prompt/flows/prompts-list.flow.d.ts +8 -7
  190. package/src/provider/provider.registry.d.ts +97 -5
  191. package/src/provider/provider.registry.js +306 -9
  192. package/src/provider/provider.registry.js.map +1 -1
  193. package/src/provider/provider.types.d.ts +21 -3
  194. package/src/provider/provider.types.js.map +1 -1
  195. package/src/resource/flows/read-resource.flow.d.ts +8 -9
  196. package/src/resource/flows/resource-templates-list.flow.d.ts +8 -7
  197. package/src/resource/flows/resources-list.flow.d.ts +8 -7
  198. package/src/resource/flows/subscribe-resource.flow.d.ts +6 -8
  199. package/src/resource/flows/unsubscribe-resource.flow.d.ts +6 -8
  200. package/src/scope/flows/http.request.flow.js +43 -7
  201. package/src/scope/flows/http.request.flow.js.map +1 -1
  202. package/src/scope/scope.instance.js +12 -5
  203. package/src/scope/scope.instance.js.map +1 -1
  204. package/src/server/adapters/base.host.adapter.d.ts +9 -0
  205. package/src/server/adapters/base.host.adapter.js.map +1 -1
  206. package/src/server/adapters/express.host.adapter.d.ts +12 -0
  207. package/src/server/adapters/express.host.adapter.js +21 -1
  208. package/src/server/adapters/express.host.adapter.js.map +1 -1
  209. package/src/server/server.instance.d.ts +3 -0
  210. package/src/server/server.instance.js +14 -7
  211. package/src/server/server.instance.js.map +1 -1
  212. package/src/store/adapters/store.vercel-kv.adapter.d.ts +86 -0
  213. package/src/store/adapters/store.vercel-kv.adapter.js +155 -0
  214. package/src/store/adapters/store.vercel-kv.adapter.js.map +1 -0
  215. package/src/store/index.d.ts +2 -0
  216. package/src/store/index.js +2 -0
  217. package/src/store/index.js.map +1 -1
  218. package/src/store/store.factory.d.ts +86 -0
  219. package/src/store/store.factory.js +194 -0
  220. package/src/store/store.factory.js.map +1 -0
  221. package/src/tool/flows/call-tool.flow.d.ts +38 -19
  222. package/src/tool/flows/call-tool.flow.js +240 -194
  223. package/src/tool/flows/call-tool.flow.js.map +1 -1
  224. package/src/tool/flows/tools-list.flow.d.ts +14 -17
  225. package/src/tool/flows/tools-list.flow.js +84 -33
  226. package/src/tool/flows/tools-list.flow.js.map +1 -1
  227. package/src/tool/tool.instance.d.ts +1 -4
  228. package/src/tool/ui/index.d.ts +4 -4
  229. package/src/tool/ui/index.js +4 -4
  230. package/src/tool/ui/index.js.map +1 -1
  231. package/src/tool/ui/platform-adapters.d.ts +2 -2
  232. package/src/tool/ui/platform-adapters.js +3 -3
  233. package/src/tool/ui/platform-adapters.js.map +1 -1
  234. package/src/tool/ui/template-helpers.d.ts +5 -7
  235. package/src/tool/ui/template-helpers.js +9 -26
  236. package/src/tool/ui/template-helpers.js.map +1 -1
  237. package/src/tool/ui/ui-resource.handler.d.ts +1 -1
  238. package/src/tool/ui/ui-resource.handler.js +5 -5
  239. package/src/tool/ui/ui-resource.handler.js.map +1 -1
  240. package/src/transport/adapters/transport.streamable-http.adapter.js +1 -0
  241. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  242. package/src/transport/flows/handle.sse.flow.js +9 -2
  243. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  244. package/src/transport/flows/handle.streamable-http.flow.js +63 -6
  245. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  246. package/src/transport/mcp-handlers/complete-request.handler.d.ts +4 -15
  247. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +5 -15
  248. package/src/transport/mcp-handlers/index.d.ts +67 -195
  249. package/src/transport/mcp-handlers/initialize-request.handler.js +12 -2
  250. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  251. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +5 -15
  252. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +5 -15
  253. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +5 -15
  254. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +5 -15
  255. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +3 -14
  256. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +4 -15
  257. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +3 -14
  258. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +3 -14
  259. package/src/transport/transport.registry.d.ts +72 -4
  260. package/src/transport/transport.registry.js +342 -11
  261. package/src/transport/transport.registry.js.map +1 -1
  262. package/src/auth/ui/htmx-templates.js.map +0 -1
  263. package/src/common/providers/session.provider.d.ts +0 -13
  264. package/src/common/providers/session.provider.js +0 -27
  265. package/src/common/providers/session.provider.js.map +0 -1
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const regsitry_1 = require("../regsitry");
4
4
  const common_1 = require("../common");
5
5
  const flow_utils_1 = require("./flow.utils");
6
- const token_utils_1 = require("../utils/token.utils");
6
+ const utils_1 = require("../utils");
7
7
  const flow_instance_1 = require("./flow.instance");
8
+ const context_1 = require("../context");
9
+ const crypto_1 = require("crypto");
8
10
  class FlowRegistry extends regsitry_1.RegistryAbstract {
9
11
  constructor(providers, list) {
10
12
  super('FlowRegistry', providers, list);
@@ -32,7 +34,7 @@ class FlowRegistry extends regsitry_1.RegistryAbstract {
32
34
  }
33
35
  else {
34
36
  if (!this.providers.get(d)) {
35
- throw new Error(`Flow ${(0, token_utils_1.tokenName)(token)} depends on ${(0, token_utils_1.tokenName)(d)}, which is not registered.`);
37
+ throw new Error(`Flow ${(0, utils_1.tokenName)(token)} depends on ${(0, utils_1.tokenName)(d)}, which is not registered.`);
36
38
  }
37
39
  this.graph.get(token).add(d);
38
40
  }
@@ -72,7 +74,47 @@ class FlowRegistry extends regsitry_1.RegistryAbstract {
72
74
  if (!flow) {
73
75
  throw new Error(`Flow ${name} is not registered`);
74
76
  }
75
- return flow.run(input, deps ?? new Map());
77
+ // Get context storage for MCP flows (if not already in a context)
78
+ const contextStorage = this.getContextStorage();
79
+ if (!contextStorage) {
80
+ // No context storage available, run without context (backward compatibility)
81
+ return flow.run(input, deps ?? new Map());
82
+ }
83
+ // Check if we're already in a context (e.g., HTTP middleware flow)
84
+ const existingContext = contextStorage.getStore();
85
+ if (existingContext) {
86
+ // Already in context, run directly
87
+ return flow.run(input, deps ?? new Map());
88
+ }
89
+ // Extract session info from MCP handler context (input.ctx.authInfo)
90
+ // MCP handlers pass { request, ctx } where ctx has authInfo
91
+ const mcpCtx = input?.ctx;
92
+ const authInfo = mcpCtx?.authInfo;
93
+ // Get session ID from authInfo (set by ensureAuthInfo in transport adapter)
94
+ // Fall back to anonymous session if not available
95
+ const rawSessionId = authInfo?.sessionId;
96
+ const sessionId = typeof rawSessionId === 'string' && rawSessionId.trim().length > 0 ? rawSessionId.trim() : `anon:${(0, crypto_1.randomUUID)()}`;
97
+ const scope = this.providers.getActiveScope();
98
+ // Wrap flow execution in FrontMcpContext
99
+ return Promise.resolve(contextStorage.run({
100
+ sessionId,
101
+ scopeId: scope.id,
102
+ authInfo,
103
+ }, async () => {
104
+ return flow.run(input, deps ?? new Map());
105
+ }));
106
+ }
107
+ /**
108
+ * Get FrontMcpContextStorage from providers (with fallback).
109
+ * Returns undefined if not available (backward compatibility).
110
+ */
111
+ getContextStorage() {
112
+ try {
113
+ return this.providers.get(context_1.FrontMcpContextStorage);
114
+ }
115
+ catch {
116
+ return undefined;
117
+ }
76
118
  }
77
119
  }
78
120
  exports.default = FlowRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"flow.registry.js","sourceRoot":"","sources":["../../../src/flows/flow.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import ProviderRegistry from '../provider/provider.registry';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { FlowInputOf, FlowName, FlowOutputOf, FlowRecord, FlowType, ScopeEntry, Token, Type } from '../common';\nimport { normalizeFlow } from './flow.utils';\nimport { tokenName } from '../utils/token.utils';\nimport { FlowInstance } from './flow.instance';\n\nexport default class FlowRegistry extends RegistryAbstract<FlowInstance<FlowName>, FlowRecord, FlowType[]> {\n constructor(providers: ProviderRegistry, list: FlowType[]) {\n super('FlowRegistry', providers, list);\n }\n\n protected override buildMap(list: FlowType[]): RegistryBuildMapResult<FlowRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, FlowRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = rec.metadata.dependsOn ?? [];\n\n for (const d of deps) {\n if (d == ScopeEntry) {\n this.graph.get(token)!.add(ScopeEntry);\n } else {\n if (!this.providers.get(d)) {\n throw new Error(`Flow ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n }\n\n /** Instantiate adapters, run fetch/transform, and populate registries. */\n protected async initialize(): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const token of this.tokens) {\n const instance = this.initializeOne(token);\n readyArr.push(instance.ready);\n }\n await Promise.all(readyArr);\n }\n\n private initializeOne(token: Token) {\n const rec = this.defs.get(token)!;\n const deps = this.graph.get(token)!;\n\n const instance = new FlowInstance(this.providers.getActiveScope(), rec, deps, this.providers);\n this.instances.set(rec.metadata.name, instance);\n return instance;\n }\n\n async registryFlows(rawFlows: FlowType[]): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const raw of rawFlows) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n this.tokens.add(provide);\n this.defs.set(provide, rec);\n this.graph.set(provide, new Set());\n readyArr.push(this.initializeOne(provide).ready);\n }\n await Promise.all(readyArr);\n }\n\n runFlow<Name extends FlowName>(\n name: Name,\n input: FlowInputOf<Name>,\n deps?: Map<Token, Type>,\n ): Promise<FlowOutputOf<Name> | undefined> {\n const flow = this.instances.get(name);\n if (!flow) {\n throw new Error(`Flow ${name} is not registered`);\n }\n return flow.run(input, deps ?? new Map()) as Promise<FlowOutputOf<Name> | undefined>;\n }\n}\n"]}
1
+ {"version":3,"file":"flow.registry.js","sourceRoot":"","sources":["../../../src/flows/flow.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import ProviderRegistry from '../provider/provider.registry';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { FlowInputOf, FlowName, FlowOutputOf, FlowRecord, FlowType, ScopeEntry, Token, Type } from '../common';\nimport { normalizeFlow } from './flow.utils';\nimport { tokenName } from '../utils';\nimport { FlowInstance } from './flow.instance';\nimport { FrontMcpContextStorage } from '../context';\nimport { randomUUID } from 'crypto';\n\nexport default class FlowRegistry extends RegistryAbstract<FlowInstance<FlowName>, FlowRecord, FlowType[]> {\n constructor(providers: ProviderRegistry, list: FlowType[]) {\n super('FlowRegistry', providers, list);\n }\n\n protected override buildMap(list: FlowType[]): RegistryBuildMapResult<FlowRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, FlowRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = rec.metadata.dependsOn ?? [];\n\n for (const d of deps) {\n if (d == ScopeEntry) {\n this.graph.get(token)!.add(ScopeEntry);\n } else {\n if (!this.providers.get(d)) {\n throw new Error(`Flow ${tokenName(token)} depends on ${tokenName(d)}, which is not registered.`);\n }\n this.graph.get(token)!.add(d);\n }\n }\n }\n }\n\n /** Instantiate adapters, run fetch/transform, and populate registries. */\n protected async initialize(): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const token of this.tokens) {\n const instance = this.initializeOne(token);\n readyArr.push(instance.ready);\n }\n await Promise.all(readyArr);\n }\n\n private initializeOne(token: Token) {\n const rec = this.defs.get(token)!;\n const deps = this.graph.get(token)!;\n\n const instance = new FlowInstance(this.providers.getActiveScope(), rec, deps, this.providers);\n this.instances.set(rec.metadata.name, instance);\n return instance;\n }\n\n async registryFlows(rawFlows: FlowType[]): Promise<void> {\n const readyArr: Promise<void>[] = [];\n for (const raw of rawFlows) {\n const rec = normalizeFlow(raw);\n const provide = rec.provide;\n this.tokens.add(provide);\n this.defs.set(provide, rec);\n this.graph.set(provide, new Set());\n readyArr.push(this.initializeOne(provide).ready);\n }\n await Promise.all(readyArr);\n }\n\n runFlow<Name extends FlowName>(\n name: Name,\n input: FlowInputOf<Name>,\n deps?: Map<Token, Type>,\n ): Promise<FlowOutputOf<Name> | undefined> {\n const flow = this.instances.get(name);\n if (!flow) {\n throw new Error(`Flow ${name} is not registered`);\n }\n\n // Get context storage for MCP flows (if not already in a context)\n const contextStorage = this.getContextStorage();\n if (!contextStorage) {\n // No context storage available, run without context (backward compatibility)\n return flow.run(input, deps ?? new Map()) as Promise<FlowOutputOf<Name> | undefined>;\n }\n\n // Check if we're already in a context (e.g., HTTP middleware flow)\n const existingContext = contextStorage.getStore();\n if (existingContext) {\n // Already in context, run directly\n return flow.run(input, deps ?? new Map()) as Promise<FlowOutputOf<Name> | undefined>;\n }\n\n // Extract session info from MCP handler context (input.ctx.authInfo)\n // MCP handlers pass { request, ctx } where ctx has authInfo\n const mcpCtx = (input as any)?.ctx;\n const authInfo = mcpCtx?.authInfo;\n\n // Get session ID from authInfo (set by ensureAuthInfo in transport adapter)\n // Fall back to anonymous session if not available\n const rawSessionId = authInfo?.sessionId;\n const sessionId =\n typeof rawSessionId === 'string' && rawSessionId.trim().length > 0 ? rawSessionId.trim() : `anon:${randomUUID()}`;\n\n const scope = this.providers.getActiveScope();\n\n // Wrap flow execution in FrontMcpContext\n return Promise.resolve(\n contextStorage.run(\n {\n sessionId,\n scopeId: scope.id,\n authInfo,\n },\n async () => {\n return flow.run(input, deps ?? new Map()) as Promise<FlowOutputOf<Name> | undefined>;\n },\n ),\n );\n }\n\n /**\n * Get FrontMcpContextStorage from providers (with fallback).\n * Returns undefined if not available (backward compatibility).\n */\n private getContextStorage(): FrontMcpContextStorage | undefined {\n try {\n return this.providers.get(FrontMcpContextStorage);\n } catch {\n return undefined;\n }\n }\n}\n"]}
@@ -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"]}