@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.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 +50 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent/run-node-tool.d.ts +39 -0
- package/dist/agent/run-node-tool.d.ts.map +1 -0
- package/dist/agent/run-node-tool.js +55 -0
- package/dist/agent/run-node-tool.js.map +1 -0
- package/dist/chat-prediction-forwarder.d.ts +13 -0
- package/dist/chat-prediction-forwarder.d.ts.map +1 -0
- package/dist/chat-prediction-forwarder.js +22 -0
- package/dist/chat-prediction-forwarder.js.map +1 -0
- package/dist/chat-tool-call-repair.d.ts +45 -0
- package/dist/chat-tool-call-repair.d.ts.map +1 -0
- package/dist/chat-tool-call-repair.js +100 -0
- package/dist/chat-tool-call-repair.js.map +1 -0
- package/dist/chat-turn-registry.d.ts +169 -0
- package/dist/chat-turn-registry.d.ts.map +1 -0
- package/dist/chat-turn-registry.js +326 -0
- package/dist/chat-turn-registry.js.map +1 -0
- package/dist/collection-api.d.ts +2 -2
- package/dist/collection-api.d.ts.map +1 -1
- package/dist/collection-api.js +44 -13
- package/dist/collection-api.js.map +1 -1
- package/dist/configured-providers.d.ts +52 -0
- package/dist/configured-providers.d.ts.map +1 -0
- package/dist/configured-providers.js +85 -0
- package/dist/configured-providers.js.map +1 -0
- package/dist/cors.d.ts +22 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +91 -0
- package/dist/cors.js.map +1 -0
- package/dist/credit-gate.d.ts +36 -0
- package/dist/credit-gate.d.ts.map +1 -0
- package/dist/credit-gate.js +76 -0
- package/dist/credit-gate.js.map +1 -0
- package/dist/custom-providers.d.ts +40 -0
- package/dist/custom-providers.d.ts.map +1 -0
- package/dist/custom-providers.js +134 -0
- package/dist/custom-providers.js.map +1 -0
- package/dist/debug-sessions.d.ts +10 -0
- package/dist/debug-sessions.d.ts.map +1 -0
- package/dist/debug-sessions.js +9 -0
- package/dist/debug-sessions.js.map +1 -0
- package/dist/drain.d.ts +34 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +68 -0
- package/dist/drain.js.map +1 -0
- package/dist/e2e-server.d.ts +30 -0
- package/dist/e2e-server.d.ts.map +1 -0
- package/dist/e2e-server.js +111 -0
- package/dist/e2e-server.js.map +1 -0
- package/dist/example-workflows.d.ts +20 -0
- package/dist/example-workflows.d.ts.map +1 -0
- package/dist/example-workflows.js +123 -0
- package/dist/example-workflows.js.map +1 -0
- package/dist/extension-cdp-bridge.d.ts +85 -0
- package/dist/extension-cdp-bridge.d.ts.map +1 -0
- package/dist/extension-cdp-bridge.js +163 -0
- package/dist/extension-cdp-bridge.js.map +1 -0
- package/dist/external-mcp.d.ts +58 -0
- package/dist/external-mcp.d.ts.map +1 -0
- package/dist/external-mcp.js +288 -0
- package/dist/external-mcp.js.map +1 -0
- package/dist/fake-runtime.d.ts +114 -0
- package/dist/fake-runtime.d.ts.map +1 -0
- package/dist/fake-runtime.js +270 -0
- package/dist/fake-runtime.js.map +1 -0
- package/dist/file-api.d.ts +4 -7
- package/dist/file-api.d.ts.map +1 -1
- package/dist/file-api.js +122 -39
- package/dist/file-api.js.map +1 -1
- package/dist/frontend-renderer-registry.d.ts +75 -0
- package/dist/frontend-renderer-registry.d.ts.map +1 -0
- package/dist/frontend-renderer-registry.js +111 -0
- package/dist/frontend-renderer-registry.js.map +1 -0
- package/dist/generation-recovery.d.ts +13 -0
- package/dist/generation-recovery.d.ts.map +1 -0
- package/dist/generation-recovery.js +197 -0
- package/dist/generation-recovery.js.map +1 -0
- package/dist/headless-job-runner.d.ts +71 -0
- package/dist/headless-job-runner.d.ts.map +1 -0
- package/dist/headless-job-runner.js +198 -0
- package/dist/headless-job-runner.js.map +1 -0
- package/dist/http-api.d.ts +157 -24
- package/dist/http-api.d.ts.map +1 -1
- package/dist/http-api.js +613 -646
- package/dist/http-api.js.map +1 -1
- package/dist/http-body-schemas.d.ts +109 -0
- package/dist/http-body-schemas.d.ts.map +1 -0
- package/dist/http-body-schemas.js +146 -0
- package/dist/http-body-schemas.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/job-control.d.ts +57 -0
- package/dist/job-control.d.ts.map +1 -0
- package/dist/job-control.js +134 -0
- package/dist/job-control.js.map +1 -0
- package/dist/job-queue.d.ts +47 -0
- package/dist/job-queue.d.ts.map +1 -0
- package/dist/job-queue.js +52 -0
- package/dist/job-queue.js.map +1 -0
- package/dist/job-run-registry.d.ts +176 -0
- package/dist/job-run-registry.d.ts.map +1 -0
- package/dist/job-run-registry.js +312 -0
- package/dist/job-run-registry.js.map +1 -0
- package/dist/lib/app-build-service.d.ts +16 -0
- package/dist/lib/app-build-service.d.ts.map +1 -0
- package/dist/lib/app-build-service.js +39 -0
- package/dist/lib/app-build-service.js.map +1 -0
- package/dist/lib/app-debug-service.d.ts +16 -0
- package/dist/lib/app-debug-service.d.ts.map +1 -0
- package/dist/lib/app-debug-service.js +48 -0
- package/dist/lib/app-debug-service.js.map +1 -0
- package/dist/lib/app-deployment-service.d.ts +82 -0
- package/dist/lib/app-deployment-service.d.ts.map +1 -0
- package/dist/lib/app-deployment-service.js +282 -0
- package/dist/lib/app-deployment-service.js.map +1 -0
- package/dist/lib/app-run-server.d.ts +7 -0
- package/dist/lib/app-run-server.d.ts.map +1 -0
- package/dist/lib/app-run-server.js +6 -0
- package/dist/lib/app-run-server.js.map +1 -0
- package/dist/lib/app-session-scope.d.ts +91 -0
- package/dist/lib/app-session-scope.d.ts.map +1 -0
- package/dist/lib/app-session-scope.js +91 -0
- package/dist/lib/app-session-scope.js.map +1 -0
- package/dist/lib/applications-service.d.ts +173 -0
- package/dist/lib/applications-service.d.ts.map +1 -0
- package/dist/lib/applications-service.js +491 -0
- package/dist/lib/applications-service.js.map +1 -0
- package/dist/lib/asset-duration.d.ts +7 -0
- package/dist/lib/asset-duration.d.ts.map +1 -0
- package/dist/lib/asset-duration.js +24 -0
- package/dist/lib/asset-duration.js.map +1 -0
- package/dist/lib/asset-export.d.ts +34 -0
- package/dist/lib/asset-export.d.ts.map +1 -0
- package/dist/lib/asset-export.js +113 -0
- package/dist/lib/asset-export.js.map +1 -0
- package/dist/lib/asset-model-interface.d.ts +41 -0
- package/dist/lib/asset-model-interface.d.ts.map +1 -0
- package/dist/lib/asset-model-interface.js +74 -0
- package/dist/lib/asset-model-interface.js.map +1 -0
- package/dist/lib/asset-paths.d.ts +52 -0
- package/dist/lib/asset-paths.d.ts.map +1 -1
- package/dist/lib/asset-paths.js +145 -1
- package/dist/lib/asset-paths.js.map +1 -1
- package/dist/lib/asset-response.d.ts +12 -0
- package/dist/lib/asset-response.d.ts.map +1 -0
- package/dist/lib/asset-response.js +88 -0
- package/dist/lib/asset-response.js.map +1 -0
- package/dist/lib/audio-peaks.d.ts +23 -0
- package/dist/lib/audio-peaks.d.ts.map +1 -0
- package/dist/lib/audio-peaks.js +331 -0
- package/dist/lib/audio-peaks.js.map +1 -0
- package/dist/lib/bridge.d.ts +9 -1
- package/dist/lib/bridge.d.ts.map +1 -1
- package/dist/lib/bridge.js +27 -4
- package/dist/lib/bridge.js.map +1 -1
- package/dist/lib/compression.d.ts +3 -0
- package/dist/lib/compression.d.ts.map +1 -0
- package/dist/lib/compression.js +3 -0
- package/dist/lib/compression.js.map +1 -0
- package/dist/lib/document-model-interfaces.d.ts +30 -0
- package/dist/lib/document-model-interfaces.d.ts.map +1 -0
- package/dist/lib/document-model-interfaces.js +295 -0
- package/dist/lib/document-model-interfaces.js.map +1 -0
- package/dist/lib/env-config.d.ts +9 -0
- package/dist/lib/env-config.d.ts.map +1 -0
- package/dist/lib/env-config.js +18 -0
- package/dist/lib/env-config.js.map +1 -0
- package/dist/lib/example-apps.d.ts +43 -0
- package/dist/lib/example-apps.d.ts.map +1 -0
- package/dist/lib/example-apps.js +145 -0
- package/dist/lib/example-apps.js.map +1 -0
- package/dist/lib/example-games.d.ts +5 -0
- package/dist/lib/example-games.d.ts.map +1 -0
- package/dist/lib/example-games.js +13 -0
- package/dist/lib/example-games.js.map +1 -0
- package/dist/lib/example-recipes.d.ts +33 -0
- package/dist/lib/example-recipes.d.ts.map +1 -0
- package/dist/lib/example-recipes.js +213 -0
- package/dist/lib/example-recipes.js.map +1 -0
- package/dist/lib/example-storyboards.d.ts +40 -0
- package/dist/lib/example-storyboards.d.ts.map +1 -0
- package/dist/lib/example-storyboards.js +131 -0
- package/dist/lib/example-storyboards.js.map +1 -0
- package/dist/lib/example-thumbnail.d.ts +21 -0
- package/dist/lib/example-thumbnail.d.ts.map +1 -0
- package/dist/lib/example-thumbnail.js +50 -0
- package/dist/lib/example-thumbnail.js.map +1 -0
- package/dist/lib/example-timelines.d.ts +9 -0
- package/dist/lib/example-timelines.d.ts.map +1 -0
- package/dist/lib/example-timelines.js +25 -0
- package/dist/lib/example-timelines.js.map +1 -0
- package/dist/lib/extension-dist.d.ts +24 -0
- package/dist/lib/extension-dist.d.ts.map +1 -0
- package/dist/lib/extension-dist.js +67 -0
- package/dist/lib/extension-dist.js.map +1 -0
- package/dist/lib/external-asset-lookup.d.ts +30 -0
- package/dist/lib/external-asset-lookup.d.ts.map +1 -0
- package/dist/lib/external-asset-lookup.js +99 -0
- package/dist/lib/external-asset-lookup.js.map +1 -0
- package/dist/lib/external-assets.d.ts +13 -0
- package/dist/lib/external-assets.d.ts.map +1 -0
- package/dist/lib/external-assets.js +46 -0
- package/dist/lib/external-assets.js.map +1 -0
- package/dist/lib/fly-replay.d.ts +34 -0
- package/dist/lib/fly-replay.d.ts.map +1 -0
- package/dist/lib/fly-replay.js +111 -0
- package/dist/lib/fly-replay.js.map +1 -0
- package/dist/lib/http-rate-limit.d.ts +32 -0
- package/dist/lib/http-rate-limit.d.ts.map +1 -0
- package/dist/lib/http-rate-limit.js +47 -0
- package/dist/lib/http-rate-limit.js.map +1 -0
- package/dist/lib/instance-id.d.ts +25 -0
- package/dist/lib/instance-id.d.ts.map +1 -0
- package/dist/lib/instance-id.js +44 -0
- package/dist/lib/instance-id.js.map +1 -0
- package/dist/lib/link-codes.d.ts +82 -0
- package/dist/lib/link-codes.d.ts.map +1 -0
- package/dist/lib/link-codes.js +100 -0
- package/dist/lib/link-codes.js.map +1 -0
- package/dist/lib/local-asset-upload.d.ts +5 -0
- package/dist/lib/local-asset-upload.d.ts.map +1 -0
- package/dist/lib/local-asset-upload.js +69 -0
- package/dist/lib/local-asset-upload.js.map +1 -0
- package/dist/lib/local-file-access.d.ts +31 -0
- package/dist/lib/local-file-access.d.ts.map +1 -0
- package/dist/lib/local-file-access.js +169 -0
- package/dist/lib/local-file-access.js.map +1 -0
- package/dist/lib/localhost-trust.d.ts +59 -0
- package/dist/lib/localhost-trust.d.ts.map +1 -0
- package/dist/lib/localhost-trust.js +139 -0
- package/dist/lib/localhost-trust.js.map +1 -0
- package/dist/lib/mcp-mount.d.ts +25 -0
- package/dist/lib/mcp-mount.d.ts.map +1 -0
- package/dist/lib/mcp-mount.js +32 -0
- package/dist/lib/mcp-mount.js.map +1 -0
- package/dist/lib/media-size.d.ts +21 -0
- package/dist/lib/media-size.d.ts.map +1 -0
- package/dist/lib/media-size.js +48 -0
- package/dist/lib/media-size.js.map +1 -0
- package/dist/lib/media.d.ts +38 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +146 -0
- package/dist/lib/media.js.map +1 -0
- package/dist/lib/package-asset-export.d.ts +83 -0
- package/dist/lib/package-asset-export.d.ts.map +1 -0
- package/dist/lib/package-asset-export.js +212 -0
- package/dist/lib/package-asset-export.js.map +1 -0
- package/dist/lib/package-assets.d.ts +41 -0
- package/dist/lib/package-assets.d.ts.map +1 -0
- package/dist/lib/package-assets.js +155 -0
- package/dist/lib/package-assets.js.map +1 -0
- package/dist/lib/project-delete.d.ts +11 -0
- package/dist/lib/project-delete.d.ts.map +1 -0
- package/dist/lib/project-delete.js +67 -0
- package/dist/lib/project-delete.js.map +1 -0
- package/dist/lib/project-document-copy.d.ts +31 -0
- package/dist/lib/project-document-copy.d.ts.map +1 -0
- package/dist/lib/project-document-copy.js +473 -0
- package/dist/lib/project-document-copy.js.map +1 -0
- package/dist/lib/public-app-assets.d.ts +8 -0
- package/dist/lib/public-app-assets.d.ts.map +1 -0
- package/dist/lib/public-app-assets.js +77 -0
- package/dist/lib/public-app-assets.js.map +1 -0
- package/dist/lib/public-routes.d.ts +95 -0
- package/dist/lib/public-routes.d.ts.map +1 -0
- package/dist/lib/public-routes.js +154 -0
- package/dist/lib/public-routes.js.map +1 -0
- package/dist/lib/runtime-detection.d.ts +17 -0
- package/dist/lib/runtime-detection.d.ts.map +1 -0
- package/dist/lib/runtime-detection.js +90 -0
- package/dist/lib/runtime-detection.js.map +1 -0
- package/dist/lib/storage-access.d.ts +21 -0
- package/dist/lib/storage-access.d.ts.map +1 -0
- package/dist/lib/storage-access.js +74 -0
- package/dist/lib/storage-access.js.map +1 -0
- package/dist/lib/storage.d.ts +9 -0
- package/dist/lib/storage.d.ts.map +1 -0
- package/dist/lib/storage.js +28 -0
- package/dist/lib/storage.js.map +1 -0
- package/dist/lib/storyboard-export.d.ts +64 -0
- package/dist/lib/storyboard-export.d.ts.map +1 -0
- package/dist/lib/storyboard-export.js +183 -0
- package/dist/lib/storyboard-export.js.map +1 -0
- package/dist/lib/style-presets.d.ts +34 -0
- package/dist/lib/style-presets.d.ts.map +1 -0
- package/dist/lib/style-presets.js +62 -0
- package/dist/lib/style-presets.js.map +1 -0
- package/dist/lib/temp-url-resolver.d.ts +35 -0
- package/dist/lib/temp-url-resolver.d.ts.map +1 -0
- package/dist/lib/temp-url-resolver.js +88 -0
- package/dist/lib/temp-url-resolver.js.map +1 -0
- package/dist/lib/thumbnail.d.ts +74 -0
- package/dist/lib/thumbnail.d.ts.map +1 -0
- package/dist/lib/thumbnail.js +302 -0
- package/dist/lib/thumbnail.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +1689 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -0
- package/dist/lib/timeline-bundle.js +330 -0
- package/dist/lib/timeline-bundle.js.map +1 -0
- package/dist/lib/video-proxy.d.ts +114 -0
- package/dist/lib/video-proxy.d.ts.map +1 -0
- package/dist/lib/video-proxy.js +545 -0
- package/dist/lib/video-proxy.js.map +1 -0
- package/dist/lib/wire-values.d.ts +31 -0
- package/dist/lib/wire-values.d.ts.map +1 -0
- package/dist/lib/wire-values.js +49 -0
- package/dist/lib/wire-values.js.map +1 -0
- package/dist/lib/workflow-bundle.d.ts +102 -0
- package/dist/lib/workflow-bundle.d.ts.map +1 -0
- package/dist/lib/workflow-bundle.js +306 -0
- package/dist/lib/workflow-bundle.js.map +1 -0
- package/dist/lib/workflow-service.d.ts +82 -0
- package/dist/lib/workflow-service.d.ts.map +1 -0
- package/dist/lib/workflow-service.js +194 -0
- package/dist/lib/workflow-service.js.map +1 -0
- package/dist/lib/workflow-workspace.d.ts +20 -0
- package/dist/lib/workflow-workspace.d.ts.map +1 -0
- package/dist/lib/workflow-workspace.js +65 -0
- package/dist/lib/workflow-workspace.js.map +1 -0
- package/dist/lib/ws-connection-health.d.ts +10 -0
- package/dist/lib/ws-connection-health.d.ts.map +1 -0
- package/dist/lib/ws-connection-health.js +38 -0
- package/dist/lib/ws-connection-health.js.map +1 -0
- package/dist/lib/ws-rate-limit.d.ts +22 -0
- package/dist/lib/ws-rate-limit.d.ts.map +1 -0
- package/dist/lib/ws-rate-limit.js +45 -0
- package/dist/lib/ws-rate-limit.js.map +1 -0
- package/dist/lib/ws-upgrade.d.ts +40 -0
- package/dist/lib/ws-upgrade.d.ts.map +1 -0
- package/dist/lib/ws-upgrade.js +66 -0
- package/dist/lib/ws-upgrade.js.map +1 -0
- package/dist/lib/zip-stream.d.ts +46 -0
- package/dist/lib/zip-stream.d.ts.map +1 -0
- package/dist/lib/zip-stream.js +140 -0
- package/dist/lib/zip-stream.js.map +1 -0
- package/dist/mcp-agent-tools.d.ts +56 -0
- package/dist/mcp-agent-tools.d.ts.map +1 -0
- package/dist/mcp-agent-tools.js +1216 -0
- package/dist/mcp-agent-tools.js.map +1 -0
- package/dist/mcp-server.d.ts +56 -7
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +255 -762
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-tool-deps.d.ts +20 -0
- package/dist/mcp-tool-deps.d.ts.map +1 -0
- package/dist/mcp-tool-deps.js +61 -0
- package/dist/mcp-tool-deps.js.map +1 -0
- package/dist/messagepack.d.ts +7 -0
- package/dist/messagepack.d.ts.map +1 -0
- package/dist/messagepack.js +19 -0
- package/dist/messagepack.js.map +1 -0
- package/dist/model-download-runtime.d.ts +9 -0
- package/dist/model-download-runtime.d.ts.map +1 -0
- package/dist/model-download-runtime.js +77 -0
- package/dist/model-download-runtime.js.map +1 -0
- package/dist/model-execution-availability.d.ts +14 -0
- package/dist/model-execution-availability.d.ts.map +1 -0
- package/dist/model-execution-availability.js +161 -0
- package/dist/model-execution-availability.js.map +1 -0
- package/dist/models-api.d.ts +51 -5
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +160 -690
- package/dist/models-api.js.map +1 -1
- package/dist/node-registry-setup.d.ts +84 -0
- package/dist/node-registry-setup.d.ts.map +1 -0
- package/dist/node-registry-setup.js +256 -0
- package/dist/node-registry-setup.js.map +1 -0
- package/dist/oauth/cimd.d.ts +28 -0
- package/dist/oauth/cimd.d.ts.map +1 -0
- package/dist/oauth/cimd.js +177 -0
- package/dist/oauth/cimd.js.map +1 -0
- package/dist/oauth/gate.d.ts +38 -0
- package/dist/oauth/gate.d.ts.map +1 -0
- package/dist/oauth/gate.js +77 -0
- package/dist/oauth/gate.js.map +1 -0
- package/dist/oauth/metadata.d.ts +35 -0
- package/dist/oauth/metadata.d.ts.map +1 -0
- package/dist/oauth/metadata.js +56 -0
- package/dist/oauth/metadata.js.map +1 -0
- package/dist/oauth/pending-store.d.ts +79 -0
- package/dist/oauth/pending-store.d.ts.map +1 -0
- package/dist/oauth/pending-store.js +133 -0
- package/dist/oauth/pending-store.js.map +1 -0
- package/dist/oauth/pkce.d.ts +16 -0
- package/dist/oauth/pkce.d.ts.map +1 -0
- package/dist/oauth/pkce.js +29 -0
- package/dist/oauth/pkce.js.map +1 -0
- package/dist/oauth/validate.d.ts +25 -0
- package/dist/oauth/validate.d.ts.map +1 -0
- package/dist/oauth/validate.js +62 -0
- package/dist/oauth/validate.js.map +1 -0
- package/dist/oauth/www-authenticate.d.ts +9 -0
- package/dist/oauth/www-authenticate.d.ts.map +1 -0
- package/dist/oauth/www-authenticate.js +33 -0
- package/dist/oauth/www-authenticate.js.map +1 -0
- package/dist/oauth-api.d.ts +19 -0
- package/dist/oauth-api.d.ts.map +1 -1
- package/dist/oauth-api.js +531 -12
- package/dist/oauth-api.js.map +1 -1
- package/dist/openai-api.d.ts.map +1 -1
- package/dist/openai-api.js +4 -9
- package/dist/openai-api.js.map +1 -1
- package/dist/pack-snapshot.d.ts +24 -0
- package/dist/pack-snapshot.d.ts.map +1 -0
- package/dist/pack-snapshot.js +35 -0
- package/dist/pack-snapshot.js.map +1 -0
- package/dist/plugins/websocket.d.ts +21 -4
- package/dist/plugins/websocket.d.ts.map +1 -1
- package/dist/plugins/websocket.js +136 -290
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/resolve-media-urls.d.ts +17 -3
- package/dist/resolve-media-urls.d.ts.map +1 -1
- package/dist/resolve-media-urls.js +117 -31
- package/dist/resolve-media-urls.js.map +1 -1
- package/dist/resource-events.d.ts +28 -0
- package/dist/resource-events.d.ts.map +1 -0
- package/dist/resource-events.js +20 -0
- package/dist/resource-events.js.map +1 -0
- package/dist/routes/account.d.ts +100 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +197 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/applications.d.ts +36 -0
- package/dist/routes/applications.d.ts.map +1 -0
- package/dist/routes/applications.js +183 -0
- package/dist/routes/applications.js.map +1 -0
- package/dist/routes/assets.d.ts +3 -3
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +78 -44
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/atlascloud-webhook.d.ts +93 -0
- package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
- package/dist/routes/atlascloud-webhook.js +369 -0
- package/dist/routes/atlascloud-webhook.js.map +1 -0
- package/dist/routes/collections.d.ts.map +1 -1
- package/dist/routes/config.d.ts +26 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +64 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/documents.d.ts +27 -0
- package/dist/routes/documents.d.ts.map +1 -0
- package/dist/routes/documents.js +155 -0
- package/dist/routes/documents.js.map +1 -0
- package/dist/routes/fal-credits.d.ts +4 -0
- package/dist/routes/fal-credits.d.ts.map +1 -0
- package/dist/routes/fal-credits.js +101 -0
- package/dist/routes/fal-credits.js.map +1 -0
- package/dist/routes/fal-pricing-estimate.d.ts +4 -0
- package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
- package/dist/routes/fal-pricing-estimate.js +114 -0
- package/dist/routes/fal-pricing-estimate.js.map +1 -0
- package/dist/routes/fal-pricing.d.ts +4 -0
- package/dist/routes/fal-pricing.d.ts.map +1 -0
- package/dist/routes/fal-pricing.js +93 -0
- package/dist/routes/fal-pricing.js.map +1 -0
- package/dist/routes/fal-webhook.d.ts +102 -0
- package/dist/routes/fal-webhook.d.ts.map +1 -0
- package/dist/routes/fal-webhook.js +379 -0
- package/dist/routes/fal-webhook.js.map +1 -0
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +4 -3
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/health.d.ts +1 -0
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +41 -7
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/integrations.d.ts +39 -0
- package/dist/routes/integrations.d.ts.map +1 -0
- package/dist/routes/integrations.js +211 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/js-scripts.d.ts +26 -0
- package/dist/routes/js-scripts.d.ts.map +1 -0
- package/dist/routes/js-scripts.js +116 -0
- package/dist/routes/js-scripts.js.map +1 -0
- package/dist/routes/kie-credits.d.ts +4 -0
- package/dist/routes/kie-credits.d.ts.map +1 -0
- package/dist/routes/kie-credits.js +93 -0
- package/dist/routes/kie-credits.js.map +1 -0
- package/dist/routes/kie-pricing.d.ts +4 -0
- package/dist/routes/kie-pricing.d.ts.map +1 -0
- package/dist/routes/kie-pricing.js +45 -0
- package/dist/routes/kie-pricing.js.map +1 -0
- package/dist/routes/kie-webhook.d.ts +4 -0
- package/dist/routes/kie-webhook.d.ts.map +1 -0
- package/dist/routes/kie-webhook.js +70 -0
- package/dist/routes/kie-webhook.js.map +1 -0
- package/dist/routes/nodes.d.ts.map +1 -1
- package/dist/routes/nodes.js +6 -59
- package/dist/routes/nodes.js.map +1 -1
- package/dist/routes/oauth-as.d.ts +30 -0
- package/dist/routes/oauth-as.d.ts.map +1 -0
- package/dist/routes/oauth-as.js +412 -0
- package/dist/routes/oauth-as.js.map +1 -0
- package/dist/routes/oauth.d.ts.map +1 -1
- package/dist/routes/openai.d.ts.map +1 -1
- package/dist/routes/public-apps.d.ts +27 -0
- package/dist/routes/public-apps.d.ts.map +1 -0
- package/dist/routes/public-apps.js +99 -0
- package/dist/routes/public-apps.js.map +1 -0
- package/dist/routes/sandbox-modules.d.ts +17 -0
- package/dist/routes/sandbox-modules.d.ts.map +1 -0
- package/dist/routes/sandbox-modules.js +85 -0
- package/dist/routes/sandbox-modules.js.map +1 -0
- package/dist/routes/sdk-v1.d.ts +24 -0
- package/dist/routes/sdk-v1.d.ts.map +1 -0
- package/dist/routes/sdk-v1.js +320 -0
- package/dist/routes/sdk-v1.js.map +1 -0
- package/dist/routes/storage.d.ts.map +1 -1
- package/dist/routes/storyboards.d.ts +16 -0
- package/dist/routes/storyboards.d.ts.map +1 -0
- package/dist/routes/storyboards.js +97 -0
- package/dist/routes/storyboards.js.map +1 -0
- package/dist/routes/timeline-animations.d.ts +23 -0
- package/dist/routes/timeline-animations.d.ts.map +1 -0
- package/dist/routes/timeline-animations.js +99 -0
- package/dist/routes/timeline-animations.js.map +1 -0
- package/dist/routes/timeline-audio-bake.d.ts +51 -0
- package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
- package/dist/routes/timeline-audio-bake.js +110 -0
- package/dist/routes/timeline-audio-bake.js.map +1 -0
- package/dist/routes/timeline-fonts.d.ts +29 -0
- package/dist/routes/timeline-fonts.d.ts.map +1 -0
- package/dist/routes/timeline-fonts.js +64 -0
- package/dist/routes/timeline-fonts.js.map +1 -0
- package/dist/routes/timeline-isolate-subject.d.ts +55 -0
- package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
- package/dist/routes/timeline-isolate-subject.js +128 -0
- package/dist/routes/timeline-isolate-subject.js.map +1 -0
- package/dist/routes/timeline-track-object.d.ts +39 -0
- package/dist/routes/timeline-track-object.d.ts.map +1 -0
- package/dist/routes/timeline-track-object.js +97 -0
- package/dist/routes/timeline-track-object.js.map +1 -0
- package/dist/routes/timelines.d.ts +18 -0
- package/dist/routes/timelines.d.ts.map +1 -0
- package/dist/routes/timelines.js +191 -0
- package/dist/routes/timelines.js.map +1 -0
- package/dist/routes/workflows.d.ts +6 -9
- package/dist/routes/workflows.d.ts.map +1 -1
- package/dist/routes/workflows.js +100 -11
- package/dist/routes/workflows.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/run-supervisor.d.ts +30 -0
- package/dist/run-supervisor.d.ts.map +1 -0
- package/dist/run-supervisor.js +86 -0
- package/dist/run-supervisor.js.map +1 -0
- package/dist/sandbox-catalog.d.ts +28 -0
- package/dist/sandbox-catalog.d.ts.map +1 -0
- package/dist/sandbox-catalog.js +74 -0
- package/dist/sandbox-catalog.js.map +1 -0
- package/dist/screenshot-projects.d.ts +27 -0
- package/dist/screenshot-projects.d.ts.map +1 -0
- package/dist/screenshot-projects.js +880 -0
- package/dist/screenshot-projects.js.map +1 -0
- package/dist/screenshot-server.js +947 -43
- package/dist/screenshot-server.js.map +1 -1
- package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
- package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
- package/dist/sdk/sdk-cached-model-inventory.js +51 -0
- package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
- package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
- package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-capabilities-service.js +47 -0
- package/dist/sdk/sdk-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
- package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
- package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
- package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
- package/dist/sdk/sdk-execution-target-readiness.js +50 -0
- package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
- package/dist/sdk/sdk-feature-flags.d.ts +18 -0
- package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
- package/dist/sdk/sdk-feature-flags.js +30 -0
- package/dist/sdk/sdk-feature-flags.js.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
- package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
- package/dist/sdk/sdk-huggingface-download-state.js +25 -0
- package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
- package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
- package/dist/sdk/sdk-live-runner-registry.js +26 -0
- package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
- package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-catalog-service.js +219 -0
- package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
- package/dist/sdk/sdk-model-download-service.d.ts +39 -0
- package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
- package/dist/sdk/sdk-model-download-service.js +274 -0
- package/dist/sdk/sdk-model-download-service.js.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
- package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-model-requirement-probe.js +120 -0
- package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
- package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
- package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
- package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
- package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
- package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
- package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
- package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
- package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
- package/dist/sdk/sdk-preflight-service.d.ts +61 -0
- package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-service.js +104 -0
- package/dist/sdk/sdk-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
- package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
- package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
- package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
- package/dist/sdk/sdk-route-policy.d.ts +3 -0
- package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
- package/dist/sdk/sdk-route-policy.js +18 -0
- package/dist/sdk/sdk-route-policy.js.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
- package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
- package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
- package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
- package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
- package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
- package/dist/sdk/sdk-static-preflight-service.js +492 -0
- package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
- package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-service.js +33 -0
- package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
- package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
- package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-handler-map.js +37 -0
- package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
- package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
- package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service-error.js +62 -0
- package/dist/sdk/sdk-v1-service-error.js.map +1 -0
- package/dist/sdk/sdk-v1-service.d.ts +74 -0
- package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
- package/dist/sdk/sdk-v1-service.js +219 -0
- package/dist/sdk/sdk-v1-service.js.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
- package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
- package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
- package/dist/server.js +1019 -201
- package/dist/server.js.map +1 -1
- package/dist/session/asset-autosave.d.ts +80 -0
- package/dist/session/asset-autosave.d.ts.map +1 -0
- package/dist/session/asset-autosave.js +456 -0
- package/dist/session/asset-autosave.js.map +1 -0
- package/dist/session/chat-compaction.d.ts +107 -0
- package/dist/session/chat-compaction.d.ts.map +1 -0
- package/dist/session/chat-compaction.js +191 -0
- package/dist/session/chat-compaction.js.map +1 -0
- package/dist/session/chat-history.d.ts +75 -0
- package/dist/session/chat-history.d.ts.map +1 -0
- package/dist/session/chat-history.js +194 -0
- package/dist/session/chat-history.js.map +1 -0
- package/dist/session/chat-prompt.d.ts +45 -0
- package/dist/session/chat-prompt.d.ts.map +1 -0
- package/dist/session/chat-prompt.js +480 -0
- package/dist/session/chat-prompt.js.map +1 -0
- package/dist/session/chat-turn.d.ts +336 -0
- package/dist/session/chat-turn.d.ts.map +1 -0
- package/dist/session/chat-turn.js +3516 -0
- package/dist/session/chat-turn.js.map +1 -0
- package/dist/session/client-session.d.ts +59 -0
- package/dist/session/client-session.d.ts.map +1 -0
- package/dist/session/client-session.js +2 -0
- package/dist/session/client-session.js.map +1 -0
- package/dist/session/commands.d.ts +133 -0
- package/dist/session/commands.d.ts.map +1 -0
- package/dist/session/commands.js +778 -0
- package/dist/session/commands.js.map +1 -0
- package/dist/session/inference.d.ts +213 -0
- package/dist/session/inference.d.ts.map +1 -0
- package/dist/session/inference.js +1072 -0
- package/dist/session/inference.js.map +1 -0
- package/dist/session/job-execution.d.ts +477 -0
- package/dist/session/job-execution.d.ts.map +1 -0
- package/dist/session/job-execution.js +2089 -0
- package/dist/session/job-execution.js.map +1 -0
- package/dist/session/media-generation.d.ts +94 -0
- package/dist/session/media-generation.d.ts.map +1 -0
- package/dist/session/media-generation.js +234 -0
- package/dist/session/media-generation.js.map +1 -0
- package/dist/session/model-interfaces.d.ts +27 -0
- package/dist/session/model-interfaces.d.ts.map +1 -0
- package/dist/session/model-interfaces.js +132 -0
- package/dist/session/model-interfaces.js.map +1 -0
- package/dist/session/sanitize.d.ts +7 -0
- package/dist/session/sanitize.d.ts.map +1 -0
- package/dist/session/sanitize.js +64 -0
- package/dist/session/sanitize.js.map +1 -0
- package/dist/settings-registry.d.ts +6 -15
- package/dist/settings-registry.d.ts.map +1 -1
- package/dist/settings-registry.js +6 -103
- package/dist/settings-registry.js.map +1 -1
- package/dist/storage-api.d.ts +20 -0
- package/dist/storage-api.d.ts.map +1 -1
- package/dist/storage-api.js +260 -77
- package/dist/storage-api.js.map +1 -1
- package/dist/storage-retention.d.ts +9 -0
- package/dist/storage-retention.d.ts.map +1 -0
- package/dist/storage-retention.js +74 -0
- package/dist/storage-retention.js.map +1 -0
- package/dist/system-stats.d.ts +52 -0
- package/dist/system-stats.d.ts.map +1 -0
- package/dist/system-stats.js +134 -0
- package/dist/system-stats.js.map +1 -0
- package/dist/test-ui-server.d.ts +46 -0
- package/dist/test-ui-server.d.ts.map +1 -1
- package/dist/test-ui-server.js +188 -41
- package/dist/test-ui-server.js.map +1 -1
- package/dist/triggers/boot.d.ts +73 -0
- package/dist/triggers/boot.d.ts.map +1 -0
- package/dist/triggers/boot.js +149 -0
- package/dist/triggers/boot.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +234 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -0
- package/dist/triggers/dispatcher.js +525 -0
- package/dist/triggers/dispatcher.js.map +1 -0
- package/dist/triggers/file-watch.d.ts +90 -0
- package/dist/triggers/file-watch.d.ts.map +1 -0
- package/dist/triggers/file-watch.js +405 -0
- package/dist/triggers/file-watch.js.map +1 -0
- package/dist/triggers/registration-sync.d.ts +34 -0
- package/dist/triggers/registration-sync.d.ts.map +1 -0
- package/dist/triggers/registration-sync.js +162 -0
- package/dist/triggers/registration-sync.js.map +1 -0
- package/dist/triggers/schedule-timing.d.ts +52 -0
- package/dist/triggers/schedule-timing.d.ts.map +1 -0
- package/dist/triggers/schedule-timing.js +90 -0
- package/dist/triggers/schedule-timing.js.map +1 -0
- package/dist/triggers/scheduler.d.ts +55 -0
- package/dist/triggers/scheduler.d.ts.map +1 -0
- package/dist/triggers/scheduler.js +122 -0
- package/dist/triggers/scheduler.js.map +1 -0
- package/dist/triggers/settle.d.ts +66 -0
- package/dist/triggers/settle.d.ts.map +1 -0
- package/dist/triggers/settle.js +99 -0
- package/dist/triggers/settle.js.map +1 -0
- package/dist/triggers/stores.d.ts +38 -0
- package/dist/triggers/stores.d.ts.map +1 -0
- package/dist/triggers/stores.js +168 -0
- package/dist/triggers/stores.js.map +1 -0
- package/dist/triggers/webhook-route.d.ts +49 -0
- package/dist/triggers/webhook-route.d.ts.map +1 -0
- package/dist/triggers/webhook-route.js +148 -0
- package/dist/triggers/webhook-route.js.map +1 -0
- package/dist/trpc/context.d.ts +52 -5
- package/dist/trpc/context.d.ts.map +1 -1
- package/dist/trpc/context.js +4 -1
- package/dist/trpc/context.js.map +1 -1
- package/dist/trpc/error-formatter.d.ts.map +1 -1
- package/dist/trpc/error-formatter.js +23 -2
- package/dist/trpc/error-formatter.js.map +1 -1
- package/dist/trpc/error-logging.d.ts +14 -0
- package/dist/trpc/error-logging.d.ts.map +1 -0
- package/dist/trpc/error-logging.js +27 -0
- package/dist/trpc/error-logging.js.map +1 -0
- package/dist/trpc/index.d.ts +2 -2
- package/dist/trpc/index.d.ts.map +1 -1
- package/dist/trpc/index.js +0 -2
- package/dist/trpc/index.js.map +1 -1
- package/dist/trpc/middleware.d.ts +6 -3
- package/dist/trpc/middleware.d.ts.map +1 -1
- package/dist/trpc/router.d.ts +29791 -1303
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +46 -3
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/routers/agent-access.d.ts +149 -0
- package/dist/trpc/routers/agent-access.d.ts.map +1 -0
- package/dist/trpc/routers/agent-access.js +224 -0
- package/dist/trpc/routers/agent-access.js.map +1 -0
- package/dist/trpc/routers/applications.d.ts +1117 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -0
- package/dist/trpc/routers/applications.js +218 -0
- package/dist/trpc/routers/applications.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +184 -42
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +499 -105
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/code-gen.d.ts +99 -0
- package/dist/trpc/routers/code-gen.d.ts.map +1 -0
- package/dist/trpc/routers/code-gen.js +164 -0
- package/dist/trpc/routers/code-gen.js.map +1 -0
- package/dist/trpc/routers/collections.d.ts +1 -26
- package/dist/trpc/routers/collections.d.ts.map +1 -1
- package/dist/trpc/routers/collections.js +145 -78
- package/dist/trpc/routers/collections.js.map +1 -1
- package/dist/trpc/routers/costs.d.ts +40 -96
- package/dist/trpc/routers/costs.d.ts.map +1 -1
- package/dist/trpc/routers/costs.js +14 -89
- package/dist/trpc/routers/costs.js.map +1 -1
- package/dist/trpc/routers/credits.d.ts +110 -0
- package/dist/trpc/routers/credits.d.ts.map +1 -0
- package/dist/trpc/routers/credits.js +69 -0
- package/dist/trpc/routers/credits.js.map +1 -0
- package/dist/trpc/routers/custom-providers.d.ts +88 -0
- package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
- package/dist/trpc/routers/custom-providers.js +140 -0
- package/dist/trpc/routers/custom-providers.js.map +1 -0
- package/dist/trpc/routers/documents.d.ts +61 -0
- package/dist/trpc/routers/documents.d.ts.map +1 -0
- package/dist/trpc/routers/documents.js +23 -0
- package/dist/trpc/routers/documents.js.map +1 -0
- package/dist/trpc/routers/extension.d.ts +24 -0
- package/dist/trpc/routers/extension.d.ts.map +1 -0
- package/dist/trpc/routers/extension.js +28 -0
- package/dist/trpc/routers/extension.js.map +1 -0
- package/dist/trpc/routers/external-mcp.d.ts +108 -0
- package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
- package/dist/trpc/routers/external-mcp.js +70 -0
- package/dist/trpc/routers/external-mcp.js.map +1 -0
- package/dist/trpc/routers/files.d.ts +9 -2
- package/dist/trpc/routers/files.d.ts.map +1 -1
- package/dist/trpc/routers/files.js +67 -37
- package/dist/trpc/routers/files.js.map +1 -1
- package/dist/trpc/routers/fonts.d.ts +30 -0
- package/dist/trpc/routers/fonts.d.ts.map +1 -0
- package/dist/trpc/routers/fonts.js +112 -0
- package/dist/trpc/routers/fonts.js.map +1 -0
- package/dist/trpc/routers/games.d.ts +7610 -0
- package/dist/trpc/routers/games.d.ts.map +1 -0
- package/dist/trpc/routers/games.js +456 -0
- package/dist/trpc/routers/games.js.map +1 -0
- package/dist/trpc/routers/integrations.d.ts +86 -0
- package/dist/trpc/routers/integrations.d.ts.map +1 -0
- package/dist/trpc/routers/integrations.js +129 -0
- package/dist/trpc/routers/integrations.js.map +1 -0
- package/dist/trpc/routers/jobs.d.ts +88 -27
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +113 -35
- package/dist/trpc/routers/jobs.js.map +1 -1
- package/dist/trpc/routers/js-scripts.d.ts +410 -0
- package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
- package/dist/trpc/routers/js-scripts.js +303 -0
- package/dist/trpc/routers/js-scripts.js.map +1 -0
- package/dist/trpc/routers/mcp-config.d.ts +1 -1
- package/dist/trpc/routers/mcp-config.js +5 -3
- package/dist/trpc/routers/mcp-config.js.map +1 -1
- package/dist/trpc/routers/memories.d.ts +79 -0
- package/dist/trpc/routers/memories.d.ts.map +1 -0
- package/dist/trpc/routers/memories.js +66 -0
- package/dist/trpc/routers/memories.js.map +1 -0
- package/dist/trpc/routers/messages.d.ts +4 -77
- package/dist/trpc/routers/messages.d.ts.map +1 -1
- package/dist/trpc/routers/messages.js +9 -58
- package/dist/trpc/routers/messages.js.map +1 -1
- package/dist/trpc/routers/models.d.ts +1403 -238
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +532 -294
- package/dist/trpc/routers/models.js.map +1 -1
- package/dist/trpc/routers/nodes.d.ts +32 -16
- package/dist/trpc/routers/nodes.d.ts.map +1 -1
- package/dist/trpc/routers/nodes.js +70 -31
- package/dist/trpc/routers/nodes.js.map +1 -1
- package/dist/trpc/routers/packs.d.ts +184 -0
- package/dist/trpc/routers/packs.d.ts.map +1 -0
- package/dist/trpc/routers/packs.js +259 -0
- package/dist/trpc/routers/packs.js.map +1 -0
- package/dist/trpc/routers/projects.d.ts +422 -0
- package/dist/trpc/routers/projects.d.ts.map +1 -0
- package/dist/trpc/routers/projects.js +373 -0
- package/dist/trpc/routers/projects.js.map +1 -0
- package/dist/trpc/routers/resources.d.ts +120 -0
- package/dist/trpc/routers/resources.d.ts.map +1 -0
- package/dist/trpc/routers/resources.js +212 -0
- package/dist/trpc/routers/resources.js.map +1 -0
- package/dist/trpc/routers/scripts.d.ts +1116 -0
- package/dist/trpc/routers/scripts.d.ts.map +1 -0
- package/dist/trpc/routers/scripts.js +131 -0
- package/dist/trpc/routers/scripts.js.map +1 -0
- package/dist/trpc/routers/segmentation.d.ts +62 -0
- package/dist/trpc/routers/segmentation.d.ts.map +1 -0
- package/dist/trpc/routers/segmentation.js +146 -0
- package/dist/trpc/routers/segmentation.js.map +1 -0
- package/dist/trpc/routers/settings.d.ts +177 -10
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +123 -33
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +854 -0
- package/dist/trpc/routers/sketch.d.ts.map +1 -0
- package/dist/trpc/routers/sketch.js +617 -0
- package/dist/trpc/routers/sketch.js.map +1 -0
- package/dist/trpc/routers/skills.d.ts +76 -22
- package/dist/trpc/routers/skills.d.ts.map +1 -1
- package/dist/trpc/routers/skills.js +195 -170
- package/dist/trpc/routers/skills.js.map +1 -1
- package/dist/trpc/routers/storage.d.ts +3 -30
- package/dist/trpc/routers/storage.d.ts.map +1 -1
- package/dist/trpc/routers/storage.js +60 -117
- package/dist/trpc/routers/storage.js.map +1 -1
- package/dist/trpc/routers/storyboards.d.ts +5907 -0
- package/dist/trpc/routers/storyboards.d.ts.map +1 -0
- package/dist/trpc/routers/storyboards.js +156 -0
- package/dist/trpc/routers/storyboards.js.map +1 -0
- package/dist/trpc/routers/threads.d.ts +33 -21
- package/dist/trpc/routers/threads.d.ts.map +1 -1
- package/dist/trpc/routers/threads.js +36 -30
- package/dist/trpc/routers/threads.js.map +1 -1
- package/dist/trpc/routers/timeline.d.ts +8516 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -0
- package/dist/trpc/routers/timeline.js +493 -0
- package/dist/trpc/routers/timeline.js.map +1 -0
- package/dist/trpc/routers/triggers.d.ts +46 -0
- package/dist/trpc/routers/triggers.d.ts.map +1 -0
- package/dist/trpc/routers/triggers.js +117 -0
- package/dist/trpc/routers/triggers.js.map +1 -0
- package/dist/trpc/routers/users.d.ts +1 -14
- package/dist/trpc/routers/users.d.ts.map +1 -1
- package/dist/trpc/routers/users.js +1 -12
- package/dist/trpc/routers/users.js.map +1 -1
- package/dist/trpc/routers/worker.d.ts +242 -0
- package/dist/trpc/routers/worker.d.ts.map +1 -0
- package/dist/trpc/routers/worker.js +220 -0
- package/dist/trpc/routers/worker.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +385 -197
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +326 -345
- package/dist/trpc/routers/workflows.js.map +1 -1
- package/dist/trpc/routers/workspace.d.ts +59 -33
- package/dist/trpc/routers/workspace.d.ts.map +1 -1
- package/dist/trpc/routers/workspace.js +230 -93
- package/dist/trpc/routers/workspace.js.map +1 -1
- package/dist/trpc/sandbox-coverage.d.ts +64 -0
- package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
- package/dist/trpc/sandbox-coverage.js +1049 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -0
- package/dist/websocket-client-session.d.ts +320 -0
- package/dist/websocket-client-session.d.ts.map +1 -0
- package/dist/websocket-client-session.js +1253 -0
- package/dist/websocket-client-session.js.map +1 -0
- package/dist/workflow-interface-service.d.ts +87 -0
- package/dist/workflow-interface-service.d.ts.map +1 -0
- package/dist/workflow-interface-service.js +131 -0
- package/dist/workflow-interface-service.js.map +1 -0
- package/dist/workspace-api.d.ts.map +1 -1
- package/dist/workspace-api.js +33 -23
- package/dist/workspace-api.js.map +1 -1
- package/dist/ws-adapter.d.ts +46 -3
- package/dist/ws-adapter.d.ts.map +1 -1
- package/dist/ws-adapter.js +164 -26
- package/dist/ws-adapter.js.map +1 -1
- package/package.json +81 -35
- package/dist/agent/agent-runtime.d.ts +0 -47
- package/dist/agent/agent-runtime.d.ts.map +0 -1
- package/dist/agent/agent-runtime.js +0 -579
- package/dist/agent/agent-runtime.js.map +0 -1
- package/dist/agent/codex-agent.d.ts +0 -41
- package/dist/agent/codex-agent.d.ts.map +0 -1
- package/dist/agent/codex-agent.js +0 -334
- package/dist/agent/codex-agent.js.map +0 -1
- package/dist/agent/index.d.ts +0 -6
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -4
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/llm-agent.d.ts +0 -51
- package/dist/agent/llm-agent.d.ts.map +0 -1
- package/dist/agent/llm-agent.js +0 -526
- package/dist/agent/llm-agent.js.map +0 -1
- package/dist/agent/mcp-tool-server.d.ts +0 -33
- package/dist/agent/mcp-tool-server.d.ts.map +0 -1
- package/dist/agent/mcp-tool-server.js +0 -292
- package/dist/agent/mcp-tool-server.js.map +0 -1
- package/dist/agent/opencode-agent.d.ts +0 -32
- package/dist/agent/opencode-agent.d.ts.map +0 -1
- package/dist/agent/opencode-agent.js +0 -332
- package/dist/agent/opencode-agent.js.map +0 -1
- package/dist/agent/pi-agent.d.ts +0 -42
- package/dist/agent/pi-agent.d.ts.map +0 -1
- package/dist/agent/pi-agent.js +0 -429
- package/dist/agent/pi-agent.js.map +0 -1
- package/dist/agent/sdk-provider.d.ts +0 -46
- package/dist/agent/sdk-provider.d.ts.map +0 -1
- package/dist/agent/sdk-provider.js +0 -50
- package/dist/agent/sdk-provider.js.map +0 -1
- package/dist/agent/socket-route.d.ts +0 -11
- package/dist/agent/socket-route.d.ts.map +0 -1
- package/dist/agent/socket-route.js +0 -262
- package/dist/agent/socket-route.js.map +0 -1
- package/dist/agent/transport.d.ts +0 -39
- package/dist/agent/transport.d.ts.map +0 -1
- package/dist/agent/transport.js +0 -17
- package/dist/agent/transport.js.map +0 -1
- package/dist/agent/types.d.ts +0 -11
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -10
- package/dist/agent/types.js.map +0 -1
- package/dist/routes/jobs.d.ts +0 -16
- package/dist/routes/jobs.d.ts.map +0 -1
- package/dist/routes/jobs.js +0 -25
- package/dist/routes/jobs.js.map +0 -1
- package/dist/trpc/routers/sandboxes.d.ts +0 -64
- package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
- package/dist/trpc/routers/sandboxes.js +0 -327
- package/dist/trpc/routers/sandboxes.js.map +0 -1
- package/dist/unified-websocket-runner.d.ts +0 -280
- package/dist/unified-websocket-runner.d.ts.map +0 -1
- package/dist/unified-websocket-runner.js +0 -3840
- package/dist/unified-websocket-runner.js.map +0 -1
package/dist/oauth-api.js
CHANGED
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
* Supports HuggingFace and GitHub OAuth flows with PKCE.
|
|
7
7
|
*/
|
|
8
8
|
import { createHash, randomBytes } from "node:crypto";
|
|
9
|
-
import {
|
|
9
|
+
import { createLogger, isAuthEnforced, isGoogleWorkspaceEnabled } from "@nodetool-ai/config";
|
|
10
|
+
import { OAuthCredential, storeGoogleCredential, deleteGoogleCredentials, GOOGLE_CREDENTIAL_PROVIDER } from "@nodetool-ai/models";
|
|
11
|
+
import { OAuthClient, LocalCallbackServer, ClaudeCodeLogin, extractChatGptAccountId, CODEX_OAUTH_CLIENT_ID, CODEX_CALLBACK_PORT, CODEX_CALLBACK_PATH, DEFAULT_CODEX_OAUTH_CONFIG } from "@nodetool-ai/runtime/oauth";
|
|
12
|
+
import { clearProviderCache } from "@nodetool-ai/runtime";
|
|
13
|
+
import { isFiniteNumber, isNonEmptyString, isString } from "./lib/wire-values.js";
|
|
14
|
+
const logger = createLogger("nodetool.websocket.oauth");
|
|
10
15
|
// ── Constants ────────────────────────────────────────────────────────
|
|
11
16
|
const HF_AUTHORIZATION_URL = "https://huggingface.co/oauth/authorize";
|
|
12
17
|
const HF_TOKEN_URL = "https://huggingface.co/oauth/token";
|
|
@@ -17,6 +22,18 @@ const GITHUB_AUTHORIZATION_URL = "https://github.com/login/oauth/authorize";
|
|
|
17
22
|
const GITHUB_TOKEN_URL = "https://github.com/login/oauth/access_token";
|
|
18
23
|
const GITHUB_USER_URL = "https://api.github.com/user";
|
|
19
24
|
const GITHUB_SCOPES = ["user:email", "read:user"];
|
|
25
|
+
// OpenAI OAuth uses the public Codex CLI client (no client secret, no
|
|
26
|
+
// per-deployment registration). The authorization server only accepts the
|
|
27
|
+
// Codex-registered loopback redirect (http://localhost:1455/auth/callback), so
|
|
28
|
+
// the browser is redirected to a local single-shot listener rather than back to
|
|
29
|
+
// a server route. `localhost` resolves in the *browser's* machine, so binding
|
|
30
|
+
// that port here only receives the code when the browser runs on this machine
|
|
31
|
+
// too. On a shared server it does not, and the browser lands on its own
|
|
32
|
+
// localhost with the code sitting in the address bar — so that host skips the
|
|
33
|
+
// listener and the user pastes the address back instead.
|
|
34
|
+
const OPENAI_USERINFO_URL = process.env.OPENAI_OAUTH_USERINFO_URL ?? "https://auth.openai.com/userinfo";
|
|
35
|
+
/** The Codex-registered loopback redirect the client id is bound to. */
|
|
36
|
+
const CODEX_REDIRECT_URI = `http://localhost:${CODEX_CALLBACK_PORT}${CODEX_CALLBACK_PATH}`;
|
|
20
37
|
const STATE_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
21
38
|
// ── PKCE Utilities ───────────────────────────────────────────────────
|
|
22
39
|
export function generatePkcePair() {
|
|
@@ -328,12 +345,17 @@ async function handleHfRefresh(request, getUserId) {
|
|
|
328
345
|
return errorResponse(400, "No refresh token available. Please re-authenticate.");
|
|
329
346
|
}
|
|
330
347
|
try {
|
|
348
|
+
// Send the decrypted refresh token, not the at-rest ciphertext.
|
|
349
|
+
const currentRefreshToken = await credential.getDecryptedRefreshToken();
|
|
350
|
+
if (!currentRefreshToken) {
|
|
351
|
+
return errorResponse(400, "No refresh token available. Please re-authenticate.");
|
|
352
|
+
}
|
|
331
353
|
const tokenRes = await fetch(HF_TOKEN_URL, {
|
|
332
354
|
method: "POST",
|
|
333
355
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
334
356
|
body: new URLSearchParams({
|
|
335
357
|
grant_type: "refresh_token",
|
|
336
|
-
refresh_token:
|
|
358
|
+
refresh_token: currentRefreshToken,
|
|
337
359
|
client_id: HF_CLIENT_ID
|
|
338
360
|
})
|
|
339
361
|
});
|
|
@@ -343,7 +365,8 @@ async function handleHfRefresh(request, getUserId) {
|
|
|
343
365
|
}
|
|
344
366
|
const tokenData = (await tokenRes.json());
|
|
345
367
|
const accessToken = tokenData.access_token;
|
|
346
|
-
|
|
368
|
+
// Reuse the current (plaintext) refresh token if the response omits one.
|
|
369
|
+
const newRefreshToken = tokenData.refresh_token ?? currentRefreshToken;
|
|
347
370
|
const tokenType = tokenData.token_type ?? credential.token_type;
|
|
348
371
|
const scope = tokenData.scope ?? credential.scope;
|
|
349
372
|
const expiresIn = tokenData.expires_in;
|
|
@@ -354,13 +377,15 @@ async function handleHfRefresh(request, getUserId) {
|
|
|
354
377
|
if (expiresIn) {
|
|
355
378
|
expiresAt = new Date(Date.now() + expiresIn * 1000).toISOString();
|
|
356
379
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
credential.
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
380
|
+
// updateTokens encrypts before persisting — never assign plaintext to the
|
|
381
|
+
// encrypted_* columns directly.
|
|
382
|
+
await credential.updateTokens({
|
|
383
|
+
accessToken,
|
|
384
|
+
refreshToken: newRefreshToken,
|
|
385
|
+
tokenType,
|
|
386
|
+
scope,
|
|
387
|
+
expiresAt
|
|
388
|
+
});
|
|
364
389
|
return jsonResponse({
|
|
365
390
|
success: true,
|
|
366
391
|
message: "Token refreshed successfully"
|
|
@@ -384,9 +409,11 @@ async function handleHfWhoami(request, getUserId) {
|
|
|
384
409
|
return errorResponse(404, `No credential found for account_id: ${accountId}`);
|
|
385
410
|
}
|
|
386
411
|
try {
|
|
412
|
+
// Send the decrypted token, not the at-rest ciphertext, or HF always 401s.
|
|
413
|
+
const accessToken = await credential.getDecryptedAccessToken();
|
|
387
414
|
const res = await fetch(HF_WHOAMI_URL, {
|
|
388
415
|
headers: {
|
|
389
|
-
Authorization: `${credential.token_type} ${
|
|
416
|
+
Authorization: `${credential.token_type} ${accessToken}`
|
|
390
417
|
}
|
|
391
418
|
});
|
|
392
419
|
if (res.status === 401) {
|
|
@@ -607,9 +634,11 @@ async function handleGithubUser(request, getUserId) {
|
|
|
607
634
|
return errorResponse(404, `No credential found for account_id: ${accountId}`);
|
|
608
635
|
}
|
|
609
636
|
try {
|
|
637
|
+
// Send the decrypted token, not the at-rest ciphertext, or GitHub 401s.
|
|
638
|
+
const accessToken = await credential.getDecryptedAccessToken();
|
|
610
639
|
const res = await fetch(GITHUB_USER_URL, {
|
|
611
640
|
headers: {
|
|
612
|
-
Authorization: `${credential.token_type} ${
|
|
641
|
+
Authorization: `${credential.token_type} ${accessToken}`,
|
|
613
642
|
Accept: "application/json"
|
|
614
643
|
}
|
|
615
644
|
});
|
|
@@ -628,6 +657,471 @@ async function handleGithubUser(request, getUserId) {
|
|
|
628
657
|
return errorResponse(500, `Failed to communicate with GitHub: ${message}`);
|
|
629
658
|
}
|
|
630
659
|
}
|
|
660
|
+
// ── OpenAI (Codex) Endpoints ─────────────────────────────────────────
|
|
661
|
+
//
|
|
662
|
+
// The login uses the public Codex CLI OAuth client. Because the Codex client's
|
|
663
|
+
// only registered redirect is the loopback http://localhost:1455/auth/callback,
|
|
664
|
+
// the flow can't bounce back through a server route. Two ways to finish, both
|
|
665
|
+
// from the one authorization request `start` creates:
|
|
666
|
+
//
|
|
667
|
+
// - **Loopback** — `start` binds a one-shot listener on port 1455 and finishes
|
|
668
|
+
// the exchange in the background. Only works when the browser runs on this
|
|
669
|
+
// machine (desktop, local dev).
|
|
670
|
+
// - **Manual** — the browser is redirected to its own localhost, where nothing
|
|
671
|
+
// answers, and the user pastes the address back to `/complete`. The only
|
|
672
|
+
// option on a shared server, which is what `start` offers there.
|
|
673
|
+
//
|
|
674
|
+
// The UI reflects success by polling `/api/oauth/openai/tokens`.
|
|
675
|
+
/** How long a started login stays completable from a pasted address. */
|
|
676
|
+
const CODEX_LOGIN_TTL_MS = 10 * 60 * 1000;
|
|
677
|
+
/** Logins awaiting a pasted redirect address, keyed by their CSRF state. */
|
|
678
|
+
export const pendingCodexLogins = new Map();
|
|
679
|
+
function pruneExpiredCodexLogins() {
|
|
680
|
+
const now = Date.now();
|
|
681
|
+
for (const [state, pending] of pendingCodexLogins) {
|
|
682
|
+
if (now - pending.createdAt > CODEX_LOGIN_TTL_MS) {
|
|
683
|
+
pendingCodexLogins.delete(state);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Read `code` and `state` out of what the user pastes back — the whole address
|
|
689
|
+
* the browser was sent to, or just its query string. The state is required: it
|
|
690
|
+
* is the CSRF check, and a bare code cannot be tied to the login it belongs to.
|
|
691
|
+
*/
|
|
692
|
+
export function parseCodexRedirect(input) {
|
|
693
|
+
let query = input.trim();
|
|
694
|
+
const questionMark = query.indexOf("?");
|
|
695
|
+
if (questionMark >= 0) {
|
|
696
|
+
query = query.slice(questionMark + 1);
|
|
697
|
+
const hash = query.indexOf("#");
|
|
698
|
+
if (hash >= 0)
|
|
699
|
+
query = query.slice(0, hash);
|
|
700
|
+
}
|
|
701
|
+
const params = new URLSearchParams(query);
|
|
702
|
+
const error = params.get("error");
|
|
703
|
+
if (error) {
|
|
704
|
+
throw new Error(params.get("error_description") || `Sign-in was refused: ${error}`);
|
|
705
|
+
}
|
|
706
|
+
const code = params.get("code");
|
|
707
|
+
const state = params.get("state");
|
|
708
|
+
if (!code || !state) {
|
|
709
|
+
throw new Error("Paste the whole address the browser was sent to — it carries both the code and the state.");
|
|
710
|
+
}
|
|
711
|
+
return { code, state };
|
|
712
|
+
}
|
|
713
|
+
/** Build the Codex OAuth client (public client id, no secret). */
|
|
714
|
+
function codexOAuthClient() {
|
|
715
|
+
const clientId = process.env.CODEX_OAUTH_CLIENT_ID || CODEX_OAUTH_CLIENT_ID;
|
|
716
|
+
return new OAuthClient({
|
|
717
|
+
config: { ...DEFAULT_CODEX_OAUTH_CONFIG, clientId }
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
/** The single in-flight login, so a re-click can supersede a stale listener. */
|
|
721
|
+
let activeCodexLogin = null;
|
|
722
|
+
/** Abort and tear down any in-flight Codex login listener. Idempotent. */
|
|
723
|
+
export async function closeActiveCodexCallbackServer() {
|
|
724
|
+
const active = activeCodexLogin;
|
|
725
|
+
if (!active)
|
|
726
|
+
return;
|
|
727
|
+
activeCodexLogin = null;
|
|
728
|
+
active.abort.abort();
|
|
729
|
+
await active.server.close().catch(() => { });
|
|
730
|
+
}
|
|
731
|
+
async function handleOpenAIStart(request, getUserId) {
|
|
732
|
+
if (request.method !== "GET")
|
|
733
|
+
return errorResponse(405, "Method not allowed");
|
|
734
|
+
const userId = getUserId();
|
|
735
|
+
const url = new URL(request.url);
|
|
736
|
+
const client = codexOAuthClient();
|
|
737
|
+
const { codeVerifier, codeChallenge } = generatePkcePair();
|
|
738
|
+
const state = generateState();
|
|
739
|
+
// A shared server's users browse from their own machines, where the loopback
|
|
740
|
+
// redirect lands — so binding it here would receive nothing. The caller can
|
|
741
|
+
// also ask for the paste flow outright.
|
|
742
|
+
const manual = url.searchParams.get("manual") === "true" || isAuthEnforced();
|
|
743
|
+
pruneExpiredCodexLogins();
|
|
744
|
+
pendingCodexLogins.set(state, { userId, codeVerifier, createdAt: Date.now() });
|
|
745
|
+
// A new attempt supersedes any listener left over from an abandoned one.
|
|
746
|
+
await closeActiveCodexCallbackServer();
|
|
747
|
+
if (!manual) {
|
|
748
|
+
const server = new LocalCallbackServer({
|
|
749
|
+
host: "localhost",
|
|
750
|
+
port: CODEX_CALLBACK_PORT,
|
|
751
|
+
path: CODEX_CALLBACK_PATH
|
|
752
|
+
});
|
|
753
|
+
try {
|
|
754
|
+
await server.listen();
|
|
755
|
+
}
|
|
756
|
+
catch (err) {
|
|
757
|
+
pendingCodexLogins.delete(state);
|
|
758
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
759
|
+
return errorResponse(500, `Could not start the OAuth callback listener on port ${CODEX_CALLBACK_PORT}: ${message}`);
|
|
760
|
+
}
|
|
761
|
+
const abort = new AbortController();
|
|
762
|
+
activeCodexLogin = { server, abort };
|
|
763
|
+
// Finish the exchange off the request path; the UI polls /tokens.
|
|
764
|
+
void completeCodexLogin({
|
|
765
|
+
server,
|
|
766
|
+
client,
|
|
767
|
+
state,
|
|
768
|
+
codeVerifier,
|
|
769
|
+
userId,
|
|
770
|
+
abort
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
const authUrl = client.buildAuthorizationUrl({
|
|
774
|
+
redirectUri: CODEX_REDIRECT_URI,
|
|
775
|
+
state,
|
|
776
|
+
codeChallenge,
|
|
777
|
+
codeChallengeMethod: "S256"
|
|
778
|
+
});
|
|
779
|
+
return jsonResponse({
|
|
780
|
+
auth_url: authUrl,
|
|
781
|
+
manual,
|
|
782
|
+
redirect_uri: CODEX_REDIRECT_URI
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
/** Await the loopback redirect, exchange the code, and persist credentials. */
|
|
786
|
+
async function completeCodexLogin(args) {
|
|
787
|
+
const { server, client, state, codeVerifier, userId, abort } = args;
|
|
788
|
+
try {
|
|
789
|
+
const { code } = await server.waitForCode({
|
|
790
|
+
expectedState: state,
|
|
791
|
+
timeoutMs: STATE_TTL_MS,
|
|
792
|
+
signal: abort.signal
|
|
793
|
+
});
|
|
794
|
+
const tokens = await client.exchangeAuthorizationCode({
|
|
795
|
+
code,
|
|
796
|
+
codeVerifier,
|
|
797
|
+
redirectUri: CODEX_REDIRECT_URI,
|
|
798
|
+
signal: abort.signal
|
|
799
|
+
});
|
|
800
|
+
const accountId = await persistCodexTokens(tokens, userId);
|
|
801
|
+
logger.info("Codex OAuth login completed", { accountId });
|
|
802
|
+
}
|
|
803
|
+
catch (err) {
|
|
804
|
+
logger.warn("Codex OAuth login did not complete", {
|
|
805
|
+
error: err instanceof Error ? err.message : String(err)
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
finally {
|
|
809
|
+
pendingCodexLogins.delete(state);
|
|
810
|
+
await server.close().catch(() => { });
|
|
811
|
+
if (activeCodexLogin?.server === server)
|
|
812
|
+
activeCodexLogin = null;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
/** Store exchanged Codex tokens against a user; returns the account id used. */
|
|
816
|
+
async function persistCodexTokens(tokens, userId) {
|
|
817
|
+
// Prefer the ChatGPT account id embedded in the Codex access-token JWT — it
|
|
818
|
+
// is the stable identity the ChatGPT backend addresses accounts by. Falls
|
|
819
|
+
// back to the OIDC `sub`, then to an opaque token-derived id.
|
|
820
|
+
const chatgptAccountId = extractChatGptAccountId(tokens.accessToken);
|
|
821
|
+
let accountId = chatgptAccountId ?? String(Math.abs(hashCode(tokens.accessToken.slice(0, 24))));
|
|
822
|
+
// Best-effort OIDC userinfo for a friendly account label.
|
|
823
|
+
let username = null;
|
|
824
|
+
try {
|
|
825
|
+
const infoRes = await fetch(OPENAI_USERINFO_URL, {
|
|
826
|
+
headers: { Authorization: `${tokens.tokenType} ${tokens.accessToken}` }
|
|
827
|
+
});
|
|
828
|
+
if (infoRes.ok) {
|
|
829
|
+
const info = (await infoRes.json());
|
|
830
|
+
username =
|
|
831
|
+
info.email ?? info.name ?? info.sub ?? null;
|
|
832
|
+
if (!chatgptAccountId && isNonEmptyString(info.sub)) {
|
|
833
|
+
accountId = info.sub;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
catch {
|
|
838
|
+
// userinfo is optional — keep the fallback account id.
|
|
839
|
+
}
|
|
840
|
+
await OAuthCredential.upsert({
|
|
841
|
+
user_id: userId,
|
|
842
|
+
provider: "openai",
|
|
843
|
+
account_id: accountId,
|
|
844
|
+
access_token: tokens.accessToken,
|
|
845
|
+
refresh_token: tokens.refreshToken,
|
|
846
|
+
username,
|
|
847
|
+
token_type: tokens.tokenType,
|
|
848
|
+
scope: tokens.scope,
|
|
849
|
+
received_at: new Date(tokens.receivedAt).toISOString(),
|
|
850
|
+
expires_at: tokens.expiresAt != null ? new Date(tokens.expiresAt).toISOString() : null
|
|
851
|
+
});
|
|
852
|
+
// The chat agent holds a per-user provider set built from the credentials it
|
|
853
|
+
// could resolve at the time. Without this the sign-in lands in the database
|
|
854
|
+
// and the agent goes on without Codex until the process restarts — which a
|
|
855
|
+
// production server does not do.
|
|
856
|
+
clearProviderCache();
|
|
857
|
+
return accountId;
|
|
858
|
+
}
|
|
859
|
+
/** Complete a started login from the address the browser was redirected to. */
|
|
860
|
+
async function handleOpenAIComplete(request, getUserId) {
|
|
861
|
+
if (request.method !== "POST")
|
|
862
|
+
return errorResponse(405, "Method not allowed");
|
|
863
|
+
let body;
|
|
864
|
+
try {
|
|
865
|
+
body = (await request.json());
|
|
866
|
+
}
|
|
867
|
+
catch {
|
|
868
|
+
return errorResponse(400, "Invalid JSON body");
|
|
869
|
+
}
|
|
870
|
+
const raw = isString(body.code) ? body.code : "";
|
|
871
|
+
if (!raw.trim())
|
|
872
|
+
return errorResponse(400, "code is required");
|
|
873
|
+
let redirect;
|
|
874
|
+
try {
|
|
875
|
+
redirect = parseCodexRedirect(raw);
|
|
876
|
+
}
|
|
877
|
+
catch (err) {
|
|
878
|
+
return errorResponse(400, err instanceof Error ? err.message : String(err));
|
|
879
|
+
}
|
|
880
|
+
pruneExpiredCodexLogins();
|
|
881
|
+
const pending = pendingCodexLogins.get(redirect.state);
|
|
882
|
+
const userId = getUserId();
|
|
883
|
+
// An unknown state and another user's state are the same answer: this login
|
|
884
|
+
// is not one we can finish, and saying which it was leaks the difference.
|
|
885
|
+
if (!pending || pending.userId !== userId) {
|
|
886
|
+
return errorResponse(400, "That sign-in expired or was never started here. Start it again and paste the new address.");
|
|
887
|
+
}
|
|
888
|
+
pendingCodexLogins.delete(redirect.state);
|
|
889
|
+
// The code is spent; any loopback listener still up is waiting for nothing.
|
|
890
|
+
await closeActiveCodexCallbackServer();
|
|
891
|
+
try {
|
|
892
|
+
const tokens = await codexOAuthClient().exchangeAuthorizationCode({
|
|
893
|
+
code: redirect.code,
|
|
894
|
+
codeVerifier: pending.codeVerifier,
|
|
895
|
+
redirectUri: CODEX_REDIRECT_URI
|
|
896
|
+
});
|
|
897
|
+
const accountId = await persistCodexTokens(tokens, userId);
|
|
898
|
+
logger.info("Codex OAuth login completed from a pasted address", {
|
|
899
|
+
accountId
|
|
900
|
+
});
|
|
901
|
+
return jsonResponse({ success: true });
|
|
902
|
+
}
|
|
903
|
+
catch (err) {
|
|
904
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
905
|
+
logger.warn("Codex OAuth code exchange failed", { error: message });
|
|
906
|
+
return errorResponse(400, message);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
async function handleOpenAITokens(getUserId) {
|
|
910
|
+
const userId = getUserId();
|
|
911
|
+
const credentials = await OAuthCredential.listForUserAndProvider(userId, "openai");
|
|
912
|
+
return jsonResponse({ tokens: credentials.map(toTokenMetadata) });
|
|
913
|
+
}
|
|
914
|
+
async function handleOpenAIDisconnect(request, getUserId) {
|
|
915
|
+
if (request.method !== "POST")
|
|
916
|
+
return errorResponse(405, "Method not allowed");
|
|
917
|
+
const userId = getUserId();
|
|
918
|
+
const credentials = await OAuthCredential.listForUserAndProvider(userId, "openai");
|
|
919
|
+
for (const credential of credentials) {
|
|
920
|
+
await credential.delete();
|
|
921
|
+
}
|
|
922
|
+
clearProviderCache();
|
|
923
|
+
return jsonResponse({ success: true, removed: credentials.length });
|
|
924
|
+
}
|
|
925
|
+
// ── Claude (subscription) Endpoints ──────────────────────────────────
|
|
926
|
+
//
|
|
927
|
+
// Signs in with a Claude subscription using the same public OAuth client the
|
|
928
|
+
// `claude` CLI uses, and writes the tokens to the Claude Agent SDK's credential
|
|
929
|
+
// file (`~/.claude/.credentials.json`). That file — not the database — is the
|
|
930
|
+
// store, because the SDK spawns the `claude` binary as this process's user and
|
|
931
|
+
// reads it directly; a per-user DB row would be invisible to it.
|
|
932
|
+
//
|
|
933
|
+
// Two ways to finish, both from the one authorization request `start` creates,
|
|
934
|
+
// mirroring the Codex flow above:
|
|
935
|
+
//
|
|
936
|
+
// - **Loopback** — `start` binds the `claude` CLI's own callback port (54545)
|
|
937
|
+
// and finishes the exchange in the background. Only works when the browser
|
|
938
|
+
// runs on this machine (desktop, local dev).
|
|
939
|
+
// - **Manual** — the browser is sent to the console, which displays a
|
|
940
|
+
// `code#state` the user pastes back to `/complete`. What `start` offers on a
|
|
941
|
+
// shared server (`isAuthEnforced()`) or when asked with `?manual=true`.
|
|
942
|
+
//
|
|
943
|
+
// The UI reflects success by polling `/api/oauth/claude/tokens`.
|
|
944
|
+
/** The single in-flight login, so a re-click supersedes a stale listener. */
|
|
945
|
+
let activeClaudeLogin = null;
|
|
946
|
+
/** Abort and tear down any in-flight Claude login. Idempotent. */
|
|
947
|
+
export async function closeActiveClaudeLogin() {
|
|
948
|
+
const active = activeClaudeLogin;
|
|
949
|
+
if (!active)
|
|
950
|
+
return;
|
|
951
|
+
activeClaudeLogin = null;
|
|
952
|
+
active.abort.abort();
|
|
953
|
+
await active.pending.cancel().catch(() => { });
|
|
954
|
+
}
|
|
955
|
+
async function handleClaudeStart(request) {
|
|
956
|
+
if (request.method !== "GET")
|
|
957
|
+
return errorResponse(405, "Method not allowed");
|
|
958
|
+
const url = new URL(request.url);
|
|
959
|
+
const loginMethod = url.searchParams.get("login_method") === "console" ? "console" : "claude-ai";
|
|
960
|
+
// A shared server's users browse from their own machines, where the loopback
|
|
961
|
+
// redirect lands — so binding it here would receive nothing. The caller can
|
|
962
|
+
// also ask for the paste flow outright.
|
|
963
|
+
const manual = url.searchParams.get("manual") === "true" || isAuthEnforced();
|
|
964
|
+
await closeActiveClaudeLogin();
|
|
965
|
+
const login = new ClaudeCodeLogin();
|
|
966
|
+
let pending;
|
|
967
|
+
try {
|
|
968
|
+
pending = await login.begin({ loginMethod, manualOnly: manual });
|
|
969
|
+
}
|
|
970
|
+
catch (err) {
|
|
971
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
972
|
+
return errorResponse(500, `Could not start the Claude login: ${message}`);
|
|
973
|
+
}
|
|
974
|
+
const abort = new AbortController();
|
|
975
|
+
activeClaudeLogin = { pending, abort };
|
|
976
|
+
if (pending.authUrl) {
|
|
977
|
+
// Finish off the request path; the UI polls /tokens for success.
|
|
978
|
+
void pending
|
|
979
|
+
.waitForRedirect(abort.signal)
|
|
980
|
+
.then(() => logger.info("Claude OAuth login completed"))
|
|
981
|
+
.catch((err) => {
|
|
982
|
+
logger.warn("Claude OAuth login did not complete", {
|
|
983
|
+
error: err instanceof Error ? err.message : String(err)
|
|
984
|
+
});
|
|
985
|
+
})
|
|
986
|
+
.finally(() => {
|
|
987
|
+
if (activeClaudeLogin?.pending === pending)
|
|
988
|
+
activeClaudeLogin = null;
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
return jsonResponse({
|
|
992
|
+
auth_url: pending.authUrl ?? pending.manualAuthUrl,
|
|
993
|
+
manual_auth_url: pending.manualAuthUrl,
|
|
994
|
+
manual,
|
|
995
|
+
redirect_uri: pending.redirectUri,
|
|
996
|
+
state: pending.state
|
|
997
|
+
});
|
|
998
|
+
}
|
|
999
|
+
/** Complete a started login from the `code#state` the console displayed. */
|
|
1000
|
+
async function handleClaudeComplete(request) {
|
|
1001
|
+
if (request.method !== "POST")
|
|
1002
|
+
return errorResponse(405, "Method not allowed");
|
|
1003
|
+
const active = activeClaudeLogin;
|
|
1004
|
+
if (!active) {
|
|
1005
|
+
return errorResponse(400, "No Claude login in progress. Start one and try again.");
|
|
1006
|
+
}
|
|
1007
|
+
let body;
|
|
1008
|
+
try {
|
|
1009
|
+
body = (await request.json());
|
|
1010
|
+
}
|
|
1011
|
+
catch {
|
|
1012
|
+
return errorResponse(400, "Invalid JSON body");
|
|
1013
|
+
}
|
|
1014
|
+
const code = isString(body.code) ? body.code : "";
|
|
1015
|
+
if (!code)
|
|
1016
|
+
return errorResponse(400, "code is required");
|
|
1017
|
+
try {
|
|
1018
|
+
await active.pending.completeWithPastedCode(code);
|
|
1019
|
+
logger.info("Claude OAuth login completed from a pasted code");
|
|
1020
|
+
return jsonResponse({ success: true });
|
|
1021
|
+
}
|
|
1022
|
+
catch (err) {
|
|
1023
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1024
|
+
return errorResponse(400, message);
|
|
1025
|
+
}
|
|
1026
|
+
finally {
|
|
1027
|
+
if (activeClaudeLogin === active)
|
|
1028
|
+
activeClaudeLogin = null;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
/**
|
|
1032
|
+
* Connection status, shaped like the other providers' `tokens` responses so the
|
|
1033
|
+
* shared `useOAuthConnection` hook works unchanged. There is at most one login.
|
|
1034
|
+
*/
|
|
1035
|
+
async function handleClaudeTokens() {
|
|
1036
|
+
const status = await new ClaudeCodeLogin().status();
|
|
1037
|
+
return jsonResponse({
|
|
1038
|
+
tokens: status.connected
|
|
1039
|
+
? [
|
|
1040
|
+
{
|
|
1041
|
+
provider: "claude",
|
|
1042
|
+
scope: status.scopes.join(" "),
|
|
1043
|
+
expires_at: status.expiresAt != null
|
|
1044
|
+
? new Date(status.expiresAt).toISOString()
|
|
1045
|
+
: null,
|
|
1046
|
+
expired: status.expired,
|
|
1047
|
+
subscription_type: status.subscriptionType,
|
|
1048
|
+
rate_limit_tier: status.rateLimitTier,
|
|
1049
|
+
credentials_path: status.credentialsPath
|
|
1050
|
+
}
|
|
1051
|
+
]
|
|
1052
|
+
: []
|
|
1053
|
+
});
|
|
1054
|
+
}
|
|
1055
|
+
async function handleClaudeDisconnect(request) {
|
|
1056
|
+
if (request.method !== "POST")
|
|
1057
|
+
return errorResponse(405, "Method not allowed");
|
|
1058
|
+
await closeActiveClaudeLogin();
|
|
1059
|
+
const removed = await new ClaudeCodeLogin().logout();
|
|
1060
|
+
return jsonResponse({ success: true, removed: removed ? 1 : 0 });
|
|
1061
|
+
}
|
|
1062
|
+
/** Coerce Supabase's `expires_at` (unix seconds or ISO string) to ISO. */
|
|
1063
|
+
function toIsoExpiry(value) {
|
|
1064
|
+
if (isFiniteNumber(value)) {
|
|
1065
|
+
return new Date(value * 1000).toISOString();
|
|
1066
|
+
}
|
|
1067
|
+
if (isNonEmptyString(value)) {
|
|
1068
|
+
const parsed = Date.parse(value);
|
|
1069
|
+
if (!Number.isNaN(parsed))
|
|
1070
|
+
return new Date(parsed).toISOString();
|
|
1071
|
+
}
|
|
1072
|
+
return null;
|
|
1073
|
+
}
|
|
1074
|
+
async function handleGoogleSession(request, getUserId) {
|
|
1075
|
+
if (request.method !== "POST")
|
|
1076
|
+
return errorResponse(405, "Method not allowed");
|
|
1077
|
+
if (!isGoogleWorkspaceEnabled()) {
|
|
1078
|
+
return errorResponse(404, "Google Workspace integration is not enabled");
|
|
1079
|
+
}
|
|
1080
|
+
let body;
|
|
1081
|
+
try {
|
|
1082
|
+
body = (await request.json());
|
|
1083
|
+
}
|
|
1084
|
+
catch {
|
|
1085
|
+
return errorResponse(400, "Invalid JSON body");
|
|
1086
|
+
}
|
|
1087
|
+
const accessToken = isString(body.access_token) ? body.access_token : "";
|
|
1088
|
+
if (!accessToken) {
|
|
1089
|
+
return errorResponse(400, "access_token is required");
|
|
1090
|
+
}
|
|
1091
|
+
const userId = getUserId();
|
|
1092
|
+
const email = isString(body.email) ? body.email : null;
|
|
1093
|
+
const credential = await storeGoogleCredential({
|
|
1094
|
+
userId,
|
|
1095
|
+
// One credential row per Google account. The email is the stable identity
|
|
1096
|
+
// the user recognises; fall back to the NodeTool user id.
|
|
1097
|
+
accountId: (isNonEmptyString(body.account_id) && body.account_id) ||
|
|
1098
|
+
email ||
|
|
1099
|
+
userId,
|
|
1100
|
+
accessToken,
|
|
1101
|
+
refreshToken: isString(body.refresh_token) ? body.refresh_token : null,
|
|
1102
|
+
email,
|
|
1103
|
+
scope: isString(body.scope) ? body.scope : null,
|
|
1104
|
+
expiresAt: toIsoExpiry(body.expires_at)
|
|
1105
|
+
});
|
|
1106
|
+
logger.info("Google session token stored", { accountId: credential.account_id });
|
|
1107
|
+
return jsonResponse({ success: true, token: toTokenMetadata(credential) });
|
|
1108
|
+
}
|
|
1109
|
+
async function handleGoogleTokens(getUserId) {
|
|
1110
|
+
if (!isGoogleWorkspaceEnabled()) {
|
|
1111
|
+
return jsonResponse({ enabled: false, tokens: [] });
|
|
1112
|
+
}
|
|
1113
|
+
const credentials = await OAuthCredential.listForUserAndProvider(getUserId(), GOOGLE_CREDENTIAL_PROVIDER);
|
|
1114
|
+
return jsonResponse({
|
|
1115
|
+
enabled: true,
|
|
1116
|
+
tokens: credentials.map(toTokenMetadata)
|
|
1117
|
+
});
|
|
1118
|
+
}
|
|
1119
|
+
async function handleGoogleDisconnect(request, getUserId) {
|
|
1120
|
+
if (request.method !== "POST")
|
|
1121
|
+
return errorResponse(405, "Method not allowed");
|
|
1122
|
+
const removed = await deleteGoogleCredentials(getUserId());
|
|
1123
|
+
return jsonResponse({ success: true, removed });
|
|
1124
|
+
}
|
|
631
1125
|
// ── Simple hash helper (replicates Python's hash() for fallback) ─────
|
|
632
1126
|
function hashCode(str) {
|
|
633
1127
|
let hash = 0;
|
|
@@ -674,6 +1168,31 @@ export async function handleOAuthRequest(request, pathname, getUserId) {
|
|
|
674
1168
|
return handleGithubTokens(getUserId);
|
|
675
1169
|
case "/api/oauth/github/user":
|
|
676
1170
|
return handleGithubUser(request, getUserId);
|
|
1171
|
+
// OpenAI (Codex)
|
|
1172
|
+
case "/api/oauth/openai/start":
|
|
1173
|
+
return handleOpenAIStart(request, getUserId);
|
|
1174
|
+
case "/api/oauth/openai/complete":
|
|
1175
|
+
return handleOpenAIComplete(request, getUserId);
|
|
1176
|
+
case "/api/oauth/openai/tokens":
|
|
1177
|
+
return handleOpenAITokens(getUserId);
|
|
1178
|
+
case "/api/oauth/openai/disconnect":
|
|
1179
|
+
return handleOpenAIDisconnect(request, getUserId);
|
|
1180
|
+
// Claude subscription (Claude Agent SDK credentials)
|
|
1181
|
+
case "/api/oauth/claude/start":
|
|
1182
|
+
return handleClaudeStart(request);
|
|
1183
|
+
case "/api/oauth/claude/complete":
|
|
1184
|
+
return handleClaudeComplete(request);
|
|
1185
|
+
case "/api/oauth/claude/tokens":
|
|
1186
|
+
return handleClaudeTokens();
|
|
1187
|
+
case "/api/oauth/claude/disconnect":
|
|
1188
|
+
return handleClaudeDisconnect(request);
|
|
1189
|
+
// Google Workspace (token comes from the Supabase Google login)
|
|
1190
|
+
case "/api/oauth/google/session":
|
|
1191
|
+
return handleGoogleSession(request, getUserId);
|
|
1192
|
+
case "/api/oauth/google/tokens":
|
|
1193
|
+
return handleGoogleTokens(getUserId);
|
|
1194
|
+
case "/api/oauth/google/disconnect":
|
|
1195
|
+
return handleGoogleDisconnect(request, getUserId);
|
|
677
1196
|
default:
|
|
678
1197
|
return null;
|
|
679
1198
|
}
|