@nodetool-ai/websocket 0.7.0-rc.22 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1020) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent/run-node-tool.d.ts +39 -0
  4. package/dist/agent/run-node-tool.d.ts.map +1 -0
  5. package/dist/agent/run-node-tool.js +55 -0
  6. package/dist/agent/run-node-tool.js.map +1 -0
  7. package/dist/chat-prediction-forwarder.d.ts +13 -0
  8. package/dist/chat-prediction-forwarder.d.ts.map +1 -0
  9. package/dist/chat-prediction-forwarder.js +22 -0
  10. package/dist/chat-prediction-forwarder.js.map +1 -0
  11. package/dist/chat-tool-call-repair.d.ts +45 -0
  12. package/dist/chat-tool-call-repair.d.ts.map +1 -0
  13. package/dist/chat-tool-call-repair.js +100 -0
  14. package/dist/chat-tool-call-repair.js.map +1 -0
  15. package/dist/chat-turn-registry.d.ts +169 -0
  16. package/dist/chat-turn-registry.d.ts.map +1 -0
  17. package/dist/chat-turn-registry.js +326 -0
  18. package/dist/chat-turn-registry.js.map +1 -0
  19. package/dist/collection-api.d.ts +2 -2
  20. package/dist/collection-api.d.ts.map +1 -1
  21. package/dist/collection-api.js +44 -13
  22. package/dist/collection-api.js.map +1 -1
  23. package/dist/configured-providers.d.ts +52 -0
  24. package/dist/configured-providers.d.ts.map +1 -0
  25. package/dist/configured-providers.js +85 -0
  26. package/dist/configured-providers.js.map +1 -0
  27. package/dist/cors.d.ts +22 -0
  28. package/dist/cors.d.ts.map +1 -0
  29. package/dist/cors.js +91 -0
  30. package/dist/cors.js.map +1 -0
  31. package/dist/credit-gate.d.ts +36 -0
  32. package/dist/credit-gate.d.ts.map +1 -0
  33. package/dist/credit-gate.js +76 -0
  34. package/dist/credit-gate.js.map +1 -0
  35. package/dist/custom-providers.d.ts +40 -0
  36. package/dist/custom-providers.d.ts.map +1 -0
  37. package/dist/custom-providers.js +134 -0
  38. package/dist/custom-providers.js.map +1 -0
  39. package/dist/debug-sessions.d.ts +10 -0
  40. package/dist/debug-sessions.d.ts.map +1 -0
  41. package/dist/debug-sessions.js +9 -0
  42. package/dist/debug-sessions.js.map +1 -0
  43. package/dist/drain.d.ts +34 -0
  44. package/dist/drain.d.ts.map +1 -0
  45. package/dist/drain.js +68 -0
  46. package/dist/drain.js.map +1 -0
  47. package/dist/e2e-server.d.ts +30 -0
  48. package/dist/e2e-server.d.ts.map +1 -0
  49. package/dist/e2e-server.js +111 -0
  50. package/dist/e2e-server.js.map +1 -0
  51. package/dist/example-workflows.d.ts +20 -0
  52. package/dist/example-workflows.d.ts.map +1 -0
  53. package/dist/example-workflows.js +123 -0
  54. package/dist/example-workflows.js.map +1 -0
  55. package/dist/extension-cdp-bridge.d.ts +85 -0
  56. package/dist/extension-cdp-bridge.d.ts.map +1 -0
  57. package/dist/extension-cdp-bridge.js +163 -0
  58. package/dist/extension-cdp-bridge.js.map +1 -0
  59. package/dist/external-mcp.d.ts +58 -0
  60. package/dist/external-mcp.d.ts.map +1 -0
  61. package/dist/external-mcp.js +288 -0
  62. package/dist/external-mcp.js.map +1 -0
  63. package/dist/fake-runtime.d.ts +114 -0
  64. package/dist/fake-runtime.d.ts.map +1 -0
  65. package/dist/fake-runtime.js +270 -0
  66. package/dist/fake-runtime.js.map +1 -0
  67. package/dist/file-api.d.ts +4 -7
  68. package/dist/file-api.d.ts.map +1 -1
  69. package/dist/file-api.js +122 -39
  70. package/dist/file-api.js.map +1 -1
  71. package/dist/frontend-renderer-registry.d.ts +75 -0
  72. package/dist/frontend-renderer-registry.d.ts.map +1 -0
  73. package/dist/frontend-renderer-registry.js +111 -0
  74. package/dist/frontend-renderer-registry.js.map +1 -0
  75. package/dist/generation-recovery.d.ts +13 -0
  76. package/dist/generation-recovery.d.ts.map +1 -0
  77. package/dist/generation-recovery.js +197 -0
  78. package/dist/generation-recovery.js.map +1 -0
  79. package/dist/headless-job-runner.d.ts +71 -0
  80. package/dist/headless-job-runner.d.ts.map +1 -0
  81. package/dist/headless-job-runner.js +198 -0
  82. package/dist/headless-job-runner.js.map +1 -0
  83. package/dist/http-api.d.ts +157 -24
  84. package/dist/http-api.d.ts.map +1 -1
  85. package/dist/http-api.js +613 -646
  86. package/dist/http-api.js.map +1 -1
  87. package/dist/http-body-schemas.d.ts +109 -0
  88. package/dist/http-body-schemas.d.ts.map +1 -0
  89. package/dist/http-body-schemas.js +146 -0
  90. package/dist/http-body-schemas.js.map +1 -0
  91. package/dist/index.d.ts +11 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +11 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/job-control.d.ts +57 -0
  96. package/dist/job-control.d.ts.map +1 -0
  97. package/dist/job-control.js +134 -0
  98. package/dist/job-control.js.map +1 -0
  99. package/dist/job-queue.d.ts +47 -0
  100. package/dist/job-queue.d.ts.map +1 -0
  101. package/dist/job-queue.js +52 -0
  102. package/dist/job-queue.js.map +1 -0
  103. package/dist/job-run-registry.d.ts +176 -0
  104. package/dist/job-run-registry.d.ts.map +1 -0
  105. package/dist/job-run-registry.js +312 -0
  106. package/dist/job-run-registry.js.map +1 -0
  107. package/dist/lib/app-build-service.d.ts +16 -0
  108. package/dist/lib/app-build-service.d.ts.map +1 -0
  109. package/dist/lib/app-build-service.js +39 -0
  110. package/dist/lib/app-build-service.js.map +1 -0
  111. package/dist/lib/app-debug-service.d.ts +16 -0
  112. package/dist/lib/app-debug-service.d.ts.map +1 -0
  113. package/dist/lib/app-debug-service.js +48 -0
  114. package/dist/lib/app-debug-service.js.map +1 -0
  115. package/dist/lib/app-deployment-service.d.ts +82 -0
  116. package/dist/lib/app-deployment-service.d.ts.map +1 -0
  117. package/dist/lib/app-deployment-service.js +282 -0
  118. package/dist/lib/app-deployment-service.js.map +1 -0
  119. package/dist/lib/app-run-server.d.ts +7 -0
  120. package/dist/lib/app-run-server.d.ts.map +1 -0
  121. package/dist/lib/app-run-server.js +6 -0
  122. package/dist/lib/app-run-server.js.map +1 -0
  123. package/dist/lib/app-session-scope.d.ts +91 -0
  124. package/dist/lib/app-session-scope.d.ts.map +1 -0
  125. package/dist/lib/app-session-scope.js +91 -0
  126. package/dist/lib/app-session-scope.js.map +1 -0
  127. package/dist/lib/applications-service.d.ts +173 -0
  128. package/dist/lib/applications-service.d.ts.map +1 -0
  129. package/dist/lib/applications-service.js +491 -0
  130. package/dist/lib/applications-service.js.map +1 -0
  131. package/dist/lib/asset-duration.d.ts +7 -0
  132. package/dist/lib/asset-duration.d.ts.map +1 -0
  133. package/dist/lib/asset-duration.js +24 -0
  134. package/dist/lib/asset-duration.js.map +1 -0
  135. package/dist/lib/asset-export.d.ts +34 -0
  136. package/dist/lib/asset-export.d.ts.map +1 -0
  137. package/dist/lib/asset-export.js +113 -0
  138. package/dist/lib/asset-export.js.map +1 -0
  139. package/dist/lib/asset-model-interface.d.ts +41 -0
  140. package/dist/lib/asset-model-interface.d.ts.map +1 -0
  141. package/dist/lib/asset-model-interface.js +74 -0
  142. package/dist/lib/asset-model-interface.js.map +1 -0
  143. package/dist/lib/asset-paths.d.ts +52 -0
  144. package/dist/lib/asset-paths.d.ts.map +1 -1
  145. package/dist/lib/asset-paths.js +145 -1
  146. package/dist/lib/asset-paths.js.map +1 -1
  147. package/dist/lib/asset-response.d.ts +12 -0
  148. package/dist/lib/asset-response.d.ts.map +1 -0
  149. package/dist/lib/asset-response.js +88 -0
  150. package/dist/lib/asset-response.js.map +1 -0
  151. package/dist/lib/audio-peaks.d.ts +23 -0
  152. package/dist/lib/audio-peaks.d.ts.map +1 -0
  153. package/dist/lib/audio-peaks.js +331 -0
  154. package/dist/lib/audio-peaks.js.map +1 -0
  155. package/dist/lib/bridge.d.ts +9 -1
  156. package/dist/lib/bridge.d.ts.map +1 -1
  157. package/dist/lib/bridge.js +27 -4
  158. package/dist/lib/bridge.js.map +1 -1
  159. package/dist/lib/compression.d.ts +3 -0
  160. package/dist/lib/compression.d.ts.map +1 -0
  161. package/dist/lib/compression.js +3 -0
  162. package/dist/lib/compression.js.map +1 -0
  163. package/dist/lib/document-model-interfaces.d.ts +30 -0
  164. package/dist/lib/document-model-interfaces.d.ts.map +1 -0
  165. package/dist/lib/document-model-interfaces.js +295 -0
  166. package/dist/lib/document-model-interfaces.js.map +1 -0
  167. package/dist/lib/env-config.d.ts +9 -0
  168. package/dist/lib/env-config.d.ts.map +1 -0
  169. package/dist/lib/env-config.js +18 -0
  170. package/dist/lib/env-config.js.map +1 -0
  171. package/dist/lib/example-apps.d.ts +43 -0
  172. package/dist/lib/example-apps.d.ts.map +1 -0
  173. package/dist/lib/example-apps.js +145 -0
  174. package/dist/lib/example-apps.js.map +1 -0
  175. package/dist/lib/example-games.d.ts +5 -0
  176. package/dist/lib/example-games.d.ts.map +1 -0
  177. package/dist/lib/example-games.js +13 -0
  178. package/dist/lib/example-games.js.map +1 -0
  179. package/dist/lib/example-recipes.d.ts +33 -0
  180. package/dist/lib/example-recipes.d.ts.map +1 -0
  181. package/dist/lib/example-recipes.js +213 -0
  182. package/dist/lib/example-recipes.js.map +1 -0
  183. package/dist/lib/example-storyboards.d.ts +40 -0
  184. package/dist/lib/example-storyboards.d.ts.map +1 -0
  185. package/dist/lib/example-storyboards.js +131 -0
  186. package/dist/lib/example-storyboards.js.map +1 -0
  187. package/dist/lib/example-thumbnail.d.ts +21 -0
  188. package/dist/lib/example-thumbnail.d.ts.map +1 -0
  189. package/dist/lib/example-thumbnail.js +50 -0
  190. package/dist/lib/example-thumbnail.js.map +1 -0
  191. package/dist/lib/example-timelines.d.ts +9 -0
  192. package/dist/lib/example-timelines.d.ts.map +1 -0
  193. package/dist/lib/example-timelines.js +25 -0
  194. package/dist/lib/example-timelines.js.map +1 -0
  195. package/dist/lib/extension-dist.d.ts +24 -0
  196. package/dist/lib/extension-dist.d.ts.map +1 -0
  197. package/dist/lib/extension-dist.js +67 -0
  198. package/dist/lib/extension-dist.js.map +1 -0
  199. package/dist/lib/external-asset-lookup.d.ts +30 -0
  200. package/dist/lib/external-asset-lookup.d.ts.map +1 -0
  201. package/dist/lib/external-asset-lookup.js +99 -0
  202. package/dist/lib/external-asset-lookup.js.map +1 -0
  203. package/dist/lib/external-assets.d.ts +13 -0
  204. package/dist/lib/external-assets.d.ts.map +1 -0
  205. package/dist/lib/external-assets.js +46 -0
  206. package/dist/lib/external-assets.js.map +1 -0
  207. package/dist/lib/fly-replay.d.ts +34 -0
  208. package/dist/lib/fly-replay.d.ts.map +1 -0
  209. package/dist/lib/fly-replay.js +111 -0
  210. package/dist/lib/fly-replay.js.map +1 -0
  211. package/dist/lib/http-rate-limit.d.ts +32 -0
  212. package/dist/lib/http-rate-limit.d.ts.map +1 -0
  213. package/dist/lib/http-rate-limit.js +47 -0
  214. package/dist/lib/http-rate-limit.js.map +1 -0
  215. package/dist/lib/instance-id.d.ts +25 -0
  216. package/dist/lib/instance-id.d.ts.map +1 -0
  217. package/dist/lib/instance-id.js +44 -0
  218. package/dist/lib/instance-id.js.map +1 -0
  219. package/dist/lib/link-codes.d.ts +82 -0
  220. package/dist/lib/link-codes.d.ts.map +1 -0
  221. package/dist/lib/link-codes.js +100 -0
  222. package/dist/lib/link-codes.js.map +1 -0
  223. package/dist/lib/local-asset-upload.d.ts +5 -0
  224. package/dist/lib/local-asset-upload.d.ts.map +1 -0
  225. package/dist/lib/local-asset-upload.js +69 -0
  226. package/dist/lib/local-asset-upload.js.map +1 -0
  227. package/dist/lib/local-file-access.d.ts +31 -0
  228. package/dist/lib/local-file-access.d.ts.map +1 -0
  229. package/dist/lib/local-file-access.js +169 -0
  230. package/dist/lib/local-file-access.js.map +1 -0
  231. package/dist/lib/localhost-trust.d.ts +59 -0
  232. package/dist/lib/localhost-trust.d.ts.map +1 -0
  233. package/dist/lib/localhost-trust.js +139 -0
  234. package/dist/lib/localhost-trust.js.map +1 -0
  235. package/dist/lib/mcp-mount.d.ts +25 -0
  236. package/dist/lib/mcp-mount.d.ts.map +1 -0
  237. package/dist/lib/mcp-mount.js +32 -0
  238. package/dist/lib/mcp-mount.js.map +1 -0
  239. package/dist/lib/media-size.d.ts +21 -0
  240. package/dist/lib/media-size.d.ts.map +1 -0
  241. package/dist/lib/media-size.js +48 -0
  242. package/dist/lib/media-size.js.map +1 -0
  243. package/dist/lib/media.d.ts +38 -0
  244. package/dist/lib/media.d.ts.map +1 -0
  245. package/dist/lib/media.js +146 -0
  246. package/dist/lib/media.js.map +1 -0
  247. package/dist/lib/package-asset-export.d.ts +83 -0
  248. package/dist/lib/package-asset-export.d.ts.map +1 -0
  249. package/dist/lib/package-asset-export.js +212 -0
  250. package/dist/lib/package-asset-export.js.map +1 -0
  251. package/dist/lib/package-assets.d.ts +41 -0
  252. package/dist/lib/package-assets.d.ts.map +1 -0
  253. package/dist/lib/package-assets.js +155 -0
  254. package/dist/lib/package-assets.js.map +1 -0
  255. package/dist/lib/project-delete.d.ts +11 -0
  256. package/dist/lib/project-delete.d.ts.map +1 -0
  257. package/dist/lib/project-delete.js +67 -0
  258. package/dist/lib/project-delete.js.map +1 -0
  259. package/dist/lib/project-document-copy.d.ts +31 -0
  260. package/dist/lib/project-document-copy.d.ts.map +1 -0
  261. package/dist/lib/project-document-copy.js +473 -0
  262. package/dist/lib/project-document-copy.js.map +1 -0
  263. package/dist/lib/public-app-assets.d.ts +8 -0
  264. package/dist/lib/public-app-assets.d.ts.map +1 -0
  265. package/dist/lib/public-app-assets.js +77 -0
  266. package/dist/lib/public-app-assets.js.map +1 -0
  267. package/dist/lib/public-routes.d.ts +95 -0
  268. package/dist/lib/public-routes.d.ts.map +1 -0
  269. package/dist/lib/public-routes.js +154 -0
  270. package/dist/lib/public-routes.js.map +1 -0
  271. package/dist/lib/runtime-detection.d.ts +17 -0
  272. package/dist/lib/runtime-detection.d.ts.map +1 -0
  273. package/dist/lib/runtime-detection.js +90 -0
  274. package/dist/lib/runtime-detection.js.map +1 -0
  275. package/dist/lib/storage-access.d.ts +21 -0
  276. package/dist/lib/storage-access.d.ts.map +1 -0
  277. package/dist/lib/storage-access.js +74 -0
  278. package/dist/lib/storage-access.js.map +1 -0
  279. package/dist/lib/storage.d.ts +9 -0
  280. package/dist/lib/storage.d.ts.map +1 -0
  281. package/dist/lib/storage.js +28 -0
  282. package/dist/lib/storage.js.map +1 -0
  283. package/dist/lib/storyboard-export.d.ts +64 -0
  284. package/dist/lib/storyboard-export.d.ts.map +1 -0
  285. package/dist/lib/storyboard-export.js +183 -0
  286. package/dist/lib/storyboard-export.js.map +1 -0
  287. package/dist/lib/style-presets.d.ts +34 -0
  288. package/dist/lib/style-presets.d.ts.map +1 -0
  289. package/dist/lib/style-presets.js +62 -0
  290. package/dist/lib/style-presets.js.map +1 -0
  291. package/dist/lib/temp-url-resolver.d.ts +35 -0
  292. package/dist/lib/temp-url-resolver.d.ts.map +1 -0
  293. package/dist/lib/temp-url-resolver.js +88 -0
  294. package/dist/lib/temp-url-resolver.js.map +1 -0
  295. package/dist/lib/thumbnail.d.ts +74 -0
  296. package/dist/lib/thumbnail.d.ts.map +1 -0
  297. package/dist/lib/thumbnail.js +302 -0
  298. package/dist/lib/thumbnail.js.map +1 -0
  299. package/dist/lib/timeline-bundle.d.ts +1689 -0
  300. package/dist/lib/timeline-bundle.d.ts.map +1 -0
  301. package/dist/lib/timeline-bundle.js +330 -0
  302. package/dist/lib/timeline-bundle.js.map +1 -0
  303. package/dist/lib/video-proxy.d.ts +114 -0
  304. package/dist/lib/video-proxy.d.ts.map +1 -0
  305. package/dist/lib/video-proxy.js +545 -0
  306. package/dist/lib/video-proxy.js.map +1 -0
  307. package/dist/lib/wire-values.d.ts +31 -0
  308. package/dist/lib/wire-values.d.ts.map +1 -0
  309. package/dist/lib/wire-values.js +49 -0
  310. package/dist/lib/wire-values.js.map +1 -0
  311. package/dist/lib/workflow-bundle.d.ts +102 -0
  312. package/dist/lib/workflow-bundle.d.ts.map +1 -0
  313. package/dist/lib/workflow-bundle.js +306 -0
  314. package/dist/lib/workflow-bundle.js.map +1 -0
  315. package/dist/lib/workflow-service.d.ts +82 -0
  316. package/dist/lib/workflow-service.d.ts.map +1 -0
  317. package/dist/lib/workflow-service.js +194 -0
  318. package/dist/lib/workflow-service.js.map +1 -0
  319. package/dist/lib/workflow-workspace.d.ts +20 -0
  320. package/dist/lib/workflow-workspace.d.ts.map +1 -0
  321. package/dist/lib/workflow-workspace.js +65 -0
  322. package/dist/lib/workflow-workspace.js.map +1 -0
  323. package/dist/lib/ws-connection-health.d.ts +10 -0
  324. package/dist/lib/ws-connection-health.d.ts.map +1 -0
  325. package/dist/lib/ws-connection-health.js +38 -0
  326. package/dist/lib/ws-connection-health.js.map +1 -0
  327. package/dist/lib/ws-rate-limit.d.ts +22 -0
  328. package/dist/lib/ws-rate-limit.d.ts.map +1 -0
  329. package/dist/lib/ws-rate-limit.js +45 -0
  330. package/dist/lib/ws-rate-limit.js.map +1 -0
  331. package/dist/lib/ws-upgrade.d.ts +40 -0
  332. package/dist/lib/ws-upgrade.d.ts.map +1 -0
  333. package/dist/lib/ws-upgrade.js +66 -0
  334. package/dist/lib/ws-upgrade.js.map +1 -0
  335. package/dist/lib/zip-stream.d.ts +46 -0
  336. package/dist/lib/zip-stream.d.ts.map +1 -0
  337. package/dist/lib/zip-stream.js +140 -0
  338. package/dist/lib/zip-stream.js.map +1 -0
  339. package/dist/mcp-agent-tools.d.ts +56 -0
  340. package/dist/mcp-agent-tools.d.ts.map +1 -0
  341. package/dist/mcp-agent-tools.js +1216 -0
  342. package/dist/mcp-agent-tools.js.map +1 -0
  343. package/dist/mcp-server.d.ts +56 -7
  344. package/dist/mcp-server.d.ts.map +1 -1
  345. package/dist/mcp-server.js +255 -762
  346. package/dist/mcp-server.js.map +1 -1
  347. package/dist/mcp-tool-deps.d.ts +20 -0
  348. package/dist/mcp-tool-deps.d.ts.map +1 -0
  349. package/dist/mcp-tool-deps.js +61 -0
  350. package/dist/mcp-tool-deps.js.map +1 -0
  351. package/dist/messagepack.d.ts +7 -0
  352. package/dist/messagepack.d.ts.map +1 -0
  353. package/dist/messagepack.js +19 -0
  354. package/dist/messagepack.js.map +1 -0
  355. package/dist/model-download-runtime.d.ts +9 -0
  356. package/dist/model-download-runtime.d.ts.map +1 -0
  357. package/dist/model-download-runtime.js +77 -0
  358. package/dist/model-download-runtime.js.map +1 -0
  359. package/dist/model-execution-availability.d.ts +14 -0
  360. package/dist/model-execution-availability.d.ts.map +1 -0
  361. package/dist/model-execution-availability.js +161 -0
  362. package/dist/model-execution-availability.js.map +1 -0
  363. package/dist/models-api.d.ts +51 -5
  364. package/dist/models-api.d.ts.map +1 -1
  365. package/dist/models-api.js +160 -690
  366. package/dist/models-api.js.map +1 -1
  367. package/dist/node-registry-setup.d.ts +84 -0
  368. package/dist/node-registry-setup.d.ts.map +1 -0
  369. package/dist/node-registry-setup.js +256 -0
  370. package/dist/node-registry-setup.js.map +1 -0
  371. package/dist/oauth/cimd.d.ts +28 -0
  372. package/dist/oauth/cimd.d.ts.map +1 -0
  373. package/dist/oauth/cimd.js +177 -0
  374. package/dist/oauth/cimd.js.map +1 -0
  375. package/dist/oauth/gate.d.ts +38 -0
  376. package/dist/oauth/gate.d.ts.map +1 -0
  377. package/dist/oauth/gate.js +77 -0
  378. package/dist/oauth/gate.js.map +1 -0
  379. package/dist/oauth/metadata.d.ts +35 -0
  380. package/dist/oauth/metadata.d.ts.map +1 -0
  381. package/dist/oauth/metadata.js +56 -0
  382. package/dist/oauth/metadata.js.map +1 -0
  383. package/dist/oauth/pending-store.d.ts +79 -0
  384. package/dist/oauth/pending-store.d.ts.map +1 -0
  385. package/dist/oauth/pending-store.js +133 -0
  386. package/dist/oauth/pending-store.js.map +1 -0
  387. package/dist/oauth/pkce.d.ts +16 -0
  388. package/dist/oauth/pkce.d.ts.map +1 -0
  389. package/dist/oauth/pkce.js +29 -0
  390. package/dist/oauth/pkce.js.map +1 -0
  391. package/dist/oauth/validate.d.ts +25 -0
  392. package/dist/oauth/validate.d.ts.map +1 -0
  393. package/dist/oauth/validate.js +62 -0
  394. package/dist/oauth/validate.js.map +1 -0
  395. package/dist/oauth/www-authenticate.d.ts +9 -0
  396. package/dist/oauth/www-authenticate.d.ts.map +1 -0
  397. package/dist/oauth/www-authenticate.js +33 -0
  398. package/dist/oauth/www-authenticate.js.map +1 -0
  399. package/dist/oauth-api.d.ts +19 -0
  400. package/dist/oauth-api.d.ts.map +1 -1
  401. package/dist/oauth-api.js +531 -12
  402. package/dist/oauth-api.js.map +1 -1
  403. package/dist/openai-api.d.ts.map +1 -1
  404. package/dist/openai-api.js +4 -9
  405. package/dist/openai-api.js.map +1 -1
  406. package/dist/pack-snapshot.d.ts +24 -0
  407. package/dist/pack-snapshot.d.ts.map +1 -0
  408. package/dist/pack-snapshot.js +35 -0
  409. package/dist/pack-snapshot.js.map +1 -0
  410. package/dist/plugins/websocket.d.ts +21 -4
  411. package/dist/plugins/websocket.d.ts.map +1 -1
  412. package/dist/plugins/websocket.js +136 -290
  413. package/dist/plugins/websocket.js.map +1 -1
  414. package/dist/resolve-media-urls.d.ts +17 -3
  415. package/dist/resolve-media-urls.d.ts.map +1 -1
  416. package/dist/resolve-media-urls.js +117 -31
  417. package/dist/resolve-media-urls.js.map +1 -1
  418. package/dist/resource-events.d.ts +28 -0
  419. package/dist/resource-events.d.ts.map +1 -0
  420. package/dist/resource-events.js +20 -0
  421. package/dist/resource-events.js.map +1 -0
  422. package/dist/routes/account.d.ts +100 -0
  423. package/dist/routes/account.d.ts.map +1 -0
  424. package/dist/routes/account.js +197 -0
  425. package/dist/routes/account.js.map +1 -0
  426. package/dist/routes/applications.d.ts +36 -0
  427. package/dist/routes/applications.d.ts.map +1 -0
  428. package/dist/routes/applications.js +183 -0
  429. package/dist/routes/applications.js.map +1 -0
  430. package/dist/routes/assets.d.ts +3 -3
  431. package/dist/routes/assets.d.ts.map +1 -1
  432. package/dist/routes/assets.js +78 -44
  433. package/dist/routes/assets.js.map +1 -1
  434. package/dist/routes/atlascloud-webhook.d.ts +93 -0
  435. package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
  436. package/dist/routes/atlascloud-webhook.js +369 -0
  437. package/dist/routes/atlascloud-webhook.js.map +1 -0
  438. package/dist/routes/collections.d.ts.map +1 -1
  439. package/dist/routes/config.d.ts +26 -0
  440. package/dist/routes/config.d.ts.map +1 -0
  441. package/dist/routes/config.js +64 -0
  442. package/dist/routes/config.js.map +1 -0
  443. package/dist/routes/documents.d.ts +27 -0
  444. package/dist/routes/documents.d.ts.map +1 -0
  445. package/dist/routes/documents.js +155 -0
  446. package/dist/routes/documents.js.map +1 -0
  447. package/dist/routes/fal-credits.d.ts +4 -0
  448. package/dist/routes/fal-credits.d.ts.map +1 -0
  449. package/dist/routes/fal-credits.js +101 -0
  450. package/dist/routes/fal-credits.js.map +1 -0
  451. package/dist/routes/fal-pricing-estimate.d.ts +4 -0
  452. package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
  453. package/dist/routes/fal-pricing-estimate.js +114 -0
  454. package/dist/routes/fal-pricing-estimate.js.map +1 -0
  455. package/dist/routes/fal-pricing.d.ts +4 -0
  456. package/dist/routes/fal-pricing.d.ts.map +1 -0
  457. package/dist/routes/fal-pricing.js +93 -0
  458. package/dist/routes/fal-pricing.js.map +1 -0
  459. package/dist/routes/fal-webhook.d.ts +102 -0
  460. package/dist/routes/fal-webhook.d.ts.map +1 -0
  461. package/dist/routes/fal-webhook.js +379 -0
  462. package/dist/routes/fal-webhook.js.map +1 -0
  463. package/dist/routes/files.d.ts.map +1 -1
  464. package/dist/routes/files.js +4 -3
  465. package/dist/routes/files.js.map +1 -1
  466. package/dist/routes/health.d.ts +1 -0
  467. package/dist/routes/health.d.ts.map +1 -1
  468. package/dist/routes/health.js +41 -7
  469. package/dist/routes/health.js.map +1 -1
  470. package/dist/routes/integrations.d.ts +39 -0
  471. package/dist/routes/integrations.d.ts.map +1 -0
  472. package/dist/routes/integrations.js +211 -0
  473. package/dist/routes/integrations.js.map +1 -0
  474. package/dist/routes/js-scripts.d.ts +26 -0
  475. package/dist/routes/js-scripts.d.ts.map +1 -0
  476. package/dist/routes/js-scripts.js +116 -0
  477. package/dist/routes/js-scripts.js.map +1 -0
  478. package/dist/routes/kie-credits.d.ts +4 -0
  479. package/dist/routes/kie-credits.d.ts.map +1 -0
  480. package/dist/routes/kie-credits.js +93 -0
  481. package/dist/routes/kie-credits.js.map +1 -0
  482. package/dist/routes/kie-pricing.d.ts +4 -0
  483. package/dist/routes/kie-pricing.d.ts.map +1 -0
  484. package/dist/routes/kie-pricing.js +45 -0
  485. package/dist/routes/kie-pricing.js.map +1 -0
  486. package/dist/routes/kie-webhook.d.ts +4 -0
  487. package/dist/routes/kie-webhook.d.ts.map +1 -0
  488. package/dist/routes/kie-webhook.js +70 -0
  489. package/dist/routes/kie-webhook.js.map +1 -0
  490. package/dist/routes/nodes.d.ts.map +1 -1
  491. package/dist/routes/nodes.js +6 -59
  492. package/dist/routes/nodes.js.map +1 -1
  493. package/dist/routes/oauth-as.d.ts +30 -0
  494. package/dist/routes/oauth-as.d.ts.map +1 -0
  495. package/dist/routes/oauth-as.js +412 -0
  496. package/dist/routes/oauth-as.js.map +1 -0
  497. package/dist/routes/oauth.d.ts.map +1 -1
  498. package/dist/routes/openai.d.ts.map +1 -1
  499. package/dist/routes/public-apps.d.ts +27 -0
  500. package/dist/routes/public-apps.d.ts.map +1 -0
  501. package/dist/routes/public-apps.js +99 -0
  502. package/dist/routes/public-apps.js.map +1 -0
  503. package/dist/routes/sandbox-modules.d.ts +17 -0
  504. package/dist/routes/sandbox-modules.d.ts.map +1 -0
  505. package/dist/routes/sandbox-modules.js +85 -0
  506. package/dist/routes/sandbox-modules.js.map +1 -0
  507. package/dist/routes/sdk-v1.d.ts +24 -0
  508. package/dist/routes/sdk-v1.d.ts.map +1 -0
  509. package/dist/routes/sdk-v1.js +320 -0
  510. package/dist/routes/sdk-v1.js.map +1 -0
  511. package/dist/routes/storage.d.ts.map +1 -1
  512. package/dist/routes/storyboards.d.ts +16 -0
  513. package/dist/routes/storyboards.d.ts.map +1 -0
  514. package/dist/routes/storyboards.js +97 -0
  515. package/dist/routes/storyboards.js.map +1 -0
  516. package/dist/routes/timeline-animations.d.ts +23 -0
  517. package/dist/routes/timeline-animations.d.ts.map +1 -0
  518. package/dist/routes/timeline-animations.js +99 -0
  519. package/dist/routes/timeline-animations.js.map +1 -0
  520. package/dist/routes/timeline-audio-bake.d.ts +51 -0
  521. package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
  522. package/dist/routes/timeline-audio-bake.js +110 -0
  523. package/dist/routes/timeline-audio-bake.js.map +1 -0
  524. package/dist/routes/timeline-fonts.d.ts +29 -0
  525. package/dist/routes/timeline-fonts.d.ts.map +1 -0
  526. package/dist/routes/timeline-fonts.js +64 -0
  527. package/dist/routes/timeline-fonts.js.map +1 -0
  528. package/dist/routes/timeline-isolate-subject.d.ts +55 -0
  529. package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
  530. package/dist/routes/timeline-isolate-subject.js +128 -0
  531. package/dist/routes/timeline-isolate-subject.js.map +1 -0
  532. package/dist/routes/timeline-track-object.d.ts +39 -0
  533. package/dist/routes/timeline-track-object.d.ts.map +1 -0
  534. package/dist/routes/timeline-track-object.js +97 -0
  535. package/dist/routes/timeline-track-object.js.map +1 -0
  536. package/dist/routes/timelines.d.ts +18 -0
  537. package/dist/routes/timelines.d.ts.map +1 -0
  538. package/dist/routes/timelines.js +191 -0
  539. package/dist/routes/timelines.js.map +1 -0
  540. package/dist/routes/workflows.d.ts +6 -9
  541. package/dist/routes/workflows.d.ts.map +1 -1
  542. package/dist/routes/workflows.js +100 -11
  543. package/dist/routes/workflows.js.map +1 -1
  544. package/dist/routes/workspace.d.ts.map +1 -1
  545. package/dist/run-supervisor.d.ts +30 -0
  546. package/dist/run-supervisor.d.ts.map +1 -0
  547. package/dist/run-supervisor.js +86 -0
  548. package/dist/run-supervisor.js.map +1 -0
  549. package/dist/sandbox-catalog.d.ts +28 -0
  550. package/dist/sandbox-catalog.d.ts.map +1 -0
  551. package/dist/sandbox-catalog.js +74 -0
  552. package/dist/sandbox-catalog.js.map +1 -0
  553. package/dist/screenshot-projects.d.ts +27 -0
  554. package/dist/screenshot-projects.d.ts.map +1 -0
  555. package/dist/screenshot-projects.js +880 -0
  556. package/dist/screenshot-projects.js.map +1 -0
  557. package/dist/screenshot-server.js +947 -43
  558. package/dist/screenshot-server.js.map +1 -1
  559. package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
  560. package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
  561. package/dist/sdk/sdk-cached-model-inventory.js +51 -0
  562. package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
  563. package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
  564. package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
  565. package/dist/sdk/sdk-capabilities-service.js +47 -0
  566. package/dist/sdk/sdk-capabilities-service.js.map +1 -0
  567. package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
  568. package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
  569. package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
  570. package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
  571. package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
  572. package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
  573. package/dist/sdk/sdk-execution-target-readiness.js +50 -0
  574. package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
  575. package/dist/sdk/sdk-feature-flags.d.ts +18 -0
  576. package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
  577. package/dist/sdk/sdk-feature-flags.js +30 -0
  578. package/dist/sdk/sdk-feature-flags.js.map +1 -0
  579. package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
  580. package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
  581. package/dist/sdk/sdk-huggingface-download-state.js +25 -0
  582. package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
  583. package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
  584. package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
  585. package/dist/sdk/sdk-live-runner-registry.js +26 -0
  586. package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
  587. package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
  588. package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
  589. package/dist/sdk/sdk-model-catalog-service.js +219 -0
  590. package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
  591. package/dist/sdk/sdk-model-download-service.d.ts +39 -0
  592. package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
  593. package/dist/sdk/sdk-model-download-service.js +274 -0
  594. package/dist/sdk/sdk-model-download-service.js.map +1 -0
  595. package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
  596. package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
  597. package/dist/sdk/sdk-model-requirement-probe.js +120 -0
  598. package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
  599. package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
  600. package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
  601. package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
  602. package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
  603. package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
  604. package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
  605. package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
  606. package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
  607. package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
  608. package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
  609. package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
  610. package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
  611. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
  612. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
  613. package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
  614. package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
  615. package/dist/sdk/sdk-preflight-service.d.ts +61 -0
  616. package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
  617. package/dist/sdk/sdk-preflight-service.js +104 -0
  618. package/dist/sdk/sdk-preflight-service.js.map +1 -0
  619. package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
  620. package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
  621. package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
  622. package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
  623. package/dist/sdk/sdk-route-policy.d.ts +3 -0
  624. package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
  625. package/dist/sdk/sdk-route-policy.js +18 -0
  626. package/dist/sdk/sdk-route-policy.js.map +1 -0
  627. package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
  628. package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
  629. package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
  630. package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
  631. package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
  632. package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
  633. package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
  634. package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
  635. package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
  636. package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
  637. package/dist/sdk/sdk-static-preflight-service.js +492 -0
  638. package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
  639. package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
  640. package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
  641. package/dist/sdk/sdk-temporary-asset-service.js +33 -0
  642. package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
  643. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
  644. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
  645. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
  646. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
  647. package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
  648. package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
  649. package/dist/sdk/sdk-v1-handler-map.js +37 -0
  650. package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
  651. package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
  652. package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
  653. package/dist/sdk/sdk-v1-service-error.js +62 -0
  654. package/dist/sdk/sdk-v1-service-error.js.map +1 -0
  655. package/dist/sdk/sdk-v1-service.d.ts +74 -0
  656. package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
  657. package/dist/sdk/sdk-v1-service.js +219 -0
  658. package/dist/sdk/sdk-v1-service.js.map +1 -0
  659. package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
  660. package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
  661. package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
  662. package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
  663. package/dist/server.js +1019 -201
  664. package/dist/server.js.map +1 -1
  665. package/dist/session/asset-autosave.d.ts +80 -0
  666. package/dist/session/asset-autosave.d.ts.map +1 -0
  667. package/dist/session/asset-autosave.js +456 -0
  668. package/dist/session/asset-autosave.js.map +1 -0
  669. package/dist/session/chat-compaction.d.ts +107 -0
  670. package/dist/session/chat-compaction.d.ts.map +1 -0
  671. package/dist/session/chat-compaction.js +191 -0
  672. package/dist/session/chat-compaction.js.map +1 -0
  673. package/dist/session/chat-history.d.ts +75 -0
  674. package/dist/session/chat-history.d.ts.map +1 -0
  675. package/dist/session/chat-history.js +194 -0
  676. package/dist/session/chat-history.js.map +1 -0
  677. package/dist/session/chat-prompt.d.ts +45 -0
  678. package/dist/session/chat-prompt.d.ts.map +1 -0
  679. package/dist/session/chat-prompt.js +480 -0
  680. package/dist/session/chat-prompt.js.map +1 -0
  681. package/dist/session/chat-turn.d.ts +336 -0
  682. package/dist/session/chat-turn.d.ts.map +1 -0
  683. package/dist/session/chat-turn.js +3516 -0
  684. package/dist/session/chat-turn.js.map +1 -0
  685. package/dist/session/client-session.d.ts +59 -0
  686. package/dist/session/client-session.d.ts.map +1 -0
  687. package/dist/session/client-session.js +2 -0
  688. package/dist/session/client-session.js.map +1 -0
  689. package/dist/session/commands.d.ts +133 -0
  690. package/dist/session/commands.d.ts.map +1 -0
  691. package/dist/session/commands.js +778 -0
  692. package/dist/session/commands.js.map +1 -0
  693. package/dist/session/inference.d.ts +213 -0
  694. package/dist/session/inference.d.ts.map +1 -0
  695. package/dist/session/inference.js +1072 -0
  696. package/dist/session/inference.js.map +1 -0
  697. package/dist/session/job-execution.d.ts +477 -0
  698. package/dist/session/job-execution.d.ts.map +1 -0
  699. package/dist/session/job-execution.js +2089 -0
  700. package/dist/session/job-execution.js.map +1 -0
  701. package/dist/session/media-generation.d.ts +94 -0
  702. package/dist/session/media-generation.d.ts.map +1 -0
  703. package/dist/session/media-generation.js +234 -0
  704. package/dist/session/media-generation.js.map +1 -0
  705. package/dist/session/model-interfaces.d.ts +27 -0
  706. package/dist/session/model-interfaces.d.ts.map +1 -0
  707. package/dist/session/model-interfaces.js +132 -0
  708. package/dist/session/model-interfaces.js.map +1 -0
  709. package/dist/session/sanitize.d.ts +7 -0
  710. package/dist/session/sanitize.d.ts.map +1 -0
  711. package/dist/session/sanitize.js +64 -0
  712. package/dist/session/sanitize.js.map +1 -0
  713. package/dist/settings-registry.d.ts +6 -15
  714. package/dist/settings-registry.d.ts.map +1 -1
  715. package/dist/settings-registry.js +6 -103
  716. package/dist/settings-registry.js.map +1 -1
  717. package/dist/storage-api.d.ts +20 -0
  718. package/dist/storage-api.d.ts.map +1 -1
  719. package/dist/storage-api.js +260 -77
  720. package/dist/storage-api.js.map +1 -1
  721. package/dist/storage-retention.d.ts +9 -0
  722. package/dist/storage-retention.d.ts.map +1 -0
  723. package/dist/storage-retention.js +74 -0
  724. package/dist/storage-retention.js.map +1 -0
  725. package/dist/system-stats.d.ts +52 -0
  726. package/dist/system-stats.d.ts.map +1 -0
  727. package/dist/system-stats.js +134 -0
  728. package/dist/system-stats.js.map +1 -0
  729. package/dist/test-ui-server.d.ts +46 -0
  730. package/dist/test-ui-server.d.ts.map +1 -1
  731. package/dist/test-ui-server.js +188 -41
  732. package/dist/test-ui-server.js.map +1 -1
  733. package/dist/triggers/boot.d.ts +73 -0
  734. package/dist/triggers/boot.d.ts.map +1 -0
  735. package/dist/triggers/boot.js +149 -0
  736. package/dist/triggers/boot.js.map +1 -0
  737. package/dist/triggers/dispatcher.d.ts +234 -0
  738. package/dist/triggers/dispatcher.d.ts.map +1 -0
  739. package/dist/triggers/dispatcher.js +525 -0
  740. package/dist/triggers/dispatcher.js.map +1 -0
  741. package/dist/triggers/file-watch.d.ts +90 -0
  742. package/dist/triggers/file-watch.d.ts.map +1 -0
  743. package/dist/triggers/file-watch.js +405 -0
  744. package/dist/triggers/file-watch.js.map +1 -0
  745. package/dist/triggers/registration-sync.d.ts +34 -0
  746. package/dist/triggers/registration-sync.d.ts.map +1 -0
  747. package/dist/triggers/registration-sync.js +162 -0
  748. package/dist/triggers/registration-sync.js.map +1 -0
  749. package/dist/triggers/schedule-timing.d.ts +52 -0
  750. package/dist/triggers/schedule-timing.d.ts.map +1 -0
  751. package/dist/triggers/schedule-timing.js +90 -0
  752. package/dist/triggers/schedule-timing.js.map +1 -0
  753. package/dist/triggers/scheduler.d.ts +55 -0
  754. package/dist/triggers/scheduler.d.ts.map +1 -0
  755. package/dist/triggers/scheduler.js +122 -0
  756. package/dist/triggers/scheduler.js.map +1 -0
  757. package/dist/triggers/settle.d.ts +66 -0
  758. package/dist/triggers/settle.d.ts.map +1 -0
  759. package/dist/triggers/settle.js +99 -0
  760. package/dist/triggers/settle.js.map +1 -0
  761. package/dist/triggers/stores.d.ts +38 -0
  762. package/dist/triggers/stores.d.ts.map +1 -0
  763. package/dist/triggers/stores.js +168 -0
  764. package/dist/triggers/stores.js.map +1 -0
  765. package/dist/triggers/webhook-route.d.ts +49 -0
  766. package/dist/triggers/webhook-route.d.ts.map +1 -0
  767. package/dist/triggers/webhook-route.js +148 -0
  768. package/dist/triggers/webhook-route.js.map +1 -0
  769. package/dist/trpc/context.d.ts +52 -5
  770. package/dist/trpc/context.d.ts.map +1 -1
  771. package/dist/trpc/context.js +4 -1
  772. package/dist/trpc/context.js.map +1 -1
  773. package/dist/trpc/error-formatter.d.ts.map +1 -1
  774. package/dist/trpc/error-formatter.js +23 -2
  775. package/dist/trpc/error-formatter.js.map +1 -1
  776. package/dist/trpc/error-logging.d.ts +14 -0
  777. package/dist/trpc/error-logging.d.ts.map +1 -0
  778. package/dist/trpc/error-logging.js +27 -0
  779. package/dist/trpc/error-logging.js.map +1 -0
  780. package/dist/trpc/index.d.ts +2 -2
  781. package/dist/trpc/index.d.ts.map +1 -1
  782. package/dist/trpc/index.js +0 -2
  783. package/dist/trpc/index.js.map +1 -1
  784. package/dist/trpc/middleware.d.ts +6 -3
  785. package/dist/trpc/middleware.d.ts.map +1 -1
  786. package/dist/trpc/router.d.ts +29791 -1303
  787. package/dist/trpc/router.d.ts.map +1 -1
  788. package/dist/trpc/router.js +46 -3
  789. package/dist/trpc/router.js.map +1 -1
  790. package/dist/trpc/routers/agent-access.d.ts +149 -0
  791. package/dist/trpc/routers/agent-access.d.ts.map +1 -0
  792. package/dist/trpc/routers/agent-access.js +224 -0
  793. package/dist/trpc/routers/agent-access.js.map +1 -0
  794. package/dist/trpc/routers/applications.d.ts +1117 -0
  795. package/dist/trpc/routers/applications.d.ts.map +1 -0
  796. package/dist/trpc/routers/applications.js +218 -0
  797. package/dist/trpc/routers/applications.js.map +1 -0
  798. package/dist/trpc/routers/assets.d.ts +184 -42
  799. package/dist/trpc/routers/assets.d.ts.map +1 -1
  800. package/dist/trpc/routers/assets.js +499 -105
  801. package/dist/trpc/routers/assets.js.map +1 -1
  802. package/dist/trpc/routers/code-gen.d.ts +99 -0
  803. package/dist/trpc/routers/code-gen.d.ts.map +1 -0
  804. package/dist/trpc/routers/code-gen.js +164 -0
  805. package/dist/trpc/routers/code-gen.js.map +1 -0
  806. package/dist/trpc/routers/collections.d.ts +1 -26
  807. package/dist/trpc/routers/collections.d.ts.map +1 -1
  808. package/dist/trpc/routers/collections.js +145 -78
  809. package/dist/trpc/routers/collections.js.map +1 -1
  810. package/dist/trpc/routers/costs.d.ts +40 -96
  811. package/dist/trpc/routers/costs.d.ts.map +1 -1
  812. package/dist/trpc/routers/costs.js +14 -89
  813. package/dist/trpc/routers/costs.js.map +1 -1
  814. package/dist/trpc/routers/credits.d.ts +110 -0
  815. package/dist/trpc/routers/credits.d.ts.map +1 -0
  816. package/dist/trpc/routers/credits.js +69 -0
  817. package/dist/trpc/routers/credits.js.map +1 -0
  818. package/dist/trpc/routers/custom-providers.d.ts +88 -0
  819. package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
  820. package/dist/trpc/routers/custom-providers.js +140 -0
  821. package/dist/trpc/routers/custom-providers.js.map +1 -0
  822. package/dist/trpc/routers/documents.d.ts +61 -0
  823. package/dist/trpc/routers/documents.d.ts.map +1 -0
  824. package/dist/trpc/routers/documents.js +23 -0
  825. package/dist/trpc/routers/documents.js.map +1 -0
  826. package/dist/trpc/routers/extension.d.ts +24 -0
  827. package/dist/trpc/routers/extension.d.ts.map +1 -0
  828. package/dist/trpc/routers/extension.js +28 -0
  829. package/dist/trpc/routers/extension.js.map +1 -0
  830. package/dist/trpc/routers/external-mcp.d.ts +108 -0
  831. package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
  832. package/dist/trpc/routers/external-mcp.js +70 -0
  833. package/dist/trpc/routers/external-mcp.js.map +1 -0
  834. package/dist/trpc/routers/files.d.ts +9 -2
  835. package/dist/trpc/routers/files.d.ts.map +1 -1
  836. package/dist/trpc/routers/files.js +67 -37
  837. package/dist/trpc/routers/files.js.map +1 -1
  838. package/dist/trpc/routers/fonts.d.ts +30 -0
  839. package/dist/trpc/routers/fonts.d.ts.map +1 -0
  840. package/dist/trpc/routers/fonts.js +112 -0
  841. package/dist/trpc/routers/fonts.js.map +1 -0
  842. package/dist/trpc/routers/games.d.ts +7610 -0
  843. package/dist/trpc/routers/games.d.ts.map +1 -0
  844. package/dist/trpc/routers/games.js +456 -0
  845. package/dist/trpc/routers/games.js.map +1 -0
  846. package/dist/trpc/routers/integrations.d.ts +86 -0
  847. package/dist/trpc/routers/integrations.d.ts.map +1 -0
  848. package/dist/trpc/routers/integrations.js +129 -0
  849. package/dist/trpc/routers/integrations.js.map +1 -0
  850. package/dist/trpc/routers/jobs.d.ts +88 -27
  851. package/dist/trpc/routers/jobs.d.ts.map +1 -1
  852. package/dist/trpc/routers/jobs.js +113 -35
  853. package/dist/trpc/routers/jobs.js.map +1 -1
  854. package/dist/trpc/routers/js-scripts.d.ts +410 -0
  855. package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
  856. package/dist/trpc/routers/js-scripts.js +303 -0
  857. package/dist/trpc/routers/js-scripts.js.map +1 -0
  858. package/dist/trpc/routers/mcp-config.d.ts +1 -1
  859. package/dist/trpc/routers/mcp-config.js +5 -3
  860. package/dist/trpc/routers/mcp-config.js.map +1 -1
  861. package/dist/trpc/routers/memories.d.ts +79 -0
  862. package/dist/trpc/routers/memories.d.ts.map +1 -0
  863. package/dist/trpc/routers/memories.js +66 -0
  864. package/dist/trpc/routers/memories.js.map +1 -0
  865. package/dist/trpc/routers/messages.d.ts +4 -77
  866. package/dist/trpc/routers/messages.d.ts.map +1 -1
  867. package/dist/trpc/routers/messages.js +9 -58
  868. package/dist/trpc/routers/messages.js.map +1 -1
  869. package/dist/trpc/routers/models.d.ts +1403 -238
  870. package/dist/trpc/routers/models.d.ts.map +1 -1
  871. package/dist/trpc/routers/models.js +532 -294
  872. package/dist/trpc/routers/models.js.map +1 -1
  873. package/dist/trpc/routers/nodes.d.ts +32 -16
  874. package/dist/trpc/routers/nodes.d.ts.map +1 -1
  875. package/dist/trpc/routers/nodes.js +70 -31
  876. package/dist/trpc/routers/nodes.js.map +1 -1
  877. package/dist/trpc/routers/packs.d.ts +184 -0
  878. package/dist/trpc/routers/packs.d.ts.map +1 -0
  879. package/dist/trpc/routers/packs.js +259 -0
  880. package/dist/trpc/routers/packs.js.map +1 -0
  881. package/dist/trpc/routers/projects.d.ts +422 -0
  882. package/dist/trpc/routers/projects.d.ts.map +1 -0
  883. package/dist/trpc/routers/projects.js +373 -0
  884. package/dist/trpc/routers/projects.js.map +1 -0
  885. package/dist/trpc/routers/resources.d.ts +120 -0
  886. package/dist/trpc/routers/resources.d.ts.map +1 -0
  887. package/dist/trpc/routers/resources.js +212 -0
  888. package/dist/trpc/routers/resources.js.map +1 -0
  889. package/dist/trpc/routers/scripts.d.ts +1116 -0
  890. package/dist/trpc/routers/scripts.d.ts.map +1 -0
  891. package/dist/trpc/routers/scripts.js +131 -0
  892. package/dist/trpc/routers/scripts.js.map +1 -0
  893. package/dist/trpc/routers/segmentation.d.ts +62 -0
  894. package/dist/trpc/routers/segmentation.d.ts.map +1 -0
  895. package/dist/trpc/routers/segmentation.js +146 -0
  896. package/dist/trpc/routers/segmentation.js.map +1 -0
  897. package/dist/trpc/routers/settings.d.ts +177 -10
  898. package/dist/trpc/routers/settings.d.ts.map +1 -1
  899. package/dist/trpc/routers/settings.js +123 -33
  900. package/dist/trpc/routers/settings.js.map +1 -1
  901. package/dist/trpc/routers/sketch.d.ts +854 -0
  902. package/dist/trpc/routers/sketch.d.ts.map +1 -0
  903. package/dist/trpc/routers/sketch.js +617 -0
  904. package/dist/trpc/routers/sketch.js.map +1 -0
  905. package/dist/trpc/routers/skills.d.ts +76 -22
  906. package/dist/trpc/routers/skills.d.ts.map +1 -1
  907. package/dist/trpc/routers/skills.js +195 -170
  908. package/dist/trpc/routers/skills.js.map +1 -1
  909. package/dist/trpc/routers/storage.d.ts +3 -30
  910. package/dist/trpc/routers/storage.d.ts.map +1 -1
  911. package/dist/trpc/routers/storage.js +60 -117
  912. package/dist/trpc/routers/storage.js.map +1 -1
  913. package/dist/trpc/routers/storyboards.d.ts +5907 -0
  914. package/dist/trpc/routers/storyboards.d.ts.map +1 -0
  915. package/dist/trpc/routers/storyboards.js +156 -0
  916. package/dist/trpc/routers/storyboards.js.map +1 -0
  917. package/dist/trpc/routers/threads.d.ts +33 -21
  918. package/dist/trpc/routers/threads.d.ts.map +1 -1
  919. package/dist/trpc/routers/threads.js +36 -30
  920. package/dist/trpc/routers/threads.js.map +1 -1
  921. package/dist/trpc/routers/timeline.d.ts +8516 -0
  922. package/dist/trpc/routers/timeline.d.ts.map +1 -0
  923. package/dist/trpc/routers/timeline.js +493 -0
  924. package/dist/trpc/routers/timeline.js.map +1 -0
  925. package/dist/trpc/routers/triggers.d.ts +46 -0
  926. package/dist/trpc/routers/triggers.d.ts.map +1 -0
  927. package/dist/trpc/routers/triggers.js +117 -0
  928. package/dist/trpc/routers/triggers.js.map +1 -0
  929. package/dist/trpc/routers/users.d.ts +1 -14
  930. package/dist/trpc/routers/users.d.ts.map +1 -1
  931. package/dist/trpc/routers/users.js +1 -12
  932. package/dist/trpc/routers/users.js.map +1 -1
  933. package/dist/trpc/routers/worker.d.ts +242 -0
  934. package/dist/trpc/routers/worker.d.ts.map +1 -0
  935. package/dist/trpc/routers/worker.js +220 -0
  936. package/dist/trpc/routers/worker.js.map +1 -0
  937. package/dist/trpc/routers/workflows.d.ts +385 -197
  938. package/dist/trpc/routers/workflows.d.ts.map +1 -1
  939. package/dist/trpc/routers/workflows.js +326 -345
  940. package/dist/trpc/routers/workflows.js.map +1 -1
  941. package/dist/trpc/routers/workspace.d.ts +59 -33
  942. package/dist/trpc/routers/workspace.d.ts.map +1 -1
  943. package/dist/trpc/routers/workspace.js +230 -93
  944. package/dist/trpc/routers/workspace.js.map +1 -1
  945. package/dist/trpc/sandbox-coverage.d.ts +64 -0
  946. package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
  947. package/dist/trpc/sandbox-coverage.js +1049 -0
  948. package/dist/trpc/sandbox-coverage.js.map +1 -0
  949. package/dist/websocket-client-session.d.ts +320 -0
  950. package/dist/websocket-client-session.d.ts.map +1 -0
  951. package/dist/websocket-client-session.js +1253 -0
  952. package/dist/websocket-client-session.js.map +1 -0
  953. package/dist/workflow-interface-service.d.ts +87 -0
  954. package/dist/workflow-interface-service.d.ts.map +1 -0
  955. package/dist/workflow-interface-service.js +131 -0
  956. package/dist/workflow-interface-service.js.map +1 -0
  957. package/dist/workspace-api.d.ts.map +1 -1
  958. package/dist/workspace-api.js +33 -23
  959. package/dist/workspace-api.js.map +1 -1
  960. package/dist/ws-adapter.d.ts +46 -3
  961. package/dist/ws-adapter.d.ts.map +1 -1
  962. package/dist/ws-adapter.js +164 -26
  963. package/dist/ws-adapter.js.map +1 -1
  964. package/package.json +81 -35
  965. package/dist/agent/agent-runtime.d.ts +0 -47
  966. package/dist/agent/agent-runtime.d.ts.map +0 -1
  967. package/dist/agent/agent-runtime.js +0 -579
  968. package/dist/agent/agent-runtime.js.map +0 -1
  969. package/dist/agent/codex-agent.d.ts +0 -41
  970. package/dist/agent/codex-agent.d.ts.map +0 -1
  971. package/dist/agent/codex-agent.js +0 -334
  972. package/dist/agent/codex-agent.js.map +0 -1
  973. package/dist/agent/index.d.ts +0 -6
  974. package/dist/agent/index.d.ts.map +0 -1
  975. package/dist/agent/index.js +0 -4
  976. package/dist/agent/index.js.map +0 -1
  977. package/dist/agent/llm-agent.d.ts +0 -51
  978. package/dist/agent/llm-agent.d.ts.map +0 -1
  979. package/dist/agent/llm-agent.js +0 -526
  980. package/dist/agent/llm-agent.js.map +0 -1
  981. package/dist/agent/mcp-tool-server.d.ts +0 -33
  982. package/dist/agent/mcp-tool-server.d.ts.map +0 -1
  983. package/dist/agent/mcp-tool-server.js +0 -292
  984. package/dist/agent/mcp-tool-server.js.map +0 -1
  985. package/dist/agent/opencode-agent.d.ts +0 -32
  986. package/dist/agent/opencode-agent.d.ts.map +0 -1
  987. package/dist/agent/opencode-agent.js +0 -332
  988. package/dist/agent/opencode-agent.js.map +0 -1
  989. package/dist/agent/pi-agent.d.ts +0 -42
  990. package/dist/agent/pi-agent.d.ts.map +0 -1
  991. package/dist/agent/pi-agent.js +0 -429
  992. package/dist/agent/pi-agent.js.map +0 -1
  993. package/dist/agent/sdk-provider.d.ts +0 -46
  994. package/dist/agent/sdk-provider.d.ts.map +0 -1
  995. package/dist/agent/sdk-provider.js +0 -50
  996. package/dist/agent/sdk-provider.js.map +0 -1
  997. package/dist/agent/socket-route.d.ts +0 -11
  998. package/dist/agent/socket-route.d.ts.map +0 -1
  999. package/dist/agent/socket-route.js +0 -262
  1000. package/dist/agent/socket-route.js.map +0 -1
  1001. package/dist/agent/transport.d.ts +0 -39
  1002. package/dist/agent/transport.d.ts.map +0 -1
  1003. package/dist/agent/transport.js +0 -17
  1004. package/dist/agent/transport.js.map +0 -1
  1005. package/dist/agent/types.d.ts +0 -11
  1006. package/dist/agent/types.d.ts.map +0 -1
  1007. package/dist/agent/types.js +0 -10
  1008. package/dist/agent/types.js.map +0 -1
  1009. package/dist/routes/jobs.d.ts +0 -16
  1010. package/dist/routes/jobs.d.ts.map +0 -1
  1011. package/dist/routes/jobs.js +0 -25
  1012. package/dist/routes/jobs.js.map +0 -1
  1013. package/dist/trpc/routers/sandboxes.d.ts +0 -64
  1014. package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
  1015. package/dist/trpc/routers/sandboxes.js +0 -327
  1016. package/dist/trpc/routers/sandboxes.js.map +0 -1
  1017. package/dist/unified-websocket-runner.d.ts +0 -280
  1018. package/dist/unified-websocket-runner.d.ts.map +0 -1
  1019. package/dist/unified-websocket-runner.js +0 -3840
  1020. 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 { Asset } from "@nodetool-ai/models";
