@nodetool-ai/websocket 0.7.0-rc.22 → 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
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** The row fields that describe an in-place file. */
|
|
2
|
+
export interface ExternalAssetFields {
|
|
3
|
+
external_path: string | null;
|
|
4
|
+
metadata: Record<string, unknown> | null;
|
|
5
|
+
}
|
|
6
|
+
/** The metadata keys that fingerprint an external file. Server-owned. */
|
|
7
|
+
export declare const EXTERNAL_FINGERPRINT_KEYS: readonly ["external_size", "external_mtime"];
|
|
8
|
+
/** The recorded mtime of an external asset, or null for a managed one. */
|
|
9
|
+
export declare function externalAssetMtime(asset: ExternalAssetFields): number | null;
|
|
10
|
+
/**
|
|
11
|
+
* The external file behind `asset` when it is present and unchanged, else
|
|
12
|
+
* null. mtimes compare at millisecond granularity. A row with no recorded
|
|
13
|
+
* size or mtime is checked for presence only.
|
|
14
|
+
*/
|
|
15
|
+
export declare function verifiedExternalPath(asset: ExternalAssetFields): Promise<string | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Whether an external asset's file is missing or changed. Always false for a
|
|
18
|
+
* managed asset. One `stat`, so it is cheap enough for every asset response.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isExternalAssetOffline(asset: ExternalAssetFields): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* The external path behind `<owner>/<assetId>.<ext>` (or `<owner>/<assetId>`),
|
|
23
|
+
* or null. Only full asset ids resolve, only for the owner the key names, and
|
|
24
|
+
* only when the extension matches the one the row's content type maps to.
|
|
25
|
+
* Legacy flat keys and runtime scratch keys never resolve: external rows are
|
|
26
|
+
* always created under the owner-prefixed layout. An offline file resolves to
|
|
27
|
+
* null.
|
|
28
|
+
*/
|
|
29
|
+
export declare function lookupExternalAssetPath(key: string): Promise<string | null>;
|
|
30
|
+
//# sourceMappingURL=external-asset-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-asset-lookup.d.ts","sourceRoot":"","sources":["../../src/lib/external-asset-lookup.ts"],"names":[],"mappings":"AAqBA,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAED,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,YACpC,eAAe,EACf,gBAAgB,CACR,CAAC;AAUX,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAG5E;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve an asset storage key to the file an external asset references in
|
|
3
|
+
* place (see `Asset.external_path`), and decide whether that file is offline.
|
|
4
|
+
*
|
|
5
|
+
* The local `FileStorageAdapter` and the `/api/storage` stream call the lookup
|
|
6
|
+
* after a key misses under the storage root. Every key-based reader then finds
|
|
7
|
+
* an external asset's bytes without knowing about asset rows.
|
|
8
|
+
*
|
|
9
|
+
* A file that is missing, no longer a regular file, or whose size or mtime
|
|
10
|
+
* differs from what import or relink recorded is offline. The lookup answers
|
|
11
|
+
* null for an offline file, so every reader (adapter reads, `localPath`, the
|
|
12
|
+
* `/api/storage` stream) reports it as missing instead of serving bytes the
|
|
13
|
+
* asset never pointed at. Relink records the new file and brings it back.
|
|
14
|
+
*/
|
|
15
|
+
import { stat } from "node:fs/promises";
|
|
16
|
+
import { Asset } from "@nodetool-ai/models";
|
|
17
|
+
import { assetKeyOwner, normalizeStorageKey } from "@nodetool-ai/storage";
|
|
18
|
+
import { getAssetFileName } from "./asset-paths.js";
|
|
19
|
+
import { isRuntimeScratchKey } from "./storage-access.js";
|
|
20
|
+
import { isFiniteNumber } from "./wire-values.js";
|
|
21
|
+
/** The metadata keys that fingerprint an external file. Server-owned. */
|
|
22
|
+
export const EXTERNAL_FINGERPRINT_KEYS = [
|
|
23
|
+
"external_size",
|
|
24
|
+
"external_mtime"
|
|
25
|
+
];
|
|
26
|
+
function recordedNumber(metadata, key) {
|
|
27
|
+
const value = metadata?.[key];
|
|
28
|
+
return isFiniteNumber(value) ? value : null;
|
|
29
|
+
}
|
|
30
|
+
/** The recorded mtime of an external asset, or null for a managed one. */
|
|
31
|
+
export function externalAssetMtime(asset) {
|
|
32
|
+
if (!asset.external_path)
|
|
33
|
+
return null;
|
|
34
|
+
return recordedNumber(asset.metadata, "external_mtime");
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The external file behind `asset` when it is present and unchanged, else
|
|
38
|
+
* null. mtimes compare at millisecond granularity. A row with no recorded
|
|
39
|
+
* size or mtime is checked for presence only.
|
|
40
|
+
*/
|
|
41
|
+
export async function verifiedExternalPath(asset) {
|
|
42
|
+
const path = asset.external_path;
|
|
43
|
+
if (!path)
|
|
44
|
+
return null;
|
|
45
|
+
let info;
|
|
46
|
+
try {
|
|
47
|
+
info = await stat(path);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
if (!info.isFile())
|
|
53
|
+
return null;
|
|
54
|
+
const size = recordedNumber(asset.metadata, "external_size");
|
|
55
|
+
if (size !== null && size !== info.size)
|
|
56
|
+
return null;
|
|
57
|
+
const mtime = recordedNumber(asset.metadata, "external_mtime");
|
|
58
|
+
if (mtime !== null && Math.trunc(mtime) !== Math.trunc(info.mtimeMs)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return path;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Whether an external asset's file is missing or changed. Always false for a
|
|
65
|
+
* managed asset. One `stat`, so it is cheap enough for every asset response.
|
|
66
|
+
*/
|
|
67
|
+
export async function isExternalAssetOffline(asset) {
|
|
68
|
+
if (!asset.external_path)
|
|
69
|
+
return false;
|
|
70
|
+
return (await verifiedExternalPath(asset)) === null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The external path behind `<owner>/<assetId>.<ext>` (or `<owner>/<assetId>`),
|
|
74
|
+
* or null. Only full asset ids resolve, only for the owner the key names, and
|
|
75
|
+
* only when the extension matches the one the row's content type maps to.
|
|
76
|
+
* Legacy flat keys and runtime scratch keys never resolve: external rows are
|
|
77
|
+
* always created under the owner-prefixed layout. An offline file resolves to
|
|
78
|
+
* null.
|
|
79
|
+
*/
|
|
80
|
+
export async function lookupExternalAssetPath(key) {
|
|
81
|
+
if (isRuntimeScratchKey(key))
|
|
82
|
+
return null;
|
|
83
|
+
const owner = assetKeyOwner(key);
|
|
84
|
+
if (!owner)
|
|
85
|
+
return null;
|
|
86
|
+
const fileName = normalizeStorageKey(key).slice(owner.length + 1);
|
|
87
|
+
if (!fileName || fileName.includes("/"))
|
|
88
|
+
return null;
|
|
89
|
+
const dot = fileName.lastIndexOf(".");
|
|
90
|
+
const assetId = dot > 0 ? fileName.slice(0, dot) : fileName;
|
|
91
|
+
const asset = await Asset.find(owner, assetId);
|
|
92
|
+
if (!asset?.external_path || asset.id !== assetId)
|
|
93
|
+
return null;
|
|
94
|
+
if (dot > 0 && fileName !== getAssetFileName(asset.id, asset.content_type)) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
return verifiedExternalPath(asset);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=external-asset-lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-asset-lookup.js","sourceRoot":"","sources":["../../src/lib/external-asset-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Setting (and env var) holding the size, in bytes, at which imports stay in place. */
|
|
2
|
+
export declare const EXTERNAL_ASSET_THRESHOLD_SETTING = "NODETOOL_EXTERNAL_ASSET_THRESHOLD_BYTES";
|
|
3
|
+
/** Default threshold: 1 GiB. */
|
|
4
|
+
export declare const DEFAULT_EXTERNAL_ASSET_THRESHOLD_BYTES: number;
|
|
5
|
+
/** Whether this server may create external asset references. */
|
|
6
|
+
export declare function externalAssetsAvailable(): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* The import size at or above which the desktop app references a file in
|
|
9
|
+
* place. Read from the settings table, then the environment. A missing,
|
|
10
|
+
* non-numeric, or non-positive value falls back to the default.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getExternalAssetThresholdBytes(): Promise<number>;
|
|
13
|
+
//# sourceMappingURL=external-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-assets.d.ts","sourceRoot":"","sources":["../../src/lib/external-assets.ts"],"names":[],"mappings":"AAaA,wFAAwF;AACxF,eAAO,MAAM,gCAAgC,4CACF,CAAC;AAE5C,gCAAgC;AAChC,eAAO,MAAM,sCAAsC,QAAqB,CAAC;AAEzE,gEAAgE;AAChE,wBAAgB,uBAAuB,IAAI,OAAO,CAIjD;AAED;;;;GAIG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC,CActE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When an import references a local file in place instead of copying it.
|
|
3
|
+
*
|
|
4
|
+
* Only the local desktop/dev server does this: the asset store must be the
|
|
5
|
+
* local file backend, and `NODETOOL_ENV=production` refuses it the same way
|
|
6
|
+
* it refuses the local file browser. A stored path is a read capability on
|
|
7
|
+
* the host, so it is never offered where the host is shared.
|
|
8
|
+
*/
|
|
9
|
+
import { loadAssetStorageConfig } from "@nodetool-ai/config";
|
|
10
|
+
import { FileStorageAdapter } from "@nodetool-ai/storage";
|
|
11
|
+
import { getSetting } from "../settings-registry.js";
|
|
12
|
+
import { getAssetAdapter } from "./storage.js";
|
|
13
|
+
/** Setting (and env var) holding the size, in bytes, at which imports stay in place. */
|
|
14
|
+
export const EXTERNAL_ASSET_THRESHOLD_SETTING = "NODETOOL_EXTERNAL_ASSET_THRESHOLD_BYTES";
|
|
15
|
+
/** Default threshold: 1 GiB. */
|
|
16
|
+
export const DEFAULT_EXTERNAL_ASSET_THRESHOLD_BYTES = 1024 * 1024 * 1024;
|
|
17
|
+
/** Whether this server may create external asset references. */
|
|
18
|
+
export function externalAssetsAvailable() {
|
|
19
|
+
if (process.env["NODETOOL_ENV"] === "production")
|
|
20
|
+
return false;
|
|
21
|
+
if (loadAssetStorageConfig().kind !== "file")
|
|
22
|
+
return false;
|
|
23
|
+
return getAssetAdapter() instanceof FileStorageAdapter;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The import size at or above which the desktop app references a file in
|
|
27
|
+
* place. Read from the settings table, then the environment. A missing,
|
|
28
|
+
* non-numeric, or non-positive value falls back to the default.
|
|
29
|
+
*/
|
|
30
|
+
export async function getExternalAssetThresholdBytes() {
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
raw = await getSetting(EXTERNAL_ASSET_THRESHOLD_SETTING);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
raw = process.env[EXTERNAL_ASSET_THRESHOLD_SETTING] ?? null;
|
|
37
|
+
}
|
|
38
|
+
if (raw === null || raw.trim() === "") {
|
|
39
|
+
return DEFAULT_EXTERNAL_ASSET_THRESHOLD_BYTES;
|
|
40
|
+
}
|
|
41
|
+
const parsed = Number(raw);
|
|
42
|
+
return Number.isFinite(parsed) && parsed > 0
|
|
43
|
+
? Math.floor(parsed)
|
|
44
|
+
: DEFAULT_EXTERNAL_ASSET_THRESHOLD_BYTES;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=external-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-assets.js","sourceRoot":"","sources":["../../src/lib/external-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,wFAAwF;AACxF,MAAM,CAAC,MAAM,gCAAgC,GAC3C,yCAAyC,CAAC;AAE5C,gCAAgC;AAChC,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzE,gEAAgE;AAChE,MAAM,UAAU,uBAAuB;IACrC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,sBAAsB,EAAE,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,eAAe,EAAE,YAAY,kBAAkB,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B;IAClD,IAAI,GAAkB,CAAC;IACvB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CAAC,gCAAgC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,IAAI,IAAI,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,OAAO,sCAAsC,CAAC;IAChD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACpB,CAAC,CAAC,sCAAsC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route a resuming WebSocket handshake to the machine running the job.
|
|
3
|
+
*
|
|
4
|
+
* A workflow run lives in one process: its `JobRunSession` — replay buffer,
|
|
5
|
+
* cancel/stream hooks — is process-wide, not shared. With more than one
|
|
6
|
+
* instance behind the Fly proxy a reconnecting client is balanced onto an
|
|
7
|
+
* arbitrary machine, where `reconnect_job` finds no session and degrades to the
|
|
8
|
+
* persisted row: the run continues, but the client sees no frames and its Stop
|
|
9
|
+
* reaches nothing.
|
|
10
|
+
*
|
|
11
|
+
* Fly's proxy answers this with `fly-replay`. A response carrying
|
|
12
|
+
* `fly-replay: instance=<machine>` makes the proxy re-issue the *whole*
|
|
13
|
+
* request — an upgrade included, before any WebSocket frame exists — at the
|
|
14
|
+
* named machine. So the client hints which run it wants to resume
|
|
15
|
+
* (`?resume_job=<jobId>`), and the handshake is replayed at the instance the
|
|
16
|
+
* job row says owns it. Everything else upgrades normally.
|
|
17
|
+
*
|
|
18
|
+
* Bounded to one hop: the proxy stamps `fly-replay-src` on a request it
|
|
19
|
+
* replayed, and a request carrying that header is never replayed again. A
|
|
20
|
+
* machine that is gone fails the replay and the client's own reconnect retries
|
|
21
|
+
* — the run's row is still the fallback either way.
|
|
22
|
+
*/
|
|
23
|
+
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
24
|
+
/**
|
|
25
|
+
* Answer the handshake with a replay instruction, if it belongs elsewhere.
|
|
26
|
+
* Returns true when the request has been answered and must not be upgraded.
|
|
27
|
+
*
|
|
28
|
+
* Every failure — no hint, unknown job, another user's job, a DB that cannot
|
|
29
|
+
* be reached — falls through to a normal upgrade. Routing is an optimization;
|
|
30
|
+
* refusing connections when it cannot be computed would be strictly worse than
|
|
31
|
+
* the single-machine behavior it replaces.
|
|
32
|
+
*/
|
|
33
|
+
export declare function replayUpgradeToOwner(req: FastifyRequest, reply: FastifyReply): Promise<boolean>;
|
|
34
|
+
//# sourceMappingURL=fly-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fly-replay.d.ts","sourceRoot":"","sources":["../../src/lib/fly-replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoB5D;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,OAAO,CAAC,CAiElB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route a resuming WebSocket handshake to the machine running the job.
|
|
3
|
+
*
|
|
4
|
+
* A workflow run lives in one process: its `JobRunSession` — replay buffer,
|
|
5
|
+
* cancel/stream hooks — is process-wide, not shared. With more than one
|
|
6
|
+
* instance behind the Fly proxy a reconnecting client is balanced onto an
|
|
7
|
+
* arbitrary machine, where `reconnect_job` finds no session and degrades to the
|
|
8
|
+
* persisted row: the run continues, but the client sees no frames and its Stop
|
|
9
|
+
* reaches nothing.
|
|
10
|
+
*
|
|
11
|
+
* Fly's proxy answers this with `fly-replay`. A response carrying
|
|
12
|
+
* `fly-replay: instance=<machine>` makes the proxy re-issue the *whole*
|
|
13
|
+
* request — an upgrade included, before any WebSocket frame exists — at the
|
|
14
|
+
* named machine. So the client hints which run it wants to resume
|
|
15
|
+
* (`?resume_job=<jobId>`), and the handshake is replayed at the instance the
|
|
16
|
+
* job row says owns it. Everything else upgrades normally.
|
|
17
|
+
*
|
|
18
|
+
* Bounded to one hop: the proxy stamps `fly-replay-src` on a request it
|
|
19
|
+
* replayed, and a request carrying that header is never replayed again. A
|
|
20
|
+
* machine that is gone fails the replay and the client's own reconnect retries
|
|
21
|
+
* — the run's row is still the fallback either way.
|
|
22
|
+
*/
|
|
23
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
24
|
+
import { Job } from "@nodetool-ai/models";
|
|
25
|
+
import { getInstanceId, isValidInstanceId } from "./instance-id.js";
|
|
26
|
+
import { isWebSocketUpgrade } from "./ws-upgrade.js";
|
|
27
|
+
const log = createLogger("nodetool.websocket.fly-replay");
|
|
28
|
+
/** A run in one of these states has no session left to route to. */
|
|
29
|
+
const TERMINAL_STATUSES = new Set(["completed", "failed", "cancelled"]);
|
|
30
|
+
/**
|
|
31
|
+
* Grace for the proxy to read the replay response before the socket is torn
|
|
32
|
+
* down. `end()` alone waits for the peer's FIN, which a hostile or wedged
|
|
33
|
+
* client never sends — the CLOSE_WAIT fd leak `ws-upgrade.ts` documents.
|
|
34
|
+
*/
|
|
35
|
+
const REPLAY_SOCKET_LINGER_MS = 5000;
|
|
36
|
+
/**
|
|
37
|
+
* Answer the handshake with a replay instruction, if it belongs elsewhere.
|
|
38
|
+
* Returns true when the request has been answered and must not be upgraded.
|
|
39
|
+
*
|
|
40
|
+
* Every failure — no hint, unknown job, another user's job, a DB that cannot
|
|
41
|
+
* be reached — falls through to a normal upgrade. Routing is an optimization;
|
|
42
|
+
* refusing connections when it cannot be computed would be strictly worse than
|
|
43
|
+
* the single-machine behavior it replaces.
|
|
44
|
+
*/
|
|
45
|
+
export async function replayUpgradeToOwner(req, reply) {
|
|
46
|
+
if (!isWebSocketUpgrade(req))
|
|
47
|
+
return false;
|
|
48
|
+
// Already replayed once — accept it here rather than bounce it again.
|
|
49
|
+
if (req.headers["fly-replay-src"])
|
|
50
|
+
return false;
|
|
51
|
+
const instanceId = getInstanceId();
|
|
52
|
+
if (!instanceId)
|
|
53
|
+
return false;
|
|
54
|
+
const jobId = new URLSearchParams(req.url.split("?")[1] ?? "").get("resume_job");
|
|
55
|
+
if (!jobId)
|
|
56
|
+
return false;
|
|
57
|
+
const userId = req.userId;
|
|
58
|
+
if (!userId)
|
|
59
|
+
return false;
|
|
60
|
+
let owner = null;
|
|
61
|
+
try {
|
|
62
|
+
const job = await Job.find(userId, jobId);
|
|
63
|
+
if (!job || TERMINAL_STATUSES.has(job.status))
|
|
64
|
+
return false;
|
|
65
|
+
owner = job.runner_instance;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
log.warn("Could not resolve the owner of a resuming job", {
|
|
69
|
+
jobId,
|
|
70
|
+
error: err instanceof Error ? err.message : String(err)
|
|
71
|
+
});
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (!owner || owner === instanceId)
|
|
75
|
+
return false;
|
|
76
|
+
// The owner goes into a response header verbatim. A stored value that is not
|
|
77
|
+
// header-safe means someone's `NODETOOL_INSTANCE_ID` was malformed when the
|
|
78
|
+
// row was stamped; refuse to echo it rather than let a CRLF split the
|
|
79
|
+
// response we hand the proxy.
|
|
80
|
+
if (!isValidInstanceId(owner)) {
|
|
81
|
+
log.warn("Refusing to replay to a malformed instance id", { jobId, owner });
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
log.info("Replaying a resuming WebSocket upgrade to its owner", {
|
|
85
|
+
jobId,
|
|
86
|
+
owner
|
|
87
|
+
});
|
|
88
|
+
// An upgrade cannot be answered through `reply.send()` — see the doc comment
|
|
89
|
+
// on `denyUnauthorized`. Unlike a refusal this socket is *ended*, not
|
|
90
|
+
// destroyed: the proxy has to read the response to act on the header, and a
|
|
91
|
+
// destroyed socket may drop it.
|
|
92
|
+
reply.hijack();
|
|
93
|
+
const socket = req.raw.socket;
|
|
94
|
+
if (!socket || socket.destroyed)
|
|
95
|
+
return true;
|
|
96
|
+
socket.write("HTTP/1.1 409 Conflict\r\n" +
|
|
97
|
+
`fly-replay: instance=${owner}\r\n` +
|
|
98
|
+
"Connection: close\r\n" +
|
|
99
|
+
"Content-Length: 0\r\n" +
|
|
100
|
+
"\r\n");
|
|
101
|
+
socket.end();
|
|
102
|
+
// …but do not wait forever for the other side to finish closing.
|
|
103
|
+
const linger = setTimeout(() => {
|
|
104
|
+
if (!socket.destroyed)
|
|
105
|
+
socket.destroy();
|
|
106
|
+
}, REPLAY_SOCKET_LINGER_MS);
|
|
107
|
+
linger.unref?.();
|
|
108
|
+
socket.once("close", () => clearTimeout(linger));
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=fly-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fly-replay.js","sourceRoot":"","sources":["../../src/lib/fly-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
interface HttpRateLimitConfig {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
max: number;
|
|
4
|
+
/** Window length in milliseconds. */
|
|
5
|
+
timeWindow: number;
|
|
6
|
+
/**
|
|
7
|
+
* When true, derive the client key from req.ip (X-Forwarded-For aware). Only
|
|
8
|
+
* safe behind a trusted proxy — otherwise clients can spoof the header to mint
|
|
9
|
+
* unlimited fresh buckets.
|
|
10
|
+
*/
|
|
11
|
+
trustProxy: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function getHttpRateLimitConfig(): HttpRateLimitConfig;
|
|
14
|
+
interface KeyableRequest {
|
|
15
|
+
ip?: string;
|
|
16
|
+
socket?: {
|
|
17
|
+
remoteAddress?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Derive the rate-limit bucket key for a request.
|
|
22
|
+
*
|
|
23
|
+
* Defaults to the raw socket address rather than req.ip: with `trustProxy` on at
|
|
24
|
+
* the Fastify level, req.ip reflects the (spoofable) X-Forwarded-For header, so a
|
|
25
|
+
* client could mint unlimited fresh buckets and bypass the limit entirely. Set
|
|
26
|
+
* `trustProxy` only when a trusted reverse proxy populates the header.
|
|
27
|
+
*/
|
|
28
|
+
export declare function rateLimitKey(req: KeyableRequest, trustProxy: boolean): string;
|
|
29
|
+
/** Localhost is never rate limited (mirrors the auth hook's localhost bypass). */
|
|
30
|
+
export declare function isRateLimitExempt(key: string): boolean;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=http-rate-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-rate-limit.d.ts","sourceRoot":"","sources":["../../src/lib/http-rate-limit.ts"],"names":[],"mappings":"AAkBA,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAO5D;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAK7E;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOtD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-IP HTTP request rate limiting configuration for the Fastify server.
|
|
3
|
+
*
|
|
4
|
+
* Backs `@fastify/rate-limit` to blunt brute-force (e.g. repeated auth attempts)
|
|
5
|
+
* and crude HTTP flooding. Tunable via environment variables:
|
|
6
|
+
*
|
|
7
|
+
* NODETOOL_RATE_LIMIT_DISABLED Set truthy to turn the limiter off.
|
|
8
|
+
* NODETOOL_RATE_LIMIT_MAX Max requests per window per IP (default 1000).
|
|
9
|
+
* NODETOOL_RATE_LIMIT_WINDOW_MS Window length in ms (default 60000).
|
|
10
|
+
* NODETOOL_RATE_LIMIT_TRUST_PROXY Key by X-Forwarded-For (req.ip) instead of
|
|
11
|
+
* the socket address. Only enable behind a
|
|
12
|
+
* trusted proxy that sets the header.
|
|
13
|
+
*
|
|
14
|
+
* Localhost is always exempt so local/Electron usage is never throttled — the
|
|
15
|
+
* same posture the auth hook takes.
|
|
16
|
+
*/
|
|
17
|
+
import { parseIntEnv, parseBoolEnv } from "./env-config.js";
|
|
18
|
+
export function getHttpRateLimitConfig() {
|
|
19
|
+
return {
|
|
20
|
+
enabled: !parseBoolEnv("NODETOOL_RATE_LIMIT_DISABLED"),
|
|
21
|
+
max: parseIntEnv("NODETOOL_RATE_LIMIT_MAX", 1000),
|
|
22
|
+
timeWindow: parseIntEnv("NODETOOL_RATE_LIMIT_WINDOW_MS", 60_000),
|
|
23
|
+
trustProxy: parseBoolEnv("NODETOOL_RATE_LIMIT_TRUST_PROXY")
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Derive the rate-limit bucket key for a request.
|
|
28
|
+
*
|
|
29
|
+
* Defaults to the raw socket address rather than req.ip: with `trustProxy` on at
|
|
30
|
+
* the Fastify level, req.ip reflects the (spoofable) X-Forwarded-For header, so a
|
|
31
|
+
* client could mint unlimited fresh buckets and bypass the limit entirely. Set
|
|
32
|
+
* `trustProxy` only when a trusted reverse proxy populates the header.
|
|
33
|
+
*/
|
|
34
|
+
export function rateLimitKey(req, trustProxy) {
|
|
35
|
+
if (trustProxy) {
|
|
36
|
+
return req.ip ?? req.socket?.remoteAddress ?? "unknown";
|
|
37
|
+
}
|
|
38
|
+
return req.socket?.remoteAddress ?? req.ip ?? "unknown";
|
|
39
|
+
}
|
|
40
|
+
/** Localhost is never rate limited (mirrors the auth hook's localhost bypass). */
|
|
41
|
+
export function isRateLimitExempt(key) {
|
|
42
|
+
return (key === "127.0.0.1" ||
|
|
43
|
+
key === "::1" ||
|
|
44
|
+
key === "::ffff:127.0.0.1" ||
|
|
45
|
+
key === "localhost");
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=http-rate-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-rate-limit.js","sourceRoot":"","sources":["../../src/lib/http-rate-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe5D,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,YAAY,CAAC,8BAA8B,CAAC;QACtD,GAAG,EAAE,WAAW,CAAC,yBAAyB,EAAE,IAAI,CAAC;QACjD,UAAU,EAAE,WAAW,CAAC,+BAA+B,EAAE,MAAM,CAAC;QAChE,UAAU,EAAE,YAAY,CAAC,iCAAiC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,UAAmB;IACnE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,SAAS,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,IAAI,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC;AAC1D,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,CACL,GAAG,KAAK,WAAW;QACnB,GAAG,KAAK,KAAK;QACb,GAAG,KAAK,kBAAkB;QAC1B,GAAG,KAAK,WAAW,CACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which server instance this process is.
|
|
3
|
+
*
|
|
4
|
+
* On Fly every machine gets `FLY_MACHINE_ID`, and it is also the value the
|
|
5
|
+
* proxy's `fly-replay: instance=<id>` header addresses — so the same string
|
|
6
|
+
* both stamps a job row and routes a handshake back to its owner.
|
|
7
|
+
* `NODETOOL_INSTANCE_ID` overrides it for tests and for other multi-instance
|
|
8
|
+
* deployments.
|
|
9
|
+
*
|
|
10
|
+
* Null means single-machine: nothing to route to, and every feature keyed off
|
|
11
|
+
* this is inert — which is also what a malformed value gets. The id is written
|
|
12
|
+
* into a response header verbatim (`fly-replay: instance=<id>`), so anything
|
|
13
|
+
* outside {@link INSTANCE_ID_PATTERN} is rejected here rather than trusted to
|
|
14
|
+
* be caught downstream.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getInstanceId(): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* What an instance id may contain. Fly machine ids are hex, but other
|
|
19
|
+
* deployments name their instances; the bound that matters is that the value
|
|
20
|
+
* cannot carry CRLF into a response header.
|
|
21
|
+
*/
|
|
22
|
+
export declare const INSTANCE_ID_PATTERN: RegExp;
|
|
23
|
+
/** True for a value safe to interpolate into a header. */
|
|
24
|
+
export declare function isValidInstanceId(value: string): boolean;
|
|
25
|
+
//# sourceMappingURL=instance-id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../src/lib/instance-id.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAc7C;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAqB,CAAC;AAEtD,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
2
|
+
const log = createLogger("nodetool.websocket.instance-id");
|
|
3
|
+
const warnedAbout = new Set();
|
|
4
|
+
/**
|
|
5
|
+
* Which server instance this process is.
|
|
6
|
+
*
|
|
7
|
+
* On Fly every machine gets `FLY_MACHINE_ID`, and it is also the value the
|
|
8
|
+
* proxy's `fly-replay: instance=<id>` header addresses — so the same string
|
|
9
|
+
* both stamps a job row and routes a handshake back to its owner.
|
|
10
|
+
* `NODETOOL_INSTANCE_ID` overrides it for tests and for other multi-instance
|
|
11
|
+
* deployments.
|
|
12
|
+
*
|
|
13
|
+
* Null means single-machine: nothing to route to, and every feature keyed off
|
|
14
|
+
* this is inert — which is also what a malformed value gets. The id is written
|
|
15
|
+
* into a response header verbatim (`fly-replay: instance=<id>`), so anything
|
|
16
|
+
* outside {@link INSTANCE_ID_PATTERN} is rejected here rather than trusted to
|
|
17
|
+
* be caught downstream.
|
|
18
|
+
*/
|
|
19
|
+
export function getInstanceId() {
|
|
20
|
+
const configured = process.env["NODETOOL_INSTANCE_ID"] ?? process.env["FLY_MACHINE_ID"];
|
|
21
|
+
const trimmed = configured?.trim();
|
|
22
|
+
if (!trimmed)
|
|
23
|
+
return null;
|
|
24
|
+
if (!isValidInstanceId(trimmed)) {
|
|
25
|
+
// Called per run start and per upgrade, so say it once per bad value.
|
|
26
|
+
if (!warnedAbout.has(trimmed)) {
|
|
27
|
+
warnedAbout.add(trimmed);
|
|
28
|
+
log.warn("Ignoring a malformed instance id", { value: trimmed });
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return trimmed;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* What an instance id may contain. Fly machine ids are hex, but other
|
|
36
|
+
* deployments name their instances; the bound that matters is that the value
|
|
37
|
+
* cannot carry CRLF into a response header.
|
|
38
|
+
*/
|
|
39
|
+
export const INSTANCE_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
40
|
+
/** True for a value safe to interpolate into a header. */
|
|
41
|
+
export function isValidInstanceId(value) {
|
|
42
|
+
return INSTANCE_ID_PATTERN.test(value);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=instance-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-id.js","sourceRoot":"","sources":["../../src/lib/instance-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAE3D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,sEAAsE;QACtE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD,0DAA0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time link codes for the external-identity flow, shared by the two
|
|
3
|
+
* surfaces that mint and consume them.
|
|
4
|
+
*
|
|
5
|
+
* A link always writes the same `external_identities` row, but it can start
|
|
6
|
+
* from either end, and the half the code carries is the half the starter
|
|
7
|
+
* already knows:
|
|
8
|
+
*
|
|
9
|
+
* - **Bot-minted** (`POST /api/integrations/:provider/link/start`, service
|
|
10
|
+
* token): the bridge knows the external account, not the NodeTool user. The
|
|
11
|
+
* code carries `externalId` and is redeemed by a signed-in browser, which
|
|
12
|
+
* supplies the user.
|
|
13
|
+
* - **Web-minted** (`integrations.createLinkCode` over tRPC, user session): the
|
|
14
|
+
* browser knows the user, not the external account. The code carries
|
|
15
|
+
* `userId`, goes into a `t.me/<bot>?start=<code>` deep link, and is redeemed
|
|
16
|
+
* by the bridge's `/link/complete`, which supplies the external id.
|
|
17
|
+
*
|
|
18
|
+
* Both halves are therefore always present at redemption, and neither surface
|
|
19
|
+
* ever accepts the half it did not mint on the caller's word: a browser cannot
|
|
20
|
+
* name an external account, and the bridge cannot name a user.
|
|
21
|
+
*
|
|
22
|
+
* Storage is in-memory on purpose (design §5): a code lives ten minutes, and
|
|
23
|
+
* losing one on restart costs a second `/link`, not data.
|
|
24
|
+
*/
|
|
25
|
+
/** How long a link code stays usable. */
|
|
26
|
+
export declare const LINK_CODE_TTL_MS: number;
|
|
27
|
+
/** A code the bridge minted, waiting for a signed-in user to claim it. */
|
|
28
|
+
export interface BotMintedLinkCode {
|
|
29
|
+
kind: "external";
|
|
30
|
+
provider: string;
|
|
31
|
+
externalId: string;
|
|
32
|
+
expiresAtMs: number;
|
|
33
|
+
}
|
|
34
|
+
/** A code a signed-in user minted, waiting for an external account to claim it. */
|
|
35
|
+
export interface WebMintedLinkCode {
|
|
36
|
+
kind: "user";
|
|
37
|
+
provider: string;
|
|
38
|
+
userId: string;
|
|
39
|
+
expiresAtMs: number;
|
|
40
|
+
}
|
|
41
|
+
export type LinkCode = BotMintedLinkCode | WebMintedLinkCode;
|
|
42
|
+
export interface MintedLinkCode {
|
|
43
|
+
code: string;
|
|
44
|
+
expiresAtMs: number;
|
|
45
|
+
}
|
|
46
|
+
export interface LinkCodeStoreOptions {
|
|
47
|
+
/** Injected clock, so expiry is testable without waiting. */
|
|
48
|
+
now?: () => number;
|
|
49
|
+
ttlMs?: number;
|
|
50
|
+
}
|
|
51
|
+
export declare class LinkCodeStore {
|
|
52
|
+
private readonly codes;
|
|
53
|
+
private readonly now;
|
|
54
|
+
private readonly ttlMs;
|
|
55
|
+
constructor(options?: LinkCodeStoreOptions);
|
|
56
|
+
/** Mint a code bound to an external account, awaiting a NodeTool user. */
|
|
57
|
+
mintForExternalAccount(provider: string, externalId: string): MintedLinkCode;
|
|
58
|
+
/** Mint a code bound to a NodeTool user, awaiting an external account. */
|
|
59
|
+
mintForUser(provider: string, userId: string): MintedLinkCode;
|
|
60
|
+
/**
|
|
61
|
+
* Read a code without spending it, so a confirmation page can name the
|
|
62
|
+
* account it is about to link. An expired code reads as absent.
|
|
63
|
+
*/
|
|
64
|
+
peek(code: string): LinkCode | null;
|
|
65
|
+
/**
|
|
66
|
+
* Spend a code. Single use: it is removed whether or not the caller goes on
|
|
67
|
+
* to accept it, so a guessed code cannot be probed against several accounts.
|
|
68
|
+
*/
|
|
69
|
+
consume(code: string): LinkCode | null;
|
|
70
|
+
/** Codes currently outstanding — for tests and diagnostics. */
|
|
71
|
+
get size(): number;
|
|
72
|
+
private mint;
|
|
73
|
+
private prune;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The process-wide store. Both directions must see one another's codes — a
|
|
77
|
+
* deep link minted in the browser is redeemed by the bridge, and vice versa —
|
|
78
|
+
* so the service routes and the tRPC router share this instance. Tests inject
|
|
79
|
+
* their own.
|
|
80
|
+
*/
|
|
81
|
+
export declare const sharedLinkCodes: LinkCodeStore;
|
|
82
|
+
//# sourceMappingURL=link-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-codes.d.ts","sourceRoot":"","sources":["../../src/lib/link-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,QAAiB,CAAC;AAE/C,0EAA0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,YAAY,OAAO,GAAE,oBAAyB,EAG7C;IAED,0EAA0E;IAC1E,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAO3E;IAED,0EAA0E;IAC1E,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAO5D;IAED;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGlC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAMrC;IAED,+DAA+D;IAC/D,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,KAAK;CAMd;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,eAAsB,CAAC"}
|