@frontmcp/sdk 0.4.0 → 0.5.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 (558) hide show
  1. package/README.md +30 -18
  2. package/package.json +20 -5
  3. package/src/app/app.registry.d.ts +3 -2
  4. package/src/app/app.registry.js +3 -1
  5. package/src/app/app.registry.js.map +1 -1
  6. package/src/app/instances/app.local.instance.js +2 -2
  7. package/src/app/instances/app.local.instance.js.map +1 -1
  8. package/src/auth/auth.registry.d.ts +34 -2
  9. package/src/auth/auth.registry.js +162 -24
  10. package/src/auth/auth.registry.js.map +1 -1
  11. package/src/auth/auth.utils.js +8 -9
  12. package/src/auth/auth.utils.js.map +1 -1
  13. package/src/auth/authorization/authorization.class.d.ts +125 -0
  14. package/src/auth/authorization/authorization.class.js +224 -0
  15. package/src/auth/authorization/authorization.class.js.map +1 -0
  16. package/src/auth/authorization/authorization.types.d.ts +300 -0
  17. package/src/auth/authorization/authorization.types.js +79 -0
  18. package/src/auth/authorization/authorization.types.js.map +1 -0
  19. package/src/auth/authorization/index.d.ts +5 -0
  20. package/src/auth/authorization/index.js +19 -0
  21. package/src/auth/authorization/index.js.map +1 -0
  22. package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
  23. package/src/auth/authorization/orchestrated.authorization.js +306 -0
  24. package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
  25. package/src/auth/authorization/public.authorization.d.ts +91 -0
  26. package/src/auth/authorization/public.authorization.js +132 -0
  27. package/src/auth/authorization/public.authorization.js.map +1 -0
  28. package/src/auth/authorization/transparent.authorization.d.ts +130 -0
  29. package/src/auth/authorization/transparent.authorization.js +147 -0
  30. package/src/auth/authorization/transparent.authorization.js.map +1 -0
  31. package/src/auth/consent/consent.types.d.ts +111 -0
  32. package/src/auth/consent/consent.types.js +119 -0
  33. package/src/auth/consent/consent.types.js.map +1 -0
  34. package/src/auth/consent/index.d.ts +1 -0
  35. package/src/auth/consent/index.js +13 -0
  36. package/src/auth/consent/index.js.map +1 -0
  37. package/src/auth/detection/auth-provider-detection.d.ts +84 -0
  38. package/src/auth/detection/auth-provider-detection.js +230 -0
  39. package/src/auth/detection/auth-provider-detection.js.map +1 -0
  40. package/src/auth/detection/index.d.ts +1 -0
  41. package/src/auth/detection/index.js +15 -0
  42. package/src/auth/detection/index.js.map +1 -0
  43. package/src/auth/flows/auth.verify.flow.d.ts +110 -0
  44. package/src/auth/flows/auth.verify.flow.js +379 -0
  45. package/src/auth/flows/auth.verify.flow.js.map +1 -0
  46. package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
  47. package/src/auth/flows/oauth.authorize.flow.js +701 -33
  48. package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
  49. package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
  50. package/src/auth/flows/oauth.callback.flow.js +357 -0
  51. package/src/auth/flows/oauth.callback.flow.js.map +1 -0
  52. package/src/auth/flows/oauth.register.flow.d.ts +32 -125
  53. package/src/auth/flows/oauth.token.flow.d.ts +52 -154
  54. package/src/auth/flows/oauth.token.flow.js +193 -55
  55. package/src/auth/flows/oauth.token.flow.js.map +1 -1
  56. package/src/auth/flows/session.verify.flow.d.ts +66 -321
  57. package/src/auth/flows/session.verify.flow.js +107 -18
  58. package/src/auth/flows/session.verify.flow.js.map +1 -1
  59. package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
  60. package/src/auth/flows/well-known.jwks.flow.js +15 -8
  61. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  62. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
  63. package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
  64. package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
  65. package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
  66. package/src/auth/flows/well-known.prm.flow.js +3 -4
  67. package/src/auth/flows/well-known.prm.flow.js.map +1 -1
  68. package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
  69. package/src/auth/instances/instance.local-primary-auth.js +236 -6
  70. package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
  71. package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
  72. package/src/auth/instances/instance.remote-primary-auth.js +2 -2
  73. package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
  74. package/src/auth/session/authorization-vault.d.ts +611 -0
  75. package/src/auth/session/authorization-vault.js +817 -0
  76. package/src/auth/session/authorization-vault.js.map +1 -0
  77. package/src/auth/session/authorization.store.d.ts +301 -0
  78. package/src/auth/session/authorization.store.js +323 -0
  79. package/src/auth/session/authorization.store.js.map +1 -0
  80. package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
  81. package/src/auth/session/encrypted-authorization-vault.js +493 -0
  82. package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
  83. package/src/auth/session/index.d.ts +4 -4
  84. package/src/auth/session/index.js +11 -7
  85. package/src/auth/session/index.js.map +1 -1
  86. package/src/auth/session/session.schema.d.ts +1 -1
  87. package/src/auth/session/session.service.d.ts +1 -1
  88. package/src/auth/session/transport-session.manager.d.ts +101 -0
  89. package/src/auth/session/transport-session.manager.js +300 -0
  90. package/src/auth/session/transport-session.manager.js.map +1 -0
  91. package/src/auth/session/transport-session.types.d.ts +457 -0
  92. package/src/auth/session/transport-session.types.js +110 -0
  93. package/src/auth/session/transport-session.types.js.map +1 -0
  94. package/src/auth/session/utils/session-id.utils.d.ts +14 -2
  95. package/src/auth/session/utils/session-id.utils.js +68 -19
  96. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  97. package/src/auth/session/vault-encryption.d.ts +189 -0
  98. package/src/auth/session/vault-encryption.js +263 -0
  99. package/src/auth/session/vault-encryption.js.map +1 -0
  100. package/src/auth/ui/base-layout.d.ts +188 -0
  101. package/src/auth/ui/base-layout.js +292 -0
  102. package/src/auth/ui/base-layout.js.map +1 -0
  103. package/src/auth/ui/htmx-templates.d.ts +135 -0
  104. package/src/auth/ui/htmx-templates.js +433 -0
  105. package/src/auth/ui/htmx-templates.js.map +1 -0
  106. package/src/auth/ui/index.d.ts +11 -0
  107. package/src/auth/ui/index.js +35 -0
  108. package/src/auth/ui/index.js.map +1 -0
  109. package/src/auth/utils/audience.validator.d.ts +129 -0
  110. package/src/auth/utils/audience.validator.js +196 -0
  111. package/src/auth/utils/audience.validator.js.map +1 -0
  112. package/src/auth/utils/index.d.ts +2 -0
  113. package/src/auth/utils/index.js +7 -0
  114. package/src/auth/utils/index.js.map +1 -0
  115. package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
  116. package/src/auth/utils/www-authenticate.utils.js +183 -0
  117. package/src/auth/utils/www-authenticate.utils.js.map +1 -0
  118. package/src/common/common.schema.d.ts +2 -16
  119. package/src/common/constants.d.ts +3 -0
  120. package/src/common/constants.js +6 -1
  121. package/src/common/constants.js.map +1 -1
  122. package/src/common/decorators/decorator-utils.d.ts +131 -0
  123. package/src/common/decorators/decorator-utils.js +195 -0
  124. package/src/common/decorators/decorator-utils.js.map +1 -0
  125. package/src/common/decorators/front-mcp.decorator.js +3 -2
  126. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  127. package/src/common/decorators/hook.decorator.d.ts +58 -2
  128. package/src/common/decorators/hook.decorator.js +127 -17
  129. package/src/common/decorators/hook.decorator.js.map +1 -1
  130. package/src/common/decorators/plugin.decorator.d.ts +1 -1
  131. package/src/common/decorators/plugin.decorator.js +11 -10
  132. package/src/common/decorators/plugin.decorator.js.map +1 -1
  133. package/src/common/decorators/resource.decorator.d.ts +32 -3
  134. package/src/common/decorators/resource.decorator.js +46 -4
  135. package/src/common/decorators/resource.decorator.js.map +1 -1
  136. package/src/common/decorators/tool.decorator.d.ts +54 -5
  137. package/src/common/decorators/tool.decorator.js.map +1 -1
  138. package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
  139. package/src/common/dynamic/dynamic.plugin.js +7 -1
  140. package/src/common/dynamic/dynamic.plugin.js.map +1 -1
  141. package/src/common/entries/prompt.entry.d.ts +46 -2
  142. package/src/common/entries/prompt.entry.js +10 -0
  143. package/src/common/entries/prompt.entry.js.map +1 -1
  144. package/src/common/entries/resource.entry.d.ts +69 -6
  145. package/src/common/entries/resource.entry.js +27 -3
  146. package/src/common/entries/resource.entry.js.map +1 -1
  147. package/src/common/entries/scope.entry.d.ts +5 -1
  148. package/src/common/entries/scope.entry.js +3 -3
  149. package/src/common/entries/scope.entry.js.map +1 -1
  150. package/src/common/flow/flow.utils.d.ts +56 -0
  151. package/src/common/flow/flow.utils.js +96 -0
  152. package/src/common/flow/flow.utils.js.map +1 -0
  153. package/src/common/index.d.ts +2 -2
  154. package/src/common/index.js +2 -2
  155. package/src/common/index.js.map +1 -1
  156. package/src/common/interfaces/execution-context.interface.d.ts +59 -0
  157. package/src/common/interfaces/execution-context.interface.js +81 -0
  158. package/src/common/interfaces/execution-context.interface.js.map +1 -0
  159. package/src/common/interfaces/flow.interface.d.ts +1 -1
  160. package/src/common/interfaces/flow.interface.js.map +1 -1
  161. package/src/common/interfaces/index.d.ts +1 -0
  162. package/src/common/interfaces/index.js +1 -0
  163. package/src/common/interfaces/index.js.map +1 -1
  164. package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
  165. package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
  166. package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
  167. package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
  168. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  169. package/src/common/interfaces/plugin.interface.js.map +1 -1
  170. package/src/common/interfaces/prompt.interface.d.ts +53 -4
  171. package/src/common/interfaces/prompt.interface.js +78 -0
  172. package/src/common/interfaces/prompt.interface.js.map +1 -1
  173. package/src/common/interfaces/resource.interface.d.ts +47 -17
  174. package/src/common/interfaces/resource.interface.js +53 -0
  175. package/src/common/interfaces/resource.interface.js.map +1 -1
  176. package/src/common/interfaces/tool.interface.d.ts +39 -22
  177. package/src/common/interfaces/tool.interface.js +61 -34
  178. package/src/common/interfaces/tool.interface.js.map +1 -1
  179. package/src/common/metadata/adapter.metadata.d.ts +1 -9
  180. package/src/common/metadata/app.metadata.d.ts +425 -730
  181. package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
  182. package/src/common/metadata/flow.metadata.d.ts +10 -25
  183. package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
  184. package/src/common/metadata/front-mcp.metadata.js +6 -4
  185. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  186. package/src/common/metadata/hook.metadata.d.ts +1 -1
  187. package/src/common/metadata/hook.metadata.js.map +1 -1
  188. package/src/common/metadata/index.d.ts +1 -0
  189. package/src/common/metadata/index.js +1 -0
  190. package/src/common/metadata/index.js.map +1 -1
  191. package/src/common/metadata/logger.metadata.d.ts +1 -9
  192. package/src/common/metadata/plugin.metadata.d.ts +8 -30
  193. package/src/common/metadata/prompt.metadata.d.ts +4 -161
  194. package/src/common/metadata/provider.metadata.d.ts +2 -12
  195. package/src/common/metadata/resource.metadata.d.ts +6 -98
  196. package/src/common/metadata/resource.metadata.js +15 -6
  197. package/src/common/metadata/resource.metadata.js.map +1 -1
  198. package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
  199. package/src/common/metadata/tool-ui.metadata.js +12 -0
  200. package/src/common/metadata/tool-ui.metadata.js.map +1 -0
  201. package/src/common/metadata/tool.metadata.d.ts +78 -199
  202. package/src/common/metadata/tool.metadata.js +11 -14
  203. package/src/common/metadata/tool.metadata.js.map +1 -1
  204. package/src/common/providers/base-config.provider.d.ts +84 -0
  205. package/src/common/providers/base-config.provider.js +128 -0
  206. package/src/common/providers/base-config.provider.js.map +1 -0
  207. package/src/common/records/plugin.record.d.ts +5 -6
  208. package/src/common/records/plugin.record.js.map +1 -1
  209. package/src/common/records/prompt.record.js.map +1 -1
  210. package/src/common/records/resource.record.d.ts +17 -1
  211. package/src/common/records/resource.record.js +12 -6
  212. package/src/common/records/resource.record.js.map +1 -1
  213. package/src/common/records/tool.record.js.map +1 -1
  214. package/src/common/schemas/annotated-class.schema.d.ts +9 -9
  215. package/src/common/schemas/annotated-class.schema.js +92 -27
  216. package/src/common/schemas/annotated-class.schema.js.map +1 -1
  217. package/src/common/schemas/http-input.schema.d.ts +6 -30
  218. package/src/common/schemas/http-output.schema.d.ts +326 -1630
  219. package/src/common/schemas/http-output.schema.js +39 -1
  220. package/src/common/schemas/http-output.schema.js.map +1 -1
  221. package/src/common/tokens/front-mcp.tokens.js +4 -1
  222. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  223. package/src/common/tokens/resource.tokens.d.ts +2 -0
  224. package/src/common/tokens/resource.tokens.js +4 -1
  225. package/src/common/tokens/resource.tokens.js.map +1 -1
  226. package/src/common/tokens/tool.tokens.d.ts +2 -0
  227. package/src/common/tokens/tool.tokens.js +2 -0
  228. package/src/common/tokens/tool.tokens.js.map +1 -1
  229. package/src/common/types/auth/jwt.types.d.ts +5 -31
  230. package/src/common/types/auth/session.types.d.ts +97 -192
  231. package/src/common/types/auth/session.types.js +24 -11
  232. package/src/common/types/auth/session.types.js.map +1 -1
  233. package/src/common/types/options/auth.options.d.ts +1013 -490
  234. package/src/common/types/options/auth.options.js +554 -36
  235. package/src/common/types/options/auth.options.js.map +1 -1
  236. package/src/common/types/options/http.options.d.ts +1 -9
  237. package/src/common/types/options/logging.options.d.ts +7 -13
  238. package/src/common/types/options/logging.options.js +4 -0
  239. package/src/common/types/options/logging.options.js.map +1 -1
  240. package/src/common/types/options/server-info.options.d.ts +3 -31
  241. package/src/common/types/options/session.options.d.ts +90 -10
  242. package/src/common/types/options/session.options.js +26 -3
  243. package/src/common/types/options/session.options.js.map +1 -1
  244. package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
  245. package/src/common/utils/decide-request-intent.utils.js +88 -23
  246. package/src/common/utils/decide-request-intent.utils.js.map +1 -1
  247. package/src/completion/flows/complete.flow.d.ts +74 -0
  248. package/src/completion/flows/complete.flow.js +199 -0
  249. package/src/completion/flows/complete.flow.js.map +1 -0
  250. package/src/errors/authorization-required.error.d.ts +189 -0
  251. package/src/errors/authorization-required.error.js +274 -0
  252. package/src/errors/authorization-required.error.js.map +1 -0
  253. package/src/errors/index.d.ts +2 -1
  254. package/src/errors/index.js +17 -1
  255. package/src/errors/index.js.map +1 -1
  256. package/src/errors/mcp.error.d.ts +101 -1
  257. package/src/errors/mcp.error.js +147 -2
  258. package/src/errors/mcp.error.js.map +1 -1
  259. package/src/flows/flow.instance.js +4 -3
  260. package/src/flows/flow.instance.js.map +1 -1
  261. package/src/flows/flow.registry.js.map +1 -1
  262. package/src/flows/flow.stages.js +14 -11
  263. package/src/flows/flow.stages.js.map +1 -1
  264. package/src/front-mcp/front-mcp.providers.d.ts +464 -102
  265. package/src/front-mcp/front-mcp.providers.js +3 -5
  266. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  267. package/src/hooks/hook.instance.d.ts +1 -1
  268. package/src/hooks/hook.instance.js +5 -2
  269. package/src/hooks/hook.instance.js.map +1 -1
  270. package/src/hooks/hook.registry.js +7 -5
  271. package/src/hooks/hook.registry.js.map +1 -1
  272. package/src/index.d.ts +28 -9
  273. package/src/index.js +5 -1
  274. package/src/index.js.map +1 -1
  275. package/src/logger/instances/instance.logger.js +3 -2
  276. package/src/logger/instances/instance.logger.js.map +1 -1
  277. package/src/logger/logger.registry.js +7 -2
  278. package/src/logger/logger.registry.js.map +1 -1
  279. package/src/logging/flows/set-level.flow.d.ts +62 -0
  280. package/src/logging/flows/set-level.flow.js +108 -0
  281. package/src/logging/flows/set-level.flow.js.map +1 -0
  282. package/src/mcp-apps/csp.d.ts +111 -0
  283. package/src/mcp-apps/csp.js +267 -0
  284. package/src/mcp-apps/csp.js.map +1 -0
  285. package/src/mcp-apps/index.d.ts +23 -0
  286. package/src/mcp-apps/index.js +91 -0
  287. package/src/mcp-apps/index.js.map +1 -0
  288. package/src/mcp-apps/schemas.d.ts +403 -0
  289. package/src/mcp-apps/schemas.js +345 -0
  290. package/src/mcp-apps/schemas.js.map +1 -0
  291. package/src/mcp-apps/template.d.ts +94 -0
  292. package/src/mcp-apps/template.js +419 -0
  293. package/src/mcp-apps/template.js.map +1 -0
  294. package/src/mcp-apps/types.d.ts +323 -0
  295. package/src/mcp-apps/types.js +59 -0
  296. package/src/mcp-apps/types.js.map +1 -0
  297. package/src/notification/index.d.ts +1 -0
  298. package/src/notification/index.js +13 -0
  299. package/src/notification/index.js.map +1 -0
  300. package/src/notification/notification.service.d.ts +378 -0
  301. package/src/notification/notification.service.js +727 -0
  302. package/src/notification/notification.service.js.map +1 -0
  303. package/src/plugin/plugin.registry.js +12 -9
  304. package/src/plugin/plugin.registry.js.map +1 -1
  305. package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
  306. package/src/prompt/flows/get-prompt.flow.js +214 -0
  307. package/src/prompt/flows/get-prompt.flow.js.map +1 -0
  308. package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
  309. package/src/prompt/flows/prompts-list.flow.js +176 -0
  310. package/src/prompt/flows/prompts-list.flow.js.map +1 -0
  311. package/src/prompt/index.d.ts +7 -0
  312. package/src/prompt/index.js +17 -0
  313. package/src/prompt/index.js.map +1 -0
  314. package/src/prompt/prompt.events.d.ts +17 -0
  315. package/src/prompt/prompt.events.js +25 -0
  316. package/src/prompt/prompt.events.js.map +1 -0
  317. package/src/prompt/prompt.instance.d.ts +30 -0
  318. package/src/prompt/prompt.instance.js +120 -0
  319. package/src/prompt/prompt.instance.js.map +1 -0
  320. package/src/prompt/prompt.registry.d.ts +79 -12
  321. package/src/prompt/prompt.registry.js +360 -15
  322. package/src/prompt/prompt.registry.js.map +1 -1
  323. package/src/prompt/prompt.types.d.ts +26 -0
  324. package/src/prompt/prompt.types.js +11 -0
  325. package/src/prompt/prompt.types.js.map +1 -0
  326. package/src/prompt/prompt.utils.d.ts +26 -0
  327. package/src/prompt/prompt.utils.js +136 -0
  328. package/src/prompt/prompt.utils.js.map +1 -0
  329. package/src/provider/provider.registry.d.ts +12 -5
  330. package/src/provider/provider.registry.js +30 -138
  331. package/src/provider/provider.registry.js.map +1 -1
  332. package/src/regsitry/registry.base.d.ts +1 -1
  333. package/src/regsitry/registry.base.js.map +1 -1
  334. package/src/resource/flows/read-resource.flow.d.ts +91 -0
  335. package/src/resource/flows/read-resource.flow.js +270 -0
  336. package/src/resource/flows/read-resource.flow.js.map +1 -0
  337. package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
  338. package/src/resource/flows/resource-templates-list.flow.js +191 -0
  339. package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
  340. package/src/resource/flows/resources-list.flow.d.ts +64 -0
  341. package/src/resource/flows/resources-list.flow.js +196 -0
  342. package/src/resource/flows/resources-list.flow.js.map +1 -0
  343. package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
  344. package/src/resource/flows/subscribe-resource.flow.js +123 -0
  345. package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
  346. package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
  347. package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
  348. package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
  349. package/src/resource/index.d.ts +8 -0
  350. package/src/resource/index.js +20 -0
  351. package/src/resource/index.js.map +1 -0
  352. package/src/resource/resource.events.d.ts +24 -0
  353. package/src/resource/resource.events.js +17 -0
  354. package/src/resource/resource.events.js.map +1 -0
  355. package/src/resource/resource.instance.d.ts +35 -0
  356. package/src/resource/resource.instance.js +163 -0
  357. package/src/resource/resource.instance.js.map +1 -0
  358. package/src/resource/resource.registry.d.ts +106 -12
  359. package/src/resource/resource.registry.js +449 -13
  360. package/src/resource/resource.registry.js.map +1 -1
  361. package/src/resource/resource.types.d.ts +35 -0
  362. package/src/resource/resource.types.js +11 -0
  363. package/src/resource/resource.types.js.map +1 -0
  364. package/src/resource/resource.utils.d.ts +30 -0
  365. package/src/resource/resource.utils.js +151 -0
  366. package/src/resource/resource.utils.js.map +1 -0
  367. package/src/scope/flows/http.request.flow.d.ts +48 -330
  368. package/src/scope/flows/http.request.flow.js +306 -78
  369. package/src/scope/flows/http.request.flow.js.map +1 -1
  370. package/src/scope/scope.instance.d.ts +12 -0
  371. package/src/scope/scope.instance.js +145 -15
  372. package/src/scope/scope.instance.js.map +1 -1
  373. package/src/tool/flows/call-tool.flow.d.ts +64 -1110
  374. package/src/tool/flows/call-tool.flow.js +303 -15
  375. package/src/tool/flows/call-tool.flow.js.map +1 -1
  376. package/src/tool/flows/tools-list.flow.d.ts +32 -473
  377. package/src/tool/flows/tools-list.flow.js +111 -10
  378. package/src/tool/flows/tools-list.flow.js.map +1 -1
  379. package/src/tool/tool.events.d.ts +8 -1
  380. package/src/tool/tool.events.js.map +1 -1
  381. package/src/tool/tool.instance.d.ts +3 -1
  382. package/src/tool/tool.instance.js +17 -3
  383. package/src/tool/tool.instance.js.map +1 -1
  384. package/src/tool/tool.registry.d.ts +7 -1
  385. package/src/tool/tool.registry.js +26 -10
  386. package/src/tool/tool.registry.js.map +1 -1
  387. package/src/tool/tool.types.d.ts +4 -4
  388. package/src/tool/tool.types.js.map +1 -1
  389. package/src/tool/tool.utils.d.ts +3 -12
  390. package/src/tool/tool.utils.js +39 -193
  391. package/src/tool/tool.utils.js.map +1 -1
  392. package/src/tool/ui/index.d.ts +22 -0
  393. package/src/tool/ui/index.js +63 -0
  394. package/src/tool/ui/index.js.map +1 -0
  395. package/src/tool/ui/platform-adapters.d.ts +10 -0
  396. package/src/tool/ui/platform-adapters.js +18 -0
  397. package/src/tool/ui/platform-adapters.js.map +1 -0
  398. package/src/tool/ui/template-helpers.d.ts +46 -0
  399. package/src/tool/ui/template-helpers.js +112 -0
  400. package/src/tool/ui/template-helpers.js.map +1 -0
  401. package/src/tool/ui/ui-resource-template.d.ts +34 -0
  402. package/src/tool/ui/ui-resource-template.js +64 -0
  403. package/src/tool/ui/ui-resource-template.js.map +1 -0
  404. package/src/tool/ui/ui-resource.handler.d.ts +74 -0
  405. package/src/tool/ui/ui-resource.handler.js +129 -0
  406. package/src/tool/ui/ui-resource.handler.js.map +1 -0
  407. package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
  408. package/src/transport/adapters/transport.local.adapter.js +28 -7
  409. package/src/transport/adapters/transport.local.adapter.js.map +1 -1
  410. package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
  411. package/src/transport/adapters/transport.sse.adapter.js +4 -3
  412. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  413. package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
  414. package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
  415. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  416. package/src/transport/flows/handle.sse.flow.d.ts +29 -63
  417. package/src/transport/flows/handle.sse.flow.js +78 -10
  418. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  419. package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
  420. package/src/transport/flows/handle.stateless-http.flow.js +102 -0
  421. package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
  422. package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
  423. package/src/transport/flows/handle.streamable-http.flow.js +158 -26
  424. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  425. package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
  426. package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
  427. package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
  428. package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
  429. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  430. package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
  431. package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
  432. package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
  433. package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
  434. package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
  435. package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
  436. package/src/transport/mcp-handlers/index.d.ts +517 -208
  437. package/src/transport/mcp-handlers/index.js +39 -2
  438. package/src/transport/mcp-handlers/index.js.map +1 -1
  439. package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
  440. package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
  441. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  442. package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
  443. package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
  444. package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
  445. package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
  446. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
  447. package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
  448. package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
  449. package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
  450. package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
  451. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
  453. package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
  454. package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
  455. package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
  456. package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
  457. package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
  458. package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
  459. package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
  460. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
  461. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
  462. package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
  463. package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
  464. package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
  465. package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
  466. package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
  467. package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
  468. package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
  469. package/src/transport/transport.local.js +7 -2
  470. package/src/transport/transport.local.js.map +1 -1
  471. package/src/transport/transport.registry.d.ts +30 -0
  472. package/src/transport/transport.registry.js +84 -1
  473. package/src/transport/transport.registry.js.map +1 -1
  474. package/src/transport/transport.types.d.ts +3 -3
  475. package/src/transport/transport.types.js.map +1 -1
  476. package/src/utils/content.utils.d.ts +48 -0
  477. package/src/utils/content.utils.js +194 -0
  478. package/src/utils/content.utils.js.map +1 -0
  479. package/src/utils/index.d.ts +8 -0
  480. package/src/utils/index.js +55 -0
  481. package/src/utils/index.js.map +1 -0
  482. package/src/utils/lineage.utils.d.ts +40 -0
  483. package/src/utils/lineage.utils.js +82 -0
  484. package/src/utils/lineage.utils.js.map +1 -0
  485. package/src/utils/naming.utils.d.ts +46 -0
  486. package/src/utils/naming.utils.js +136 -0
  487. package/src/utils/naming.utils.js.map +1 -0
  488. package/src/utils/types.utils.d.ts +2 -2
  489. package/src/utils/types.utils.js.map +1 -1
  490. package/src/utils/uri-template.utils.d.ts +57 -0
  491. package/src/utils/uri-template.utils.js +113 -0
  492. package/src/utils/uri-template.utils.js.map +1 -0
  493. package/src/utils/uri-validation.utils.d.ts +40 -0
  494. package/src/utils/uri-validation.utils.js +76 -0
  495. package/src/utils/uri-validation.utils.js.map +1 -0
  496. package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
  497. package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
  498. package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
  499. package/src/__test-utils__/fixtures/index.d.ts +0 -7
  500. package/src/__test-utils__/fixtures/index.js +0 -11
  501. package/src/__test-utils__/fixtures/index.js.map +0 -1
  502. package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
  503. package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
  504. package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
  505. package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
  506. package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
  507. package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
  508. package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
  509. package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
  510. package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
  511. package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
  512. package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
  513. package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
  514. package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
  515. package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
  516. package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
  517. package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
  518. package/src/__test-utils__/helpers/async.helpers.js +0 -112
  519. package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
  520. package/src/__test-utils__/helpers/index.d.ts +0 -6
  521. package/src/__test-utils__/helpers/index.js +0 -10
  522. package/src/__test-utils__/helpers/index.js.map +0 -1
  523. package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
  524. package/src/__test-utils__/helpers/setup.helpers.js +0 -106
  525. package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
  526. package/src/__test-utils__/index.d.ts +0 -9
  527. package/src/__test-utils__/index.js +0 -14
  528. package/src/__test-utils__/index.js.map +0 -1
  529. package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
  530. package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
  531. package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
  532. package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
  533. package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
  534. package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
  535. package/src/__test-utils__/mocks/index.d.ts +0 -8
  536. package/src/__test-utils__/mocks/index.js +0 -12
  537. package/src/__test-utils__/mocks/index.js.map +0 -1
  538. package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
  539. package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
  540. package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
  541. package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
  542. package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
  543. package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
  544. package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
  545. package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
  546. package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
  547. package/src/auth/path.utils.d.ts +0 -20
  548. package/src/auth/path.utils.js +0 -71
  549. package/src/auth/path.utils.js.map +0 -1
  550. package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
  551. package/src/common/decorators-old/async-with.decorator.js +0 -24
  552. package/src/common/decorators-old/async-with.decorator.js.map +0 -1
  553. package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
  554. package/src/common/decorators-old/auth-hook.decorator.js +0 -27
  555. package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
  556. package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
  557. package/src/common/decorators-old/session-hook.decorator.js +0 -27
  558. package/src/common/decorators-old/session-hook.decorator.js.map +0 -1
