@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.2
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 +82 -14
- 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/error-traces.d.ts +56 -0
- package/dist/error-traces.d.ts.map +1 -0
- package/dist/error-traces.js +179 -0
- package/dist/error-traces.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/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 +307 -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 +219 -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 +628 -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 +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/interrupted-jobs.d.ts +14 -0
- package/dist/interrupted-jobs.d.ts.map +1 -0
- package/dist/interrupted-jobs.js +28 -0
- package/dist/interrupted-jobs.js.map +1 -0
- 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-instances-service.d.ts +1284 -0
- package/dist/lib/app-instances-service.d.ts.map +1 -0
- package/dist/lib/app-instances-service.js +378 -0
- package/dist/lib/app-instances-service.js.map +1 -0
- package/dist/lib/app-run-cancellation.d.ts +4 -0
- package/dist/lib/app-run-cancellation.d.ts.map +1 -0
- package/dist/lib/app-run-cancellation.js +28 -0
- package/dist/lib/app-run-cancellation.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 +354 -0
- package/dist/lib/applications-service.d.ts.map +1 -0
- package/dist/lib/applications-service.js +507 -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 +49 -1
- package/dist/lib/asset-paths.d.ts.map +1 -1
- package/dist/lib/asset-paths.js +127 -31
- 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 +89 -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 +335 -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 +296 -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 +52 -0
- package/dist/lib/example-apps.d.ts.map +1 -0
- package/dist/lib/example-apps.js +192 -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/http-tracing.d.ts +12 -0
- package/dist/lib/http-tracing.d.ts.map +1 -0
- package/dist/lib/http-tracing.js +81 -0
- package/dist/lib/http-tracing.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 +33 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +110 -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 +102 -0
- package/dist/lib/public-routes.d.ts.map +1 -0
- package/dist/lib/public-routes.js +168 -0
- package/dist/lib/public-routes.js.map +1 -0
- package/dist/lib/public-workflow-share.d.ts +20 -0
- package/dist/lib/public-workflow-share.d.ts.map +1 -0
- package/dist/lib/public-workflow-share.js +45 -0
- package/dist/lib/public-workflow-share.js.map +1 -0
- package/dist/lib/run-trace-live-delivery.d.ts +25 -0
- package/dist/lib/run-trace-live-delivery.d.ts.map +1 -0
- package/dist/lib/run-trace-live-delivery.js +91 -0
- package/dist/lib/run-trace-live-delivery.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/test-ui-run-routes.d.ts +8 -0
- package/dist/lib/test-ui-run-routes.d.ts.map +1 -0
- package/dist/lib/test-ui-run-routes.js +42 -0
- package/dist/lib/test-ui-run-routes.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 +305 -0
- package/dist/lib/thumbnail.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +1821 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -0
- package/dist/lib/timeline-bundle.js +342 -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 +546 -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 +197 -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 +1147 -0
- package/dist/mcp-agent-tools.js.map +1 -0
- package/dist/mcp-client-config.d.ts +64 -0
- package/dist/mcp-client-config.d.ts.map +1 -0
- package/dist/mcp-client-config.js +353 -0
- package/dist/mcp-client-config.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 +61 -5
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +182 -689
- 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 +163 -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 +106 -297
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/python-bridge-gate.d.ts +28 -0
- package/dist/python-bridge-gate.d.ts.map +1 -0
- package/dist/python-bridge-gate.js +36 -0
- package/dist/python-bridge-gate.js.map +1 -0
- 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/app-runs.d.ts +4 -0
- package/dist/routes/app-runs.d.ts.map +1 -0
- package/dist/routes/app-runs.js +173 -0
- package/dist/routes/app-runs.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 +32 -0
- package/dist/routes/js-scripts.d.ts.map +1 -0
- package/dist/routes/js-scripts.js +498 -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 +29 -51
- 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/public-shared-workflows.d.ts +16 -0
- package/dist/routes/public-shared-workflows.d.ts.map +1 -0
- package/dist/routes/public-shared-workflows.js +55 -0
- package/dist/routes/public-shared-workflows.js.map +1 -0
- package/dist/routes/run-spans.d.ts +4 -0
- package/dist/routes/run-spans.d.ts.map +1 -0
- package/dist/routes/run-spans.js +53 -0
- package/dist/routes/run-spans.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 +51 -0
- package/dist/routes/timeline-fonts.d.ts.map +1 -0
- package/dist/routes/timeline-fonts.js +195 -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 +950 -47
- 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 +277 -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 +1091 -206
- package/dist/server.js.map +1 -1
- package/dist/session/app-run-fold.d.ts +7 -0
- package/dist/session/app-run-fold.d.ts.map +1 -0
- package/dist/session/app-run-fold.js +45 -0
- package/dist/session/app-run-fold.js.map +1 -0
- 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 +502 -0
- package/dist/session/chat-prompt.js.map +1 -0
- package/dist/session/chat-turn.d.ts +337 -0
- package/dist/session/chat-turn.d.ts.map +1 -0
- package/dist/session/chat-turn.js +3612 -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 +784 -0
- package/dist/session/commands.js.map +1 -0
- package/dist/session/inference.d.ts +218 -0
- package/dist/session/inference.d.ts.map +1 -0
- package/dist/session/inference.js +1143 -0
- package/dist/session/inference.js.map +1 -0
- package/dist/session/job-execution.d.ts +484 -0
- package/dist/session/job-execution.d.ts.map +1 -0
- package/dist/session/job-execution.js +2379 -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 +28 -0
- package/dist/session/model-interfaces.d.ts.map +1 -0
- package/dist/session/model-interfaces.js +133 -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 +14 -0
- package/dist/storage-retention.d.ts.map +1 -0
- package/dist/storage-retention.js +95 -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 +207 -42
- package/dist/test-ui-server.js.map +1 -1
- package/dist/timeline-generation-recovery.d.ts +4 -0
- package/dist/timeline-generation-recovery.d.ts.map +1 -0
- package/dist/timeline-generation-recovery.js +72 -0
- package/dist/timeline-generation-recovery.js.map +1 -0
- 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 +24 -0
- package/dist/trpc/error-logging.d.ts.map +1 -0
- package/dist/trpc/error-logging.js +48 -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 +100 -2540
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +58 -6
- 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/app-instances.d.ts +2269 -0
- package/dist/trpc/routers/app-instances.d.ts.map +1 -0
- package/dist/trpc/routers/app-instances.js +52 -0
- package/dist/trpc/routers/app-instances.js.map +1 -0
- package/dist/trpc/routers/app-runs.d.ts +1092 -0
- package/dist/trpc/routers/app-runs.d.ts.map +1 -0
- package/dist/trpc/routers/app-runs.js +28 -0
- package/dist/trpc/routers/app-runs.js.map +1 -0
- package/dist/trpc/routers/applications.d.ts +2212 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -0
- package/dist/trpc/routers/applications.js +221 -0
- package/dist/trpc/routers/applications.js.map +1 -0
- package/dist/trpc/routers/assets.d.ts +194 -42
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +503 -105
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/bug-reports.d.ts +33 -0
- package/dist/trpc/routers/bug-reports.d.ts.map +1 -0
- package/dist/trpc/routers/bug-reports.js +69 -0
- package/dist/trpc/routers/bug-reports.js.map +1 -0
- 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 +29 -0
- package/dist/trpc/routers/documents.js.map +1 -0
- package/dist/trpc/routers/error-traces.d.ts +132 -0
- package/dist/trpc/routers/error-traces.d.ts.map +1 -0
- package/dist/trpc/routers/error-traces.js +118 -0
- package/dist/trpc/routers/error-traces.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/gameDraftHistory.d.ts +8 -0
- package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -0
- package/dist/trpc/routers/gameDraftHistory.js +40 -0
- package/dist/trpc/routers/gameDraftHistory.js.map +1 -0
- package/dist/trpc/routers/games.d.ts +26502 -0
- package/dist/trpc/routers/games.d.ts.map +1 -0
- package/dist/trpc/routers/games.js +674 -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 +117 -21
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +191 -30
- 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 +4 -2
- package/dist/trpc/routers/mcp-config.d.ts.map +1 -1
- package/dist/trpc/routers/mcp-config.js +46 -206
- 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 +1544 -249
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +624 -318
- 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/runs.d.ts +472 -0
- package/dist/trpc/routers/runs.d.ts.map +1 -0
- package/dist/trpc/routers/runs.js +40 -0
- package/dist/trpc/routers/runs.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 +180 -10
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +125 -33
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +868 -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 +6639 -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 +9085 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -0
- package/dist/trpc/routers/timeline.js +669 -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 +243 -0
- package/dist/trpc/routers/worker.d.ts.map +1 -0
- package/dist/trpc/routers/worker.js +221 -0
- package/dist/trpc/routers/worker.js.map +1 -0
- package/dist/trpc/routers/workflows.d.ts +428 -187
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +347 -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 +1139 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -0
- package/dist/websocket-client-session.d.ts +322 -0
- package/dist/websocket-client-session.d.ts.map +1 -0
- package/dist/websocket-client-session.js +1267 -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 +97 -36
- 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,28 @@ 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.favorite &&
|
|
211
|
+
input.project_id === undefined
|
|
98
212
|
? ctx.userId
|
|
99
213
|
: input.parent_id;
|
|
100
|
-
const
|
|
214
|
+
const paginateOptions = {
|
|
101
215
|
parentId: effectiveParentId,
|
|
102
216
|
contentType: input.content_type,
|
|
103
217
|
workflowId: input.workflow_id,
|
|
104
218
|
nodeId: input.node_id,
|
|
105
219
|
jobId: input.job_id,
|
|
220
|
+
timelineId: input.timeline_id,
|
|
221
|
+
favorite: input.favorite,
|
|
106
222
|
limit: input.page_size
|
|
107
|
-
}
|
|
223
|
+
};
|
|
224
|
+
if (input.project_id !== undefined) {
|
|
225
|
+
paginateOptions.projectId = input.project_id;
|
|
226
|
+
}
|
|
227
|
+
const [assets, cursor] = await Asset.paginate(ctx.userId, paginateOptions);
|
|
108
228
|
return {
|
|
109
|
-
assets: assets.map((a) => toAssetResponse(a)),
|
|
229
|
+
assets: await Promise.all(assets.map((a) => toAssetResponse(a))),
|
|
110
230
|
next: cursor || null
|
|
111
231
|
};
|
|
112
232
|
}),
|
|
@@ -125,37 +245,287 @@ export const assetsRouter = router({
|
|
|
125
245
|
content_type: "folder",
|
|
126
246
|
size: null,
|
|
127
247
|
metadata: null,
|
|
248
|
+
sketch_document_id: null,
|
|
128
249
|
created_at: "",
|
|
129
250
|
get_url: null,
|
|
130
251
|
thumb_url: null,
|
|
131
252
|
duration: null,
|
|
132
253
|
node_id: null,
|
|
133
|
-
job_id: null
|
|
254
|
+
job_id: null,
|
|
255
|
+
timeline_id: null
|
|
134
256
|
};
|
|
135
257
|
}
|
|
136
258
|
const asset = await Asset.find(ctx.userId, input.id);
|
|
137
259
|
if (!asset) {
|
|
138
260
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
139
261
|
}
|
|
262
|
+
if (input.project_id !== undefined &&
|
|
263
|
+
asset.project_id !== input.project_id) {
|
|
264
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
265
|
+
}
|
|
140
266
|
return toAssetResponse(asset);
|
|
141
267
|
}),
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
268
|
+
/**
|
|
269
|
+
* Step 1 of a client-direct upload: create the row, pick the key, and mint
|
|
270
|
+
* a short-lived target scoped to that key. The client never chooses where
|
|
271
|
+
* it writes, so a stolen or replayed target can only overwrite the one
|
|
272
|
+
* pending object it was issued for — inside its own owner's prefix.
|
|
273
|
+
*
|
|
274
|
+
* `upload` comes back null on backends with no direct-upload concept (the
|
|
275
|
+
* local file store); the client then falls back to `POST /api/assets`.
|
|
276
|
+
*/
|
|
277
|
+
createUpload: protectedProcedure
|
|
278
|
+
.input(createUploadInput)
|
|
279
|
+
.output(createUploadOutput)
|
|
145
280
|
.mutation(async ({ ctx, input }) => {
|
|
281
|
+
if (input.project_id && input.project_id !== "default") {
|
|
282
|
+
if (!(await Project.findOwned(ctx.userId, input.project_id))) {
|
|
283
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Project not found");
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const adapter = getAssetAdapter();
|
|
287
|
+
const max = adapter instanceof FileStorageAdapter
|
|
288
|
+
? getMaxLocalUploadBytes()
|
|
289
|
+
: getMaxUploadBytes();
|
|
290
|
+
if (input.size > max) {
|
|
291
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `Upload exceeds maximum size: ${input.size} > ${max} bytes`);
|
|
292
|
+
}
|
|
293
|
+
// Local file store has no signed upload URL. The client falls back to
|
|
294
|
+
// POST /api/assets. Do not create a pending row that would stay empty.
|
|
295
|
+
if (!adapter.createUploadUrl) {
|
|
296
|
+
return { asset_id: "", key: "", upload: null };
|
|
297
|
+
}
|
|
298
|
+
const contentType = normalizeAssetContentType(input.content_type, input.name);
|
|
146
299
|
const asset = (await Asset.create({
|
|
147
300
|
user_id: ctx.userId,
|
|
148
301
|
name: input.name,
|
|
149
|
-
content_type:
|
|
150
|
-
parent_id: input.parent_id,
|
|
302
|
+
content_type: contentType,
|
|
303
|
+
parent_id: input.parent_id || ctx.userId,
|
|
151
304
|
workflow_id: input.workflow_id ?? null,
|
|
152
305
|
node_id: input.node_id ?? null,
|
|
153
306
|
job_id: input.job_id ?? null,
|
|
307
|
+
timeline_id: input.timeline_id ?? null,
|
|
154
308
|
metadata: input.metadata ?? null,
|
|
155
|
-
|
|
309
|
+
project_id: input.project_id ?? "default",
|
|
310
|
+
// Recorded on finalize from what actually landed, not from the claim.
|
|
311
|
+
size: null
|
|
156
312
|
}));
|
|
313
|
+
const key = getAssetStorageKey(ctx.userId, asset.id, asset.content_type);
|
|
314
|
+
const target = await adapter.createUploadUrl(key, {
|
|
315
|
+
contentType
|
|
316
|
+
});
|
|
317
|
+
return {
|
|
318
|
+
asset_id: asset.id,
|
|
319
|
+
key,
|
|
320
|
+
upload: target
|
|
321
|
+
? {
|
|
322
|
+
url: target.url,
|
|
323
|
+
method: target.method,
|
|
324
|
+
headers: target.headers,
|
|
325
|
+
expires_at: target.expiresAt
|
|
326
|
+
}
|
|
327
|
+
: null
|
|
328
|
+
};
|
|
329
|
+
}),
|
|
330
|
+
/**
|
|
331
|
+
* Step 2: confirm what actually landed. The signed target bounds *where* a
|
|
332
|
+
* client can write but not *what* — so the size is read back off the object
|
|
333
|
+
* rather than trusted from the client, and an over-cap or absent upload is
|
|
334
|
+
* rejected and the pending row removed.
|
|
335
|
+
*/
|
|
336
|
+
finalizeUpload: protectedProcedure
|
|
337
|
+
.input(finalizeUploadInput)
|
|
338
|
+
.output(finalizeUploadOutput)
|
|
339
|
+
.mutation(async ({ ctx, input }) => {
|
|
340
|
+
const asset = await Asset.find(ctx.userId, input.asset_id);
|
|
341
|
+
if (!asset) {
|
|
342
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
343
|
+
}
|
|
344
|
+
const adapter = getAssetAdapter();
|
|
345
|
+
const key = getAssetStorageKey(asset.user_id, asset.id, asset.content_type);
|
|
346
|
+
const stat = await adapter.stat(adapter.uriForKey(key));
|
|
347
|
+
if (!stat || stat.size === 0) {
|
|
348
|
+
await asset.delete();
|
|
349
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "No uploaded object found");
|
|
350
|
+
}
|
|
351
|
+
const max = getMaxUploadBytes();
|
|
352
|
+
if (stat.size > max) {
|
|
353
|
+
await adapter.delete(adapter.uriForKey(key));
|
|
354
|
+
await asset.delete();
|
|
355
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `Upload exceeds maximum size: ${stat.size} > ${max} bytes`);
|
|
356
|
+
}
|
|
357
|
+
asset.size = stat.size;
|
|
358
|
+
await asset.save();
|
|
359
|
+
// The bytes are already in the bucket, so a thumbnail costs one download
|
|
360
|
+
// back into this process. The generator skips objects above
|
|
361
|
+
// THUMBNAIL_SOURCE_MAX_BYTES, so a multi-gigabyte video goes without.
|
|
362
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
157
363
|
return toAssetResponse(asset);
|
|
158
364
|
}),
|
|
365
|
+
/**
|
|
366
|
+
* Whether the desktop app should reference large files in place, and from
|
|
367
|
+
* what size. Plain browsers have no disk path and always upload.
|
|
368
|
+
*/
|
|
369
|
+
externalImportConfig: protectedProcedure
|
|
370
|
+
.output(externalImportConfigOutput)
|
|
371
|
+
.query(async () => ({
|
|
372
|
+
enabled: externalAssetsAvailable(),
|
|
373
|
+
threshold_bytes: await getExternalAssetThresholdBytes()
|
|
374
|
+
})),
|
|
375
|
+
/**
|
|
376
|
+
* Create an asset that references a local file in place. No bytes are
|
|
377
|
+
* copied: reads resolve the key to `external_path` (see
|
|
378
|
+
* `lib/external-asset-lookup.ts`), and deleting the asset leaves the file.
|
|
379
|
+
* The path is validated once, here, against the local file roots.
|
|
380
|
+
*/
|
|
381
|
+
createExternal: protectedProcedure
|
|
382
|
+
.input(createExternalInput)
|
|
383
|
+
.output(createExternalOutput)
|
|
384
|
+
.mutation(async ({ ctx, input }) => {
|
|
385
|
+
const file = await resolveExternalFile(input.path);
|
|
386
|
+
const projectId = input.project_id ?? "default";
|
|
387
|
+
if (projectId !== "default") {
|
|
388
|
+
if (!(await Project.findOwned(ctx.userId, projectId))) {
|
|
389
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Project not found");
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// A second import of the same, unchanged file into the same project
|
|
393
|
+
// returns the row the first one made (R4). A row whose file changed
|
|
394
|
+
// since is offline, so it is not reused.
|
|
395
|
+
for (const existing of await Asset.findByExternalPath(ctx.userId, file.path)) {
|
|
396
|
+
const meta = existing.metadata ?? {};
|
|
397
|
+
if (existing.project_id === projectId &&
|
|
398
|
+
meta["external_size"] === file.size &&
|
|
399
|
+
meta["external_mtime"] === file.mtimeMs) {
|
|
400
|
+
log.info("external asset reused", { assetId: existing.id });
|
|
401
|
+
return toAssetResponse(existing);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
const name = input.name ?? basename(file.path);
|
|
405
|
+
const contentType = normalizeAssetContentType(input.content_type ?? "", name);
|
|
406
|
+
const duration = await probeAssetDurationSeconds(contentType, {
|
|
407
|
+
path: file.path
|
|
408
|
+
});
|
|
409
|
+
const asset = await Asset.create({
|
|
410
|
+
user_id: ctx.userId,
|
|
411
|
+
name,
|
|
412
|
+
content_type: contentType,
|
|
413
|
+
parent_id: input.parent_id || ctx.userId,
|
|
414
|
+
workflow_id: input.workflow_id ?? null,
|
|
415
|
+
project_id: projectId,
|
|
416
|
+
size: file.size,
|
|
417
|
+
duration,
|
|
418
|
+
external_path: file.path,
|
|
419
|
+
// Recorded to detect a file changed or replaced after import.
|
|
420
|
+
metadata: {
|
|
421
|
+
external_size: file.size,
|
|
422
|
+
external_mtime: file.mtimeMs
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
log.info("external asset created", {
|
|
426
|
+
assetId: asset.id,
|
|
427
|
+
contentType,
|
|
428
|
+
bytes: file.size
|
|
429
|
+
});
|
|
430
|
+
// The adapter resolves the new row to its in-place file, so ffmpeg or
|
|
431
|
+
// sharp reads it by path and a file of any size gets a thumbnail.
|
|
432
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
433
|
+
scheduleVideoProxy(asset);
|
|
434
|
+
return toAssetResponse(asset);
|
|
435
|
+
}),
|
|
436
|
+
/**
|
|
437
|
+
* Point an in-place asset at another file: a moved, renamed, or remounted
|
|
438
|
+
* original, or the same path after the file changed. The id and `get_url`
|
|
439
|
+
* stay the same (D5). The path is validated again (R5), and the new size,
|
|
440
|
+
* mtime, and duration are recorded before the thumbnail is regenerated.
|
|
441
|
+
*/
|
|
442
|
+
relinkExternal: protectedProcedure
|
|
443
|
+
.input(relinkExternalInput)
|
|
444
|
+
.output(relinkExternalOutput)
|
|
445
|
+
.mutation(async ({ ctx, input }) => {
|
|
446
|
+
const asset = await Asset.find(ctx.userId, input.id);
|
|
447
|
+
if (!asset) {
|
|
448
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
449
|
+
}
|
|
450
|
+
assertWritable(asset);
|
|
451
|
+
if (!asset.external_path) {
|
|
452
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Only an asset that references a file in place can be relinked");
|
|
453
|
+
}
|
|
454
|
+
const file = await resolveExternalFile(input.path);
|
|
455
|
+
// The URL's extension comes from the content type, so it stays. A file
|
|
456
|
+
// of another media kind (audio for a video clip) is refused. A name
|
|
457
|
+
// with no known type is accepted.
|
|
458
|
+
const kind = (type) => type.split("/")[0];
|
|
459
|
+
const offered = normalizeAssetContentType("", basename(file.path));
|
|
460
|
+
if (offered !== "application/octet-stream" &&
|
|
461
|
+
kind(offered) !== kind(asset.content_type)) {
|
|
462
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, `The new file is ${offered}, but this asset is ${asset.content_type}`);
|
|
463
|
+
}
|
|
464
|
+
asset.external_path = file.path;
|
|
465
|
+
asset.size = file.size;
|
|
466
|
+
asset.duration = await probeAssetDurationSeconds(asset.content_type, {
|
|
467
|
+
path: file.path
|
|
468
|
+
});
|
|
469
|
+
asset.metadata = {
|
|
470
|
+
...asset.metadata,
|
|
471
|
+
external_size: file.size,
|
|
472
|
+
external_mtime: file.mtimeMs
|
|
473
|
+
};
|
|
474
|
+
await asset.save();
|
|
475
|
+
log.info("external asset relinked", {
|
|
476
|
+
assetId: asset.id,
|
|
477
|
+
bytes: file.size
|
|
478
|
+
});
|
|
479
|
+
// Drop the previous file's thumbnail first, so a new file that yields
|
|
480
|
+
// none does not keep showing the old one.
|
|
481
|
+
const adapter = getAssetAdapter();
|
|
482
|
+
for (const key of assetKeyCandidates(asset.user_id, thumbnailKey(asset.id))) {
|
|
483
|
+
const uri = adapter.uriForKey(key);
|
|
484
|
+
if (await adapter.exists(uri)) {
|
|
485
|
+
await adapter.delete(uri);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
await generateThumbnailForStoredAsset(asset.user_id, asset.id, asset.content_type);
|
|
489
|
+
// The previous file's proxy no longer matches; make one for this file.
|
|
490
|
+
await discardVideoProxy(asset);
|
|
491
|
+
scheduleVideoProxy(asset);
|
|
492
|
+
return toAssetResponse(asset);
|
|
493
|
+
}),
|
|
494
|
+
/**
|
|
495
|
+
* Queue an all-intra preview proxy for a video asset, at any size, and
|
|
496
|
+
* answer its state. The timeline preview plays the proxy once the asset
|
|
497
|
+
* response says it is ready. A failed proxy is tried again. Refused off
|
|
498
|
+
* the local file store.
|
|
499
|
+
*/
|
|
500
|
+
ensureProxy: protectedProcedure
|
|
501
|
+
.input(ensureProxyInput)
|
|
502
|
+
.output(ensureProxyOutput)
|
|
503
|
+
.mutation(async ({ ctx, input }) => {
|
|
504
|
+
const asset = await Asset.find(ctx.userId, input.id);
|
|
505
|
+
if (!asset) {
|
|
506
|
+
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
507
|
+
}
|
|
508
|
+
if (!asset.content_type.startsWith("video/")) {
|
|
509
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Asset is not a video");
|
|
510
|
+
}
|
|
511
|
+
if (!videoProxiesAvailable()) {
|
|
512
|
+
throwApiError(ApiErrorCode.FORBIDDEN, "Video proxies need the local file store and are disabled in production");
|
|
513
|
+
}
|
|
514
|
+
const before = await videoProxyState(asset);
|
|
515
|
+
if (before?.status !== "ready") {
|
|
516
|
+
videoProxyQueue.clearFailure(asset.id);
|
|
517
|
+
videoProxyQueue.enqueue({
|
|
518
|
+
assetId: asset.id,
|
|
519
|
+
userId: asset.user_id,
|
|
520
|
+
force: true
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
const response = await toAssetResponse(asset);
|
|
524
|
+
return {
|
|
525
|
+
status: response.proxy_status ?? "none",
|
|
526
|
+
proxy_url: response.proxy_url ?? null
|
|
527
|
+
};
|
|
528
|
+
}),
|
|
159
529
|
update: protectedProcedure
|
|
160
530
|
.input(updateInput)
|
|
161
531
|
.output(assetResponse)
|
|
@@ -164,29 +534,71 @@ export const assetsRouter = router({
|
|
|
164
534
|
if (!asset) {
|
|
165
535
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
166
536
|
}
|
|
537
|
+
assertWritable(asset);
|
|
538
|
+
const isExternal = Boolean(asset.external_path);
|
|
539
|
+
if (isExternal && input.data != null) {
|
|
540
|
+
// New bytes would land under the storage root and shadow the
|
|
541
|
+
// referenced file, which the user still sees on disk.
|
|
542
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "This asset references a file in place. Relink it to another file instead of replacing its data");
|
|
543
|
+
}
|
|
167
544
|
if (input.name !== undefined)
|
|
168
545
|
asset.name = input.name;
|
|
169
546
|
if (input.content_type !== undefined) {
|
|
547
|
+
// The stored file name (and get_url) is derived from content_type. If
|
|
548
|
+
// the new content_type maps to a different file extension and no new
|
|
549
|
+
// bytes accompany the change, get_url would point at a file that was
|
|
550
|
+
// never written while the real bytes are orphaned under the old name.
|
|
551
|
+
// Reject rather than silently break the asset link.
|
|
552
|
+
const changesExtension = getAssetFileName(asset.id, input.content_type) !==
|
|
553
|
+
getAssetFileName(asset.id, asset.content_type);
|
|
554
|
+
if (changesExtension && input.data == null) {
|
|
555
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Changing content_type to a different file type requires re-uploading the asset data");
|
|
556
|
+
}
|
|
170
557
|
asset.content_type = input.content_type;
|
|
171
558
|
}
|
|
172
|
-
if (input.parent_id !== undefined)
|
|
559
|
+
if (input.parent_id !== undefined) {
|
|
560
|
+
await assertValidParent(ctx.userId, asset, input.parent_id);
|
|
173
561
|
asset.parent_id = input.parent_id;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
562
|
+
}
|
|
563
|
+
if (input.metadata !== undefined) {
|
|
564
|
+
asset.metadata = isExternal
|
|
565
|
+
? withExternalFingerprint(input.metadata, asset.metadata)
|
|
566
|
+
: input.metadata;
|
|
567
|
+
}
|
|
568
|
+
if (input.sketch_document_id !== undefined) {
|
|
569
|
+
asset.sketch_document_id = input.sketch_document_id;
|
|
570
|
+
}
|
|
571
|
+
if (input.timeline_id !== undefined) {
|
|
572
|
+
asset.timeline_id = input.timeline_id;
|
|
573
|
+
}
|
|
574
|
+
if (input.favorite !== undefined)
|
|
575
|
+
asset.favorite = input.favorite;
|
|
576
|
+
// An external asset's size is its file's, recorded by import or relink.
|
|
577
|
+
if (input.size !== undefined && !isExternal)
|
|
177
578
|
asset.size = input.size;
|
|
579
|
+
if (input.expected_metadata !== undefined && input.data != null) {
|
|
580
|
+
throwApiError(ApiErrorCode.INVALID_INPUT, "Conditional metadata updates cannot replace asset data");
|
|
581
|
+
}
|
|
178
582
|
if (input.data != null) {
|
|
179
583
|
const buf = input.data_encoding === "base64"
|
|
180
584
|
? Buffer.from(input.data, "base64")
|
|
181
585
|
: Buffer.from(input.data, "utf-8");
|
|
182
586
|
asset.size = buf.byteLength;
|
|
183
|
-
const storagePath = getAssetStoragePath(ctx.apiOptions.storage);
|
|
184
587
|
const fileName = getAssetFileName(asset.id, asset.content_type);
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
588
|
+
log.info("asset upload (update)", {
|
|
589
|
+
assetId: asset.id,
|
|
590
|
+
fileName,
|
|
591
|
+
contentType: asset.content_type,
|
|
592
|
+
bytes: buf.byteLength
|
|
593
|
+
});
|
|
594
|
+
await storeAssetWithThumbnail(asset.user_id, asset.id, fileName, new Uint8Array(buf), asset.content_type);
|
|
595
|
+
}
|
|
596
|
+
const saved = input.expected_metadata !== undefined
|
|
597
|
+
? await asset.saveIfMetadataMatches(input.expected_metadata)
|
|
598
|
+
: await asset.save();
|
|
599
|
+
if (saved === false) {
|
|
600
|
+
throwApiError(ApiErrorCode.ALREADY_EXISTS, "Asset metadata changed. Reload it and try again.");
|
|
188
601
|
}
|
|
189
|
-
await asset.save();
|
|
190
602
|
return toAssetResponse(asset);
|
|
191
603
|
}),
|
|
192
604
|
delete: protectedProcedure
|
|
@@ -197,67 +609,53 @@ export const assetsRouter = router({
|
|
|
197
609
|
if (!asset) {
|
|
198
610
|
throwApiError(ApiErrorCode.NOT_FOUND, "Asset not found");
|
|
199
611
|
}
|
|
612
|
+
assertWritable(asset);
|
|
200
613
|
let deletedAssetIds;
|
|
201
614
|
if (asset.content_type === "folder") {
|
|
202
615
|
deletedAssetIds = await deleteFolderRecursive(ctx.userId, input.id);
|
|
203
616
|
}
|
|
204
617
|
else {
|
|
205
|
-
await asset
|
|
618
|
+
await deleteAssetWithObjects(asset);
|
|
206
619
|
deletedAssetIds = [input.id];
|
|
207
620
|
}
|
|
208
621
|
return { deleted_asset_ids: deletedAssetIds };
|
|
209
622
|
}),
|
|
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
623
|
recursive: protectedProcedure
|
|
229
624
|
.input(recursiveInput)
|
|
230
625
|
.output(recursiveOutput)
|
|
231
626
|
.query(async ({ ctx, input }) => {
|
|
232
|
-
const assets = await getAllAssetsRecursive(ctx.userId, input.id);
|
|
233
|
-
return {
|
|
627
|
+
const assets = await getAllAssetsRecursive(ctx.userId, input.id, input.project_id);
|
|
628
|
+
return {
|
|
629
|
+
assets: await Promise.all(assets.map((a) => toAssetResponse(a)))
|
|
630
|
+
};
|
|
234
631
|
}),
|
|
235
632
|
search: protectedProcedure
|
|
236
633
|
.input(searchInput)
|
|
237
634
|
.output(searchOutput)
|
|
238
635
|
.query(async ({ ctx, input }) => {
|
|
239
|
-
|
|
636
|
+
// Filter by name at the DB level across ALL of the user's assets. The
|
|
637
|
+
// previous implementation paginated the first `page_size` assets and then
|
|
638
|
+
// filtered those in memory, so anything past the first page (e.g. a "Cat"
|
|
639
|
+
// asset in a 500-item library) was never found.
|
|
640
|
+
const searchOptions = {
|
|
240
641
|
limit: input.page_size
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
642
|
+
};
|
|
643
|
+
if (input.content_type) {
|
|
644
|
+
searchOptions.contentType = input.content_type;
|
|
645
|
+
}
|
|
646
|
+
if (input.project_id !== undefined) {
|
|
647
|
+
searchOptions.projectId = input.project_id;
|
|
648
|
+
}
|
|
649
|
+
if (input.cursor) {
|
|
650
|
+
searchOptions.cursor = input.cursor;
|
|
651
|
+
}
|
|
652
|
+
const [matched, nextCursor] = await Asset.searchAssetsGlobal(ctx.userId, input.query, searchOptions);
|
|
244
653
|
return {
|
|
245
|
-
assets: matched.map((a) => toAssetResponse(a)),
|
|
654
|
+
assets: await Promise.all(matched.map((a) => toAssetResponse(a))),
|
|
246
655
|
next_cursor: nextCursor || null,
|
|
247
656
|
total_count: matched.length,
|
|
248
657
|
is_global_search: input.workflow_id === undefined
|
|
249
658
|
};
|
|
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
659
|
})
|
|
262
660
|
});
|
|
263
661
|
//# sourceMappingURL=assets.js.map
|