@portel/photon 1.4.1 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +326 -1177
- package/dist/auto-ui/beam.d.ts +14 -0
- package/dist/auto-ui/beam.d.ts.map +1 -0
- package/dist/auto-ui/beam.js +3057 -0
- package/dist/auto-ui/beam.js.map +1 -0
- package/dist/auto-ui/bridge/index.d.ts +37 -0
- package/dist/auto-ui/bridge/index.d.ts.map +1 -0
- package/dist/auto-ui/bridge/index.js +555 -0
- package/dist/auto-ui/bridge/index.js.map +1 -0
- package/dist/auto-ui/bridge/openai-shim.d.ts +20 -0
- package/dist/auto-ui/bridge/openai-shim.d.ts.map +1 -0
- package/dist/auto-ui/bridge/openai-shim.js +231 -0
- package/dist/auto-ui/bridge/openai-shim.js.map +1 -0
- package/dist/auto-ui/bridge/photon-app.d.ts +162 -0
- package/dist/auto-ui/bridge/photon-app.d.ts.map +1 -0
- package/dist/auto-ui/bridge/photon-app.js +460 -0
- package/dist/auto-ui/bridge/photon-app.js.map +1 -0
- package/dist/auto-ui/bridge/types.d.ts +128 -0
- package/dist/auto-ui/bridge/types.d.ts.map +1 -0
- package/dist/auto-ui/bridge/types.js +7 -0
- package/dist/auto-ui/bridge/types.js.map +1 -0
- package/dist/auto-ui/components/card.d.ts +13 -0
- package/dist/auto-ui/components/card.d.ts.map +1 -0
- package/dist/auto-ui/components/card.js +64 -0
- package/dist/auto-ui/components/card.js.map +1 -0
- package/dist/auto-ui/components/form.d.ts +15 -0
- package/dist/auto-ui/components/form.d.ts.map +1 -0
- package/dist/auto-ui/components/form.js +72 -0
- package/dist/auto-ui/components/form.js.map +1 -0
- package/dist/auto-ui/components/list.d.ts +13 -0
- package/dist/auto-ui/components/list.d.ts.map +1 -0
- package/dist/auto-ui/components/list.js +58 -0
- package/dist/auto-ui/components/list.js.map +1 -0
- package/dist/auto-ui/components/progress.d.ts +18 -0
- package/dist/auto-ui/components/progress.d.ts.map +1 -0
- package/dist/auto-ui/components/progress.js +125 -0
- package/dist/auto-ui/components/progress.js.map +1 -0
- package/dist/auto-ui/components/table.d.ts +13 -0
- package/dist/auto-ui/components/table.d.ts.map +1 -0
- package/dist/auto-ui/components/table.js +82 -0
- package/dist/auto-ui/components/table.js.map +1 -0
- package/dist/auto-ui/components/tree.d.ts +13 -0
- package/dist/auto-ui/components/tree.d.ts.map +1 -0
- package/dist/auto-ui/components/tree.js +61 -0
- package/dist/auto-ui/components/tree.js.map +1 -0
- package/dist/auto-ui/daemon-tools.d.ts +45 -0
- package/dist/auto-ui/daemon-tools.d.ts.map +1 -0
- package/dist/auto-ui/daemon-tools.js +580 -0
- package/dist/auto-ui/daemon-tools.js.map +1 -0
- package/dist/auto-ui/design-system/index.d.ts +21 -0
- package/dist/auto-ui/design-system/index.d.ts.map +1 -0
- package/dist/auto-ui/design-system/index.js +27 -0
- package/dist/auto-ui/design-system/index.js.map +1 -0
- package/dist/auto-ui/design-system/tokens.d.ts +9 -0
- package/dist/auto-ui/design-system/tokens.d.ts.map +1 -0
- package/dist/auto-ui/design-system/tokens.js +27 -0
- package/dist/auto-ui/design-system/tokens.js.map +1 -0
- package/dist/auto-ui/design-system/transaction-ui.d.ts +70 -0
- package/dist/auto-ui/design-system/transaction-ui.d.ts.map +1 -0
- package/dist/auto-ui/design-system/transaction-ui.js +982 -0
- package/dist/auto-ui/design-system/transaction-ui.js.map +1 -0
- package/dist/auto-ui/frontend/index.html +84 -0
- package/dist/auto-ui/index.d.ts +23 -0
- package/dist/auto-ui/index.d.ts.map +1 -0
- package/dist/auto-ui/index.js +28 -0
- package/dist/auto-ui/index.js.map +1 -0
- package/dist/auto-ui/openapi-generator.d.ts +71 -0
- package/dist/auto-ui/openapi-generator.d.ts.map +1 -0
- package/dist/auto-ui/openapi-generator.js +223 -0
- package/dist/auto-ui/openapi-generator.js.map +1 -0
- package/dist/auto-ui/photon-bridge.d.ts +159 -0
- package/dist/auto-ui/photon-bridge.d.ts.map +1 -0
- package/dist/auto-ui/photon-bridge.js +262 -0
- package/dist/auto-ui/photon-bridge.js.map +1 -0
- package/dist/auto-ui/photon-host.d.ts +113 -0
- package/dist/auto-ui/photon-host.d.ts.map +1 -0
- package/dist/auto-ui/photon-host.js +284 -0
- package/dist/auto-ui/photon-host.js.map +1 -0
- package/dist/auto-ui/platform-compat.d.ts +71 -0
- package/dist/auto-ui/platform-compat.d.ts.map +1 -0
- package/dist/auto-ui/platform-compat.js +628 -0
- package/dist/auto-ui/platform-compat.js.map +1 -0
- package/dist/auto-ui/playground-html.d.ts +15 -0
- package/dist/auto-ui/playground-html.d.ts.map +1 -0
- package/dist/auto-ui/playground-html.js +1113 -0
- package/dist/auto-ui/playground-html.js.map +1 -0
- package/dist/auto-ui/playground-server.d.ts +7 -0
- package/dist/auto-ui/playground-server.d.ts.map +1 -0
- package/dist/auto-ui/playground-server.js +840 -0
- package/dist/auto-ui/playground-server.js.map +1 -0
- package/dist/auto-ui/registry.d.ts +13 -0
- package/dist/auto-ui/registry.d.ts.map +1 -0
- package/dist/auto-ui/registry.js +62 -0
- package/dist/auto-ui/registry.js.map +1 -0
- package/dist/auto-ui/renderer.d.ts +14 -0
- package/dist/auto-ui/renderer.d.ts.map +1 -0
- package/dist/auto-ui/renderer.js +88 -0
- package/dist/auto-ui/renderer.js.map +1 -0
- package/dist/auto-ui/rendering/components.d.ts +29 -0
- package/dist/auto-ui/rendering/components.d.ts.map +1 -0
- package/dist/auto-ui/rendering/components.js +773 -0
- package/dist/auto-ui/rendering/components.js.map +1 -0
- package/dist/auto-ui/rendering/field-analyzer.d.ts +48 -0
- package/dist/auto-ui/rendering/field-analyzer.d.ts.map +1 -0
- package/dist/auto-ui/rendering/field-analyzer.js +270 -0
- package/dist/auto-ui/rendering/field-analyzer.js.map +1 -0
- package/dist/auto-ui/rendering/field-renderers.d.ts +64 -0
- package/dist/auto-ui/rendering/field-renderers.d.ts.map +1 -0
- package/dist/auto-ui/rendering/field-renderers.js +317 -0
- package/dist/auto-ui/rendering/field-renderers.js.map +1 -0
- package/dist/auto-ui/rendering/index.d.ts +28 -0
- package/dist/auto-ui/rendering/index.d.ts.map +1 -0
- package/dist/auto-ui/rendering/index.js +60 -0
- package/dist/auto-ui/rendering/index.js.map +1 -0
- package/dist/auto-ui/rendering/layout-selector.d.ts +48 -0
- package/dist/auto-ui/rendering/layout-selector.d.ts.map +1 -0
- package/dist/auto-ui/rendering/layout-selector.js +352 -0
- package/dist/auto-ui/rendering/layout-selector.js.map +1 -0
- package/dist/auto-ui/rendering/template-engine.d.ts +41 -0
- package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -0
- package/dist/auto-ui/rendering/template-engine.js +238 -0
- package/dist/auto-ui/rendering/template-engine.js.map +1 -0
- package/dist/auto-ui/streamable-http-transport.d.ts +103 -0
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
- package/dist/auto-ui/streamable-http-transport.js +1875 -0
- package/dist/auto-ui/streamable-http-transport.js.map +1 -0
- package/dist/auto-ui/types.d.ts +384 -0
- package/dist/auto-ui/types.d.ts.map +1 -0
- package/dist/auto-ui/types.js +92 -0
- package/dist/auto-ui/types.js.map +1 -0
- package/dist/beam.bundle.js +63137 -0
- package/dist/beam.bundle.js.map +7 -0
- package/dist/claude-code-plugin.d.ts.map +1 -1
- package/dist/claude-code-plugin.js +30 -30
- package/dist/claude-code-plugin.js.map +1 -1
- package/dist/cli/commands/info.d.ts +11 -0
- package/dist/cli/commands/info.d.ts.map +1 -0
- package/dist/cli/commands/info.js +313 -0
- package/dist/cli/commands/info.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +11 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +198 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/package-app.d.ts +9 -0
- package/dist/cli/commands/package-app.d.ts.map +1 -0
- package/dist/cli/commands/package-app.js +191 -0
- package/dist/cli/commands/package-app.js.map +1 -0
- package/dist/cli/commands/package.d.ts +11 -0
- package/dist/cli/commands/package.d.ts.map +1 -0
- package/dist/cli/commands/package.js +573 -0
- package/dist/cli/commands/package.js.map +1 -0
- package/dist/cli-alias.d.ts.map +1 -1
- package/dist/cli-alias.js +30 -28
- package/dist/cli-alias.js.map +1 -1
- package/dist/cli-formatter.d.ts +8 -24
- package/dist/cli-formatter.d.ts.map +1 -1
- package/dist/cli-formatter.js +8 -325
- package/dist/cli-formatter.js.map +1 -1
- package/dist/cli.d.ts +15 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1166 -1131
- package/dist/cli.js.map +1 -1
- package/dist/daemon/client.d.ts +84 -3
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +561 -11
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.d.ts +51 -12
- package/dist/daemon/manager.d.ts.map +1 -1
- package/dist/daemon/manager.js +122 -61
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/protocol.d.ts +62 -6
- package/dist/daemon/protocol.d.ts.map +1 -1
- package/dist/daemon/protocol.js +76 -1
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/server.d.ts +6 -6
- package/dist/daemon/server.js +743 -133
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/session-manager.d.ts +8 -1
- package/dist/daemon/session-manager.d.ts.map +1 -1
- package/dist/daemon/session-manager.js +32 -9
- package/dist/daemon/session-manager.js.map +1 -1
- package/dist/deploy/cloudflare.d.ts +12 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +216 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +191 -21
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +1186 -319
- package/dist/loader.js.map +1 -1
- package/dist/markdown-utils.d.ts +8 -0
- package/dist/markdown-utils.d.ts.map +1 -0
- package/dist/markdown-utils.js +63 -0
- package/dist/markdown-utils.js.map +1 -0
- package/dist/marketplace-manager.d.ts +10 -0
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +112 -28
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/mcp-client.d.ts +9 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +11 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp-elicitation.d.ts +32 -0
- package/dist/mcp-elicitation.d.ts.map +1 -0
- package/dist/mcp-elicitation.js +26 -0
- package/dist/mcp-elicitation.js.map +1 -0
- package/dist/path-resolver.d.ts +9 -12
- package/dist/path-resolver.d.ts.map +1 -1
- package/dist/path-resolver.js +13 -43
- package/dist/path-resolver.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +204 -77
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +89 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +560 -32
- package/dist/photon-doc-extractor.js.map +1 -1
- package/dist/photons/maker.photon.d.ts +182 -0
- package/dist/photons/maker.photon.d.ts.map +1 -0
- package/dist/photons/maker.photon.js +504 -0
- package/dist/photons/maker.photon.js.map +1 -0
- package/dist/photons/maker.photon.ts +626 -0
- package/dist/photons/marketplace.photon.d.ts +110 -0
- package/dist/photons/marketplace.photon.d.ts.map +1 -0
- package/dist/photons/marketplace.photon.js +260 -0
- package/dist/photons/marketplace.photon.js.map +1 -0
- package/dist/photons/marketplace.photon.ts +378 -0
- package/dist/photons/tunnel.photon.d.ts +80 -0
- package/dist/photons/tunnel.photon.d.ts.map +1 -0
- package/dist/photons/tunnel.photon.js +269 -0
- package/dist/photons/tunnel.photon.js.map +1 -0
- package/dist/photons/tunnel.photon.ts +345 -0
- package/dist/security-scanner.d.ts.map +1 -1
- package/dist/security-scanner.js +18 -15
- package/dist/security-scanner.js.map +1 -1
- package/dist/serv/auth/jwt.d.ts +89 -0
- package/dist/serv/auth/jwt.d.ts.map +1 -0
- package/dist/serv/auth/jwt.js +239 -0
- package/dist/serv/auth/jwt.js.map +1 -0
- package/dist/serv/auth/oauth.d.ts +117 -0
- package/dist/serv/auth/oauth.d.ts.map +1 -0
- package/dist/serv/auth/oauth.js +395 -0
- package/dist/serv/auth/oauth.js.map +1 -0
- package/dist/serv/auth/well-known.d.ts +60 -0
- package/dist/serv/auth/well-known.d.ts.map +1 -0
- package/dist/serv/auth/well-known.js +154 -0
- package/dist/serv/auth/well-known.js.map +1 -0
- package/dist/serv/db/d1-client.d.ts +65 -0
- package/dist/serv/db/d1-client.d.ts.map +1 -0
- package/dist/serv/db/d1-client.js +137 -0
- package/dist/serv/db/d1-client.js.map +1 -0
- package/dist/serv/db/d1-stores.d.ts +62 -0
- package/dist/serv/db/d1-stores.d.ts.map +1 -0
- package/dist/serv/db/d1-stores.js +307 -0
- package/dist/serv/db/d1-stores.js.map +1 -0
- package/dist/serv/index.d.ts +114 -0
- package/dist/serv/index.d.ts.map +1 -0
- package/dist/serv/index.js +172 -0
- package/dist/serv/index.js.map +1 -0
- package/dist/serv/local.d.ts +118 -0
- package/dist/serv/local.d.ts.map +1 -0
- package/dist/serv/local.js +392 -0
- package/dist/serv/local.js.map +1 -0
- package/dist/serv/middleware/auth.d.ts +66 -0
- package/dist/serv/middleware/auth.d.ts.map +1 -0
- package/dist/serv/middleware/auth.js +178 -0
- package/dist/serv/middleware/auth.js.map +1 -0
- package/dist/serv/middleware/tenant.d.ts +94 -0
- package/dist/serv/middleware/tenant.d.ts.map +1 -0
- package/dist/serv/middleware/tenant.js +152 -0
- package/dist/serv/middleware/tenant.js.map +1 -0
- package/dist/serv/runtime/executor.d.ts +76 -0
- package/dist/serv/runtime/executor.d.ts.map +1 -0
- package/dist/serv/runtime/executor.js +105 -0
- package/dist/serv/runtime/executor.js.map +1 -0
- package/dist/serv/runtime/index.d.ts +8 -0
- package/dist/serv/runtime/index.d.ts.map +1 -0
- package/dist/serv/runtime/index.js +10 -0
- package/dist/serv/runtime/index.js.map +1 -0
- package/dist/serv/runtime/oauth-context.d.ts +121 -0
- package/dist/serv/runtime/oauth-context.d.ts.map +1 -0
- package/dist/serv/runtime/oauth-context.js +153 -0
- package/dist/serv/runtime/oauth-context.js.map +1 -0
- package/dist/serv/session/kv-store.d.ts +54 -0
- package/dist/serv/session/kv-store.d.ts.map +1 -0
- package/dist/serv/session/kv-store.js +149 -0
- package/dist/serv/session/kv-store.js.map +1 -0
- package/dist/serv/session/store.d.ts +113 -0
- package/dist/serv/session/store.d.ts.map +1 -0
- package/dist/serv/session/store.js +284 -0
- package/dist/serv/session/store.js.map +1 -0
- package/dist/serv/types/index.d.ts +147 -0
- package/dist/serv/types/index.d.ts.map +1 -0
- package/dist/serv/types/index.js +8 -0
- package/dist/serv/types/index.js.map +1 -0
- package/dist/serv/vault/token-vault.d.ts +102 -0
- package/dist/serv/vault/token-vault.d.ts.map +1 -0
- package/dist/serv/vault/token-vault.js +177 -0
- package/dist/serv/vault/token-vault.js.map +1 -0
- package/dist/server.d.ts +184 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1995 -86
- package/dist/server.js.map +1 -1
- package/dist/shared/cli-sections.d.ts +6 -0
- package/dist/shared/cli-sections.d.ts.map +1 -0
- package/dist/shared/cli-sections.js +16 -0
- package/dist/shared/cli-sections.js.map +1 -0
- package/dist/shared/cli-utils.d.ts +81 -0
- package/dist/shared/cli-utils.d.ts.map +1 -0
- package/dist/shared/cli-utils.js +174 -0
- package/dist/shared/cli-utils.js.map +1 -0
- package/dist/shared/config-docs.d.ts +6 -0
- package/dist/shared/config-docs.d.ts.map +1 -0
- package/dist/shared/config-docs.js +6 -0
- package/dist/shared/config-docs.js.map +1 -0
- package/dist/shared/error-handler.d.ts +128 -0
- package/dist/shared/error-handler.d.ts.map +1 -0
- package/dist/shared/error-handler.js +342 -0
- package/dist/shared/error-handler.js.map +1 -0
- package/dist/shared/logger.d.ts +42 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +123 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/performance.d.ts +65 -0
- package/dist/shared/performance.d.ts.map +1 -0
- package/dist/shared/performance.js +136 -0
- package/dist/shared/performance.js.map +1 -0
- package/dist/shared/task-runner.d.ts +2 -0
- package/dist/shared/task-runner.d.ts.map +1 -0
- package/dist/shared/task-runner.js +16 -0
- package/dist/shared/task-runner.js.map +1 -0
- package/dist/shared/validation.d.ts +6 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +6 -0
- package/dist/shared/validation.js.map +1 -0
- package/dist/shared-utils.d.ts +63 -0
- package/dist/shared-utils.d.ts.map +1 -0
- package/dist/shared-utils.js +123 -0
- package/dist/shared-utils.js.map +1 -0
- package/dist/template-manager.d.ts +23 -2
- package/dist/template-manager.d.ts.map +1 -1
- package/dist/template-manager.js +176 -87
- package/dist/template-manager.js.map +1 -1
- package/dist/test-client.d.ts.map +1 -1
- package/dist/test-client.js +10 -8
- package/dist/test-client.js.map +1 -1
- package/dist/test-runner.d.ts +52 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +785 -0
- package/dist/test-runner.js.map +1 -0
- package/dist/testing.d.ts +103 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +163 -0
- package/dist/testing.js.map +1 -0
- package/dist/version-checker.d.ts.map +1 -1
- package/dist/version-checker.js +2 -2
- package/dist/version-checker.js.map +1 -1
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/dist/watcher.d.ts +6 -3
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +49 -10
- package/dist/watcher.js.map +1 -1
- package/package.json +57 -7
- package/templates/cloudflare/worker.ts.template +381 -0
- package/templates/cloudflare/wrangler.toml.template +9 -0
- package/dist/base.d.ts +0 -58
- package/dist/base.d.ts.map +0 -1
- package/dist/base.js +0 -92
- package/dist/base.js.map +0 -1
- package/dist/dependency-manager.d.ts +0 -49
- package/dist/dependency-manager.d.ts.map +0 -1
- package/dist/dependency-manager.js +0 -165
- package/dist/dependency-manager.js.map +0 -1
- package/dist/registry-manager.d.ts +0 -76
- package/dist/registry-manager.d.ts.map +0 -1
- package/dist/registry-manager.js +0 -220
- package/dist/registry-manager.js.map +0 -1
- package/dist/schema-extractor.d.ts +0 -110
- package/dist/schema-extractor.d.ts.map +0 -1
- package/dist/schema-extractor.js +0 -727
- package/dist/schema-extractor.js.map +0 -1
- package/dist/test-marketplace-sources.d.ts +0 -5
- package/dist/test-marketplace-sources.d.ts.map +0 -1
- package/dist/test-marketplace-sources.js +0 -53
- package/dist/test-marketplace-sources.js.map +0 -1
- package/dist/types.d.ts +0 -109
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -12
- package/dist/types.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth Runtime Context for SERV
|
|
3
|
+
*
|
|
4
|
+
* Provides OAuth token access within photon execution context.
|
|
5
|
+
* Enables photons to request OAuth tokens via yield-based elicitation.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// MCP Elicitation Error (per MCP spec)
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/**
|
|
11
|
+
* MCP Elicitation Error
|
|
12
|
+
*
|
|
13
|
+
* When a photon needs user authorization, this error is returned
|
|
14
|
+
* following the MCP elicitation protocol.
|
|
15
|
+
*/
|
|
16
|
+
export class OAuthElicitationRequired extends Error {
|
|
17
|
+
code = 'OAUTH_ELICITATION_REQUIRED';
|
|
18
|
+
elicitationUrl;
|
|
19
|
+
elicitationId;
|
|
20
|
+
provider;
|
|
21
|
+
scopes;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
super(options.message || `OAuth authorization required for ${options.provider}`);
|
|
24
|
+
this.name = 'OAuthElicitationRequired';
|
|
25
|
+
this.elicitationUrl = options.elicitationUrl;
|
|
26
|
+
this.elicitationId = options.elicitationId;
|
|
27
|
+
this.provider = options.provider;
|
|
28
|
+
this.scopes = options.scopes;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Convert to MCP error response format
|
|
32
|
+
*/
|
|
33
|
+
toMCPError() {
|
|
34
|
+
return {
|
|
35
|
+
error: {
|
|
36
|
+
code: this.code,
|
|
37
|
+
message: this.message,
|
|
38
|
+
data: {
|
|
39
|
+
elicitation: {
|
|
40
|
+
type: 'oauth',
|
|
41
|
+
url: this.elicitationUrl,
|
|
42
|
+
id: this.elicitationId,
|
|
43
|
+
provider: this.provider,
|
|
44
|
+
scopes: this.scopes,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* OAuth context for photon execution
|
|
53
|
+
*
|
|
54
|
+
* Provides a way for photons to request OAuth tokens during execution.
|
|
55
|
+
* Integrates with SERV's OAuth flow handler to manage grants and elicitations.
|
|
56
|
+
*/
|
|
57
|
+
export class OAuthContext {
|
|
58
|
+
session;
|
|
59
|
+
photonId;
|
|
60
|
+
tenantId;
|
|
61
|
+
oauthFlow;
|
|
62
|
+
tokenVault;
|
|
63
|
+
constructor(config) {
|
|
64
|
+
this.session = config.session;
|
|
65
|
+
this.photonId = config.photonId;
|
|
66
|
+
this.tenantId = config.tenantId;
|
|
67
|
+
this.oauthFlow = config.oauthFlow;
|
|
68
|
+
this.tokenVault = config.tokenVault;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Request an OAuth token
|
|
72
|
+
*
|
|
73
|
+
* @param provider - OAuth provider ID
|
|
74
|
+
* @param scopes - Required scopes
|
|
75
|
+
* @returns Token if available, or throws OAuthElicitationRequired
|
|
76
|
+
*/
|
|
77
|
+
async requestToken(provider, scopes) {
|
|
78
|
+
// Check for existing grant
|
|
79
|
+
const grantCheck = await this.oauthFlow.checkGrant(this.tenantId, this.photonId, provider, scopes, this.session.userId);
|
|
80
|
+
if (grantCheck.valid && grantCheck.token) {
|
|
81
|
+
return grantCheck.token;
|
|
82
|
+
}
|
|
83
|
+
// Need to start elicitation
|
|
84
|
+
const elicitation = await this.oauthFlow.startElicitation(this.session, this.photonId, provider, scopes);
|
|
85
|
+
throw new OAuthElicitationRequired({
|
|
86
|
+
elicitationUrl: elicitation.url,
|
|
87
|
+
elicitationId: elicitation.elicitationId,
|
|
88
|
+
provider,
|
|
89
|
+
scopes,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Handle an OAuth ask yield
|
|
94
|
+
*
|
|
95
|
+
* @param ask - The OAuth ask yield from the photon
|
|
96
|
+
* @returns OAuth response
|
|
97
|
+
*/
|
|
98
|
+
async handleOAuthAsk(ask) {
|
|
99
|
+
try {
|
|
100
|
+
const token = await this.requestToken(ask.provider, ask.scopes);
|
|
101
|
+
return { success: true, token };
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error instanceof OAuthElicitationRequired) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
elicitationUrl: error.elicitationUrl,
|
|
108
|
+
elicitationId: error.elicitationId,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
error: error instanceof Error ? error.message : String(error),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create an input provider that handles OAuth asks
|
|
120
|
+
*
|
|
121
|
+
* Wraps the standard input provider to add OAuth token handling.
|
|
122
|
+
* When an 'oauth' ask is received, it checks for existing grants
|
|
123
|
+
* or initiates an elicitation flow.
|
|
124
|
+
*/
|
|
125
|
+
export function createOAuthInputProvider(oauthContext, fallbackProvider) {
|
|
126
|
+
return async (ask) => {
|
|
127
|
+
// Handle OAuth asks
|
|
128
|
+
if ('ask' in ask && ask.ask === 'oauth') {
|
|
129
|
+
const oauthAsk = ask;
|
|
130
|
+
const response = await oauthContext.handleOAuthAsk(oauthAsk);
|
|
131
|
+
if (response.success && response.token) {
|
|
132
|
+
return response.token;
|
|
133
|
+
}
|
|
134
|
+
// Elicitation required - throw error
|
|
135
|
+
if (response.elicitationUrl && response.elicitationId) {
|
|
136
|
+
throw new OAuthElicitationRequired({
|
|
137
|
+
elicitationUrl: response.elicitationUrl,
|
|
138
|
+
elicitationId: response.elicitationId,
|
|
139
|
+
provider: oauthAsk.provider,
|
|
140
|
+
scopes: oauthAsk.scopes,
|
|
141
|
+
message: oauthAsk.message,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
throw new Error(response.error || 'OAuth token request failed');
|
|
145
|
+
}
|
|
146
|
+
// Delegate to fallback provider for other ask types
|
|
147
|
+
if (fallbackProvider) {
|
|
148
|
+
return fallbackProvider(ask);
|
|
149
|
+
}
|
|
150
|
+
throw new Error(`Unhandled ask type: ${ask.ask}`);
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=oauth-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-context.js","sourceRoot":"","sources":["../../../src/serv/runtime/oauth-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare KV Session Store
|
|
3
|
+
*
|
|
4
|
+
* Uses Cloudflare KV for fast, globally distributed session storage
|
|
5
|
+
*/
|
|
6
|
+
import type { Session, SessionCreateOptions } from '../types/index.js';
|
|
7
|
+
import type { SessionStore, SessionConfig } from './store.js';
|
|
8
|
+
/**
|
|
9
|
+
* Cloudflare KV Namespace interface
|
|
10
|
+
* Compatible with @cloudflare/workers-types KVNamespace
|
|
11
|
+
*/
|
|
12
|
+
export interface KVNamespace {
|
|
13
|
+
get(key: string, options?: {
|
|
14
|
+
type?: 'text' | 'json' | 'arrayBuffer' | 'stream';
|
|
15
|
+
}): Promise<string | null>;
|
|
16
|
+
get(key: string, options: {
|
|
17
|
+
type: 'json';
|
|
18
|
+
}): Promise<unknown | null>;
|
|
19
|
+
put(key: string, value: string, options?: {
|
|
20
|
+
expirationTtl?: number;
|
|
21
|
+
metadata?: unknown;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
delete(key: string): Promise<void>;
|
|
24
|
+
list(options?: {
|
|
25
|
+
prefix?: string;
|
|
26
|
+
limit?: number;
|
|
27
|
+
cursor?: string;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
keys: Array<{
|
|
30
|
+
name: string;
|
|
31
|
+
expiration?: number;
|
|
32
|
+
metadata?: unknown;
|
|
33
|
+
}>;
|
|
34
|
+
list_complete: boolean;
|
|
35
|
+
cursor?: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export declare class KVSessionStore implements SessionStore {
|
|
39
|
+
private kv;
|
|
40
|
+
private config;
|
|
41
|
+
private keyPrefix;
|
|
42
|
+
constructor(kv: KVNamespace, config?: Partial<SessionConfig>, keyPrefix?: string);
|
|
43
|
+
private sessionKey;
|
|
44
|
+
private userSessionsKey;
|
|
45
|
+
create(options: SessionCreateOptions): Promise<Session>;
|
|
46
|
+
get(sessionId: string): Promise<Session | null>;
|
|
47
|
+
getByUser(tenantId: string, userId: string): Promise<Session[]>;
|
|
48
|
+
touch(sessionId: string): Promise<void>;
|
|
49
|
+
destroy(sessionId: string): Promise<void>;
|
|
50
|
+
destroyByUser(tenantId: string, userId: string): Promise<number>;
|
|
51
|
+
cleanup(): Promise<number>;
|
|
52
|
+
close(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=kv-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-store.d.ts","sourceRoot":"","sources":["../../../src/serv/session/kv-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM9D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;KAAE,GAC9D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrE,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GACvD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5E,IAAI,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACvE,aAAa,EAAE,OAAO,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAgBD,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEd,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,SAAa;IAMpF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAIjB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmCvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkB/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA0B/D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare KV Session Store
|
|
3
|
+
*
|
|
4
|
+
* Uses Cloudflare KV for fast, globally distributed session storage
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Configuration
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
defaultTtlSeconds: 15 * 60, // 15 minutes
|
|
12
|
+
maxTtlSeconds: 24 * 60 * 60, // 24 hours
|
|
13
|
+
cleanupIntervalMs: 5 * 60 * 1000, // Not used - KV handles TTL
|
|
14
|
+
};
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// KV Session Store
|
|
17
|
+
// ============================================================================
|
|
18
|
+
export class KVSessionStore {
|
|
19
|
+
kv;
|
|
20
|
+
config;
|
|
21
|
+
keyPrefix;
|
|
22
|
+
constructor(kv, config, keyPrefix = 'session:') {
|
|
23
|
+
this.kv = kv;
|
|
24
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
25
|
+
this.keyPrefix = keyPrefix;
|
|
26
|
+
}
|
|
27
|
+
sessionKey(id) {
|
|
28
|
+
return `${this.keyPrefix}${id}`;
|
|
29
|
+
}
|
|
30
|
+
userSessionsKey(tenantId, userId) {
|
|
31
|
+
return `${this.keyPrefix}user:${tenantId}:${userId}`;
|
|
32
|
+
}
|
|
33
|
+
async create(options) {
|
|
34
|
+
const now = new Date();
|
|
35
|
+
const ttl = Math.min(options.ttlSeconds ?? this.config.defaultTtlSeconds, this.config.maxTtlSeconds);
|
|
36
|
+
const session = {
|
|
37
|
+
id: randomUUID(),
|
|
38
|
+
tenantId: options.tenantId,
|
|
39
|
+
userId: options.userId,
|
|
40
|
+
clientId: options.clientId,
|
|
41
|
+
clientFingerprint: options.clientFingerprint,
|
|
42
|
+
createdAt: now,
|
|
43
|
+
expiresAt: new Date(now.getTime() + ttl * 1000),
|
|
44
|
+
lastActivityAt: now,
|
|
45
|
+
};
|
|
46
|
+
// Store session with TTL
|
|
47
|
+
await this.kv.put(this.sessionKey(session.id), JSON.stringify(session), { expirationTtl: ttl });
|
|
48
|
+
// Track user sessions (if user is provided)
|
|
49
|
+
if (options.userId) {
|
|
50
|
+
const userKey = this.userSessionsKey(options.tenantId, options.userId);
|
|
51
|
+
const existing = (await this.kv.get(userKey, { type: 'json' }));
|
|
52
|
+
const sessionIds = existing ?? [];
|
|
53
|
+
sessionIds.push(session.id);
|
|
54
|
+
await this.kv.put(userKey, JSON.stringify(sessionIds), {
|
|
55
|
+
expirationTtl: this.config.maxTtlSeconds,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return session;
|
|
59
|
+
}
|
|
60
|
+
async get(sessionId) {
|
|
61
|
+
const data = await this.kv.get(this.sessionKey(sessionId));
|
|
62
|
+
if (!data)
|
|
63
|
+
return null;
|
|
64
|
+
const session = JSON.parse(data);
|
|
65
|
+
session.createdAt = new Date(session.createdAt);
|
|
66
|
+
session.expiresAt = new Date(session.expiresAt);
|
|
67
|
+
session.lastActivityAt = new Date(session.lastActivityAt);
|
|
68
|
+
// KV TTL should handle expiry, but double-check
|
|
69
|
+
if (session.expiresAt.getTime() < Date.now()) {
|
|
70
|
+
await this.destroy(sessionId);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return session;
|
|
74
|
+
}
|
|
75
|
+
async getByUser(tenantId, userId) {
|
|
76
|
+
const userKey = this.userSessionsKey(tenantId, userId);
|
|
77
|
+
const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
|
|
78
|
+
if (!sessionIds)
|
|
79
|
+
return [];
|
|
80
|
+
const sessions = [];
|
|
81
|
+
const validIds = [];
|
|
82
|
+
for (const id of sessionIds) {
|
|
83
|
+
const session = await this.get(id);
|
|
84
|
+
if (session) {
|
|
85
|
+
sessions.push(session);
|
|
86
|
+
validIds.push(id);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Clean up stale references if needed
|
|
90
|
+
if (validIds.length !== sessionIds.length) {
|
|
91
|
+
await this.kv.put(userKey, JSON.stringify(validIds), {
|
|
92
|
+
expirationTtl: this.config.maxTtlSeconds,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return sessions;
|
|
96
|
+
}
|
|
97
|
+
async touch(sessionId) {
|
|
98
|
+
const session = await this.get(sessionId);
|
|
99
|
+
if (!session)
|
|
100
|
+
return;
|
|
101
|
+
const now = new Date();
|
|
102
|
+
const ttl = this.config.defaultTtlSeconds;
|
|
103
|
+
const maxExpiry = new Date(session.createdAt.getTime() + this.config.maxTtlSeconds * 1000);
|
|
104
|
+
const newExpiry = new Date(Math.min(now.getTime() + ttl * 1000, maxExpiry.getTime()));
|
|
105
|
+
const remainingTtl = Math.floor((newExpiry.getTime() - now.getTime()) / 1000);
|
|
106
|
+
session.lastActivityAt = now;
|
|
107
|
+
session.expiresAt = newExpiry;
|
|
108
|
+
await this.kv.put(this.sessionKey(sessionId), JSON.stringify(session), {
|
|
109
|
+
expirationTtl: remainingTtl,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async destroy(sessionId) {
|
|
113
|
+
const session = await this.get(sessionId);
|
|
114
|
+
if (session?.userId) {
|
|
115
|
+
const userKey = this.userSessionsKey(session.tenantId, session.userId);
|
|
116
|
+
const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
|
|
117
|
+
if (sessionIds) {
|
|
118
|
+
const filtered = sessionIds.filter((id) => id !== sessionId);
|
|
119
|
+
if (filtered.length > 0) {
|
|
120
|
+
await this.kv.put(userKey, JSON.stringify(filtered), {
|
|
121
|
+
expirationTtl: this.config.maxTtlSeconds,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
await this.kv.delete(userKey);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
await this.kv.delete(this.sessionKey(sessionId));
|
|
130
|
+
}
|
|
131
|
+
async destroyByUser(tenantId, userId) {
|
|
132
|
+
const userKey = this.userSessionsKey(tenantId, userId);
|
|
133
|
+
const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
|
|
134
|
+
if (!sessionIds)
|
|
135
|
+
return 0;
|
|
136
|
+
const count = sessionIds.length;
|
|
137
|
+
await Promise.all(sessionIds.map((id) => this.kv.delete(this.sessionKey(id))));
|
|
138
|
+
await this.kv.delete(userKey);
|
|
139
|
+
return count;
|
|
140
|
+
}
|
|
141
|
+
async cleanup() {
|
|
142
|
+
// KV handles TTL-based cleanup automatically
|
|
143
|
+
return 0;
|
|
144
|
+
}
|
|
145
|
+
async close() {
|
|
146
|
+
// No-op for KV
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=kv-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv-store.js","sourceRoot":"","sources":["../../../src/serv/session/kv-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Store Interface and Implementations
|
|
3
|
+
*
|
|
4
|
+
* Provides session management for SERV with support for
|
|
5
|
+
* in-memory (development) and Redis (production) backends
|
|
6
|
+
*/
|
|
7
|
+
import type { Session, SessionCreateOptions } from '../types/index.js';
|
|
8
|
+
export interface SessionStore {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new session
|
|
11
|
+
*/
|
|
12
|
+
create(options: SessionCreateOptions): Promise<Session>;
|
|
13
|
+
/**
|
|
14
|
+
* Get session by ID
|
|
15
|
+
*/
|
|
16
|
+
get(sessionId: string): Promise<Session | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Get sessions by user ID within a tenant
|
|
19
|
+
*/
|
|
20
|
+
getByUser(tenantId: string, userId: string): Promise<Session[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Update last activity time (sliding expiration)
|
|
23
|
+
*/
|
|
24
|
+
touch(sessionId: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Invalidate a session
|
|
27
|
+
*/
|
|
28
|
+
destroy(sessionId: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Invalidate all sessions for a user in a tenant
|
|
31
|
+
*/
|
|
32
|
+
destroyByUser(tenantId: string, userId: string): Promise<number>;
|
|
33
|
+
/**
|
|
34
|
+
* Clean up expired sessions
|
|
35
|
+
*/
|
|
36
|
+
cleanup(): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Close the store connection
|
|
39
|
+
*/
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export interface SessionConfig {
|
|
43
|
+
/** Default session TTL in seconds (default: 15 minutes) */
|
|
44
|
+
defaultTtlSeconds: number;
|
|
45
|
+
/** Maximum session TTL in seconds (default: 24 hours) */
|
|
46
|
+
maxTtlSeconds: number;
|
|
47
|
+
/** Cleanup interval in milliseconds (default: 5 minutes) */
|
|
48
|
+
cleanupIntervalMs: number;
|
|
49
|
+
}
|
|
50
|
+
export declare class MemorySessionStore implements SessionStore {
|
|
51
|
+
private sessions;
|
|
52
|
+
private userSessions;
|
|
53
|
+
private cleanupTimer?;
|
|
54
|
+
private config;
|
|
55
|
+
constructor(config?: Partial<SessionConfig>);
|
|
56
|
+
create(options: SessionCreateOptions): Promise<Session>;
|
|
57
|
+
get(sessionId: string): Promise<Session | null>;
|
|
58
|
+
getByUser(tenantId: string, userId: string): Promise<Session[]>;
|
|
59
|
+
touch(sessionId: string): Promise<void>;
|
|
60
|
+
destroy(sessionId: string): Promise<void>;
|
|
61
|
+
destroyByUser(tenantId: string, userId: string): Promise<number>;
|
|
62
|
+
cleanup(): Promise<number>;
|
|
63
|
+
close(): Promise<void>;
|
|
64
|
+
private startCleanup;
|
|
65
|
+
}
|
|
66
|
+
export interface RedisSessionStoreOptions {
|
|
67
|
+
/** Redis client instance or connection URL */
|
|
68
|
+
redis: RedisClient | string;
|
|
69
|
+
/** Key prefix for session storage */
|
|
70
|
+
keyPrefix?: string;
|
|
71
|
+
/** Session configuration */
|
|
72
|
+
config?: Partial<SessionConfig>;
|
|
73
|
+
}
|
|
74
|
+
export interface RedisClient {
|
|
75
|
+
get(key: string): Promise<string | null>;
|
|
76
|
+
set(key: string, value: string, options?: {
|
|
77
|
+
EX?: number;
|
|
78
|
+
}): Promise<unknown>;
|
|
79
|
+
del(key: string | string[]): Promise<number>;
|
|
80
|
+
keys(pattern: string): Promise<string[]>;
|
|
81
|
+
sadd(key: string, ...members: string[]): Promise<number>;
|
|
82
|
+
srem(key: string, ...members: string[]): Promise<number>;
|
|
83
|
+
smembers(key: string): Promise<string[]>;
|
|
84
|
+
expire(key: string, seconds: number): Promise<number>;
|
|
85
|
+
quit(): Promise<unknown>;
|
|
86
|
+
}
|
|
87
|
+
export declare class RedisSessionStore implements SessionStore {
|
|
88
|
+
private redis;
|
|
89
|
+
private keyPrefix;
|
|
90
|
+
private config;
|
|
91
|
+
private cleanupTimer?;
|
|
92
|
+
constructor(options: RedisSessionStoreOptions);
|
|
93
|
+
private sessionKey;
|
|
94
|
+
private userSessionsKey;
|
|
95
|
+
create(options: SessionCreateOptions): Promise<Session>;
|
|
96
|
+
get(sessionId: string): Promise<Session | null>;
|
|
97
|
+
getByUser(tenantId: string, userId: string): Promise<Session[]>;
|
|
98
|
+
touch(sessionId: string): Promise<void>;
|
|
99
|
+
destroy(sessionId: string): Promise<void>;
|
|
100
|
+
destroyByUser(tenantId: string, userId: string): Promise<number>;
|
|
101
|
+
cleanup(): Promise<number>;
|
|
102
|
+
close(): Promise<void>;
|
|
103
|
+
private startCleanup;
|
|
104
|
+
}
|
|
105
|
+
export type SessionStoreType = 'memory' | 'redis' | 'kv';
|
|
106
|
+
export interface CreateSessionStoreOptions {
|
|
107
|
+
type: SessionStoreType;
|
|
108
|
+
redis?: RedisClient;
|
|
109
|
+
kv?: unknown;
|
|
110
|
+
config?: Partial<SessionConfig>;
|
|
111
|
+
}
|
|
112
|
+
export declare function createSessionStore(options: CreateSessionStoreOptions): SessionStore;
|
|
113
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/serv/session/store.ts"],"names":[],"mappings":"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"}
|