@@ -1,3 +1,22 @@
1
+ /**
2
+ * MCP-specific error codes per JSON-RPC specification.
3
+ * These codes are used in the JSON-RPC error response format.
4
+ */
5
+ export declare const MCP_ERROR_CODES: {
6
+ /** Resource not found (-32002) */
7
+ readonly RESOURCE_NOT_FOUND: -32002;
8
+ /** Invalid request (-32600) */
9
+ readonly INVALID_REQUEST: -32600;
10
+ /** Method not found (-32601) */
11
+ readonly METHOD_NOT_FOUND: -32601;
12
+ /** Invalid params (-32602) */
13
+ readonly INVALID_PARAMS: -32602;
14
+ /** Internal error (-32603) */
15
+ readonly INTERNAL_ERROR: -32603;
16
+ /** Parse error (-32700) */
17
+ readonly PARSE_ERROR: -32700;
18
+ };
19
+ export type McpErrorCode = (typeof MCP_ERROR_CODES)[keyof typeof MCP_ERROR_CODES];
1
20
  /**
2
21
  * Base class for all MCP-related errors
3
22
  */
@@ -68,11 +87,50 @@ export declare class InternalMcpError extends McpError {
68
87
  getPublicMessage(): string;
69
88
  }
70
89
  /**
71
- * Tool didn't find an error
90
+ * Tool not found error
72
91
  */
