@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
|
@@ -8,62 +8,93 @@
|
|
|
8
8
|
* delete is preserved; home-folder default for `list` with no filters is
|
|
9
9
|
* preserved; recursive folder listing is preserved.
|
|
10
10
|
*/
|
|
11
|
-
import { mkdir, writeFile } from "node:fs/promises";
|
|
12
|
-
import nodePath from "node:path";
|
|
13
11
|
import { Buffer } from "node:buffer";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
12
|
+
import { stat } from "node:fs/promises";
|
|
13
|
+
import { basename, isAbsolute } from "node:path";
|
|
14
|
+
import { Asset, Project } from "@nodetool-ai/models";
|
|
15
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
16
|
+
const log = createLogger("nodetool.assets");
|
|
17
|
+
import { assetKeyCandidates, FileStorageAdapter, getMaxLocalUploadBytes, getMaxUploadBytes } from "@nodetool-ai/storage";
|
|
18
|
+
import { getAssetFileName, getAssetStorageKey, normalizeAssetContentType, assetFileNameCandidates } from "../../lib/asset-paths.js";
|
|
19
|
+
import { getAssetAdapter } from "../../lib/storage.js";
|
|
20
|
+
import { toAssetResponse } from "../../lib/asset-response.js";
|
|
21
|
+
import { probeAssetDurationSeconds } from "../../lib/asset-duration.js";
|
|
22
|
+
import { externalAssetsAvailable, getExternalAssetThresholdBytes } from "../../lib/external-assets.js";
|
|
23
|
+
import { EXTERNAL_FINGERPRINT_KEYS } from "../../lib/external-asset-lookup.js";
|
|
24
|
+
import { localPathDenialMessage, resolveLocalPath } from "../../lib/local-file-access.js";
|
|
25
|
+
import { generateThumbnailForStoredAsset, storeAssetWithThumbnail, thumbnailKey } from "../../lib/thumbnail.js";
|
|
26
|
+
import { discardVideoProxy, scheduleVideoProxy, videoProxiesAvailable, videoProxyFileNames, videoProxyQueue, videoProxyState } from "../../lib/video-proxy.js";
|
|
17
27
|
import { ApiErrorCode } from "../../error-codes.js";
|
|
18
28
|
import { router } from "../index.js";
|
|
19
29
|
import { protectedProcedure } from "../middleware.js";
|
|
20
30
|
import { throwApiError } from "../error-formatter.js";
|
|
21
|
-
import { listInput, listOutput, getInput, assetResponse,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
31
|
+
import { listInput, listOutput, getInput, assetResponse, updateInput, createUploadInput, createUploadOutput, createExternalInput, createExternalOutput, relinkExternalInput, relinkExternalOutput, externalImportConfigOutput, ensureProxyInput, ensureProxyOutput, finalizeUploadInput, finalizeUploadOutput, deleteInput, deleteOutput, recursiveInput, recursiveOutput, searchInput, searchOutput } from "@nodetool-ai/protocol/api-schemas/assets.js";
|
|
32
|
+
/**
|
|
33
|
+
* Remove an asset's stored bytes, its thumbnail, and its preview proxy.
|
|
34
|
+
*
|
|
35
|
+
* Best-effort per object: the row is the source of truth, so a storage
|
|
36
|
+
* failure is logged rather than thrown — one unreachable object must not
|
|
37
|
+
* abort a recursive folder delete and strand everything after it. Both key
|
|
38
|
+
* shapes are tried, since objects written before the owner-prefixed layout
|
|
39
|
+
* are still flat.
|
|
40
|
+
*/
|
|
41
|
+
async function deleteAssetObjects(asset) {
|
|
42
|
+
if (asset.content_type === "folder")
|
|
43
|
+
return;
|
|
44
|
+
const adapter = getAssetAdapter();
|
|
45
|
+
// A proxy still encoding would land after the delete.
|
|
46
|
+
videoProxyQueue.cancel(asset.id);
|
|
47
|
+
// An external asset's bytes are the user's own file, outside the storage
|
|
48
|
+
// root. Only its thumbnail and proxy are ours to remove.
|
|
49
|
+
const derived = [thumbnailKey(asset.id), ...videoProxyFileNames(asset.id)];
|
|
50
|
+
const fileNames = asset.external_path
|
|
51
|
+
? derived
|
|
52
|
+
: [...assetFileNameCandidates(asset.id, asset.content_type), ...derived];
|
|
53
|
+
for (const fileName of fileNames) {
|
|
54
|
+
for (const key of assetKeyCandidates(asset.user_id, fileName)) {
|
|
55
|
+
try {
|
|
56
|
+
const uri = adapter.uriForKey(key);
|
|
57
|
+
if (await adapter.exists(uri)) {
|
|
58
|
+
await adapter.delete(uri);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
log.warn("asset object delete failed", {
|
|
63
|
+
assetId: asset.id,
|
|
64
|
+
key,
|
|
65
|
+
error: String(err)
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Delete an asset row together with the bytes it points at. */
|
|
72
|
+
async function deleteAssetWithObjects(asset) {
|
|
73
|
+
await deleteAssetObjects(asset);
|
|
74
|
+
await asset.delete();
|
|
52
75
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Recursively delete a folder and collect all deleted asset ids.
|
|
78
|
+
*
|
|
79
|
+
* `visited` breaks parent cycles. better-sqlite3 is synchronous, so a cycle
|
|
80
|
+
* here is an unbroken microtask chain that starves the event loop and wedges
|
|
81
|
+
* the process rather than merely overflowing the stack.
|
|
82
|
+
*/
|
|
83
|
+
async function deleteFolderRecursive(userId, folderId, visited = new Set()) {
|
|
84
|
+
if (visited.has(folderId))
|
|
85
|
+
return [];
|
|
86
|
+
visited.add(folderId);
|
|
56
87
|
const children = await Asset.getChildren(userId, folderId, 10000);
|
|
57
|
-
|
|
88
|
+
const deletedIdsArrays = await Promise.all(children.map(async (child) => {
|
|
58
89
|
if (child.content_type === "folder") {
|
|
59
|
-
|
|
60
|
-
deletedIds.push(...subDeleted);
|
|
90
|
+
return deleteFolderRecursive(userId, child.id, visited);
|
|
61
91
|
}
|
|
62
92
|
else {
|
|
63
|
-
await child
|
|
64
|
-
|
|
93
|
+
await deleteAssetWithObjects(child);
|
|
94
|
+
return [child.id];
|
|
65
95
|
}
|
|
66
|
-
}
|
|
96
|
+
}));
|
|
97
|
+
const deletedIds = deletedIdsArrays.flat();
|
|
67
98
|
const folder = await Asset.find(userId, folderId);
|
|
68
99
|
if (folder) {
|
|
69
100
|
await folder.delete();
|
|
@@ -72,18 +103,98 @@ async function deleteFolderRecursive(userId, folderId) {
|
|
|
72
103
|
return deletedIds;
|
|
73
104
|
}
|
|
74
105
|
/** Flat list of every asset under a folder (including nested sub-folders). */
|
|
75
|
-
async function getAllAssetsRecursive(userId, folderId) {
|
|
106
|
+
async function getAllAssetsRecursive(userId, folderId, projectId, visited = new Set()) {
|
|
107
|
+
if (visited.has(folderId))
|
|
108
|
+
return [];
|
|
109
|
+
visited.add(folderId);
|
|
110
|
+
if (projectId !== undefined && folderId !== userId) {
|
|
111
|
+
const folder = await Asset.find(userId, folderId);
|
|
112
|
+
if (!folder || folder.project_id !== projectId)
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
76
115
|
const collected = [];
|
|
77
|
-
const children = await Asset.getChildren(userId, folderId, 10000);
|
|
116
|
+
const children = await Asset.getChildren(userId, folderId, 10000, projectId);
|
|
78
117
|
for (const child of children) {
|
|
79
118
|
collected.push(child);
|
|
80
119
|
if (child.content_type === "folder") {
|
|
81
|
-
const subAssets = await getAllAssetsRecursive(userId, child.id);
|
|
120
|
+
const subAssets = await getAllAssetsRecursive(userId, child.id, projectId, visited);
|
|
82
121
|
collected.push(...subAssets);
|
|
83
122
|
}
|
|
84
123
|
}
|
|
85
124
|
return collected;
|
|
86
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Refuse a parent that would break the asset tree.
|
|
128
|
+
*
|
|
129
|
+
* The rule itself lives on the model, shared with the sandbox's
|
|
130
|
+
* `update_asset` capability, so the two surfaces cannot disagree about what a
|
|
131
|
+
* legal move is. This wrapper only turns the answer into an HTTP error.
|
|
132
|
+
*/
|
|
133
|
+
async function assertValidParent(userId, asset, parentId) {
|
|
134
|
+
const problem = await Asset.validateParent(userId, asset, parentId);
|
|
135
|
+
if (problem) {
|
|
136
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, problem);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Refuse a write to a shipped system entity — a seeded style preset.
|
|
141
|
+
*
|
|
142
|
+
* The rule is `Asset.systemEntityRefusal`, shared with the sandbox's entity
|
|
143
|
+
* capability so both write surfaces answer the same way; this wrapper only
|
|
144
|
+
* turns it into an HTTP error.
|
|
145
|
+
*/
|
|
146
|
+
function assertWritable(asset) {
|
|
147
|
+
const problem = Asset.systemEntityRefusal(asset);
|
|
148
|
+
if (problem) {
|
|
149
|
+
throwApiError(ApiErrorCode.FORBIDDEN, problem);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const EXTERNAL_ASSETS_UNAVAILABLE = "External asset references need the local file store and are disabled in production";
|
|
153
|
+
/**
|
|
154
|
+
* Validate a path offered for an in-place reference (R5): absolute, inside
|
|
155
|
+
* the local file roots, and a regular file. Returns the resolved path and its
|
|
156
|
+
* stat. Used by `createExternal` and `relinkExternal`, the only two ways a
|
|
157
|
+
* path reaches a row.
|
|
158
|
+
*/
|
|
159
|
+
async function resolveExternalFile(path) {
|
|
160
|
+
if (!externalAssetsAvailable()) {
|
|
161
|
+
throwApiError(ApiErrorCode.FORBIDDEN, EXTERNAL_ASSETS_UNAVAILABLE);
|
|
162
|
+
}
|
|
163
|
+
if (!isAbsolute(path)) {
|
|
164
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Path must be absolute");
|
|
165
|
+
}
|
|
166
|
+
const resolved = await resolveLocalPath(path);
|
|
167
|
+
if (!resolved.ok) {
|
|
168
|
+
throwApiError(ApiErrorCode.FORBIDDEN, localPathDenialMessage(resolved.reason));
|
|
169
|
+
}
|
|
170
|
+
const fileStat = await stat(resolved.path).catch(() => null);
|
|
171
|
+
if (!fileStat) {
|
|
172
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "File not found");
|
|
173
|
+
}
|
|
174
|
+
if (!fileStat.isFile()) {
|
|
175
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Path is not a file");
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
path: resolved.path,
|
|
179
|
+
size: fileStat.size,
|
|
180
|
+
mtimeMs: fileStat.mtimeMs
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* `next` with the external file fingerprint (`external_size`,
|
|
185
|
+
* `external_mtime`) taken from `current`. Offline detection compares the file
|
|
186
|
+
* against these, so only import and relink may write them.
|
|
187
|
+
*/
|
|
188
|
+
function withExternalFingerprint(next, current) {
|
|
189
|
+
const owned = new Set(EXTERNAL_FINGERPRINT_KEYS);
|
|
190
|
+
const merged = Object.fromEntries(Object.entries(next).filter(([key]) => !owned.has(key)));
|
|
191
|
+
for (const key of EXTERNAL_FINGERPRINT_KEYS) {
|
|
192
|
+
if (current && key in current) {
|
|
193
|
+
merged[key] = current[key];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return merged;
|
|
197
|
+
}
|
|
87
198
|
export const assetsRouter = router({
|
|
88
199
|
list: protectedProcedure
|
|
89
200
|
.input(listInput)
|
|
@@ -94,19 +205,26 @@ export const assetsRouter = router({
|
|
|
94
205
|
!input.content_type &&
|
|
95
206
|
!input.workflow_id &&
|
|
96
207
|
!input.node_id &&
|
|
97
|
-
!input.job_id
|
|
208
|
+
!input.job_id &&
|
|
209
|
+
!input.timeline_id &&
|
|
210
|
+
input.project_id === undefined
|
|
98
211
|
? ctx.userId
|
|
99
212
|
: input.parent_id;
|
|
100
|
-
const
|
|
213
|
+
const paginateOptions = {
|
|
101
214
|
parentId: effectiveParentId,
|
|
102
215
|
contentType: input.content_type,
|
|
103
216
|
workflowId: input.workflow_id,
|
|
104
217
|
nodeId: input.node_id,
|
|
105
218
|
jobId: input.job_id,
|
|
219
|
+
timelineId: input.timeline_id,
|
|
106
220
|
limit: input.page_size
|
|
107
|
-
}
|
|
221
|
+
};
|
|
222
|
+
if (input.project_id !== undefined) {
|
|
223
|
+
paginateOptions.projectId = input.project_id;
|
|
224
|
+
}
|
|
225
|
+
const [assets, cursor] = await Asset.paginate(ctx.userId, paginateOptions);
|
|
108
226
|
return {
|
|
109
|
-
assets: assets.map((a) => toAssetResponse(a)),
|
|
227
|
+
assets: await Promise.all(assets.map((a) => toAssetResponse(a))),
|
|
110
228
|
next: cursor || null
|
|
111
229
|
};
|
|
112
230
|
}),
|
|
@@ -125,37 +243,287 @@ export const assetsRouter = router({
|
|
|
125
243
|
content_type: "folder",
|
|
126
244
|
size: null,
|
|
127
245
|
metadata: null,
|
|
246
|
+
sketch_document_id: null,
|
|
128
247
|
created_at: "",
|
|
129
248
|
get_url: null,
|
|
130
249
|
thumb_url: null,
|
|
131
250
|
duration: null,
|
|
132
251
|
node_id: null,
|
|
133
|
-
job_id: null
|
|
252
|
+
job_id: null,
|
|
253
|
+
timeline_id: null
|
|
134
254
|
};
|
|
135
255
|
}
|
|
136
256
|
const asset = await Asset.find(ctx.userId, input.id);
|
|
137
257
|
if (!asset) {
|
|
138
258
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
139
259
|
}
|
|
260
|
+
if (input.project_id !== undefined &&
|
|
261
|
+
asset.project_id !== input.project_id) {
|
|
262
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
263
|
+
}
|
|
140
264
|
return toAssetResponse(asset);
|
|
141
265
|
}),
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
266
|
+
/**
|
|
267
|
+
* Step 1 of a client-direct upload: create the row, pick the key, and mint
|
|
268
|
+
* a short-lived target scoped to that key. The client never chooses where
|
|
269
|
+
* it writes, so a stolen or replayed target can only overwrite the one
|
|
270
|
+
* pending object it was issued for — inside its own owner's prefix.
|
|
271
|
+
*
|
|
272
|
+
* `upload` comes back null on backends with no direct-upload concept (the
|
|
273
|
+
* local file store); the client then falls back to `POST /api/assets`.
|
|
274
|
+
*/
|
|
275
|
+
createUpload: protectedProcedure
|
|
276
|
+
.input(createUploadInput)
|
|
277
|
+
.output(createUploadOutput)
|
|
145
278
|
.mutation(async ({ ctx, input }) => {
|
|
279
|
+
if (input.project_id && input.project_id !== "default") {
|
|
280
|
+
if (!(await Project.findOwned(ctx.userId, input.project_id))) {
|
|
281
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Project not found");
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const adapter = getAssetAdapter();
|
|
285
|
+
const max = adapter instanceof FileStorageAdapter
|
|
286
|
+
? getMaxLocalUploadBytes()
|
|
287
|
+
: getMaxUploadBytes();
|
|
288
|
+
if (input.size > max) {
|
|
289
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `Upload exceeds maximum size: ${input.size} > ${max} bytes`);
|
|
290
|
+
}
|
|
291
|
+
// Local file store has no signed upload URL. The client falls back to
|
|
292
|
+
// POST /api/assets. Do not create a pending row that would stay empty.
|
|
293
|
+
if (!adapter.createUploadUrl) {
|
|
294
|
+
return { asset_id: "", key: "", upload: null };
|
|
295
|
+
}
|
|
296
|
+
const contentType = normalizeAssetContentType(input.content_type, input.name);
|
|
146
297
|
const asset = (await Asset.create({
|
|
147
298
|
user_id: ctx.userId,
|
|
148
299
|
name: input.name,
|
|
149
|
-
content_type:
|
|
150
|
-
parent_id: input.parent_id,
|
|
300
|
+
content_type: contentType,
|
|
301
|
+
parent_id: input.parent_id || ctx.userId,
|
|
151
302
|
workflow_id: input.workflow_id ?? null,
|
|
152
303
|
node_id: input.node_id ?? null,
|
|
153
304
|
job_id: input.job_id ?? null,
|
|
305
|
+
timeline_id: input.timeline_id ?? null,
|
|
154
306
|
metadata: input.metadata ?? null,
|
|
155
|
-
|
|
307
|
+
project_id: input.project_id ?? "default",
|
|
308
|
+
// Recorded on finalize from what actually landed, not from the claim.
|
|
309
|
+
size: null
|
|
156
310
|
}));
|
|
311
|
+
const key = getAssetStorageKey(ctx.userId, asset.id, asset.content_type);
|
|
312
|
+
const target = await adapter.createUploadUrl(key, {
|
|
313
|
+
contentType
|
|
314
|
+
});
|
|
315
|
+
return {
|
|
316
|
+
asset_id: asset.id,
|
|
317
|
+
key,
|
|
318
|
+
upload: target
|
|
319
|
+
? {
|
|
320
|
+
url: target.url,
|
|
321
|
+
method: target.method,
|
|
322
|
+
headers: target.headers,
|
|
323
|
+
expires_at: target.expiresAt
|
|
324
|
+
}
|
|
325
|
+
: null
|
|
326
|
+
};
|
|
327
|
+
}),
|
|
328
|
+
/**
|
|
329
|
+
* Step 2: confirm what actually landed. The signed target bounds *where* a
|
|
330
|
+
* client can write but not *what* — so the size is read back off the object
|
|
331
|
+
* rather than trusted from the client, and an over-cap or absent upload is
|
|
332
|
+
* rejected and the pending row removed.
|
|
333
|
+
*/
|
|
334
|
+
finalizeUpload: protectedProcedure
|
|
335
|
+
.input(finalizeUploadInput)
|
|
336
|
+
.output(finalizeUploadOutput)
|
|
337
|
+
.mutation(async ({ ctx, input }) => {
|
|
338
|
+
const asset = await Asset.find(ctx.userId, input.asset_id);
|
|
339
|
+
if (!asset) {
|
|
340
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
341
|
+
}
|
|
342
|
+
const adapter = getAssetAdapter();
|
|
343
|
+
const key = getAssetStorageKey(asset.user_id, asset.id, asset.content_type);
|
|
344
|
+
const stat = await adapter.stat(adapter.uriForKey(key));
|
|
345
|
+
if (!stat || stat.size === 0) {
|
|
346
|
+
await asset.delete();
|
|
347
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "No uploaded object found");
|
|
348
|
+
}
|
|
349
|
+
const max = getMaxUploadBytes();
|
|
350
|
+
if (stat.size > max) {
|
|
351
|
+
await adapter.delete(adapter.uriForKey(key));
|
|
352
|
+
await asset.delete();
|
|
353
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `Upload exceeds maximum size: ${stat.size} > ${max} bytes`);
|
|
354
|
+
}
|
|
355
|
+
asset.size = stat.size;
|
|
356
|
+
await asset.save();
|
|
357
|
+
// The bytes are already in the bucket, so a thumbnail costs one download
|
|
358
|
+
// back into this process. The generator skips objects above
|
|
359
|
+
// THUMBNAIL_SOURCE_MAX_BYTES, so a multi-gigabyte video goes without.
|
|
360
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
157
361
|
return toAssetResponse(asset);
|
|
158
362
|
}),
|
|
363
|
+
/**
|
|
364
|
+
* Whether the desktop app should reference large files in place, and from
|
|
365
|
+
* what size. Plain browsers have no disk path and always upload.
|
|
366
|
+
*/
|
|
367
|
+
externalImportConfig: protectedProcedure
|
|
368
|
+
.output(externalImportConfigOutput)
|
|
369
|
+
.query(async () => ({
|
|
370
|
+
enabled: externalAssetsAvailable(),
|
|
371
|
+
threshold_bytes: await getExternalAssetThresholdBytes()
|
|
372
|
+
})),
|
|
373
|
+
/**
|
|
374
|
+
* Create an asset that references a local file in place. No bytes are
|
|
375
|
+
* copied: reads resolve the key to `external_path` (see
|
|
376
|
+
* `lib/external-asset-lookup.ts`), and deleting the asset leaves the file.
|
|
377
|
+
* The path is validated once, here, against the local file roots.
|
|
378
|
+
*/
|
|
379
|
+
createExternal: protectedProcedure
|
|
380
|
+
.input(createExternalInput)
|
|
381
|
+
.output(createExternalOutput)
|
|
382
|
+
.mutation(async ({ ctx, input }) => {
|
|
383
|
+
const file = await resolveExternalFile(input.path);
|
|
384
|
+
const projectId = input.project_id ?? "default";
|
|
385
|
+
if (projectId !== "default") {
|
|
386
|
+
if (!(await Project.findOwned(ctx.userId, projectId))) {
|
|
387
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Project not found");
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// A second import of the same, unchanged file into the same project
|
|
391
|
+
// returns the row the first one made (R4). A row whose file changed
|
|
392
|
+
// since is offline, so it is not reused.
|
|
393
|
+
for (const existing of await Asset.findByExternalPath(ctx.userId, file.path)) {
|
|
394
|
+
const meta = existing.metadata ?? {};
|
|
395
|
+
if (existing.project_id === projectId &&
|
|
396
|
+
meta["external_size"] === file.size &&
|
|
397
|
+
meta["external_mtime"] === file.mtimeMs) {
|
|
398
|
+
log.info("external asset reused", { assetId: existing.id });
|
|
399
|
+
return toAssetResponse(existing);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
const name = input.name ?? basename(file.path);
|
|
403
|
+
const contentType = normalizeAssetContentType(input.content_type ?? "", name);
|
|
404
|
+
const duration = await probeAssetDurationSeconds(contentType, {
|
|
405
|
+
path: file.path
|
|
406
|
+
});
|
|
407
|
+
const asset = await Asset.create({
|
|
408
|
+
user_id: ctx.userId,
|
|
409
|
+
name,
|
|
410
|
+
content_type: contentType,
|
|
411
|
+
parent_id: input.parent_id || ctx.userId,
|
|
412
|
+
workflow_id: input.workflow_id ?? null,
|
|
413
|
+
project_id: projectId,
|
|
414
|
+
size: file.size,
|
|
415
|
+
duration,
|
|
416
|
+
external_path: file.path,
|
|
417
|
+
// Recorded to detect a file changed or replaced after import.
|
|
418
|
+
metadata: {
|
|
419
|
+
external_size: file.size,
|
|
420
|
+
external_mtime: file.mtimeMs
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
log.info("external asset created", {
|
|
424
|
+
assetId: asset.id,
|
|
425
|
+
contentType,
|
|
426
|
+
bytes: file.size
|
|
427
|
+
});
|
|
428
|
+
// The adapter resolves the new row to its in-place file, so ffmpeg or
|
|
429
|
+
// sharp reads it by path and a file of any size gets a thumbnail.
|
|
430
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
431
|
+
scheduleVideoProxy(asset);
|
|
432
|
+
return toAssetResponse(asset);
|
|
433
|
+
}),
|
|
434
|
+
/**
|
|
435
|
+
* Point an in-place asset at another file: a moved, renamed, or remounted
|
|
436
|
+
* original, or the same path after the file changed. The id and `get_url`
|
|
437
|
+
* stay the same (D5). The path is validated again (R5), and the new size,
|
|
438
|
+
* mtime, and duration are recorded before the thumbnail is regenerated.
|
|
439
|
+
*/
|
|
440
|
+
relinkExternal: protectedProcedure
|
|
441
|
+
.input(relinkExternalInput)
|
|
442
|
+
.output(relinkExternalOutput)
|
|
443
|
+
.mutation(async ({ ctx, input }) => {
|
|
444
|
+
const asset = await Asset.find(ctx.userId, input.id);
|
|
445
|
+
if (!asset) {
|
|
446
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
447
|
+
}
|
|
448
|
+
assertWritable(asset);
|
|
449
|
+
if (!asset.external_path) {
|
|
450
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Only an asset that references a file in place can be relinked");
|
|
451
|
+
}
|
|
452
|
+
const file = await resolveExternalFile(input.path);
|
|
453
|
+
// The URL's extension comes from the content type, so it stays. A file
|
|
454
|
+
// of another media kind (audio for a video clip) is refused. A name
|
|
455
|
+
// with no known type is accepted.
|
|
456
|
+
const kind = (type) => type.split("/")[0];
|
|
457
|
+
const offered = normalizeAssetContentType("", basename(file.path));
|
|
458
|
+
if (offered !== "application/octet-stream" &&
|
|
459
|
+
kind(offered) !== kind(asset.content_type)) {
|
|
460
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `The new file is ${offered}, but this asset is ${asset.content_type}`);
|
|
461
|
+
}
|
|
462
|
+
asset.external_path = file.path;
|
|
463
|
+
asset.size = file.size;
|
|
464
|
+
asset.duration = await probeAssetDurationSeconds(asset.content_type, {
|
|
465
|
+
path: file.path
|
|
466
|
+
});
|
|
467
|
+
asset.metadata = {
|
|
468
|
+
...asset.metadata,
|
|
469
|
+
external_size: file.size,
|
|
470
|
+
external_mtime: file.mtimeMs
|
|
471
|
+
};
|
|
472
|
+
await asset.save();
|
|
473
|
+
log.info("external asset relinked", {
|
|
474
|
+
assetId: asset.id,
|
|
475
|
+
bytes: file.size
|
|
476
|
+
});
|
|
477
|
+
// Drop the previous file's thumbnail first, so a new file that yields
|
|
478
|
+
// none does not keep showing the old one.
|
|
479
|
+
const adapter = getAssetAdapter();
|
|
480
|
+
for (const key of assetKeyCandidates(asset.user_id, thumbnailKey(asset.id))) {
|
|
481
|
+
const uri = adapter.uriForKey(key);
|
|
482
|
+
if (await adapter.exists(uri)) {
|
|
483
|
+
await adapter.delete(uri);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
487
|
+
// The previous file's proxy no longer matches; make one for this file.
|
|
488
|
+
await discardVideoProxy(asset);
|
|
489
|
+
scheduleVideoProxy(asset);
|
|
490
|
+
return toAssetResponse(asset);
|
|
491
|
+
}),
|
|
492
|
+
/**
|
|
493
|
+
* Queue an all-intra preview proxy for a video asset, at any size, and
|
|
494
|
+
* answer its state. The timeline preview plays the proxy once the asset
|
|
495
|
+
* response says it is ready. A failed proxy is tried again. Refused off
|
|
496
|
+
* the local file store.
|
|
497
|
+
*/
|
|
498
|
+
ensureProxy: protectedProcedure
|
|
499
|
+
.input(ensureProxyInput)
|
|
500
|
+
.output(ensureProxyOutput)
|
|
501
|
+
.mutation(async ({ ctx, input }) => {
|
|
502
|
+
const asset = await Asset.find(ctx.userId, input.id);
|
|
503
|
+
if (!asset) {
|
|
504
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
505
|
+
}
|
|
506
|
+
if (!asset.content_type.startsWith("video/")) {
|
|
507
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Asset is not a video");
|
|
508
|
+
}
|
|
509
|
+
if (!videoProxiesAvailable()) {
|
|
510
|
+
throwApiError(ApiErrorCode.FORBIDDEN, "Video proxies need the local file store and are disabled in production");
|
|
511
|
+
}
|
|
512
|
+
const before = await videoProxyState(asset);
|
|
513
|
+
if (before?.status !== "ready") {
|
|
514
|
+
videoProxyQueue.clearFailure(asset.id);
|
|
515
|
+
videoProxyQueue.enqueue({
|
|
516
|
+
assetId: asset.id,
|
|
517
|
+
userId: asset.user_id,
|
|
518
|
+
force: true
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
const response = await toAssetResponse(asset);
|
|
522
|
+
return {
|
|
523
|
+
status: response.proxy_status ?? "none",
|
|
524
|
+
proxy_url: response.proxy_url ?? null
|
|
525
|
+
};
|
|
526
|
+
}),
|
|
159
527
|
update: protectedProcedure
|
|
160
528
|
.input(updateInput)
|
|
161
529
|
.output(assetResponse)
|
|
@@ -164,29 +532,69 @@ export const assetsRouter = router({
|
|
|
164
532
|
if (!asset) {
|
|
165
533
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
166
534
|
}
|
|
535
|
+
assertWritable(asset);
|
|
536
|
+
const isExternal = Boolean(asset.external_path);
|
|
537
|
+
if (isExternal && input.data != null) {
|
|
538
|
+
// New bytes would land under the storage root and shadow the
|
|
539
|
+
// referenced file, which the user still sees on disk.
|
|
540
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "This asset references a file in place. Relink it to another file instead of replacing its data");
|
|
541
|
+
}
|
|
167
542
|
if (input.name !== undefined)
|
|
168
543
|
asset.name = input.name;
|
|
169
544
|
if (input.content_type !== undefined) {
|
|
545
|
+
// The stored file name (and get_url) is derived from content_type. If
|
|
546
|
+
// the new content_type maps to a different file extension and no new
|
|
547
|
+
// bytes accompany the change, get_url would point at a file that was
|
|
548
|
+
// never written while the real bytes are orphaned under the old name.
|
|
549
|
+
// Reject rather than silently break the asset link.
|
|
550
|
+
const changesExtension = getAssetFileName(asset.id, input.content_type) !==
|
|
551
|
+
getAssetFileName(asset.id, asset.content_type);
|
|
552
|
+
if (changesExtension && input.data == null) {
|
|
553
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Changing content_type to a different file type requires re-uploading the asset data");
|
|
554
|
+
}
|
|
170
555
|
asset.content_type = input.content_type;
|
|
171
556
|
}
|
|
172
|
-
if (input.parent_id !== undefined)
|
|
557
|
+
if (input.parent_id !== undefined) {
|
|
558
|
+
await assertValidParent(ctx.userId, asset, input.parent_id);
|
|
173
559
|
asset.parent_id = input.parent_id;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
560
|
+
}
|
|
561
|
+
if (input.metadata !== undefined) {
|
|
562
|
+
asset.metadata = isExternal
|
|
563
|
+
? withExternalFingerprint(input.metadata, asset.metadata)
|
|
564
|
+
: input.metadata;
|
|
565
|
+
}
|
|
566
|
+
if (input.sketch_document_id !== undefined) {
|
|
567
|
+
asset.sketch_document_id = input.sketch_document_id;
|
|
568
|
+
}
|
|
569
|
+
if (input.timeline_id !== undefined) {
|
|
570
|
+
asset.timeline_id = input.timeline_id;
|
|
571
|
+
}
|
|
572
|
+
// An external asset's size is its file's, recorded by import or relink.
|
|
573
|
+
if (input.size !== undefined && !isExternal)
|
|
177
574
|
asset.size = input.size;
|
|
575
|
+
if (input.expected_metadata !== undefined && input.data != null) {
|
|
576
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Conditional metadata updates cannot replace asset data");
|
|
577
|
+
}
|
|
178
578
|
if (input.data != null) {
|
|
179
579
|
const buf = input.data_encoding === "base64"
|
|
180
580
|
? Buffer.from(input.data, "base64")
|
|
181
581
|
: Buffer.from(input.data, "utf-8");
|
|
182
582
|
asset.size = buf.byteLength;
|
|
183
|
-
const storagePath = getAssetStoragePath(ctx.apiOptions.storage);
|
|
184
583
|
const fileName = getAssetFileName(asset.id, asset.content_type);
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
584
|
+
log.info("asset upload (update)", {
|
|
585
|
+
assetId: asset.id,
|
|
586
|
+
fileName,
|
|
587
|
+
contentType: asset.content_type,
|
|
588
|
+
bytes: buf.byteLength
|
|
589
|
+
});
|
|
590
|
+
await storeAssetWithThumbnail(asset.user_id, asset.id, fileName, new Uint8Array(buf), asset.content_type);
|
|
591
|
+
}
|
|
592
|
+
const saved = input.expected_metadata !== undefined
|
|
593
|
+
? await asset.saveIfMetadataMatches(input.expected_metadata)
|
|
594
|
+
: await asset.save();
|
|
595
|
+
if (saved === false) {
|
|
596
|
+
throwApiError(ApiErrorCode.ALREADY_EXISTS, "Asset metadata changed. Reload it and try again.");
|
|
188
597
|
}
|
|
189
|
-
await asset.save();
|
|
190
598
|
return toAssetResponse(asset);
|
|
191
599
|
}),
|
|
192
600
|
delete: protectedProcedure
|
|
@@ -197,67 +605,53 @@ export const assetsRouter = router({
|
|
|
197
605
|
if (!asset) {
|
|
198
606
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
199
607
|
}
|
|
608
|
+
assertWritable(asset);
|
|
200
609
|
let deletedAssetIds;
|
|
201
610
|
if (asset.content_type === "folder") {
|
|
202
611
|
deletedAssetIds = await deleteFolderRecursive(ctx.userId, input.id);
|
|
203
612
|
}
|
|
204
613
|
else {
|
|
205
|
-
await asset
|
|
614
|
+
await deleteAssetWithObjects(asset);
|
|
206
615
|
deletedAssetIds = [input.id];
|
|
207
616
|
}
|
|
208
617
|
return { deleted_asset_ids: deletedAssetIds };
|
|
209
618
|
}),
|
|
210
|
-
children: protectedProcedure
|
|
211
|
-
.input(childrenInput)
|
|
212
|
-
.output(childrenOutput)
|
|
213
|
-
.query(async ({ ctx, input }) => {
|
|
214
|
-
const [assets] = await Asset.paginate(ctx.userId, {
|
|
215
|
-
parentId: input.id,
|
|
216
|
-
limit: input.limit
|
|
217
|
-
});
|
|
218
|
-
return {
|
|
219
|
-
assets: assets.map((a) => ({
|
|
220
|
-
id: a.id,
|
|
221
|
-
name: a.name,
|
|
222
|
-
content_type: a.content_type
|
|
223
|
-
})),
|
|
224
|
-
// Legacy returned `null` here; pagination isn't wired through for children.
|
|
225
|
-
next: null
|
|
226
|
-
};
|
|
227
|
-
}),
|
|
228
619
|
recursive: protectedProcedure
|
|
229
620
|
.input(recursiveInput)
|
|
230
621
|
.output(recursiveOutput)
|
|
231
622
|
.query(async ({ ctx, input }) => {
|
|
232
|
-
const assets = await getAllAssetsRecursive(ctx.userId, input.id);
|
|
233
|
-
return {
|
|
623
|
+
const assets = await getAllAssetsRecursive(ctx.userId, input.id, input.project_id);
|
|
624
|
+
return {
|
|
625
|
+
assets: await Promise.all(assets.map((a) => toAssetResponse(a)))
|
|
626
|
+
};
|
|
234
627
|
}),
|
|
235
628
|
search: protectedProcedure
|
|
236
629
|
.input(searchInput)
|
|
237
630
|
.output(searchOutput)
|
|
238
631
|
.query(async ({ ctx, input }) => {
|
|
239
|
-
|
|
632
|
+
// Filter by name at the DB level across ALL of the user's assets. The
|
|
633
|
+
// previous implementation paginated the first `page_size` assets and then
|
|
634
|
+
// filtered those in memory, so anything past the first page (e.g. a "Cat"
|
|
635
|
+
// asset in a 500-item library) was never found.
|
|
636
|
+
const searchOptions = {
|
|
240
637
|
limit: input.page_size
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
638
|
+
};
|
|
639
|
+
if (input.content_type) {
|
|
640
|
+
searchOptions.contentType = input.content_type;
|
|
641
|
+
}
|
|
642
|
+
if (input.project_id !== undefined) {
|
|
643
|
+
searchOptions.projectId = input.project_id;
|
|
644
|
+
}
|
|
645
|
+
if (input.cursor) {
|
|
646
|
+
searchOptions.cursor = input.cursor;
|
|
647
|
+
}
|
|
648
|
+
const [matched, nextCursor] = await Asset.searchAssetsGlobal(ctx.userId, input.query, searchOptions);
|
|
244
649
|
return {
|
|
245
|
-
assets: matched.map((a) => toAssetResponse(a)),
|
|
650
|
+
assets: await Promise.all(matched.map((a) => toAssetResponse(a))),
|
|
246
651
|
next_cursor: nextCursor || null,
|
|
247
652
|
total_count: matched.length,
|
|
248
653
|
is_global_search: input.workflow_id === undefined
|
|
249
654
|
};
|
|
250
|
-
}),
|
|
251
|
-
byFilename: protectedProcedure
|
|
252
|
-
.input(byFilenameInput)
|
|
253
|
-
.output(assetResponse)
|
|
254
|
-
.query(async ({ ctx, input }) => {
|
|
255
|
-
const [assets] = await Asset.paginate(ctx.userId, { limit: 10000 });
|
|
256
|
-
const asset = assets.find((a) => a.name === input.filename) ?? null;
|
|
257
|
-
if (!asset) {
|
|
258
|
-
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
259
|
-
}
|
|
260
|
-
return toAssetResponse(asset);
|
|
261
655
|
})
|
|
262
656
|
});
|
|
263
657
|
//# sourceMappingURL=assets.js.map
|