@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
@@ -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
  }
@@ -1,32 +1,468 @@
1
1
  "use strict";
2
+ // file: libs/sdk/src/resource/resource.registry.ts
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const utils_1 = require("../utils");
6
+ const resource_events_1 = require("./resource.events");
7
+ const resource_utils_1 = require("./resource.utils");
3
8
  const regsitry_1 = require("../regsitry");
9
+ const resource_instance_1 = require("./resource.instance");
10
+ const resource_types_1 = require("./resource.types");
11
+ const read_resource_flow_1 = tslib_1.__importDefault(require("./flows/read-resource.flow"));
12
+ const resources_list_flow_1 = tslib_1.__importDefault(require("./flows/resources-list.flow"));
13
+ const resource_templates_list_flow_1 = tslib_1.__importDefault(require("./flows/resource-templates-list.flow"));
14
+ const subscribe_resource_flow_1 = tslib_1.__importDefault(require("./flows/subscribe-resource.flow"));
15
+ const unsubscribe_resource_flow_1 = tslib_1.__importDefault(require("./flows/unsubscribe-resource.flow"));
4
16
  class ResourceRegistry extends regsitry_1.RegistryAbstract {
5
- constructor(providers, list) {
6
- super('ResourceRegistry', providers, list);
17
+ /** Who owns this registry (used for provenance). */
18
+ owner;
19
+ /** Resources truly owned/constructed by THIS registry (with lineage applied) */
20
+ localRows = [];
21
+ /** Adopted resource rows from each child registry (references to the same instances) */
22
+ adopted = new Map();
23
+ /** Children registries that we track */
24
+ children = new Set();
25
+ // ---- O(1) indexes over EFFECTIVE set (local + adopted) ----
26
+ byQualifiedId = new Map(); // qualifiedId -> row
27
+ byName = new Map(); // baseName -> rows
28
+ byUri = new Map(); // uri -> row (static resources)
29
+ byUriTemplate = new Map(); // uriTemplate -> row (templates)
30
+ byOwnerAndName = new Map(); // "ownerKey:name" -> row
31
+ byOwner = new Map(); // ownerKey -> rows
32
+ // version + emitter
33
+ version = 0;
34
+ emitter = new resource_events_1.ResourceEmitter();
35
+ constructor(providers, list, owner) {
36
+ // disable auto so subclass fields initialize first
37
+ super('ResourceRegistry', providers, list, false);
38
+ this.owner = owner;
39
+ // now it's safe to run the lifecycle
40
+ this.buildGraph();
41
+ this.ready = this.initialize();
7
42
  }
43
+ /* -------------------- Build-time: defs + dep checks -------------------- */
8
44
  buildMap(list) {
9
45
  const tokens = new Set();
10
46
  const defs = new Map();
11
47
  const graph = new Map();
12
- return {
13
- tokens,
14
- defs,
15
- graph,
16
- };
48
+ for (const raw of list) {
49
+ // Determine if it's a template or static resource
50
+ const isTemplate = (0, resource_utils_1.isResourceTemplate)(raw);
51
+ const rec = isTemplate ? (0, resource_utils_1.normalizeResourceTemplate)(raw) : (0, resource_utils_1.normalizeResource)(raw);
52
+ const provide = rec.provide;
53
+ tokens.add(provide);
54
+ defs.set(provide, rec);
55
+ graph.set(provide, new Set());
56
+ }
57
+ return { tokens, defs, graph };
17
58
  }
18
59
  buildGraph() {
19
- // TODO: implement graph building
60
+ for (const token of this.tokens) {
61
+ const rec = this.defs.get(token);
62
+ const deps = (0, resource_utils_1.resourceDiscoveryDeps)(rec);
63
+ for (const d of deps) {
64
+ // Validate against hierarchical providers; throws early if missing
65
+ this.providers.get(d);
66
+ this.graph.get(token).add(d);
67
+ }
68
+ }
69
+ }
70
+ /* -------------------- Initialize: create ONE ResourceInstance per local resource -------------------- */
71
+ async initialize() {
72
+ // Instantiate each local resource once and store in this.instances
73
+ for (const token of this.tokens) {
74
+ const rec = this.defs.get(token);
75
+ // Single, authoritative instance per local resource
76
+ const ri = new resource_instance_1.ResourceInstance(rec, this.providers, this.owner);
77
+ this.instances.set(token, ri);
78
+ const lineage = this.owner ? [this.owner] : [];
79
+ const row = this.makeRow(token, ri, lineage, this);
80
+ this.localRows.push(row);
81
+ }
82
+ // Adopt resources from child app registries
83
+ const childAppRegistries = this.providers.getRegistries('AppRegistry');
84
+ childAppRegistries.forEach((appRegistry) => {
85
+ const apps = appRegistry.getApps();
86
+ for (const app of apps) {
87
+ const appResourceRegistries = app.providers.getRegistries('ResourceRegistry');
88
+ appResourceRegistries
89
+ .filter((r) => r.owner.kind === 'app')
90
+ .forEach((appResourceRegistry) => {
91
+ this.adoptFromChild(appResourceRegistry, appResourceRegistry.owner);
92
+ });
93
+ }
94
+ });
95
+ // Adopt resources from other child resource registries
96
+ const childResourceRegistries = this.providers.getRegistries('ResourceRegistry');
97
+ childResourceRegistries
98
+ .filter((r) => r !== this)
99
+ .forEach((resourceRegistry) => {
100
+ this.adoptFromChild(resourceRegistry, resourceRegistry.owner);
101
+ });
102
+ // Build effective indexes from (locals + already adopted children)
103
+ this.reindex();
104
+ this.bump('reset');
105
+ // Register resource flows with the scope
106
+ const scope = this.providers.getActiveScope();
107
+ await scope.registryFlows(read_resource_flow_1.default, resources_list_flow_1.default, resource_templates_list_flow_1.default, subscribe_resource_flow_1.default, unsubscribe_resource_flow_1.default);
108
+ }
109
+ /* -------------------- Adoption: reference child instances (no cloning) -------------------- */
110
+ /**
111
+ * Adopt resources from a child registry. Parent runs after children are ready.
112
+ * We *reference* the child's resource instances; no duplicates are created.
113
+ */
114
+ adoptFromChild(child, _childOwner) {
115
+ if (this.children.has(child))
116
+ return;
117
+ const childRows = child.listAllIndexed();
118
+ const prepend = this.owner ? [this.owner] : [];
119
+ const adoptedRows = childRows.map((r) => this.relineage(r, prepend));
120
+ this.adopted.set(child, adoptedRows);
121
+ this.children.add(child);
122
+ // keep live if child changes
123
+ child.subscribe({ immediate: false }, () => {
124
+ const latest = child.listAllIndexed().map((r) => this.relineage(r, prepend));
125
+ this.adopted.set(child, latest);
126
+ this.reindex();
127
+ this.bump('reset');
128
+ });
129
+ this.reindex();
130
+ this.bump('reset');
20
131
  }
21
- initialize() {
22
- return Promise.resolve();
132
+ /* -------------------- Public API -------------------- */
133
+ /**
134
+ * Get all static resources (not templates)
135
+ */
136
+ getResources(includeHidden = false) {
137
+ const all = this.listAllIndexed();
138
+ return all
139
+ .filter((r) => !r.isTemplate)
140
+ .filter((r) => {
141
+ const meta = r.instance.metadata;
142
+ const hidden = 'hideFromDiscovery' in meta && meta.hideFromDiscovery === true;
143
+ return !hidden || includeHidden;
144
+ })
145
+ .map((r) => r.instance);
23
146
  }
24
- getResources() {
25
- return [];
147
+ /**
148
+ * Get all resource templates
149
+ */
150
+ getResourceTemplates() {
151
+ const all = this.listAllIndexed();
152
+ return all.filter((r) => r.isTemplate).map((r) => r.instance);
26
153
  }
154
+ /**
155
+ * Get inline resources (local only)
156
+ */
27
157
  getInlineResources() {
28
- throw new Error('Method not implemented.');
158
+ return [...this.instances.values()];
159
+ }
160
+ /**
161
+ * Find a resource by exact URI match
162
+ */
163
+ findByUri(uri) {
164
+ const row = this.byUri.get(uri);
165
+ return row?.instance;
166
+ }
167
+ /**
168
+ * Match a URI against template resources and extract parameters
169
+ */
170
+ matchTemplateByUri(uri) {
171
+ // Try each template resource
172
+ for (const row of this.listAllIndexed()) {
173
+ if (!row.isTemplate)
174
+ continue;
175
+ const match = row.instance.matchUri(uri);
176
+ if (match.matches) {
177
+ return { instance: row.instance, params: match.params };
178
+ }
179
+ }
180
+ return undefined;
181
+ }
182
+ /**
183
+ * Find a resource by URI - tries exact match first, then template matching
184
+ */
185
+ findResourceForUri(uri) {
186
+ // Try exact URI match first
187
+ const exact = this.findByUri(uri);
188
+ if (exact) {
189
+ return { instance: exact, params: {} };
190
+ }
191
+ // Try template matching
192
+ return this.matchTemplateByUri(uri);
193
+ }
194
+ /** Internal snapshot of effective indexed rows (locals + adopted). */
195
+ listAllIndexed() {
196
+ return [...this.localRows, ...[...this.adopted.values()].flat()];
197
+ }
198
+ /** List all instances (locals + adopted). */
199
+ listAllInstances() {
200
+ return this.listAllIndexed().map((r) => r.instance);
201
+ }
202
+ /** List instances by owner path (e.g. "app:Portal/plugin:Okta") */
203
+ listByOwner(ownerPath) {
204
+ return (this.byOwner.get(ownerPath) ?? []).map((r) => r.instance);
205
+ }
206
+ /* -------------------- Indexing & lookups -------------------- */
207
+ reindex() {
208
+ const effective = this.listAllIndexed();
209
+ this.byQualifiedId.clear();
210
+ this.byName.clear();
211
+ this.byUri.clear();
212
+ this.byUriTemplate.clear();
213
+ this.byOwnerAndName.clear();
214
+ this.byOwner.clear();
215
+ for (const r of effective) {
216
+ this.byQualifiedId.set(r.qualifiedId, r);
217
+ const listByName = this.byName.get(r.baseName) ?? [];
218
+ listByName.push(r);
219
+ this.byName.set(r.baseName, listByName);
220
+ const byOwnerKey = this.byOwner.get(r.ownerKey) ?? [];
221
+ byOwnerKey.push(r);
222
+ this.byOwner.set(r.ownerKey, byOwnerKey);
223
+ const on = `${r.ownerKey}:${r.baseName}`;
224
+ if (!this.byOwnerAndName.has(on))
225
+ this.byOwnerAndName.set(on, r);
226
+ // Index by URI or URI template
227
+ if (r.isTemplate && r.uriTemplate) {
228
+ this.byUriTemplate.set(r.uriTemplate, r);
229
+ }
230
+ else if (r.uri) {
231
+ this.byUri.set(r.uri, r);
232
+ }
233
+ }
234
+ }
235
+ /* -------------------- Conflict-aware exported names -------------------- */
236
+ /**
237
+ * Produce unique, MCP-valid exported names.
238
+ */
239
+ exportResolvedNames(opts) {
240
+ const cfg = { ...resource_types_1.DEFAULT_RESOURCE_EXPORT_OPTS, ...(opts ?? {}) };
241
+ const rows = this.listAllIndexed().map((r) => {
242
+ const base = (0, resource_utils_1.normalizeSegment)(r.baseName, cfg.case);
243
+ const isLocal = r.source === this;
244
+ const provider = (0, resource_utils_1.normalizeProviderId)(this.providerIdOf(r.instance), cfg.case);
245
+ const ownerPath = (0, resource_utils_1.normalizeOwnerPath)(r.ownerKey, cfg.case);
246
+ return { base, row: r, isLocal, provider, ownerPath };
247
+ });
248
+ // group by standardized base
249
+ const byBase = new Map();
250
+ for (const r of rows) {
251
+ const list = byBase.get(r.base) ?? [];
252
+ list.push(r);
253
+ byBase.set(r.base, list);
254
+ }
255
+ const out = new Map();
256
+ for (const [base, group] of byBase.entries()) {
257
+ if (group.length === 1) {
258
+ const g = group[0];
259
+ out.set((0, resource_utils_1.ensureMaxLen)(base, cfg.maxLen), g.row.instance);
260
+ continue;
261
+ }
262
+ const locals = group.filter((g) => g.isLocal);
263
+ const children = group.filter((g) => !g.isLocal);
264
+ if (cfg.prefixChildrenOnConflict && locals.length > 0) {
265
+ // Locals
266
+ if (locals.length === 1) {
267
+ const localName = (0, resource_utils_1.ensureMaxLen)(base, cfg.maxLen);
268
+ out.set(disambiguate(localName, out, cfg), locals[0].row.instance);
269
+ }
270
+ else {
271
+ for (const l of locals) {
272
+ const pref = (0, resource_utils_1.normalizeOwnerPath)(l.ownerPath, cfg.case);
273
+ const name = (0, resource_utils_1.ensureMaxLen)(`${pref}${(0, resource_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
274
+ out.set(disambiguate(name, out, cfg), l.row.instance);
275
+ }
276
+ }
277
+ // Children
278
+ for (const c of children) {
279
+ const pre = cfg.prefixSource === 'provider' ? c.provider ?? c.ownerPath : c.ownerPath;
280
+ const name = (0, resource_utils_1.ensureMaxLen)(`${pre}${(0, resource_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
281
+ out.set(disambiguate(name, out, cfg), c.row.instance);
282
+ }
283
+ }
284
+ else {
285
+ // Prefix everyone by source
286
+ for (const r of group) {
287
+ const pre = cfg.prefixSource === 'provider' ? r.provider ?? r.ownerPath : r.ownerPath;
288
+ const name = (0, resource_utils_1.ensureMaxLen)(`${pre}${(0, resource_utils_1.sepFor)(cfg.case)}${base}`, cfg.maxLen);
289
+ out.set(disambiguate(name, out, cfg), r.row.instance);
290
+ }
291
+ }
292
+ }
293
+ return [...out.entries()].sort((a, b) => a[0].localeCompare(b[0])).map(([name, instance]) => ({ name, instance }));
294
+ function disambiguate(candidate, pool, cfg) {
295
+ if (!pool.has(candidate))
296
+ return candidate;
297
+ const maxAttempts = 10000;
298
+ let n = 2;
299
+ while (n <= maxAttempts) {
300
+ const withN = (0, resource_utils_1.ensureMaxLen)(`${candidate}${(0, resource_utils_1.sepFor)(cfg.case)}${n}`, cfg.maxLen);
301
+ if (!pool.has(withN))
302
+ return withN;
303
+ n++;
304
+ }
305
+ throw new Error(`Failed to disambiguate name "${candidate}" after ${maxAttempts} attempts`);
306
+ }
307
+ }
308
+ /** Lookup by the exported (resolved) name. */
309
+ getExported(name, opts) {
310
+ const pairs = this.exportResolvedNames(opts);
311
+ return pairs.find((p) => p.name === name)?.instance;
312
+ }
313
+ /* -------------------- Subscriptions -------------------- */
314
+ subscribe(opts, cb) {
315
+ const filter = opts.filter ?? (() => true);
316
+ if (opts.immediate) {
317
+ cb({
318
+ kind: 'reset',
319
+ changeScope: 'global',
320
+ version: this.version,
321
+ snapshot: this.listAllInstances().filter(filter),
322
+ });
323
+ }
324
+ return this.emitter.on((e) => cb({ ...e, snapshot: this.listAllInstances().filter(filter) }));
325
+ }
326
+ bump(kind) {
327
+ const version = ++this.version;
328
+ this.emitter.emit({ kind, changeScope: 'global', version, snapshot: this.listAllInstances() });
329
+ }
330
+ /* -------------------- Helpers -------------------- */
331
+ /** Build an IndexedResource row */
332
+ makeRow(token, instance, lineage, source) {
333
+ const ownerKey = (0, resource_utils_1.ownerKeyOf)(lineage);
334
+ const baseName = instance.name;
335
+ const qualifiedName = (0, resource_utils_1.qualifiedNameOf)(lineage, baseName);
336
+ const qualifiedId = `${ownerKey}:${(0, utils_1.tokenName)(token)}`;
337
+ return {
338
+ token,
339
+ instance,
340
+ baseName,
341
+ uri: instance.uri,
342
+ uriTemplate: instance.uriTemplate,
343
+ isTemplate: instance.isTemplate,
344
+ lineage,
345
+ ownerKey,
346
+ qualifiedName,
347
+ qualifiedId,
348
+ source,
349
+ };
350
+ }
351
+ /** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */
352
+ relineage(row, prepend) {
353
+ const merged = [...prepend, ...row.lineage];
354
+ const lineage = dedupLineage(merged);
355
+ const ownerKey = (0, resource_utils_1.ownerKeyOf)(lineage);
356
+ const qualifiedName = (0, resource_utils_1.qualifiedNameOf)(lineage, row.baseName);
357
+ const qualifiedId = `${ownerKey}:${(0, utils_1.tokenName)(row.token)}`;
358
+ return {
359
+ token: row.token,
360
+ instance: row.instance, // REFERENCE the same instance
361
+ baseName: row.baseName,
362
+ uri: row.uri,
363
+ uriTemplate: row.uriTemplate,
364
+ isTemplate: row.isTemplate,
365
+ lineage,
366
+ ownerKey,
367
+ qualifiedName,
368
+ qualifiedId,
369
+ source: row.source, // keep original source (who constructed instance)
370
+ };
371
+ }
372
+ /** Best-effort provider id used for prefixing. */
373
+ providerIdOf(inst) {
374
+ try {
375
+ const meta = inst.getMetadata?.();
376
+ if (!meta || typeof meta !== 'object')
377
+ return undefined;
378
+ const metaObj = meta;
379
+ const maybe = metaObj['providerId'] ?? metaObj['provider'] ?? metaObj['ownerId'];
380
+ if (typeof maybe === 'string' && maybe.length > 0)
381
+ return maybe;
382
+ const cls = metaObj['cls'];
383
+ if (cls && typeof cls === 'function') {
384
+ const id = (0, utils_1.getMetadata)('id', cls);
385
+ if (typeof id === 'string' && id.length > 0)
386
+ return id;
387
+ if ('name' in cls && typeof cls.name === 'string')
388
+ return cls.name;
389
+ }
390
+ }
391
+ catch {
392
+ /* ignore */
393
+ }
394
+ return undefined;
395
+ }
396
+ /** True if this registry (or adopted children) has any resources. */
397
+ hasAny() {
398
+ return this.listAllIndexed().length > 0 || this.tokens.size > 0;
399
+ }
400
+ /**
401
+ * Get the MCP capabilities for resources.
402
+ * These are reported to clients during initialization.
403
+ */
404
+ getCapabilities() {
405
+ return this.hasAny()
406
+ ? {
407
+ resources: {
408
+ // Subscription support per MCP 2025-11-25 spec
409
+ subscribe: true,
410
+ // List change notifications are only supported when resources are registered
411
+ listChanged: true,
412
+ },
413
+ }
414
+ : {};
415
+ }
416
+ /**
417
+ * Dynamically register a resource or resource template at runtime.
418
+ *
419
+ * Used for system resources like the ui:// template that should be
420
+ * registered when tools with UI configs exist.
421
+ *
422
+ * @param resourceDef - Resource class, function, or template to register
423
+ */
424
+ registerDynamicResource(resourceDef) {
425
+ const isTemplate = (0, resource_utils_1.isResourceTemplate)(resourceDef);
426
+ const rec = isTemplate ? (0, resource_utils_1.normalizeResourceTemplate)(resourceDef) : (0, resource_utils_1.normalizeResource)(resourceDef);
427
+ const token = rec.provide;
428
+ // Skip if already registered
429
+ if (this.tokens.has(token)) {
430
+ return;
431
+ }
432
+ // Add to registry structures
433
+ this.tokens.add(token);
434
+ this.defs.set(token, rec);
435
+ // Build dependency graph (same pattern as buildGraph)
436
+ const deps = (0, resource_utils_1.resourceDiscoveryDeps)(rec);
437
+ const depSet = new Set();
438
+ for (const d of deps) {
439
+ // Validate against hierarchical providers; throws early if missing
440
+ this.providers.get(d);
441
+ depSet.add(d);
442
+ }
443
+ this.graph.set(token, depSet);
444
+ // Create instance
445
+ const ri = new resource_instance_1.ResourceInstance(rec, this.providers, this.owner);
446
+ this.instances.set(token, ri);
447
+ // Add to local rows with lineage
448
+ const lineage = this.owner ? [this.owner] : [];
449
+ const row = this.makeRow(token, ri, lineage, this);
450
+ this.localRows.push(row);
451
+ // Rebuild indexes and emit change event
452
+ this.reindex();
453
+ this.bump('reset');
29
454
  }
30
455
  }
31
456
  exports.default = ResourceRegistry;
457
+ /* -------------------- lineage utility -------------------- */
458
+ /** Remove only adjacent duplicates like [adapter:x, adapter:x] → [adapter:x] */
459
+ function dedupLineage(l) {
460
+ const out = [];
461
+ for (const o of l) {
462
+ const last = out[out.length - 1];
463
+ if (!last || last.kind !== o.kind || last.id !== o.id)
464
+ out.push(o);
465
+ }
466
+ return out;
467
+ }
32
468
  //# sourceMappingURL=resource.registry.js.map