73
92
  export declare class ToolNotFoundError extends PublicMcpError {
74
93
  constructor(toolName: string);
75
94
  }
95
+ /**
96
+ * Resource not found error
97
+ */
98
+ export declare class ResourceNotFoundError extends PublicMcpError {
99
+ readonly uri: string;
100
+ readonly mcpErrorCode: -32002;
101
+ constructor(uri: string);
102
+ /**
103
+ * Convert to JSON-RPC error format per MCP specification.
104
+ *
105
+ * @example
106
+ * {
107
+ * "code": -32002,
108
+ * "message": "Resource not found: file:///missing.txt",
109
+ * "data": { "uri": "file:///missing.txt" }
110
+ * }
111
+ */
112
+ toJsonRpcError(): {
113
+ code: number;
114
+ message: string;
115
+ data?: {
116
+ uri: string;
117
+ };
118
+ };
119
+ }
120
+ /**
121
+ * Resource read error (internal)
122
+ */
123
+ export declare class ResourceReadError extends InternalMcpError {
124
+ readonly originalError?: Error;
125
+ constructor(uri: string, originalError?: Error);
126
+ getInternalMessage(): string;
127
+ }
128
+ /**
129
+ * Invalid resource URI error
130
+ */
131
+ export declare class InvalidResourceUriError extends PublicMcpError {
132
+ constructor(uri: string, reason?: string);
133
+ }
76
134
  /**
77
135
  * Invalid input validation error
78
136
  */
@@ -130,6 +188,48 @@ export declare class GenericServerError extends InternalMcpError {
130
188
  constructor(message: string, originalError?: Error);
131
189
  getInternalMessage(): string;
132
190
  }
191
+ /**
192
+ * Dependency not found error (internal) - thrown when a required dependency
193
+ * is not found in a registry during initialization.
194
+ */
195
+ export declare class DependencyNotFoundError extends InternalMcpError {
196
+ constructor(registryName: string, dependencyName: string);
197
+ }
198
+ /**
199
+ * Invalid hook flow error - thrown when a hook is registered with a flow
200
+ * that is not supported by the entry type (e.g., tool hook on resource class).
201
+ */
202
+ export declare class InvalidHookFlowError extends InternalMcpError {
203
+ constructor(message: string);
204
+ }
205
+ /**
206
+ * Auth configuration error - thrown when auth configuration is invalid
207
+ * (e.g., transparent mode on parent with multiple child providers).
208
+ */
209
+ export declare class AuthConfigurationError extends PublicMcpError {
210
+ readonly errors: string[];
211
+ readonly suggestion?: string;
212
+ constructor(message: string, options?: {
213
+ errors?: string[];
214
+ suggestion?: string;
215
+ });
216
+ getPublicMessage(): string;
217
+ }
218
+ /**
219
+ * Prompt not found error.
220
+ */
221
+ export declare class PromptNotFoundError extends PublicMcpError {
222
+ constructor(promptName: string);
223
+ }
224
+ /**
225
+ * Prompt execution error - wraps errors during prompt execution.
226
+ */
227
+ export declare class PromptExecutionError extends InternalMcpError {
228
+ readonly promptName: string;
229
+ readonly originalError?: Error;
230
+ constructor(promptName: string, cause?: Error);
231
+ getInternalMessage(): string;
232
+ }
133
233
  /**
134
234
  * Check if the error is a public error that can be safely shown to users
135
235
  */
