@frontmcp/sdk 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +110 -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 +336 -1632
  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 +89 -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 +77 -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 +248 -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 +78 -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 +110 -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 +83 -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 +83 -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 +60 -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 +59 -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 +161 -1112
  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 +51 -474
  377. package/src/tool/flows/tools-list.flow.js +121 -40
  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 +95 -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 +138 -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 +922 -207
  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 +80 -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 +82 -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 +82 -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 +47 -145
  452. package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +66 -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 +72 -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 +57 -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 +57 -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
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/resource/resource.instance.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ResourceInstance = void 0;
5
+ const common_1 = require("../common");
6
+ const hooks_utils_1 = require("../hooks/hooks.utils");
7
+ const resource_utils_1 = require("./resource.utils");
8
+ const mcp_error_1 = require("../errors/mcp.error");
9
+ class ResourceInstance extends common_1.ResourceEntry {
10
+ providers;
11
+ scope;
12
+ hooks;
13
+ /** Parsed URI template info for template resources */
14
+ templateInfo;
15
+ constructor(record, providers, owner) {
16
+ super(record);
17
+ this.owner = owner;
18
+ this.providers = providers;
19
+ this.name = record.metadata.name;
20
+ this.fullName = this.owner.id + ':' + this.name;
21
+ this.scope = this.providers.getActiveScope();
22
+ this.hooks = this.scope.providers.getHooksRegistry();
23
+ // Determine if this is a template resource
24
+ this.isTemplate = 'uriTemplate' in record.metadata;
25
+ if (this.isTemplate) {
26
+ const templateMetadata = record.metadata;
27
+ this.uriTemplate = templateMetadata.uriTemplate;
28
+ // Pre-parse the URI template for efficient matching
29
+ this.templateInfo = (0, resource_utils_1.parseUriTemplate)(this.uriTemplate);
30
+ }
31
+ else {
32
+ const resourceMetadata = record.metadata;
33
+ this.uri = resourceMetadata.uri;
34
+ }
35
+ this.ready = this.initialize();
36
+ }
37
+ async initialize() {
38
+ // Valid flows for resource hooks
39
+ const validFlows = ['resources:read-resource', 'resources:list-resources', 'resources:list-resource-templates'];
40
+ const allHooks = (0, hooks_utils_1.normalizeHooksFromCls)(this.record.provide);
41
+ // Separate valid and invalid hooks
42
+ const validHooks = allHooks.filter((hook) => validFlows.includes(hook.metadata.flow));
43
+ const invalidHooks = allHooks.filter((hook) => !validFlows.includes(hook.metadata.flow));
44
+ // Throw error for invalid hooks (fail fast)
45
+ if (invalidHooks.length > 0) {
46
+ const className = this.record.provide?.name ?? 'Unknown';
47
+ const invalidFlowNames = invalidHooks.map((h) => h.metadata.flow).join(', ');
48
+ throw new mcp_error_1.InvalidHookFlowError(`Resource "${className}" has hooks for unsupported flows: ${invalidFlowNames}. ` +
49
+ `Only resource flows (${validFlows.join(', ')}) are supported on resource classes.`);
50
+ }
51
+ // Register valid hooks
52
+ if (validHooks.length > 0) {
53
+ await this.hooks.registerHooks(true, ...validHooks);
54
+ }
55
+ }
56
+ getMetadata() {
57
+ return this.record.metadata;
58
+ }
59
+ /**
60
+ * Match a URI against this resource.
61
+ * For static resources: exact match against uri
62
+ * For templates: pattern match and extract parameters
63
+ */
64
+ matchUri(uri) {
65
+ if (this.isTemplate && this.templateInfo && this.uriTemplate) {
66
+ const params = (0, resource_utils_1.matchUriTemplate)(this.uriTemplate, uri);
67
+ if (params) {
68
+ return { matches: true, params: params };
69
+ }
70
+ return { matches: false, params: {} };
71
+ }
72
+ // Static resource: exact match
73
+ if (this.uri === uri) {
74
+ return { matches: true, params: {} };
75
+ }
76
+ return { matches: false, params: {} };
77
+ }
78
+ /**
79
+ * Create a resource context (class or function wrapper).
80
+ */
81
+ create(uri, params, ctx) {
82
+ const metadata = this.metadata;
83
+ const providers = this.providers;
84
+ const scope = this.providers.getActiveScope();
85
+ const logger = scope.logger;
86
+ const authInfo = ctx.authInfo;
87
+ const resourceCtorArgs = {
88
+ metadata,
89
+ uri,
90
+ params,
91
+ providers,
92
+ logger,
93
+ authInfo,
94
+ };
95
+ const record = this.record;
96
+ switch (record.kind) {
97
+ case common_1.ResourceKind.CLASS_TOKEN:
98
+ case common_1.ResourceTemplateKind.CLASS_TOKEN:
99
+ return new record.provide(resourceCtorArgs);
100
+ case common_1.ResourceKind.FUNCTION:
101
+ case common_1.ResourceTemplateKind.FUNCTION:
102
+ return new FunctionResourceContext(record, resourceCtorArgs);
103
+ default:
104
+ // This should be unreachable if all ResourceKind and ResourceTemplateKind values are handled
105
+ throw new Error(`Unhandled resource kind: ${record.kind}`);
106
+ }
107
+ }
108
+ /**
109
+ * Convert the raw resource return value into an MCP ReadResourceResult.
110
+ */
111
+ parseOutput(raw) {
112
+ const uri = this.isTemplate ? this.uriTemplate : this.uri;
113
+ const mimeType = this.metadata.mimeType;
114
+ // If raw is already in ReadResourceResult format
115
+ if (raw && typeof raw === 'object' && 'contents' in raw) {
116
+ return raw;
117
+ }
118
+ // If raw is an array, assume it's an array of content items
119
+ if (Array.isArray(raw)) {
120
+ const contents = raw.map((item, index) => {
121
+ if (item && typeof item === 'object' && ('text' in item || 'blob' in item)) {
122
+ const itemUri = item['uri'] || `${uri}#${index}`;
123
+ const itemMimeType = item['mimeType'] || mimeType;
124
+ if ('text' in item) {
125
+ return { uri: itemUri, mimeType: itemMimeType, text: item['text'] };
126
+ }
127
+ return { uri: itemUri, mimeType: itemMimeType, blob: item['blob'] };
128
+ }
129
+ return (0, resource_utils_1.buildParsedResourceResult)(`${uri}#${index}`, item, mimeType);
130
+ });
131
+ return { contents };
132
+ }
133
+ // Single content item
134
+ const content = (0, resource_utils_1.buildParsedResourceResult)(uri, raw, mimeType);
135
+ return { contents: [content] };
136
+ }
137
+ /**
138
+ * Safe version of parseOutput that returns success/error instead of throwing.
139
+ */
140
+ safeParseOutput(raw) {
141
+ try {
142
+ return { success: true, data: this.parseOutput(raw) };
143
+ }
144
+ catch (error) {
145
+ return { success: false, error: error instanceof Error ? error : new Error(String(error)) };
146
+ }
147
+ }
148
+ }
149
+ exports.ResourceInstance = ResourceInstance;
150
+ /**
151
+ * Resource context for function-decorated resources.
152
+ */
153
+ class FunctionResourceContext extends common_1.ResourceContext {
154
+ record;
155
+ constructor(record, args) {
156
+ super(args);
157
+ this.record = record;
158
+ }
159
+ execute(uri, params) {
160
+ return this.record.provide(uri, params, this);
161
+ }
162
+ }
163
+ //# sourceMappingURL=resource.instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.instance.js","sourceRoot":"","sources":["../../../src/resource/resource.instance.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/resource/resource.instance.ts\n\nimport {\n EntryOwnerRef,\n ResourceEntry,\n ResourceReadExtra,\n ParsedResourceResult,\n ResourceSafeTransformResult,\n ResourceRecord,\n ResourceKind,\n ResourceContext,\n ResourceCtorArgs,\n ResourceMetadata,\n ResourceTemplateMetadata,\n ResourceFunctionRecord,\n ResourceTemplateRecord,\n ResourceTemplateKind,\n} from '../common';\nimport ProviderRegistry from '../provider/provider.registry';\nimport HookRegistry from '../hooks/hook.registry';\nimport { Scope } from '../scope';\nimport { normalizeHooksFromCls } from '../hooks/hooks.utils';\nimport { matchUriTemplate, parseUriTemplate, buildParsedResourceResult } from './resource.utils';\nimport { InvalidHookFlowError } from '../errors/mcp.error';\n\nexport class ResourceInstance<\n Params extends Record<string, string> = Record<string, string>,\n Out = unknown,\n> extends ResourceEntry<Params, Out> {\n private readonly providers: ProviderRegistry;\n readonly scope: Scope;\n readonly hooks: HookRegistry;\n\n /** Parsed URI template info for template resources */\n private templateInfo?: { pattern: RegExp; paramNames: string[] };\n\n constructor(record: ResourceRecord | ResourceTemplateRecord, providers: ProviderRegistry, owner: EntryOwnerRef) {\n super(record);\n this.owner = owner;\n this.providers = providers;\n this.name = record.metadata.name;\n this.fullName = this.owner.id + ':' + this.name;\n this.scope = this.providers.getActiveScope();\n this.hooks = this.scope.providers.getHooksRegistry();\n\n // Determine if this is a template resource\n this.isTemplate = 'uriTemplate' in record.metadata;\n\n if (this.isTemplate) {\n const templateMetadata = record.metadata as ResourceTemplateMetadata;\n this.uriTemplate = templateMetadata.uriTemplate;\n // Pre-parse the URI template for efficient matching\n this.templateInfo = parseUriTemplate(this.uriTemplate);\n } else {\n const resourceMetadata = record.metadata as ResourceMetadata;\n this.uri = resourceMetadata.uri;\n }\n\n this.ready = this.initialize();\n }\n\n protected async initialize(): Promise<void> {\n // Valid flows for resource hooks\n const validFlows = ['resources:read-resource', 'resources:list-resources', 'resources:list-resource-templates'];\n\n const allHooks = normalizeHooksFromCls(this.record.provide);\n\n // Separate valid and invalid hooks\n const validHooks = allHooks.filter((hook) => validFlows.includes(hook.metadata.flow));\n const invalidHooks = allHooks.filter((hook) => !validFlows.includes(hook.metadata.flow));\n\n // Throw error for invalid hooks (fail fast)\n if (invalidHooks.length > 0) {\n const className = (this.record.provide as any)?.name ?? 'Unknown';\n const invalidFlowNames = invalidHooks.map((h) => h.metadata.flow).join(', ');\n throw new InvalidHookFlowError(\n `Resource \"${className}\" has hooks for unsupported flows: ${invalidFlowNames}. ` +\n `Only resource flows (${validFlows.join(', ')}) are supported on resource classes.`,\n );\n }\n\n // Register valid hooks\n if (validHooks.length > 0) {\n await this.hooks.registerHooks(true, ...validHooks);\n }\n }\n\n getMetadata(): ResourceMetadata | ResourceTemplateMetadata {\n return this.record.metadata;\n }\n\n /**\n * Match a URI against this resource.\n * For static resources: exact match against uri\n * For templates: pattern match and extract parameters\n */\n override matchUri(uri: string): { matches: boolean; params: Params } {\n if (this.isTemplate && this.templateInfo && this.uriTemplate) {\n const params = matchUriTemplate(this.uriTemplate, uri);\n if (params) {\n return { matches: true, params: params as Params };\n }\n return { matches: false, params: {} as Params };\n }\n\n // Static resource: exact match\n if (this.uri === uri) {\n return { matches: true, params: {} as Params };\n }\n return { matches: false, params: {} as Params };\n }\n\n /**\n * Create a resource context (class or function wrapper).\n */\n override create(uri: string, params: Params, ctx: ResourceReadExtra): ResourceContext<Params, Out> {\n const metadata = this.metadata;\n const providers = this.providers;\n const scope = this.providers.getActiveScope();\n const logger = scope.logger;\n const authInfo = ctx.authInfo;\n\n const resourceCtorArgs: ResourceCtorArgs<Params> = {\n metadata,\n uri,\n params,\n providers,\n logger,\n authInfo,\n };\n\n const record = this.record as ResourceRecord | ResourceTemplateRecord;\n\n switch (record.kind) {\n case ResourceKind.CLASS_TOKEN:\n case ResourceTemplateKind.CLASS_TOKEN:\n return new (record.provide as unknown as new (args: ResourceCtorArgs<Params>) => ResourceContext<Params, Out>)(\n resourceCtorArgs,\n );\n case ResourceKind.FUNCTION:\n case ResourceTemplateKind.FUNCTION:\n return new FunctionResourceContext<Params, Out>(record as ResourceFunctionRecord, resourceCtorArgs);\n default:\n // This should be unreachable if all ResourceKind and ResourceTemplateKind values are handled\n throw new Error(`Unhandled resource kind: ${(record as any).kind}`);\n }\n }\n\n /**\n * Convert the raw resource return value into an MCP ReadResourceResult.\n */\n override parseOutput(raw: Out): ParsedResourceResult {\n const uri = this.isTemplate ? this.uriTemplate! : this.uri!;\n const mimeType = this.metadata.mimeType;\n\n // If raw is already in ReadResourceResult format\n if (raw && typeof raw === 'object' && 'contents' in raw) {\n return raw as unknown as ParsedResourceResult;\n }\n\n // If raw is an array, assume it's an array of content items\n if (Array.isArray(raw)) {\n const contents = raw.map((item, index) => {\n if (item && typeof item === 'object' && ('text' in item || 'blob' in item)) {\n const itemUri = ((item as Record<string, unknown>)['uri'] as string | undefined) || `${uri}#${index}`;\n const itemMimeType = ((item as Record<string, unknown>)['mimeType'] as string | undefined) || mimeType;\n if ('text' in item) {\n return { uri: itemUri, mimeType: itemMimeType, text: (item as Record<string, unknown>)['text'] as string };\n }\n return { uri: itemUri, mimeType: itemMimeType, blob: (item as Record<string, unknown>)['blob'] as string };\n }\n return buildParsedResourceResult(`${uri}#${index}`, item, mimeType);\n });\n return { contents };\n }\n\n // Single content item\n const content = buildParsedResourceResult(uri, raw, mimeType);\n return { contents: [content] };\n }\n\n /**\n * Safe version of parseOutput that returns success/error instead of throwing.\n */\n override safeParseOutput(raw: Out): ResourceSafeTransformResult<ParsedResourceResult> {\n try {\n return { success: true, data: this.parseOutput(raw) };\n } catch (error: unknown) {\n return { success: false, error: error instanceof Error ? error : new Error(String(error)) };\n }\n }\n}\n\n/**\n * Resource context for function-decorated resources.\n */\nclass FunctionResourceContext<\n Params extends Record<string, string> = Record<string, string>,\n Out = unknown,\n> extends ResourceContext<Params, Out> {\n constructor(private readonly record: ResourceFunctionRecord, args: ResourceCtorArgs<Params>) {\n super(args);\n }\n\n execute(uri: string, params: Params): Promise<Out> {\n return this.record.provide(uri, params, this);\n }\n}\n"]}
@@ -1,15 +1,109 @@
1
+ import { EntryOwnerRef, ResourceEntry, ResourceRecord, ResourceTemplateRecord, ResourceRegistryInterface, ResourceType } from '../common';
2
+ import { ResourceChangeEvent } from './resource.events';
1
3
  import ProviderRegistry from '../provider/provider.registry';
