@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
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"resource.registry.js","sourceRoot":"","sources":["../../../src/resource/resource.registry.ts"],"names":[],"mappings":";;AAQA,0CAA+C;AAG/C,MAAqB,gBAAiB,SAAQ,2BAA+D;IAG3G,YAAY,SAA2B,EAAE,IAAgB;QACvD,KAAK,CAAC,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAGS,QAAQ,CAAC,IAAoB;QACrC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAS,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QAE3C,OAAO;YACL,MAAM;YACN,IAAI;YACJ,KAAK;SACN,CAAC;IACJ,CAAC;IAED,UAAU;QACR,iCAAiC;IACnC,CAAC;IAES,UAAU;QAClB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAGD,YAAY;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,kBAAkB;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;CACF;AApCD,mCAoCC","sourcesContent":["import ProviderRegistry from '../provider/provider.registry';\nimport {\n ResourceEntry, ResourceRecord,\n ResourceRegistryInterface,\n ResourceType,\n Token,\n ToolType,\n} from '../common';\nimport { RegistryAbstract } from '../regsitry';\n\n\nexport default class ResourceRegistry extends RegistryAbstract<ResourceEntry, ResourceRecord, ResourceType[]>\n implements ResourceRegistryInterface {\n\n constructor(providers: ProviderRegistry, list: ToolType[]) {\n super('ResourceRegistry', providers, list);\n }\n\n\n protected buildMap(list: ResourceType[]) {\n const tokens = new Set<Token>();\n const defs = new Map<Token, ResourceRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n return {\n tokens,\n defs,\n graph,\n };\n }\n\n buildGraph() {\n // TODO: implement graph building\n }\n\n protected initialize() {\n return Promise.resolve();\n }\n\n\n getResources() {\n return [];\n }\n\n getInlineResources(): ResourceEntry<any, any>[] {\n throw new Error('Method not implemented.');\n }\n}\n"]}
1
+ {"version":3,"file":"resource.registry.js","sourceRoot":"","sources":["../../../src/resource/resource.registry.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/sdk/src/resource/resource.registry.ts\n\nimport {\n EntryLineage,\n EntryOwnerRef,\n Token,\n ResourceEntry,\n ResourceRecord,\n ResourceTemplateRecord,\n ResourceRegistryInterface,\n ResourceType,\n} from '../common';\nimport { getMetadata, tokenName } from '../utils';\nimport { ResourceChangeEvent, ResourceEmitter } from './resource.events';\nimport ProviderRegistry from '../provider/provider.registry';\nimport {\n ensureMaxLen,\n normalizeOwnerPath,\n normalizeProviderId,\n normalizeSegment,\n normalizeResource,\n normalizeResourceTemplate,\n isResourceTemplate,\n ownerKeyOf,\n qualifiedNameOf,\n sepFor,\n resourceDiscoveryDeps,\n} from './resource.utils';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { ResourceInstance } from './resource.instance';\nimport { DEFAULT_RESOURCE_EXPORT_OPTS, ResourceExportOptions, IndexedResource } from './resource.types';\nimport ReadResourceFlow from './flows/read-resource.flow';\nimport ResourcesListFlow from './flows/resources-list.flow';\nimport ResourceTemplatesListFlow from './flows/resource-templates-list.flow';\nimport SubscribeResourceFlow from './flows/subscribe-resource.flow';\nimport UnsubscribeResourceFlow from './flows/unsubscribe-resource.flow';\nimport type { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';\n\nexport default class ResourceRegistry\n extends RegistryAbstract<\n ResourceInstance, // instances map holds ResourceInstance\n ResourceRecord | ResourceTemplateRecord,\n ResourceType[]\n >\n implements ResourceRegistryInterface\n{\n /** Who owns this registry (used for provenance). */\n owner: EntryOwnerRef;\n\n /** Resources truly owned/constructed by THIS registry (with lineage applied) */\n private localRows: IndexedResource[] = [];\n\n /** Adopted resource rows from each child registry (references to the same instances) */\n private adopted = new Map<ResourceRegistry, IndexedResource[]>();\n\n /** Children registries that we track */\n private children = new Set<ResourceRegistry>();\n\n // ---- O(1) indexes over EFFECTIVE set (local + adopted) ----\n private byQualifiedId = new Map<string, IndexedResource>(); // qualifiedId -> row\n private byName = new Map<string, IndexedResource[]>(); // baseName -> rows\n private byUri = new Map<string, IndexedResource>(); // uri -> row (static resources)\n private byUriTemplate = new Map<string, IndexedResource>(); // uriTemplate -> row (templates)\n private byOwnerAndName = new Map<string, IndexedResource>(); // \"ownerKey:name\" -> row\n private byOwner = new Map<string, IndexedResource[]>(); // ownerKey -> rows\n\n // version + emitter\n private version = 0;\n private emitter = new ResourceEmitter();\n\n constructor(providers: ProviderRegistry, list: ResourceType[], owner: EntryOwnerRef) {\n // disable auto so subclass fields initialize first\n super('ResourceRegistry', providers, list, false);\n this.owner = owner;\n\n // now it's safe to run the lifecycle\n this.buildGraph();\n this.ready = this.initialize();\n }\n\n /* -------------------- Build-time: defs + dep checks -------------------- */\n\n protected override buildMap(list: ResourceType[]): RegistryBuildMapResult<ResourceRecord | ResourceTemplateRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, ResourceRecord | ResourceTemplateRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n // Determine if it's a template or static resource\n const isTemplate = isResourceTemplate(raw);\n const rec = isTemplate ? normalizeResourceTemplate(raw) : normalizeResource(raw);\n\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = resourceDiscoveryDeps(rec);\n\n for (const d of deps) {\n // Validate against hierarchical providers; throws early if missing\n this.providers.get(d);\n this.graph.get(token)!.add(d);\n }\n }\n }\n\n /* -------------------- Initialize: create ONE ResourceInstance per local resource -------------------- */\n\n protected override async initialize(): Promise<void> {\n // Instantiate each local resource once and store in this.instances\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n\n // Single, authoritative instance per local resource\n const ri = new ResourceInstance(rec, this.providers, this.owner);\n this.instances.set(token as Token<ResourceInstance>, ri);\n\n const lineage: EntryLineage = this.owner ? [this.owner] : [];\n const row = this.makeRow(token, ri, lineage, this);\n this.localRows.push(row);\n }\n\n // Adopt resources from child app registries\n const childAppRegistries = this.providers.getRegistries('AppRegistry');\n childAppRegistries.forEach((appRegistry) => {\n const apps = appRegistry.getApps();\n for (const app of apps) {\n const appResourceRegistries = app.providers.getRegistries('ResourceRegistry');\n appResourceRegistries\n .filter((r) => r.owner.kind === 'app')\n .forEach((appResourceRegistry) => {\n this.adoptFromChild(appResourceRegistry as ResourceRegistry, appResourceRegistry.owner);\n });\n }\n });\n\n // Adopt resources from other child resource registries\n const childResourceRegistries = this.providers.getRegistries('ResourceRegistry');\n childResourceRegistries\n .filter((r) => r !== this)\n .forEach((resourceRegistry) => {\n this.adoptFromChild(resourceRegistry as ResourceRegistry, resourceRegistry.owner);\n });\n\n // Build effective indexes from (locals + already adopted children)\n this.reindex();\n this.bump('reset');\n\n // Register resource flows with the scope\n const scope = this.providers.getActiveScope();\n await scope.registryFlows(\n ReadResourceFlow,\n ResourcesListFlow,\n ResourceTemplatesListFlow,\n SubscribeResourceFlow,\n UnsubscribeResourceFlow,\n );\n }\n\n /* -------------------- Adoption: reference child instances (no cloning) -------------------- */\n\n /**\n * Adopt resources from a child registry. Parent runs after children are ready.\n * We *reference* the child's resource instances; no duplicates are created.\n */\n adoptFromChild(child: ResourceRegistry, _childOwner: EntryOwnerRef): void {\n if (this.children.has(child)) return;\n\n const childRows = child.listAllIndexed();\n const prepend: EntryLineage = this.owner ? [this.owner] : [];\n\n const adoptedRows = childRows.map((r) => this.relineage(r, prepend));\n\n this.adopted.set(child, adoptedRows);\n this.children.add(child);\n\n // keep live if child changes\n child.subscribe({ immediate: false }, () => {\n const latest = child.listAllIndexed().map((r) => this.relineage(r, prepend));\n this.adopted.set(child, latest);\n this.reindex();\n this.bump('reset');\n });\n\n this.reindex();\n this.bump('reset');\n }\n\n /* -------------------- Public API -------------------- */\n\n /**\n * Get all static resources (not templates)\n */\n getResources(includeHidden = false): ResourceEntry[] {\n const all = this.listAllIndexed();\n return all\n .filter((r) => !r.isTemplate)\n .filter((r) => {\n const meta = r.instance.metadata;\n const hidden = 'hideFromDiscovery' in meta && meta.hideFromDiscovery === true;\n return !hidden || includeHidden;\n })\n .map((r) => r.instance);\n }\n\n /**\n * Get all resource templates\n */\n getResourceTemplates(): ResourceEntry[] {\n const all = this.listAllIndexed();\n return all.filter((r) => r.isTemplate).map((r) => r.instance);\n }\n\n /**\n * Get inline resources (local only)\n */\n getInlineResources(): ResourceEntry[] {\n return [...this.instances.values()];\n }\n\n /**\n * Find a resource by exact URI match\n */\n findByUri(uri: string): ResourceInstance | undefined {\n const row = this.byUri.get(uri);\n return row?.instance;\n }\n\n /**\n * Match a URI against template resources and extract parameters\n */\n matchTemplateByUri(uri: string): { instance: ResourceInstance; params: Record<string, string> } | undefined {\n // Try each template resource\n for (const row of this.listAllIndexed()) {\n if (!row.isTemplate) continue;\n\n const match = row.instance.matchUri(uri);\n if (match.matches) {\n return { instance: row.instance, params: match.params };\n }\n }\n return undefined;\n }\n\n /**\n * Find a resource by URI - tries exact match first, then template matching\n */\n findResourceForUri(uri: string): { instance: ResourceInstance; params: Record<string, string> } | undefined {\n // Try exact URI match first\n const exact = this.findByUri(uri);\n if (exact) {\n return { instance: exact, params: {} };\n }\n\n // Try template matching\n return this.matchTemplateByUri(uri);\n }\n\n /** Internal snapshot of effective indexed rows (locals + adopted). */\n listAllIndexed(): IndexedResource[] {\n return [...this.localRows, ...[...this.adopted.values()].flat()];\n }\n\n /** List all instances (locals + adopted). */\n listAllInstances(): readonly ResourceInstance[] {\n return this.listAllIndexed().map((r) => r.instance);\n }\n\n /** List instances by owner path (e.g. \"app:Portal/plugin:Okta\") */\n listByOwner(ownerPath: string): readonly ResourceInstance[] {\n return (this.byOwner.get(ownerPath) ?? []).map((r) => r.instance);\n }\n\n /* -------------------- Indexing & lookups -------------------- */\n\n private reindex() {\n const effective = this.listAllIndexed();\n\n this.byQualifiedId.clear();\n this.byName.clear();\n this.byUri.clear();\n this.byUriTemplate.clear();\n this.byOwnerAndName.clear();\n this.byOwner.clear();\n\n for (const r of effective) {\n this.byQualifiedId.set(r.qualifiedId, r);\n\n const listByName = this.byName.get(r.baseName) ?? [];\n listByName.push(r);\n this.byName.set(r.baseName, listByName);\n\n const byOwnerKey = this.byOwner.get(r.ownerKey) ?? [];\n byOwnerKey.push(r);\n this.byOwner.set(r.ownerKey, byOwnerKey);\n\n const on = `${r.ownerKey}:${r.baseName}`;\n if (!this.byOwnerAndName.has(on)) this.byOwnerAndName.set(on, r);\n\n // Index by URI or URI template\n if (r.isTemplate && r.uriTemplate) {\n this.byUriTemplate.set(r.uriTemplate, r);\n } else if (r.uri) {\n this.byUri.set(r.uri, r);\n }\n }\n }\n\n /* -------------------- Conflict-aware exported names -------------------- */\n\n /**\n * Produce unique, MCP-valid exported names.\n */\n exportResolvedNames(opts?: ResourceExportOptions): Array<{ name: string; instance: ResourceInstance }> {\n const cfg = { ...DEFAULT_RESOURCE_EXPORT_OPTS, ...(opts ?? {}) };\n\n const rows = this.listAllIndexed().map((r) => {\n const base = normalizeSegment(r.baseName, cfg.case);\n const isLocal = r.source === this;\n const provider = normalizeProviderId(this.providerIdOf(r.instance), cfg.case);\n const ownerPath = normalizeOwnerPath(r.ownerKey, cfg.case);\n return { base, row: r, isLocal, provider, ownerPath };\n });\n\n // group by standardized base\n const byBase = new Map<string, typeof rows>();\n for (const r of rows) {\n const list = byBase.get(r.base) ?? [];\n list.push(r);\n byBase.set(r.base, list);\n }\n\n const out = new Map<string, ResourceInstance>();\n\n for (const [base, group] of byBase.entries()) {\n if (group.length === 1) {\n const g = group[0];\n out.set(ensureMaxLen(base, cfg.maxLen), g.row.instance);\n continue;\n }\n\n const locals = group.filter((g) => g.isLocal);\n const children = group.filter((g) => !g.isLocal);\n\n if (cfg.prefixChildrenOnConflict && locals.length > 0) {\n // Locals\n if (locals.length === 1) {\n const localName = ensureMaxLen(base, cfg.maxLen);\n out.set(disambiguate(localName, out, cfg), locals[0].row.instance);\n } else {\n for (const l of locals) {\n const pref = normalizeOwnerPath(l.ownerPath, cfg.case);\n const name = ensureMaxLen(`${pref}${sepFor(cfg.case)}${base}`, cfg.maxLen);\n out.set(disambiguate(name, out, cfg), l.row.instance);\n }\n }\n\n // Children\n for (const c of children) {\n const pre = cfg.prefixSource === 'provider' ? c.provider ?? c.ownerPath : c.ownerPath;\n const name = ensureMaxLen(`${pre}${sepFor(cfg.case)}${base}`, cfg.maxLen);\n out.set(disambiguate(name, out, cfg), c.row.instance);\n }\n } else {\n // Prefix everyone by source\n for (const r of group) {\n const pre = cfg.prefixSource === 'provider' ? r.provider ?? r.ownerPath : r.ownerPath;\n const name = ensureMaxLen(`${pre}${sepFor(cfg.case)}${base}`, cfg.maxLen);\n out.set(disambiguate(name, out, cfg), r.row.instance);\n }\n }\n }\n\n return [...out.entries()].sort((a, b) => a[0].localeCompare(b[0])).map(([name, instance]) => ({ name, instance }));\n\n function disambiguate(candidate: string, pool: Map<string, any>, cfg: Required<ResourceExportOptions>): string {\n if (!pool.has(candidate)) return candidate;\n const maxAttempts = 10000;\n let n = 2;\n while (n <= maxAttempts) {\n const withN = ensureMaxLen(`${candidate}${sepFor(cfg.case)}${n}`, cfg.maxLen);\n if (!pool.has(withN)) return withN;\n n++;\n }\n throw new Error(`Failed to disambiguate name \"${candidate}\" after ${maxAttempts} attempts`);\n }\n }\n\n /** Lookup by the exported (resolved) name. */\n getExported(name: string, opts?: ResourceExportOptions): ResourceInstance | undefined {\n const pairs = this.exportResolvedNames(opts);\n return pairs.find((p) => p.name === name)?.instance;\n }\n\n /* -------------------- Subscriptions -------------------- */\n\n subscribe(\n opts: { immediate?: boolean; filter?: (i: ResourceInstance) => boolean },\n cb: (evt: ResourceChangeEvent) => void,\n ): () => void {\n const filter = opts.filter ?? (() => true);\n if (opts.immediate) {\n cb({\n kind: 'reset',\n changeScope: 'global',\n version: this.version,\n snapshot: this.listAllInstances().filter(filter),\n });\n }\n return this.emitter.on((e) => cb({ ...e, snapshot: this.listAllInstances().filter(filter) }));\n }\n\n private bump(kind: ResourceChangeEvent['kind']) {\n const version = ++this.version;\n this.emitter.emit({ kind, changeScope: 'global', version, snapshot: this.listAllInstances() });\n }\n\n /* -------------------- Helpers -------------------- */\n\n /** Build an IndexedResource row */\n private makeRow(\n token: Token,\n instance: ResourceInstance,\n lineage: EntryLineage,\n source: ResourceRegistry,\n ): IndexedResource {\n const ownerKey = ownerKeyOf(lineage);\n const baseName = instance.name;\n const qualifiedName = qualifiedNameOf(lineage, baseName);\n const qualifiedId = `${ownerKey}:${tokenName(token)}`;\n return {\n token,\n instance,\n baseName,\n uri: instance.uri,\n uriTemplate: instance.uriTemplate,\n isTemplate: instance.isTemplate,\n lineage,\n ownerKey,\n qualifiedName,\n qualifiedId,\n source,\n };\n }\n\n /** Clone a child row and prepend lineage (with adjacent de-dup to avoid double prefixes). */\n private relineage(row: IndexedResource, prepend: EntryLineage): IndexedResource {\n const merged = [...prepend, ...row.lineage];\n const lineage = dedupLineage(merged);\n\n const ownerKey = ownerKeyOf(lineage);\n const qualifiedName = qualifiedNameOf(lineage, row.baseName);\n const qualifiedId = `${ownerKey}:${tokenName(row.token)}`;\n return {\n token: row.token,\n instance: row.instance, // REFERENCE the same instance\n baseName: row.baseName,\n uri: row.uri,\n uriTemplate: row.uriTemplate,\n isTemplate: row.isTemplate,\n lineage,\n ownerKey,\n qualifiedName,\n qualifiedId,\n source: row.source, // keep original source (who constructed instance)\n };\n }\n\n /** Best-effort provider id used for prefixing. */\n private providerIdOf(inst: ResourceInstance): string | undefined {\n try {\n const meta: unknown = inst.getMetadata?.();\n if (!meta || typeof meta !== 'object') return undefined;\n\n const metaObj = meta as Record<string, unknown>;\n const maybe = metaObj['providerId'] ?? metaObj['provider'] ?? metaObj['ownerId'];\n if (typeof maybe === 'string' && maybe.length > 0) return maybe;\n\n const cls = metaObj['cls'];\n if (cls && typeof cls === 'function') {\n const id = getMetadata('id', cls);\n if (typeof id === 'string' && id.length > 0) return id;\n if ('name' in cls && typeof cls.name === 'string') return cls.name;\n }\n } catch {\n /* ignore */\n }\n return undefined;\n }\n\n /** True if this registry (or adopted children) has any resources. */\n hasAny(): boolean {\n return this.listAllIndexed().length > 0 || this.tokens.size > 0;\n }\n\n /**\n * Get the MCP capabilities for resources.\n * These are reported to clients during initialization.\n */\n getCapabilities(): Partial<ServerCapabilities> {\n return this.hasAny()\n ? {\n resources: {\n // Subscription support per MCP 2025-11-25 spec\n subscribe: true,\n // List change notifications are only supported when resources are registered\n listChanged: true,\n },\n }\n : {};\n }\n\n /**\n * Dynamically register a resource or resource template at runtime.\n *\n * Used for system resources like the ui:// template that should be\n * registered when tools with UI configs exist.\n *\n * @param resourceDef - Resource class, function, or template to register\n */\n registerDynamicResource(resourceDef: ResourceType): void {\n const isTemplate = isResourceTemplate(resourceDef);\n const rec = isTemplate ? normalizeResourceTemplate(resourceDef) : normalizeResource(resourceDef);\n const token = rec.provide;\n\n // Skip if already registered\n if (this.tokens.has(token)) {\n return;\n }\n\n // Add to registry structures\n this.tokens.add(token);\n this.defs.set(token, rec);\n\n // Build dependency graph (same pattern as buildGraph)\n const deps = resourceDiscoveryDeps(rec);\n const depSet = new Set<Token>();\n for (const d of deps) {\n // Validate against hierarchical providers; throws early if missing\n this.providers.get(d);\n depSet.add(d);\n }\n this.graph.set(token, depSet);\n\n // Create instance\n const ri = new ResourceInstance(rec, this.providers, this.owner);\n this.instances.set(token as Token<ResourceInstance>, ri);\n\n // Add to local rows with lineage\n const lineage: EntryLineage = this.owner ? [this.owner] : [];\n const row = this.makeRow(token, ri, lineage, this);\n this.localRows.push(row);\n\n // Rebuild indexes and emit change event\n this.reindex();\n this.bump('reset');\n }\n}\n\n/* -------------------- lineage utility -------------------- */\n\n/** Remove only adjacent duplicates like [adapter:x, adapter:x] → [adapter:x] */\nfunction dedupLineage(l: EntryLineage): EntryLineage {\n const out: EntryLineage = [];\n for (const o of l) {\n const last = out[out.length - 1];\n if (!last || last.kind !== o.kind || last.id !== o.id) out.push(o);\n }\n return out;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import { EntryLineage, Token, Type, FuncType } from '../common';
2
+ import { ResourceInstance } from './resource.instance';
3
+ import ResourceRegistry from './resource.registry';
4
+ import type { NameCase } from '../utils/naming.utils';
5
+ export interface ResourceTemplateInterface<In = any, Out = any> {
6
+ execute(uri: string, params: Record<string, string>, context: any): Promise<Out>;
7
+ }
8
+ export type ResourceTemplateType<In = any, Out = any> = Type<ResourceTemplateInterface<In, Out>> | FuncType<ResourceTemplateInterface<In, Out>>;
9
+ /** Internal augmented row: instance + provenance + token */
10
+ export type IndexedResource = {
11
+ token: Token;
12
+ instance: ResourceInstance;
13
+ /** base resource name from metadata (unmodified) */
14
+ baseName: string;
15
+ /** URI for static resources */
16
+ uri?: string;
17
+ /** URI template for template resources */
18
+ uriTemplate?: string;
19
+ /** Whether this is a template resource */
20
+ isTemplate: boolean;
21
+ /** lineage & qualified info */
22
+ lineage: EntryLineage;
23
+ ownerKey: string;
24
+ qualifiedName: string;
25
+ qualifiedId: string;
26
+ /** which registry constructed the instance (the "owner" registry) */
27
+ source: ResourceRegistry;
28
+ };
29
+ export type ResourceExportOptions = {
30
+ case?: NameCase;
31
+ maxLen?: number;
32
+ prefixChildrenOnConflict?: boolean;
33
+ prefixSource?: 'provider' | 'owner';
34
+ };
35
+ export declare const DEFAULT_RESOURCE_EXPORT_OPTS: Required<ResourceExportOptions>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // file: libs/sdk/src/resource/resource.types.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULT_RESOURCE_EXPORT_OPTS = void 0;
5
+ exports.DEFAULT_RESOURCE_EXPORT_OPTS = {
6
+ case: 'snake',
7
+ maxLen: 64,
8
+ prefixChildrenOnConflict: true,
9
+ prefixSource: 'provider',
10
+ };
11
+ //# sourceMappingURL=resource.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.types.js","sourceRoot":"","sources":["../../../src/resource/resource.types.ts"],"names":[],"mappings":";AAAA,gDAAgD;;;AAuDnC,QAAA,4BAA4B,GAAoC;IAC3E,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,EAAE;IACV,wBAAwB,EAAE,IAAI;IAC9B,YAAY,EAAE,UAAU;CACzB,CAAC","sourcesContent":["// file: libs/sdk/src/resource/resource.types.ts\n\nimport { EntryLineage, Token, Type, FuncType } from '../common';\nimport { ResourceInstance } from './resource.instance';\nimport ResourceRegistry from './resource.registry';\nimport type { NameCase } from '../utils/naming.utils';\n\n// ============================================================================\n// Resource Template Type (interface equivalent)\n// ============================================================================\n\nexport interface ResourceTemplateInterface<In = any, Out = any> {\n execute(uri: string, params: Record<string, string>, context: any): Promise<Out>;\n}\n\nexport type ResourceTemplateType<In = any, Out = any> =\n | Type<ResourceTemplateInterface<In, Out>>\n | FuncType<ResourceTemplateInterface<In, Out>>;\n\n// ============================================================================\n// Indexed Resource (for registry internal use)\n// ============================================================================\n\n/** Internal augmented row: instance + provenance + token */\nexport type IndexedResource = {\n token: Token;\n instance: ResourceInstance;\n /** base resource name from metadata (unmodified) */\n baseName: string;\n /** URI for static resources */\n uri?: string;\n /** URI template for template resources */\n uriTemplate?: string;\n /** Whether this is a template resource */\n isTemplate: boolean;\n /** lineage & qualified info */\n lineage: EntryLineage;\n ownerKey: string; // \"app:Portal/plugin:Okta\"\n qualifiedName: string; // \"app:Portal/plugin:Okta:resourceName\"\n qualifiedId: string; // \"app:Portal/plugin:Okta:tokenName(<token>)\"\n /** which registry constructed the instance (the \"owner\" registry) */\n source: ResourceRegistry;\n};\n\n// ============================================================================\n// Export Name Options\n// ============================================================================\n\nexport type ResourceExportOptions = {\n case?: NameCase; // default 'snake'\n maxLen?: number; // default 64\n prefixChildrenOnConflict?: boolean; // default true\n prefixSource?: 'provider' | 'owner'; // default 'provider'\n};\n\nexport const DEFAULT_RESOURCE_EXPORT_OPTS: Required<ResourceExportOptions> = {\n case: 'snake',\n maxLen: 64,\n prefixChildrenOnConflict: true,\n prefixSource: 'provider',\n};\n"]}
@@ -0,0 +1,30 @@
1
+ import { ResourceMetadata, ResourceTemplateMetadata, ResourceType, Token, ResourceRecord, ResourceTemplateRecord } from '../common';
2
+ import { ResourceTemplateType } from './resource.types';
3
+ export { splitWords, toCase, sepFor, normalizeSegment, normalizeProviderId, normalizeOwnerPath, shortHash, ensureMaxLen, } from '../utils/naming.utils';
4
+ export { ownerKeyOf, qualifiedNameOf } from '../utils/lineage.utils';
5
+ export { parseUriTemplate, matchUriTemplate, expandUriTemplate, extractTemplateParams, isUriTemplate, } from '../utils/uri-template.utils';
6
+ export { buildResourceContent as buildParsedResourceResult } from '../utils/content.utils';
7
+ /**
8
+ * Collect metadata from a class decorated with @FrontMcpResource
9
+ */
10
+ export declare function collectResourceMetadata(cls: ResourceType): ResourceMetadata;
11
+ /**
12
+ * Collect metadata from a class decorated with @FrontMcpResourceTemplate
13
+ */
14
+ export declare function collectResourceTemplateMetadata(cls: ResourceTemplateType): ResourceTemplateMetadata;
15
+ /**
16
+ * Normalize any resource input (class or function) to a ResourceRecord
17
+ */
18
+ export declare function normalizeResource(item: any): ResourceRecord;
19
+ /**
20
+ * Normalize any resource template input (class or function) to a ResourceTemplateRecord
21
+ */
22
+ export declare function normalizeResourceTemplate(item: any): ResourceTemplateRecord;
23
+ /**
24
+ * Determine if an item is a resource template (vs static resource)
25
+ */
26
+ export declare function isResourceTemplate(item: any): boolean;
27
+ /**
28
+ * Get dependency tokens for graph/cycle detection
29
+ */
30
+ export declare function resourceDiscoveryDeps(rec: ResourceRecord | ResourceTemplateRecord): Token[];