@@ -1,11 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GenericServerError = exports.UnauthorizedError = exports.QuotaExceededError = exports.RateLimitError = exports.ToolExecutionError = exports.InvalidMethodError = exports.InvalidOutputError = exports.InvalidInputError = exports.ToolNotFoundError = exports.InternalMcpError = exports.PublicMcpError = exports.McpError = void 0;
3
+ exports.PromptExecutionError = exports.PromptNotFoundError = exports.AuthConfigurationError = exports.InvalidHookFlowError = exports.DependencyNotFoundError = exports.GenericServerError = exports.UnauthorizedError = exports.QuotaExceededError = exports.RateLimitError = exports.ToolExecutionError = exports.InvalidMethodError = exports.InvalidOutputError = exports.InvalidInputError = exports.InvalidResourceUriError = exports.ResourceReadError = exports.ResourceNotFoundError = exports.ToolNotFoundError = exports.InternalMcpError = exports.PublicMcpError = exports.McpError = exports.MCP_ERROR_CODES = void 0;
4
4
  exports.isPublicError = isPublicError;
5
5
  exports.toMcpError = toMcpError;
6
6
  exports.formatMcpErrorResponse = formatMcpErrorResponse;
7
7
  // errors/mcp.error.ts
8
8
  const crypto_1 = require("crypto");
9
+ /**
10
+ * MCP-specific error codes per JSON-RPC specification.
11
+ * These codes are used in the JSON-RPC error response format.
12
+ */
13
+ exports.MCP_ERROR_CODES = {
14
+ /** Resource not found (-32002) */
15
+ RESOURCE_NOT_FOUND: -32002,
16
+ /** Invalid request (-32600) */
17
+ INVALID_REQUEST: -32600,
18
+ /** Method not found (-32601) */
19
+ METHOD_NOT_FOUND: -32601,
20
+ /** Invalid params (-32602) */
21
+ INVALID_PARAMS: -32602,
22
+ /** Internal error (-32603) */
23
+ INTERNAL_ERROR: -32603,
24
+ /** Parse error (-32700) */
25
+ PARSE_ERROR: -32700,
26
+ };
9
27
  /**
10
28
  * Base class for all MCP-related errors
11
29
  */
@@ -91,7 +109,7 @@ exports.InternalMcpError = InternalMcpError;
91
109
  // Specific Error Classes
92
110
  // ============================================================================
93
111
  /**
94
- * Tool didn't find an error
112
+ * Tool not found error
95
113
  */
96
114
  class ToolNotFoundError extends PublicMcpError {
97
115
  constructor(toolName) {
@@ -99,6 +117,61 @@ class ToolNotFoundError extends PublicMcpError {
99
117
  }
100
118
  }
101
119
  exports.ToolNotFoundError = ToolNotFoundError;
120
+ /**
121
+ * Resource not found error
122
+ */
123
+ class ResourceNotFoundError extends PublicMcpError {
124
+ uri;
125
+ mcpErrorCode = exports.MCP_ERROR_CODES.RESOURCE_NOT_FOUND;
126
+ constructor(uri) {
127
+ super(`Resource not found: ${uri}`, 'RESOURCE_NOT_FOUND', 404);
128
+ this.uri = uri;
129
+ }
130
+ /**
131
+ * Convert to JSON-RPC error format per MCP specification.
132
+ *
133
+ * @example
134
+ * {
135
+ * "code": -32002,
136
+ * "message": "Resource not found: file:///missing.txt",
137
+ * "data": { "uri": "file:///missing.txt" }
138
+ * }
139
+ */
140
+ toJsonRpcError() {
141
+ return {
142
+ code: this.mcpErrorCode,
143
+ message: this.getPublicMessage(),
144
+ data: { uri: this.uri },
145
+ };
146
+ }
147
+ }
148
+ exports.ResourceNotFoundError = ResourceNotFoundError;
149
+ /**
150
+ * Resource read error (internal)
151
+ */
152
+ class ResourceReadError extends InternalMcpError {
153
+ originalError;
154
+ constructor(uri, originalError) {
155
+ super(`Resource "${uri}" read failed: ${originalError?.message || 'Unknown error'}`, 'RESOURCE_READ_ERROR');
156
+ this.originalError = originalError;
157
+ }
158
+ getInternalMessage() {
159
+ if (this.originalError?.stack) {
160
+ return `${this.message}\n\nOriginal error:\n${this.originalError.stack}`;
161
+ }
162
+ return this.message;
163
+ }
164
+ }
165
+ exports.ResourceReadError = ResourceReadError;
166
+ /**
167
+ * Invalid resource URI error
168
+ */
169
+ class InvalidResourceUriError extends PublicMcpError {
170
+ constructor(uri, reason) {
171
+ super(`Invalid resource URI: ${uri}${reason ? ` (${reason})` : ''}`, 'INVALID_RESOURCE_URI', 400);
172
+ }
173
+ }
174
+ exports.InvalidResourceUriError = InvalidResourceUriError;
102
175
  /**
103
176
  * Invalid input validation error
104
177
  */
@@ -212,6 +285,78 @@ class GenericServerError extends InternalMcpError {
212
285
  }
213
286
  }
214
287
  exports.GenericServerError = GenericServerError;
288
+ /**
289
+ * Dependency not found error (internal) - thrown when a required dependency
290
+ * is not found in a registry during initialization.
291
+ */
292
+ class DependencyNotFoundError extends InternalMcpError {
293
+ constructor(registryName, dependencyName) {
294
+ super(`Dependency "${dependencyName}" not found in ${registryName}`, 'DEPENDENCY_NOT_FOUND');
295
+ }
296
+ }
297
+ exports.DependencyNotFoundError = DependencyNotFoundError;
298
+ /**
299
+ * Invalid hook flow error - thrown when a hook is registered with a flow
300
+ * that is not supported by the entry type (e.g., tool hook on resource class).
301
+ */
302
+ class InvalidHookFlowError extends InternalMcpError {
303
+ constructor(message) {
304
+ super(message, 'INVALID_HOOK_FLOW');
305
+ }
306
+ }
307
+ exports.InvalidHookFlowError = InvalidHookFlowError;
308
+ /**
309
+ * Auth configuration error - thrown when auth configuration is invalid
310
+ * (e.g., transparent mode on parent with multiple child providers).
311
+ */
312
+ class AuthConfigurationError extends PublicMcpError {
313
+ errors;
314
+ suggestion;
315
+ constructor(message, options) {
316
+ super(message, 'AUTH_CONFIGURATION_ERROR', 500);
317
+ this.errors = options?.errors ?? [message];
318
+ this.suggestion = options?.suggestion;
319
+ }
320
+ getPublicMessage() {
321
+ let msg = this.message;
322
+ if (this.suggestion) {
323
+ msg += `\n\nTo fix this issue:\n${this.suggestion}`;
324
+ }
325
+ return msg;
326
+ }
327
+ }
328
+ exports.AuthConfigurationError = AuthConfigurationError;
329
+ // ============================================================================
330
+ // Prompt Errors
331
+ // ============================================================================
332
+ /**
333
+ * Prompt not found error.
334
+ */
335
+ class PromptNotFoundError extends PublicMcpError {
336
+ constructor(promptName) {
337
+ super(`Prompt not found: ${promptName}`, 'PROMPT_NOT_FOUND', 404);
338
+ }
339
+ }
340
+ exports.PromptNotFoundError = PromptNotFoundError;
341
+ /**
342
+ * Prompt execution error - wraps errors during prompt execution.
343
+ */
344
+ class PromptExecutionError extends InternalMcpError {
345
+ promptName;
346
+ originalError;
347
+ constructor(promptName, cause) {
348
+ super(cause ? `Prompt execution failed: ${cause.message}` : `Prompt execution failed: ${promptName}`, 'PROMPT_EXECUTION_FAILED');
349
+ this.promptName = promptName;
350
+ this.originalError = cause;
351
+ }
352
+ getInternalMessage() {
353
+ if (this.originalError?.stack) {
354
+ return `${this.message}\n\nOriginal error:\n${this.originalError.stack}`;
355
+ }
356
+ return this.message;
357
+ }
358
+ }
359
+ exports.PromptExecutionError = PromptExecutionError;
215
360
  // ============================================================================
216
361
  // Error Utilities
