@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
@@ -3,26 +3,12 @@ import { z } from 'zod';
3
3
  export declare const RedirectSchema: z.ZodObject<{
4
4
  status: z.ZodLiteral<302>;
5
5
  location: z.ZodString;
6
- }, "strip", z.ZodTypeAny, {
7
- status: 302;
8
- location: string;
9
- }, {
10
- status: 302;
11
- location: string;
12
- }>;
6
+ }, z.core.$strip>;
13
7
  export declare const NotFoundSchema: z.ZodObject<{
14
8
  status: z.ZodLiteral<404>;
15
9
  body: z.ZodAny;
16
10
  message: z.ZodString;
17
- }, "strip", z.ZodTypeAny, {
18
- message: string;
19
- status: 404;
20
- body?: any;
21
- }, {
22
- message: string;
23
- status: 404;
24
- body?: any;
25
- }>;
11
+ }, z.core.$strip>;
26
12
  type CommonResponseResult = z.infer<typeof RedirectSchema> | z.infer<typeof NotFoundSchema> | any;
27
13
  export declare const commonSuccessResponseHandler: (res: ServerResponse, result: CommonResponseResult) => void;
28
14
  export declare const commonFailResponseHandler: (res: ServerResponse, result: any) => void;
@@ -1,2 +1,5 @@
1
1
  export declare const MCP_SESSION_HOOKS = "mcp.plugin.sessionHooks";
2
2
  export declare const MCP_AUTH_HOOKS = "mcp.plugin.sessionHooks";
3
+ export declare const META_ASYNC_WITH: unique symbol;
4
+ export declare const META_ASYNC_WITH_TOKENS: unique symbol;
5
+ export declare const DESIGN_PARAMTYPES = "design:paramtypes";
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MCP_AUTH_HOOKS = exports.MCP_SESSION_HOOKS = void 0;
3
+ exports.DESIGN_PARAMTYPES = exports.META_ASYNC_WITH_TOKENS = exports.META_ASYNC_WITH = exports.MCP_AUTH_HOOKS = exports.MCP_SESSION_HOOKS = void 0;
4
4
  // Plugin/global Tool hooks (method-level) metadata key
5
5
  // Stored on plugin classes by @ToolHook decorator
6
6
  exports.MCP_SESSION_HOOKS = 'mcp.plugin.sessionHooks';
7
7
  exports.MCP_AUTH_HOOKS = 'mcp.plugin.sessionHooks';
