@frontmcp/sdk 0.4.1 → 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.
- package/README.md +30 -18
- package/package.json +20 -5
- package/src/app/app.registry.d.ts +3 -2
- package/src/app/app.registry.js +3 -1
- package/src/app/app.registry.js.map +1 -1
- package/src/app/instances/app.local.instance.js +2 -2
- package/src/app/instances/app.local.instance.js.map +1 -1
- package/src/auth/auth.registry.d.ts +34 -2
- package/src/auth/auth.registry.js +162 -24
- package/src/auth/auth.registry.js.map +1 -1
- package/src/auth/auth.utils.js +8 -9
- package/src/auth/auth.utils.js.map +1 -1
- package/src/auth/authorization/authorization.class.d.ts +125 -0
- package/src/auth/authorization/authorization.class.js +224 -0
- package/src/auth/authorization/authorization.class.js.map +1 -0
- package/src/auth/authorization/authorization.types.d.ts +300 -0
- package/src/auth/authorization/authorization.types.js +79 -0
- package/src/auth/authorization/authorization.types.js.map +1 -0
- package/src/auth/authorization/index.d.ts +5 -0
- package/src/auth/authorization/index.js +19 -0
- package/src/auth/authorization/index.js.map +1 -0
- package/src/auth/authorization/orchestrated.authorization.d.ts +242 -0
- package/src/auth/authorization/orchestrated.authorization.js +306 -0
- package/src/auth/authorization/orchestrated.authorization.js.map +1 -0
- package/src/auth/authorization/public.authorization.d.ts +91 -0
- package/src/auth/authorization/public.authorization.js +132 -0
- package/src/auth/authorization/public.authorization.js.map +1 -0
- package/src/auth/authorization/transparent.authorization.d.ts +130 -0
- package/src/auth/authorization/transparent.authorization.js +147 -0
- package/src/auth/authorization/transparent.authorization.js.map +1 -0
- package/src/auth/consent/consent.types.d.ts +111 -0
- package/src/auth/consent/consent.types.js +119 -0
- package/src/auth/consent/consent.types.js.map +1 -0
- package/src/auth/consent/index.d.ts +1 -0
- package/src/auth/consent/index.js +13 -0
- package/src/auth/consent/index.js.map +1 -0
- package/src/auth/detection/auth-provider-detection.d.ts +84 -0
- package/src/auth/detection/auth-provider-detection.js +230 -0
- package/src/auth/detection/auth-provider-detection.js.map +1 -0
- package/src/auth/detection/index.d.ts +1 -0
- package/src/auth/detection/index.js +15 -0
- package/src/auth/detection/index.js.map +1 -0
- package/src/auth/flows/auth.verify.flow.d.ts +110 -0
- package/src/auth/flows/auth.verify.flow.js +379 -0
- package/src/auth/flows/auth.verify.flow.js.map +1 -0
- package/src/auth/flows/oauth.authorize.flow.d.ts +118 -164
- package/src/auth/flows/oauth.authorize.flow.js +701 -33
- package/src/auth/flows/oauth.authorize.flow.js.map +1 -1
- package/src/auth/flows/oauth.callback.flow.d.ts +117 -0
- package/src/auth/flows/oauth.callback.flow.js +357 -0
- package/src/auth/flows/oauth.callback.flow.js.map +1 -0
- package/src/auth/flows/oauth.register.flow.d.ts +32 -125
- package/src/auth/flows/oauth.token.flow.d.ts +52 -154
- package/src/auth/flows/oauth.token.flow.js +193 -55
- package/src/auth/flows/oauth.token.flow.js.map +1 -1
- package/src/auth/flows/session.verify.flow.d.ts +66 -321
- package/src/auth/flows/session.verify.flow.js +107 -18
- package/src/auth/flows/session.verify.flow.js.map +1 -1
- package/src/auth/flows/well-known.jwks.flow.d.ts +34 -205
- package/src/auth/flows/well-known.jwks.flow.js +15 -8
- package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
- package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +48 -223
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js +2 -3
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +1 -1
- package/src/auth/flows/well-known.prm.flow.d.ts +19 -120
- package/src/auth/flows/well-known.prm.flow.js +3 -4
- package/src/auth/flows/well-known.prm.flow.js.map +1 -1
- package/src/auth/instances/instance.local-primary-auth.d.ts +91 -4
- package/src/auth/instances/instance.local-primary-auth.js +236 -6
- package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
- package/src/auth/instances/instance.remote-primary-auth.d.ts +4 -3
- package/src/auth/instances/instance.remote-primary-auth.js +2 -2
- package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
- package/src/auth/session/authorization-vault.d.ts +611 -0
- package/src/auth/session/authorization-vault.js +817 -0
- package/src/auth/session/authorization-vault.js.map +1 -0
- package/src/auth/session/authorization.store.d.ts +301 -0
- package/src/auth/session/authorization.store.js +323 -0
- package/src/auth/session/authorization.store.js.map +1 -0
- package/src/auth/session/encrypted-authorization-vault.d.ts +181 -0
- package/src/auth/session/encrypted-authorization-vault.js +493 -0
- package/src/auth/session/encrypted-authorization-vault.js.map +1 -0
- package/src/auth/session/index.d.ts +4 -4
- package/src/auth/session/index.js +11 -7
- package/src/auth/session/index.js.map +1 -1
- package/src/auth/session/session.schema.d.ts +1 -1
- package/src/auth/session/session.service.d.ts +1 -1
- package/src/auth/session/transport-session.manager.d.ts +101 -0
- package/src/auth/session/transport-session.manager.js +300 -0
- package/src/auth/session/transport-session.manager.js.map +1 -0
- package/src/auth/session/transport-session.types.d.ts +457 -0
- package/src/auth/session/transport-session.types.js +110 -0
- package/src/auth/session/transport-session.types.js.map +1 -0
- package/src/auth/session/utils/session-id.utils.d.ts +14 -2
- package/src/auth/session/utils/session-id.utils.js +68 -19
- package/src/auth/session/utils/session-id.utils.js.map +1 -1
- package/src/auth/session/vault-encryption.d.ts +189 -0
- package/src/auth/session/vault-encryption.js +263 -0
- package/src/auth/session/vault-encryption.js.map +1 -0
- package/src/auth/ui/base-layout.d.ts +188 -0
- package/src/auth/ui/base-layout.js +292 -0
- package/src/auth/ui/base-layout.js.map +1 -0
- package/src/auth/ui/htmx-templates.d.ts +135 -0
- package/src/auth/ui/htmx-templates.js +433 -0
- package/src/auth/ui/htmx-templates.js.map +1 -0
- package/src/auth/ui/index.d.ts +11 -0
- package/src/auth/ui/index.js +35 -0
- package/src/auth/ui/index.js.map +1 -0
- package/src/auth/utils/audience.validator.d.ts +129 -0
- package/src/auth/utils/audience.validator.js +196 -0
- package/src/auth/utils/audience.validator.js.map +1 -0
- package/src/auth/utils/index.d.ts +2 -0
- package/src/auth/utils/index.js +7 -0
- package/src/auth/utils/index.js.map +1 -0
- package/src/auth/utils/www-authenticate.utils.d.ts +97 -0
- package/src/auth/utils/www-authenticate.utils.js +183 -0
- package/src/auth/utils/www-authenticate.utils.js.map +1 -0
- package/src/common/common.schema.d.ts +2 -16
- package/src/common/constants.d.ts +3 -0
- package/src/common/constants.js +6 -1
- package/src/common/constants.js.map +1 -1
- package/src/common/decorators/decorator-utils.d.ts +131 -0
- package/src/common/decorators/decorator-utils.js +195 -0
- package/src/common/decorators/decorator-utils.js.map +1 -0
- package/src/common/decorators/front-mcp.decorator.js +3 -2
- package/src/common/decorators/front-mcp.decorator.js.map +1 -1
- package/src/common/decorators/hook.decorator.d.ts +58 -2
- package/src/common/decorators/hook.decorator.js +127 -17
- package/src/common/decorators/hook.decorator.js.map +1 -1
- package/src/common/decorators/plugin.decorator.d.ts +1 -1
- package/src/common/decorators/plugin.decorator.js +11 -10
- package/src/common/decorators/plugin.decorator.js.map +1 -1
- package/src/common/decorators/resource.decorator.d.ts +32 -3
- package/src/common/decorators/resource.decorator.js +46 -4
- package/src/common/decorators/resource.decorator.js.map +1 -1
- package/src/common/decorators/tool.decorator.d.ts +54 -5
- package/src/common/decorators/tool.decorator.js.map +1 -1
- package/src/common/dynamic/dynamic.plugin.d.ts +22 -11
- package/src/common/dynamic/dynamic.plugin.js +7 -1
- package/src/common/dynamic/dynamic.plugin.js.map +1 -1
- package/src/common/entries/prompt.entry.d.ts +46 -2
- package/src/common/entries/prompt.entry.js +10 -0
- package/src/common/entries/prompt.entry.js.map +1 -1
- package/src/common/entries/resource.entry.d.ts +69 -6
- package/src/common/entries/resource.entry.js +27 -3
- package/src/common/entries/resource.entry.js.map +1 -1
- package/src/common/entries/scope.entry.d.ts +5 -1
- package/src/common/entries/scope.entry.js +3 -3
- package/src/common/entries/scope.entry.js.map +1 -1
- package/src/common/flow/flow.utils.d.ts +56 -0
- package/src/common/flow/flow.utils.js +96 -0
- package/src/common/flow/flow.utils.js.map +1 -0
- package/src/common/index.d.ts +2 -2
- package/src/common/index.js +2 -2
- package/src/common/index.js.map +1 -1
- package/src/common/interfaces/execution-context.interface.d.ts +59 -0
- package/src/common/interfaces/execution-context.interface.js +81 -0
- package/src/common/interfaces/execution-context.interface.js.map +1 -0
- package/src/common/interfaces/flow.interface.d.ts +1 -1
- package/src/common/interfaces/flow.interface.js.map +1 -1
- package/src/common/interfaces/index.d.ts +1 -0
- package/src/common/interfaces/index.js +1 -0
- package/src/common/interfaces/index.js.map +1 -1
- package/src/common/interfaces/internal/primary-auth-provider.interface.d.ts +17 -2
- package/src/common/interfaces/internal/primary-auth-provider.interface.js +52 -4
- package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +1 -1
- package/src/common/interfaces/internal/registry.interface.d.ts +16 -2
- package/src/common/interfaces/internal/registry.interface.js.map +1 -1
- package/src/common/interfaces/plugin.interface.js.map +1 -1
- package/src/common/interfaces/prompt.interface.d.ts +53 -4
- package/src/common/interfaces/prompt.interface.js +78 -0
- package/src/common/interfaces/prompt.interface.js.map +1 -1
- package/src/common/interfaces/resource.interface.d.ts +47 -17
- package/src/common/interfaces/resource.interface.js +53 -0
- package/src/common/interfaces/resource.interface.js.map +1 -1
- package/src/common/interfaces/tool.interface.d.ts +39 -22
- package/src/common/interfaces/tool.interface.js +61 -34
- package/src/common/interfaces/tool.interface.js.map +1 -1
- package/src/common/metadata/adapter.metadata.d.ts +1 -9
- package/src/common/metadata/app.metadata.d.ts +425 -730
- package/src/common/metadata/auth-provider.metadata.d.ts +2 -12
- package/src/common/metadata/flow.metadata.d.ts +10 -25
- package/src/common/metadata/front-mcp.metadata.d.ts +602 -1023
- package/src/common/metadata/front-mcp.metadata.js +6 -4
- package/src/common/metadata/front-mcp.metadata.js.map +1 -1
- package/src/common/metadata/hook.metadata.d.ts +1 -1
- package/src/common/metadata/hook.metadata.js.map +1 -1
- package/src/common/metadata/index.d.ts +1 -0
- package/src/common/metadata/index.js +1 -0
- package/src/common/metadata/index.js.map +1 -1
- package/src/common/metadata/logger.metadata.d.ts +1 -9
- package/src/common/metadata/plugin.metadata.d.ts +8 -30
- package/src/common/metadata/prompt.metadata.d.ts +4 -161
- package/src/common/metadata/provider.metadata.d.ts +2 -12
- package/src/common/metadata/resource.metadata.d.ts +6 -98
- package/src/common/metadata/resource.metadata.js +15 -6
- package/src/common/metadata/resource.metadata.js.map +1 -1
- package/src/common/metadata/tool-ui.metadata.d.ts +10 -0
- package/src/common/metadata/tool-ui.metadata.js +12 -0
- package/src/common/metadata/tool-ui.metadata.js.map +1 -0
- package/src/common/metadata/tool.metadata.d.ts +78 -199
- package/src/common/metadata/tool.metadata.js +11 -14
- package/src/common/metadata/tool.metadata.js.map +1 -1
- package/src/common/providers/base-config.provider.d.ts +84 -0
- package/src/common/providers/base-config.provider.js +128 -0
- package/src/common/providers/base-config.provider.js.map +1 -0
- package/src/common/records/plugin.record.d.ts +5 -6
- package/src/common/records/plugin.record.js.map +1 -1
- package/src/common/records/prompt.record.js.map +1 -1
- package/src/common/records/resource.record.d.ts +17 -1
- package/src/common/records/resource.record.js +12 -6
- package/src/common/records/resource.record.js.map +1 -1
- package/src/common/records/tool.record.js.map +1 -1
- package/src/common/schemas/annotated-class.schema.d.ts +9 -9
- package/src/common/schemas/annotated-class.schema.js +92 -27
- package/src/common/schemas/annotated-class.schema.js.map +1 -1
- package/src/common/schemas/http-input.schema.d.ts +6 -30
- package/src/common/schemas/http-output.schema.d.ts +326 -1630
- package/src/common/schemas/http-output.schema.js +39 -1
- package/src/common/schemas/http-output.schema.js.map +1 -1
- package/src/common/tokens/front-mcp.tokens.js +4 -1
- package/src/common/tokens/front-mcp.tokens.js.map +1 -1
- package/src/common/tokens/resource.tokens.d.ts +2 -0
- package/src/common/tokens/resource.tokens.js +4 -1
- package/src/common/tokens/resource.tokens.js.map +1 -1
- package/src/common/tokens/tool.tokens.d.ts +2 -0
- package/src/common/tokens/tool.tokens.js +2 -0
- package/src/common/tokens/tool.tokens.js.map +1 -1
- package/src/common/types/auth/jwt.types.d.ts +5 -31
- package/src/common/types/auth/session.types.d.ts +97 -192
- package/src/common/types/auth/session.types.js +24 -11
- package/src/common/types/auth/session.types.js.map +1 -1
- package/src/common/types/options/auth.options.d.ts +1013 -490
- package/src/common/types/options/auth.options.js +554 -36
- package/src/common/types/options/auth.options.js.map +1 -1
- package/src/common/types/options/http.options.d.ts +1 -9
- package/src/common/types/options/logging.options.d.ts +7 -13
- package/src/common/types/options/logging.options.js +4 -0
- package/src/common/types/options/logging.options.js.map +1 -1
- package/src/common/types/options/server-info.options.d.ts +3 -31
- package/src/common/types/options/session.options.d.ts +90 -10
- package/src/common/types/options/session.options.js +26 -3
- package/src/common/types/options/session.options.js.map +1 -1
- package/src/common/utils/decide-request-intent.utils.d.ts +8 -46
- package/src/common/utils/decide-request-intent.utils.js +88 -23
- package/src/common/utils/decide-request-intent.utils.js.map +1 -1
- package/src/completion/flows/complete.flow.d.ts +74 -0
- package/src/completion/flows/complete.flow.js +199 -0
- package/src/completion/flows/complete.flow.js.map +1 -0
- package/src/errors/authorization-required.error.d.ts +189 -0
- package/src/errors/authorization-required.error.js +274 -0
- package/src/errors/authorization-required.error.js.map +1 -0
- package/src/errors/index.d.ts +2 -1
- package/src/errors/index.js +17 -1
- package/src/errors/index.js.map +1 -1
- package/src/errors/mcp.error.d.ts +101 -1
- package/src/errors/mcp.error.js +147 -2
- package/src/errors/mcp.error.js.map +1 -1
- package/src/flows/flow.instance.js +4 -3
- package/src/flows/flow.instance.js.map +1 -1
- package/src/flows/flow.registry.js.map +1 -1
- package/src/flows/flow.stages.js +14 -11
- package/src/flows/flow.stages.js.map +1 -1
- package/src/front-mcp/front-mcp.providers.d.ts +464 -102
- package/src/front-mcp/front-mcp.providers.js +3 -5
- package/src/front-mcp/front-mcp.providers.js.map +1 -1
- package/src/hooks/hook.instance.d.ts +1 -1
- package/src/hooks/hook.instance.js +5 -2
- package/src/hooks/hook.instance.js.map +1 -1
- package/src/hooks/hook.registry.js +7 -5
- package/src/hooks/hook.registry.js.map +1 -1
- package/src/index.d.ts +28 -9
- package/src/index.js +5 -1
- package/src/index.js.map +1 -1
- package/src/logger/instances/instance.logger.js +3 -2
- package/src/logger/instances/instance.logger.js.map +1 -1
- package/src/logger/logger.registry.js +7 -2
- package/src/logger/logger.registry.js.map +1 -1
- package/src/logging/flows/set-level.flow.d.ts +62 -0
- package/src/logging/flows/set-level.flow.js +108 -0
- package/src/logging/flows/set-level.flow.js.map +1 -0
- package/src/mcp-apps/csp.d.ts +111 -0
- package/src/mcp-apps/csp.js +267 -0
- package/src/mcp-apps/csp.js.map +1 -0
- package/src/mcp-apps/index.d.ts +23 -0
- package/src/mcp-apps/index.js +91 -0
- package/src/mcp-apps/index.js.map +1 -0
- package/src/mcp-apps/schemas.d.ts +403 -0
- package/src/mcp-apps/schemas.js +345 -0
- package/src/mcp-apps/schemas.js.map +1 -0
- package/src/mcp-apps/template.d.ts +94 -0
- package/src/mcp-apps/template.js +419 -0
- package/src/mcp-apps/template.js.map +1 -0
- package/src/mcp-apps/types.d.ts +323 -0
- package/src/mcp-apps/types.js +59 -0
- package/src/mcp-apps/types.js.map +1 -0
- package/src/notification/index.d.ts +1 -0
- package/src/notification/index.js +13 -0
- package/src/notification/index.js.map +1 -0
- package/src/notification/notification.service.d.ts +378 -0
- package/src/notification/notification.service.js +727 -0
- package/src/notification/notification.service.js.map +1 -0
- package/src/plugin/plugin.registry.js +12 -9
- package/src/plugin/plugin.registry.js.map +1 -1
- package/src/prompt/flows/get-prompt.flow.d.ts +153 -0
- package/src/prompt/flows/get-prompt.flow.js +214 -0
- package/src/prompt/flows/get-prompt.flow.js.map +1 -0
- package/src/prompt/flows/prompts-list.flow.d.ts +67 -0
- package/src/prompt/flows/prompts-list.flow.js +176 -0
- package/src/prompt/flows/prompts-list.flow.js.map +1 -0
- package/src/prompt/index.d.ts +7 -0
- package/src/prompt/index.js +17 -0
- package/src/prompt/index.js.map +1 -0
- package/src/prompt/prompt.events.d.ts +17 -0
- package/src/prompt/prompt.events.js +25 -0
- package/src/prompt/prompt.events.js.map +1 -0
- package/src/prompt/prompt.instance.d.ts +30 -0
- package/src/prompt/prompt.instance.js +120 -0
- package/src/prompt/prompt.instance.js.map +1 -0
- package/src/prompt/prompt.registry.d.ts +79 -12
- package/src/prompt/prompt.registry.js +360 -15
- package/src/prompt/prompt.registry.js.map +1 -1
- package/src/prompt/prompt.types.d.ts +26 -0
- package/src/prompt/prompt.types.js +11 -0
- package/src/prompt/prompt.types.js.map +1 -0
- package/src/prompt/prompt.utils.d.ts +26 -0
- package/src/prompt/prompt.utils.js +136 -0
- package/src/prompt/prompt.utils.js.map +1 -0
- package/src/provider/provider.registry.d.ts +12 -5
- package/src/provider/provider.registry.js +30 -138
- package/src/provider/provider.registry.js.map +1 -1
- package/src/regsitry/registry.base.d.ts +1 -1
- package/src/regsitry/registry.base.js.map +1 -1
- package/src/resource/flows/read-resource.flow.d.ts +91 -0
- package/src/resource/flows/read-resource.flow.js +270 -0
- package/src/resource/flows/read-resource.flow.js.map +1 -0
- package/src/resource/flows/resource-templates-list.flow.d.ts +64 -0
- package/src/resource/flows/resource-templates-list.flow.js +191 -0
- package/src/resource/flows/resource-templates-list.flow.js.map +1 -0
- package/src/resource/flows/resources-list.flow.d.ts +64 -0
- package/src/resource/flows/resources-list.flow.js +196 -0
- package/src/resource/flows/resources-list.flow.js.map +1 -0
- package/src/resource/flows/subscribe-resource.flow.d.ts +45 -0
- package/src/resource/flows/subscribe-resource.flow.js +123 -0
- package/src/resource/flows/subscribe-resource.flow.js.map +1 -0
- package/src/resource/flows/unsubscribe-resource.flow.d.ts +44 -0
- package/src/resource/flows/unsubscribe-resource.flow.js +107 -0
- package/src/resource/flows/unsubscribe-resource.flow.js.map +1 -0
- package/src/resource/index.d.ts +8 -0
- package/src/resource/index.js +20 -0
- package/src/resource/index.js.map +1 -0
- package/src/resource/resource.events.d.ts +24 -0
- package/src/resource/resource.events.js +17 -0
- package/src/resource/resource.events.js.map +1 -0
- package/src/resource/resource.instance.d.ts +35 -0
- package/src/resource/resource.instance.js +163 -0
- package/src/resource/resource.instance.js.map +1 -0
- package/src/resource/resource.registry.d.ts +106 -12
- package/src/resource/resource.registry.js +449 -13
- package/src/resource/resource.registry.js.map +1 -1
- package/src/resource/resource.types.d.ts +35 -0
- package/src/resource/resource.types.js +11 -0
- package/src/resource/resource.types.js.map +1 -0
- package/src/resource/resource.utils.d.ts +30 -0
- package/src/resource/resource.utils.js +151 -0
- package/src/resource/resource.utils.js.map +1 -0
- package/src/scope/flows/http.request.flow.d.ts +48 -330
- package/src/scope/flows/http.request.flow.js +306 -78
- package/src/scope/flows/http.request.flow.js.map +1 -1
- package/src/scope/scope.instance.d.ts +12 -0
- package/src/scope/scope.instance.js +145 -15
- package/src/scope/scope.instance.js.map +1 -1
- package/src/tool/flows/call-tool.flow.d.ts +64 -1110
- package/src/tool/flows/call-tool.flow.js +303 -15
- package/src/tool/flows/call-tool.flow.js.map +1 -1
- package/src/tool/flows/tools-list.flow.d.ts +32 -473
- package/src/tool/flows/tools-list.flow.js +121 -40
- package/src/tool/flows/tools-list.flow.js.map +1 -1
- package/src/tool/tool.events.d.ts +8 -1
- package/src/tool/tool.events.js.map +1 -1
- package/src/tool/tool.instance.d.ts +3 -1
- package/src/tool/tool.instance.js +17 -3
- package/src/tool/tool.instance.js.map +1 -1
- package/src/tool/tool.registry.d.ts +7 -1
- package/src/tool/tool.registry.js +26 -10
- package/src/tool/tool.registry.js.map +1 -1
- package/src/tool/tool.types.d.ts +4 -4
- package/src/tool/tool.types.js.map +1 -1
- package/src/tool/tool.utils.d.ts +3 -12
- package/src/tool/tool.utils.js +39 -193
- package/src/tool/tool.utils.js.map +1 -1
- package/src/tool/ui/index.d.ts +22 -0
- package/src/tool/ui/index.js +63 -0
- package/src/tool/ui/index.js.map +1 -0
- package/src/tool/ui/platform-adapters.d.ts +10 -0
- package/src/tool/ui/platform-adapters.js +18 -0
- package/src/tool/ui/platform-adapters.js.map +1 -0
- package/src/tool/ui/template-helpers.d.ts +46 -0
- package/src/tool/ui/template-helpers.js +112 -0
- package/src/tool/ui/template-helpers.js.map +1 -0
- package/src/tool/ui/ui-resource-template.d.ts +34 -0
- package/src/tool/ui/ui-resource-template.js +64 -0
- package/src/tool/ui/ui-resource-template.js.map +1 -0
- package/src/tool/ui/ui-resource.handler.d.ts +74 -0
- package/src/tool/ui/ui-resource.handler.js +129 -0
- package/src/tool/ui/ui-resource.handler.js.map +1 -0
- package/src/transport/adapters/transport.local.adapter.d.ts +2 -2
- package/src/transport/adapters/transport.local.adapter.js +28 -7
- package/src/transport/adapters/transport.local.adapter.js.map +1 -1
- package/src/transport/adapters/transport.sse.adapter.d.ts +2 -2
- package/src/transport/adapters/transport.sse.adapter.js +4 -3
- package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
- package/src/transport/adapters/transport.streamable-http.adapter.d.ts +10 -3
- package/src/transport/adapters/transport.streamable-http.adapter.js +54 -8
- package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
- package/src/transport/flows/handle.sse.flow.d.ts +29 -63
- package/src/transport/flows/handle.sse.flow.js +78 -10
- package/src/transport/flows/handle.sse.flow.js.map +1 -1
- package/src/transport/flows/handle.stateless-http.flow.d.ts +29 -0
- package/src/transport/flows/handle.stateless-http.flow.js +102 -0
- package/src/transport/flows/handle.stateless-http.flow.js.map +1 -0
- package/src/transport/flows/handle.streamable-http.flow.d.ts +32 -64
- package/src/transport/flows/handle.streamable-http.flow.js +158 -26
- package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
- package/src/transport/legacy/legacy.sse.tranporter.d.ts +9 -0
- package/src/transport/legacy/legacy.sse.tranporter.js +17 -2
- package/src/transport/legacy/legacy.sse.tranporter.js.map +1 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js +27 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
- package/src/transport/mcp-handlers/complete-request.handler.d.ts +69 -0
- package/src/transport/mcp-handlers/complete-request.handler.js +11 -0
- package/src/transport/mcp-handlers/complete-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.d.ts +87 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.js +11 -0
- package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/index.d.ts +517 -208
- package/src/transport/mcp-handlers/index.js +39 -2
- package/src/transport/mcp-handlers/index.js.map +1 -1
- package/src/transport/mcp-handlers/initialize-request.handler.d.ts +1 -1
- package/src/transport/mcp-handlers/initialize-request.handler.js +73 -7
- package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
- package/src/transport/mcp-handlers/list-prompts-request.handler.d.ts +54 -0
- package/src/transport/mcp-handlers/list-prompts-request.handler.js +11 -0
- package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.d.ts +51 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +12 -0
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.d.ts +51 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.js +12 -0
- package/src/transport/mcp-handlers/list-resources-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +19 -146
- package/src/transport/mcp-handlers/logging-set-level-request.handler.d.ts +46 -0
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js +34 -0
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/mcp-handlers.types.d.ts +3 -7
- package/src/transport/mcp-handlers/mcp-handlers.types.js.map +1 -1
- package/src/transport/mcp-handlers/read-resource-request.handler.d.ts +46 -0
- package/src/transport/mcp-handlers/read-resource-request.handler.js +12 -0
- package/src/transport/mcp-handlers/read-resource-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.d.ts +11 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +26 -0
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +1 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.d.ts +37 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.js +34 -0
- package/src/transport/mcp-handlers/subscribe-request.handler.js.map +1 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.d.ts +37 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js +34 -0
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +1 -0
- package/src/transport/transport.local.js +7 -2
- package/src/transport/transport.local.js.map +1 -1
- package/src/transport/transport.registry.d.ts +30 -0
- package/src/transport/transport.registry.js +84 -1
- package/src/transport/transport.registry.js.map +1 -1
- package/src/transport/transport.types.d.ts +3 -3
- package/src/transport/transport.types.js.map +1 -1
- package/src/utils/content.utils.d.ts +48 -0
- package/src/utils/content.utils.js +194 -0
- package/src/utils/content.utils.js.map +1 -0
- package/src/utils/index.d.ts +8 -0
- package/src/utils/index.js +55 -0
- package/src/utils/index.js.map +1 -0
- package/src/utils/lineage.utils.d.ts +40 -0
- package/src/utils/lineage.utils.js +82 -0
- package/src/utils/lineage.utils.js.map +1 -0
- package/src/utils/naming.utils.d.ts +46 -0
- package/src/utils/naming.utils.js +136 -0
- package/src/utils/naming.utils.js.map +1 -0
- package/src/utils/types.utils.d.ts +2 -2
- package/src/utils/types.utils.js.map +1 -1
- package/src/utils/uri-template.utils.d.ts +57 -0
- package/src/utils/uri-template.utils.js +113 -0
- package/src/utils/uri-template.utils.js.map +1 -0
- package/src/utils/uri-validation.utils.d.ts +40 -0
- package/src/utils/uri-validation.utils.js +76 -0
- package/src/utils/uri-validation.utils.js.map +1 -0
- package/src/__test-utils__/fixtures/hook.fixtures.d.ts +0 -46
- package/src/__test-utils__/fixtures/hook.fixtures.js +0 -114
- package/src/__test-utils__/fixtures/hook.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/index.d.ts +0 -7
- package/src/__test-utils__/fixtures/index.js +0 -11
- package/src/__test-utils__/fixtures/index.js.map +0 -1
- package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +0 -46
- package/src/__test-utils__/fixtures/plugin.fixtures.js +0 -127
- package/src/__test-utils__/fixtures/plugin.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/provider.fixtures.d.ts +0 -69
- package/src/__test-utils__/fixtures/provider.fixtures.js +0 -131
- package/src/__test-utils__/fixtures/provider.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/scope.fixtures.d.ts +0 -14
- package/src/__test-utils__/fixtures/scope.fixtures.js +0 -59
- package/src/__test-utils__/fixtures/scope.fixtures.js.map +0 -1
- package/src/__test-utils__/fixtures/tool.fixtures.d.ts +0 -36
- package/src/__test-utils__/fixtures/tool.fixtures.js +0 -91
- package/src/__test-utils__/fixtures/tool.fixtures.js.map +0 -1
- package/src/__test-utils__/helpers/assertion.helpers.d.ts +0 -45
- package/src/__test-utils__/helpers/assertion.helpers.js +0 -153
- package/src/__test-utils__/helpers/assertion.helpers.js.map +0 -1
- package/src/__test-utils__/helpers/async.helpers.d.ts +0 -48
- package/src/__test-utils__/helpers/async.helpers.js +0 -112
- package/src/__test-utils__/helpers/async.helpers.js.map +0 -1
- package/src/__test-utils__/helpers/index.d.ts +0 -6
- package/src/__test-utils__/helpers/index.js +0 -10
- package/src/__test-utils__/helpers/index.js.map +0 -1
- package/src/__test-utils__/helpers/setup.helpers.d.ts +0 -54
- package/src/__test-utils__/helpers/setup.helpers.js +0 -106
- package/src/__test-utils__/helpers/setup.helpers.js.map +0 -1
- package/src/__test-utils__/index.d.ts +0 -9
- package/src/__test-utils__/index.js +0 -14
- package/src/__test-utils__/index.js.map +0 -1
- package/src/__test-utils__/mocks/flow-instance.mock.d.ts +0 -50
- package/src/__test-utils__/mocks/flow-instance.mock.js +0 -72
- package/src/__test-utils__/mocks/flow-instance.mock.js.map +0 -1
- package/src/__test-utils__/mocks/hook-registry.mock.d.ts +0 -25
- package/src/__test-utils__/mocks/hook-registry.mock.js +0 -65
- package/src/__test-utils__/mocks/hook-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/index.d.ts +0 -8
- package/src/__test-utils__/mocks/index.js +0 -12
- package/src/__test-utils__/mocks/index.js.map +0 -1
- package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +0 -43
- package/src/__test-utils__/mocks/plugin-registry.mock.js +0 -70
- package/src/__test-utils__/mocks/plugin-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/provider-registry.mock.d.ts +0 -39
- package/src/__test-utils__/mocks/provider-registry.mock.js +0 -72
- package/src/__test-utils__/mocks/provider-registry.mock.js.map +0 -1
- package/src/__test-utils__/mocks/tool-registry.mock.d.ts +0 -43
- package/src/__test-utils__/mocks/tool-registry.mock.js +0 -79
- package/src/__test-utils__/mocks/tool-registry.mock.js.map +0 -1
- package/src/auth/path.utils.d.ts +0 -20
- package/src/auth/path.utils.js +0 -71
- package/src/auth/path.utils.js.map +0 -1
- package/src/common/decorators-old/async-with.decorator.d.ts +0 -10
- package/src/common/decorators-old/async-with.decorator.js +0 -24
- package/src/common/decorators-old/async-with.decorator.js.map +0 -1
- package/src/common/decorators-old/auth-hook.decorator.d.ts +0 -14
- package/src/common/decorators-old/auth-hook.decorator.js +0 -27
- package/src/common/decorators-old/auth-hook.decorator.js.map +0 -1
- package/src/common/decorators-old/session-hook.decorator.d.ts +0 -14
- package/src/common/decorators-old/session-hook.decorator.js +0 -27
- 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 {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|