@portel/photon 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +287 -1160
- package/dist/auto-ui/beam.d.ts +9 -0
- package/dist/auto-ui/beam.d.ts.map +1 -0
- package/dist/auto-ui/beam.js +2381 -0
- package/dist/auto-ui/beam.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 +21 -0
- package/dist/auto-ui/index.d.ts.map +1 -0
- package/dist/auto-ui/index.js +25 -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 +574 -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 +79 -0
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
- package/dist/auto-ui/streamable-http-transport.js +1314 -0
- package/dist/auto-ui/streamable-http-transport.js.map +1 -0
- package/dist/auto-ui/types.d.ts +310 -0
- package/dist/auto-ui/types.d.ts.map +1 -0
- package/dist/auto-ui/types.js +71 -0
- package/dist/auto-ui/types.js.map +1 -0
- package/dist/beam.bundle.js +13506 -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 +1157 -1132
- package/dist/cli.js.map +1 -1
- package/dist/daemon/client.d.ts +81 -0
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +583 -13
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/manager.d.ts +46 -12
- package/dist/daemon/manager.d.ts.map +1 -1
- package/dist/daemon/manager.js +102 -61
- package/dist/daemon/manager.js.map +1 -1
- package/dist/daemon/protocol.d.ts +74 -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 +778 -117
- 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 +172 -15
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +1132 -267
- 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 +216 -73
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/photon-doc-extractor.d.ts +88 -0
- package/dist/photon-doc-extractor.d.ts.map +1 -1
- package/dist/photon-doc-extractor.js +536 -27
- 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 +173 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1622 -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 +177 -88
- 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 +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -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 +47 -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,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Vault
|
|
3
|
+
*
|
|
4
|
+
* Secure encrypted storage for OAuth tokens with per-tenant encryption keys
|
|
5
|
+
* Uses AES-256-GCM for authenticated encryption
|
|
6
|
+
*/
|
|
7
|
+
import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'crypto';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Local Token Vault (Development/Single-Instance)
|
|
10
|
+
// ============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Simple token vault using derived keys from a master key
|
|
13
|
+
* Suitable for development or single-instance deployments
|
|
14
|
+
*
|
|
15
|
+
* For production multi-instance, use KmsTokenVault with AWS KMS/GCP KMS/HashiCorp Vault
|
|
16
|
+
*/
|
|
17
|
+
export class LocalTokenVault {
|
|
18
|
+
masterKey;
|
|
19
|
+
salt;
|
|
20
|
+
keyCache = new Map();
|
|
21
|
+
iterations;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
if (config.masterKey.length < 32) {
|
|
24
|
+
throw new Error('Master key must be at least 32 characters');
|
|
25
|
+
}
|
|
26
|
+
this.masterKey = Buffer.from(config.masterKey, 'utf-8');
|
|
27
|
+
this.salt = Buffer.from(config.salt ?? 'serv-token-vault-salt', 'utf-8');
|
|
28
|
+
this.iterations = config.iterations ?? 100000;
|
|
29
|
+
}
|
|
30
|
+
async encrypt(tenantId, plaintext) {
|
|
31
|
+
const key = this.deriveKey(tenantId);
|
|
32
|
+
const iv = randomBytes(12); // 96 bits for GCM
|
|
33
|
+
const cipher = createCipheriv('aes-256-gcm', key, iv);
|
|
34
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);
|
|
35
|
+
const authTag = cipher.getAuthTag();
|
|
36
|
+
// Format: base64(iv + authTag + ciphertext)
|
|
37
|
+
const result = Buffer.concat([iv, authTag, encrypted]);
|
|
38
|
+
return result.toString('base64');
|
|
39
|
+
}
|
|
40
|
+
async decrypt(tenantId, ciphertext) {
|
|
41
|
+
const key = this.deriveKey(tenantId);
|
|
42
|
+
const data = Buffer.from(ciphertext, 'base64');
|
|
43
|
+
// Extract components
|
|
44
|
+
const iv = data.subarray(0, 12);
|
|
45
|
+
const authTag = data.subarray(12, 28);
|
|
46
|
+
const encrypted = data.subarray(28);
|
|
47
|
+
const decipher = createDecipheriv('aes-256-gcm', key, iv);
|
|
48
|
+
decipher.setAuthTag(authTag);
|
|
49
|
+
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
50
|
+
return decrypted.toString('utf-8');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Derive a tenant-specific key from the master key
|
|
54
|
+
*/
|
|
55
|
+
deriveKey(tenantId) {
|
|
56
|
+
const cacheKey = tenantId;
|
|
57
|
+
if (this.keyCache.has(cacheKey)) {
|
|
58
|
+
return this.keyCache.get(cacheKey);
|
|
59
|
+
}
|
|
60
|
+
// Derive a unique key for this tenant using scrypt
|
|
61
|
+
const tenantSalt = Buffer.concat([this.salt, Buffer.from(tenantId, 'utf-8')]);
|
|
62
|
+
const key = scryptSync(this.masterKey, tenantSalt, 32, {
|
|
63
|
+
N: 16384,
|
|
64
|
+
r: 8,
|
|
65
|
+
p: 1,
|
|
66
|
+
});
|
|
67
|
+
this.keyCache.set(cacheKey, key);
|
|
68
|
+
return key;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Clear the key cache (call after key rotation)
|
|
72
|
+
*/
|
|
73
|
+
clearCache() {
|
|
74
|
+
this.keyCache.clear();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Token vault using external KMS (AWS KMS, GCP KMS, etc.)
|
|
79
|
+
* Uses envelope encryption for efficiency
|
|
80
|
+
*/
|
|
81
|
+
export class KmsTokenVault {
|
|
82
|
+
kms;
|
|
83
|
+
getKeyId;
|
|
84
|
+
dataKeyCache = new Map();
|
|
85
|
+
constructor(config) {
|
|
86
|
+
this.kms = config.kms;
|
|
87
|
+
this.getKeyId = config.getKeyId;
|
|
88
|
+
}
|
|
89
|
+
async encrypt(tenantId, plaintext) {
|
|
90
|
+
const { dataKey, encryptedDataKey } = await this.getDataKey(tenantId);
|
|
91
|
+
// Encrypt with data key
|
|
92
|
+
const iv = randomBytes(12);
|
|
93
|
+
const cipher = createCipheriv('aes-256-gcm', dataKey, iv);
|
|
94
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);
|
|
95
|
+
const authTag = cipher.getAuthTag();
|
|
96
|
+
// Format: base64(encryptedDataKeyLen(2) + encryptedDataKey + iv + authTag + ciphertext)
|
|
97
|
+
const edkLen = Buffer.alloc(2);
|
|
98
|
+
edkLen.writeUInt16BE(encryptedDataKey.length);
|
|
99
|
+
const result = Buffer.concat([edkLen, encryptedDataKey, iv, authTag, encrypted]);
|
|
100
|
+
return result.toString('base64');
|
|
101
|
+
}
|
|
102
|
+
async decrypt(tenantId, ciphertext) {
|
|
103
|
+
const data = Buffer.from(ciphertext, 'base64');
|
|
104
|
+
// Extract encrypted data key
|
|
105
|
+
const edkLen = data.readUInt16BE(0);
|
|
106
|
+
const encryptedDataKey = data.subarray(2, 2 + edkLen);
|
|
107
|
+
const iv = data.subarray(2 + edkLen, 2 + edkLen + 12);
|
|
108
|
+
const authTag = data.subarray(2 + edkLen + 12, 2 + edkLen + 28);
|
|
109
|
+
const encrypted = data.subarray(2 + edkLen + 28);
|
|
110
|
+
// Decrypt data key
|
|
111
|
+
const keyId = await this.getKeyId(tenantId);
|
|
112
|
+
const dataKey = await this.kms.decrypt(keyId, encryptedDataKey);
|
|
113
|
+
// Decrypt content
|
|
114
|
+
const decipher = createDecipheriv('aes-256-gcm', dataKey, iv);
|
|
115
|
+
decipher.setAuthTag(authTag);
|
|
116
|
+
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
117
|
+
return decrypted.toString('utf-8');
|
|
118
|
+
}
|
|
119
|
+
async rotateKey(tenantId) {
|
|
120
|
+
// Clear cached data key to force regeneration with new KMS key
|
|
121
|
+
this.dataKeyCache.delete(tenantId);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get or generate a data key for envelope encryption
|
|
125
|
+
*/
|
|
126
|
+
async getDataKey(tenantId) {
|
|
127
|
+
const cached = this.dataKeyCache.get(tenantId);
|
|
128
|
+
// Cache data keys for 1 hour
|
|
129
|
+
if (cached && cached.expires > Date.now()) {
|
|
130
|
+
return { dataKey: cached.key, encryptedDataKey: cached.encrypted };
|
|
131
|
+
}
|
|
132
|
+
// Generate new data key
|
|
133
|
+
const keyId = await this.getKeyId(tenantId);
|
|
134
|
+
const { plaintext, ciphertext } = await this.kms.generateDataKey(keyId);
|
|
135
|
+
// Cache it
|
|
136
|
+
this.dataKeyCache.set(tenantId, {
|
|
137
|
+
key: plaintext,
|
|
138
|
+
encrypted: ciphertext,
|
|
139
|
+
expires: Date.now() + 60 * 60 * 1000, // 1 hour
|
|
140
|
+
});
|
|
141
|
+
return { dataKey: plaintext, encryptedDataKey: ciphertext };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export function createTokenVault(options) {
|
|
145
|
+
switch (options.type) {
|
|
146
|
+
case 'local':
|
|
147
|
+
if (!options.masterKey) {
|
|
148
|
+
throw new Error('Master key required for local token vault');
|
|
149
|
+
}
|
|
150
|
+
return new LocalTokenVault({ masterKey: options.masterKey });
|
|
151
|
+
case 'kms':
|
|
152
|
+
if (!options.kms || !options.getKeyId) {
|
|
153
|
+
throw new Error('KMS client and getKeyId function required for KMS token vault');
|
|
154
|
+
}
|
|
155
|
+
return new KmsTokenVault({
|
|
156
|
+
kms: options.kms,
|
|
157
|
+
getKeyId: options.getKeyId,
|
|
158
|
+
});
|
|
159
|
+
default:
|
|
160
|
+
throw new Error(`Unknown token vault type: ${options.type}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// Singleton Instance
|
|
165
|
+
// ============================================================================
|
|
166
|
+
let tokenVaultInstance = null;
|
|
167
|
+
export function getTokenVault() {
|
|
168
|
+
if (!tokenVaultInstance) {
|
|
169
|
+
throw new Error('Token vault not initialized. Call initTokenVault first.');
|
|
170
|
+
}
|
|
171
|
+
return tokenVaultInstance;
|
|
172
|
+
}
|
|
173
|
+
export function initTokenVault(options) {
|
|
174
|
+
tokenVaultInstance = createTokenVault(options);
|
|
175
|
+
return tokenVaultInstance;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=token-vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-vault.js","sourceRoot":"","sources":["../../../src/serv/vault/token-vault.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -2,17 +2,114 @@
|
|
|
2
2
|
* Photon MCP Server
|
|
3
3
|
*
|
|
4
4
|
* Wraps a .photon.ts file as an MCP server using @modelcontextprotocol/sdk
|
|
5
|
+
* Supports both stdio and SSE transports
|
|
5
6
|
*/
|
|
7
|
+
import type { Marketplace, PhotonMetadata } from './marketplace-manager.js';
|
|
8
|
+
import { Logger, LoggerOptions } from './shared/logger.js';
|
|
9
|
+
export declare class HotReloadDisabledError extends Error {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
export type TransportType = 'stdio' | 'sse';
|
|
13
|
+
/**
|
|
14
|
+
* UI format types for client compatibility
|
|
15
|
+
* - 'sep-1865': SEP-1865 standard (Anthropic + OpenAI unified format)
|
|
16
|
+
* - 'photon': Legacy Photon format
|
|
17
|
+
* - 'none': Text-only, no UI support
|
|
18
|
+
*/
|
|
19
|
+
export type UIFormat = 'sep-1865' | 'photon' | 'none';
|
|
20
|
+
export interface UnresolvedPhoton {
|
|
21
|
+
name: string;
|
|
22
|
+
workingDir: string;
|
|
23
|
+
sources: Array<{
|
|
24
|
+
marketplace: Marketplace;
|
|
25
|
+
metadata?: PhotonMetadata;
|
|
26
|
+
}>;
|
|
27
|
+
recommendation?: string;
|
|
28
|
+
}
|
|
6
29
|
export interface PhotonServerOptions {
|
|
7
30
|
filePath: string;
|
|
8
31
|
devMode?: boolean;
|
|
32
|
+
transport?: TransportType;
|
|
33
|
+
port?: number;
|
|
34
|
+
logOptions?: LoggerOptions;
|
|
35
|
+
unresolvedPhoton?: UnresolvedPhoton;
|
|
9
36
|
}
|
|
10
37
|
export declare class PhotonServer {
|
|
11
38
|
private loader;
|
|
12
39
|
private mcp;
|
|
13
40
|
private server;
|
|
14
41
|
private options;
|
|
42
|
+
private mcpClientFactory;
|
|
43
|
+
private httpServer;
|
|
44
|
+
private sseSessions;
|
|
45
|
+
private devMode;
|
|
46
|
+
private hotReloadDisabled;
|
|
47
|
+
private lastReloadError?;
|
|
48
|
+
private statusClients;
|
|
49
|
+
private channelUnsubscribers;
|
|
50
|
+
private daemonName;
|
|
51
|
+
private currentStatus;
|
|
52
|
+
private logger;
|
|
15
53
|
constructor(options: PhotonServerOptions);
|
|
54
|
+
createScopedLogger(scope: string): Logger;
|
|
55
|
+
getLogger(): Logger;
|
|
56
|
+
private log;
|
|
57
|
+
/**
|
|
58
|
+
* Detect UI format based on client capabilities
|
|
59
|
+
*
|
|
60
|
+
* SEP-1865 clients advertise ui capability in experimental or root capabilities.
|
|
61
|
+
* Legacy Photon clients may not have explicit UI capability but support photon:// URIs.
|
|
62
|
+
* Text-only clients have no UI support.
|
|
63
|
+
*
|
|
64
|
+
* @param server - Optional server instance (for SSE sessions), defaults to main server
|
|
65
|
+
*/
|
|
66
|
+
private getUIFormat;
|
|
67
|
+
/**
|
|
68
|
+
* Build UI resource URI based on detected format
|
|
69
|
+
*
|
|
70
|
+
* @param uiId - UI template identifier
|
|
71
|
+
* @param server - Optional server instance (for SSE sessions)
|
|
72
|
+
*/
|
|
73
|
+
private buildUIResourceUri;
|
|
74
|
+
/**
|
|
75
|
+
* Build tool metadata for UI based on detected format
|
|
76
|
+
*
|
|
77
|
+
* @param uiId - UI template identifier
|
|
78
|
+
* @param server - Optional server instance (for SSE sessions)
|
|
79
|
+
*/
|
|
80
|
+
private buildUIToolMeta;
|
|
81
|
+
/**
|
|
82
|
+
* Get UI mimeType based on detected format
|
|
83
|
+
*
|
|
84
|
+
* @param server - Optional server instance (for SSE sessions)
|
|
85
|
+
*/
|
|
86
|
+
private getUIMimeType;
|
|
87
|
+
/**
|
|
88
|
+
* Check if client supports elicitation
|
|
89
|
+
*
|
|
90
|
+
* Elicitation is a client capability declared during initialization.
|
|
91
|
+
* The server can use elicitInput() when the client supports it.
|
|
92
|
+
*/
|
|
93
|
+
private clientSupportsElicitation;
|
|
94
|
+
/**
|
|
95
|
+
* Create an MCP-aware input provider for generator ask yields
|
|
96
|
+
*
|
|
97
|
+
* Uses MCP elicitInput() when client supports elicitation,
|
|
98
|
+
* otherwise falls back to readline prompts.
|
|
99
|
+
*/
|
|
100
|
+
private createMCPInputProvider;
|
|
101
|
+
/**
|
|
102
|
+
* Build MCP elicit request params from a Photon ask yield
|
|
103
|
+
*/
|
|
104
|
+
private buildElicitParams;
|
|
105
|
+
/**
|
|
106
|
+
* Extract value from elicitation response content
|
|
107
|
+
*/
|
|
108
|
+
private extractElicitValue;
|
|
109
|
+
/**
|
|
110
|
+
* Get default value for an ask when elicitation is not available or declined
|
|
111
|
+
*/
|
|
112
|
+
private getDefaultForAsk;
|
|
16
113
|
/**
|
|
17
114
|
* Set up MCP protocol handlers
|
|
18
115
|
*/
|
|
@@ -49,14 +146,90 @@ export declare class PhotonServer {
|
|
|
49
146
|
* Provides structured, actionable error messages
|
|
50
147
|
*/
|
|
51
148
|
private formatError;
|
|
149
|
+
/**
|
|
150
|
+
* Build placeholder tools from unresolved photon manifest metadata
|
|
151
|
+
*/
|
|
152
|
+
private buildPlaceholderTools;
|
|
153
|
+
/**
|
|
154
|
+
* Resolve an unresolved photon (deferred conflict resolution)
|
|
155
|
+
*
|
|
156
|
+
* If the client supports elicitation, presents marketplace choices.
|
|
157
|
+
* Otherwise, auto-picks the recommendation.
|
|
158
|
+
*/
|
|
159
|
+
private resolveUnresolvedPhoton;
|
|
160
|
+
/**
|
|
161
|
+
* Download a photon from a marketplace source, save to workingDir, and load it
|
|
162
|
+
*/
|
|
163
|
+
private downloadAndLoadPhoton;
|
|
164
|
+
/**
|
|
165
|
+
* Attempt config elicitation to resolve missing env vars, then retry tool call
|
|
166
|
+
*/
|
|
167
|
+
private attemptConfigElicitation;
|
|
52
168
|
/**
|
|
53
169
|
* Initialize and start the server
|
|
54
170
|
*/
|
|
55
171
|
start(): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Subscribe to daemon channels for cross-process notifications
|
|
174
|
+
* This enables real-time updates when other processes (e.g., Beam UI, other MCP clients) modify data
|
|
175
|
+
*/
|
|
176
|
+
private subscribeToChannels;
|
|
177
|
+
/**
|
|
178
|
+
* Handle incoming channel messages and forward as MCP notifications
|
|
179
|
+
*/
|
|
180
|
+
private handleChannelMessage;
|
|
181
|
+
/**
|
|
182
|
+
* Start server with stdio transport
|
|
183
|
+
*/
|
|
184
|
+
private startStdio;
|
|
185
|
+
/**
|
|
186
|
+
* Start server with SSE transport (HTTP)
|
|
187
|
+
*/
|
|
188
|
+
private startSSE;
|
|
189
|
+
/**
|
|
190
|
+
* List all photons in the .photon directory
|
|
191
|
+
*/
|
|
192
|
+
private listAllPhotons;
|
|
193
|
+
/**
|
|
194
|
+
* Generate playground HTML for interactive testing
|
|
195
|
+
*/
|
|
196
|
+
private getPlaygroundHTML;
|
|
197
|
+
/**
|
|
198
|
+
* Handle new SSE connection
|
|
199
|
+
*/
|
|
200
|
+
private handleSSEConnection;
|
|
201
|
+
/**
|
|
202
|
+
* Handle incoming SSE message
|
|
203
|
+
*/
|
|
204
|
+
private handleSSEMessage;
|
|
205
|
+
/**
|
|
206
|
+
* Set up handlers for a session-specific MCP server
|
|
207
|
+
* This duplicates handlers from the main server to each session
|
|
208
|
+
*/
|
|
209
|
+
private setupSessionHandlers;
|
|
210
|
+
/**
|
|
211
|
+
* Handle asset read (for both stdio and SSE handlers)
|
|
212
|
+
*/
|
|
213
|
+
/**
|
|
214
|
+
* Handle SEP-1865 ui:// resource read
|
|
215
|
+
*/
|
|
216
|
+
private handleUIAssetRead;
|
|
217
|
+
/**
|
|
218
|
+
* Handle legacy photon:// asset read
|
|
219
|
+
*/
|
|
220
|
+
private handleAssetRead;
|
|
221
|
+
/**
|
|
222
|
+
* Handle static resource read (for both stdio and SSE handlers)
|
|
223
|
+
*/
|
|
224
|
+
private handleStaticRead;
|
|
56
225
|
/**
|
|
57
226
|
* Stop the server
|
|
58
227
|
*/
|
|
59
228
|
stop(): Promise<void>;
|
|
229
|
+
private buildStatusSnapshot;
|
|
230
|
+
private handleStatusStream;
|
|
231
|
+
private broadcastReloadStatus;
|
|
232
|
+
private pushStatusUpdate;
|
|
60
233
|
/**
|
|
61
234
|
* Reload the MCP file (for dev mode hot reload)
|
|
62
235
|
*/
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|