@frontmcp/sdk 0.6.1 → 0.6.2
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/{src/auth → auth}/instances/instance.local-primary-auth.d.ts +1 -1
- package/{src/auth → auth}/instances/instance.remote-primary-auth.d.ts +1 -1
- package/{src/common → common}/interfaces/internal/primary-auth-provider.interface.d.ts +1 -4
- package/{src/common → common}/metadata/front-mcp.metadata.d.ts +1074 -44
- package/common/types/options/auth/app-auth.schema.d.ts +275 -0
- package/common/types/options/auth/auth.interfaces.d.ts +461 -0
- package/common/types/options/auth/auth.schema.d.ts +284 -0
- package/common/types/options/auth/auth.utils.d.ts +32 -0
- package/common/types/options/auth/index.d.ts +16 -0
- package/common/types/options/auth/orchestrated.schema.d.ts +381 -0
- package/common/types/options/auth/public.schema.d.ts +42 -0
- package/common/types/options/auth/shared.schemas.d.ts +120 -0
- package/common/types/options/auth/transparent.schema.d.ts +56 -0
- package/common/types/options/auth/transport.deprecated.d.ts +63 -0
- package/{src/common → common}/types/options/index.d.ts +1 -1
- package/{src/common → common}/types/options/transport.options.d.ts +6 -1
- package/{src/common → common}/utils/decide-request-intent.utils.d.ts +6 -7
- package/esm/index.mjs +22664 -0
- package/esm/mcp-apps/index.mjs +723 -0
- package/esm/package.json +81 -0
- package/index.js +22957 -0
- package/logger/logger.tokens.d.ts +1 -0
- package/mcp-apps/index.js +799 -0
- package/package.json +26 -13
- package/README.md +0 -461
- package/src/adapter/adapter.instance.js +0 -70
- package/src/adapter/adapter.instance.js.map +0 -1
- package/src/adapter/adapter.regsitry.js +0 -54
- package/src/adapter/adapter.regsitry.js.map +0 -1
- package/src/adapter/adapter.utils.js +0 -83
- package/src/adapter/adapter.utils.js.map +0 -1
- package/src/app/app.registry.js +0 -66
- package/src/app/app.registry.js.map +0 -1
- package/src/app/app.utils.js +0 -58
- package/src/app/app.utils.js.map +0 -1
- package/src/app/instances/app.local.instance.js +0 -67
- package/src/app/instances/app.local.instance.js.map +0 -1
- package/src/app/instances/app.remote.instance.js +0 -36
- package/src/app/instances/app.remote.instance.js.map +0 -1
- package/src/app/instances/index.js +0 -6
- package/src/app/instances/index.js.map +0 -1
- package/src/auth/auth.registry.js +0 -219
- package/src/auth/auth.registry.js.map +0 -1
- package/src/auth/auth.utils.js +0 -84
- package/src/auth/auth.utils.js.map +0 -1
- package/src/auth/authorization/authorization.class.js +0 -217
- package/src/auth/authorization/authorization.class.js.map +0 -1
- package/src/auth/authorization/authorization.types.js +0 -79
- package/src/auth/authorization/authorization.types.js.map +0 -1
- package/src/auth/authorization/index.js +0 -19
- package/src/auth/authorization/index.js.map +0 -1
- package/src/auth/authorization/orchestrated.authorization.js +0 -306
- package/src/auth/authorization/orchestrated.authorization.js.map +0 -1
- package/src/auth/authorization/public.authorization.js +0 -132
- package/src/auth/authorization/public.authorization.js.map +0 -1
- package/src/auth/authorization/transparent.authorization.js +0 -147
- package/src/auth/authorization/transparent.authorization.js.map +0 -1
- package/src/auth/consent/consent.types.js +0 -119
- package/src/auth/consent/consent.types.js.map +0 -1
- package/src/auth/consent/index.js +0 -13
- package/src/auth/consent/index.js.map +0 -1
- package/src/auth/detection/auth-provider-detection.js +0 -230
- package/src/auth/detection/auth-provider-detection.js.map +0 -1
- package/src/auth/detection/index.js +0 -15
- package/src/auth/detection/index.js.map +0 -1
- package/src/auth/flows/auth.verify.flow.js +0 -379
- package/src/auth/flows/auth.verify.flow.js.map +0 -1
- package/src/auth/flows/oauth.authorize.flow.js +0 -822
- package/src/auth/flows/oauth.authorize.flow.js.map +0 -1
- package/src/auth/flows/oauth.callback.flow.js +0 -357
- package/src/auth/flows/oauth.callback.flow.js.map +0 -1
- package/src/auth/flows/oauth.register.flow.js +0 -201
- package/src/auth/flows/oauth.register.flow.js.map +0 -1
- package/src/auth/flows/oauth.token.flow.js +0 -319
- package/src/auth/flows/oauth.token.flow.js.map +0 -1
- package/src/auth/flows/session.verify.flow.js +0 -304
- package/src/auth/flows/session.verify.flow.js.map +0 -1
- package/src/auth/flows/well-known.jwks.flow.js +0 -89
- package/src/auth/flows/well-known.jwks.flow.js.map +0 -1
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js +0 -122
- package/src/auth/flows/well-known.oauth-authorization-server.flow.js.map +0 -1
- package/src/auth/flows/well-known.prm.flow.js +0 -106
- package/src/auth/flows/well-known.prm.flow.js.map +0 -1
- package/src/auth/instances/instance.local-primary-auth.js +0 -308
- package/src/auth/instances/instance.local-primary-auth.js.map +0 -1
- package/src/auth/instances/instance.remote-primary-auth.js +0 -49
- package/src/auth/instances/instance.remote-primary-auth.js.map +0 -1
- package/src/auth/jwks/dev-key-persistence.js +0 -219
- package/src/auth/jwks/dev-key-persistence.js.map +0 -1
- package/src/auth/jwks/index.js +0 -7
- package/src/auth/jwks/index.js.map +0 -1
- package/src/auth/jwks/jwks.service.js +0 -303
- package/src/auth/jwks/jwks.service.js.map +0 -1
- package/src/auth/jwks/jwks.types.js +0 -3
- package/src/auth/jwks/jwks.types.js.map +0 -1
- package/src/auth/jwks/jwks.utils.js +0 -32
- package/src/auth/jwks/jwks.utils.js.map +0 -1
- package/src/auth/machine-id.js +0 -32
- package/src/auth/machine-id.js.map +0 -1
- package/src/auth/oauth/flows/oauth.authorize.flow.js +0 -33
- package/src/auth/oauth/flows/oauth.authorize.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.device-authorization.flow.js +0 -48
- package/src/auth/oauth/flows/oauth.device-authorization.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.introspect.flow.js +0 -28
- package/src/auth/oauth/flows/oauth.introspect.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.par.flow.js +0 -29
- package/src/auth/oauth/flows/oauth.par.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.revoke.flow.js +0 -27
- package/src/auth/oauth/flows/oauth.revoke.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.token.flow.js +0 -59
- package/src/auth/oauth/flows/oauth.token.flow.js.map +0 -1
- package/src/auth/oauth/flows/oauth.userinfo.flow.js +0 -24
- package/src/auth/oauth/flows/oauth.userinfo.flow.js.map +0 -1
- package/src/auth/oauth/flows/oidc.logout.flow.js +0 -20
- package/src/auth/oauth/flows/oidc.logout.flow.js.map +0 -1
- package/src/auth/session/authorization-vault.js +0 -817
- package/src/auth/session/authorization-vault.js.map +0 -1
- package/src/auth/session/authorization.store.js +0 -323
- package/src/auth/session/authorization.store.js.map +0 -1
- package/src/auth/session/encrypted-authorization-vault.js +0 -493
- package/src/auth/session/encrypted-authorization-vault.js.map +0 -1
- package/src/auth/session/index.js +0 -18
- package/src/auth/session/index.js.map +0 -1
- package/src/auth/session/record/session.base.js +0 -125
- package/src/auth/session/record/session.base.js.map +0 -1
- package/src/auth/session/record/session.stateful.js +0 -55
- package/src/auth/session/record/session.stateful.js.map +0 -1
- package/src/auth/session/record/session.stateless.js +0 -32
- package/src/auth/session/record/session.stateless.js.map +0 -1
- package/src/auth/session/record/session.transparent.js +0 -22
- package/src/auth/session/record/session.transparent.js.map +0 -1
- package/src/auth/session/redis-session.store.js +0 -204
- package/src/auth/session/redis-session.store.js.map +0 -1
- package/src/auth/session/session.crypto.js +0 -47
- package/src/auth/session/session.crypto.js.map +0 -1
- package/src/auth/session/session.schema.js +0 -13
- package/src/auth/session/session.schema.js.map +0 -1
- package/src/auth/session/session.service.js +0 -105
- package/src/auth/session/session.service.js.map +0 -1
- package/src/auth/session/session.transport.js +0 -20
- package/src/auth/session/session.transport.js.map +0 -1
- package/src/auth/session/session.types.js +0 -4
- package/src/auth/session/session.types.js.map +0 -1
- package/src/auth/session/token.refresh.js +0 -63
- package/src/auth/session/token.refresh.js.map +0 -1
- package/src/auth/session/token.store.js +0 -53
- package/src/auth/session/token.store.js.map +0 -1
- package/src/auth/session/token.vault.js +0 -54
- package/src/auth/session/token.vault.js.map +0 -1
- package/src/auth/session/transport-session.manager.js +0 -298
- package/src/auth/session/transport-session.manager.js.map +0 -1
- package/src/auth/session/transport-session.types.js +0 -111
- package/src/auth/session/transport-session.types.js.map +0 -1
- package/src/auth/session/utils/auth-token.utils.js +0 -57
- package/src/auth/session/utils/auth-token.utils.js.map +0 -1
- package/src/auth/session/utils/session-id.utils.js +0 -217
- package/src/auth/session/utils/session-id.utils.js.map +0 -1
- package/src/auth/session/utils/tiny-ttl-cache.js +0 -26
- package/src/auth/session/utils/tiny-ttl-cache.js.map +0 -1
- package/src/auth/session/vault-encryption.js +0 -263
- package/src/auth/session/vault-encryption.js.map +0 -1
- package/src/auth/session/vercel-kv-session.store.js +0 -216
- package/src/auth/session/vercel-kv-session.store.js.map +0 -1
- package/src/auth/ui/base-layout.js +0 -279
- package/src/auth/ui/base-layout.js.map +0 -1
- package/src/auth/ui/index.js +0 -34
- package/src/auth/ui/index.js.map +0 -1
- package/src/auth/ui/templates.js +0 -426
- package/src/auth/ui/templates.js.map +0 -1
- package/src/auth/utils/audience.validator.js +0 -196
- package/src/auth/utils/audience.validator.js.map +0 -1
- package/src/auth/utils/index.js +0 -7
- package/src/auth/utils/index.js.map +0 -1
- package/src/auth/utils/www-authenticate.utils.js +0 -183
- package/src/auth/utils/www-authenticate.utils.js.map +0 -1
- package/src/common/common.schema.js +0 -35
- package/src/common/common.schema.js.map +0 -1
- package/src/common/constants.js +0 -13
- package/src/common/constants.js.map +0 -1
- package/src/common/decorators/adapter.decorator.js +0 -20
- package/src/common/decorators/adapter.decorator.js.map +0 -1
- package/src/common/decorators/app.decorator.js +0 -44
- package/src/common/decorators/app.decorator.js.map +0 -1
- package/src/common/decorators/auth-provider.decorator.js +0 -20
- package/src/common/decorators/auth-provider.decorator.js.map +0 -1
- package/src/common/decorators/decorator-utils.js +0 -195
- package/src/common/decorators/decorator-utils.js.map +0 -1
- package/src/common/decorators/flow.decorator.js +0 -19
- package/src/common/decorators/flow.decorator.js.map +0 -1
- package/src/common/decorators/front-mcp.decorator.js +0 -64
- package/src/common/decorators/front-mcp.decorator.js.map +0 -1
- package/src/common/decorators/hook.decorator.js +0 -178
- package/src/common/decorators/hook.decorator.js.map +0 -1
- package/src/common/decorators/index.js +0 -16
- package/src/common/decorators/index.js.map +0 -1
- package/src/common/decorators/logger.decorator.js +0 -20
- package/src/common/decorators/logger.decorator.js.map +0 -1
- package/src/common/decorators/plugin.decorator.js +0 -39
- package/src/common/decorators/plugin.decorator.js.map +0 -1
- package/src/common/decorators/prompt.decorator.js +0 -38
- package/src/common/decorators/prompt.decorator.js.map +0 -1
- package/src/common/decorators/provider.decorator.js +0 -20
- package/src/common/decorators/provider.decorator.js.map +0 -1
- package/src/common/decorators/resource.decorator.js +0 -94
- package/src/common/decorators/resource.decorator.js.map +0 -1
- package/src/common/decorators/tool.decorator.js +0 -45
- package/src/common/decorators/tool.decorator.js.map +0 -1
- package/src/common/dynamic/dynamic.adapter.js +0 -28
- package/src/common/dynamic/dynamic.adapter.js.map +0 -1
- package/src/common/dynamic/dynamic.plugin.js +0 -42
- package/src/common/dynamic/dynamic.plugin.js.map +0 -1
- package/src/common/dynamic/dynamic.utils.js +0 -27
- package/src/common/dynamic/dynamic.utils.js.map +0 -1
- package/src/common/dynamic/index.js +0 -6
- package/src/common/dynamic/index.js.map +0 -1
- package/src/common/entries/adapter.entry.js +0 -8
- package/src/common/entries/adapter.entry.js.map +0 -1
- package/src/common/entries/app.entry.js +0 -9
- package/src/common/entries/app.entry.js.map +0 -1
- package/src/common/entries/auth-provider.entry.js +0 -8
- package/src/common/entries/auth-provider.entry.js.map +0 -1
- package/src/common/entries/base.entry.js +0 -17
- package/src/common/entries/base.entry.js.map +0 -1
- package/src/common/entries/flow.entry.js +0 -21
- package/src/common/entries/flow.entry.js.map +0 -1
- package/src/common/entries/hook.entry.js +0 -20
- package/src/common/entries/hook.entry.js.map +0 -1
- package/src/common/entries/index.js +0 -17
- package/src/common/entries/index.js.map +0 -1
- package/src/common/entries/logger.entry.js +0 -8
- package/src/common/entries/logger.entry.js.map +0 -1
- package/src/common/entries/plugin.entry.js +0 -8
- package/src/common/entries/plugin.entry.js.map +0 -1
- package/src/common/entries/prompt.entry.js +0 -18
- package/src/common/entries/prompt.entry.js.map +0 -1
- package/src/common/entries/provider.entry.js +0 -8
- package/src/common/entries/provider.entry.js.map +0 -1
- package/src/common/entries/resource.entry.js +0 -35
- package/src/common/entries/resource.entry.js.map +0 -1
- package/src/common/entries/scope.entry.js +0 -14
- package/src/common/entries/scope.entry.js.map +0 -1
- package/src/common/entries/tool.entry.js +0 -31
- package/src/common/entries/tool.entry.js.map +0 -1
- package/src/common/flow/flow.utils.js +0 -96
- package/src/common/flow/flow.utils.js.map +0 -1
- package/src/common/index.js +0 -20
- package/src/common/index.js.map +0 -1
- package/src/common/interfaces/adapter.interface.js +0 -3
- package/src/common/interfaces/adapter.interface.js.map +0 -1
- package/src/common/interfaces/app.interface.js +0 -3
- package/src/common/interfaces/app.interface.js.map +0 -1
- package/src/common/interfaces/auth-hook.interface.js +0 -135
- package/src/common/interfaces/auth-hook.interface.js.map +0 -1
- package/src/common/interfaces/auth-provider.interface.js +0 -18
- package/src/common/interfaces/auth-provider.interface.js.map +0 -1
- package/src/common/interfaces/base.interface.js +0 -3
- package/src/common/interfaces/base.interface.js.map +0 -1
- package/src/common/interfaces/execution-context.interface.js +0 -166
- package/src/common/interfaces/execution-context.interface.js.map +0 -1
- package/src/common/interfaces/flow.interface.js +0 -95
- package/src/common/interfaces/flow.interface.js.map +0 -1
- package/src/common/interfaces/front-mcp.interface.js +0 -3
- package/src/common/interfaces/front-mcp.interface.js.map +0 -1
- package/src/common/interfaces/hook.interface.js +0 -3
- package/src/common/interfaces/hook.interface.js.map +0 -1
- package/src/common/interfaces/index.js +0 -21
- package/src/common/interfaces/index.js.map +0 -1
- package/src/common/interfaces/internal/flow.utils.js +0 -83
- package/src/common/interfaces/internal/flow.utils.js.map +0 -1
- package/src/common/interfaces/internal/index.js +0 -7
- package/src/common/interfaces/internal/index.js.map +0 -1
- package/src/common/interfaces/internal/primary-auth-provider.interface.js +0 -81
- package/src/common/interfaces/internal/primary-auth-provider.interface.js.map +0 -1
- package/src/common/interfaces/internal/registry.interface.js +0 -3
- package/src/common/interfaces/internal/registry.interface.js.map +0 -1
- package/src/common/interfaces/logger.interface.js +0 -10
- package/src/common/interfaces/logger.interface.js.map +0 -1
- package/src/common/interfaces/plugin.interface.js +0 -3
- package/src/common/interfaces/plugin.interface.js.map +0 -1
- package/src/common/interfaces/prompt.interface.js +0 -81
- package/src/common/interfaces/prompt.interface.js.map +0 -1
- package/src/common/interfaces/provider.interface.js +0 -18
- package/src/common/interfaces/provider.interface.js.map +0 -1
- package/src/common/interfaces/resource.interface.js +0 -56
- package/src/common/interfaces/resource.interface.js.map +0 -1
- package/src/common/interfaces/scope.interface.js +0 -3
- package/src/common/interfaces/scope.interface.js.map +0 -1
- package/src/common/interfaces/server.interface.js +0 -18
- package/src/common/interfaces/server.interface.js.map +0 -1
- package/src/common/interfaces/session-hook.interface.js +0 -140
- package/src/common/interfaces/session-hook.interface.js.map +0 -1
- package/src/common/interfaces/tool-hook.interface.js +0 -92
- package/src/common/interfaces/tool-hook.interface.js.map +0 -1
- package/src/common/interfaces/tool.interface.js +0 -117
- package/src/common/interfaces/tool.interface.js.map +0 -1
- package/src/common/metadata/adapter.metadata.js +0 -10
- package/src/common/metadata/adapter.metadata.js.map +0 -1
- package/src/common/metadata/app.metadata.js +0 -30
- package/src/common/metadata/app.metadata.js.map +0 -1
- package/src/common/metadata/auth-provider.metadata.js +0 -19
- package/src/common/metadata/auth-provider.metadata.js.map +0 -1
- package/src/common/metadata/flow.metadata.js +0 -15
- package/src/common/metadata/flow.metadata.js.map +0 -1
- package/src/common/metadata/front-mcp.metadata.js +0 -30
- package/src/common/metadata/front-mcp.metadata.js.map +0 -1
- package/src/common/metadata/hook.metadata.js +0 -3
- package/src/common/metadata/hook.metadata.js.map +0 -1
- package/src/common/metadata/index.js +0 -17
- package/src/common/metadata/index.js.map +0 -1
- package/src/common/metadata/logger.metadata.js +0 -10
- package/src/common/metadata/logger.metadata.js.map +0 -1
- package/src/common/metadata/plugin.metadata.js +0 -18
- package/src/common/metadata/plugin.metadata.js.map +0 -1
- package/src/common/metadata/prompt.metadata.js +0 -27
- package/src/common/metadata/prompt.metadata.js.map +0 -1
- package/src/common/metadata/provider.metadata.js +0 -36
- package/src/common/metadata/provider.metadata.js.map +0 -1
- package/src/common/metadata/resource.metadata.js +0 -31
- package/src/common/metadata/resource.metadata.js.map +0 -1
- package/src/common/metadata/tool-ui.metadata.js +0 -12
- package/src/common/metadata/tool-ui.metadata.js.map +0 -1
- package/src/common/metadata/tool.metadata.js +0 -55
- package/src/common/metadata/tool.metadata.js.map +0 -1
- package/src/common/migrate/auth-transport.migrate.js +0 -140
- package/src/common/migrate/auth-transport.migrate.js.map +0 -1
- package/src/common/migrate/index.js +0 -6
- package/src/common/migrate/index.js.map +0 -1
- package/src/common/providers/base-config.provider.js +0 -128
- package/src/common/providers/base-config.provider.js.map +0 -1
- package/src/common/records/adapter.record.js +0 -11
- package/src/common/records/adapter.record.js.map +0 -1
- package/src/common/records/app.record.js +0 -9
- package/src/common/records/app.record.js.map +0 -1
- package/src/common/records/auth-provider.record.js +0 -12
- package/src/common/records/auth-provider.record.js.map +0 -1
- package/src/common/records/flow.record.js +0 -8
- package/src/common/records/flow.record.js.map +0 -1
- package/src/common/records/hook.record.js +0 -8
- package/src/common/records/hook.record.js.map +0 -1
- package/src/common/records/index.js +0 -16
- package/src/common/records/index.js.map +0 -1
- package/src/common/records/logger.record.js +0 -8
- package/src/common/records/logger.record.js.map +0 -1
- package/src/common/records/plugin.record.js +0 -11
- package/src/common/records/plugin.record.js.map +0 -1
- package/src/common/records/prompt.record.js +0 -9
- package/src/common/records/prompt.record.js.map +0 -1
- package/src/common/records/provider.record.js +0 -14
- package/src/common/records/provider.record.js.map +0 -1
- package/src/common/records/resource.record.js +0 -20
- package/src/common/records/resource.record.js.map +0 -1
- package/src/common/records/scope.record.js +0 -9
- package/src/common/records/scope.record.js.map +0 -1
- package/src/common/records/tool.record.js +0 -9
- package/src/common/records/tool.record.js.map +0 -1
- package/src/common/schemas/annotated-class.schema.js +0 -109
- package/src/common/schemas/annotated-class.schema.js.map +0 -1
- package/src/common/schemas/http-input.schema.js +0 -13
- package/src/common/schemas/http-input.schema.js.map +0 -1
- package/src/common/schemas/http-output.schema.js +0 -321
- package/src/common/schemas/http-output.schema.js.map +0 -1
- package/src/common/schemas/index.js +0 -8
- package/src/common/schemas/index.js.map +0 -1
- package/src/common/schemas/session-header.schema.js +0 -42
- package/src/common/schemas/session-header.schema.js.map +0 -1
- package/src/common/tokens/adapter.tokens.js +0 -11
- package/src/common/tokens/adapter.tokens.js.map +0 -1
- package/src/common/tokens/app.tokens.js +0 -30
- package/src/common/tokens/app.tokens.js.map +0 -1
- package/src/common/tokens/auth-provider.tokens.js +0 -12
- package/src/common/tokens/auth-provider.tokens.js.map +0 -1
- package/src/common/tokens/base.tokens.js +0 -9
- package/src/common/tokens/base.tokens.js.map +0 -1
- package/src/common/tokens/flow-hook.tokens.js +0 -9
- package/src/common/tokens/flow-hook.tokens.js.map +0 -1
- package/src/common/tokens/flow.tokens.js +0 -16
- package/src/common/tokens/flow.tokens.js.map +0 -1
- package/src/common/tokens/front-mcp.tokens.js +0 -25
- package/src/common/tokens/front-mcp.tokens.js.map +0 -1
- package/src/common/tokens/index.js +0 -17
- package/src/common/tokens/index.js.map +0 -1
- package/src/common/tokens/logger.tokens.js +0 -11
- package/src/common/tokens/logger.tokens.js.map +0 -1
- package/src/common/tokens/plugin.tokens.js +0 -18
- package/src/common/tokens/plugin.tokens.js.map +0 -1
- package/src/common/tokens/prompt.tokens.js +0 -14
- package/src/common/tokens/prompt.tokens.js.map +0 -1
- package/src/common/tokens/provider.tokens.js +0 -12
- package/src/common/tokens/provider.tokens.js.map +0 -1
- package/src/common/tokens/resource.tokens.js +0 -28
- package/src/common/tokens/resource.tokens.js.map +0 -1
- package/src/common/tokens/server.tokens.js +0 -11
- package/src/common/tokens/server.tokens.js.map +0 -1
- package/src/common/tokens/tool.tokens.js +0 -21
- package/src/common/tokens/tool.tokens.js.map +0 -1
- package/src/common/types/auth/index.js +0 -6
- package/src/common/types/auth/index.js.map +0 -1
- package/src/common/types/auth/jwt.types.js +0 -36
- package/src/common/types/auth/jwt.types.js.map +0 -1
- package/src/common/types/auth/session.types.js +0 -53
- package/src/common/types/auth/session.types.js.map +0 -1
- package/src/common/types/common.types.js +0 -3
- package/src/common/types/common.types.js.map +0 -1
- package/src/common/types/index.js +0 -7
- package/src/common/types/index.js.map +0 -1
- package/src/common/types/options/auth.options.d.ts +0 -1266
- package/src/common/types/options/auth.options.js +0 -560
- package/src/common/types/options/auth.options.js.map +0 -1
- package/src/common/types/options/http.options.js +0 -10
- package/src/common/types/options/http.options.js.map +0 -1
- package/src/common/types/options/index.js +0 -11
- package/src/common/types/options/index.js.map +0 -1
- package/src/common/types/options/logging.options.js +0 -33
- package/src/common/types/options/logging.options.js.map +0 -1
- package/src/common/types/options/redis.options.js +0 -191
- package/src/common/types/options/redis.options.js.map +0 -1
- package/src/common/types/options/server-info.options.js +0 -13
- package/src/common/types/options/server-info.options.js.map +0 -1
- package/src/common/types/options/session.options.js +0 -32
- package/src/common/types/options/session.options.js.map +0 -1
- package/src/common/types/options/transport.options.js +0 -121
- package/src/common/types/options/transport.options.js.map +0 -1
- package/src/common/utils/decide-request-intent.utils.js +0 -391
- package/src/common/utils/decide-request-intent.utils.js.map +0 -1
- package/src/common/utils/global-config.utils.js +0 -44
- package/src/common/utils/global-config.utils.js.map +0 -1
- package/src/common/utils/index.js +0 -7
- package/src/common/utils/index.js.map +0 -1
- package/src/common/utils/path.utils.js +0 -66
- package/src/common/utils/path.utils.js.map +0 -1
- package/src/completion/flows/complete.flow.js +0 -199
- package/src/completion/flows/complete.flow.js.map +0 -1
- package/src/context/frontmcp-context-storage.js +0 -183
- package/src/context/frontmcp-context-storage.js.map +0 -1
- package/src/context/frontmcp-context.js +0 -360
- package/src/context/frontmcp-context.js.map +0 -1
- package/src/context/frontmcp-context.provider.js +0 -61
- package/src/context/frontmcp-context.provider.js.map +0 -1
- package/src/context/index.js +0 -64
- package/src/context/index.js.map +0 -1
- package/src/context/request-context-storage.js +0 -183
- package/src/context/request-context-storage.js.map +0 -1
- package/src/context/request-context.js +0 -209
- package/src/context/request-context.js.map +0 -1
- package/src/context/request-context.provider.js +0 -51
- package/src/context/request-context.provider.js.map +0 -1
- package/src/context/session-key.provider.js +0 -65
- package/src/context/session-key.provider.js.map +0 -1
- package/src/context/trace-context.js +0 -142
- package/src/context/trace-context.js.map +0 -1
- package/src/errors/authorization-required.error.js +0 -274
- package/src/errors/authorization-required.error.js.map +0 -1
- package/src/errors/error-handler.js +0 -107
- package/src/errors/error-handler.js.map +0 -1
- package/src/errors/index.js +0 -45
- package/src/errors/index.js.map +0 -1
- package/src/errors/mcp.error.js +0 -416
- package/src/errors/mcp.error.js.map +0 -1
- package/src/exceptions/mcp-exceptions/session-missing.exception.js +0 -11
- package/src/exceptions/mcp-exceptions/session-missing.exception.js.map +0 -1
- package/src/exceptions/mcp-exceptions/unsupported-client-version.exception.js +0 -15
- package/src/exceptions/mcp-exceptions/unsupported-client-version.exception.js.map +0 -1
- package/src/flows/flow.instance.js +0 -420
- package/src/flows/flow.instance.js.map +0 -1
- package/src/flows/flow.registry.js +0 -121
- package/src/flows/flow.registry.js.map +0 -1
- package/src/flows/flow.stages.js +0 -113
- package/src/flows/flow.stages.js.map +0 -1
- package/src/flows/flow.utils.js +0 -36
- package/src/flows/flow.utils.js.map +0 -1
- package/src/front-mcp/front-mcp.js +0 -63
- package/src/front-mcp/front-mcp.js.map +0 -1
- package/src/front-mcp/front-mcp.providers.js +0 -29
- package/src/front-mcp/front-mcp.providers.js.map +0 -1
- package/src/front-mcp/front-mcp.tokens.js +0 -5
- package/src/front-mcp/front-mcp.tokens.js.map +0 -1
- package/src/front-mcp/index.js +0 -8
- package/src/front-mcp/index.js.map +0 -1
- package/src/front-mcp/serverless-handler.js +0 -61
- package/src/front-mcp/serverless-handler.js.map +0 -1
- package/src/hooks/hook.instance.js +0 -26
- package/src/hooks/hook.instance.js.map +0 -1
- package/src/hooks/hook.registry.js +0 -152
- package/src/hooks/hook.registry.js.map +0 -1
- package/src/hooks/hooks.utils.js +0 -34
- package/src/hooks/hooks.utils.js.map +0 -1
- package/src/index.js +0 -37
- package/src/index.js.map +0 -1
- package/src/logger/instances/instance.console-logger.js +0 -75
- package/src/logger/instances/instance.console-logger.js.map +0 -1
- package/src/logger/instances/instance.logger.js +0 -77
- package/src/logger/instances/instance.logger.js.map +0 -1
- package/src/logger/logger.registry.js +0 -96
- package/src/logger/logger.registry.js.map +0 -1
- package/src/logger/logger.tokens.js +0 -3
- package/src/logger/logger.tokens.js.map +0 -1
- package/src/logger/logger.types.js +0 -8
- package/src/logger/logger.types.js.map +0 -1
- package/src/logger/logger.utils.js +0 -42
- package/src/logger/logger.utils.js.map +0 -1
- package/src/logging/flows/set-level.flow.js +0 -108
- package/src/logging/flows/set-level.flow.js.map +0 -1
- package/src/mcp-apps/csp.js +0 -267
- package/src/mcp-apps/csp.js.map +0 -1
- package/src/mcp-apps/index.js +0 -91
- package/src/mcp-apps/index.js.map +0 -1
- package/src/mcp-apps/schemas.js +0 -345
- package/src/mcp-apps/schemas.js.map +0 -1
- package/src/mcp-apps/template.js +0 -419
- package/src/mcp-apps/template.js.map +0 -1
- package/src/mcp-apps/types.js +0 -59
- package/src/mcp-apps/types.js.map +0 -1
- package/src/notification/index.js +0 -13
- package/src/notification/index.js.map +0 -1
- package/src/notification/notification.service.js +0 -731
- package/src/notification/notification.service.js.map +0 -1
- package/src/plugin/plugin.registry.js +0 -152
- package/src/plugin/plugin.registry.js.map +0 -1
- package/src/plugin/plugin.utils.js +0 -88
- package/src/plugin/plugin.utils.js.map +0 -1
- package/src/prompt/flows/get-prompt.flow.js +0 -214
- package/src/prompt/flows/get-prompt.flow.js.map +0 -1
- package/src/prompt/flows/prompts-list.flow.js +0 -176
- package/src/prompt/flows/prompts-list.flow.js.map +0 -1
- package/src/prompt/index.js +0 -17
- package/src/prompt/index.js.map +0 -1
- package/src/prompt/prompt.events.js +0 -25
- package/src/prompt/prompt.events.js.map +0 -1
- package/src/prompt/prompt.instance.js +0 -120
- package/src/prompt/prompt.instance.js.map +0 -1
- package/src/prompt/prompt.registry.js +0 -380
- package/src/prompt/prompt.registry.js.map +0 -1
- package/src/prompt/prompt.types.js +0 -11
- package/src/prompt/prompt.types.js.map +0 -1
- package/src/prompt/prompt.utils.js +0 -136
- package/src/prompt/prompt.utils.js.map +0 -1
- package/src/provider/provider.registry.js +0 -868
- package/src/provider/provider.registry.js.map +0 -1
- package/src/provider/provider.types.js +0 -3
- package/src/provider/provider.types.js.map +0 -1
- package/src/provider/provider.utils.js +0 -103
- package/src/provider/provider.utils.js.map +0 -1
- package/src/regsitry/index.js +0 -5
- package/src/regsitry/index.js.map +0 -1
- package/src/regsitry/registry.base.js +0 -32
- package/src/regsitry/registry.base.js.map +0 -1
- package/src/resource/flows/read-resource.flow.js +0 -270
- package/src/resource/flows/read-resource.flow.js.map +0 -1
- package/src/resource/flows/resource-templates-list.flow.js +0 -191
- package/src/resource/flows/resource-templates-list.flow.js.map +0 -1
- package/src/resource/flows/resources-list.flow.js +0 -196
- package/src/resource/flows/resources-list.flow.js.map +0 -1
- package/src/resource/flows/subscribe-resource.flow.js +0 -123
- package/src/resource/flows/subscribe-resource.flow.js.map +0 -1
- package/src/resource/flows/unsubscribe-resource.flow.js +0 -107
- package/src/resource/flows/unsubscribe-resource.flow.js.map +0 -1
- package/src/resource/index.js +0 -20
- package/src/resource/index.js.map +0 -1
- package/src/resource/resource.events.js +0 -17
- package/src/resource/resource.events.js.map +0 -1
- package/src/resource/resource.instance.js +0 -163
- package/src/resource/resource.instance.js.map +0 -1
- package/src/resource/resource.registry.js +0 -468
- package/src/resource/resource.registry.js.map +0 -1
- package/src/resource/resource.types.js +0 -11
- package/src/resource/resource.types.js.map +0 -1
- package/src/resource/resource.utils.js +0 -151
- package/src/resource/resource.utils.js.map +0 -1
- package/src/scope/flows/http.request.flow.js +0 -474
- package/src/scope/flows/http.request.flow.js.map +0 -1
- package/src/scope/index.js +0 -6
- package/src/scope/index.js.map +0 -1
- package/src/scope/scope.instance.js +0 -263
- package/src/scope/scope.instance.js.map +0 -1
- package/src/scope/scope.registry.js +0 -94
- package/src/scope/scope.registry.js.map +0 -1
- package/src/scope/scope.utils.js +0 -61
- package/src/scope/scope.utils.js.map +0 -1
- package/src/server/adapters/base.host.adapter.js +0 -8
- package/src/server/adapters/base.host.adapter.js.map +0 -1
- package/src/server/adapters/express.host.adapter.js +0 -70
- package/src/server/adapters/express.host.adapter.js.map +0 -1
- package/src/server/server.instance.js +0 -54
- package/src/server/server.instance.js.map +0 -1
- package/src/server/server.types.js +0 -3
- package/src/server/server.types.js.map +0 -1
- package/src/server/server.validation.js +0 -192
- package/src/server/server.validation.js.map +0 -1
- package/src/store/adapters/store.base.adapter.js +0 -16
- package/src/store/adapters/store.base.adapter.js.map +0 -1
- package/src/store/adapters/store.memory.adapter.js +0 -89
- package/src/store/adapters/store.memory.adapter.js.map +0 -1
- package/src/store/adapters/store.redis.adapter.js +0 -104
- package/src/store/adapters/store.redis.adapter.js.map +0 -1
- package/src/store/adapters/store.vercel-kv.adapter.js +0 -155
- package/src/store/adapters/store.vercel-kv.adapter.js.map +0 -1
- package/src/store/index.js +0 -14
- package/src/store/index.js.map +0 -1
- package/src/store/store.factory.js +0 -194
- package/src/store/store.factory.js.map +0 -1
- package/src/store/store.helpers.js +0 -67
- package/src/store/store.helpers.js.map +0 -1
- package/src/store/store.registry.js +0 -37
- package/src/store/store.registry.js.map +0 -1
- package/src/store/store.tokens.js +0 -7
- package/src/store/store.tokens.js.map +0 -1
- package/src/store/store.types.js +0 -11
- package/src/store/store.types.js.map +0 -1
- package/src/store/store.utils.js +0 -18
- package/src/store/store.utils.js.map +0 -1
- package/src/tool/flows/call-tool.flow.js +0 -616
- package/src/tool/flows/call-tool.flow.js.map +0 -1
- package/src/tool/flows/tools-list.flow.js +0 -328
- package/src/tool/flows/tools-list.flow.js.map +0 -1
- package/src/tool/tool.events.js +0 -16
- package/src/tool/tool.events.js.map +0 -1
- package/src/tool/tool.instance.js +0 -117
- package/src/tool/tool.instance.js.map +0 -1
- package/src/tool/tool.registry.js +0 -353
- package/src/tool/tool.registry.js.map +0 -1
- package/src/tool/tool.types.js +0 -10
- package/src/tool/tool.types.js.map +0 -1
- package/src/tool/tool.utils.js +0 -366
- package/src/tool/tool.utils.js.map +0 -1
- package/src/tool/ui/index.js +0 -63
- package/src/tool/ui/index.js.map +0 -1
- package/src/tool/ui/platform-adapters.js +0 -18
- package/src/tool/ui/platform-adapters.js.map +0 -1
- package/src/tool/ui/template-helpers.js +0 -95
- package/src/tool/ui/template-helpers.js.map +0 -1
- package/src/tool/ui/ui-resource-template.js +0 -64
- package/src/tool/ui/ui-resource-template.js.map +0 -1
- package/src/tool/ui/ui-resource.handler.js +0 -129
- package/src/tool/ui/ui-resource.handler.js.map +0 -1
- package/src/transport/adapters/transport.local.adapter.js +0 -148
- package/src/transport/adapters/transport.local.adapter.js.map +0 -1
- package/src/transport/adapters/transport.sse.adapter.js +0 -65
- package/src/transport/adapters/transport.sse.adapter.js.map +0 -1
- package/src/transport/adapters/transport.streamable-http.adapter.js +0 -112
- package/src/transport/adapters/transport.streamable-http.adapter.js.map +0 -1
- package/src/transport/flows/handle.sse.flow.js +0 -197
- package/src/transport/flows/handle.sse.flow.js.map +0 -1
- package/src/transport/flows/handle.stateless-http.flow.js +0 -102
- package/src/transport/flows/handle.stateless-http.flow.js.map +0 -1
- package/src/transport/flows/handle.streamable-http.flow.js +0 -315
- package/src/transport/flows/handle.streamable-http.flow.js.map +0 -1
- package/src/transport/legacy/legacy.sse.tranporter.js +0 -185
- package/src/transport/legacy/legacy.sse.tranporter.js.map +0 -1
- package/src/transport/mcp-handlers/Initialized-notification.hanlder.js +0 -14
- package/src/transport/mcp-handlers/Initialized-notification.hanlder.js.map +0 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js +0 -46
- package/src/transport/mcp-handlers/call-tool-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/complete-request.handler.js +0 -11
- package/src/transport/mcp-handlers/complete-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/get-prompt-request.handler.js +0 -11
- package/src/transport/mcp-handlers/get-prompt-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/index.js +0 -57
- package/src/transport/mcp-handlers/index.js.map +0 -1
- package/src/transport/mcp-handlers/initialize-request.handler.js +0 -109
- package/src/transport/mcp-handlers/initialize-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/list-prompts-request.handler.js +0 -11
- package/src/transport/mcp-handlers/list-prompts-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js +0 -12
- package/src/transport/mcp-handlers/list-resource-templates-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/list-resources-request.handler.js +0 -12
- package/src/transport/mcp-handlers/list-resources-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/list-tools-request.handler.js +0 -11
- package/src/transport/mcp-handlers/list-tools-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js +0 -34
- package/src/transport/mcp-handlers/logging-set-level-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/mcp-handlers.types.js +0 -3
- package/src/transport/mcp-handlers/mcp-handlers.types.js.map +0 -1
- package/src/transport/mcp-handlers/read-resource-request.handler.js +0 -12
- package/src/transport/mcp-handlers/read-resource-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js +0 -26
- package/src/transport/mcp-handlers/roots-list-changed-notification.handler.js.map +0 -1
- package/src/transport/mcp-handlers/subscribe-request.handler.js +0 -34
- package/src/transport/mcp-handlers/subscribe-request.handler.js.map +0 -1
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js +0 -34
- package/src/transport/mcp-handlers/unsubscribe-request.handler.js.map +0 -1
- package/src/transport/transport.error.js +0 -25
- package/src/transport/transport.error.js.map +0 -1
- package/src/transport/transport.event-store.js +0 -36
- package/src/transport/transport.event-store.js.map +0 -1
- package/src/transport/transport.local.js +0 -71
- package/src/transport/transport.local.js.map +0 -1
- package/src/transport/transport.registry.js +0 -552
- package/src/transport/transport.registry.js.map +0 -1
- package/src/transport/transport.remote.js +0 -31
- package/src/transport/transport.remote.js.map +0 -1
- package/src/transport/transport.types.js +0 -3
- package/src/transport/transport.types.js.map +0 -1
- package/src/types/drinen-hooks.types.js +0 -3
- package/src/types/drinen-hooks.types.js.map +0 -1
- package/src/types/invoke.type.js +0 -34
- package/src/types/invoke.type.js.map +0 -1
- package/src/types/token.types.js +0 -3
- package/src/types/token.types.js.map +0 -1
- package/src/utils/content.utils.js +0 -194
- package/src/utils/content.utils.js.map +0 -1
- package/src/utils/index.js +0 -55
- package/src/utils/index.js.map +0 -1
- package/src/utils/lineage.utils.js +0 -82
- package/src/utils/lineage.utils.js.map +0 -1
- package/src/utils/metadata.utils.js +0 -26
- package/src/utils/metadata.utils.js.map +0 -1
- package/src/utils/naming.utils.js +0 -136
- package/src/utils/naming.utils.js.map +0 -1
- package/src/utils/server.utils.js +0 -59
- package/src/utils/server.utils.js.map +0 -1
- package/src/utils/string.utils.js +0 -10
- package/src/utils/string.utils.js.map +0 -1
- package/src/utils/token.utils.js +0 -65
- package/src/utils/token.utils.js.map +0 -1
- package/src/utils/types.utils.js +0 -3
- package/src/utils/types.utils.js.map +0 -1
- package/src/utils/uri-template.utils.js +0 -113
- package/src/utils/uri-template.utils.js.map +0 -1
- package/src/utils/uri-validation.utils.js +0 -76
- package/src/utils/uri-validation.utils.js.map +0 -1
- package/{src/adapter → adapter}/adapter.instance.d.ts +0 -0
- package/{src/adapter → adapter}/adapter.regsitry.d.ts +0 -0
- package/{src/adapter → adapter}/adapter.utils.d.ts +0 -0
- package/{src/app → app}/app.registry.d.ts +0 -0
- package/{src/app → app}/app.utils.d.ts +0 -0
- package/{src/app → app}/instances/app.local.instance.d.ts +0 -0
- package/{src/app → app}/instances/app.remote.instance.d.ts +0 -0
- package/{src/app → app}/instances/index.d.ts +0 -0
- package/{src/auth → auth}/auth.registry.d.ts +0 -0
- package/{src/auth → auth}/auth.utils.d.ts +0 -0
- package/{src/auth → auth}/authorization/authorization.class.d.ts +0 -0
- package/{src/auth → auth}/authorization/authorization.types.d.ts +0 -0
- package/{src/auth → auth}/authorization/index.d.ts +0 -0
- package/{src/auth → auth}/authorization/orchestrated.authorization.d.ts +0 -0
- package/{src/auth → auth}/authorization/public.authorization.d.ts +0 -0
- package/{src/auth → auth}/authorization/transparent.authorization.d.ts +0 -0
- package/{src/auth → auth}/consent/consent.types.d.ts +0 -0
- package/{src/auth → auth}/consent/index.d.ts +0 -0
- package/{src/auth → auth}/detection/auth-provider-detection.d.ts +0 -0
- package/{src/auth → auth}/detection/index.d.ts +0 -0
- package/{src/auth → auth}/flows/auth.verify.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/oauth.authorize.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/oauth.callback.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/oauth.register.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/oauth.token.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/session.verify.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/well-known.jwks.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/well-known.oauth-authorization-server.flow.d.ts +0 -0
- package/{src/auth → auth}/flows/well-known.prm.flow.d.ts +0 -0
- package/{src/auth → auth}/jwks/dev-key-persistence.d.ts +0 -0
- package/{src/auth → auth}/jwks/index.d.ts +0 -0
- package/{src/auth → auth}/jwks/jwks.service.d.ts +0 -0
- package/{src/auth → auth}/jwks/jwks.types.d.ts +0 -0
- package/{src/auth → auth}/jwks/jwks.utils.d.ts +0 -0
- package/{src/auth → auth}/machine-id.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.authorize.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.device-authorization.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.introspect.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.par.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.revoke.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.token.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oauth.userinfo.flow.d.ts +0 -0
- package/{src/auth → auth}/oauth/flows/oidc.logout.flow.d.ts +0 -0
- package/{src/auth → auth}/session/authorization-vault.d.ts +0 -0
- package/{src/auth → auth}/session/authorization.store.d.ts +0 -0
- package/{src/auth → auth}/session/encrypted-authorization-vault.d.ts +0 -0
- package/{src/auth → auth}/session/index.d.ts +0 -0
- package/{src/auth → auth}/session/record/session.base.d.ts +0 -0
- package/{src/auth → auth}/session/record/session.stateful.d.ts +0 -0
- package/{src/auth → auth}/session/record/session.stateless.d.ts +0 -0
- package/{src/auth → auth}/session/record/session.transparent.d.ts +0 -0
- package/{src/auth → auth}/session/redis-session.store.d.ts +0 -0
- package/{src/auth → auth}/session/session.crypto.d.ts +0 -0
- package/{src/auth → auth}/session/session.schema.d.ts +0 -0
- package/{src/auth → auth}/session/session.service.d.ts +0 -0
- package/{src/auth → auth}/session/session.transport.d.ts +0 -0
- package/{src/auth → auth}/session/session.types.d.ts +0 -0
- package/{src/auth → auth}/session/token.refresh.d.ts +0 -0
- package/{src/auth → auth}/session/token.store.d.ts +0 -0
- package/{src/auth → auth}/session/token.vault.d.ts +0 -0
- package/{src/auth → auth}/session/transport-session.manager.d.ts +0 -0
- package/{src/auth → auth}/session/transport-session.types.d.ts +0 -0
- package/{src/auth → auth}/session/utils/auth-token.utils.d.ts +0 -0
- package/{src/auth → auth}/session/utils/session-id.utils.d.ts +0 -0
- package/{src/auth → auth}/session/utils/tiny-ttl-cache.d.ts +0 -0
- package/{src/auth → auth}/session/vault-encryption.d.ts +0 -0
- package/{src/auth → auth}/session/vercel-kv-session.store.d.ts +0 -0
- package/{src/auth → auth}/ui/base-layout.d.ts +0 -0
- package/{src/auth → auth}/ui/index.d.ts +0 -0
- package/{src/auth → auth}/ui/templates.d.ts +0 -0
- package/{src/auth → auth}/utils/audience.validator.d.ts +0 -0
- package/{src/auth → auth}/utils/index.d.ts +0 -0
- package/{src/auth → auth}/utils/www-authenticate.utils.d.ts +0 -0
- package/{src/common → common}/common.schema.d.ts +0 -0
- package/{src/common → common}/constants.d.ts +0 -0
- package/{src/common → common}/decorators/adapter.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/app.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/auth-provider.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/decorator-utils.d.ts +0 -0
- package/{src/common → common}/decorators/flow.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/front-mcp.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/hook.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/index.d.ts +0 -0
- package/{src/common → common}/decorators/logger.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/plugin.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/prompt.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/provider.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/resource.decorator.d.ts +0 -0
- package/{src/common → common}/decorators/tool.decorator.d.ts +0 -0
- package/{src/common → common}/dynamic/dynamic.adapter.d.ts +0 -0
- package/{src/common → common}/dynamic/dynamic.plugin.d.ts +0 -0
- package/{src/common → common}/dynamic/dynamic.utils.d.ts +0 -0
- package/{src/common → common}/dynamic/index.d.ts +0 -0
- package/{src/common → common}/entries/adapter.entry.d.ts +0 -0
- package/{src/common → common}/entries/app.entry.d.ts +0 -0
- package/{src/common → common}/entries/auth-provider.entry.d.ts +0 -0
- package/{src/common → common}/entries/base.entry.d.ts +0 -0
- package/{src/common → common}/entries/flow.entry.d.ts +0 -0
- package/{src/common → common}/entries/hook.entry.d.ts +0 -0
- package/{src/common → common}/entries/index.d.ts +0 -0
- package/{src/common → common}/entries/logger.entry.d.ts +0 -0
- package/{src/common → common}/entries/plugin.entry.d.ts +0 -0
- package/{src/common → common}/entries/prompt.entry.d.ts +0 -0
- package/{src/common → common}/entries/provider.entry.d.ts +0 -0
- package/{src/common → common}/entries/resource.entry.d.ts +0 -0
- package/{src/common → common}/entries/scope.entry.d.ts +0 -0
- package/{src/common → common}/entries/tool.entry.d.ts +0 -0
- package/{src/common → common}/flow/flow.utils.d.ts +0 -0
- package/{src/common → common}/index.d.ts +0 -0
- package/{src/common → common}/interfaces/adapter.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/app.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/auth-hook.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/auth-provider.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/base.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/execution-context.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/flow.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/front-mcp.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/hook.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/index.d.ts +0 -0
- package/{src/common → common}/interfaces/internal/flow.utils.d.ts +0 -0
- package/{src/common → common}/interfaces/internal/index.d.ts +0 -0
- package/{src/common → common}/interfaces/internal/registry.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/logger.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/plugin.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/prompt.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/provider.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/resource.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/scope.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/server.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/session-hook.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/tool-hook.interface.d.ts +0 -0
- package/{src/common → common}/interfaces/tool.interface.d.ts +0 -0
- package/{src/common → common}/metadata/adapter.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/app.metadata.d.ts +42 -42
- package/{src/common → common}/metadata/auth-provider.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/flow.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/hook.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/index.d.ts +0 -0
- package/{src/common → common}/metadata/logger.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/plugin.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/prompt.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/provider.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/resource.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/tool-ui.metadata.d.ts +0 -0
- package/{src/common → common}/metadata/tool.metadata.d.ts +0 -0
- package/{src/common → common}/migrate/auth-transport.migrate.d.ts +0 -0
- package/{src/common → common}/migrate/index.d.ts +0 -0
- package/{src/common → common}/providers/base-config.provider.d.ts +0 -0
- package/{src/common → common}/records/adapter.record.d.ts +0 -0
- package/{src/common → common}/records/app.record.d.ts +0 -0
- package/{src/common → common}/records/auth-provider.record.d.ts +0 -0
- package/{src/common → common}/records/flow.record.d.ts +0 -0
- package/{src/common → common}/records/hook.record.d.ts +0 -0
- package/{src/common → common}/records/index.d.ts +0 -0
- package/{src/common → common}/records/logger.record.d.ts +0 -0
- package/{src/common → common}/records/plugin.record.d.ts +0 -0
- package/{src/common → common}/records/prompt.record.d.ts +0 -0
- package/{src/common → common}/records/provider.record.d.ts +0 -0
- package/{src/common → common}/records/resource.record.d.ts +0 -0
- package/{src/common → common}/records/scope.record.d.ts +0 -0
- package/{src/common → common}/records/tool.record.d.ts +0 -0
- package/{src/common → common}/schemas/annotated-class.schema.d.ts +0 -0
- package/{src/common → common}/schemas/http-input.schema.d.ts +0 -0
- package/{src/common → common}/schemas/http-output.schema.d.ts +0 -0
- package/{src/common → common}/schemas/index.d.ts +0 -0
- package/{src/common → common}/schemas/session-header.schema.d.ts +0 -0
- package/{src/common → common}/tokens/adapter.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/app.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/auth-provider.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/base.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/flow-hook.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/flow.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/front-mcp.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/index.d.ts +0 -0
- package/{src/common → common}/tokens/logger.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/plugin.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/prompt.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/provider.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/resource.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/server.tokens.d.ts +0 -0
- package/{src/common → common}/tokens/tool.tokens.d.ts +0 -0
- package/{src/common → common}/types/auth/index.d.ts +0 -0
- package/{src/common → common}/types/auth/jwt.types.d.ts +0 -0
- package/{src/common → common}/types/auth/session.types.d.ts +0 -0
- package/{src/common → common}/types/common.types.d.ts +0 -0
- package/{src/common → common}/types/index.d.ts +0 -0
- package/{src/logger/logger.tokens.d.ts → common/types/options/auth/auth.typecheck.d.ts} +0 -0
- package/{src/common → common}/types/options/http.options.d.ts +0 -0
- package/{src/common → common}/types/options/logging.options.d.ts +0 -0
- package/{src/common → common}/types/options/redis.options.d.ts +0 -0
- package/{src/common → common}/types/options/server-info.options.d.ts +0 -0
- package/{src/common → common}/types/options/session.options.d.ts +0 -0
- package/{src/common → common}/utils/global-config.utils.d.ts +0 -0
- package/{src/common → common}/utils/index.d.ts +0 -0
- package/{src/common → common}/utils/path.utils.d.ts +0 -0
- package/{src/completion → completion}/flows/complete.flow.d.ts +0 -0
- package/{src/context → context}/frontmcp-context-storage.d.ts +0 -0
- package/{src/context → context}/frontmcp-context.d.ts +0 -0
- package/{src/context → context}/frontmcp-context.provider.d.ts +0 -0
- package/{src/context → context}/index.d.ts +0 -0
- package/{src/context → context}/request-context-storage.d.ts +0 -0
- package/{src/context → context}/request-context.d.ts +0 -0
- package/{src/context → context}/request-context.provider.d.ts +0 -0
- package/{src/context → context}/session-key.provider.d.ts +0 -0
- package/{src/context → context}/trace-context.d.ts +0 -0
- package/{src/errors → errors}/authorization-required.error.d.ts +0 -0
- package/{src/errors → errors}/error-handler.d.ts +0 -0
- package/{src/errors → errors}/index.d.ts +0 -0
- package/{src/errors → errors}/mcp.error.d.ts +0 -0
- package/{src/exceptions → exceptions}/mcp-exceptions/session-missing.exception.d.ts +0 -0
- package/{src/exceptions → exceptions}/mcp-exceptions/unsupported-client-version.exception.d.ts +0 -0
- package/{src/flows → flows}/flow.instance.d.ts +0 -0
- package/{src/flows → flows}/flow.registry.d.ts +0 -0
- package/{src/flows → flows}/flow.stages.d.ts +0 -0
- package/{src/flows → flows}/flow.utils.d.ts +0 -0
- package/{src/front-mcp → front-mcp}/front-mcp.d.ts +0 -0
- package/{src/front-mcp → front-mcp}/front-mcp.providers.d.ts +38 -38
- /package/{src/front-mcp → front-mcp}/front-mcp.tokens.d.ts +0 -0
- /package/{src/front-mcp → front-mcp}/index.d.ts +0 -0
- /package/{src/front-mcp → front-mcp}/serverless-handler.d.ts +0 -0
- /package/{src/hooks → hooks}/hook.instance.d.ts +0 -0
- /package/{src/hooks → hooks}/hook.registry.d.ts +0 -0
- /package/{src/hooks → hooks}/hooks.utils.d.ts +0 -0
- /package/{src/index.d.ts → index.d.ts} +0 -0
- /package/{src/logger → logger}/instances/instance.console-logger.d.ts +0 -0
- /package/{src/logger → logger}/instances/instance.logger.d.ts +0 -0
- /package/{src/logger → logger}/logger.registry.d.ts +0 -0
- /package/{src/logger → logger}/logger.types.d.ts +0 -0
- /package/{src/logger → logger}/logger.utils.d.ts +0 -0
- /package/{src/logging → logging}/flows/set-level.flow.d.ts +0 -0
- /package/{src/mcp-apps → mcp-apps}/csp.d.ts +0 -0
- /package/{src/mcp-apps → mcp-apps}/index.d.ts +0 -0
- /package/{src/mcp-apps → mcp-apps}/schemas.d.ts +0 -0
- /package/{src/mcp-apps → mcp-apps}/template.d.ts +0 -0
- /package/{src/mcp-apps → mcp-apps}/types.d.ts +0 -0
- /package/{src/notification → notification}/index.d.ts +0 -0
- /package/{src/notification → notification}/notification.service.d.ts +0 -0
- /package/{src/plugin → plugin}/plugin.registry.d.ts +0 -0
- /package/{src/plugin → plugin}/plugin.utils.d.ts +0 -0
- /package/{src/prompt → prompt}/flows/get-prompt.flow.d.ts +0 -0
- /package/{src/prompt → prompt}/flows/prompts-list.flow.d.ts +0 -0
- /package/{src/prompt → prompt}/index.d.ts +0 -0
- /package/{src/prompt → prompt}/prompt.events.d.ts +0 -0
- /package/{src/prompt → prompt}/prompt.instance.d.ts +0 -0
- /package/{src/prompt → prompt}/prompt.registry.d.ts +0 -0
- /package/{src/prompt → prompt}/prompt.types.d.ts +0 -0
- /package/{src/prompt → prompt}/prompt.utils.d.ts +0 -0
- /package/{src/provider → provider}/provider.registry.d.ts +0 -0
- /package/{src/provider → provider}/provider.types.d.ts +0 -0
- /package/{src/provider → provider}/provider.utils.d.ts +0 -0
- /package/{src/regsitry → regsitry}/index.d.ts +0 -0
- /package/{src/regsitry → regsitry}/registry.base.d.ts +0 -0
- /package/{src/resource → resource}/flows/read-resource.flow.d.ts +0 -0
- /package/{src/resource → resource}/flows/resource-templates-list.flow.d.ts +0 -0
- /package/{src/resource → resource}/flows/resources-list.flow.d.ts +0 -0
- /package/{src/resource → resource}/flows/subscribe-resource.flow.d.ts +0 -0
- /package/{src/resource → resource}/flows/unsubscribe-resource.flow.d.ts +0 -0
- /package/{src/resource → resource}/index.d.ts +0 -0
- /package/{src/resource → resource}/resource.events.d.ts +0 -0
- /package/{src/resource → resource}/resource.instance.d.ts +0 -0
- /package/{src/resource → resource}/resource.registry.d.ts +0 -0
- /package/{src/resource → resource}/resource.types.d.ts +0 -0
- /package/{src/resource → resource}/resource.utils.d.ts +0 -0
- /package/{src/scope → scope}/flows/http.request.flow.d.ts +0 -0
- /package/{src/scope → scope}/index.d.ts +0 -0
- /package/{src/scope → scope}/scope.instance.d.ts +0 -0
- /package/{src/scope → scope}/scope.registry.d.ts +0 -0
- /package/{src/scope → scope}/scope.utils.d.ts +0 -0
- /package/{src/server → server}/adapters/base.host.adapter.d.ts +0 -0
- /package/{src/server → server}/adapters/express.host.adapter.d.ts +0 -0
- /package/{src/server → server}/server.instance.d.ts +0 -0
- /package/{src/server → server}/server.types.d.ts +0 -0
- /package/{src/server → server}/server.validation.d.ts +0 -0
- /package/{src/store → store}/adapters/store.base.adapter.d.ts +0 -0
- /package/{src/store → store}/adapters/store.memory.adapter.d.ts +0 -0
- /package/{src/store → store}/adapters/store.redis.adapter.d.ts +0 -0
- /package/{src/store → store}/adapters/store.vercel-kv.adapter.d.ts +0 -0
- /package/{src/store → store}/index.d.ts +0 -0
- /package/{src/store → store}/store.factory.d.ts +0 -0
- /package/{src/store → store}/store.helpers.d.ts +0 -0
- /package/{src/store → store}/store.registry.d.ts +0 -0
- /package/{src/store → store}/store.tokens.d.ts +0 -0
- /package/{src/store → store}/store.types.d.ts +0 -0
- /package/{src/store → store}/store.utils.d.ts +0 -0
- /package/{src/tool → tool}/flows/call-tool.flow.d.ts +0 -0
- /package/{src/tool → tool}/flows/tools-list.flow.d.ts +0 -0
- /package/{src/tool → tool}/tool.events.d.ts +0 -0
- /package/{src/tool → tool}/tool.instance.d.ts +0 -0
- /package/{src/tool → tool}/tool.registry.d.ts +0 -0
- /package/{src/tool → tool}/tool.types.d.ts +0 -0
- /package/{src/tool → tool}/tool.utils.d.ts +0 -0
- /package/{src/tool → tool}/ui/index.d.ts +0 -0
- /package/{src/tool → tool}/ui/platform-adapters.d.ts +0 -0
- /package/{src/tool → tool}/ui/template-helpers.d.ts +0 -0
- /package/{src/tool → tool}/ui/ui-resource-template.d.ts +0 -0
- /package/{src/tool → tool}/ui/ui-resource.handler.d.ts +0 -0
- /package/{src/transport → transport}/adapters/transport.local.adapter.d.ts +0 -0
- /package/{src/transport → transport}/adapters/transport.sse.adapter.d.ts +0 -0
- /package/{src/transport → transport}/adapters/transport.streamable-http.adapter.d.ts +0 -0
- /package/{src/transport → transport}/flows/handle.sse.flow.d.ts +0 -0
- /package/{src/transport → transport}/flows/handle.stateless-http.flow.d.ts +0 -0
- /package/{src/transport → transport}/flows/handle.streamable-http.flow.d.ts +0 -0
- /package/{src/transport → transport}/legacy/legacy.sse.tranporter.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/Initialized-notification.hanlder.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/call-tool-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/complete-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/get-prompt-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/index.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/initialize-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/list-prompts-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/list-resource-templates-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/list-resources-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/list-tools-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/logging-set-level-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/mcp-handlers.types.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/read-resource-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/roots-list-changed-notification.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/subscribe-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/mcp-handlers/unsubscribe-request.handler.d.ts +0 -0
- /package/{src/transport → transport}/transport.error.d.ts +0 -0
- /package/{src/transport → transport}/transport.event-store.d.ts +0 -0
- /package/{src/transport → transport}/transport.local.d.ts +0 -0
- /package/{src/transport → transport}/transport.registry.d.ts +0 -0
- /package/{src/transport → transport}/transport.remote.d.ts +0 -0
- /package/{src/transport → transport}/transport.types.d.ts +0 -0
- /package/{src/types → types}/drinen-hooks.types.d.ts +0 -0
- /package/{src/types → types}/invoke.type.d.ts +0 -0
- /package/{src/types → types}/token.types.d.ts +0 -0
- /package/{src/utils → utils}/content.utils.d.ts +0 -0
- /package/{src/utils → utils}/index.d.ts +0 -0
- /package/{src/utils → utils}/lineage.utils.d.ts +0 -0
- /package/{src/utils → utils}/metadata.utils.d.ts +0 -0
- /package/{src/utils → utils}/naming.utils.d.ts +0 -0
- /package/{src/utils → utils}/server.utils.d.ts +0 -0
- /package/{src/utils → utils}/string.utils.d.ts +0 -0
- /package/{src/utils → utils}/token.utils.d.ts +0 -0
- /package/{src/utils → utils}/types.utils.d.ts +0 -0
- /package/{src/utils → utils}/uri-template.utils.d.ts +0 -0
- /package/{src/utils → utils}/uri-validation.utils.d.ts +0 -0
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// auth/session/transport-session.manager.ts
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.TransportSessionManager = exports.InMemorySessionStore = void 0;
|
|
5
|
-
const crypto_1 = require("crypto");
|
|
6
|
-
const session_id_utils_1 = require("./utils/session-id.utils");
|
|
7
|
-
const session_crypto_1 = require("./session.crypto");
|
|
8
|
-
const authorization_class_1 = require("../authorization/authorization.class");
|
|
9
|
-
const redis_session_store_1 = require("./redis-session.store");
|
|
10
|
-
/**
|
|
11
|
-
* In-memory session store implementation
|
|
12
|
-
*/
|
|
13
|
-
class InMemorySessionStore {
|
|
14
|
-
sessions = new Map();
|
|
15
|
-
async get(sessionId) {
|
|
16
|
-
const stored = this.sessions.get(sessionId);
|
|
17
|
-
if (!stored)
|
|
18
|
-
return null;
|
|
19
|
-
// Check expiration
|
|
20
|
-
if (stored.session.expiresAt && stored.session.expiresAt < Date.now()) {
|
|
21
|
-
this.sessions.delete(sessionId);
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
// Update last accessed
|
|
25
|
-
stored.lastAccessedAt = Date.now();
|
|
26
|
-
return stored;
|
|
27
|
-
}
|
|
28
|
-
async set(sessionId, session, ttlMs) {
|
|
29
|
-
if (ttlMs) {
|
|
30
|
-
session.session.expiresAt = Date.now() + ttlMs;
|
|
31
|
-
}
|
|
32
|
-
this.sessions.set(sessionId, session);
|
|
33
|
-
}
|
|
34
|
-
async delete(sessionId) {
|
|
35
|
-
this.sessions.delete(sessionId);
|
|
36
|
-
}
|
|
37
|
-
async exists(sessionId) {
|
|
38
|
-
const stored = this.sessions.get(sessionId);
|
|
39
|
-
if (!stored)
|
|
40
|
-
return false;
|
|
41
|
-
// Check expiration
|
|
42
|
-
if (stored.session.expiresAt && stored.session.expiresAt < Date.now()) {
|
|
43
|
-
this.sessions.delete(sessionId);
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
allocId() {
|
|
49
|
-
return (0, crypto_1.randomUUID)();
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Clean up expired sessions
|
|
53
|
-
*/
|
|
54
|
-
cleanup() {
|
|
55
|
-
const now = Date.now();
|
|
56
|
-
let cleaned = 0;
|
|
57
|
-
for (const [id, stored] of this.sessions) {
|
|
58
|
-
if (stored.session.expiresAt && stored.session.expiresAt < now) {
|
|
59
|
-
this.sessions.delete(id);
|
|
60
|
-
cleaned++;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return cleaned;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get count of active sessions
|
|
67
|
-
*/
|
|
68
|
-
get size() {
|
|
69
|
-
return this.sessions.size;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
exports.InMemorySessionStore = InMemorySessionStore;
|
|
73
|
-
/**
|
|
74
|
-
* Transport Session Manager
|
|
75
|
-
*
|
|
76
|
-
* Manages transport sessions independent of authorization.
|
|
77
|
-
* Supports both stateless (JWT-encrypted) and stateful (store-backed) modes.
|
|
78
|
-
*
|
|
79
|
-
* Key concepts:
|
|
80
|
-
* - Authorization = User identity + permissions (1 per user token)
|
|
81
|
-
* - TransportSession = Protocol-specific connection (N per authorization)
|
|
82
|
-
* - One authorization can have multiple transport sessions (e.g., multiple browser tabs)
|
|
83
|
-
*/
|
|
84
|
-
class TransportSessionManager {
|
|
85
|
-
store;
|
|
86
|
-
mode;
|
|
87
|
-
encryptionKey;
|
|
88
|
-
constructor(config) {
|
|
89
|
-
this.mode = config.mode;
|
|
90
|
-
if (config.mode === 'stateless') {
|
|
91
|
-
this.store = new InMemorySessionStore(); // Used only for allocation
|
|
92
|
-
}
|
|
93
|
-
else if (config.store === 'memory') {
|
|
94
|
-
this.store = new InMemorySessionStore();
|
|
95
|
-
}
|
|
96
|
-
else if (config.store === 'redis') {
|
|
97
|
-
// Instantiate Redis session store
|
|
98
|
-
this.store = new redis_session_store_1.RedisSessionStore(config.config);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.store = new InMemorySessionStore();
|
|
102
|
-
}
|
|
103
|
-
// Derive encryption key from secret or generate one
|
|
104
|
-
const secret = config.encryptionSecret || process.env['MCP_SESSION_SECRET'];
|
|
105
|
-
if (!secret) {
|
|
106
|
-
if (process.env['NODE_ENV'] === 'production') {
|
|
107
|
-
throw new Error('[TransportSessionManager] MCP_SESSION_SECRET or encryptionSecret is required in production. ' +
|
|
108
|
-
'Set the MCP_SESSION_SECRET environment variable or provide encryptionSecret in config.');
|
|
109
|
-
}
|
|
110
|
-
// Development fallback - NOT secure for production
|
|
111
|
-
console.warn('[TransportSessionManager] Using machine ID as session encryption secret - NOT SECURE FOR PRODUCTION. ' +
|
|
112
|
-
'Set MCP_SESSION_SECRET or provide encryptionSecret in config.');
|
|
113
|
-
}
|
|
114
|
-
const effectiveSecret = secret || (0, authorization_class_1.getMachineId)();
|
|
115
|
-
this.encryptionKey = (0, session_crypto_1.hkdfSha256)(Buffer.from(effectiveSecret), Buffer.from('mcp-session-salt'), Buffer.from('transport-session'), 32);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Create a new transport session for an authorization
|
|
119
|
-
*
|
|
120
|
-
* @param authorizationId - The authorization this session belongs to
|
|
121
|
-
* @param protocol - Transport protocol (sse, streamable-http, etc.)
|
|
122
|
-
* @param options - Additional session options
|
|
123
|
-
* @returns The created transport session
|
|
124
|
-
*/
|
|
125
|
-
async createSession(authorizationId, protocol, options = {}) {
|
|
126
|
-
const sessionId = this.store.allocId();
|
|
127
|
-
const session = {
|
|
128
|
-
id: sessionId,
|
|
129
|
-
authorizationId,
|
|
130
|
-
protocol,
|
|
131
|
-
createdAt: Date.now(),
|
|
132
|
-
expiresAt: options.expiresAt,
|
|
133
|
-
nodeId: (0, authorization_class_1.getMachineId)(),
|
|
134
|
-
clientFingerprint: options.fingerprint,
|
|
135
|
-
transportState: options.transportState,
|
|
136
|
-
};
|
|
137
|
-
if (this.mode === 'stateful') {
|
|
138
|
-
// Store session in persistent store
|
|
139
|
-
const stored = {
|
|
140
|
-
session,
|
|
141
|
-
authorizationId,
|
|
142
|
-
tokens: options.tokens,
|
|
143
|
-
createdAt: Date.now(),
|
|
144
|
-
lastAccessedAt: Date.now(),
|
|
145
|
-
};
|
|
146
|
-
await this.store.set(sessionId, stored);
|
|
147
|
-
}
|
|
148
|
-
return session;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Get an existing session by ID
|
|
152
|
-
*
|
|
153
|
-
* @param sessionId - The session ID (encrypted JWT or UUID)
|
|
154
|
-
* @returns The session if found and valid, null otherwise
|
|
155
|
-
*/
|
|
156
|
-
async getSession(sessionId) {
|
|
157
|
-
if (this.mode === 'stateless') {
|
|
158
|
-
// Decrypt session from JWT
|
|
159
|
-
return this.decryptSessionJwt(sessionId);
|
|
160
|
-
}
|
|
161
|
-
// Stateful: lookup in store
|
|
162
|
-
const stored = await this.store.get(sessionId);
|
|
163
|
-
return stored?.session ?? null;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Get stored session with tokens (for orchestrated mode)
|
|
167
|
-
*/
|
|
168
|
-
async getStoredSession(sessionId) {
|
|
169
|
-
if (this.mode === 'stateless') {
|
|
170
|
-
// In stateless mode, we don't have stored sessions
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
return this.store.get(sessionId);
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Update session state
|
|
177
|
-
*/
|
|
178
|
-
async updateSession(sessionId, updates) {
|
|
179
|
-
if (this.mode === 'stateless') {
|
|
180
|
-
// Stateless sessions are immutable - caller should create new session JWT
|
|
181
|
-
return false;
|
|
182
|
-
}
|
|
183
|
-
const stored = await this.store.get(sessionId);
|
|
184
|
-
if (!stored)
|
|
185
|
-
return false;
|
|
186
|
-
if (updates.transportState) {
|
|
187
|
-
stored.session.transportState = updates.transportState;
|
|
188
|
-
}
|
|
189
|
-
if (updates.expiresAt) {
|
|
190
|
-
stored.session.expiresAt = updates.expiresAt;
|
|
191
|
-
}
|
|
192
|
-
stored.lastAccessedAt = Date.now();
|
|
193
|
-
await this.store.set(sessionId, stored);
|
|
194
|
-
return true;
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Delete a session
|
|
198
|
-
*/
|
|
199
|
-
async deleteSession(sessionId) {
|
|
200
|
-
if (this.mode === 'stateless') {
|
|
201
|
-
// Stateless sessions can't be revoked
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
const exists = await this.store.exists(sessionId);
|
|
205
|
-
if (exists) {
|
|
206
|
-
await this.store.delete(sessionId);
|
|
207
|
-
}
|
|
208
|
-
return exists;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Encode a session as an encrypted JWT for the Mcp-Session-Id header
|
|
212
|
-
*
|
|
213
|
-
* @param session - The transport session to encode
|
|
214
|
-
* @param additionalState - Additional encrypted state for stateless mode
|
|
215
|
-
* @returns Encrypted session JWT
|
|
216
|
-
*/
|
|
217
|
-
encodeSessionJwt(session, additionalState) {
|
|
218
|
-
const payload = {
|
|
219
|
-
sid: session.id,
|
|
220
|
-
aid: session.authorizationId,
|
|
221
|
-
proto: session.protocol,
|
|
222
|
-
nid: session.nodeId,
|
|
223
|
-
iat: Math.floor(Date.now() / 1000),
|
|
224
|
-
exp: session.expiresAt ? Math.floor(session.expiresAt / 1000) : undefined,
|
|
225
|
-
};
|
|
226
|
-
if (this.mode === 'stateless' && additionalState) {
|
|
227
|
-
const statelessPayload = payload;
|
|
228
|
-
if (additionalState.state) {
|
|
229
|
-
const encrypted = (0, session_crypto_1.encryptAesGcm)(this.encryptionKey, JSON.stringify(additionalState.state));
|
|
230
|
-
statelessPayload.state = `${encrypted.iv}.${encrypted.tag}.${encrypted.data}`;
|
|
231
|
-
}
|
|
232
|
-
if (additionalState.tokens) {
|
|
233
|
-
const encrypted = (0, session_crypto_1.encryptAesGcm)(this.encryptionKey, JSON.stringify(additionalState.tokens));
|
|
234
|
-
statelessPayload.tokens = `${encrypted.iv}.${encrypted.tag}.${encrypted.data}`;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return (0, session_id_utils_1.encryptJson)(payload);
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Decode an encrypted session JWT
|
|
241
|
-
*
|
|
242
|
-
* @param jwt - The encrypted session JWT
|
|
243
|
-
* @returns Decoded session or null if invalid
|
|
244
|
-
*/
|
|
245
|
-
decryptSessionJwt(jwt) {
|
|
246
|
-
try {
|
|
247
|
-
// The encryptJson format is iv.tag.ct (base64url)
|
|
248
|
-
// We need to decrypt it using the same key
|
|
249
|
-
const parts = jwt.split('.');
|
|
250
|
-
if (parts.length !== 3)
|
|
251
|
-
return null;
|
|
252
|
-
const [ivB64, tagB64, ctB64] = parts;
|
|
253
|
-
const iv = Buffer.from(ivB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
|
|
254
|
-
const tag = Buffer.from(tagB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
|
|
255
|
-
const data = Buffer.from(ctB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');
|
|
256
|
-
const decrypted = (0, session_crypto_1.decryptAesGcm)(this.encryptionKey, {
|
|
257
|
-
alg: 'A256GCM',
|
|
258
|
-
iv: iv.toString('base64url'),
|
|
259
|
-
tag: tag.toString('base64url'),
|
|
260
|
-
data: data.toString('base64url'),
|
|
261
|
-
});
|
|
262
|
-
const payload = JSON.parse(decrypted);
|
|
263
|
-
// Validate expiration
|
|
264
|
-
if (payload.exp && payload.exp * 1000 < Date.now()) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
return {
|
|
268
|
-
id: payload.sid,
|
|
269
|
-
authorizationId: payload.aid,
|
|
270
|
-
protocol: payload.proto,
|
|
271
|
-
createdAt: payload.iat * 1000,
|
|
272
|
-
expiresAt: payload.exp ? payload.exp * 1000 : undefined,
|
|
273
|
-
nodeId: payload.nid,
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Check if a session exists and is valid
|
|
282
|
-
*/
|
|
283
|
-
async sessionExists(sessionId) {
|
|
284
|
-
if (this.mode === 'stateless') {
|
|
285
|
-
const session = this.decryptSessionJwt(sessionId);
|
|
286
|
-
return session !== null;
|
|
287
|
-
}
|
|
288
|
-
return this.store.exists(sessionId);
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Get the storage mode
|
|
292
|
-
*/
|
|
293
|
-
get storageMode() {
|
|
294
|
-
return this.mode;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
exports.TransportSessionManager = TransportSessionManager;
|
|
298
|
-
//# sourceMappingURL=transport-session.manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport-session.manager.js","sourceRoot":"","sources":["../../../../src/auth/session/transport-session.manager.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;AAE5C,mCAAoC;AAYpC,+DAAuD;AACvD,qDAA4E;AAC5E,8EAAoE;AACpE,+DAA0D;AAE1D;;GAEG;AACH,MAAa,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE7D,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,mBAAmB;QACnB,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uBAAuB;QACvB,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB,EAAE,OAAsB,EAAE,KAAc;QACjE,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,mBAAmB;QACnB,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACtE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,IAAA,mBAAU,GAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;CACF;AAlED,oDAkEC;AAED;;;;;;;;;;GAUG;AACH,MAAa,uBAAuB;IACjB,KAAK,CAAe;IACpB,IAAI,CAA2B;IAC/B,aAAa,CAAS;IAEvC,YAAY,MAA4D;QACtE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAExB,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC,CAAC,2BAA2B;QACtE,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACpC,kCAAkC;YAClC,IAAI,CAAC,KAAK,GAAG,IAAI,uCAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC1C,CAAC;QAED,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,8FAA8F;oBAC5F,wFAAwF,CAC3F,CAAC;YACJ,CAAC;YACD,mDAAmD;YACnD,OAAO,CAAC,IAAI,CACV,uGAAuG;gBACrG,+DAA+D,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,IAAI,IAAA,kCAAY,GAAE,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,IAAA,2BAAU,EAC7B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAC5B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAC/B,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAChC,EAAE,CACH,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CACjB,eAAuB,EACvB,QAA2B,EAC3B,UAKI,EAAE;QAEN,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAEvC,MAAM,OAAO,GAAqB;YAChC,EAAE,EAAE,SAAS;YACb,eAAe;YACf,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,IAAA,kCAAY,GAAE;YACtB,iBAAiB,EAAE,OAAO,CAAC,WAAW;YACtC,cAAc,EAAE,OAAO,CAAC,cAAc;SACvC,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,oCAAoC;YACpC,MAAM,MAAM,GAAkB;gBAC5B,OAAO;gBACP,eAAe;gBACf,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;aAC3B,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,2BAA2B;YAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;QAED,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,mDAAmD;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,OAGC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,0EAA0E;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QACzD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC/C,CAAC;QACD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,sCAAsC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,gBAAgB,CACd,OAAyB,EACzB,eAGC;QAED,MAAM,OAAO,GAAsB;YACjC,GAAG,EAAE,OAAO,CAAC,EAAE;YACf,GAAG,EAAE,OAAO,CAAC,eAAe;YAC5B,KAAK,EAAE,OAAO,CAAC,QAAQ;YACvB,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAClC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,eAAe,EAAE,CAAC;YACjD,MAAM,gBAAgB,GAAG,OAAqC,CAAC;YAE/D,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3F,gBAAgB,CAAC,KAAK,GAAG,GAAG,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YAChF,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC5F,gBAAgB,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,IAAI,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACjF,CAAC;QACH,CAAC;QAED,OAAO,IAAA,8BAAW,EAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACK,iBAAiB,CAAC,GAAW;QACnC,IAAI,CAAC;YACH,kDAAkD;YAClD,2CAA2C;YAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YACrC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAEhF,MAAM,SAAS,GAAG,IAAA,8BAAa,EAAC,IAAI,CAAC,aAAa,EAAE;gBAClD,GAAG,EAAE,SAAS;gBACd,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC5B,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;aACjC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAsB,CAAC;YAE3D,sBAAsB;YACtB,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,OAAO,CAAC,GAAG;gBACf,eAAe,EAAE,OAAO,CAAC,GAAG;gBAC5B,QAAQ,EAAE,OAAO,CAAC,KAAK;gBACvB,SAAS,EAAE,OAAO,CAAC,GAAG,GAAG,IAAI;gBAC7B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;gBACvD,MAAM,EAAE,OAAO,CAAC,GAAG;aACpB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAClD,OAAO,OAAO,KAAK,IAAI,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAzQD,0DAyQC","sourcesContent":["// auth/session/transport-session.manager.ts\n\nimport { randomUUID } from 'crypto';\nimport {\n TransportSession,\n TransportProtocol,\n SessionJwtPayload,\n StatelessSessionJwtPayload,\n StoredSession,\n SessionStore,\n SessionStorageConfig,\n TransportState,\n EncryptedBlob,\n} from './transport-session.types';\nimport { encryptJson } from './utils/session-id.utils';\nimport { encryptAesGcm, decryptAesGcm, hkdfSha256 } from './session.crypto';\nimport { getMachineId } from '../authorization/authorization.class';\nimport { RedisSessionStore } from './redis-session.store';\n\n/**\n * In-memory session store implementation\n */\nexport class InMemorySessionStore implements SessionStore {\n private readonly sessions = new Map<string, StoredSession>();\n\n async get(sessionId: string): Promise<StoredSession | null> {\n const stored = this.sessions.get(sessionId);\n if (!stored) return null;\n\n // Check expiration\n if (stored.session.expiresAt && stored.session.expiresAt < Date.now()) {\n this.sessions.delete(sessionId);\n return null;\n }\n\n // Update last accessed\n stored.lastAccessedAt = Date.now();\n return stored;\n }\n\n async set(sessionId: string, session: StoredSession, ttlMs?: number): Promise<void> {\n if (ttlMs) {\n session.session.expiresAt = Date.now() + ttlMs;\n }\n this.sessions.set(sessionId, session);\n }\n\n async delete(sessionId: string): Promise<void> {\n this.sessions.delete(sessionId);\n }\n\n async exists(sessionId: string): Promise<boolean> {\n const stored = this.sessions.get(sessionId);\n if (!stored) return false;\n\n // Check expiration\n if (stored.session.expiresAt && stored.session.expiresAt < Date.now()) {\n this.sessions.delete(sessionId);\n return false;\n }\n return true;\n }\n\n allocId(): string {\n return randomUUID();\n }\n\n /**\n * Clean up expired sessions\n */\n cleanup(): number {\n const now = Date.now();\n let cleaned = 0;\n for (const [id, stored] of this.sessions) {\n if (stored.session.expiresAt && stored.session.expiresAt < now) {\n this.sessions.delete(id);\n cleaned++;\n }\n }\n return cleaned;\n }\n\n /**\n * Get count of active sessions\n */\n get size(): number {\n return this.sessions.size;\n }\n}\n\n/**\n * Transport Session Manager\n *\n * Manages transport sessions independent of authorization.\n * Supports both stateless (JWT-encrypted) and stateful (store-backed) modes.\n *\n * Key concepts:\n * - Authorization = User identity + permissions (1 per user token)\n * - TransportSession = Protocol-specific connection (N per authorization)\n * - One authorization can have multiple transport sessions (e.g., multiple browser tabs)\n */\nexport class TransportSessionManager {\n private readonly store: SessionStore;\n private readonly mode: 'stateless' | 'stateful';\n private readonly encryptionKey: Buffer;\n\n constructor(config: SessionStorageConfig & { encryptionSecret?: string }) {\n this.mode = config.mode;\n\n if (config.mode === 'stateless') {\n this.store = new InMemorySessionStore(); // Used only for allocation\n } else if (config.store === 'memory') {\n this.store = new InMemorySessionStore();\n } else if (config.store === 'redis') {\n // Instantiate Redis session store\n this.store = new RedisSessionStore(config.config);\n } else {\n this.store = new InMemorySessionStore();\n }\n\n // Derive encryption key from secret or generate one\n const secret = config.encryptionSecret || process.env['MCP_SESSION_SECRET'];\n if (!secret) {\n if (process.env['NODE_ENV'] === 'production') {\n throw new Error(\n '[TransportSessionManager] MCP_SESSION_SECRET or encryptionSecret is required in production. ' +\n 'Set the MCP_SESSION_SECRET environment variable or provide encryptionSecret in config.',\n );\n }\n // Development fallback - NOT secure for production\n console.warn(\n '[TransportSessionManager] Using machine ID as session encryption secret - NOT SECURE FOR PRODUCTION. ' +\n 'Set MCP_SESSION_SECRET or provide encryptionSecret in config.',\n );\n }\n const effectiveSecret = secret || getMachineId();\n this.encryptionKey = hkdfSha256(\n Buffer.from(effectiveSecret),\n Buffer.from('mcp-session-salt'),\n Buffer.from('transport-session'),\n 32,\n );\n }\n\n /**\n * Create a new transport session for an authorization\n *\n * @param authorizationId - The authorization this session belongs to\n * @param protocol - Transport protocol (sse, streamable-http, etc.)\n * @param options - Additional session options\n * @returns The created transport session\n */\n async createSession(\n authorizationId: string,\n protocol: TransportProtocol,\n options: {\n expiresAt?: number;\n fingerprint?: string;\n transportState?: TransportState;\n tokens?: Record<string, EncryptedBlob>;\n } = {},\n ): Promise<TransportSession> {\n const sessionId = this.store.allocId();\n\n const session: TransportSession = {\n id: sessionId,\n authorizationId,\n protocol,\n createdAt: Date.now(),\n expiresAt: options.expiresAt,\n nodeId: getMachineId(),\n clientFingerprint: options.fingerprint,\n transportState: options.transportState,\n };\n\n if (this.mode === 'stateful') {\n // Store session in persistent store\n const stored: StoredSession = {\n session,\n authorizationId,\n tokens: options.tokens,\n createdAt: Date.now(),\n lastAccessedAt: Date.now(),\n };\n await this.store.set(sessionId, stored);\n }\n\n return session;\n }\n\n /**\n * Get an existing session by ID\n *\n * @param sessionId - The session ID (encrypted JWT or UUID)\n * @returns The session if found and valid, null otherwise\n */\n async getSession(sessionId: string): Promise<TransportSession | null> {\n if (this.mode === 'stateless') {\n // Decrypt session from JWT\n return this.decryptSessionJwt(sessionId);\n }\n\n // Stateful: lookup in store\n const stored = await this.store.get(sessionId);\n return stored?.session ?? null;\n }\n\n /**\n * Get stored session with tokens (for orchestrated mode)\n */\n async getStoredSession(sessionId: string): Promise<StoredSession | null> {\n if (this.mode === 'stateless') {\n // In stateless mode, we don't have stored sessions\n return null;\n }\n return this.store.get(sessionId);\n }\n\n /**\n * Update session state\n */\n async updateSession(\n sessionId: string,\n updates: {\n transportState?: TransportState;\n expiresAt?: number;\n },\n ): Promise<boolean> {\n if (this.mode === 'stateless') {\n // Stateless sessions are immutable - caller should create new session JWT\n return false;\n }\n\n const stored = await this.store.get(sessionId);\n if (!stored) return false;\n\n if (updates.transportState) {\n stored.session.transportState = updates.transportState;\n }\n if (updates.expiresAt) {\n stored.session.expiresAt = updates.expiresAt;\n }\n stored.lastAccessedAt = Date.now();\n\n await this.store.set(sessionId, stored);\n return true;\n }\n\n /**\n * Delete a session\n */\n async deleteSession(sessionId: string): Promise<boolean> {\n if (this.mode === 'stateless') {\n // Stateless sessions can't be revoked\n return false;\n }\n\n const exists = await this.store.exists(sessionId);\n if (exists) {\n await this.store.delete(sessionId);\n }\n return exists;\n }\n\n /**\n * Encode a session as an encrypted JWT for the Mcp-Session-Id header\n *\n * @param session - The transport session to encode\n * @param additionalState - Additional encrypted state for stateless mode\n * @returns Encrypted session JWT\n */\n encodeSessionJwt(\n session: TransportSession,\n additionalState?: {\n state?: unknown;\n tokens?: Record<string, unknown>;\n },\n ): string {\n const payload: SessionJwtPayload = {\n sid: session.id,\n aid: session.authorizationId,\n proto: session.protocol,\n nid: session.nodeId,\n iat: Math.floor(Date.now() / 1000),\n exp: session.expiresAt ? Math.floor(session.expiresAt / 1000) : undefined,\n };\n\n if (this.mode === 'stateless' && additionalState) {\n const statelessPayload = payload as StatelessSessionJwtPayload;\n\n if (additionalState.state) {\n const encrypted = encryptAesGcm(this.encryptionKey, JSON.stringify(additionalState.state));\n statelessPayload.state = `${encrypted.iv}.${encrypted.tag}.${encrypted.data}`;\n }\n\n if (additionalState.tokens) {\n const encrypted = encryptAesGcm(this.encryptionKey, JSON.stringify(additionalState.tokens));\n statelessPayload.tokens = `${encrypted.iv}.${encrypted.tag}.${encrypted.data}`;\n }\n }\n\n return encryptJson(payload);\n }\n\n /**\n * Decode an encrypted session JWT\n *\n * @param jwt - The encrypted session JWT\n * @returns Decoded session or null if invalid\n */\n private decryptSessionJwt(jwt: string): TransportSession | null {\n try {\n // The encryptJson format is iv.tag.ct (base64url)\n // We need to decrypt it using the same key\n const parts = jwt.split('.');\n if (parts.length !== 3) return null;\n\n const [ivB64, tagB64, ctB64] = parts;\n const iv = Buffer.from(ivB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');\n const tag = Buffer.from(tagB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');\n const data = Buffer.from(ctB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64');\n\n const decrypted = decryptAesGcm(this.encryptionKey, {\n alg: 'A256GCM',\n iv: iv.toString('base64url'),\n tag: tag.toString('base64url'),\n data: data.toString('base64url'),\n });\n\n const payload = JSON.parse(decrypted) as SessionJwtPayload;\n\n // Validate expiration\n if (payload.exp && payload.exp * 1000 < Date.now()) {\n return null;\n }\n\n return {\n id: payload.sid,\n authorizationId: payload.aid,\n protocol: payload.proto,\n createdAt: payload.iat * 1000,\n expiresAt: payload.exp ? payload.exp * 1000 : undefined,\n nodeId: payload.nid,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Check if a session exists and is valid\n */\n async sessionExists(sessionId: string): Promise<boolean> {\n if (this.mode === 'stateless') {\n const session = this.decryptSessionJwt(sessionId);\n return session !== null;\n }\n return this.store.exists(sessionId);\n }\n\n /**\n * Get the storage mode\n */\n get storageMode(): 'stateless' | 'stateful' {\n return this.mode;\n }\n}\n"]}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// auth/session/transport-session.types.ts
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.sessionStorageConfigSchema = exports.redisConfigSchema = exports.storedSessionSchema = exports.encryptedBlobSchema = exports.statelessSessionJwtPayloadSchema = exports.sessionJwtPayloadSchema = exports.transportSessionSchema = exports.transportStateSchema = exports.legacySseTransportStateSchema = exports.statelessHttpTransportStateSchema = exports.statefulHttpTransportStateSchema = exports.streamableHttpTransportStateSchema = exports.sseTransportStateSchema = exports.transportProtocolSchema = void 0;
|
|
5
|
-
const zod_1 = require("zod");
|
|
6
|
-
// ============================================
|
|
7
|
-
// Zod Schemas
|
|
8
|
-
// ============================================
|
|
9
|
-
exports.transportProtocolSchema = zod_1.z.enum([
|
|
10
|
-
'legacy-sse',
|
|
11
|
-
'sse',
|
|
12
|
-
'streamable-http',
|
|
13
|
-
'stateful-http',
|
|
14
|
-
'stateless-http',
|
|
15
|
-
]);
|
|
16
|
-
exports.sseTransportStateSchema = zod_1.z.object({
|
|
17
|
-
type: zod_1.z.literal('sse'),
|
|
18
|
-
lastEventId: zod_1.z.string().optional(),
|
|
19
|
-
lastPing: zod_1.z.number().optional(),
|
|
20
|
-
connectionState: zod_1.z.enum(['connecting', 'open', 'closed']).optional(),
|
|
21
|
-
});
|
|
22
|
-
exports.streamableHttpTransportStateSchema = zod_1.z.object({
|
|
23
|
-
type: zod_1.z.literal('streamable-http'),
|
|
24
|
-
requestSeq: zod_1.z.number(),
|
|
25
|
-
activeStreamId: zod_1.z.string().optional(),
|
|
26
|
-
pendingRequests: zod_1.z.array(zod_1.z.string()).optional(),
|
|
27
|
-
});
|
|
28
|
-
exports.statefulHttpTransportStateSchema = zod_1.z.object({
|
|
29
|
-
type: zod_1.z.literal('stateful-http'),
|
|
30
|
-
requestSeq: zod_1.z.number(),
|
|
31
|
-
pendingResponses: zod_1.z.array(zod_1.z.string()).optional(),
|
|
32
|
-
lastActivity: zod_1.z.number().optional(),
|
|
33
|
-
});
|
|
34
|
-
exports.statelessHttpTransportStateSchema = zod_1.z.object({
|
|
35
|
-
type: zod_1.z.literal('stateless-http'),
|
|
36
|
-
requestCount: zod_1.z.number(),
|
|
37
|
-
windowStart: zod_1.z.number().optional(),
|
|
38
|
-
});
|
|
39
|
-
exports.legacySseTransportStateSchema = zod_1.z.object({
|
|
40
|
-
type: zod_1.z.literal('legacy-sse'),
|
|
41
|
-
messagePath: zod_1.z.string(),
|
|
42
|
-
lastEventId: zod_1.z.string().optional(),
|
|
43
|
-
connectionState: zod_1.z.enum(['connecting', 'open', 'closed']).optional(),
|
|
44
|
-
});
|
|
45
|
-
exports.transportStateSchema = zod_1.z.discriminatedUnion('type', [
|
|
46
|
-
exports.sseTransportStateSchema,
|
|
47
|
-
exports.streamableHttpTransportStateSchema,
|
|
48
|
-
exports.statefulHttpTransportStateSchema,
|
|
49
|
-
exports.statelessHttpTransportStateSchema,
|
|
50
|
-
exports.legacySseTransportStateSchema,
|
|
51
|
-
]);
|
|
52
|
-
exports.transportSessionSchema = zod_1.z.object({
|
|
53
|
-
id: zod_1.z.string(),
|
|
54
|
-
authorizationId: zod_1.z.string(),
|
|
55
|
-
protocol: exports.transportProtocolSchema,
|
|
56
|
-
createdAt: zod_1.z.number(),
|
|
57
|
-
expiresAt: zod_1.z.number().optional(),
|
|
58
|
-
nodeId: zod_1.z.string(),
|
|
59
|
-
clientFingerprint: zod_1.z.string().optional(),
|
|
60
|
-
transportState: exports.transportStateSchema.optional(),
|
|
61
|
-
});
|
|
62
|
-
exports.sessionJwtPayloadSchema = zod_1.z.object({
|
|
63
|
-
sid: zod_1.z.string(),
|
|
64
|
-
aid: zod_1.z.string(),
|
|
65
|
-
proto: exports.transportProtocolSchema,
|
|
66
|
-
nid: zod_1.z.string(),
|
|
67
|
-
iat: zod_1.z.number(),
|
|
68
|
-
exp: zod_1.z.number().optional(),
|
|
69
|
-
});
|
|
70
|
-
exports.statelessSessionJwtPayloadSchema = exports.sessionJwtPayloadSchema.extend({
|
|
71
|
-
state: zod_1.z.string().optional(),
|
|
72
|
-
tokens: zod_1.z.string().optional(),
|
|
73
|
-
});
|
|
74
|
-
exports.encryptedBlobSchema = zod_1.z.object({
|
|
75
|
-
alg: zod_1.z.literal('A256GCM'),
|
|
76
|
-
kid: zod_1.z.string().optional(),
|
|
77
|
-
iv: zod_1.z.string(),
|
|
78
|
-
tag: zod_1.z.string(),
|
|
79
|
-
data: zod_1.z.string(),
|
|
80
|
-
exp: zod_1.z.number().optional(),
|
|
81
|
-
meta: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
82
|
-
});
|
|
83
|
-
exports.storedSessionSchema = zod_1.z.object({
|
|
84
|
-
session: exports.transportSessionSchema,
|
|
85
|
-
authorizationId: zod_1.z.string(),
|
|
86
|
-
tokens: zod_1.z.record(zod_1.z.string(), exports.encryptedBlobSchema).optional(),
|
|
87
|
-
createdAt: zod_1.z.number(),
|
|
88
|
-
lastAccessedAt: zod_1.z.number(),
|
|
89
|
-
});
|
|
90
|
-
exports.redisConfigSchema = zod_1.z.object({
|
|
91
|
-
host: zod_1.z.string().min(1),
|
|
92
|
-
port: zod_1.z.number().int().positive().optional().default(6379),
|
|
93
|
-
password: zod_1.z.string().optional(),
|
|
94
|
-
db: zod_1.z.number().int().nonnegative().optional().default(0),
|
|
95
|
-
tls: zod_1.z.boolean().optional().default(false),
|
|
96
|
-
keyPrefix: zod_1.z.string().optional().default('mcp:session:'),
|
|
97
|
-
defaultTtlMs: zod_1.z.number().int().positive().optional().default(3600000), // 1 hour default
|
|
98
|
-
});
|
|
99
|
-
// Stateful storage options (discriminated by store type)
|
|
100
|
-
const statefulStorageSchema = zod_1.z.discriminatedUnion('store', [
|
|
101
|
-
zod_1.z.object({ store: zod_1.z.literal('memory') }),
|
|
102
|
-
zod_1.z.object({ store: zod_1.z.literal('redis'), config: exports.redisConfigSchema }),
|
|
103
|
-
]);
|
|
104
|
-
// Session storage config using union instead of discriminatedUnion
|
|
105
|
-
// to avoid duplicate mode values
|
|
106
|
-
exports.sessionStorageConfigSchema = zod_1.z.union([
|
|
107
|
-
zod_1.z.object({ mode: zod_1.z.literal('stateless') }),
|
|
108
|
-
zod_1.z.object({ mode: zod_1.z.literal('stateful') }).merge(statefulStorageSchema.options[0]),
|
|
109
|
-
zod_1.z.object({ mode: zod_1.z.literal('stateful') }).merge(statefulStorageSchema.options[1]),
|
|
110
|
-
]);
|
|
111
|
-
//# sourceMappingURL=transport-session.types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport-session.types.js","sourceRoot":"","sources":["../../../../src/auth/session/transport-session.types.ts"],"names":[],"mappings":"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","sourcesContent":["// auth/session/transport-session.types.ts\n\nimport { z } from 'zod';\n\n/**\n * Transport protocol types supported by MCP\n * These are the actual transport protocols for sessions (excludes 'delete-session' action)\n */\nexport type TransportProtocol = 'legacy-sse' | 'sse' | 'streamable-http' | 'stateful-http' | 'stateless-http';\n\n/**\n * Session storage mode for distributed systems\n */\nexport type SessionStorageMode = 'stateless' | 'stateful';\n\n/**\n * TransportSession represents a single client connection.\n * Multiple sessions can share the same authorization.\n * Each session is bound to a specific transport protocol.\n */\nexport interface TransportSession {\n /** Unique session ID (encrypted JWT or UUID) */\n id: string;\n\n /** Reference to the authorization this session uses */\n authorizationId: string;\n\n /** Transport protocol for this session */\n protocol: TransportProtocol;\n\n /** Session creation timestamp (epoch ms) */\n createdAt: number;\n\n /** Session expiration (epoch ms, independent of auth expiration) */\n expiresAt?: number;\n\n /** Node ID for distributed systems */\n nodeId: string;\n\n /** Client fingerprint for rate limiting/tracking */\n clientFingerprint?: string;\n\n /** Transport-specific state */\n transportState?: TransportState;\n}\n\n/**\n * Transport-specific state that varies by protocol\n */\nexport type TransportState =\n | SseTransportState\n | StreamableHttpTransportState\n | StatefulHttpTransportState\n | StatelessHttpTransportState\n | LegacySseTransportState;\n\n/**\n * SSE (Server-Sent Events) transport state\n */\nexport interface SseTransportState {\n type: 'sse';\n /** Last event ID for reconnection (per SSE spec) */\n lastEventId?: string;\n /** Connection keep-alive timestamp */\n lastPing?: number;\n /** Connection state */\n connectionState?: 'connecting' | 'open' | 'closed';\n}\n\n/**\n * Streamable HTTP transport state\n */\nexport interface StreamableHttpTransportState {\n type: 'streamable-http';\n /** Request sequence number */\n requestSeq: number;\n /** Active stream ID if streaming */\n activeStreamId?: string;\n /** Pending request IDs */\n pendingRequests?: string[];\n}\n\n/**\n * Stateful HTTP transport state\n */\nexport interface StatefulHttpTransportState {\n type: 'stateful-http';\n /** Request sequence number */\n requestSeq: number;\n /** Pending responses awaiting delivery */\n pendingResponses?: string[];\n /** Last activity timestamp */\n lastActivity?: number;\n}\n\n/**\n * Stateless HTTP transport state\n */\nexport interface StatelessHttpTransportState {\n type: 'stateless-http';\n /** Request count for rate limiting */\n requestCount: number;\n /** Window start for rate limiting */\n windowStart?: number;\n}\n\n/**\n * Legacy SSE transport state (for backwards compatibility)\n */\nexport interface LegacySseTransportState {\n type: 'legacy-sse';\n /** Message endpoint path */\n messagePath: string;\n /** Last event ID */\n lastEventId?: string;\n /** Connection state */\n connectionState?: 'connecting' | 'open' | 'closed';\n}\n\n/**\n * Session JWT payload - encodes both auth ref and transport context\n * This is the structure encrypted in the mcp-session-id header\n */\nexport interface SessionJwtPayload {\n /** Session ID (UUID) */\n sid: string;\n /** Authorization ID (token signature fingerprint) */\n aid: string;\n /** Transport protocol */\n proto: TransportProtocol;\n /** Node ID (for distributed systems) */\n nid: string;\n /** Issued at (epoch seconds) */\n iat: number;\n /** Expiration (epoch seconds) */\n exp?: number;\n}\n\n/**\n * Extended session JWT payload for stateless mode\n * Includes encrypted state and tokens\n */\nexport interface StatelessSessionJwtPayload extends SessionJwtPayload {\n /** Encrypted transport state (AES-256-GCM) */\n state?: string;\n /** Encrypted provider tokens (AES-256-GCM, for orchestrated mode) */\n tokens?: string;\n}\n\n/**\n * Stored session record (for stateful mode in Redis/memory)\n */\nexport interface StoredSession {\n /** The transport session data */\n session: TransportSession;\n /** Authorization ID reference */\n authorizationId: string;\n /** Encrypted provider tokens (for orchestrated mode) */\n tokens?: Record<string, EncryptedBlob>;\n /** Creation timestamp */\n createdAt: number;\n /** Last accessed timestamp */\n lastAccessedAt: number;\n}\n\n/**\n * Encrypted blob structure (AES-256-GCM)\n */\nexport interface EncryptedBlob {\n /** Algorithm identifier */\n alg: 'A256GCM';\n /** Key ID (for rotation) */\n kid?: string;\n /** Initialization vector (base64url) */\n iv: string;\n /** Authentication tag (base64url) */\n tag: string;\n /** Ciphertext (base64url) */\n data: string;\n /** Expiration hint (epoch seconds) */\n exp?: number;\n /** Additional metadata */\n meta?: Record<string, unknown>;\n}\n\n/**\n * Session store interface for stateful sessions\n */\nexport interface SessionStore {\n /**\n * Get a stored session by ID\n */\n get(sessionId: string): Promise<StoredSession | null>;\n\n /**\n * Store a session with optional TTL\n */\n set(sessionId: string, session: StoredSession, ttlMs?: number): Promise<void>;\n\n /**\n * Delete a session\n */\n delete(sessionId: string): Promise<void>;\n\n /**\n * Check if a session exists\n */\n exists(sessionId: string): Promise<boolean>;\n\n /**\n * Allocate a new session ID\n */\n allocId(): string;\n}\n\n/**\n * Session storage configuration\n */\nexport type SessionStorageConfig =\n | { mode: 'stateless' }\n | { mode: 'stateful'; store: 'memory' }\n | { mode: 'stateful'; store: 'redis'; config: RedisConfig };\n\n/**\n * Redis configuration\n */\nexport interface RedisConfig {\n host: string;\n port?: number;\n password?: string;\n db?: number;\n tls?: boolean;\n keyPrefix?: string;\n /** Default TTL in milliseconds for session extension on access (sliding expiration) */\n defaultTtlMs?: number;\n}\n\n// ============================================\n// Zod Schemas\n// ============================================\n\nexport const transportProtocolSchema = z.enum([\n 'legacy-sse',\n 'sse',\n 'streamable-http',\n 'stateful-http',\n 'stateless-http',\n]);\n\nexport const sseTransportStateSchema = z.object({\n type: z.literal('sse'),\n lastEventId: z.string().optional(),\n lastPing: z.number().optional(),\n connectionState: z.enum(['connecting', 'open', 'closed']).optional(),\n});\n\nexport const streamableHttpTransportStateSchema = z.object({\n type: z.literal('streamable-http'),\n requestSeq: z.number(),\n activeStreamId: z.string().optional(),\n pendingRequests: z.array(z.string()).optional(),\n});\n\nexport const statefulHttpTransportStateSchema = z.object({\n type: z.literal('stateful-http'),\n requestSeq: z.number(),\n pendingResponses: z.array(z.string()).optional(),\n lastActivity: z.number().optional(),\n});\n\nexport const statelessHttpTransportStateSchema = z.object({\n type: z.literal('stateless-http'),\n requestCount: z.number(),\n windowStart: z.number().optional(),\n});\n\nexport const legacySseTransportStateSchema = z.object({\n type: z.literal('legacy-sse'),\n messagePath: z.string(),\n lastEventId: z.string().optional(),\n connectionState: z.enum(['connecting', 'open', 'closed']).optional(),\n});\n\nexport const transportStateSchema = z.discriminatedUnion('type', [\n sseTransportStateSchema,\n streamableHttpTransportStateSchema,\n statefulHttpTransportStateSchema,\n statelessHttpTransportStateSchema,\n legacySseTransportStateSchema,\n]);\n\nexport const transportSessionSchema = z.object({\n id: z.string(),\n authorizationId: z.string(),\n protocol: transportProtocolSchema,\n createdAt: z.number(),\n expiresAt: z.number().optional(),\n nodeId: z.string(),\n clientFingerprint: z.string().optional(),\n transportState: transportStateSchema.optional(),\n});\n\nexport const sessionJwtPayloadSchema = z.object({\n sid: z.string(),\n aid: z.string(),\n proto: transportProtocolSchema,\n nid: z.string(),\n iat: z.number(),\n exp: z.number().optional(),\n});\n\nexport const statelessSessionJwtPayloadSchema = sessionJwtPayloadSchema.extend({\n state: z.string().optional(),\n tokens: z.string().optional(),\n});\n\nexport const encryptedBlobSchema = z.object({\n alg: z.literal('A256GCM'),\n kid: z.string().optional(),\n iv: z.string(),\n tag: z.string(),\n data: z.string(),\n exp: z.number().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport const storedSessionSchema = z.object({\n session: transportSessionSchema,\n authorizationId: z.string(),\n tokens: z.record(z.string(), encryptedBlobSchema).optional(),\n createdAt: z.number(),\n lastAccessedAt: z.number(),\n});\n\nexport const redisConfigSchema = z.object({\n host: z.string().min(1),\n port: z.number().int().positive().optional().default(6379),\n password: z.string().optional(),\n db: z.number().int().nonnegative().optional().default(0),\n tls: z.boolean().optional().default(false),\n keyPrefix: z.string().optional().default('mcp:session:'),\n defaultTtlMs: z.number().int().positive().optional().default(3600000), // 1 hour default\n});\n\n// Stateful storage options (discriminated by store type)\nconst statefulStorageSchema = z.discriminatedUnion('store', [\n z.object({ store: z.literal('memory') }),\n z.object({ store: z.literal('redis'), config: redisConfigSchema }),\n]);\n\n// Session storage config using union instead of discriminatedUnion\n// to avoid duplicate mode values\nexport const sessionStorageConfigSchema = z.union([\n z.object({ mode: z.literal('stateless') }),\n z.object({ mode: z.literal('stateful') }).merge(statefulStorageSchema.options[0]),\n z.object({ mode: z.literal('stateful') }).merge(statefulStorageSchema.options[1]),\n]);\n"]}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isJwt = isJwt;
|
|
4
|
-
exports.getTokenSignatureFingerprint = getTokenSignatureFingerprint;
|
|
5
|
-
exports.deriveTypedUser = deriveTypedUser;
|
|
6
|
-
exports.extractBearerToken = extractBearerToken;
|
|
7
|
-
function isJwt(token) {
|
|
8
|
-
if (!token)
|
|
9
|
-
return false;
|
|
10
|
-
return token.split('.').length === 3;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* If the token is a JWT, returns the raw signature segment (3rd part) as base64url.
|
|
14
|
-
* Otherwise, returns a stable SHA-256(base64url) fingerprint of the whole token,
|
|
15
|
-
* so we can still bind a session id to "this Authorization" deterministically.
|
|
16
|
-
*/
|
|
17
|
-
function getTokenSignatureFingerprint(token) {
|
|
18
|
-
if (isJwt(token)) {
|
|
19
|
-
return token.split('.')[2];
|
|
20
|
-
}
|
|
21
|
-
const crypto = require('crypto');
|
|
22
|
-
const digest = crypto.createHash('sha256').update(token).digest('base64');
|
|
23
|
-
return digest.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
|
|
24
|
-
}
|
|
25
|
-
/** Safely extracts a claim value if it matches the expected type */
|
|
26
|
-
function extractClaimValue(claims, key, validator) {
|
|
27
|
-
const value = claims[key];
|
|
28
|
-
return validator(value) ? value : undefined;
|
|
29
|
-
}
|
|
30
|
-
/** Type guards for claim validation */
|
|
31
|
-
const isString = (value) => typeof value === 'string';
|
|
32
|
-
const isNumber = (value) => typeof value === 'number';
|
|
33
|
-
const isStringOrStringArray = (value) => typeof value === 'string' || Array.isArray(value);
|
|
34
|
-
/** Best-effort typed user derivation from claims */
|
|
35
|
-
function deriveTypedUser(claims) {
|
|
36
|
-
return {
|
|
37
|
-
...claims,
|
|
38
|
-
iss: extractClaimValue(claims, 'iss', isString),
|
|
39
|
-
sid: extractClaimValue(claims, 'sid', isString),
|
|
40
|
-
sub: extractClaimValue(claims, 'sub', isString),
|
|
41
|
-
exp: extractClaimValue(claims, 'exp', isNumber),
|
|
42
|
-
iat: extractClaimValue(claims, 'iat', isNumber),
|
|
43
|
-
aud: extractClaimValue(claims, 'aud', isStringOrStringArray),
|
|
44
|
-
email: extractClaimValue(claims, 'email', isString),
|
|
45
|
-
preferred_username: extractClaimValue(claims, 'preferred_username', isString),
|
|
46
|
-
username: extractClaimValue(claims, 'username', isString),
|
|
47
|
-
name: extractClaimValue(claims, 'name', isString),
|
|
48
|
-
picture: extractClaimValue(claims, 'picture', isString),
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
function extractBearerToken(header) {
|
|
52
|
-
if (!header)
|
|
53
|
-
return undefined;
|
|
54
|
-
const m = header.match(/^\s*Bearer\s+(.+)\s*$/i);
|
|
55
|
-
return m ? m[1].trim() : undefined;
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=auth-token.utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-token.utils.js","sourceRoot":"","sources":["../../../../../src/auth/session/utils/auth-token.utils.ts"],"names":[],"mappings":"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","sourcesContent":["// auth/session/utils/auth-token.utils.ts\nimport { UserClaim } from '../../../common';\n\nexport function isJwt(token: string | undefined): boolean {\n if (!token) return false;\n return token.split('.').length === 3;\n}\n\n/**\n * If the token is a JWT, returns the raw signature segment (3rd part) as base64url.\n * Otherwise, returns a stable SHA-256(base64url) fingerprint of the whole token,\n * so we can still bind a session id to \"this Authorization\" deterministically.\n */\nexport function getTokenSignatureFingerprint(token: string): string {\n if (isJwt(token)) {\n return token.split('.')[2]!;\n }\n const crypto = require('crypto') as typeof import('crypto');\n const digest = crypto.createHash('sha256').update(token).digest('base64');\n return digest.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\n/** Safely extracts a claim value if it matches the expected type */\nfunction extractClaimValue<T>(\n claims: Record<string, any>,\n key: string,\n validator: (value: any) => value is T,\n): T | undefined {\n const value = claims[key];\n return validator(value) ? value : undefined;\n}\n\n/** Type guards for claim validation */\nconst isString = (value: any): value is string => typeof value === 'string';\nconst isNumber = (value: any): value is number => typeof value === 'number';\nconst isStringOrStringArray = (value: any): value is string | string[] =>\n typeof value === 'string' || Array.isArray(value);\n\n/** Best-effort typed user derivation from claims */\nexport function deriveTypedUser(claims: Record<string, any>): UserClaim {\n return {\n ...claims,\n iss: extractClaimValue(claims, 'iss', isString)!,\n sid: extractClaimValue(claims, 'sid', isString),\n sub: extractClaimValue(claims, 'sub', isString)!,\n exp: extractClaimValue(claims, 'exp', isNumber),\n iat: extractClaimValue(claims, 'iat', isNumber),\n aud: extractClaimValue(claims, 'aud', isStringOrStringArray),\n email: extractClaimValue(claims, 'email', isString),\n preferred_username: extractClaimValue(claims, 'preferred_username', isString),\n username: extractClaimValue(claims, 'username', isString),\n name: extractClaimValue(claims, 'name', isString),\n picture: extractClaimValue(claims, 'picture', isString),\n };\n}\n\nexport function extractBearerToken(header?: string): string | undefined {\n if (!header) return undefined;\n const m = header.match(/^\\s*Bearer\\s+(.+)\\s*$/i);\n return m ? m[1].trim() : undefined;\n}\n"]}
|