217
362
  // ============================================================================
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.error.js","sourceRoot":"","sources":["../../../src/errors/mcp.error.ts"],"names":[],"mappings":"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","sourcesContent":["// errors/mcp.error.ts\nimport { randomBytes } from 'crypto';\n\n/**\n * Base class for all MCP-related errors\n */\nexport abstract class McpError extends Error {\n /**\n * Unique error ID for tracking in logs\n */\n errorId: string;\n\n /**\n * Whether this error should expose details to the client\n */\n abstract readonly isPublic: boolean;\n\n /**\n * HTTP status code equivalent (for reference)\n */\n abstract readonly statusCode: number;\n\n /**\n * Error code for categorization\n */\n abstract readonly code: string;\n\n protected constructor(message: string, errorId?: string) {\n super(message);\n this.name = this.constructor.name;\n this.errorId = errorId || this.generateErrorId();\n Error.captureStackTrace(this, this.constructor);\n }\n\n private generateErrorId(): string {\n return `err_${randomBytes(8).toString('hex')}`;\n }\n\n /**\n * Get the public-facing error message\n */\n abstract getPublicMessage(): string;\n\n /**\n * Get the internal error message (for logging)\n */\n getInternalMessage(): string {\n return this.message;\n }\n\n /**\n * Convert to MCP error response format\n */\n toMcpError(isDevelopment = false): {\n content: Array<{ type: 'text'; text: string }>;\n isError: true;\n _meta?: {\n errorId: string;\n code: string;\n timestamp: string;\n stack?: string;\n };\n } {\n const message = isDevelopment ? this.getInternalMessage() : this.getPublicMessage();\n\n return {\n content: [\n {\n type: 'text',\n text: message,\n },\n ],\n isError: true,\n _meta: {\n errorId: this.errorId,\n code: this.code,\n timestamp: new Date().toISOString(),\n ...(isDevelopment && { stack: this.stack }),\n },\n };\n }\n}\n\n/**\n * Public errors - safe to expose to clients\n * These include validation errors, not found errors, etc.\n */\nexport class PublicMcpError extends McpError {\n readonly isPublic = true;\n readonly statusCode: number;\n readonly code: string;\n\n constructor(message: string, code = 'PUBLIC_ERROR', statusCode = 400) {\n super(message);\n this.code = code;\n this.statusCode = statusCode;\n }\n\n getPublicMessage(): string {\n return this.message;\n }\n}\n\n/**\n * Internal errors - should not expose details to clients\n * These are server errors, unexpected failures, etc.\n */\nexport class InternalMcpError extends McpError {\n readonly isPublic = false;\n readonly statusCode = 500;\n readonly code: string;\n\n constructor(message: string, code = 'INTERNAL_ERROR') {\n super(message);\n this.code = code;\n }\n\n getPublicMessage(): string {\n return `Internal FrontMCP error. Please contact support with error ID: ${this.errorId}`;\n }\n}\n\n// ============================================================================\n// Specific Error Classes\n// ============================================================================\n\n/**\n * Tool didn't find an error\n */\nexport class ToolNotFoundError extends PublicMcpError {\n constructor(toolName: string) {\n super(`Tool \"${toolName}\" not found`, 'TOOL_NOT_FOUND', 404);\n }\n}\n\n/**\n * Invalid input validation error\n */\nexport class InvalidInputError extends PublicMcpError {\n readonly validationErrors?: any;\n\n constructor(message = 'Invalid input: validation failed', validationErrors?: any) {\n super(message, 'INVALID_INPUT', 400);\n this.validationErrors = validationErrors;\n }\n\n override getInternalMessage(): string {\n return this.message + (this.validationErrors ? `\\nDetails: ${JSON.stringify(this.validationErrors, null, 2)}` : '');\n }\n override getPublicMessage(): string {\n if (this.validationErrors) {\n return `${this.message}\\nDetails: ${JSON.stringify(this.validationErrors, null, 2)}`;\n }\n return this.message;\n }\n}\n\n/**\n * Invalid output validation error (internal - don't expose schema details)\n */\nexport class InvalidOutputError extends InternalMcpError {\n private readonly hasCustomErrorId: boolean;\n\n constructor(errorId?: string) {\n super('Tool output validation failed', 'INVALID_OUTPUT');\n this.hasCustomErrorId = !!errorId;\n if (errorId) {\n this.errorId = errorId;\n }\n }\n\n override getPublicMessage(): string {\n // If a custom errorId was provided (e.g., request ID), include it for correlation\n // Otherwise, use a simpler message since the auto-generated ID isn't meaningful to users\n if (this.hasCustomErrorId) {\n return `Output validation failed. Please contact support with error ID: ${this.errorId}`;\n }\n return 'Output validation failed. Please contact support.';\n }\n}\n\n/**\n * Invalid method error\n */\nexport class InvalidMethodError extends PublicMcpError {\n constructor(method: string, expected: string) {\n super(`Invalid method \"${method}\". Expected \"${expected}\"`, 'INVALID_METHOD', 400);\n }\n}\n\n/**\n * Tool execution error (internal)\n */\nexport class ToolExecutionError extends InternalMcpError {\n readonly originalError?: Error;\n\n constructor(toolName: string, originalError?: Error) {\n super(`Tool \"${toolName}\" execution failed: ${originalError?.message || 'Unknown error'}`, 'TOOL_EXECUTION_ERROR');\n this.originalError = originalError;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n/**\n * Rate limit error\n */\nexport class RateLimitError extends PublicMcpError {\n constructor(retryAfter?: number) {\n const message = retryAfter ? `Rate limit exceeded. Retry after ${retryAfter} seconds` : 'Rate limit exceeded';\n super(message, 'RATE_LIMIT_EXCEEDED', 429);\n }\n}\n\n/**\n * Quota exceeded error\n */\nexport class QuotaExceededError extends PublicMcpError {\n constructor(quotaType = 'usage') {\n super(`${quotaType} quota exceeded`, 'QUOTA_EXCEEDED', 429);\n }\n}\n\n/**\n * Unauthorized error\n */\nexport class UnauthorizedError extends PublicMcpError {\n constructor(message = 'Unauthorized') {\n super(message, 'UNAUTHORIZED', 401);\n }\n}\n\n/**\n * Generic server error wrapper\n */\nexport class GenericServerError extends InternalMcpError {\n readonly originalError?: Error;\n\n constructor(message: string, originalError?: Error) {\n super(message, 'SERVER_ERROR');\n this.originalError = originalError;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n// ============================================================================\n// Error Utilities\n// ============================================================================\n\n/**\n * Check if the error is a public error that can be safely shown to users\n */\nexport function isPublicError(error: any): error is PublicMcpError {\n return error instanceof McpError && error.isPublic;\n}\n\n/**\n * Convert any error to an MCP error\n */\nexport function toMcpError(error: any): McpError {\n if (error instanceof McpError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new GenericServerError(error.message, error);\n }\n\n return new GenericServerError(String(error));\n}\n\n/**\n * Format error for MCP response\n */\nexport function formatMcpErrorResponse(error: any, isDevelopment: boolean = process.env['NODE_ENV'] !== 'production') {\n const mcpError = toMcpError(error);\n return mcpError.toMcpError(isDevelopment);\n}\n"]}
1
+ {"version":3,"file":"mcp.error.js","sourceRoot":"","sources":["../../../src/errors/mcp.error.ts"],"names":[],"mappings":"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","sourcesContent":["// errors/mcp.error.ts\nimport { randomBytes } from 'crypto';\n\n/**\n * MCP-specific error codes per JSON-RPC specification.\n * These codes are used in the JSON-RPC error response format.\n */\nexport const MCP_ERROR_CODES = {\n /** Resource not found (-32002) */\n RESOURCE_NOT_FOUND: -32002,\n /** Invalid request (-32600) */\n INVALID_REQUEST: -32600,\n /** Method not found (-32601) */\n METHOD_NOT_FOUND: -32601,\n /** Invalid params (-32602) */\n INVALID_PARAMS: -32602,\n /** Internal error (-32603) */\n INTERNAL_ERROR: -32603,\n /** Parse error (-32700) */\n PARSE_ERROR: -32700,\n} as const;\n\nexport type McpErrorCode = (typeof MCP_ERROR_CODES)[keyof typeof MCP_ERROR_CODES];\n\n/**\n * Base class for all MCP-related errors\n */\nexport abstract class McpError extends Error {\n /**\n * Unique error ID for tracking in logs\n */\n errorId: string;\n\n /**\n * Whether this error should expose details to the client\n */\n abstract readonly isPublic: boolean;\n\n /**\n * HTTP status code equivalent (for reference)\n */\n abstract readonly statusCode: number;\n\n /**\n * Error code for categorization\n */\n abstract readonly code: string;\n\n protected constructor(message: string, errorId?: string) {\n super(message);\n this.name = this.constructor.name;\n this.errorId = errorId || this.generateErrorId();\n Error.captureStackTrace(this, this.constructor);\n }\n\n private generateErrorId(): string {\n return `err_${randomBytes(8).toString('hex')}`;\n }\n\n /**\n * Get the public-facing error message\n */\n abstract getPublicMessage(): string;\n\n /**\n * Get the internal error message (for logging)\n */\n getInternalMessage(): string {\n return this.message;\n }\n\n /**\n * Convert to MCP error response format\n */\n toMcpError(isDevelopment = false): {\n content: Array<{ type: 'text'; text: string }>;\n isError: true;\n _meta?: {\n errorId: string;\n code: string;\n timestamp: string;\n stack?: string;\n };\n } {\n const message = isDevelopment ? this.getInternalMessage() : this.getPublicMessage();\n\n return {\n content: [\n {\n type: 'text',\n text: message,\n },\n ],\n isError: true,\n _meta: {\n errorId: this.errorId,\n code: this.code,\n timestamp: new Date().toISOString(),\n ...(isDevelopment && { stack: this.stack }),\n },\n };\n }\n}\n\n/**\n * Public errors - safe to expose to clients\n * These include validation errors, not found errors, etc.\n */\nexport class PublicMcpError extends McpError {\n readonly isPublic = true;\n readonly statusCode: number;\n readonly code: string;\n\n constructor(message: string, code = 'PUBLIC_ERROR', statusCode = 400) {\n super(message);\n this.code = code;\n this.statusCode = statusCode;\n }\n\n getPublicMessage(): string {\n return this.message;\n }\n}\n\n/**\n * Internal errors - should not expose details to clients\n * These are server errors, unexpected failures, etc.\n */\nexport class InternalMcpError extends McpError {\n readonly isPublic = false;\n readonly statusCode = 500;\n readonly code: string;\n\n constructor(message: string, code = 'INTERNAL_ERROR') {\n super(message);\n this.code = code;\n }\n\n getPublicMessage(): string {\n return `Internal FrontMCP error. Please contact support with error ID: ${this.errorId}`;\n }\n}\n\n// ============================================================================\n// Specific Error Classes\n// ============================================================================\n\n/**\n * Tool not found error\n */\nexport class ToolNotFoundError extends PublicMcpError {\n constructor(toolName: string) {\n super(`Tool \"${toolName}\" not found`, 'TOOL_NOT_FOUND', 404);\n }\n}\n\n/**\n * Resource not found error\n */\nexport class ResourceNotFoundError extends PublicMcpError {\n readonly uri: string;\n readonly mcpErrorCode = MCP_ERROR_CODES.RESOURCE_NOT_FOUND;\n\n constructor(uri: string) {\n super(`Resource not found: ${uri}`, 'RESOURCE_NOT_FOUND', 404);\n this.uri = uri;\n }\n\n /**\n * Convert to JSON-RPC error format per MCP specification.\n *\n * @example\n * {\n * \"code\": -32002,\n * \"message\": \"Resource not found: file:///missing.txt\",\n * \"data\": { \"uri\": \"file:///missing.txt\" }\n * }\n */\n toJsonRpcError(): {\n code: number;\n message: string;\n data?: { uri: string };\n } {\n return {\n code: this.mcpErrorCode,\n message: this.getPublicMessage(),\n data: { uri: this.uri },\n };\n }\n}\n\n/**\n * Resource read error (internal)\n */\nexport class ResourceReadError extends InternalMcpError {\n readonly originalError?: Error;\n\n constructor(uri: string, originalError?: Error) {\n super(`Resource \"${uri}\" read failed: ${originalError?.message || 'Unknown error'}`, 'RESOURCE_READ_ERROR');\n this.originalError = originalError;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n/**\n * Invalid resource URI error\n */\nexport class InvalidResourceUriError extends PublicMcpError {\n constructor(uri: string, reason?: string) {\n super(`Invalid resource URI: ${uri}${reason ? ` (${reason})` : ''}`, 'INVALID_RESOURCE_URI', 400);\n }\n}\n\n/**\n * Invalid input validation error\n */\nexport class InvalidInputError extends PublicMcpError {\n readonly validationErrors?: any;\n\n constructor(message = 'Invalid input: validation failed', validationErrors?: any) {\n super(message, 'INVALID_INPUT', 400);\n this.validationErrors = validationErrors;\n }\n\n override getInternalMessage(): string {\n return this.message + (this.validationErrors ? `\\nDetails: ${JSON.stringify(this.validationErrors, null, 2)}` : '');\n }\n override getPublicMessage(): string {\n if (this.validationErrors) {\n return `${this.message}\\nDetails: ${JSON.stringify(this.validationErrors, null, 2)}`;\n }\n return this.message;\n }\n}\n\n/**\n * Invalid output validation error (internal - don't expose schema details)\n */\nexport class InvalidOutputError extends InternalMcpError {\n private readonly hasCustomErrorId: boolean;\n\n constructor(errorId?: string) {\n super('Tool output validation failed', 'INVALID_OUTPUT');\n this.hasCustomErrorId = !!errorId;\n if (errorId) {\n this.errorId = errorId;\n }\n }\n\n override getPublicMessage(): string {\n // If a custom errorId was provided (e.g., request ID), include it for correlation\n // Otherwise, use a simpler message since the auto-generated ID isn't meaningful to users\n if (this.hasCustomErrorId) {\n return `Output validation failed. Please contact support with error ID: ${this.errorId}`;\n }\n return 'Output validation failed. Please contact support.';\n }\n}\n\n/**\n * Invalid method error\n */\nexport class InvalidMethodError extends PublicMcpError {\n constructor(method: string, expected: string) {\n super(`Invalid method \"${method}\". Expected \"${expected}\"`, 'INVALID_METHOD', 400);\n }\n}\n\n/**\n * Tool execution error (internal)\n */\nexport class ToolExecutionError extends InternalMcpError {\n readonly originalError?: Error;\n\n constructor(toolName: string, originalError?: Error) {\n super(`Tool \"${toolName}\" execution failed: ${originalError?.message || 'Unknown error'}`, 'TOOL_EXECUTION_ERROR');\n this.originalError = originalError;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n/**\n * Rate limit error\n */\nexport class RateLimitError extends PublicMcpError {\n constructor(retryAfter?: number) {\n const message = retryAfter ? `Rate limit exceeded. Retry after ${retryAfter} seconds` : 'Rate limit exceeded';\n super(message, 'RATE_LIMIT_EXCEEDED', 429);\n }\n}\n\n/**\n * Quota exceeded error\n */\nexport class QuotaExceededError extends PublicMcpError {\n constructor(quotaType = 'usage') {\n super(`${quotaType} quota exceeded`, 'QUOTA_EXCEEDED', 429);\n }\n}\n\n/**\n * Unauthorized error\n */\nexport class UnauthorizedError extends PublicMcpError {\n constructor(message = 'Unauthorized') {\n super(message, 'UNAUTHORIZED', 401);\n }\n}\n\n/**\n * Generic server error wrapper\n */\nexport class GenericServerError extends InternalMcpError {\n readonly originalError?: Error;\n\n constructor(message: string, originalError?: Error) {\n super(message, 'SERVER_ERROR');\n this.originalError = originalError;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n/**\n * Dependency not found error (internal) - thrown when a required dependency\n * is not found in a registry during initialization.\n */\nexport class DependencyNotFoundError extends InternalMcpError {\n constructor(registryName: string, dependencyName: string) {\n super(`Dependency \"${dependencyName}\" not found in ${registryName}`, 'DEPENDENCY_NOT_FOUND');\n }\n}\n\n/**\n * Invalid hook flow error - thrown when a hook is registered with a flow\n * that is not supported by the entry type (e.g., tool hook on resource class).\n */\nexport class InvalidHookFlowError extends InternalMcpError {\n constructor(message: string) {\n super(message, 'INVALID_HOOK_FLOW');\n }\n}\n\n/**\n * Auth configuration error - thrown when auth configuration is invalid\n * (e.g., transparent mode on parent with multiple child providers).\n */\nexport class AuthConfigurationError extends PublicMcpError {\n readonly errors: string[];\n readonly suggestion?: string;\n\n constructor(message: string, options?: { errors?: string[]; suggestion?: string }) {\n super(message, 'AUTH_CONFIGURATION_ERROR', 500);\n this.errors = options?.errors ?? [message];\n this.suggestion = options?.suggestion;\n }\n\n override getPublicMessage(): string {\n let msg = this.message;\n if (this.suggestion) {\n msg += `\\n\\nTo fix this issue:\\n${this.suggestion}`;\n }\n return msg;\n }\n}\n\n// ============================================================================\n// Prompt Errors\n// ============================================================================\n\n/**\n * Prompt not found error.\n */\nexport class PromptNotFoundError extends PublicMcpError {\n constructor(promptName: string) {\n super(`Prompt not found: ${promptName}`, 'PROMPT_NOT_FOUND', 404);\n }\n}\n\n/**\n * Prompt execution error - wraps errors during prompt execution.\n */\nexport class PromptExecutionError extends InternalMcpError {\n readonly promptName: string;\n readonly originalError?: Error;\n\n constructor(promptName: string, cause?: Error) {\n super(\n cause ? `Prompt execution failed: ${cause.message}` : `Prompt execution failed: ${promptName}`,\n 'PROMPT_EXECUTION_FAILED',\n );\n this.promptName = promptName;\n this.originalError = cause;\n }\n\n override getInternalMessage(): string {\n if (this.originalError?.stack) {\n return `${this.message}\\n\\nOriginal error:\\n${this.originalError.stack}`;\n }\n return this.message;\n }\n}\n\n// ============================================================================\n// Error Utilities\n// ============================================================================\n\n/**\n * Check if the error is a public error that can be safely shown to users\n */\nexport function isPublicError(error: any): error is PublicMcpError {\n return error instanceof McpError && error.isPublic;\n}\n\n/**\n * Convert any error to an MCP error\n */\nexport function toMcpError(error: any): McpError {\n if (error instanceof McpError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new GenericServerError(error.message, error);\n }\n\n return new GenericServerError(String(error));\n}\n\n/**\n * Format error for MCP response\n */\nexport function formatMcpErrorResponse(error: any, isDevelopment: boolean = process.env['NODE_ENV'] !== 'production') {\n const mcpError = toMcpError(error);\n return mcpError.toMcpError(isDevelopment);\n}\n"]}
@@ -67,8 +67,8 @@ class FlowInstance extends common_1.FlowEntry {
67
67
  return (0, server_validation_1.writeHttpResponse)(response, e.output);
68
68
  }
