@fragno-dev/upload 0.1.1 → 0.1.3

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 (301) hide show
  1. package/README.md +148 -12
  2. package/dist/browser/client/clients.js +17 -9
  3. package/dist/browser/client/clients.js.map +1 -1
  4. package/dist/browser/client/helpers.d.ts +15 -6
  5. package/dist/browser/client/helpers.d.ts.map +1 -1
  6. package/dist/browser/client/helpers.js +176 -30
  7. package/dist/browser/client/helpers.js.map +1 -1
  8. package/dist/browser/client/node_modules/.pnpm/{@nanostores_query@0.3.4_nanostores@1.1.0 → @nanostores_query@0.3.4_nanostores@1.2.0}/node_modules/@nanostores/query/dist/nanoquery.js +6 -6
  9. package/dist/browser/client/node_modules/.pnpm/{@nanostores_query@0.3.4_nanostores@1.1.0 → @nanostores_query@0.3.4_nanostores@1.2.0}/node_modules/@nanostores/query/dist/nanoquery.js.map +1 -1
  10. package/dist/browser/client/node_modules/.pnpm/{@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10 → @nanostores_solid@1.1.1_nanostores@1.2.0_solid-js@1.9.10}/node_modules/@nanostores/solid/dist/index.js +2 -2
  11. package/dist/browser/client/node_modules/.pnpm/{@nanostores_solid@1.1.1_nanostores@1.1.0_solid-js@1.9.10 → @nanostores_solid@1.1.1_nanostores@1.2.0_solid-js@1.9.10}/node_modules/@nanostores/solid/dist/index.js.map +1 -1
  12. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/atom/index.js +2 -1
  13. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/atom/index.js.map +1 -0
  14. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/clean-stores/index.js +6 -0
  15. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/clean-stores/index.js.map +1 -1
  16. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/computed/index.js +8 -5
  17. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/computed/index.js.map +1 -0
  18. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js +1 -1
  19. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js.map +1 -1
  20. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/listen-keys/index.js +1 -1
  21. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/listen-keys/index.js.map +1 -1
  22. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js +1 -1
  23. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js.map +1 -1
  24. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js +1 -1
  25. package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js.map +1 -1
  26. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js +16 -0
  27. package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js.map +1 -0
  28. package/dist/browser/client/packages/fragment-upload/src/definition.js +1 -42
  29. package/dist/browser/client/packages/fragment-upload/src/definition.js.map +1 -1
  30. package/dist/browser/client/packages/fragment-upload/src/routes/files.js +12 -5
  31. package/dist/browser/client/packages/fragment-upload/src/routes/files.js.map +1 -1
  32. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js +3 -4
  33. package/dist/browser/client/packages/fragment-upload/src/routes/shared.js.map +1 -1
  34. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js +32 -21
  35. package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js.map +1 -1
  36. package/dist/browser/client/packages/fragment-upload/src/schema.js +33 -3
  37. package/dist/browser/client/packages/fragment-upload/src/schema.js.map +1 -1
  38. package/dist/browser/client/packages/fragment-upload/src/types.d.ts +1 -2
  39. package/dist/browser/client/packages/fragment-upload/src/types.d.ts.map +1 -1
  40. package/dist/browser/client/packages/fragno/dist/client/client.js +28 -12
  41. package/dist/browser/client/packages/fragno/dist/client/client.js.map +1 -1
  42. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js +11 -3
  43. package/dist/browser/client/packages/fragno/dist/client/client.svelte.js.map +1 -1
  44. package/dist/browser/client/packages/fragno/dist/client/react.js +104 -12
  45. package/dist/browser/client/packages/fragno/dist/client/react.js.map +1 -1
  46. package/dist/browser/client/packages/fragno/dist/client/solid.js +25 -11
  47. package/dist/browser/client/packages/fragno/dist/client/solid.js.map +1 -1
  48. package/dist/browser/client/packages/fragno/dist/client/vanilla.js +21 -1
  49. package/dist/browser/client/packages/fragno/dist/client/vanilla.js.map +1 -1
  50. package/dist/browser/client/packages/fragno/dist/client/vue.js +19 -11
  51. package/dist/browser/client/packages/fragno/dist/client/vue.js.map +1 -1
  52. package/dist/browser/client/react.d.ts +215 -192
  53. package/dist/browser/client/react.d.ts.map +1 -1
  54. package/dist/browser/client/react.js.map +1 -1
  55. package/dist/browser/client/solid.d.ts +218 -196
  56. package/dist/browser/client/solid.d.ts.map +1 -1
  57. package/dist/browser/client/solid.js.map +1 -1
  58. package/dist/browser/client/svelte.d.ts +216 -193
  59. package/dist/browser/client/svelte.d.ts.map +1 -1
  60. package/dist/browser/client/svelte.js.map +1 -1
  61. package/dist/browser/client/vanilla.d.ts +217 -195
  62. package/dist/browser/client/vanilla.d.ts.map +1 -1
  63. package/dist/browser/client/vanilla.js.map +1 -1
  64. package/dist/browser/client/vue.d.ts +217 -194
  65. package/dist/browser/client/vue.d.ts.map +1 -1
  66. package/dist/browser/client/vue.js.map +1 -1
  67. package/dist/cli/commands/files/delete.d.ts +4 -4
  68. package/dist/cli/commands/files/delete.d.ts.map +1 -1
  69. package/dist/cli/commands/files/delete.js +8 -10
  70. package/dist/cli/commands/files/delete.js.map +1 -1
  71. package/dist/cli/commands/files/download-url.d.ts +4 -4
  72. package/dist/cli/commands/files/download-url.d.ts.map +1 -1
  73. package/dist/cli/commands/files/download-url.js +8 -10
  74. package/dist/cli/commands/files/download-url.js.map +1 -1
  75. package/dist/cli/commands/files/download.d.ts +4 -4
  76. package/dist/cli/commands/files/download.d.ts.map +1 -1
  77. package/dist/cli/commands/files/download.js +10 -12
  78. package/dist/cli/commands/files/download.js.map +1 -1
  79. package/dist/cli/commands/files/get.d.ts +4 -4
  80. package/dist/cli/commands/files/get.d.ts.map +1 -1
  81. package/dist/cli/commands/files/get.js +8 -10
  82. package/dist/cli/commands/files/get.js.map +1 -1
  83. package/dist/cli/commands/files/list.d.ts +4 -4
  84. package/dist/cli/commands/files/list.d.ts.map +1 -1
  85. package/dist/cli/commands/files/list.js +6 -8
  86. package/dist/cli/commands/files/list.js.map +1 -1
  87. package/dist/cli/commands/files/update.d.ts +4 -4
  88. package/dist/cli/commands/files/update.d.ts.map +1 -1
  89. package/dist/cli/commands/files/update.js +8 -10
  90. package/dist/cli/commands/files/update.js.map +1 -1
  91. package/dist/cli/commands/files/upload.d.ts +4 -4
  92. package/dist/cli/commands/files/upload.d.ts.map +1 -1
  93. package/dist/cli/commands/files/upload.js +10 -12
  94. package/dist/cli/commands/files/upload.js.map +1 -1
  95. package/dist/cli/commands/uploads/abort.d.ts +2 -2
  96. package/dist/cli/commands/uploads/abort.d.ts.map +1 -1
  97. package/dist/cli/commands/uploads/abort.js.map +1 -1
  98. package/dist/cli/commands/uploads/complete.d.ts +2 -2
  99. package/dist/cli/commands/uploads/complete.d.ts.map +1 -1
  100. package/dist/cli/commands/uploads/complete.js.map +1 -1
  101. package/dist/cli/commands/uploads/content.d.ts +2 -2
  102. package/dist/cli/commands/uploads/content.d.ts.map +1 -1
  103. package/dist/cli/commands/uploads/content.js +1 -1
  104. package/dist/cli/commands/uploads/content.js.map +1 -1
  105. package/dist/cli/commands/uploads/create.d.ts +4 -4
  106. package/dist/cli/commands/uploads/create.d.ts.map +1 -1
  107. package/dist/cli/commands/uploads/create.js +8 -11
  108. package/dist/cli/commands/uploads/create.js.map +1 -1
  109. package/dist/cli/commands/uploads/get.d.ts +2 -2
  110. package/dist/cli/commands/uploads/get.d.ts.map +1 -1
  111. package/dist/cli/commands/uploads/get.js.map +1 -1
  112. package/dist/cli/commands/uploads/parts-complete.d.ts +2 -2
  113. package/dist/cli/commands/uploads/parts-complete.d.ts.map +1 -1
  114. package/dist/cli/commands/uploads/parts-complete.js.map +1 -1
  115. package/dist/cli/commands/uploads/parts-list.d.ts +2 -2
  116. package/dist/cli/commands/uploads/parts-list.d.ts.map +1 -1
  117. package/dist/cli/commands/uploads/parts-list.js.map +1 -1
  118. package/dist/cli/commands/uploads/parts-urls.d.ts +2 -2
  119. package/dist/cli/commands/uploads/parts-urls.d.ts.map +1 -1
  120. package/dist/cli/commands/uploads/parts-urls.js.map +1 -1
  121. package/dist/cli/commands/uploads/progress.d.ts +2 -2
  122. package/dist/cli/commands/uploads/progress.d.ts.map +1 -1
  123. package/dist/cli/commands/uploads/progress.js.map +1 -1
  124. package/dist/cli/commands/uploads/transfer.d.ts +4 -4
  125. package/dist/cli/commands/uploads/transfer.d.ts.map +1 -1
  126. package/dist/cli/commands/uploads/transfer.js +9 -12
  127. package/dist/cli/commands/uploads/transfer.js.map +1 -1
  128. package/dist/cli/index.d.ts +13 -13
  129. package/dist/cli/index.d.ts.map +1 -1
  130. package/dist/cli/index.js +14 -14
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/utils/client.js +22 -5
  133. package/dist/cli/utils/client.js.map +1 -1
  134. package/dist/cli/utils/options.js +7 -43
  135. package/dist/cli/utils/options.js.map +1 -1
  136. package/dist/node/cli/commands/files/delete.d.ts +4 -4
  137. package/dist/node/cli/commands/files/delete.d.ts.map +1 -1
  138. package/dist/node/cli/commands/files/delete.js +8 -10
  139. package/dist/node/cli/commands/files/delete.js.map +1 -1
  140. package/dist/node/cli/commands/files/download-url.d.ts +4 -4
  141. package/dist/node/cli/commands/files/download-url.d.ts.map +1 -1
  142. package/dist/node/cli/commands/files/download-url.js +8 -10
  143. package/dist/node/cli/commands/files/download-url.js.map +1 -1
  144. package/dist/node/cli/commands/files/download.d.ts +4 -4
  145. package/dist/node/cli/commands/files/download.d.ts.map +1 -1
  146. package/dist/node/cli/commands/files/download.js +9 -11
  147. package/dist/node/cli/commands/files/download.js.map +1 -1
  148. package/dist/node/cli/commands/files/get.d.ts +4 -4
  149. package/dist/node/cli/commands/files/get.d.ts.map +1 -1
  150. package/dist/node/cli/commands/files/get.js +8 -10
  151. package/dist/node/cli/commands/files/get.js.map +1 -1
  152. package/dist/node/cli/commands/files/list.d.ts +4 -4
  153. package/dist/node/cli/commands/files/list.d.ts.map +1 -1
  154. package/dist/node/cli/commands/files/list.js +6 -8
  155. package/dist/node/cli/commands/files/list.js.map +1 -1
  156. package/dist/node/cli/commands/files/update.d.ts +4 -4
  157. package/dist/node/cli/commands/files/update.d.ts.map +1 -1
  158. package/dist/node/cli/commands/files/update.js +8 -10
  159. package/dist/node/cli/commands/files/update.js.map +1 -1
  160. package/dist/node/cli/commands/files/upload.d.ts +4 -4
  161. package/dist/node/cli/commands/files/upload.d.ts.map +1 -1
  162. package/dist/node/cli/commands/files/upload.js +9 -11
  163. package/dist/node/cli/commands/files/upload.js.map +1 -1
  164. package/dist/node/cli/commands/uploads/abort.d.ts +2 -2
  165. package/dist/node/cli/commands/uploads/abort.d.ts.map +1 -1
  166. package/dist/node/cli/commands/uploads/abort.js.map +1 -1
  167. package/dist/node/cli/commands/uploads/complete.d.ts +2 -2
  168. package/dist/node/cli/commands/uploads/complete.d.ts.map +1 -1
  169. package/dist/node/cli/commands/uploads/complete.js.map +1 -1
  170. package/dist/node/cli/commands/uploads/content.d.ts +2 -2
  171. package/dist/node/cli/commands/uploads/content.d.ts.map +1 -1
  172. package/dist/node/cli/commands/uploads/content.js.map +1 -1
  173. package/dist/node/cli/commands/uploads/create.d.ts +4 -4
  174. package/dist/node/cli/commands/uploads/create.d.ts.map +1 -1
  175. package/dist/node/cli/commands/uploads/create.js +8 -11
  176. package/dist/node/cli/commands/uploads/create.js.map +1 -1
  177. package/dist/node/cli/commands/uploads/get.d.ts +2 -2
  178. package/dist/node/cli/commands/uploads/get.d.ts.map +1 -1
  179. package/dist/node/cli/commands/uploads/get.js.map +1 -1
  180. package/dist/node/cli/commands/uploads/parts-complete.d.ts +2 -2
  181. package/dist/node/cli/commands/uploads/parts-complete.d.ts.map +1 -1
  182. package/dist/node/cli/commands/uploads/parts-complete.js.map +1 -1
  183. package/dist/node/cli/commands/uploads/parts-list.d.ts +2 -2
  184. package/dist/node/cli/commands/uploads/parts-list.d.ts.map +1 -1
  185. package/dist/node/cli/commands/uploads/parts-list.js.map +1 -1
  186. package/dist/node/cli/commands/uploads/parts-urls.d.ts +2 -2
  187. package/dist/node/cli/commands/uploads/parts-urls.d.ts.map +1 -1
  188. package/dist/node/cli/commands/uploads/parts-urls.js.map +1 -1
  189. package/dist/node/cli/commands/uploads/progress.d.ts +2 -2
  190. package/dist/node/cli/commands/uploads/progress.d.ts.map +1 -1
  191. package/dist/node/cli/commands/uploads/progress.js.map +1 -1
  192. package/dist/node/cli/commands/uploads/transfer.d.ts +4 -4
  193. package/dist/node/cli/commands/uploads/transfer.d.ts.map +1 -1
  194. package/dist/node/cli/commands/uploads/transfer.js +8 -11
  195. package/dist/node/cli/commands/uploads/transfer.js.map +1 -1
  196. package/dist/node/cli/index.d.ts +13 -13
  197. package/dist/node/cli/index.d.ts.map +1 -1
  198. package/dist/node/cli/index.js +14 -14
  199. package/dist/node/cli/index.js.map +1 -1
  200. package/dist/node/cli/utils/client.js +22 -5
  201. package/dist/node/cli/utils/client.js.map +1 -1
  202. package/dist/node/cli/utils/options.js +7 -43
  203. package/dist/node/cli/utils/options.js.map +1 -1
  204. package/dist/node/client/clients.d.ts +217 -194
  205. package/dist/node/client/clients.d.ts.map +1 -1
  206. package/dist/node/client/clients.js +17 -9
  207. package/dist/node/client/clients.js.map +1 -1
  208. package/dist/node/client/helpers.d.ts +15 -6
  209. package/dist/node/client/helpers.d.ts.map +1 -1
  210. package/dist/node/client/helpers.js +176 -30
  211. package/dist/node/client/helpers.js.map +1 -1
  212. package/dist/node/client/react.d.ts +217 -194
  213. package/dist/node/client/react.d.ts.map +1 -1
  214. package/dist/node/client/react.js.map +1 -1
  215. package/dist/node/client/solid.d.ts +218 -196
  216. package/dist/node/client/solid.d.ts.map +1 -1
  217. package/dist/node/client/solid.js.map +1 -1
  218. package/dist/node/client/svelte.d.ts +216 -193
  219. package/dist/node/client/svelte.d.ts.map +1 -1
  220. package/dist/node/client/svelte.js.map +1 -1
  221. package/dist/node/client/vanilla.d.ts +217 -195
  222. package/dist/node/client/vanilla.d.ts.map +1 -1
  223. package/dist/node/client/vanilla.js.map +1 -1
  224. package/dist/node/client/vue.d.ts +217 -194
  225. package/dist/node/client/vue.d.ts.map +1 -1
  226. package/dist/node/client/vue.js.map +1 -1
  227. package/dist/node/config.d.ts +6 -6
  228. package/dist/node/config.d.ts.map +1 -1
  229. package/dist/node/config.js.map +1 -1
  230. package/dist/node/definition.d.ts +588 -219
  231. package/dist/node/definition.d.ts.map +1 -1
  232. package/dist/node/definition.js +27 -3
  233. package/dist/node/definition.js.map +1 -1
  234. package/dist/node/file-key.d.ts +19 -0
  235. package/dist/node/file-key.d.ts.map +1 -0
  236. package/dist/node/file-key.js +47 -0
  237. package/dist/node/file-key.js.map +1 -0
  238. package/dist/node/index.d.ts +582 -175
  239. package/dist/node/index.d.ts.map +1 -1
  240. package/dist/node/index.js +3 -2
  241. package/dist/node/index.js.map +1 -1
  242. package/dist/node/routes/files.js +99 -64
  243. package/dist/node/routes/files.js.map +1 -1
  244. package/dist/node/routes/index.d.ts +1497 -721
  245. package/dist/node/routes/index.d.ts.map +1 -1
  246. package/dist/node/routes/shared.js +5 -9
  247. package/dist/node/routes/shared.js.map +1 -1
  248. package/dist/node/routes/uploads.js +105 -47
  249. package/dist/node/routes/uploads.js.map +1 -1
  250. package/dist/node/schema.d.ts +6 -6
  251. package/dist/node/schema.d.ts.map +1 -1
  252. package/dist/node/schema.js +12 -3
  253. package/dist/node/schema.js.map +1 -1
  254. package/dist/node/services/files.d.ts +6 -2
  255. package/dist/node/services/files.d.ts.map +1 -1
  256. package/dist/node/services/files.js +22 -20
  257. package/dist/node/services/files.js.map +1 -1
  258. package/dist/node/services/helpers.js +37 -15
  259. package/dist/node/services/helpers.js.map +1 -1
  260. package/dist/node/services/uploads.d.ts +10 -5
  261. package/dist/node/services/uploads.d.ts.map +1 -1
  262. package/dist/node/services/uploads.js +340 -63
  263. package/dist/node/services/uploads.js.map +1 -1
  264. package/dist/node/storage/fs.d.ts.map +1 -1
  265. package/dist/node/storage/fs.js +16 -10
  266. package/dist/node/storage/fs.js.map +1 -1
  267. package/dist/node/storage/object-key.js +36 -0
  268. package/dist/node/storage/object-key.js.map +1 -0
  269. package/dist/node/storage/r2-binding.d.ts +59 -0
  270. package/dist/node/storage/r2-binding.d.ts.map +1 -0
  271. package/dist/node/storage/r2-binding.js +245 -0
  272. package/dist/node/storage/r2-binding.js.map +1 -0
  273. package/dist/node/storage/r2.d.ts +6 -5
  274. package/dist/node/storage/r2.d.ts.map +1 -1
  275. package/dist/node/storage/s3.d.ts.map +1 -1
  276. package/dist/node/storage/s3.js +16 -10
  277. package/dist/node/storage/s3.js.map +1 -1
  278. package/dist/node/storage/types.d.ts +6 -5
  279. package/dist/node/storage/types.d.ts.map +1 -1
  280. package/dist/node/types.d.ts +1 -2
  281. package/dist/node/types.d.ts.map +1 -1
  282. package/package.json +26 -46
  283. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js.map +0 -1
  284. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js +0 -6
  285. package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/computed/index.js.map +0 -1
  286. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts +0 -7
  287. package/dist/browser/client/packages/fragment-upload/src/keys.d.ts.map +0 -1
  288. package/dist/browser/client/packages/fragment-upload/src/keys.js +0 -28
  289. package/dist/browser/client/packages/fragment-upload/src/keys.js.map +0 -1
  290. package/dist/browser/index-BdjKPO4J.d.ts +0 -177
  291. package/dist/browser/index-BdjKPO4J.d.ts.map +0 -1
  292. package/dist/browser/index.js +0 -3
  293. package/dist/browser/src-vdNJUbjT.js +0 -1982
  294. package/dist/browser/src-vdNJUbjT.js.map +0 -1
  295. package/dist/cli/keys.js +0 -32
  296. package/dist/cli/keys.js.map +0 -1
  297. package/dist/node/keys.d.ts +0 -12
  298. package/dist/node/keys.d.ts.map +0 -1
  299. package/dist/node/keys.js +0 -63
  300. package/dist/node/keys.js.map +0 -1
  301. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,11 +1,11 @@