15
- import { buildAssetUrl } from "@nodetool-ai/config";
16
- import { getAssetFileName, getAssetStoragePath } from "../../lib/asset-paths.js";
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, createInput, updateInput, deleteInput, deleteOutput, childrenInput, childrenOutput, recursiveInput, recursiveOutput, searchInput, searchOutput, byFilenameInput } from "@nodetool-ai/protocol/api-schemas/assets.js";
22
- function toAssetResponse(asset) {
23
- const isFolder = asset.content_type === "folder";
24
- const fileName = isFolder
25
- ? null
26
- : getAssetFileName(asset.id, asset.content_type);
27
- const getUrl = fileName ? buildAssetUrl(fileName) : null;
28
- const hasThumbnail = asset.content_type.startsWith("image/") ||
29
- asset.content_type.startsWith("video/");
30
- const updatedTs = asset.updated_at
31
- ? Math.floor(new Date(asset.updated_at).getTime() / 1000)
32
- : 0;
33
- const thumbUrl = hasThumbnail
34
- ? `/api/assets/${asset.id}/thumbnail?t=${updatedTs}`
35
- : null;
36
- return {
37
- id: asset.id,
38
- user_id: asset.user_id,
39
- workflow_id: asset.workflow_id ?? null,
40
- parent_id: asset.parent_id ?? null,
41
- name: asset.name,
42
- content_type: asset.content_type,
43
- size: asset.size ?? null,
44
- metadata: asset.metadata ?? null,
45
- created_at: asset.created_at,
46
- get_url: getUrl,
47
- thumb_url: thumbUrl,
48
- duration: asset.duration ?? null,
49
- node_id: asset.node_id ?? null,
50
- job_id: asset.job_id ?? null
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
- /** Recursively delete a folder and collect all deleted asset ids. */
54
- async function deleteFolderRecursive(userId, folderId) {
55
- const deletedIds = [];
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
- for (const child of children) {
88
+ const deletedIdsArrays = await Promise.all(children.map(async (child) => {
58
89
  if (child.content_type === "folder") {
59
- const subDeleted = await deleteFolderRecursive(userId, child.id);
60
- deletedIds.push(...subDeleted);
90
+ return deleteFolderRecursive(userId, child.id, visited);
61
91
  }
62
92
  else {
63
- await child.delete();
64
- deletedIds.push(child.id);
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 [assets, cursor] = await Asset.paginate(ctx.userId, {
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
- create: protectedProcedure
143
- .input(createInput)
144
- .output(assetResponse)
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: input.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
- size: input.size ?? null
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
- if (input.metadata !== undefined)
175
- asset.metadata = input.metadata;
176
- if (input.size !== undefined)
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
- const filePath = nodePath.join(storagePath, fileName);
186
- await mkdir(storagePath, { recursive: true });
187
- await writeFile(filePath, buf);
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.delete();
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 { assets: assets.map((a) => toAssetResponse(a)) };
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
- const [allAssets, nextCursor] = await Asset.paginate(ctx.userId, {
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
- const lowerQuery = input.query.toLowerCase();
243
- const matched = allAssets.filter((a) => a.name.toLowerCase().includes(lowerQuery));
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