69
69
  }
70
- // eslint-disable-next-line no-console
71
- console.error(e);
70
+ // Skip console.error due to Node.js 24 util.inspect bug with Zod validation errors
71
+ // The error will be returned to the client as a 500 response
72
72
  return (0, server_validation_1.writeHttpResponse)(response, {
73
73
  kind: 'text',
74
74
  status: 500,
@@ -115,8 +115,9 @@ class FlowInstance extends common_1.FlowEntry {
115
115
  metas.push(h.metadata);
116
116
  }
117
117
  catch (e) {
118
+ // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors
118
119
  // eslint-disable-next-line no-console
119
- console.warn('[flow] Ignoring injected hook that failed to materialize:', e);
120
+ console.warn('[flow] Ignoring injected hook that failed to materialize:', e instanceof Error ? e.message : 'Unknown error');
120
121
  }
121
122
  }
122
123
  if (metas.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"flow.instance.js","sourceRoot":"","sources":["../../../src/flows/flow.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// noinspection ExceptionCaughtLocallyJS\n// flows/flow.instance.ts\n\nimport 'reflect-metadata';\nimport {\n FlowControl,\n FlowCtxOf,\n FlowEntry,\n FlowInputOf,\n FlowName,\n FlowOutputOf,\n FlowPlan,\n FlowRecord,\n FlowStagesOf,\n FlowType,\n HookEntry,\n HookMetadata,\n Reference,\n ServerRequest,\n Token,\n Type,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { collectFlowHookMap, StageMap, cloneStageMap, mergeHookMetasIntoStageMap } from './flow.stages';\nimport { writeHttpResponse } from '../server/server.validation';\nimport { Scope } from '../scope';\nimport HookRegistry from '../hooks/hook.registry';\nimport { rpcError } from '../transport/transport.error';\n\ntype StageOutcome = 'ok' | 'respond' | 'next' | 'handled' | 'fail' | 'abort' | 'unknown_error';\n\ninterface StageResult {\n outcome: StageOutcome;\n control?: FlowControl | Error;\n}\n\nconst CAP = (s: string) => (s ? s[0].toUpperCase() + s.slice(1) : s);\nconst WILL = (s: string) => `will${CAP(s)}`;\nconst DID = (s: string) => `did${CAP(s)}`;\nconst AROUND = (s: string) => `around${CAP(s)}`;\n\nfunction parseTypedKey(k: string): { base: string; type?: 'will' | 'did' | 'around' } {\n const lc = k.toLowerCase();\n if (lc.startsWith('will') && k.length > 4) return { base: k.slice(4, 5).toLowerCase() + k.slice(5), type: 'will' };\n if (lc.startsWith('did') && k.length > 3) return { base: k.slice(3, 4).toLowerCase() + k.slice(4), type: 'did' };\n if (lc.startsWith('around') && k.length > 6)\n return { base: k.slice(6, 7).toLowerCase() + k.slice(7), type: 'around' };\n return { base: k };\n}\n\nexport class FlowInstance<Name extends FlowName> extends FlowEntry<Name> {\n readonly deps: Reference[];\n readonly globalProviders: ProviderRegistry;\n private plan: FlowPlan<never>;\n private FlowClass: FlowType;\n private stages: StageMap<FlowType>;\n private hooks: HookRegistry;\n\n constructor(scope: Scope, record: FlowRecord, deps: Set<Reference>, globalProviders: ProviderRegistry) {\n super(scope, record);\n this.deps = [...deps];\n this.globalProviders = globalProviders;\n this.FlowClass = this.record.provide;\n this.ready = this.initialize();\n this.plan = this.record.metadata.plan;\n this.hooks = scope.providers.getHooksRegistry();\n }\n\n protected async initialize() {\n const server = this.globalProviders.getActiveServer();\n\n this.stages = collectFlowHookMap(this.FlowClass);\n\n const { middleware } = this.metadata;\n if (middleware) {\n const path = typeof middleware.path === 'string' ? middleware.path : '';\n server.registerMiddleware(path, async (request, response, next) => {\n const canActivate = await this.canActivate(request);\n if (!canActivate) return next();\n\n try {\n const result = await this.run({ request, response, next } as any, new Map());\n if (result) return writeHttpResponse(response, result);\n } catch (e) {\n if (e instanceof FlowControl) {\n switch (e.type) {\n case 'abort':\n return writeHttpResponse(response, { kind: 'text', status: 500, body: 'Aborted' });\n case 'fail':\n return writeHttpResponse(response, { kind: 'text', status: 500, body: 'Internal Server Error' });\n case 'handled':\n return;\n case 'next':\n return next();\n case 'respond':\n return writeHttpResponse(response, e.output as any);\n }\n }\n // eslint-disable-next-line no-console\n console.error(e);\n return writeHttpResponse(response, {\n kind: 'text',\n status: 500,\n body: 'Internal Server Error',\n });\n }\n\n return next();\n });\n }\n\n return Promise.resolve();\n }\n\n async canActivate(request: ServerRequest): Promise<boolean> {\n if (this.method && request.method !== this.method) return false;\n\n const canActivate = this.metadata.middleware?.canActivate ?? [];\n if ((this.FlowClass as any)['canActivate']) {\n canActivate.push((this.FlowClass as any)['canActivate']);\n }\n if (canActivate.length === 0) return true;\n\n const results = await Promise.all(canActivate.map((m) => m(request, this.scope)));\n return results.every((r) => r);\n }\n\n async run(input: FlowInputOf<Name>, deps: Map<Token, Type>): Promise<FlowOutputOf<Name> | undefined> {\n const scope = this.globalProviders.getActiveScope();\n const { FlowClass, plan, name } = this;\n\n // Clone stages so we can merge injections safely per run.\n const baseStages = this.stages;\n let stages: StageMap<any> = cloneStageMap(baseStages);\n\n // Compute next order base after any class-defined entries.\n let orderBase = Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0))) + 1;\n\n // Get tool owner ID if this is a tool call flow\n // The tool owner ID is set by the CallToolFlow.findTool stage\n const toolOwnerId = (input as any)?._toolOwnerId;\n\n const initialInjectedHooks =\n (this.hooks.getFlowHooksForOwner(name, toolOwnerId) as HookEntry<\n FlowInputOf<Name>,\n Name,\n FlowStagesOf<Name>,\n FlowCtxOf<Name>\n >[]) ?? [];\n\n let context: any;\n let contextReady = false;\n\n const materializeAndMerge = async (\n newHooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n opts?: { orderStart?: number },\n ) => {\n if (!newHooks?.length || !contextReady) return;\n\n const metas: HookMetadata[] = [];\n for (const h of newHooks) {\n try {\n metas.push(h.metadata);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn('[flow] Ignoring injected hook that failed to materialize:', e);\n }\n }\n\n if (metas.length) {\n const start = opts?.orderStart ?? orderBase;\n mergeHookMetasIntoStageMap(FlowClass, stages, metas, start);\n if (opts?.orderStart === undefined) orderBase += metas.length;\n }\n };\n\n const appendContextHooks = async (\n hooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n ) => {\n await materializeAndMerge(hooks);\n };\n\n // Construct flow instance\n context = new FlowClass(this.metadata, input, scope, appendContextHooks, deps);\n\n // Now injections can materialize\n contextReady = true;\n\n // Initial registry hooks should not pre-empt stages; they just get registered\n await materializeAndMerge(initialInjectedHooks, { orderStart: -1_000_000 });\n\n // Refresh order base to be after everything currently present\n orderBase = Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0))) + 1;\n\n let responded: FlowOutputOf<Name> | undefined;\n\n // Robust list runner (doesn't skip mid-run insertions)\n const runList = async (key: string, opts?: { ignoreRespond?: boolean }): Promise<StageResult> => {\n const getList = () => ((stages as any)[key] ?? []) as Array<{ method: (ctx: any) => Promise<void> }>;\n const seen = new Set<any>();\n\n while (true) {\n const list = getList();\n const item = list.find((e) => !seen.has(e));\n if (!item) break;\n seen.add(item);\n\n try {\n await item.method(context);\n } catch (e: any) {\n if (e instanceof FlowControl) {\n if (e.type === 'respond') {\n if (!opts?.ignoreRespond) {\n responded = e.output as FlowOutputOf<Name>;\n return { outcome: 'respond', control: e };\n }\n continue;\n }\n return { outcome: e.type, control: e };\n }\n return { outcome: 'unknown_error', control: e as Error };\n }\n }\n return { outcome: 'ok' };\n };\n\n // Run exactly one stage in order: will → around → stage → did (did runs once)\n const runOneStage = async (stageName: string, stopOnRespond: boolean): Promise<StageResult> => {\n // 1) willStage\n {\n const res = await runList(WILL(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 2) aroundStage (acts as pre-handlers unless you later add true wrapping)\n {\n const res = await runList(AROUND(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 3) stage\n let bodyOutcome: StageResult = { outcome: 'ok' };\n {\n const res = await runList(stageName, { ignoreRespond: false });\n bodyOutcome = res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') {\n // fail/abort/next/handled/unknown → do NOT run did\n return res;\n }\n }\n\n // 4) didStage (run once regardless of body respond)\n {\n const res = await runList(DID(stageName), { ignoreRespond: true });\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n if (bodyOutcome.outcome === 'respond') return bodyOutcome;\n return { outcome: 'ok' };\n };\n\n // IMPORTANT: ignore typed stage names in plan arrays.\n // Only base stage names in the plan drive execution; typed hooks run *with* their base.\n const runStageGroup = async (\n group: Array<string> | undefined,\n stopOnRespond: boolean,\n opts?: { ignoreRespond?: boolean },\n ): Promise<StageResult> => {\n if (!group || group.length === 0) return { outcome: 'ok' };\n\n const seenBase = new Set<string>();\n for (const rawKey of group) {\n const { base, type } = parseTypedKey(rawKey);\n if (type) {\n // Soft warning once per typed key occurrence (optional)\n // console.warn(`[flow] Ignoring typed stage \"${rawKey}\" in plan; hooks will run with base \"${base}\".`);\n continue; // Do not run typed keys as standalone stages\n }\n if (seenBase.has(base)) continue;\n seenBase.add(base);\n\n const res = await runOneStage(base, stopOnRespond);\n if (res.outcome === 'respond') {\n if (stopOnRespond) return res;\n // else keep going\n } else if (res.outcome !== 'ok') {\n return res;\n }\n }\n return { outcome: 'ok' };\n };\n\n const runErrorStage = async () => {\n await runStageGroup((plan as any).error, false, { ignoreRespond: true });\n };\n\n const runFinalizeStage = async () => {\n await runStageGroup((plan as any).finalize, false);\n };\n\n try {\n // ---------- PRE ----------\n {\n const pre = await runStageGroup((plan as any).pre, true);\n if (pre.outcome === 'respond') {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n await runFinalizeStage();\n return responded;\n }\n if (pre.outcome === 'unknown_error' || pre.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (pre.outcome === 'fail') throw pre.control!;\n throw pre.control!;\n }\n if (pre.outcome === 'abort' || pre.outcome === 'next' || pre.outcome === 'handled') {\n await runFinalizeStage();\n throw pre.control as FlowControl;\n }\n }\n\n // ---------- EXECUTE ----------\n if (!responded) {\n const exec = await runStageGroup((plan as any).execute, true);\n if (exec.outcome === 'respond') {\n // continue to post + finalize\n } else if (exec.outcome === 'unknown_error' || exec.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (exec.outcome === 'fail') throw exec.control!;\n throw exec.control!;\n } else if (exec.outcome === 'abort' || exec.outcome === 'next' || exec.outcome === 'handled') {\n await runFinalizeStage();\n throw exec.control as FlowControl;\n }\n }\n\n // ---------- POST ----------\n {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n }\n\n // ---------- FINALIZE ----------\n await runFinalizeStage();\n\n return responded;\n } catch (e) {\n throw e;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"flow.instance.js","sourceRoot":"","sources":["../../../src/flows/flow.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// noinspection ExceptionCaughtLocallyJS\n// flows/flow.instance.ts\n\nimport 'reflect-metadata';\nimport {\n FlowControl,\n FlowCtxOf,\n FlowEntry,\n FlowInputOf,\n FlowName,\n FlowOutputOf,\n FlowPlan,\n FlowRecord,\n FlowStagesOf,\n FlowType,\n HookEntry,\n HookMetadata,\n Reference,\n ServerRequest,\n Token,\n Type,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport { collectFlowHookMap, StageMap, cloneStageMap, mergeHookMetasIntoStageMap } from './flow.stages';\nimport { writeHttpResponse } from '../server/server.validation';\nimport { Scope } from '../scope';\nimport HookRegistry from '../hooks/hook.registry';\nimport { rpcError } from '../transport/transport.error';\n\ntype StageOutcome = 'ok' | 'respond' | 'next' | 'handled' | 'fail' | 'abort' | 'unknown_error';\n\ninterface StageResult {\n outcome: StageOutcome;\n control?: FlowControl | Error;\n}\n\nconst CAP = (s: string) => (s ? s[0].toUpperCase() + s.slice(1) : s);\nconst WILL = (s: string) => `will${CAP(s)}`;\nconst DID = (s: string) => `did${CAP(s)}`;\nconst AROUND = (s: string) => `around${CAP(s)}`;\n\nfunction parseTypedKey(k: string): { base: string; type?: 'will' | 'did' | 'around' } {\n const lc = k.toLowerCase();\n if (lc.startsWith('will') && k.length > 4) return { base: k.slice(4, 5).toLowerCase() + k.slice(5), type: 'will' };\n if (lc.startsWith('did') && k.length > 3) return { base: k.slice(3, 4).toLowerCase() + k.slice(4), type: 'did' };\n if (lc.startsWith('around') && k.length > 6)\n return { base: k.slice(6, 7).toLowerCase() + k.slice(7), type: 'around' };\n return { base: k };\n}\n\nexport class FlowInstance<Name extends FlowName> extends FlowEntry<Name> {\n readonly deps: Reference[];\n readonly globalProviders: ProviderRegistry;\n private plan: FlowPlan<never>;\n private FlowClass: FlowType;\n private stages: StageMap<FlowType>;\n private hooks: HookRegistry;\n\n constructor(scope: Scope, record: FlowRecord, deps: Set<Reference>, globalProviders: ProviderRegistry) {\n super(scope, record);\n this.deps = [...deps];\n this.globalProviders = globalProviders;\n this.FlowClass = this.record.provide;\n this.ready = this.initialize();\n this.plan = this.record.metadata.plan;\n this.hooks = scope.providers.getHooksRegistry();\n }\n\n protected async initialize() {\n const server = this.globalProviders.getActiveServer();\n\n this.stages = collectFlowHookMap(this.FlowClass);\n\n const { middleware } = this.metadata;\n if (middleware) {\n const path = typeof middleware.path === 'string' ? middleware.path : '';\n server.registerMiddleware(path, async (request, response, next) => {\n const canActivate = await this.canActivate(request);\n if (!canActivate) return next();\n\n try {\n const result = await this.run({ request, response, next } as any, new Map());\n if (result) return writeHttpResponse(response, result);\n } catch (e) {\n if (e instanceof FlowControl) {\n switch (e.type) {\n case 'abort':\n return writeHttpResponse(response, { kind: 'text', status: 500, body: 'Aborted' });\n case 'fail':\n return writeHttpResponse(response, { kind: 'text', status: 500, body: 'Internal Server Error' });\n case 'handled':\n return;\n case 'next':\n return next();\n case 'respond':\n return writeHttpResponse(response, e.output as any);\n }\n }\n // Skip console.error due to Node.js 24 util.inspect bug with Zod validation errors\n // The error will be returned to the client as a 500 response\n return writeHttpResponse(response, {\n kind: 'text',\n status: 500,\n body: 'Internal Server Error',\n });\n }\n\n return next();\n });\n }\n\n return Promise.resolve();\n }\n\n async canActivate(request: ServerRequest): Promise<boolean> {\n if (this.method && request.method !== this.method) return false;\n\n const canActivate = this.metadata.middleware?.canActivate ?? [];\n if ((this.FlowClass as any)['canActivate']) {\n canActivate.push((this.FlowClass as any)['canActivate']);\n }\n if (canActivate.length === 0) return true;\n\n const results = await Promise.all(canActivate.map((m) => m(request, this.scope)));\n return results.every((r) => r);\n }\n\n async run(input: FlowInputOf<Name>, deps: Map<Token, Type>): Promise<FlowOutputOf<Name> | undefined> {\n const scope = this.globalProviders.getActiveScope();\n const { FlowClass, plan, name } = this;\n\n // Clone stages so we can merge injections safely per run.\n const baseStages = this.stages;\n let stages: StageMap<any> = cloneStageMap(baseStages);\n\n // Compute next order base after any class-defined entries.\n let orderBase = Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0))) + 1;\n\n // Get tool owner ID if this is a tool call flow\n // The tool owner ID is set by the CallToolFlow.findTool stage\n const toolOwnerId = (input as any)?._toolOwnerId;\n\n const initialInjectedHooks =\n (this.hooks.getFlowHooksForOwner(name, toolOwnerId) as HookEntry<\n FlowInputOf<Name>,\n Name,\n FlowStagesOf<Name>,\n FlowCtxOf<Name>\n >[]) ?? [];\n\n let context: any;\n let contextReady = false;\n\n const materializeAndMerge = async (\n newHooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n opts?: { orderStart?: number },\n ) => {\n if (!newHooks?.length || !contextReady) return;\n\n const metas: HookMetadata[] = [];\n for (const h of newHooks) {\n try {\n metas.push(h.metadata);\n } catch (e) {\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n // eslint-disable-next-line no-console\n console.warn(\n '[flow] Ignoring injected hook that failed to materialize:',\n e instanceof Error ? e.message : 'Unknown error',\n );\n }\n }\n\n if (metas.length) {\n const start = opts?.orderStart ?? orderBase;\n mergeHookMetasIntoStageMap(FlowClass, stages, metas, start);\n if (opts?.orderStart === undefined) orderBase += metas.length;\n }\n };\n\n const appendContextHooks = async (\n hooks: HookEntry<FlowInputOf<Name>, Name, FlowStagesOf<Name>, FlowCtxOf<Name>>[],\n ) => {\n await materializeAndMerge(hooks);\n };\n\n // Construct flow instance\n context = new FlowClass(this.metadata, input, scope, appendContextHooks, deps);\n\n // Now injections can materialize\n contextReady = true;\n\n // Initial registry hooks should not pre-empt stages; they just get registered\n await materializeAndMerge(initialInjectedHooks, { orderStart: -1_000_000 });\n\n // Refresh order base to be after everything currently present\n orderBase = Math.max(0, ...Object.values(stages).flatMap((list) => list.map((e: any) => e._order ?? 0))) + 1;\n\n let responded: FlowOutputOf<Name> | undefined;\n\n // Robust list runner (doesn't skip mid-run insertions)\n const runList = async (key: string, opts?: { ignoreRespond?: boolean }): Promise<StageResult> => {\n const getList = () => ((stages as any)[key] ?? []) as Array<{ method: (ctx: any) => Promise<void> }>;\n const seen = new Set<any>();\n\n while (true) {\n const list = getList();\n const item = list.find((e) => !seen.has(e));\n if (!item) break;\n seen.add(item);\n\n try {\n await item.method(context);\n } catch (e: any) {\n if (e instanceof FlowControl) {\n if (e.type === 'respond') {\n if (!opts?.ignoreRespond) {\n responded = e.output as FlowOutputOf<Name>;\n return { outcome: 'respond', control: e };\n }\n continue;\n }\n return { outcome: e.type, control: e };\n }\n return { outcome: 'unknown_error', control: e as Error };\n }\n }\n return { outcome: 'ok' };\n };\n\n // Run exactly one stage in order: will → around → stage → did (did runs once)\n const runOneStage = async (stageName: string, stopOnRespond: boolean): Promise<StageResult> => {\n // 1) willStage\n {\n const res = await runList(WILL(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 2) aroundStage (acts as pre-handlers unless you later add true wrapping)\n {\n const res = await runList(AROUND(stageName));\n if (res.outcome === 'respond' && stopOnRespond) return res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n // 3) stage\n let bodyOutcome: StageResult = { outcome: 'ok' };\n {\n const res = await runList(stageName, { ignoreRespond: false });\n bodyOutcome = res;\n if (res.outcome !== 'ok' && res.outcome !== 'respond') {\n // fail/abort/next/handled/unknown → do NOT run did\n return res;\n }\n }\n\n // 4) didStage (run once regardless of body respond)\n {\n const res = await runList(DID(stageName), { ignoreRespond: true });\n if (res.outcome !== 'ok' && res.outcome !== 'respond') return res;\n }\n\n if (bodyOutcome.outcome === 'respond') return bodyOutcome;\n return { outcome: 'ok' };\n };\n\n // IMPORTANT: ignore typed stage names in plan arrays.\n // Only base stage names in the plan drive execution; typed hooks run *with* their base.\n const runStageGroup = async (\n group: Array<string> | undefined,\n stopOnRespond: boolean,\n opts?: { ignoreRespond?: boolean },\n ): Promise<StageResult> => {\n if (!group || group.length === 0) return { outcome: 'ok' };\n\n const seenBase = new Set<string>();\n for (const rawKey of group) {\n const { base, type } = parseTypedKey(rawKey);\n if (type) {\n // Soft warning once per typed key occurrence (optional)\n // console.warn(`[flow] Ignoring typed stage \"${rawKey}\" in plan; hooks will run with base \"${base}\".`);\n continue; // Do not run typed keys as standalone stages\n }\n if (seenBase.has(base)) continue;\n seenBase.add(base);\n\n const res = await runOneStage(base, stopOnRespond);\n if (res.outcome === 'respond') {\n if (stopOnRespond) return res;\n // else keep going\n } else if (res.outcome !== 'ok') {\n return res;\n }\n }\n return { outcome: 'ok' };\n };\n\n const runErrorStage = async () => {\n await runStageGroup((plan as any).error, false, { ignoreRespond: true });\n };\n\n const runFinalizeStage = async () => {\n await runStageGroup((plan as any).finalize, false);\n };\n\n try {\n // ---------- PRE ----------\n {\n const pre = await runStageGroup((plan as any).pre, true);\n if (pre.outcome === 'respond') {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n await runFinalizeStage();\n return responded;\n }\n if (pre.outcome === 'unknown_error' || pre.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (pre.outcome === 'fail') throw pre.control!;\n throw pre.control!;\n }\n if (pre.outcome === 'abort' || pre.outcome === 'next' || pre.outcome === 'handled') {\n await runFinalizeStage();\n throw pre.control as FlowControl;\n }\n }\n\n // ---------- EXECUTE ----------\n if (!responded) {\n const exec = await runStageGroup((plan as any).execute, true);\n if (exec.outcome === 'respond') {\n // continue to post + finalize\n } else if (exec.outcome === 'unknown_error' || exec.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (exec.outcome === 'fail') throw exec.control!;\n throw exec.control!;\n } else if (exec.outcome === 'abort' || exec.outcome === 'next' || exec.outcome === 'handled') {\n await runFinalizeStage();\n throw exec.control as FlowControl;\n }\n }\n\n // ---------- POST ----------\n {\n const post = await runStageGroup((plan as any).post, false);\n if (post.outcome === 'unknown_error' || post.outcome === 'fail') {\n try {\n await runErrorStage();\n } finally {\n await runFinalizeStage();\n }\n if (post.outcome === 'fail') throw post.control!;\n throw post.control!;\n }\n if (post.outcome === 'abort' || post.outcome === 'next' || post.outcome === 'handled') {\n await runFinalizeStage();\n throw post.control as FlowControl;\n }\n }\n\n // ---------- FINALIZE ----------\n await runFinalizeStage();\n\n return responded;\n } catch (e) {\n throw e;\n }\n }\n}\n"]}
@@ -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\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\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\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\n runFlow<Name extends FlowName>(name: Name, input: FlowInputOf<Name>, deps?: Map<Token, Type>): 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());\n }\n}\n"]}
1
+ {"version":3,"file":"flow.registry.js","sourceRoot":"","sources":["../../../src/flows/flow.registry.ts"],"names":[],"mappings":";;AACA,0CAAuE;AACvE,sCAA+G;AAC/G,6CAA6C;AAC7C,sDAAiD;AACjD,mDAA+C;AAE/C,MAAqB,YAAa,SAAQ,2BAAgE;IACxG,YAAY,SAA2B,EAAE,IAAgB;QACvD,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAEkB,QAAQ,CAAC,IAAgB;QAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAS,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,IAAA,0BAAa,EAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACvB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAES,UAAU;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YAClC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YAE1C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,mBAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,mBAAU,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAA,uBAAS,EAAC,KAAK,CAAC,eAAe,IAAA,uBAAS,EAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;oBACnG,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAChE,KAAK,CAAC,UAAU;QACxB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,aAAa,CAAC,KAAY;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAoB;QACtC,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAA,0BAAa,EAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CACL,IAAU,EACV,KAAwB,EACxB,IAAuB;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,oBAAoB,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,GAAG,EAAE,CAA4C,CAAC;IACvF,CAAC;CACF;AAlFD,+BAkFC","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"]}
@@ -6,6 +6,7 @@ exports.resolveStageKey = resolveStageKey;
6
6
  exports.collectFlowHookMap = collectFlowHookMap;