1
- import * as _fragno_dev_db382 from "@fragno-dev/db";
2
- import * as _fragno_dev_db_schema855 from "@fragno-dev/db/schema";
1
+ import * as _fragno_dev_db455 from "@fragno-dev/db";
2
+ import * as _fragno_dev_db_schema929 from "@fragno-dev/db/schema";
3
3
 
4
4
  //#region src/schema.d.ts
5
- declare const uploadSchema: _fragno_dev_db_schema855.Schema<{
6
- file: _fragno_dev_db_schema855.Table<Record<string, _fragno_dev_db_schema855.AnyColumn> & Record<"id", _fragno_dev_db_schema855.IdColumn<"varchar(30)", string | _fragno_dev_db_schema855.FragnoId | null, _fragno_dev_db_schema855.FragnoId>> & Record<"fileKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"sizeBytes", _fragno_dev_db_schema855.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageProvider", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"createdAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date | null>> & Record<"deletedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema855.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema855.AnyRelation>, Record<string, _fragno_dev_db_schema855.Index<_fragno_dev_db_schema855.AnyColumn[], readonly string[]>> & Record<"idx_file_key", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey"]>> & Record<"idx_file_key_status", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>, _fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey", "status"]>> & Record<"idx_file_key_uploaderId", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>, _fragno_dev_db_schema855.Column<"string", string | null, string | null>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey", "uploaderId"]>> & Record<"idx_file_key_status_uploaderId", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>, _fragno_dev_db_schema855.Column<"string", string, string>, _fragno_dev_db_schema855.Column<"string", string | null, string | null>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey", "status", "uploaderId"]>> & Record<"idx_file_uploaderId", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string | null, string | null>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["uploaderId"]>> & Record<"idx_file_createdAt", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["createdAt"]>> & Record<"idx_file_status_createdAt", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>, _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["status", "createdAt"]>>>;
7
- upload: _fragno_dev_db_schema855.Table<Record<string, _fragno_dev_db_schema855.AnyColumn> & Record<"id", _fragno_dev_db_schema855.IdColumn<"varchar(30)", string | _fragno_dev_db_schema855.FragnoId | null, _fragno_dev_db_schema855.FragnoId>> & Record<"fileKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"expectedSizeBytes", _fragno_dev_db_schema855.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"strategy", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageProvider", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageUploadId", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"uploadUrl", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"uploadHeaders", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"bytesUploaded", _fragno_dev_db_schema855.Column<"bigint", bigint | null, bigint>> & Record<"partsUploaded", _fragno_dev_db_schema855.Column<"integer", number | null, number>> & Record<"partSizeBytes", _fragno_dev_db_schema855.Column<"integer", number | null, number | null>> & Record<"expiresAt", _fragno_dev_db_schema855.Column<"timestamp", _fragno_dev_db382.DbNow | Date, Date>> & Record<"createdAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema855.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema855.AnyRelation>, Record<string, _fragno_dev_db_schema855.Index<_fragno_dev_db_schema855.AnyColumn[], readonly string[]>> & Record<"idx_upload_file_key", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey"]>> & Record<"idx_upload_status", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["status"]>> & Record<"idx_upload_expiresAt", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"timestamp", _fragno_dev_db382.DbNow | Date, Date>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["expiresAt"]>>>;
8
- upload_part: _fragno_dev_db_schema855.Table<Record<string, _fragno_dev_db_schema855.AnyColumn> & Record<"id", _fragno_dev_db_schema855.IdColumn<"varchar(30)", string | _fragno_dev_db_schema855.FragnoId | null, _fragno_dev_db_schema855.FragnoId>> & Record<"uploadId", _fragno_dev_db_schema855.Column<"bigint", string | bigint | _fragno_dev_db_schema855.FragnoId | _fragno_dev_db_schema855.FragnoReference, _fragno_dev_db_schema855.FragnoReference>> & Record<"partNumber", _fragno_dev_db_schema855.Column<"integer", number, number>> & Record<"etag", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"sizeBytes", _fragno_dev_db_schema855.Column<"bigint", bigint, bigint>> & Record<"createdAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>>, Record<string, _fragno_dev_db_schema855.AnyRelation> & Record<"upload", _fragno_dev_db_schema855.Relation<"one", _fragno_dev_db_schema855.Table<Record<string, _fragno_dev_db_schema855.AnyColumn> & Record<"id", _fragno_dev_db_schema855.IdColumn<"varchar(30)", string | _fragno_dev_db_schema855.FragnoId | null, _fragno_dev_db_schema855.FragnoId>> & Record<"fileKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"expectedSizeBytes", _fragno_dev_db_schema855.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"strategy", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageProvider", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageKey", _fragno_dev_db_schema855.Column<"string", string, string>> & Record<"storageUploadId", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"uploadUrl", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"uploadHeaders", _fragno_dev_db_schema855.Column<"json", unknown, unknown>> & Record<"bytesUploaded", _fragno_dev_db_schema855.Column<"bigint", bigint | null, bigint>> & Record<"partsUploaded", _fragno_dev_db_schema855.Column<"integer", number | null, number>> & Record<"partSizeBytes", _fragno_dev_db_schema855.Column<"integer", number | null, number | null>> & Record<"expiresAt", _fragno_dev_db_schema855.Column<"timestamp", _fragno_dev_db382.DbNow | Date, Date>> & Record<"createdAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema855.Column<"timestamp", (_fragno_dev_db382.DbNow | Date) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema855.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema855.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema855.AnyRelation>, Record<string, _fragno_dev_db_schema855.Index<_fragno_dev_db_schema855.AnyColumn[], readonly string[]>> & Record<"idx_upload_file_key", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["fileKey"]>> & Record<"idx_upload_status", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"string", string, string>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["status"]>> & Record<"idx_upload_expiresAt", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"timestamp", _fragno_dev_db382.DbNow | Date, Date>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["expiresAt"]>>>>>, Record<string, _fragno_dev_db_schema855.Index<_fragno_dev_db_schema855.AnyColumn[], readonly string[]>> & Record<"idx_upload_part_upload", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"bigint", string | bigint | _fragno_dev_db_schema855.FragnoId | _fragno_dev_db_schema855.FragnoReference, _fragno_dev_db_schema855.FragnoReference>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["uploadId"]>> & Record<"idx_upload_part_number", _fragno_dev_db_schema855.Index<readonly [_fragno_dev_db_schema855.Column<"bigint", string | bigint | _fragno_dev_db_schema855.FragnoId | _fragno_dev_db_schema855.FragnoReference, _fragno_dev_db_schema855.FragnoReference>, _fragno_dev_db_schema855.Column<"integer", number, number>] & _fragno_dev_db_schema855.AnyColumn[], readonly ["uploadId", "partNumber"]>>>;
5
+ declare const uploadSchema: _fragno_dev_db_schema929.Schema<{
6
+ file: _fragno_dev_db_schema929.Table<Record<"id", _fragno_dev_db_schema929.IdColumn<"varchar(128)", string | _fragno_dev_db_schema929.FragnoId | null, _fragno_dev_db_schema929.FragnoId>> & Record<"key", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"provider", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"sizeBytes", _fragno_dev_db_schema929.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"objectKey", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"createdAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date | null>> & Record<"deletedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema929.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema929.AnyRelation>, Record<string, _fragno_dev_db_schema929.Index<_fragno_dev_db_schema929.AnyColumn[], readonly string[]>> & Record<"idx_file_provider_key", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key"]>> & Record<"idx_file_provider_key_status", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key", "status"]>> & Record<"idx_file_provider_key_uploaderId", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string | null, string | null>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key", "uploaderId"]>> & Record<"idx_file_provider_key_status_uploaderId", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string | null, string | null>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key", "status", "uploaderId"]>> & Record<"idx_file_uploaderId", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string | null, string | null>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["uploaderId"]>> & Record<"idx_file_createdAt", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["createdAt"]>> & Record<"idx_file_status_createdAt", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["status", "createdAt"]>>>;
7
+ upload: _fragno_dev_db_schema929.Table<Record<"id", _fragno_dev_db_schema929.IdColumn<"varchar(128)", string | _fragno_dev_db_schema929.FragnoId | null, _fragno_dev_db_schema929.FragnoId>> & Record<"key", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"provider", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"expectedSizeBytes", _fragno_dev_db_schema929.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"strategy", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"objectKey", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"storageUploadId", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"uploadUrl", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"uploadHeaders", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"bytesUploaded", _fragno_dev_db_schema929.Column<"bigint", bigint | null, bigint>> & Record<"partsUploaded", _fragno_dev_db_schema929.Column<"integer", number | null, number>> & Record<"partSizeBytes", _fragno_dev_db_schema929.Column<"integer", number | null, number | null>> & Record<"expiresAt", _fragno_dev_db_schema929.Column<"timestamp", Date | _fragno_dev_db455.DbNow, Date>> & Record<"createdAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema929.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema929.AnyRelation>, Record<string, _fragno_dev_db_schema929.Index<_fragno_dev_db_schema929.AnyColumn[], readonly string[]>> & Record<"idx_upload_provider_key", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key"]>> & Record<"idx_upload_status", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["status"]>> & Record<"idx_upload_expiresAt", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"timestamp", Date | _fragno_dev_db455.DbNow, Date>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["expiresAt"]>>>;
8
+ upload_part: _fragno_dev_db_schema929.Table<Record<"id", _fragno_dev_db_schema929.IdColumn<"varchar(128)", string | _fragno_dev_db_schema929.FragnoId | null, _fragno_dev_db_schema929.FragnoId>> & Record<"uploadId", _fragno_dev_db_schema929.Column<"bigint", string | bigint | _fragno_dev_db_schema929.FragnoId | _fragno_dev_db_schema929.FragnoReference, _fragno_dev_db_schema929.FragnoReference>> & Record<"partNumber", _fragno_dev_db_schema929.Column<"integer", number, number>> & Record<"etag", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"sizeBytes", _fragno_dev_db_schema929.Column<"bigint", bigint, bigint>> & Record<"createdAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>>, Record<string, _fragno_dev_db_schema929.AnyRelation> & Record<"upload", _fragno_dev_db_schema929.Relation<"one", _fragno_dev_db_schema929.Table<Record<"id", _fragno_dev_db_schema929.IdColumn<"varchar(128)", string | _fragno_dev_db_schema929.FragnoId | null, _fragno_dev_db_schema929.FragnoId>> & Record<"key", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"provider", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"uploaderId", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"filename", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"expectedSizeBytes", _fragno_dev_db_schema929.Column<"bigint", bigint, bigint>> & Record<"contentType", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"checksum", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"visibility", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"tags", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"metadata", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"status", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"strategy", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"objectKey", _fragno_dev_db_schema929.Column<"string", string, string>> & Record<"storageUploadId", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"uploadUrl", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"uploadHeaders", _fragno_dev_db_schema929.Column<"json", unknown, unknown>> & Record<"bytesUploaded", _fragno_dev_db_schema929.Column<"bigint", bigint | null, bigint>> & Record<"partsUploaded", _fragno_dev_db_schema929.Column<"integer", number | null, number>> & Record<"partSizeBytes", _fragno_dev_db_schema929.Column<"integer", number | null, number | null>> & Record<"expiresAt", _fragno_dev_db_schema929.Column<"timestamp", Date | _fragno_dev_db455.DbNow, Date>> & Record<"createdAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date>> & Record<"completedAt", _fragno_dev_db_schema929.Column<"timestamp", (Date | _fragno_dev_db455.DbNow) | null, Date | null>> & Record<"errorCode", _fragno_dev_db_schema929.Column<"string", string | null, string | null>> & Record<"errorMessage", _fragno_dev_db_schema929.Column<"string", string | null, string | null>>, Record<string, _fragno_dev_db_schema929.AnyRelation>, Record<string, _fragno_dev_db_schema929.Index<_fragno_dev_db_schema929.AnyColumn[], readonly string[]>> & Record<"idx_upload_provider_key", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>, _fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["provider", "key"]>> & Record<"idx_upload_status", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"string", string, string>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["status"]>> & Record<"idx_upload_expiresAt", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"timestamp", Date | _fragno_dev_db455.DbNow, Date>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["expiresAt"]>>>>>, Record<string, _fragno_dev_db_schema929.Index<_fragno_dev_db_schema929.AnyColumn[], readonly string[]>> & Record<"idx_upload_part_upload", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"bigint", string | bigint | _fragno_dev_db_schema929.FragnoId | _fragno_dev_db_schema929.FragnoReference, _fragno_dev_db_schema929.FragnoReference>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["uploadId"]>> & Record<"idx_upload_part_number", _fragno_dev_db_schema929.Index<readonly [_fragno_dev_db_schema929.Column<"bigint", string | bigint | _fragno_dev_db_schema929.FragnoId | _fragno_dev_db_schema929.FragnoReference, _fragno_dev_db_schema929.FragnoReference>, _fragno_dev_db_schema929.Column<"integer", number, number>] & _fragno_dev_db_schema929.AnyColumn[], readonly ["uploadId", "partNumber"]>>>;
9
9
  }>;