8
+ // Metadata keys for async dependency injection
9
+ exports.META_ASYNC_WITH = Symbol('mcp.asyncWith');
10
+ exports.META_ASYNC_WITH_TOKENS = Symbol('mcp.asyncWithTokens');
11
+ // Reflect metadata key for design:paramtypes
12
+ exports.DESIGN_PARAMTYPES = 'design:paramtypes';
8
13
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,kDAAkD;AACrC,QAAA,iBAAiB,GAAG,yBAAyB,CAAC;AAC9C,QAAA,cAAc,GAAG,yBAAyB,CAAC","sourcesContent":["// Plugin/global Tool hooks (method-level) metadata key\n// Stored on plugin classes by @ToolHook decorator\nexport const MCP_SESSION_HOOKS = 'mcp.plugin.sessionHooks';\nexport const MCP_AUTH_HOOKS = 'mcp.plugin.sessionHooks';\n\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,kDAAkD;AACrC,QAAA,iBAAiB,GAAG,yBAAyB,CAAC;AAC9C,QAAA,cAAc,GAAG,yBAAyB,CAAC;AAExD,+CAA+C;AAClC,QAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1C,QAAA,sBAAsB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEpE,6CAA6C;AAChC,QAAA,iBAAiB,GAAG,mBAAmB,CAAC","sourcesContent":["// Plugin/global Tool hooks (method-level) metadata key\n// Stored on plugin classes by @ToolHook decorator\nexport const MCP_SESSION_HOOKS = 'mcp.plugin.sessionHooks';\nexport const MCP_AUTH_HOOKS = 'mcp.plugin.sessionHooks';\n\n// Metadata keys for async dependency injection\nexport const META_ASYNC_WITH = Symbol('mcp.asyncWith');\nexport const META_ASYNC_WITH_TOKENS = Symbol('mcp.asyncWithTokens');\n\n// Reflect metadata key for design:paramtypes\nexport const DESIGN_PARAMTYPES = 'design:paramtypes';\n"]}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Decorator Utilities for Dual-Mode Support
3
+ *
4
+ * This module provides utilities for creating decorators that work with both:
5
+ * - Legacy TypeScript decorators (experimentalDecorators: true)
6
+ * - TC39 Stage 3 decorators (native JS, used by esbuild/tsx)
7
+ *
8
+ * The key difference between the two modes:
9
+ *
10
+ * LEGACY TypeScript Method Decorator:
11
+ * (target: prototype, propertyKey: string, descriptor: PropertyDescriptor) => void
12
+ * - target is the class prototype (for instance methods) or class (for static)
13
+ * - propertyKey is the method name
14
+ * - descriptor is the property descriptor
15
+ *
16
+ * TC39 Stage 3 Method Decorator:
17
+ * (target: method, context: ClassMethodDecoratorContext) => method
18
+ * - target is the actual method function being decorated
19
+ * - context is an object with { kind, name, static, private, addInitializer }
20
+ * - The class isn't available during decoration (only via addInitializer at instance creation)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // Using the factory to create a dual-mode decorator
25
+ * const MyDecorator = createMethodDecorator<{ stage: string }>({
26
+ * createMetadata: (args, options) => ({
27
+ * methodName: args.methodName,
28
+ * stage: options.stage,
29
+ * }),
30
+ * onLegacyDecoration: (ctor, metadata) => {
31
+ * // Immediately register on class (legacy mode)
32
+ * registerOnClass(ctor, metadata);
33
+ * },
34
+ * });
35
+ *
36
+ * // Usage (works in both modes):
37
+ * class MyFlow {
38
+ * @MyDecorator({ stage: 'execute' })
39
+ * async execute() {}
40
+ * }
41
+ * ```
42
+ */
43
+ /**
44
+ * TC39 Stage 3 Method Decorator Context
45
+ * @see https://github.com/tc39/proposal-decorators
46
+ */
47
+ export interface TC39MethodContext {
48
+ readonly kind: 'method';
49
+ readonly name: string | symbol;
50
+ readonly static: boolean;
51
+ readonly private: boolean;
52
+ addInitializer(initializer: () => void): void;
53
+ }
54
+ /**
55
+ * TC39 Stage 3 Class Decorator Context
56
+ */
57
+ export interface TC39ClassContext {
58
+ readonly kind: 'class';
59
+ readonly name: string | undefined;
60
+ addInitializer(initializer: () => void): void;
61
+ }
62
+ /**
63
+ * Normalized arguments passed to method decorator handlers
64
+ */
65
+ export interface MethodDecoratorArgs {
66
+ /** The method function being decorated */
67
+ method: Function;
68
+ /** Method name as string */
69
+ methodName: string;
70
+ /** Whether this is a static method */
71
+ isStatic: boolean;
72
+ /** Decorator mode */
73
+ mode: 'legacy' | 'tc39';
74
+ }
75
+ /**
76
+ * Configuration for creating a dual-mode method decorator
77
+ */
78
+ export interface MethodDecoratorConfig<TOptions, TMetadata> {
79
+ /**
80
+ * Create metadata from decorator arguments and options
81
+ */
82
+ createMetadata: (args: MethodDecoratorArgs, options: TOptions) => TMetadata;
83
+ /**
84
+ * Called immediately during legacy decoration with access to the class
85
+ * Use this to register metadata directly on the class
86
+ */
87
+ onLegacyDecoration?: (ctor: Function, metadata: TMetadata) => void;
88
+ /**
89
+ * Store pending metadata for TC39 mode (required)
90
+ * The metadata will be resolved later when the class is processed
91
+ */
92
+ storePendingMetadata: (method: Function, metadata: TMetadata) => void;
93
+ }
94
+ /**
95
+ * Check if decorator context is TC39 Stage 3 style
96
+ */
97
+ export declare function isTC39MethodContext(arg: unknown): arg is TC39MethodContext;
98
+ /**
99
+ * Check if decorator context is TC39 Stage 3 class context
100
+ */
101
+ export declare function isTC39ClassContext(arg: unknown): arg is TC39ClassContext;
102
+ /**
103
+ * Creates a method decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.
104
+ *
105
+ * For legacy decorators: onLegacyDecoration is called immediately with class constructor
106
+ * For TC39 decorators: storePendingMetadata is called, metadata resolved later via resolvePendingMetadataForClass
107
+ */
108
+ export declare function createDualModeMethodDecorator<TOptions, TMetadata>(config: MethodDecoratorConfig<TOptions, TMetadata>): (options: TOptions) => MethodDecorator;
109
+ /**
110
+ * Storage for pending TC39 decorator metadata
111
+ * Generic class that can be instantiated for different metadata types
112
+ */
113
+ export declare class PendingMetadataRegistry<T> {
114
+ private pending;
115
+ /**
116
+ * Store pending metadata for a method (TC39 mode)
117
+ */
118
+ store(method: Function, metadata: T): void;
119
+ /**
120
+ * Get and optionally clear pending metadata for a method
121
+ */
122
+ consume(method: Function): T[];
123
+ /**
124
+ * Resolve all pending metadata for a class by scanning its prototype and static members
125
+ */
126
+ resolveForClass(ctor: Function, consume?: boolean): T[];
127
+ }
128
+ /**
129
+ * Creates a class decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.
130
+ */
131
+ export declare function createDualModeClassDecorator<TOptions>(handler: (ctor: Function, options: TOptions, context?: TC39ClassContext) => Function | void): (options: TOptions) => ClassDecorator;
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ /**
3
+ * Decorator Utilities for Dual-Mode Support
4
+ *
5
+ * This module provides utilities for creating decorators that work with both:
6
+ * - Legacy TypeScript decorators (experimentalDecorators: true)
7
+ * - TC39 Stage 3 decorators (native JS, used by esbuild/tsx)
8
+ *
9
+ * The key difference between the two modes:
10
+ *
11
+ * LEGACY TypeScript Method Decorator:
12
+ * (target: prototype, propertyKey: string, descriptor: PropertyDescriptor) => void
13
+ * - target is the class prototype (for instance methods) or class (for static)
14
+ * - propertyKey is the method name
15
+ * - descriptor is the property descriptor
16
+ *
17
+ * TC39 Stage 3 Method Decorator:
18
+ * (target: method, context: ClassMethodDecoratorContext) => method
19
+ * - target is the actual method function being decorated
20
+ * - context is an object with { kind, name, static, private, addInitializer }
21
+ * - The class isn't available during decoration (only via addInitializer at instance creation)
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * // Using the factory to create a dual-mode decorator
26
+ * const MyDecorator = createMethodDecorator<{ stage: string }>({
27
+ * createMetadata: (args, options) => ({
28
+ * methodName: args.methodName,
29
+ * stage: options.stage,
30
+ * }),
31
+ * onLegacyDecoration: (ctor, metadata) => {
32
+ * // Immediately register on class (legacy mode)
33
+ * registerOnClass(ctor, metadata);
34
+ * },
35
+ * });
36
+ *
37
+ * // Usage (works in both modes):
38
+ * class MyFlow {
39
+ * @MyDecorator({ stage: 'execute' })
40
+ * async execute() {}
41
+ * }
42
+ * ```
43
+ */
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.PendingMetadataRegistry = void 0;
46
+ exports.isTC39MethodContext = isTC39MethodContext;
47
+ exports.isTC39ClassContext = isTC39ClassContext;
48
+ exports.createDualModeMethodDecorator = createDualModeMethodDecorator;
49
+ exports.createDualModeClassDecorator = createDualModeClassDecorator;
50
+ /**
51
+ * Check if decorator context is TC39 Stage 3 style
52
+ */
53
+ function isTC39MethodContext(arg) {
54
+ return typeof arg === 'object' && arg !== null && 'kind' in arg && arg.kind === 'method';
55
+ }
56
+ /**
57
+ * Check if decorator context is TC39 Stage 3 class context
58
+ */
59
+ function isTC39ClassContext(arg) {
60
+ return typeof arg === 'object' && arg !== null && 'kind' in arg && arg.kind === 'class';
61
+ }
62
+ /**
63
+ * Creates a method decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.
64
+ *
65
+ * For legacy decorators: onLegacyDecoration is called immediately with class constructor
66
+ * For TC39 decorators: storePendingMetadata is called, metadata resolved later via resolvePendingMetadataForClass
67
+ */
68
+ function createDualModeMethodDecorator(config) {
69
+ return (options) => {
70
+ return (target, keyOrContext, descriptor) => {
71
+ if (isTC39MethodContext(keyOrContext)) {
72
+ // TC39 Stage 3 decorator style
73
+ const context = keyOrContext;
74
+ const methodName = String(context.name);
75
+ const isStatic = context.static;
76
+ const method = target; // In TC39, target is the method function itself
77
+ const args = {
78
+ method,
79
+ methodName,
80
+ isStatic,
81
+ mode: 'tc39',
82
+ };
83
+ const metadata = config.createMetadata(args, options);
84
+ config.storePendingMetadata(method, metadata);
85
+ // Return the original method unchanged
86
+ return target;
87
+ }
88
+ else {
89
+ // Legacy TypeScript decorator style
90
+ const key = keyOrContext;
91
+ const methodName = String(key);
92
+ const isStatic = typeof target === 'function';
93
+ const method = descriptor?.value ?? target[key];
94
+ const ctor = isStatic ? target : target.constructor;
95
+ const args = {
96
+ method,
97
+ methodName,
98
+ isStatic,
99
+ mode: 'legacy',
100
+ };
101
+ const metadata = config.createMetadata(args, options);
102
+ // In legacy mode, we have immediate access to the class
103
+ if (config.onLegacyDecoration) {
104
+ config.onLegacyDecoration(ctor, metadata);
105
+ }
106
+ // Return nothing to keep the original descriptor
107
+ return undefined;
108
+ }
109
+ };
110
+ };
111
+ }
112
+ /**
113
+ * Storage for pending TC39 decorator metadata
114
+ * Generic class that can be instantiated for different metadata types
115
+ */
116
+ class PendingMetadataRegistry {
117
+ pending = new WeakMap();
118
+ /**
119
+ * Store pending metadata for a method (TC39 mode)
120
+ */
121
+ store(method, metadata) {
122
+ const existing = this.pending.get(method) ?? [];
123
+ existing.push(metadata);
124
+ this.pending.set(method, existing);
125
+ }
126
+ /**
127
+ * Get and optionally clear pending metadata for a method
128
+ */
129
+ consume(method) {
130
+ const pending = this.pending.get(method) ?? [];
131
+ this.pending.delete(method);
132
+ return pending;
133
+ }
134
+ /**
135
+ * Resolve all pending metadata for a class by scanning its prototype and static members
136
+ */
137
+ resolveForClass(ctor, consume = true) {
138
+ const resolved = [];
139
+ // Scan instance methods on prototype
140
+ const proto = ctor.prototype;
141
+ if (proto) {
142
+ for (const name of Object.getOwnPropertyNames(proto)) {
143
+ if (name === 'constructor')
144
+ continue;
145
+ try {
146
+ const desc = Object.getOwnPropertyDescriptor(proto, name);
147
+ const method = desc?.value;
148
+ if (typeof method === 'function') {
149
+ const pending = consume ? this.consume(method) : this.pending.get(method) ?? [];
150
+ resolved.push(...pending);
151
+ }
152
+ }
153
+ catch {
154
+ // Ignore getter/setter errors
155
+ }
156
+ }
157
+ }
158
+ // Scan static methods on constructor
159
+ for (const name of Object.getOwnPropertyNames(ctor)) {
160
+ if (['prototype', 'length', 'name'].includes(name))
161
+ continue;
162
+ try {
163
+ const desc = Object.getOwnPropertyDescriptor(ctor, name);
164
+ const method = desc?.value;
165
+ if (typeof method === 'function') {
166
+ const pending = consume ? this.consume(method) : this.pending.get(method) ?? [];
167
+ resolved.push(...pending);
168
+ }
169
+ }
170
+ catch {
171
+ // Ignore getter/setter errors
172
+ }
173
+ }
174
+ return resolved;
175
+ }
176
+ }
177
+ exports.PendingMetadataRegistry = PendingMetadataRegistry;
178
+ /**
179
+ * Creates a class decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.
180
+ */
181
+ function createDualModeClassDecorator(handler) {
182
+ return (options) => {
183
+ return (target, context) => {
184
+ if (isTC39ClassContext(context)) {
185
+ // TC39 Stage 3 class decorator
186
+ return handler(target, options, context) ?? target;
187
+ }
188
+ else {
189
+ // Legacy TypeScript class decorator
190
+ return handler(target, options) ?? target;
191
+ }
192
+ };
193
+ };
194
+ }
195
+ //# sourceMappingURL=decorator-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator-utils.js","sourceRoot":"","sources":["../../../../src/common/decorators/decorator-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Decorator Utilities for Dual-Mode Support\n *\n * This module provides utilities for creating decorators that work with both:\n * - Legacy TypeScript decorators (experimentalDecorators: true)\n * - TC39 Stage 3 decorators (native JS, used by esbuild/tsx)\n *\n * The key difference between the two modes:\n *\n * LEGACY TypeScript Method Decorator:\n * (target: prototype, propertyKey: string, descriptor: PropertyDescriptor) => void\n * - target is the class prototype (for instance methods) or class (for static)\n * - propertyKey is the method name\n * - descriptor is the property descriptor\n *\n * TC39 Stage 3 Method Decorator:\n * (target: method, context: ClassMethodDecoratorContext) => method\n * - target is the actual method function being decorated\n * - context is an object with { kind, name, static, private, addInitializer }\n * - The class isn't available during decoration (only via addInitializer at instance creation)\n *\n * @example\n * ```typescript\n * // Using the factory to create a dual-mode decorator\n * const MyDecorator = createMethodDecorator<{ stage: string }>({\n * createMetadata: (args, options) => ({\n * methodName: args.methodName,\n * stage: options.stage,\n * }),\n * onLegacyDecoration: (ctor, metadata) => {\n * // Immediately register on class (legacy mode)\n * registerOnClass(ctor, metadata);\n * },\n * });\n *\n * // Usage (works in both modes):\n * class MyFlow {\n * @MyDecorator({ stage: 'execute' })\n * async execute() {}\n * }\n * ```\n */\n\n/**\n * TC39 Stage 3 Method Decorator Context\n * @see https://github.com/tc39/proposal-decorators\n */\nexport interface TC39MethodContext {\n readonly kind: 'method';\n readonly name: string | symbol;\n readonly static: boolean;\n readonly private: boolean;\n addInitializer(initializer: () => void): void;\n}\n\n/**\n * TC39 Stage 3 Class Decorator Context\n */\nexport interface TC39ClassContext {\n readonly kind: 'class';\n readonly name: string | undefined;\n addInitializer(initializer: () => void): void;\n}\n\n/**\n * Normalized arguments passed to method decorator handlers\n */\nexport interface MethodDecoratorArgs {\n /** The method function being decorated */\n method: Function;\n /** Method name as string */\n methodName: string;\n /** Whether this is a static method */\n isStatic: boolean;\n /** Decorator mode */\n mode: 'legacy' | 'tc39';\n}\n\n/**\n * Configuration for creating a dual-mode method decorator\n */\nexport interface MethodDecoratorConfig<TOptions, TMetadata> {\n /**\n * Create metadata from decorator arguments and options\n */\n createMetadata: (args: MethodDecoratorArgs, options: TOptions) => TMetadata;\n\n /**\n * Called immediately during legacy decoration with access to the class\n * Use this to register metadata directly on the class\n */\n onLegacyDecoration?: (ctor: Function, metadata: TMetadata) => void;\n\n /**\n * Store pending metadata for TC39 mode (required)\n * The metadata will be resolved later when the class is processed\n */\n storePendingMetadata: (method: Function, metadata: TMetadata) => void;\n}\n\n/**\n * Check if decorator context is TC39 Stage 3 style\n */\nexport function isTC39MethodContext(arg: unknown): arg is TC39MethodContext {\n return typeof arg === 'object' && arg !== null && 'kind' in arg && (arg as TC39MethodContext).kind === 'method';\n}\n\n/**\n * Check if decorator context is TC39 Stage 3 class context\n */\nexport function isTC39ClassContext(arg: unknown): arg is TC39ClassContext {\n return typeof arg === 'object' && arg !== null && 'kind' in arg && (arg as TC39ClassContext).kind === 'class';\n}\n\n/**\n * Creates a method decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.\n *\n * For legacy decorators: onLegacyDecoration is called immediately with class constructor\n * For TC39 decorators: storePendingMetadata is called, metadata resolved later via resolvePendingMetadataForClass\n */\nexport function createDualModeMethodDecorator<TOptions, TMetadata>(\n config: MethodDecoratorConfig<TOptions, TMetadata>,\n): (options: TOptions) => MethodDecorator {\n return (options: TOptions): MethodDecorator => {\n return (target: any, keyOrContext: any, descriptor?: PropertyDescriptor): any => {\n if (isTC39MethodContext(keyOrContext)) {\n // TC39 Stage 3 decorator style\n const context = keyOrContext;\n const methodName = String(context.name);\n const isStatic = context.static;\n const method = target; // In TC39, target is the method function itself\n\n const args: MethodDecoratorArgs = {\n method,\n methodName,\n isStatic,\n mode: 'tc39',\n };\n\n const metadata = config.createMetadata(args, options);\n config.storePendingMetadata(method, metadata);\n\n // Return the original method unchanged\n return target;\n } else {\n // Legacy TypeScript decorator style\n const key = keyOrContext;\n const methodName = String(key);\n const isStatic = typeof target === 'function';\n const method = descriptor?.value ?? target[key];\n const ctor = isStatic ? target : target.constructor;\n\n const args: MethodDecoratorArgs = {\n method,\n methodName,\n isStatic,\n mode: 'legacy',\n };\n\n const metadata = config.createMetadata(args, options);\n\n // In legacy mode, we have immediate access to the class\n if (config.onLegacyDecoration) {\n config.onLegacyDecoration(ctor, metadata);\n }\n\n // Return nothing to keep the original descriptor\n return undefined;\n }\n };\n };\n}\n\n/**\n * Storage for pending TC39 decorator metadata\n * Generic class that can be instantiated for different metadata types\n */\nexport class PendingMetadataRegistry<T> {\n private pending = new WeakMap<Function, T[]>();\n\n /**\n * Store pending metadata for a method (TC39 mode)\n */\n store(method: Function, metadata: T): void {\n const existing = this.pending.get(method) ?? [];\n existing.push(metadata);\n this.pending.set(method, existing);\n }\n\n /**\n * Get and optionally clear pending metadata for a method\n */\n consume(method: Function): T[] {\n const pending = this.pending.get(method) ?? [];\n this.pending.delete(method);\n return pending;\n }\n\n /**\n * Resolve all pending metadata for a class by scanning its prototype and static members\n */\n resolveForClass(ctor: Function, consume: boolean = true): T[] {\n const resolved: T[] = [];\n\n // Scan instance methods on prototype\n const proto = ctor.prototype;\n if (proto) {\n for (const name of Object.getOwnPropertyNames(proto)) {\n if (name === 'constructor') continue;\n try {\n const desc = Object.getOwnPropertyDescriptor(proto, name);\n const method = desc?.value;\n if (typeof method === 'function') {\n const pending = consume ? this.consume(method) : this.pending.get(method) ?? [];\n resolved.push(...pending);\n }\n } catch {\n // Ignore getter/setter errors\n }\n }\n }\n\n // Scan static methods on constructor\n for (const name of Object.getOwnPropertyNames(ctor)) {\n if (['prototype', 'length', 'name'].includes(name)) continue;\n try {\n const desc = Object.getOwnPropertyDescriptor(ctor, name);\n const method = desc?.value;\n if (typeof method === 'function') {\n const pending = consume ? this.consume(method) : this.pending.get(method) ?? [];\n resolved.push(...pending);\n }\n } catch {\n // Ignore getter/setter errors\n }\n }\n\n return resolved;\n }\n}\n\n/**\n * Creates a class decorator that works with both legacy TypeScript and TC39 Stage 3 decorators.\n */\nexport function createDualModeClassDecorator<TOptions>(\n handler: (ctor: Function, options: TOptions, context?: TC39ClassContext) => Function | void,\n): (options: TOptions) => ClassDecorator {\n return (options: TOptions): ClassDecorator => {\n return (target: any, context?: any): any => {\n if (isTC39ClassContext(context)) {\n // TC39 Stage 3 class decorator\n return handler(target, options, context) ?? target;\n } else {\n // Legacy TypeScript class decorator\n return handler(target, options) ?? target;\n }\n };\n };\n}\n"]}
@@ -17,8 +17,9 @@ function FrontMcp(providedMetadata) {
17
17
  if (error.format().providers) {
18
18
  throw new Error(`Invalid metadata provided to @FrontMcp { providers: [?] }: \n${JSON.stringify(error.format().providers, null, 2)}`);
19
19
  }
20
- if (error.format().logging?.transports) {
21
- throw new Error(`Invalid metadata provided to @FrontMcp { logging: { transports: [?] } }: \n${JSON.stringify(error.format().logging?.transports, null, 2)}`);
20
+ const loggingFormat = error.format()['logging'];
21
+ if (loggingFormat?.['transports']) {
22
+ throw new Error(`Invalid metadata provided to @FrontMcp { logging: { transports: [?] } }: \n${JSON.stringify(loggingFormat['transports'], null, 2)}`);
22
23
  }
23
24
  throw error;
24
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"front-mcp.decorator.js","sourceRoot":"","sources":["../../../../src/common/decorators/front-mcp.decorator.ts"],"names":[],"mappings":";;AAQA,4BAkCC;AA1CD,4BAA0B;AAC1B,sCAAyC;AACzC,0CAAqE;AAGrE;;GAEG;AACH,SAAgB,QAAQ,CAAC,gBAAkC;IACzD,OAAO,CAAC,MAAgB,EAAE,EAAE;QAE1B,MAAM,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAC,GAAG,iCAAsB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACnF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,2DAA2D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7H,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,gEAAgE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACvI,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,8EAA8E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/J,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,uBAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,uBAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,eAAe,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,gBAAgB,EAAC,EAAE,EAAE;gBACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,qFAAqF,CAAC,CAAC;gBAC/G,CAAC;gBAED,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC;IAEH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import 'reflect-metadata';\nimport {FrontMcpTokens} from '../tokens';\nimport {FrontMcpMetadata, frontMcpMetadataSchema} from '../metadata';\nimport {FrontMcpInstance} from \"../../front-mcp\";\n\n/**\n * Decorator that marks a class as a FrontMcp Server and provides metadata\n */\nexport function FrontMcp(providedMetadata: FrontMcpMetadata): ClassDecorator {\n return (target: Function) => {\n\n const {error, data: metadata} = frontMcpMetadataSchema.safeParse(providedMetadata);\n if (error) {\n if (error.format().apps) {\n throw new Error(`Invalid metadata provided to @FrontMcp { apps: [?] }: \\n${JSON.stringify(error.format().apps, null, 2)}`);\n }\n if (error.format().providers) {\n throw new Error(`Invalid metadata provided to @FrontMcp { providers: [?] }: \\n${JSON.stringify(error.format().providers, null, 2)}`);\n }\n if (error.format().logging?.transports) {\n throw new Error(`Invalid metadata provided to @FrontMcp { logging: { transports: [?] } }: \\n${JSON.stringify(error.format().logging?.transports, null, 2)}`);\n }\n throw error;\n }\n\n Reflect.defineMetadata(FrontMcpTokens.type, true, target);\n for (const property in metadata) {\n Reflect.defineMetadata(FrontMcpTokens[property] ?? property, metadata[property], target);\n }\n\n if (metadata.serve) {\n const sdk = '@frontmcp/sdk';\n import(sdk).then(({FrontMcpInstance}) => {\n if (!FrontMcpInstance) {\n throw new Error(`${sdk} version mismatch, make sure you have the same version for all @frontmcp/* packages`);\n }\n\n FrontMcpInstance.bootstrap(metadata);\n });\n }\n\n };\n}\n"]}
1
+ {"version":3,"file":"front-mcp.decorator.js","sourceRoot":"","sources":["../../../../src/common/decorators/front-mcp.decorator.ts"],"names":[],"mappings":";;AAQA,4BA+CC;AAvDD,4BAA0B;AAC1B,sCAA2C;AAC3C,0CAAuE;AAGvE;;GAEG;AACH,SAAgB,QAAQ,CAAC,gBAAkC;IACzD,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,iCAAsB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrF,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,2DAA2D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAC1G,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,gEAAgE,IAAI,CAAC,SAAS,CAC5E,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EACxB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,CAAwC,CAAC;YACvF,IAAI,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,8EAA8E,IAAI,CAAC,SAAS,CAC1F,aAAa,CAAC,YAAY,CAAC,EAC3B,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,uBAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,uBAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,eAAe,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE;gBACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,qFAAqF,CAAC,CAAC;gBAC/G,CAAC;gBAED,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import 'reflect-metadata';\nimport { FrontMcpTokens } from '../tokens';\nimport { FrontMcpMetadata, frontMcpMetadataSchema } from '../metadata';\nimport { FrontMcpInstance } from '../../front-mcp';\n\n/**\n * Decorator that marks a class as a FrontMcp Server and provides metadata\n */\nexport function FrontMcp(providedMetadata: FrontMcpMetadata): ClassDecorator {\n return (target: Function) => {\n const { error, data: metadata } = frontMcpMetadataSchema.safeParse(providedMetadata);\n if (error) {\n if (error.format().apps) {\n throw new Error(\n `Invalid metadata provided to @FrontMcp { apps: [?] }: \\n${JSON.stringify(error.format().apps, null, 2)}`,\n );\n }\n if (error.format().providers) {\n throw new Error(\n `Invalid metadata provided to @FrontMcp { providers: [?] }: \\n${JSON.stringify(\n error.format().providers,\n null,\n 2,\n )}`,\n );\n }\n const loggingFormat = error.format()['logging'] as Record<string, unknown> | undefined;\n if (loggingFormat?.['transports']) {\n throw new Error(\n `Invalid metadata provided to @FrontMcp { logging: { transports: [?] } }: \\n${JSON.stringify(\n loggingFormat['transports'],\n null,\n 2,\n )}`,\n );\n }\n throw error;\n }\n\n Reflect.defineMetadata(FrontMcpTokens.type, true, target);\n for (const property in metadata) {\n Reflect.defineMetadata(FrontMcpTokens[property] ?? property, metadata[property], target);\n }\n\n if (metadata.serve) {\n const sdk = '@frontmcp/sdk';\n import(sdk).then(({ FrontMcpInstance }) => {\n if (!FrontMcpInstance) {\n throw new Error(`${sdk} version mismatch, make sure you have the same version for all @frontmcp/* packages`);\n }\n\n FrontMcpInstance.bootstrap(metadata);\n });\n }\n };\n}\n"]}
@@ -1,9 +1,65 @@
1
- import { HookOptions, FlowName } from '../metadata';
2
- /** NEW: typed variants */
1
+ /**
2
+ * Flow Hook Decorators
3
+ *
4
+ * This module provides decorators for defining flow stages and lifecycle hooks.
5
+ * Supports both legacy TypeScript decorators and TC39 Stage 3 decorators.
6
+ */
7
+ import { HookOptions, FlowName, HookMetadata } from '../metadata';
8
+ /**
9
+ * Resolve all pending TC39 hooks for a class by scanning its prototype
10
+ * This is called by collectFlowHookMap during flow registration
11
+ */
12
+ export declare function resolvePendingTC39HooksForClass(ctor: Function): HookMetadata[];
13
+ /**
14
+ * Store a pending hook for TC39 mode
15
+ * @internal
16
+ */
17
+ export declare function registerPendingTC39Hook(method: Function, meta: HookMetadata): void;
18
+ /**
19
+ * Get and clear pending hooks for a method (TC39 mode)
20
+ * @internal
21
+ */
22
+ export declare function consumePendingTC39Hooks(method: Function): HookMetadata[];
23
+ /**
24
+ * Creates a typed Stage hook decorator for a specific flow
25
+ * @example
26
+ * ```typescript
27
+ * const { Stage } = FlowHooksOf('http:request');
28
+ *
29
+ * class HttpRequestFlow {
30
+ * @Stage('checkAuthorization')
31
+ * async checkAuthorization() { ... }
32
+ * }
33
+ * ```
34
+ */
3
35
  export declare function StageHookOf<Name extends FlowName>(flow: Name): (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
36
+ /**
37
+ * Creates a typed Will hook decorator (runs before stage)
38
+ */
4
39
  export declare function WillHookOf<Name extends FlowName>(flow: Name): (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
40
+ /**
41
+ * Creates a typed Did hook decorator (runs after stage)
42
+ */
5
43
  export declare function DidHookOf<Name extends FlowName>(flow: Name): (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
44
+ /**
45
+ * Creates a typed Around hook decorator (wraps stage execution)
46
+ */
6
47
  export declare function AroundHookOf<Name extends FlowName>(name: Name): (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
48
+ /**
49
+ * Creates all hook decorators for a specific flow
50
+ * @example
51
+ * ```typescript
52
+ * const { Stage, Will, Did, Around } = FlowHooksOf('http:request');
53
+ *
54
+ * class HttpRequestFlow {
55
+ * @Stage('checkAuthorization')
56
+ * async checkAuthorization() { ... }
57
+ *
58
+ * @Will('execute', { priority: 10 })
59
+ * async beforeExecute() { ... }
60
+ * }
61
+ * ```
62
+ */
7
63
  export declare function FlowHooksOf<Name extends FlowName>(name: Name): {
8
64
  Stage: (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;
9
65
  Will: (stage: ExtendFlows[Name]["stage"], opts?: HookOptions<ExtendFlows[Name]["ctx"]>) => MethodDecorator;