7
7
  exports.mergeHookMetasIntoStageMap = mergeHookMetasIntoStageMap;
8
8
  const common_1 = require("../common");
9
+ const hook_decorator_1 = require("../common/decorators/hook.decorator");
9
10
  const cap = (s) => (s ? s[0].toUpperCase() + s.slice(1) : s);
10
11
  const CACHE = new WeakMap();
11
12
  function sortStageMap(table) {
@@ -30,13 +31,19 @@ function resolveStageKey(type, stage) {
30
31
  }
31
32
  function collectFlowHookMap(FlowClass) {
32
33
  const cached = CACHE.get(FlowClass);
33
- if (cached)
34
+ if (cached) {
34
35
  return cached;
35
- const metas = (Reflect.getMetadata(common_1.FrontMcpFlowHookTokens.hooks, FlowClass) ?? []);
36
+ }
37
+ // Get existing metadata (from legacy decorators)
38
+ const existingMetas = (Reflect.getMetadata(common_1.FrontMcpFlowHookTokens.hooks, FlowClass) ?? []);
39
+ // Resolve any pending TC39 decorator hooks
40
+ const tc39Metas = (0, hook_decorator_1.resolvePendingTC39HooksForClass)(FlowClass);
41
+ // Combine both sources
42
+ const metas = [...existingMetas, ...tc39Metas];
36
43
  const sorted = metas
37
44
  .map((m, i) => ({ m, i }))
38
45
  .sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)
39
- .map(x => x.m);
46
+ .map((x) => x.m);
40
47
  const table = {};
41
48
  let order = 0;
42
49
  for (const m of sorted) {
@@ -46,16 +53,13 @@ function collectFlowHookMap(FlowClass) {
46
53
  _order: order++,
47
54
  method: async (ctx) => {
48
55
  const target = m.static ? FlowClass : ctx;
49
- const impl = typeof m.method === 'function'
50
- ? m.method
51
- : target?.[m.method];
56
+ const impl = typeof m.method === 'function' ? m.method : target?.[m.method];
52
57
  if (typeof impl !== 'function')
53
58
  return;
54
59
  if (m.filter && !(await m.filter(ctx)))
55
60
  return;
56
61
  if (m.type === 'around') {
57
- const next = async () => {
58
- };
62
+ const next = async () => { };
59
63
  return m.static ? impl.call(FlowClass, ctx, next) : impl.call(ctx, ctx, next);
60
64
  }
61
65
  else {
@@ -74,7 +78,7 @@ function mergeHookMetasIntoStageMap(FlowClass, table, metas, orderStart = 100_00
74
78
  const sorted = metas
75
79
  .map((m, i) => ({ m, i }))
76
80
  .sort((a, b) => (a.m.priority ?? 0) - (b.m.priority ?? 0) || a.i - b.i)
77
- .map(x => x.m);
81
+ .map((x) => x.m);
78
82
  for (const m of sorted) {
79
83
  const resolved = resolveStageKey(m.type, m.stage);
80
84
  const entry = {
@@ -94,8 +98,7 @@ function mergeHookMetasIntoStageMap(FlowClass, table, metas, orderStart = 100_00
94
98
  if (m.filter && !(await m.filter(ctx)))
95
99
  return;
96
100
  if (m.type === 'around') {
97
- const next = async () => {
98
- };
101
+ const next = async () => { };
99
102
  return m.static ? impl.call(target, ctx, next) : impl.call(target, ctx, next);
100
103
  }
101
104
  else {