10
10
  //# sourceMappingURL=schema.d.ts.map
11
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/schema.ts"],"sourcesContent":[],"mappings":";;;;cAEa,uCAAY;sDAgGvB,wBAAA,CAAA,SAAA;;;AAhGF,CAAA,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/schema.ts"],"sourcesContent":[],"mappings":";;;;cAEa,uCAAY;+GAuGvB,wBAAA,CAAA,QAAA;;;AAvGF,CAAA,CAAA"}
@@ -3,13 +3,22 @@ import { column, idColumn, referenceColumn, schema } from "@fragno-dev/db/schema
3
3
  //#region src/schema.ts
4
4
  const uploadSchema = schema("upload", (s) => {
5
5
  return s.addTable("file", (t) => {
6
- return t.addColumn("id", idColumn()).addColumn("fileKey", column("string")).addColumn("uploaderId", column("string").nullable()).addColumn("filename", column("string")).addColumn("sizeBytes", column("bigint")).addColumn("contentType", column("string")).addColumn("checksum", column("json").nullable()).addColumn("visibility", column("string")).addColumn("tags", column("json").nullable()).addColumn("metadata", column("json").nullable()).addColumn("status", column("string")).addColumn("storageProvider", column("string")).addColumn("storageKey", column("string")).addColumn("createdAt", column("timestamp").defaultTo((b) => b.now())).addColumn("updatedAt", column("timestamp").defaultTo((b) => b.now())).addColumn("completedAt", column("timestamp").nullable()).addColumn("deletedAt", column("timestamp").nullable()).addColumn("errorCode", column("string").nullable()).addColumn("errorMessage", column("string").nullable()).createIndex("idx_file_key", ["fileKey"], { unique: true }).createIndex("idx_file_key_status", ["fileKey", "status"]).createIndex("idx_file_key_uploaderId", ["fileKey", "uploaderId"]).createIndex("idx_file_key_status_uploaderId", [
7
- "fileKey",
6
+ return t.addColumn("id", idColumn()).addColumn("key", column("string")).addColumn("provider", column("string")).addColumn("uploaderId", column("string").nullable()).addColumn("filename", column("string")).addColumn("sizeBytes", column("bigint")).addColumn("contentType", column("string")).addColumn("checksum", column("json").nullable()).addColumn("visibility", column("string")).addColumn("tags", column("json").nullable()).addColumn("metadata", column("json").nullable()).addColumn("status", column("string")).addColumn("objectKey", column("string")).addColumn("createdAt", column("timestamp").defaultTo((b) => b.now())).addColumn("updatedAt", column("timestamp").defaultTo((b) => b.now())).addColumn("completedAt", column("timestamp").nullable()).addColumn("deletedAt", column("timestamp").nullable()).addColumn("errorCode", column("string").nullable()).addColumn("errorMessage", column("string").nullable()).createIndex("idx_file_provider_key", ["provider", "key"], { unique: true }).createIndex("idx_file_provider_key_status", [
7
+ "provider",
8
+ "key",
9
+ "status"
10
+ ]).createIndex("idx_file_provider_key_uploaderId", [
11
+ "provider",
12
+ "key",
13
+ "uploaderId"
14
+ ]).createIndex("idx_file_provider_key_status_uploaderId", [
15
+ "provider",
16
+ "key",
8
17
  "status",
9
18
  "uploaderId"
10
19
  ]).createIndex("idx_file_uploaderId", ["uploaderId"]).createIndex("idx_file_createdAt", ["createdAt"]).createIndex("idx_file_status_createdAt", ["status", "createdAt"]);
11
20
  }).addTable("upload", (t) => {
12
- return t.addColumn("id", idColumn()).addColumn("fileKey", column("string")).addColumn("uploaderId", column("string").nullable()).addColumn("filename", column("string")).addColumn("expectedSizeBytes", column("bigint")).addColumn("contentType", column("string")).addColumn("checksum", column("json").nullable()).addColumn("visibility", column("string")).addColumn("tags", column("json").nullable()).addColumn("metadata", column("json").nullable()).addColumn("status", column("string")).addColumn("strategy", column("string")).addColumn("storageProvider", column("string")).addColumn("storageKey", column("string")).addColumn("storageUploadId", column("string").nullable()).addColumn("uploadUrl", column("string").nullable()).addColumn("uploadHeaders", column("json").nullable()).addColumn("bytesUploaded", column("bigint").defaultTo(0n)).addColumn("partsUploaded", column("integer").defaultTo(0)).addColumn("partSizeBytes", column("integer").nullable()).addColumn("expiresAt", column("timestamp")).addColumn("createdAt", column("timestamp").defaultTo((b) => b.now())).addColumn("updatedAt", column("timestamp").defaultTo((b) => b.now())).addColumn("completedAt", column("timestamp").nullable()).addColumn("errorCode", column("string").nullable()).addColumn("errorMessage", column("string").nullable()).createIndex("idx_upload_file_key", ["fileKey"]).createIndex("idx_upload_status", ["status"]).createIndex("idx_upload_expiresAt", ["expiresAt"]);
21
+ return t.addColumn("id", idColumn()).addColumn("key", column("string")).addColumn("provider", column("string")).addColumn("uploaderId", column("string").nullable()).addColumn("filename", column("string")).addColumn("expectedSizeBytes", column("bigint")).addColumn("contentType", column("string")).addColumn("checksum", column("json").nullable()).addColumn("visibility", column("string")).addColumn("tags", column("json").nullable()).addColumn("metadata", column("json").nullable()).addColumn("status", column("string")).addColumn("strategy", column("string")).addColumn("objectKey", column("string")).addColumn("storageUploadId", column("string").nullable()).addColumn("uploadUrl", column("string").nullable()).addColumn("uploadHeaders", column("json").nullable()).addColumn("bytesUploaded", column("bigint").defaultTo(0n)).addColumn("partsUploaded", column("integer").defaultTo(0)).addColumn("partSizeBytes", column("integer").nullable()).addColumn("expiresAt", column("timestamp")).addColumn("createdAt", column("timestamp").defaultTo((b) => b.now())).addColumn("updatedAt", column("timestamp").defaultTo((b) => b.now())).addColumn("completedAt", column("timestamp").nullable()).addColumn("errorCode", column("string").nullable()).addColumn("errorMessage", column("string").nullable()).createIndex("idx_upload_provider_key", ["provider", "key"]).createIndex("idx_upload_status", ["status"]).createIndex("idx_upload_expiresAt", ["expiresAt"]);
13
22
  }).addTable("upload_part", (t) => {
14
23
  return t.addColumn("id", idColumn()).addColumn("uploadId", referenceColumn()).addColumn("partNumber", column("integer")).addColumn("etag", column("string")).addColumn("sizeBytes", column("bigint")).addColumn("createdAt", column("timestamp").defaultTo((b) => b.now())).createIndex("idx_upload_part_upload", ["uploadId"]).createIndex("idx_upload_part_number", ["uploadId", "partNumber"], { unique: true });
15
24
  }).addReference("upload", {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":[],"sources":["../../src/schema.ts"],"sourcesContent":["import { column, idColumn, referenceColumn, schema } from \"@fragno-dev/db/schema\";\n\nexport const uploadSchema = schema(\"upload\", (s) => {\n return s\n .addTable(\"file\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"fileKey\", column(\"string\"))\n .addColumn(\"uploaderId\", column(\"string\").nullable())\n .addColumn(\"filename\", column(\"string\"))\n .addColumn(\"sizeBytes\", column(\"bigint\"))\n .addColumn(\"contentType\", column(\"string\"))\n .addColumn(\"checksum\", column(\"json\").nullable())\n .addColumn(\"visibility\", column(\"string\"))\n .addColumn(\"tags\", column(\"json\").nullable())\n .addColumn(\"metadata\", column(\"json\").nullable())\n .addColumn(\"status\", column(\"string\"))\n .addColumn(\"storageProvider\", column(\"string\"))\n .addColumn(\"storageKey\", column(\"string\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\n \"updatedAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\"completedAt\", column(\"timestamp\").nullable())\n .addColumn(\"deletedAt\", column(\"timestamp\").nullable())\n .addColumn(\"errorCode\", column(\"string\").nullable())\n .addColumn(\"errorMessage\", column(\"string\").nullable())\n .createIndex(\"idx_file_key\", [\"fileKey\"], { unique: true })\n .createIndex(\"idx_file_key_status\", [\"fileKey\", \"status\"])\n .createIndex(\"idx_file_key_uploaderId\", [\"fileKey\", \"uploaderId\"])\n .createIndex(\"idx_file_key_status_uploaderId\", [\"fileKey\", \"status\", \"uploaderId\"])\n .createIndex(\"idx_file_uploaderId\", [\"uploaderId\"])\n .createIndex(\"idx_file_createdAt\", [\"createdAt\"])\n .createIndex(\"idx_file_status_createdAt\", [\"status\", \"createdAt\"]);\n })\n .addTable(\"upload\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"fileKey\", column(\"string\"))\n .addColumn(\"uploaderId\", column(\"string\").nullable())\n .addColumn(\"filename\", column(\"string\"))\n .addColumn(\"expectedSizeBytes\", column(\"bigint\"))\n .addColumn(\"contentType\", column(\"string\"))\n .addColumn(\"checksum\", column(\"json\").nullable())\n .addColumn(\"visibility\", column(\"string\"))\n .addColumn(\"tags\", column(\"json\").nullable())\n .addColumn(\"metadata\", column(\"json\").nullable())\n .addColumn(\"status\", column(\"string\"))\n .addColumn(\"strategy\", column(\"string\"))\n .addColumn(\"storageProvider\", column(\"string\"))\n .addColumn(\"storageKey\", column(\"string\"))\n .addColumn(\"storageUploadId\", column(\"string\").nullable())\n .addColumn(\"uploadUrl\", column(\"string\").nullable())\n .addColumn(\"uploadHeaders\", column(\"json\").nullable())\n .addColumn(\"bytesUploaded\", column(\"bigint\").defaultTo(0n))\n .addColumn(\"partsUploaded\", column(\"integer\").defaultTo(0))\n .addColumn(\"partSizeBytes\", column(\"integer\").nullable())\n .addColumn(\"expiresAt\", column(\"timestamp\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\n \"updatedAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\"completedAt\", column(\"timestamp\").nullable())\n .addColumn(\"errorCode\", column(\"string\").nullable())\n .addColumn(\"errorMessage\", column(\"string\").nullable())\n .createIndex(\"idx_upload_file_key\", [\"fileKey\"])\n .createIndex(\"idx_upload_status\", [\"status\"])\n .createIndex(\"idx_upload_expiresAt\", [\"expiresAt\"]);\n })\n .addTable(\"upload_part\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"uploadId\", referenceColumn())\n .addColumn(\"partNumber\", column(\"integer\"))\n .addColumn(\"etag\", column(\"string\"))\n .addColumn(\"sizeBytes\", column(\"bigint\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .createIndex(\"idx_upload_part_upload\", [\"uploadId\"])\n .createIndex(\"idx_upload_part_number\", [\"uploadId\", \"partNumber\"], {\n unique: true,\n });\n })\n .addReference(\"upload\", {\n type: \"one\",\n from: { table: \"upload_part\", column: \"uploadId\" },\n to: { table: \"upload\", column: \"id\" },\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","names":[],"sources":["../../src/schema.ts"],"sourcesContent":["import { column, idColumn, referenceColumn, schema } from \"@fragno-dev/db/schema\";\n\nexport const uploadSchema = schema(\"upload\", (s) => {\n return s\n .addTable(\"file\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"key\", column(\"string\"))\n .addColumn(\"provider\", column(\"string\"))\n .addColumn(\"uploaderId\", column(\"string\").nullable())\n .addColumn(\"filename\", column(\"string\"))\n .addColumn(\"sizeBytes\", column(\"bigint\"))\n .addColumn(\"contentType\", column(\"string\"))\n .addColumn(\"checksum\", column(\"json\").nullable())\n .addColumn(\"visibility\", column(\"string\"))\n .addColumn(\"tags\", column(\"json\").nullable())\n .addColumn(\"metadata\", column(\"json\").nullable())\n .addColumn(\"status\", column(\"string\"))\n .addColumn(\"objectKey\", column(\"string\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\n \"updatedAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\"completedAt\", column(\"timestamp\").nullable())\n .addColumn(\"deletedAt\", column(\"timestamp\").nullable())\n .addColumn(\"errorCode\", column(\"string\").nullable())\n .addColumn(\"errorMessage\", column(\"string\").nullable())\n .createIndex(\"idx_file_provider_key\", [\"provider\", \"key\"], {\n unique: true,\n })\n .createIndex(\"idx_file_provider_key_status\", [\"provider\", \"key\", \"status\"])\n .createIndex(\"idx_file_provider_key_uploaderId\", [\"provider\", \"key\", \"uploaderId\"])\n .createIndex(\"idx_file_provider_key_status_uploaderId\", [\n \"provider\",\n \"key\",\n \"status\",\n \"uploaderId\",\n ])\n .createIndex(\"idx_file_uploaderId\", [\"uploaderId\"])\n .createIndex(\"idx_file_createdAt\", [\"createdAt\"])\n .createIndex(\"idx_file_status_createdAt\", [\"status\", \"createdAt\"]);\n })\n .addTable(\"upload\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"key\", column(\"string\"))\n .addColumn(\"provider\", column(\"string\"))\n .addColumn(\"uploaderId\", column(\"string\").nullable())\n .addColumn(\"filename\", column(\"string\"))\n .addColumn(\"expectedSizeBytes\", column(\"bigint\"))\n .addColumn(\"contentType\", column(\"string\"))\n .addColumn(\"checksum\", column(\"json\").nullable())\n .addColumn(\"visibility\", column(\"string\"))\n .addColumn(\"tags\", column(\"json\").nullable())\n .addColumn(\"metadata\", column(\"json\").nullable())\n .addColumn(\"status\", column(\"string\"))\n .addColumn(\"strategy\", column(\"string\"))\n .addColumn(\"objectKey\", column(\"string\"))\n .addColumn(\"storageUploadId\", column(\"string\").nullable())\n .addColumn(\"uploadUrl\", column(\"string\").nullable())\n .addColumn(\"uploadHeaders\", column(\"json\").nullable())\n .addColumn(\"bytesUploaded\", column(\"bigint\").defaultTo(0n))\n .addColumn(\"partsUploaded\", column(\"integer\").defaultTo(0))\n .addColumn(\"partSizeBytes\", column(\"integer\").nullable())\n .addColumn(\"expiresAt\", column(\"timestamp\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\n \"updatedAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .addColumn(\"completedAt\", column(\"timestamp\").nullable())\n .addColumn(\"errorCode\", column(\"string\").nullable())\n .addColumn(\"errorMessage\", column(\"string\").nullable())\n .createIndex(\"idx_upload_provider_key\", [\"provider\", \"key\"])\n .createIndex(\"idx_upload_status\", [\"status\"])\n .createIndex(\"idx_upload_expiresAt\", [\"expiresAt\"]);\n })\n .addTable(\"upload_part\", (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"uploadId\", referenceColumn())\n .addColumn(\"partNumber\", column(\"integer\"))\n .addColumn(\"etag\", column(\"string\"))\n .addColumn(\"sizeBytes\", column(\"bigint\"))\n .addColumn(\n \"createdAt\",\n column(\"timestamp\").defaultTo((b) => b.now()),\n )\n .createIndex(\"idx_upload_part_upload\", [\"uploadId\"])\n .createIndex(\"idx_upload_part_number\", [\"uploadId\", \"partNumber\"], {\n unique: true,\n });\n })\n .addReference(\"upload\", {\n type: \"one\",\n from: { table: \"upload_part\", column: \"uploadId\" },\n to: { table: \"upload\", column: \"id\" },\n });\n});\n"],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import { FileStatus } from "../types.js";
2
2
 
3
3
  //#region src/services/files.d.ts
4
-
4
+ type FileByKeyInput = {
5
+ provider: string;
6
+ fileKey: string;
7
+ };
5
8
  type ListFilesInput = {
9
+ provider?: string;
6
10
  prefix?: string;
7
11
  pageSize: number;
8
12
  cursor?: string;
@@ -16,5 +20,5 @@ type UpdateFileInput = {
16
20
  metadata?: Record<string, unknown> | null;
17
21
  };
18
22
  //#endregion
19
- export { ListFilesInput, UpdateFileInput };
23
+ export { FileByKeyInput, ListFilesInput, UpdateFileInput };
20
24
  //# sourceMappingURL=files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","names":[],"sources":["../../../src/services/files.ts"],"sourcesContent":[],"mappings":";;;;AAkBY,KARA,cAAA,GAQe;;;;WAJhB;;;KAIC,eAAA;;;;aAIC"}
1
+ {"version":3,"file":"files.d.ts","names":[],"sources":["../../../src/services/files.ts"],"sourcesContent":[],"mappings":";;;AAUY,KAAA,cAAA,GAAc;EAKd,QAAA,EAAA,MAAA;EASA,OAAA,EAAA,MAAA;;KATA,cAAA;;;;;WAKD;;;KAIC,eAAA;;;;aAIC"}
@@ -1,13 +1,22 @@
1
1
  import { uploadSchema } from "../schema.js";
2
2
 
3
3
  //#region src/services/files.ts
4
+ const buildFileHookPayload = (file, uploadId) => ({
5
+ provider: file.provider,
6
+ fileKey: file.key,
7
+ objectKey: file.objectKey,
8
+ uploadId,
9
+ uploaderId: file.uploaderId,
10
+ sizeBytes: Number(file.sizeBytes),
11
+ contentType: file.contentType
12
+ });
4
13
  const createFileServices = (_config) => {
5
14
  return {
6
- findFileByKey: function(fileKey) {
7
- return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_key", (eb) => eb("fileKey", "=", fileKey)))).transformRetrieve(([file]) => file ?? null).build();
15
+ findFileByKey: function(input) {
16
+ return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_provider_key", (eb) => eb.and(eb("provider", "=", input.provider), eb("key", "=", input.fileKey))))).transformRetrieve(([file]) => file ?? null).build();
8
17
  },
9
- getFileByKey: function(fileKey) {
10
- return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_key", (eb) => eb("fileKey", "=", fileKey)))).transformRetrieve(([file]) => {
18
+ getFileByKey: function(input) {
19
+ return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_provider_key", (eb) => eb.and(eb("provider", "=", input.provider), eb("key", "=", input.fileKey))))).transformRetrieve(([file]) => {
11
20
  if (!file) throw new Error("FILE_NOT_FOUND");
12
21
  return file;
13
22
  }).build();
@@ -18,26 +27,26 @@ const createFileServices = (_config) => {
18
27
  if (input.status && input.uploaderId) {
19
28
  const status = input.status;
20
29
  const uploaderId = input.uploaderId;
21
- const ordered$1 = b.whereIndex("idx_file_key_status_uploaderId", (eb) => eb.and(eb("fileKey", "starts with", prefix), eb("status", "=", status), eb("uploaderId", "=", uploaderId))).orderByIndex("idx_file_key_status_uploaderId", "asc").pageSize(input.pageSize);
30
+ const ordered$1 = b.whereIndex("idx_file_provider_key_status_uploaderId", (eb) => eb.and(input.provider !== void 0 ? eb("provider", "=", input.provider) : eb("provider", "starts with", ""), eb("key", "starts with", prefix), eb("status", "=", status), eb("uploaderId", "=", uploaderId))).orderByIndex("idx_file_provider_key_status_uploaderId", "asc").pageSize(input.pageSize);
22
31
  return input.cursor ? ordered$1.after(input.cursor) : ordered$1;
23
32
  }
24
33
  if (input.status) {
25
34
  const status = input.status;
26
- const ordered$1 = b.whereIndex("idx_file_key_status", (eb) => eb.and(eb("fileKey", "starts with", prefix), eb("status", "=", status))).orderByIndex("idx_file_key_status", "asc").pageSize(input.pageSize);
35
+ const ordered$1 = b.whereIndex("idx_file_provider_key_status", (eb) => eb.and(input.provider !== void 0 ? eb("provider", "=", input.provider) : eb("provider", "starts with", ""), eb("key", "starts with", prefix), eb("status", "=", status))).orderByIndex("idx_file_provider_key_status", "asc").pageSize(input.pageSize);
27
36
  return input.cursor ? ordered$1.after(input.cursor) : ordered$1;
28
37
  }
29
38
  if (input.uploaderId) {
30
39
  const uploaderId = input.uploaderId;
31
- const ordered$1 = b.whereIndex("idx_file_key_uploaderId", (eb) => eb.and(eb("fileKey", "starts with", prefix), eb("uploaderId", "=", uploaderId))).orderByIndex("idx_file_key_uploaderId", "asc").pageSize(input.pageSize);
40
+ const ordered$1 = b.whereIndex("idx_file_provider_key_uploaderId", (eb) => eb.and(input.provider !== void 0 ? eb("provider", "=", input.provider) : eb("provider", "starts with", ""), eb("key", "starts with", prefix), eb("uploaderId", "=", uploaderId))).orderByIndex("idx_file_provider_key_uploaderId", "asc").pageSize(input.pageSize);
32
41
  return input.cursor ? ordered$1.after(input.cursor) : ordered$1;
33
42
  }
34
- const ordered = b.whereIndex("idx_file_key", (eb) => eb("fileKey", "starts with", prefix)).orderByIndex("idx_file_key", "asc").pageSize(input.pageSize);
43
+ const ordered = b.whereIndex("idx_file_provider_key", (eb) => eb.and(input.provider !== void 0 ? eb("provider", "=", input.provider) : eb("provider", "starts with", ""), eb("key", "starts with", prefix))).orderByIndex("idx_file_provider_key", "asc").pageSize(input.pageSize);
35
44
  return input.cursor ? ordered.after(input.cursor) : ordered;
36
45
  })).transformRetrieve(([result]) => result).build();
37
46
  },
38
- updateFile: function(fileKey, input) {
47
+ updateFile: function(fileByKey, input) {
39
48
  const now = /* @__PURE__ */ new Date();
40
- return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_key", (eb) => eb("fileKey", "=", fileKey)))).mutate(({ uow, retrieveResult: [file] }) => {
49
+ return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_provider_key", (eb) => eb.and(eb("provider", "=", fileByKey.provider), eb("key", "=", fileByKey.fileKey))))).mutate(({ uow, retrieveResult: [file] }) => {
41
50
  if (!file) throw new Error("FILE_NOT_FOUND");
42
51
  if (file.status === "deleted") throw new Error("UPLOAD_INVALID_STATE");
43
52
  const updatedFile = {
@@ -58,9 +67,9 @@ const createFileServices = (_config) => {
58
67
  return updatedFile;
59
68
  }).build();
60
69
  },
61
- markFileDeleted: function(fileKey, fileKeyParts, uploadId) {
70
+ markFileDeleted: function(fileByKey, uploadId) {
62
71
  const now = /* @__PURE__ */ new Date();
63
- return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_key", (eb) => eb("fileKey", "=", fileKey)))).mutate(({ uow, retrieveResult: [file] }) => {
72
+ return this.serviceTx(uploadSchema).retrieve((uow) => uow.findFirst("file", (b) => b.whereIndex("idx_file_provider_key", (eb) => eb.and(eb("provider", "=", fileByKey.provider), eb("key", "=", fileByKey.fileKey))))).mutate(({ uow, retrieveResult: [file] }) => {
64
73
  if (!file) throw new Error("FILE_NOT_FOUND");
65
74
  if (file.status === "deleted") return file;
66
75
  const updatedFile = {
@@ -74,14 +83,7 @@ const createFileServices = (_config) => {
74
83
  updatedAt: updatedFile.updatedAt,
75
84
  deletedAt: updatedFile.deletedAt
76
85
  }).check());
77
- uow.triggerHook("onFileDeleted", {
78
- fileKey: file.fileKey,
79
- fileKeyParts,
80
- uploadId,
81
- uploaderId: file.uploaderId,
82
- sizeBytes: Number(file.sizeBytes),
83
- contentType: file.contentType
84
- });
86
+ uow.triggerHook("onFileDeleted", { ...buildFileHookPayload(file, uploadId) });
85
87
  return updatedFile;
86
88
  }).build();
87
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","names":["ordered"],"sources":["../../../src/services/files.ts"],"sourcesContent":["import type { DatabaseServiceContext } from \"@fragno-dev/db\";\nimport type {\n FileHookPayload,\n UploadFragmentResolvedConfig,\n UploadTimeoutPayload,\n} from \"../config\";\nimport type { FileKeyEncoded, FileKeyParts } from \"../keys\";\nimport { uploadSchema } from \"../schema\";\nimport type { FileStatus } from \"../types\";\n\nexport type ListFilesInput = {\n prefix?: string;\n pageSize: number;\n cursor?: string;\n status?: FileStatus;\n uploaderId?: string;\n};\n\nexport type UpdateFileInput = {\n filename?: string;\n visibility?: string;\n tags?: string[] | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype UploadHooks = {\n onFileReady: (payload: FileHookPayload) => void | Promise<void>;\n onUploadFailed: (payload: FileHookPayload) => void | Promise<void>;\n onFileDeleted: (payload: FileHookPayload) => void | Promise<void>;\n onUploadTimeout: (payload: UploadTimeoutPayload) => void | Promise<void>;\n};\n\ntype UploadServiceContext = DatabaseServiceContext<UploadHooks>;\n\nexport const createFileServices = (_config: UploadFragmentResolvedConfig) => {\n return {\n findFileByKey: function (this: UploadServiceContext, fileKey: FileKeyEncoded) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_key\", (eb) => eb(\"fileKey\", \"=\", fileKey)),\n ),\n )\n .transformRetrieve(([file]) => file ?? null)\n .build();\n },\n\n getFileByKey: function (this: UploadServiceContext, fileKey: FileKeyEncoded) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_key\", (eb) => eb(\"fileKey\", \"=\", fileKey)),\n ),\n )\n .transformRetrieve(([file]) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n return file;\n })\n .build();\n },\n\n listFiles: function (this: UploadServiceContext, input: ListFilesInput) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findWithCursor(\"file\", (b) => {\n const prefix = input.prefix ?? \"\";\n if (input.status && input.uploaderId) {\n const status = input.status;\n const uploaderId = input.uploaderId;\n const query = b.whereIndex(\"idx_file_key_status_uploaderId\", (eb) =>\n eb.and(\n eb(\"fileKey\", \"starts with\", prefix),\n eb(\"status\", \"=\", status),\n eb(\"uploaderId\", \"=\", uploaderId),\n ),\n );\n const ordered = query\n .orderByIndex(\"idx_file_key_status_uploaderId\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n if (input.status) {\n const status = input.status;\n const query = b.whereIndex(\"idx_file_key_status\", (eb) =>\n eb.and(eb(\"fileKey\", \"starts with\", prefix), eb(\"status\", \"=\", status)),\n );\n const ordered = query\n .orderByIndex(\"idx_file_key_status\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n if (input.uploaderId) {\n const uploaderId = input.uploaderId;\n const query = b.whereIndex(\"idx_file_key_uploaderId\", (eb) =>\n eb.and(eb(\"fileKey\", \"starts with\", prefix), eb(\"uploaderId\", \"=\", uploaderId)),\n );\n const ordered = query\n .orderByIndex(\"idx_file_key_uploaderId\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n const query = b.whereIndex(\"idx_file_key\", (eb) =>\n eb(\"fileKey\", \"starts with\", prefix),\n );\n const ordered = query.orderByIndex(\"idx_file_key\", \"asc\").pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }),\n )\n .transformRetrieve(([result]) => result)\n .build();\n },\n\n updateFile: function (\n this: UploadServiceContext,\n fileKey: FileKeyEncoded,\n input: UpdateFileInput,\n ) {\n const now = new Date();\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_key\", (eb) => eb(\"fileKey\", \"=\", fileKey)),\n ),\n )\n .mutate(({ uow, retrieveResult: [file] }) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n\n if (file.status === \"deleted\") {\n throw new Error(\"UPLOAD_INVALID_STATE\");\n }\n\n const updatedFile = {\n ...file,\n filename: input.filename ?? file.filename,\n visibility: (input.visibility ?? file.visibility) as string,\n tags: input.tags ?? file.tags,\n metadata: input.metadata ?? file.metadata,\n updatedAt: now,\n };\n\n uow.update(\"file\", file.id, (b) =>\n b\n .set({\n filename: updatedFile.filename,\n visibility: updatedFile.visibility,\n tags: updatedFile.tags,\n metadata: updatedFile.metadata,\n updatedAt: updatedFile.updatedAt,\n })\n .check(),\n );\n\n return updatedFile;\n })\n .build();\n },\n\n markFileDeleted: function (\n this: UploadServiceContext,\n fileKey: FileKeyEncoded,\n fileKeyParts: FileKeyParts,\n uploadId?: string,\n ) {\n const now = new Date();\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_key\", (eb) => eb(\"fileKey\", \"=\", fileKey)),\n ),\n )\n .mutate(({ uow, retrieveResult: [file] }) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n\n if (file.status === \"deleted\") {\n return file;\n }\n\n const updatedFile = {\n ...file,\n status: \"deleted\" as FileStatus,\n updatedAt: now,\n deletedAt: now,\n };\n\n uow.update(\"file\", file.id, (b) =>\n b\n .set({\n status: updatedFile.status,\n updatedAt: updatedFile.updatedAt,\n deletedAt: updatedFile.deletedAt,\n })\n .check(),\n );\n\n uow.triggerHook(\"onFileDeleted\", {\n fileKey: file.fileKey,\n fileKeyParts,\n uploadId,\n uploaderId: file.uploaderId,\n sizeBytes: Number(file.sizeBytes),\n contentType: file.contentType,\n });\n\n return updatedFile;\n })\n .build();\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"files.js","names":["ordered"],"sources":["../../../src/services/files.ts"],"sourcesContent":["import type { DatabaseServiceContext } from \"@fragno-dev/db\";\n\nimport type {\n FileHookPayload,\n UploadFragmentResolvedConfig,\n UploadTimeoutPayload,\n} from \"../config\";\nimport { uploadSchema } from \"../schema\";\nimport type { FileStatus } from \"../types\";\n\nexport type FileByKeyInput = {\n provider: string;\n fileKey: string;\n};\n\nexport type ListFilesInput = {\n provider?: string;\n prefix?: string;\n pageSize: number;\n cursor?: string;\n status?: FileStatus;\n uploaderId?: string;\n};\n\nexport type UpdateFileInput = {\n filename?: string;\n visibility?: string;\n tags?: string[] | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FileHookSource = {\n provider: string;\n key: string;\n uploaderId?: string | null;\n sizeBytes: bigint | number;\n contentType: string;\n objectKey: string;\n};\n\ntype UploadHooks = {\n onFileReady: (payload: FileHookPayload) => void | Promise<void>;\n onUploadFailed: (payload: FileHookPayload) => void | Promise<void>;\n onFileDeleted: (payload: FileHookPayload) => void | Promise<void>;\n cleanupStorageObject: (payload: FileHookPayload) => void | Promise<void>;\n onUploadTimeout: (payload: UploadTimeoutPayload) => void | Promise<void>;\n};\n\ntype UploadServiceContext = DatabaseServiceContext<UploadHooks>;\n\nconst buildFileHookPayload = (file: FileHookSource, uploadId?: string): FileHookPayload => ({\n provider: file.provider,\n fileKey: file.key,\n objectKey: file.objectKey,\n uploadId,\n uploaderId: file.uploaderId,\n sizeBytes: Number(file.sizeBytes),\n contentType: file.contentType,\n});\n\nexport const createFileServices = (_config: UploadFragmentResolvedConfig) => {\n return {\n findFileByKey: function (this: UploadServiceContext, input: FileByKeyInput) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(eb(\"provider\", \"=\", input.provider), eb(\"key\", \"=\", input.fileKey)),\n ),\n ),\n )\n .transformRetrieve(([file]) => file ?? null)\n .build();\n },\n\n getFileByKey: function (this: UploadServiceContext, input: FileByKeyInput) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(eb(\"provider\", \"=\", input.provider), eb(\"key\", \"=\", input.fileKey)),\n ),\n ),\n )\n .transformRetrieve(([file]) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n return file;\n })\n .build();\n },\n\n listFiles: function (this: UploadServiceContext, input: ListFilesInput) {\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findWithCursor(\"file\", (b) => {\n const prefix = input.prefix ?? \"\";\n\n if (input.status && input.uploaderId) {\n const status = input.status;\n const uploaderId = input.uploaderId;\n const query = b.whereIndex(\"idx_file_provider_key_status_uploaderId\", (eb) =>\n eb.and(\n input.provider !== undefined\n ? eb(\"provider\", \"=\", input.provider)\n : eb(\"provider\", \"starts with\", \"\"),\n eb(\"key\", \"starts with\", prefix),\n eb(\"status\", \"=\", status),\n eb(\"uploaderId\", \"=\", uploaderId),\n ),\n );\n const ordered = query\n .orderByIndex(\"idx_file_provider_key_status_uploaderId\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n if (input.status) {\n const status = input.status;\n const query = b.whereIndex(\"idx_file_provider_key_status\", (eb) =>\n eb.and(\n input.provider !== undefined\n ? eb(\"provider\", \"=\", input.provider)\n : eb(\"provider\", \"starts with\", \"\"),\n eb(\"key\", \"starts with\", prefix),\n eb(\"status\", \"=\", status),\n ),\n );\n const ordered = query\n .orderByIndex(\"idx_file_provider_key_status\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n if (input.uploaderId) {\n const uploaderId = input.uploaderId;\n const query = b.whereIndex(\"idx_file_provider_key_uploaderId\", (eb) =>\n eb.and(\n input.provider !== undefined\n ? eb(\"provider\", \"=\", input.provider)\n : eb(\"provider\", \"starts with\", \"\"),\n eb(\"key\", \"starts with\", prefix),\n eb(\"uploaderId\", \"=\", uploaderId),\n ),\n );\n const ordered = query\n .orderByIndex(\"idx_file_provider_key_uploaderId\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }\n\n const query = b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(\n input.provider !== undefined\n ? eb(\"provider\", \"=\", input.provider)\n : eb(\"provider\", \"starts with\", \"\"),\n eb(\"key\", \"starts with\", prefix),\n ),\n );\n const ordered = query\n .orderByIndex(\"idx_file_provider_key\", \"asc\")\n .pageSize(input.pageSize);\n return input.cursor ? ordered.after(input.cursor) : ordered;\n }),\n )\n .transformRetrieve(([result]) => result)\n .build();\n },\n\n updateFile: function (\n this: UploadServiceContext,\n fileByKey: FileByKeyInput,\n input: UpdateFileInput,\n ) {\n const now = new Date();\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(eb(\"provider\", \"=\", fileByKey.provider), eb(\"key\", \"=\", fileByKey.fileKey)),\n ),\n ),\n )\n .mutate(({ uow, retrieveResult: [file] }) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n\n if (file.status === \"deleted\") {\n throw new Error(\"UPLOAD_INVALID_STATE\");\n }\n\n const updatedFile = {\n ...file,\n filename: input.filename ?? file.filename,\n visibility: (input.visibility ?? file.visibility) as string,\n tags: input.tags ?? file.tags,\n metadata: input.metadata ?? file.metadata,\n updatedAt: now,\n };\n\n uow.update(\"file\", file.id, (b) =>\n b\n .set({\n filename: updatedFile.filename,\n visibility: updatedFile.visibility,\n tags: updatedFile.tags,\n metadata: updatedFile.metadata,\n updatedAt: updatedFile.updatedAt,\n })\n .check(),\n );\n\n return updatedFile;\n })\n .build();\n },\n\n markFileDeleted: function (\n this: UploadServiceContext,\n fileByKey: FileByKeyInput,\n uploadId?: string,\n ) {\n const now = new Date();\n return this.serviceTx(uploadSchema)\n .retrieve((uow) =>\n uow.findFirst(\"file\", (b) =>\n b.whereIndex(\"idx_file_provider_key\", (eb) =>\n eb.and(eb(\"provider\", \"=\", fileByKey.provider), eb(\"key\", \"=\", fileByKey.fileKey)),\n ),\n ),\n )\n .mutate(({ uow, retrieveResult: [file] }) => {\n if (!file) {\n throw new Error(\"FILE_NOT_FOUND\");\n }\n\n if (file.status === \"deleted\") {\n return file;\n }\n\n const updatedFile = {\n ...file,\n status: \"deleted\" as FileStatus,\n updatedAt: now,\n deletedAt: now,\n };\n\n uow.update(\"file\", file.id, (b) =>\n b\n .set({\n status: updatedFile.status,\n updatedAt: updatedFile.updatedAt,\n deletedAt: updatedFile.deletedAt,\n })\n .check(),\n );\n\n uow.triggerHook(\"onFileDeleted\", {\n ...buildFileHookPayload(file, uploadId),\n });\n\n return updatedFile;\n })\n .build();\n },\n };\n};\n"],"mappings":";;;AAkDA,MAAM,wBAAwB,MAAsB,cAAwC;CAC1F,UAAU,KAAK;CACf,SAAS,KAAK;CACd,WAAW,KAAK;CAChB;CACA,YAAY,KAAK;CACjB,WAAW,OAAO,KAAK,UAAU;CACjC,aAAa,KAAK;CACnB;AAED,MAAa,sBAAsB,YAA0C;AAC3E,QAAO;EACL,eAAe,SAAsC,OAAuB;AAC1E,UAAO,KAAK,UAAU,aAAa,CAChC,UAAU,QACT,IAAI,UAAU,SAAS,MACrB,EAAE,WAAW,0BAA0B,OACrC,GAAG,IAAI,GAAG,YAAY,KAAK,MAAM,SAAS,EAAE,GAAG,OAAO,KAAK,MAAM,QAAQ,CAAC,CAC3E,CACF,CACF,CACA,mBAAmB,CAAC,UAAU,QAAQ,KAAK,CAC3C,OAAO;;EAGZ,cAAc,SAAsC,OAAuB;AACzE,UAAO,KAAK,UAAU,aAAa,CAChC,UAAU,QACT,IAAI,UAAU,SAAS,MACrB,EAAE,WAAW,0BAA0B,OACrC,GAAG,IAAI,GAAG,YAAY,KAAK,MAAM,SAAS,EAAE,GAAG,OAAO,KAAK,MAAM,QAAQ,CAAC,CAC3E,CACF,CACF,CACA,mBAAmB,CAAC,UAAU;AAC7B,QAAI,CAAC,KACH,OAAM,IAAI,MAAM,iBAAiB;AAEnC,WAAO;KACP,CACD,OAAO;;EAGZ,WAAW,SAAsC,OAAuB;AACtE,UAAO,KAAK,UAAU,aAAa,CAChC,UAAU,QACT,IAAI,eAAe,SAAS,MAAM;IAChC,MAAM,SAAS,MAAM,UAAU;AAE/B,QAAI,MAAM,UAAU,MAAM,YAAY;KACpC,MAAM,SAAS,MAAM;KACrB,MAAM,aAAa,MAAM;KAWzB,MAAMA,YAVQ,EAAE,WAAW,4CAA4C,OACrE,GAAG,IACD,MAAM,aAAa,SACf,GAAG,YAAY,KAAK,MAAM,SAAS,GACnC,GAAG,YAAY,eAAe,GAAG,EACrC,GAAG,OAAO,eAAe,OAAO,EAChC,GAAG,UAAU,KAAK,OAAO,EACzB,GAAG,cAAc,KAAK,WAAW,CAClC,CACF,CAEE,aAAa,2CAA2C,MAAM,CAC9D,SAAS,MAAM,SAAS;AAC3B,YAAO,MAAM,SAASA,UAAQ,MAAM,MAAM,OAAO,GAAGA;;AAGtD,QAAI,MAAM,QAAQ;KAChB,MAAM,SAAS,MAAM;KAUrB,MAAMA,YATQ,EAAE,WAAW,iCAAiC,OAC1D,GAAG,IACD,MAAM,aAAa,SACf,GAAG,YAAY,KAAK,MAAM,SAAS,GACnC,GAAG,YAAY,eAAe,GAAG,EACrC,GAAG,OAAO,eAAe,OAAO,EAChC,GAAG,UAAU,KAAK,OAAO,CAC1B,CACF,CAEE,aAAa,gCAAgC,MAAM,CACnD,SAAS,MAAM,SAAS;AAC3B,YAAO,MAAM,SAASA,UAAQ,MAAM,MAAM,OAAO,GAAGA;;AAGtD,QAAI,MAAM,YAAY;KACpB,MAAM,aAAa,MAAM;KAUzB,MAAMA,YATQ,EAAE,WAAW,qCAAqC,OAC9D,GAAG,IACD,MAAM,aAAa,SACf,GAAG,YAAY,KAAK,MAAM,SAAS,GACnC,GAAG,YAAY,eAAe,GAAG,EACrC,GAAG,OAAO,eAAe,OAAO,EAChC,GAAG,cAAc,KAAK,WAAW,CAClC,CACF,CAEE,aAAa,oCAAoC,MAAM,CACvD,SAAS,MAAM,SAAS;AAC3B,YAAO,MAAM,SAASA,UAAQ,MAAM,MAAM,OAAO,GAAGA;;IAWtD,MAAM,UARQ,EAAE,WAAW,0BAA0B,OACnD,GAAG,IACD,MAAM,aAAa,SACf,GAAG,YAAY,KAAK,MAAM,SAAS,GACnC,GAAG,YAAY,eAAe,GAAG,EACrC,GAAG,OAAO,eAAe,OAAO,CACjC,CACF,CAEE,aAAa,yBAAyB,MAAM,CAC5C,SAAS,MAAM,SAAS;AAC3B,WAAO,MAAM,SAAS,QAAQ,MAAM,MAAM,OAAO,GAAG;KACpD,CACH,CACA,mBAAmB,CAAC,YAAY,OAAO,CACvC,OAAO;;EAGZ,YAAY,SAEV,WACA,OACA;GACA,MAAM,sBAAM,IAAI,MAAM;AACtB,UAAO,KAAK,UAAU,aAAa,CAChC,UAAU,QACT,IAAI,UAAU,SAAS,MACrB,EAAE,WAAW,0BAA0B,OACrC,GAAG,IAAI,GAAG,YAAY,KAAK,UAAU,SAAS,EAAE,GAAG,OAAO,KAAK,UAAU,QAAQ,CAAC,CACnF,CACF,CACF,CACA,QAAQ,EAAE,KAAK,gBAAgB,CAAC,YAAY;AAC3C,QAAI,CAAC,KACH,OAAM,IAAI,MAAM,iBAAiB;AAGnC,QAAI,KAAK,WAAW,UAClB,OAAM,IAAI,MAAM,uBAAuB;IAGzC,MAAM,cAAc;KAClB,GAAG;KACH,UAAU,MAAM,YAAY,KAAK;KACjC,YAAa,MAAM,cAAc,KAAK;KACtC,MAAM,MAAM,QAAQ,KAAK;KACzB,UAAU,MAAM,YAAY,KAAK;KACjC,WAAW;KACZ;AAED,QAAI,OAAO,QAAQ,KAAK,KAAK,MAC3B,EACG,IAAI;KACH,UAAU,YAAY;KACtB,YAAY,YAAY;KACxB,MAAM,YAAY;KAClB,UAAU,YAAY;KACtB,WAAW,YAAY;KACxB,CAAC,CACD,OAAO,CACX;AAED,WAAO;KACP,CACD,OAAO;;EAGZ,iBAAiB,SAEf,WACA,UACA;GACA,MAAM,sBAAM,IAAI,MAAM;AACtB,UAAO,KAAK,UAAU,aAAa,CAChC,UAAU,QACT,IAAI,UAAU,SAAS,MACrB,EAAE,WAAW,0BAA0B,OACrC,GAAG,IAAI,GAAG,YAAY,KAAK,UAAU,SAAS,EAAE,GAAG,OAAO,KAAK,UAAU,QAAQ,CAAC,CACnF,CACF,CACF,CACA,QAAQ,EAAE,KAAK,gBAAgB,CAAC,YAAY;AAC3C,QAAI,CAAC,KACH,OAAM,IAAI,MAAM,iBAAiB;AAGnC,QAAI,KAAK,WAAW,UAClB,QAAO;IAGT,MAAM,cAAc;KAClB,GAAG;KACH,QAAQ;KACR,WAAW;KACX,WAAW;KACZ;AAED,QAAI,OAAO,QAAQ,KAAK,KAAK,MAC3B,EACG,IAAI;KACH,QAAQ,YAAY;KACpB,WAAW,YAAY;KACvB,WAAW,YAAY;KACxB,CAAC,CACD,OAAO,CACX;AAED,QAAI,YAAY,iBAAiB,EAC/B,GAAG,qBAAqB,MAAM,SAAS,EACxC,CAAC;AAEF,WAAO;KACP,CACD,OAAO;;EAEb"}
@@ -1,30 +1,52 @@
1
- import { decodeFileKey, encodeFileKey } from "../keys.js";
1
+ import { assertFileKey, splitFileKey } from "../file-key.js";
2
2
 
3
3
  //#region src/services/helpers.ts
4
+ const normalizeKeyParts = (keyParts) => {
5
+ const normalized = [];
6
+ for (const part of keyParts) {
7
+ if (typeof part === "string") {
8
+ normalized.push(part);
9
+ continue;
10
+ }
11
+ if (typeof part === "number" && Number.isFinite(part) && Number.isInteger(part)) {
12
+ normalized.push(String(part));
13
+ continue;
14
+ }
15
+ throw new Error("INVALID_FILE_KEY");
16
+ }
17
+ return normalized;
18
+ };
4
19
  const resolveFileKeyInput = (input) => {
5
20
  const { keyParts, fileKey } = input;
6
21
  if ((!keyParts || keyParts.length === 0) && (!fileKey || fileKey.length === 0)) throw new Error("INVALID_FILE_KEY");
7
- if (keyParts && fileKey) {
8
- let decoded;
9
- try {
10
- decoded = decodeFileKey(fileKey);
11
- } catch {
12
- throw new Error("INVALID_FILE_KEY");
13
- }
14
- if (encodeFileKey(keyParts) !== fileKey) throw new Error("INVALID_FILE_KEY");
22
+ if (keyParts && fileKey) try {
23
+ assertFileKey(fileKey);
24
+ const fromParts = normalizeKeyParts(keyParts).join("/");
25
+ assertFileKey(fromParts);
26
+ if (fromParts !== fileKey) throw new Error("INVALID_FILE_KEY");
15
27
  return {
16
28
  fileKey,
17
- fileKeyParts: decoded
29
+ fileKeyParts: splitFileKey(fileKey)
18
30
  };
31
+ } catch {
32
+ throw new Error("INVALID_FILE_KEY");
33
+ }
34
+ if (keyParts) try {
35
+ const normalized = normalizeKeyParts(keyParts);
36
+ const normalizedFileKey = normalized.join("/");
37
+ assertFileKey(normalizedFileKey);
38
+ return {
39
+ fileKey: normalizedFileKey,
40
+ fileKeyParts: normalized
41
+ };
42
+ } catch {
43
+ throw new Error("INVALID_FILE_KEY");
19
44
  }
20
- if (keyParts) return {
21
- fileKey: encodeFileKey(keyParts),
22
- fileKeyParts: keyParts
23
- };
24
45
  try {
46
+ assertFileKey(fileKey);
25
47
  return {
26
48
  fileKey,
27
- fileKeyParts: decodeFileKey(fileKey)
49
+ fileKeyParts: splitFileKey(fileKey)
28
50
  };
29
51
  } catch {
30
52
  throw new Error("INVALID_FILE_KEY");
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["decoded: FileKeyParts"],"sources":["../../../src/services/helpers.ts"],"sourcesContent":["import { decodeFileKey, encodeFileKey, type FileKeyEncoded, type FileKeyParts } from \"../keys\";\n\nexport type FileKeyInput = {\n keyParts?: FileKeyParts;\n fileKey?: FileKeyEncoded;\n};\n\nexport const resolveFileKeyInput = (\n input: FileKeyInput,\n): {\n fileKey: FileKeyEncoded;\n fileKeyParts: FileKeyParts;\n} => {\n const { keyParts, fileKey } = input;\n\n if ((!keyParts || keyParts.length === 0) && (!fileKey || fileKey.length === 0)) {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n\n if (keyParts && fileKey) {\n let decoded: FileKeyParts;\n try {\n decoded = decodeFileKey(fileKey);\n } catch {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n\n const encoded = encodeFileKey(keyParts);\n if (encoded !== fileKey) {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n\n return { fileKey, fileKeyParts: decoded };\n }\n\n if (keyParts) {\n return { fileKey: encodeFileKey(keyParts), fileKeyParts: keyParts };\n }\n\n try {\n return { fileKey: fileKey!, fileKeyParts: decodeFileKey(fileKey!) };\n } catch {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n};\n"],"mappings":";;;AAOA,MAAa,uBACX,UAIG;CACH,MAAM,EAAE,UAAU,YAAY;AAE9B,MAAK,CAAC,YAAY,SAAS,WAAW,OAAO,CAAC,WAAW,QAAQ,WAAW,GAC1E,OAAM,IAAI,MAAM,mBAAmB;AAGrC,KAAI,YAAY,SAAS;EACvB,IAAIA;AACJ,MAAI;AACF,aAAU,cAAc,QAAQ;UAC1B;AACN,SAAM,IAAI,MAAM,mBAAmB;;AAIrC,MADgB,cAAc,SAAS,KACvB,QACd,OAAM,IAAI,MAAM,mBAAmB;AAGrC,SAAO;GAAE;GAAS,cAAc;GAAS;;AAG3C,KAAI,SACF,QAAO;EAAE,SAAS,cAAc,SAAS;EAAE,cAAc;EAAU;AAGrE,KAAI;AACF,SAAO;GAAW;GAAU,cAAc,cAAc,QAAS;GAAE;SAC7D;AACN,QAAM,IAAI,MAAM,mBAAmB"}
1
+ {"version":3,"file":"helpers.js","names":["normalized: string[]"],"sources":["../../../src/services/helpers.ts"],"sourcesContent":["import { assertFileKey, splitFileKey, type FileKey } from \"../file-key\";\nimport type { FileKeyParts } from \"../keys\";\n\nexport type FileKeyInput = {\n keyParts?: FileKeyParts;\n fileKey?: FileKey;\n};\n\nconst normalizeKeyParts = (keyParts: FileKeyParts): readonly string[] => {\n const normalized: string[] = [];\n\n for (const part of keyParts) {\n if (typeof part === \"string\") {\n normalized.push(part);\n continue;\n }\n\n if (typeof part === \"number\" && Number.isFinite(part) && Number.isInteger(part)) {\n normalized.push(String(part));\n continue;\n }\n\n throw new Error(\"INVALID_FILE_KEY\");\n }\n\n return normalized;\n};\n\nexport const resolveFileKeyInput = (\n input: FileKeyInput,\n): {\n fileKey: FileKey;\n fileKeyParts: FileKeyParts;\n} => {\n const { keyParts, fileKey } = input;\n\n if ((!keyParts || keyParts.length === 0) && (!fileKey || fileKey.length === 0)) {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n\n if (keyParts && fileKey) {\n try {\n assertFileKey(fileKey);\n const fromParts = normalizeKeyParts(keyParts).join(\"/\");\n assertFileKey(fromParts);\n if (fromParts !== fileKey) {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n return { fileKey, fileKeyParts: splitFileKey(fileKey) };\n } catch {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n }\n\n if (keyParts) {\n try {\n const normalized = normalizeKeyParts(keyParts);\n const normalizedFileKey = normalized.join(\"/\");\n assertFileKey(normalizedFileKey);\n return { fileKey: normalizedFileKey, fileKeyParts: normalized };\n } catch {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n }\n\n try {\n assertFileKey(fileKey!);\n return { fileKey: fileKey!, fileKeyParts: splitFileKey(fileKey!) };\n } catch {\n throw new Error(\"INVALID_FILE_KEY\");\n }\n};\n"],"mappings":";;;AAQA,MAAM,qBAAqB,aAA8C;CACvE,MAAMA,aAAuB,EAAE;AAE/B,MAAK,MAAM,QAAQ,UAAU;AAC3B,MAAI,OAAO,SAAS,UAAU;AAC5B,cAAW,KAAK,KAAK;AACrB;;AAGF,MAAI,OAAO,SAAS,YAAY,OAAO,SAAS,KAAK,IAAI,OAAO,UAAU,KAAK,EAAE;AAC/E,cAAW,KAAK,OAAO,KAAK,CAAC;AAC7B;;AAGF,QAAM,IAAI,MAAM,mBAAmB;;AAGrC,QAAO;;AAGT,MAAa,uBACX,UAIG;CACH,MAAM,EAAE,UAAU,YAAY;AAE9B,MAAK,CAAC,YAAY,SAAS,WAAW,OAAO,CAAC,WAAW,QAAQ,WAAW,GAC1E,OAAM,IAAI,MAAM,mBAAmB;AAGrC,KAAI,YAAY,QACd,KAAI;AACF,gBAAc,QAAQ;EACtB,MAAM,YAAY,kBAAkB,SAAS,CAAC,KAAK,IAAI;AACvD,gBAAc,UAAU;AACxB,MAAI,cAAc,QAChB,OAAM,IAAI,MAAM,mBAAmB;AAErC,SAAO;GAAE;GAAS,cAAc,aAAa,QAAQ;GAAE;SACjD;AACN,QAAM,IAAI,MAAM,mBAAmB;;AAIvC,KAAI,SACF,KAAI;EACF,MAAM,aAAa,kBAAkB,SAAS;EAC9C,MAAM,oBAAoB,WAAW,KAAK,IAAI;AAC9C,gBAAc,kBAAkB;AAChC,SAAO;GAAE,SAAS;GAAmB,cAAc;GAAY;SACzD;AACN,QAAM,IAAI,MAAM,mBAAmB;;AAIvC,KAAI;AACF,gBAAc,QAAS;AACvB,SAAO;GAAW;GAAU,cAAc,aAAa,QAAS;GAAE;SAC5D;AACN,QAAM,IAAI,MAAM,mBAAmB"}
@@ -1,11 +1,12 @@
1
- import { FileKeyEncoded, FileKeyParts } from "../keys.js";
2
1
  import { UploadChecksum } from "../storage/types.js";
3
2
  import { FileVisibility, UploadStrategy } from "../types.js";
4
3
 
5
4
  //#region src/services/uploads.d.ts
5
+
6
6
  type CreateUploadInput = {
7
- keyParts?: FileKeyParts;
8
- fileKey?: FileKeyEncoded;
7
+ provider: string;
8
+ keyParts?: readonly (string | number)[];
9
+ fileKey?: string;
9
10
  filename: string;
10
11
  sizeBytes: number;
11
12
  contentType: string;
@@ -28,8 +29,8 @@ type CompletePartsInput = {
28
29
  };
29
30
  type CreateUploadResult = {
30
31
  uploadId: string;
31
- fileKey: FileKeyEncoded;
32
- fileKeyParts: FileKeyParts;
32
+ fileKey: string;
33
+ provider: string;
33
34
  status: "created" | "in_progress";
34
35
  strategy: UploadStrategy;
35
36
  expiresAt: Date;
@@ -40,8 +41,12 @@ type CreateUploadResult = {
40
41
  uploadHeaders?: Record<string, string>;
41
42
  partSizeBytes?: number;
42
43
  maxParts?: number;
44
+ statusEndpoint: string;
45
+ progressEndpoint: string;
43
46
  partsEndpoint?: string;
47
+ partsCompleteEndpoint?: string;
44
48
  completeEndpoint: string;
49
+ abortEndpoint: string;
45
50
  contentEndpoint?: string;
46
51
  };
47
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"uploads.d.ts","names":[],"sources":["../../../src/services/uploads.ts"],"sourcesContent":[],"mappings":";;;;;AAcY,KAAA,iBAAA,GAAiB;EAAA,QAAA,CAAA,EAChB,YADgB;SAChB,CAAA,EACD,cADC;UACD,EAAA,MAAA;WAIC,EAAA,MAAA;aAEE,EAAA,MAAA;UAEF,CAAA,EAJA,cAIA,GAAA,IAAA;EAAM,IAAA,CAAA,EAAA,MAAA,EAAA;EAGP,UAAA,CAAA,EALG,cAKgB;EAKnB,UAAA,CAAA,EAAA,MAAA;EAIA,QAAA,CAAA,EAZC,MAYD,CAAA,MAAkB,EAAA,OAAA,CAAA;CAAA;AAEnB,KAXC,mBAAA,GAWD;eACK,CAAA,EAAA,MAAA;eAEJ,CAAA,EAAA,MAAA;;AAMQ,KAfR,kBAAA,GAeQ;EAAM,KAAA,EAAA;;;;;;KAXd,kBAAA;;WAED;gBACK;;YAEJ;aACC;;;;;oBAKO"}
1
+ {"version":3,"file":"uploads.d.ts","names":[],"sources":["../../../src/services/uploads.ts"],"sourcesContent":[],"mappings":";;;;;AAuBa,KAPD,iBAAA,GAOC;UAEE,EAAA,MAAA;UAEF,CAAA,EAAA,SAAA,CAAA,MAAA,GAAA,MAAA,CAAA,EAAA;EAAM,OAAA,CAAA,EAAA,MAAA;EAGP,QAAA,EAAA,MAAA;EAKA,SAAA,EAAA,MAAA;EAIA,WAAA,EAAA,MAAA;EAAkB,QAAA,CAAA,EAhBjB,cAgBiB,GAAA,IAAA;MAKlB,CAAA,EAAA,MAAA,EAAA;YACC,CAAA,EApBE,cAoBF;YAKO,CAAA,EAAA,MAAA;EAAM,QAAA,CAAA,EAvBb,MAuBa,CAAA,MAAA,EAAA,OAAA,CAAA;;KApBd,mBAAA;;;;KAKA,kBAAA;;;;;;;KAIA,kBAAA;;;;;YAKA;aACC;;;;;oBAKO"}