2
- import { ResourceEntry, ResourceRecord, ResourceRegistryInterface, ResourceType, ToolType } from '../common';
3
- import { RegistryAbstract } from '../regsitry';
4
- export default class ResourceRegistry extends RegistryAbstract<ResourceEntry, ResourceRecord, ResourceType[]> implements ResourceRegistryInterface {
5
- constructor(providers: ProviderRegistry, list: ToolType[]);
6
- protected buildMap(list: ResourceType[]): {
7
- tokens: Set<import("../common").Reference<any>>;
8
- defs: Map<import("../common").Reference<any>, ResourceRecord>;
9
- graph: Map<import("../common").Reference<any>, Set<import("../common").Reference<any>>>;
10
- };
11
- buildGraph(): void;
4
+ import { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';
5
+ import { ResourceInstance } from './resource.instance';
6
+ import { ResourceExportOptions, IndexedResource } from './resource.types';
7
+ import type { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
8
+ export default class ResourceRegistry extends RegistryAbstract<ResourceInstance, // instances map holds ResourceInstance
9
+ // instances map holds ResourceInstance
10
+ ResourceRecord | ResourceTemplateRecord, ResourceType[]> implements ResourceRegistryInterface {
11
+ /** Who owns this registry (used for provenance). */
12
+ owner: EntryOwnerRef;
13
+ /** Resources truly owned/constructed by THIS registry (with lineage applied) */
14
+ private localRows;
15
+ /** Adopted resource rows from each child registry (references to the same instances) */
16
+ private adopted;
17
+ /** Children registries that we track */
18
+ private children;
19
+ private byQualifiedId;
20
+ private byName;
21
+ private byUri;
22
+ private byUriTemplate;
23
+ private byOwnerAndName;
24
+ private byOwner;
25
+ private version;
26
+ private emitter;
27
+ constructor(providers: ProviderRegistry, list: ResourceType[], owner: EntryOwnerRef);
28
+ protected buildMap(list: ResourceType[]): RegistryBuildMapResult<ResourceRecord | ResourceTemplateRecord>;
29
+ protected buildGraph(): void;
12
30
  protected initialize(): Promise<void>;
13
- getResources(): never[];
14
- getInlineResources(): ResourceEntry<any, any>[];
31
+ /**
32
+ * Adopt resources from a child registry. Parent runs after children are ready.
33
+ * We *reference* the child's resource instances; no duplicates are created.
34
+ */
35
+ adoptFromChild(child: ResourceRegistry, _childOwner: EntryOwnerRef): void;
36
+ /**
37
+ * Get all static resources (not templates)
38
+ */
39
+ getResources(includeHidden?: boolean): ResourceEntry[];
40
+ /**
41
+ * Get all resource templates
42
+ */
43
+ getResourceTemplates(): ResourceEntry[];
44
+ /**
45
+ * Get inline resources (local only)
46
+ */
47
+ getInlineResources(): ResourceEntry[];
48
+ /**
49
+ * Find a resource by exact URI match
50
+ */
51
+ findByUri(uri: string): ResourceInstance | undefined;
52
+ /**
53
+ * Match a URI against template resources and extract parameters
54
+ */
55
+ matchTemplateByUri(uri: string): {
56
+ instance: ResourceInstance;
57
+ params: Record<string, string>;
58
+ } | undefined;
59
+ /**
60
+ * Find a resource by URI - tries exact match first, then template matching
61
+ */
62
+ findResourceForUri(uri: string): {
63
+ instance: ResourceInstance;
64
+ params: Record<string, string>;
65
+ } | undefined;
66
+ /** Internal snapshot of effective indexed rows (locals + adopted). */
67
+ listAllIndexed(): IndexedResource[];
68
+ /** List all instances (locals + adopted). */
69
+ listAllInstances(): readonly ResourceInstance[];
70
+ /** List instances by owner path (e.g. "app:Portal/plugin:Okta") */
71
+ listByOwner(ownerPath: string): readonly ResourceInstance[];
72
+ private reindex;
73
+ /**
74
+ * Produce unique, MCP-valid exported names.
75
+ */
76
+ exportResolvedNames(opts?: ResourceExportOptions): Array<{
77
+ name: string;
78
+ instance: ResourceInstance;
79
+ }>;
80
+ /** Lookup by the exported (resolved) name. */
81
+ getExported(name: string, opts?: ResourceExportOptions): ResourceInstance | undefined;
82
+ subscribe(opts: {
83
+ immediate?: boolean;
84
+ filter?: (i: ResourceInstance) => boolean;
85
+ }, cb: (evt: ResourceChangeEvent) => void): () => void;
86
+ private bump;
87
+ /** Build an IndexedResource row */
88
+ private makeRow;
89
+ /** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */
90
+ private relineage;
91
+ /** Best-effort provider id used for prefixing. */
92
+ private providerIdOf;
93
+ /** True if this registry (or adopted children) has any resources. */
94
+ hasAny(): boolean;
95
+ /**
96
+ * Get the MCP capabilities for resources.
97
+ * These are reported to clients during initialization.
98
+ */
99
+ getCapabilities(): Partial<ServerCapabilities>;
100
+ /**
101
+ * Dynamically register a resource or resource template at runtime.
102
+ *
103
+ * Used for system resources like the ui:// template that should be
104
+ * registered when tools with UI configs exist.
105
+ *
106
+ * @param resourceDef - Resource class, function, or template to register
107
+ */
108
+ registerDynamicResource(resourceDef: ResourceType): void;
15
109
  }