@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,12 +1,12 @@
1
- import * as gunshi0 from "gunshi";
1
+ import * as gunshi10 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/create.d.ts
4
- declare const uploadsCreateCommand: gunshi0.Command<{
5
- "file-key": {
4
+ declare const uploadsCreateCommand: gunshi10.Command<{
5
+ provider: {
6
6
  type: "string";
7
7
  description: string;
8
8
  };
9
- "key-parts": {
9
+ "file-key": {
10
10
  type: "string";
11
11
  description: string;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/create.ts"],"sourcesContent":[],"mappings":";;;cAQa,sBA0FX,OAAA,CA1F+B;;;IAApB,WAAA,EAAA,MA0FX"}
1
+ {"version":3,"file":"create.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/create.ts"],"sourcesContent":[],"mappings":";;;cAUa,sBAsFX,QAAA,CAtF+B;;;IAApB,WAAA,EAAA,MAsFX"}
@@ -1,4 +1,4 @@
1
- import { baseArgs, createClientFromContext, parseJsonValue, resolveOptionalFileKeyValue } from "../../utils/options.js";
1
+ import { baseArgs, createClientFromContext, parseJsonValue, resolveFileKeyValue, resolveProviderValue } from "../../utils/options.js";
2
2
  import { define } from "gunshi";
3
3
 
4
4
  //#region src/cli/commands/uploads/create.ts
@@ -7,13 +7,13 @@ const uploadsCreateCommand = define({
7
7
  description: "Create an upload session",
8
8
  args: {
9
9
  ...baseArgs,
10
- "file-key": {
10
+ provider: {
11
11
  type: "string",
12
- description: "File key (encoded)"
12
+ description: "Storage provider"
13
13
  },
14
- "key-parts": {
14
+ "file-key": {
15
15
  type: "string",
16
- description: "File key parts as JSON array"
16
+ description: "File key"
17
17
  },
18
18
  filename: {
19
19
  type: "string",
@@ -55,17 +55,14 @@ const uploadsCreateCommand = define({
55
55
  if (!filename) throw new Error("Missing --filename");
56
56
  if (sizeBytes === void 0) throw new Error("Missing --size-bytes");
57
57
  if (!contentType) throw new Error("Missing --content-type");
58
- const resolvedKey = resolveOptionalFileKeyValue({
59
- fileKey: ctx.values["file-key"],
60
- keyParts: ctx.values["key-parts"]
61
- });
62
- if (!resolvedKey.fileKey && !resolvedKey.keyParts) throw new Error("Missing file key. Provide --file-key or --key-parts.");
58
+ const provider = resolveProviderValue(ctx.values["provider"]);
59
+ const resolvedKey = resolveFileKeyValue({ fileKey: ctx.values["file-key"] });
63
60
  const checksum = parseJsonValue("checksum", ctx.values["checksum"]);
64
61
  const tags = parseJsonValue("tags", ctx.values["tags"]);
65
62
  const metadata = parseJsonValue("metadata", ctx.values["metadata"]);
66
63
  const response = await createClientFromContext(ctx).createUpload({
64
+ provider,
67
65
  fileKey: resolvedKey.fileKey,
68
- keyParts: resolvedKey.keyParts,
69
66
  filename,
70
67
  sizeBytes,
71
68
  contentType,
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","names":[],"sources":["../../../../src/cli/commands/uploads/create.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport {\n baseArgs,\n createClientFromContext,\n parseJsonValue,\n resolveOptionalFileKeyValue,\n} from \"../../utils/options.js\";\n\nexport const uploadsCreateCommand = define({\n name: \"create\",\n description: \"Create an upload session\",\n args: {\n ...baseArgs,\n \"file-key\": {\n type: \"string\",\n description: \"File key (encoded)\",\n },\n \"key-parts\": {\n type: \"string\",\n description: \"File key parts as JSON array\",\n },\n filename: {\n type: \"string\",\n description: \"Filename\",\n },\n \"size-bytes\": {\n type: \"number\",\n description: \"Total size in bytes\",\n },\n \"content-type\": {\n type: \"string\",\n description: \"Content type\",\n },\n checksum: {\n type: \"string\",\n description: 'Checksum JSON, e.g. \\'{\"algo\":\"sha256\",\"value\":\"...\"}\\'',\n },\n tags: {\n type: \"string\",\n description: \"Tags as JSON array\",\n },\n visibility: {\n type: \"string\",\n description: \"Visibility (private, public, unlisted)\",\n },\n \"uploader-id\": {\n type: \"string\",\n description: \"Uploader id\",\n },\n metadata: {\n type: \"string\",\n description: \"Metadata JSON object\",\n },\n },\n run: async (ctx) => {\n const filename = ctx.values[\"filename\"] as string | undefined;\n const sizeBytes = ctx.values[\"size-bytes\"] as number | undefined;\n const contentType = ctx.values[\"content-type\"] as string | undefined;\n\n if (!filename) {\n throw new Error(\"Missing --filename\");\n }\n if (sizeBytes === undefined) {\n throw new Error(\"Missing --size-bytes\");\n }\n if (!contentType) {\n throw new Error(\"Missing --content-type\");\n }\n\n const resolvedKey = resolveOptionalFileKeyValue({\n fileKey: ctx.values[\"file-key\"] as string | undefined,\n keyParts: ctx.values[\"key-parts\"] as string | undefined,\n });\n\n if (!resolvedKey.fileKey && !resolvedKey.keyParts) {\n throw new Error(\"Missing file key. Provide --file-key or --key-parts.\");\n }\n\n const checksum = parseJsonValue(\"checksum\", ctx.values[\"checksum\"] as string | undefined);\n const tags = parseJsonValue(\"tags\", ctx.values[\"tags\"] as string | undefined);\n const metadata = parseJsonValue(\"metadata\", ctx.values[\"metadata\"] as string | undefined);\n\n const client = createClientFromContext(ctx);\n const response = await client.createUpload({\n fileKey: resolvedKey.fileKey,\n keyParts: resolvedKey.keyParts,\n filename,\n sizeBytes,\n contentType,\n checksum,\n tags,\n visibility: ctx.values[\"visibility\"] as string | undefined,\n uploaderId: ctx.values[\"uploader-id\"] as string | undefined,\n metadata,\n });\n\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAQA,MAAa,uBAAuB,OAAO;CACzC,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,YAAY;GACV,MAAM;GACN,aAAa;GACd;EACD,aAAa;GACX,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACD,cAAc;GACZ,MAAM;GACN,aAAa;GACd;EACD,gBAAgB;GACd,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACd;EACD,YAAY;GACV,MAAM;GACN,aAAa;GACd;EACD,eAAe;GACb,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;EAC5B,MAAM,YAAY,IAAI,OAAO;EAC7B,MAAM,cAAc,IAAI,OAAO;AAE/B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,qBAAqB;AAEvC,MAAI,cAAc,OAChB,OAAM,IAAI,MAAM,uBAAuB;AAEzC,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,yBAAyB;EAG3C,MAAM,cAAc,4BAA4B;GAC9C,SAAS,IAAI,OAAO;GACpB,UAAU,IAAI,OAAO;GACtB,CAAC;AAEF,MAAI,CAAC,YAAY,WAAW,CAAC,YAAY,SACvC,OAAM,IAAI,MAAM,uDAAuD;EAGzE,MAAM,WAAW,eAAe,YAAY,IAAI,OAAO,YAAkC;EACzF,MAAM,OAAO,eAAe,QAAQ,IAAI,OAAO,QAA8B;EAC7E,MAAM,WAAW,eAAe,YAAY,IAAI,OAAO,YAAkC;EAGzF,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,aAAa;GACzC,SAAS,YAAY;GACrB,UAAU,YAAY;GACtB;GACA;GACA;GACA;GACA;GACA,YAAY,IAAI,OAAO;GACvB,YAAY,IAAI,OAAO;GACvB;GACD,CAAC;AAEF,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"create.js","names":[],"sources":["../../../../src/cli/commands/uploads/create.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport {\n baseArgs,\n createClientFromContext,\n parseJsonValue,\n resolveFileKeyValue,\n resolveProviderValue,\n} from \"../../utils/options.js\";\n\nexport const uploadsCreateCommand = define({\n name: \"create\",\n description: \"Create an upload session\",\n args: {\n ...baseArgs,\n provider: {\n type: \"string\",\n description: \"Storage provider\",\n },\n \"file-key\": {\n type: \"string\",\n description: \"File key\",\n },\n filename: {\n type: \"string\",\n description: \"Filename\",\n },\n \"size-bytes\": {\n type: \"number\",\n description: \"Total size in bytes\",\n },\n \"content-type\": {\n type: \"string\",\n description: \"Content type\",\n },\n checksum: {\n type: \"string\",\n description: 'Checksum JSON, e.g. \\'{\"algo\":\"sha256\",\"value\":\"...\"}\\'',\n },\n tags: {\n type: \"string\",\n description: \"Tags as JSON array\",\n },\n visibility: {\n type: \"string\",\n description: \"Visibility (private, public, unlisted)\",\n },\n \"uploader-id\": {\n type: \"string\",\n description: \"Uploader id\",\n },\n metadata: {\n type: \"string\",\n description: \"Metadata JSON object\",\n },\n },\n run: async (ctx) => {\n const filename = ctx.values[\"filename\"] as string | undefined;\n const sizeBytes = ctx.values[\"size-bytes\"] as number | undefined;\n const contentType = ctx.values[\"content-type\"] as string | undefined;\n\n if (!filename) {\n throw new Error(\"Missing --filename\");\n }\n if (sizeBytes === undefined) {\n throw new Error(\"Missing --size-bytes\");\n }\n if (!contentType) {\n throw new Error(\"Missing --content-type\");\n }\n\n const provider = resolveProviderValue(ctx.values[\"provider\"] as string | undefined);\n const resolvedKey = resolveFileKeyValue({\n fileKey: ctx.values[\"file-key\"] as string | undefined,\n });\n\n const checksum = parseJsonValue(\"checksum\", ctx.values[\"checksum\"] as string | undefined);\n const tags = parseJsonValue(\"tags\", ctx.values[\"tags\"] as string | undefined);\n const metadata = parseJsonValue(\"metadata\", ctx.values[\"metadata\"] as string | undefined);\n\n const client = createClientFromContext(ctx);\n const response = await client.createUpload({\n provider,\n fileKey: resolvedKey.fileKey,\n filename,\n sizeBytes,\n contentType,\n checksum,\n tags,\n visibility: ctx.values[\"visibility\"] as string | undefined,\n uploaderId: ctx.values[\"uploader-id\"] as string | undefined,\n metadata,\n });\n\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAUA,MAAa,uBAAuB,OAAO;CACzC,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACD,YAAY;GACV,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACD,cAAc;GACZ,MAAM;GACN,aAAa;GACd;EACD,gBAAgB;GACd,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACD,MAAM;GACJ,MAAM;GACN,aAAa;GACd;EACD,YAAY;GACV,MAAM;GACN,aAAa;GACd;EACD,eAAe;GACb,MAAM;GACN,aAAa;GACd;EACD,UAAU;GACR,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;EAC5B,MAAM,YAAY,IAAI,OAAO;EAC7B,MAAM,cAAc,IAAI,OAAO;AAE/B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,qBAAqB;AAEvC,MAAI,cAAc,OAChB,OAAM,IAAI,MAAM,uBAAuB;AAEzC,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,yBAAyB;EAG3C,MAAM,WAAW,qBAAqB,IAAI,OAAO,YAAkC;EACnF,MAAM,cAAc,oBAAoB,EACtC,SAAS,IAAI,OAAO,aACrB,CAAC;EAEF,MAAM,WAAW,eAAe,YAAY,IAAI,OAAO,YAAkC;EACzF,MAAM,OAAO,eAAe,QAAQ,IAAI,OAAO,QAA8B;EAC7E,MAAM,WAAW,eAAe,YAAY,IAAI,OAAO,YAAkC;EAGzF,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,aAAa;GACzC;GACA,SAAS,YAAY;GACrB;GACA;GACA;GACA;GACA;GACA,YAAY,IAAI,OAAO;GACvB,YAAY,IAAI,OAAO;GACvB;GACD,CAAC;AAEF,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as gunshi0 from "gunshi";
1
+ import * as gunshi11 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/get.d.ts
4
- declare const uploadsGetCommand: gunshi0.Command<{
4
+ declare const uploadsGetCommand: gunshi11.Command<{
5
5
  "upload-id": {
6
6
  type: "string";
7
7
  short: string;
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/get.ts"],"sourcesContent":[],"mappings":";;;cAGa,mBAqBX,OAAA,CArB4B;;;IAAjB,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"get.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/get.ts"],"sourcesContent":[],"mappings":";;;cAIa,mBAqBX,QAAA,CArB4B;;;IAAjB,KAAA,EAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","names":[],"sources":["../../../../src/cli/commands/uploads/get.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsGetCommand = define({\n name: \"get\",\n description: \"Get upload status\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.getUpload(uploadId);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAGA,MAAa,oBAAoB,OAAO;CACtC,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAIxC,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,UAAU,SAAS;AACjD,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"get.js","names":[],"sources":["../../../../src/cli/commands/uploads/get.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsGetCommand = define({\n name: \"get\",\n description: \"Get upload status\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.getUpload(uploadId);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAIA,MAAa,oBAAoB,OAAO;CACtC,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAIxC,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,UAAU,SAAS;AACjD,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as gunshi2 from "gunshi";
1
+ import * as gunshi12 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/parts-complete.d.ts
4
- declare const uploadsPartsCompleteCommand: gunshi2.Command<{
4
+ declare const uploadsPartsCompleteCommand: gunshi12.Command<{
5
5
  "upload-id": {
6
6
  type: "string";
7
7
  short: string;
@@ -1 +1 @@
1
- {"version":3,"file":"parts-complete.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-complete.ts"],"sourcesContent":[],"mappings":";;;cAGa,6BAyDX,OAAA,CAzDsC;;;IAA3B,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"parts-complete.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-complete.ts"],"sourcesContent":[],"mappings":";;;cAIa,6BAyDX,QAAA,CAzDsC;;;IAA3B,KAAA,EAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"parts-complete.js","names":[],"sources":["../../../../src/cli/commands/uploads/parts-complete.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { baseArgs, createClientFromContext, parseJsonValue } from \"../../utils/options.js\";\n\nexport const uploadsPartsCompleteCommand = define({\n name: \"parts-complete\",\n description: \"Record completed parts\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n parts: {\n type: \"string\",\n description: \"JSON array of parts (partNumber, etag, sizeBytes)\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const rawParts = parseJsonValue(\"parts\", ctx.values[\"parts\"] as string | undefined);\n if (!Array.isArray(rawParts) || rawParts.length === 0) {\n throw new Error(\"--parts must be a non-empty JSON array\");\n }\n\n const parts = rawParts.map((part) => {\n if (!part || typeof part !== \"object\") {\n throw new Error(\"Invalid parts payload\");\n }\n const payload = part as { partNumber?: unknown; etag?: unknown; sizeBytes?: unknown };\n if (typeof payload.partNumber !== \"number\" || !Number.isInteger(payload.partNumber)) {\n throw new Error(\"parts.partNumber must be an integer\");\n }\n if (typeof payload.etag !== \"string\" || payload.etag.length === 0) {\n throw new Error(\"parts.etag must be a string\");\n }\n if (\n typeof payload.sizeBytes !== \"number\" ||\n !Number.isFinite(payload.sizeBytes) ||\n !Number.isInteger(payload.sizeBytes) ||\n payload.sizeBytes < 0 ||\n payload.sizeBytes > Number.MAX_SAFE_INTEGER\n ) {\n throw new Error(\"parts.sizeBytes must be a non-negative integer\");\n }\n return {\n partNumber: payload.partNumber,\n etag: payload.etag,\n sizeBytes: payload.sizeBytes,\n };\n });\n\n const client = createClientFromContext(ctx);\n const response = await client.completeParts(uploadId, parts);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAGA,MAAa,8BAA8B,OAAO;CAChD,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,WAAW,eAAe,SAAS,IAAI,OAAO,SAA+B;AACnF,MAAI,CAAC,MAAM,QAAQ,SAAS,IAAI,SAAS,WAAW,EAClD,OAAM,IAAI,MAAM,yCAAyC;EAG3D,MAAM,QAAQ,SAAS,KAAK,SAAS;AACnC,OAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B,OAAM,IAAI,MAAM,wBAAwB;GAE1C,MAAM,UAAU;AAChB,OAAI,OAAO,QAAQ,eAAe,YAAY,CAAC,OAAO,UAAU,QAAQ,WAAW,CACjF,OAAM,IAAI,MAAM,sCAAsC;AAExD,OAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,KAAK,WAAW,EAC9D,OAAM,IAAI,MAAM,8BAA8B;AAEhD,OACE,OAAO,QAAQ,cAAc,YAC7B,CAAC,OAAO,SAAS,QAAQ,UAAU,IACnC,CAAC,OAAO,UAAU,QAAQ,UAAU,IACpC,QAAQ,YAAY,KACpB,QAAQ,YAAY,OAAO,iBAE3B,OAAM,IAAI,MAAM,iDAAiD;AAEnE,UAAO;IACL,YAAY,QAAQ;IACpB,MAAM,QAAQ;IACd,WAAW,QAAQ;IACpB;IACD;EAGF,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,cAAc,UAAU,MAAM;AAC5D,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"parts-complete.js","names":[],"sources":["../../../../src/cli/commands/uploads/parts-complete.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport { baseArgs, createClientFromContext, parseJsonValue } from \"../../utils/options.js\";\n\nexport const uploadsPartsCompleteCommand = define({\n name: \"parts-complete\",\n description: \"Record completed parts\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n parts: {\n type: \"string\",\n description: \"JSON array of parts (partNumber, etag, sizeBytes)\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const rawParts = parseJsonValue(\"parts\", ctx.values[\"parts\"] as string | undefined);\n if (!Array.isArray(rawParts) || rawParts.length === 0) {\n throw new Error(\"--parts must be a non-empty JSON array\");\n }\n\n const parts = rawParts.map((part) => {\n if (!part || typeof part !== \"object\") {\n throw new Error(\"Invalid parts payload\");\n }\n const payload = part as { partNumber?: unknown; etag?: unknown; sizeBytes?: unknown };\n if (typeof payload.partNumber !== \"number\" || !Number.isInteger(payload.partNumber)) {\n throw new Error(\"parts.partNumber must be an integer\");\n }\n if (typeof payload.etag !== \"string\" || payload.etag.length === 0) {\n throw new Error(\"parts.etag must be a string\");\n }\n if (\n typeof payload.sizeBytes !== \"number\" ||\n !Number.isFinite(payload.sizeBytes) ||\n !Number.isInteger(payload.sizeBytes) ||\n payload.sizeBytes < 0 ||\n payload.sizeBytes > Number.MAX_SAFE_INTEGER\n ) {\n throw new Error(\"parts.sizeBytes must be a non-negative integer\");\n }\n return {\n partNumber: payload.partNumber,\n etag: payload.etag,\n sizeBytes: payload.sizeBytes,\n };\n });\n\n const client = createClientFromContext(ctx);\n const response = await client.completeParts(uploadId, parts);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAIA,MAAa,8BAA8B,OAAO;CAChD,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,WAAW,eAAe,SAAS,IAAI,OAAO,SAA+B;AACnF,MAAI,CAAC,MAAM,QAAQ,SAAS,IAAI,SAAS,WAAW,EAClD,OAAM,IAAI,MAAM,yCAAyC;EAG3D,MAAM,QAAQ,SAAS,KAAK,SAAS;AACnC,OAAI,CAAC,QAAQ,OAAO,SAAS,SAC3B,OAAM,IAAI,MAAM,wBAAwB;GAE1C,MAAM,UAAU;AAChB,OAAI,OAAO,QAAQ,eAAe,YAAY,CAAC,OAAO,UAAU,QAAQ,WAAW,CACjF,OAAM,IAAI,MAAM,sCAAsC;AAExD,OAAI,OAAO,QAAQ,SAAS,YAAY,QAAQ,KAAK,WAAW,EAC9D,OAAM,IAAI,MAAM,8BAA8B;AAEhD,OACE,OAAO,QAAQ,cAAc,YAC7B,CAAC,OAAO,SAAS,QAAQ,UAAU,IACnC,CAAC,OAAO,UAAU,QAAQ,UAAU,IACpC,QAAQ,YAAY,KACpB,QAAQ,YAAY,OAAO,iBAE3B,OAAM,IAAI,MAAM,iDAAiD;AAEnE,UAAO;IACL,YAAY,QAAQ;IACpB,MAAM,QAAQ;IACd,WAAW,QAAQ;IACpB;IACD;EAGF,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,cAAc,UAAU,MAAM;AAC5D,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as gunshi4 from "gunshi";
1
+ import * as gunshi13 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/parts-list.d.ts
4
- declare const uploadsPartsListCommand: gunshi4.Command<{
4
+ declare const uploadsPartsListCommand: gunshi13.Command<{
5
5
  "upload-id": {
6
6
  type: "string";
7
7
  short: string;
@@ -1 +1 @@
1
- {"version":3,"file":"parts-list.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-list.ts"],"sourcesContent":[],"mappings":";;;cAGa,yBAqBX,OAAA,CArBkC;;;IAAvB,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"parts-list.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-list.ts"],"sourcesContent":[],"mappings":";;;cAIa,yBAqBX,QAAA,CArBkC;;;IAAvB,KAAA,EAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"parts-list.js","names":[],"sources":["../../../../src/cli/commands/uploads/parts-list.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsPartsListCommand = define({\n name: \"parts-list\",\n description: \"List uploaded parts\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.listParts(uploadId);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAGA,MAAa,0BAA0B,OAAO;CAC5C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAIxC,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,UAAU,SAAS;AACjD,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"parts-list.js","names":[],"sources":["../../../../src/cli/commands/uploads/parts-list.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsPartsListCommand = define({\n name: \"parts-list\",\n description: \"List uploaded parts\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.listParts(uploadId);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAIA,MAAa,0BAA0B,OAAO;CAC5C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAIxC,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,UAAU,SAAS;AACjD,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as gunshi3 from "gunshi";
1
+ import * as gunshi14 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/parts-urls.d.ts
4
- declare const uploadsPartsUrlsCommand: gunshi3.Command<{
4
+ declare const uploadsPartsUrlsCommand: gunshi14.Command<{
5
5
  "upload-id": {
6
6
  type: "string";
7
7
  short: string;
@@ -1 +1 @@
1
- {"version":3,"file":"parts-urls.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-urls.ts"],"sourcesContent":[],"mappings":";;;cAiCa,yBAmCX,OAAA,CAnCkC;;;IAAvB,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"parts-urls.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/parts-urls.ts"],"sourcesContent":[],"mappings":";;;cAkCa,yBAmCX,QAAA,CAnCkC;;;IAAvB,KAAA,EAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"parts-urls.js","names":["parts: number[]"],"sources":["../../../../src/cli/commands/uploads/parts-urls.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { baseArgs, createClientFromContext, parseJsonValue } from \"../../utils/options.js\";\n\nconst parsePartNumbers = (rawParts: unknown, rawPart: unknown): number[] => {\n const parts: number[] = [];\n\n if (rawParts) {\n const parsed = parseJsonValue(\"parts\", String(rawParts));\n if (!Array.isArray(parsed)) {\n throw new Error(\"--parts must be a JSON array of numbers\");\n }\n for (const value of parsed) {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 1) {\n throw new Error(\"--parts must be a JSON array of positive integers\");\n }\n parts.push(value);\n }\n }\n\n if (rawPart) {\n const items = Array.isArray(rawPart) ? rawPart : [rawPart];\n for (const value of items) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new Error(\"--part must be a positive integer\");\n }\n parts.push(parsed);\n }\n }\n\n return Array.from(new Set(parts));\n};\n\nexport const uploadsPartsUrlsCommand = define({\n name: \"parts-urls\",\n description: \"Get signed URLs for multipart upload\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n parts: {\n type: \"string\",\n description: \"JSON array of part numbers\",\n },\n part: {\n type: \"number\",\n multiple: true,\n description: \"Part number (repeatable)\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const partNumbers = parsePartNumbers(ctx.values[\"parts\"], ctx.values[\"part\"]);\n if (!partNumbers.length) {\n throw new Error(\"Provide --parts or at least one --part\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.getPartUrls(uploadId, partNumbers);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAGA,MAAM,oBAAoB,UAAmB,YAA+B;CAC1E,MAAMA,QAAkB,EAAE;AAE1B,KAAI,UAAU;EACZ,MAAM,SAAS,eAAe,SAAS,OAAO,SAAS,CAAC;AACxD,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,OAAM,IAAI,MAAM,0CAA0C;AAE5D,OAAK,MAAM,SAAS,QAAQ;AAC1B,OAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,MAAM,IAAI,QAAQ,EACnE,OAAM,IAAI,MAAM,oDAAoD;AAEtE,SAAM,KAAK,MAAM;;;AAIrB,KAAI,SAAS;EACX,MAAM,QAAQ,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;AAC1D,OAAK,MAAM,SAAS,OAAO;GACzB,MAAM,SAAS,OAAO,MAAM;AAC5B,OAAI,CAAC,OAAO,UAAU,OAAO,IAAI,SAAS,EACxC,OAAM,IAAI,MAAM,oCAAoC;AAEtD,SAAM,KAAK,OAAO;;;AAItB,QAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC;;AAGnC,MAAa,0BAA0B,OAAO;CAC5C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACd;EACD,MAAM;GACJ,MAAM;GACN,UAAU;GACV,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,cAAc,iBAAiB,IAAI,OAAO,UAAU,IAAI,OAAO,QAAQ;AAC7E,MAAI,CAAC,YAAY,OACf,OAAM,IAAI,MAAM,yCAAyC;EAI3D,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,YAAY,UAAU,YAAY;AAChE,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"parts-urls.js","names":["parts: number[]"],"sources":["../../../../src/cli/commands/uploads/parts-urls.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport { baseArgs, createClientFromContext, parseJsonValue } from \"../../utils/options.js\";\n\nconst parsePartNumbers = (rawParts: unknown, rawPart: unknown): number[] => {\n const parts: number[] = [];\n\n if (rawParts) {\n const parsed = parseJsonValue(\"parts\", String(rawParts));\n if (!Array.isArray(parsed)) {\n throw new Error(\"--parts must be a JSON array of numbers\");\n }\n for (const value of parsed) {\n if (typeof value !== \"number\" || !Number.isInteger(value) || value < 1) {\n throw new Error(\"--parts must be a JSON array of positive integers\");\n }\n parts.push(value);\n }\n }\n\n if (rawPart) {\n const items = Array.isArray(rawPart) ? rawPart : [rawPart];\n for (const value of items) {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new Error(\"--part must be a positive integer\");\n }\n parts.push(parsed);\n }\n }\n\n return Array.from(new Set(parts));\n};\n\nexport const uploadsPartsUrlsCommand = define({\n name: \"parts-urls\",\n description: \"Get signed URLs for multipart upload\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n parts: {\n type: \"string\",\n description: \"JSON array of part numbers\",\n },\n part: {\n type: \"number\",\n multiple: true,\n description: \"Part number (repeatable)\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const partNumbers = parsePartNumbers(ctx.values[\"parts\"], ctx.values[\"part\"]);\n if (!partNumbers.length) {\n throw new Error(\"Provide --parts or at least one --part\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.getPartUrls(uploadId, partNumbers);\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAIA,MAAM,oBAAoB,UAAmB,YAA+B;CAC1E,MAAMA,QAAkB,EAAE;AAE1B,KAAI,UAAU;EACZ,MAAM,SAAS,eAAe,SAAS,OAAO,SAAS,CAAC;AACxD,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,OAAM,IAAI,MAAM,0CAA0C;AAE5D,OAAK,MAAM,SAAS,QAAQ;AAC1B,OAAI,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,MAAM,IAAI,QAAQ,EACnE,OAAM,IAAI,MAAM,oDAAoD;AAEtE,SAAM,KAAK,MAAM;;;AAIrB,KAAI,SAAS;EACX,MAAM,QAAQ,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;AAC1D,OAAK,MAAM,SAAS,OAAO;GACzB,MAAM,SAAS,OAAO,MAAM;AAC5B,OAAI,CAAC,OAAO,UAAU,OAAO,IAAI,SAAS,EACxC,OAAM,IAAI,MAAM,oCAAoC;AAEtD,SAAM,KAAK,OAAO;;;AAItB,QAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC;;AAGnC,MAAa,0BAA0B,OAAO;CAC5C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,OAAO;GACL,MAAM;GACN,aAAa;GACd;EACD,MAAM;GACJ,MAAM;GACN,UAAU;GACV,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,cAAc,iBAAiB,IAAI,OAAO,UAAU,IAAI,OAAO,QAAQ;AAC7E,MAAI,CAAC,YAAY,OACf,OAAM,IAAI,MAAM,yCAAyC;EAI3D,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,YAAY,UAAU,YAAY;AAChE,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as gunshi1 from "gunshi";
1
+ import * as gunshi15 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/progress.d.ts
4
- declare const uploadsProgressCommand: gunshi1.Command<{
4
+ declare const uploadsProgressCommand: gunshi15.Command<{
5
5
  "upload-id": {
6
6
  type: "string";
7
7
  short: string;
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/progress.ts"],"sourcesContent":[],"mappings":";;;cAGa,wBAoCX,OAAA,CApCiC;;;IAAtB,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"progress.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/progress.ts"],"sourcesContent":[],"mappings":";;;cAIa,wBAoCX,QAAA,CApCiC;;;IAAtB,KAAA,EAAA,MAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","names":[],"sources":["../../../../src/cli/commands/uploads/progress.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsProgressCommand = define({\n name: \"progress\",\n description: \"Record upload progress\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n \"bytes-uploaded\": {\n type: \"number\",\n description: \"Total bytes uploaded\",\n },\n \"parts-uploaded\": {\n type: \"number\",\n description: \"Total parts uploaded\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const bytesUploaded = ctx.values[\"bytes-uploaded\"] as number | undefined;\n const partsUploaded = ctx.values[\"parts-uploaded\"] as number | undefined;\n\n if (bytesUploaded === undefined && partsUploaded === undefined) {\n throw new Error(\"Provide --bytes-uploaded, --parts-uploaded, or both.\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.reportProgress(uploadId, { bytesUploaded, partsUploaded });\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAGA,MAAa,yBAAyB,OAAO;CAC3C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,kBAAkB;GAChB,MAAM;GACN,aAAa;GACd;EACD,kBAAkB;GAChB,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,gBAAgB,IAAI,OAAO;EACjC,MAAM,gBAAgB,IAAI,OAAO;AAEjC,MAAI,kBAAkB,UAAa,kBAAkB,OACnD,OAAM,IAAI,MAAM,uDAAuD;EAIzE,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,eAAe,UAAU;GAAE;GAAe;GAAe,CAAC;AACxF,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
1
+ {"version":3,"file":"progress.js","names":[],"sources":["../../../../src/cli/commands/uploads/progress.ts"],"sourcesContent":["import { define } from \"gunshi\";\n\nimport { baseArgs, createClientFromContext } from \"../../utils/options.js\";\n\nexport const uploadsProgressCommand = define({\n name: \"progress\",\n description: \"Record upload progress\",\n args: {\n ...baseArgs,\n \"upload-id\": {\n type: \"string\",\n short: \"i\",\n description: \"Upload id\",\n },\n \"bytes-uploaded\": {\n type: \"number\",\n description: \"Total bytes uploaded\",\n },\n \"parts-uploaded\": {\n type: \"number\",\n description: \"Total parts uploaded\",\n },\n },\n run: async (ctx) => {\n const uploadId = ctx.values[\"upload-id\"] as string | undefined;\n if (!uploadId) {\n throw new Error(\"Missing --upload-id\");\n }\n\n const bytesUploaded = ctx.values[\"bytes-uploaded\"] as number | undefined;\n const partsUploaded = ctx.values[\"parts-uploaded\"] as number | undefined;\n\n if (bytesUploaded === undefined && partsUploaded === undefined) {\n throw new Error(\"Provide --bytes-uploaded, --parts-uploaded, or both.\");\n }\n\n const client = createClientFromContext(ctx);\n const response = await client.reportProgress(uploadId, { bytesUploaded, partsUploaded });\n console.log(JSON.stringify(response, null, 2));\n },\n});\n"],"mappings":";;;;AAIA,MAAa,yBAAyB,OAAO;CAC3C,MAAM;CACN,aAAa;CACb,MAAM;EACJ,GAAG;EACH,aAAa;GACX,MAAM;GACN,OAAO;GACP,aAAa;GACd;EACD,kBAAkB;GAChB,MAAM;GACN,aAAa;GACd;EACD,kBAAkB;GAChB,MAAM;GACN,aAAa;GACd;EACF;CACD,KAAK,OAAO,QAAQ;EAClB,MAAM,WAAW,IAAI,OAAO;AAC5B,MAAI,CAAC,SACH,OAAM,IAAI,MAAM,sBAAsB;EAGxC,MAAM,gBAAgB,IAAI,OAAO;EACjC,MAAM,gBAAgB,IAAI,OAAO;AAEjC,MAAI,kBAAkB,UAAa,kBAAkB,OACnD,OAAM,IAAI,MAAM,uDAAuD;EAIzE,MAAM,WAAW,MADF,wBAAwB,IAAI,CACb,eAAe,UAAU;GAAE;GAAe;GAAe,CAAC;AACxF,UAAQ,IAAI,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC;;CAEjD,CAAC"}
@@ -1,17 +1,17 @@
1
- import * as gunshi8 from "gunshi";
1
+ import * as gunshi0 from "gunshi";
2
2
 
3
3
  //#region src/cli/commands/uploads/transfer.d.ts
4
- declare const uploadsTransferCommand: gunshi8.Command<{
4
+ declare const uploadsTransferCommand: gunshi0.Command<{
5
5
  file: {
6
6
  type: "string";
7
7
  short: string;
8
8
  description: string;
9
9
  };
10
- "file-key": {
10
+ provider: {
11
11
  type: "string";
12
12
  description: string;
13
13
  };
14
- "key-parts": {
14
+ "file-key": {
15
15
  type: "string";
16
16
  description: string;
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/transfer.ts"],"sourcesContent":[],"mappings":";;;cAaa,wBAmMX,OAAA,CAnMiC;;;IAAtB,KAAA,EAAA,MAAA"}
1
+ {"version":3,"file":"transfer.d.ts","names":[],"sources":["../../../../src/cli/commands/uploads/transfer.ts"],"sourcesContent":[],"mappings":";;;cAgBa,wBA+LX,OAAA,CA/LiC;;;IAAtB,KAAA,EAAA,MAAA"}
@@ -1,7 +1,7 @@
1
- import { baseArgs, createClientFromContext, parseJsonValue, resolveOptionalFileKeyValue } from "../../utils/options.js";
2
- import { define } from "gunshi";
1
+ import { baseArgs, createClientFromContext, parseJsonValue, resolveFileKeyValue, resolveProviderValue } from "../../utils/options.js";
3
2
  import { createReadStream, promises } from "node:fs";
4
3
  import path from "node:path";
4
+ import { define } from "gunshi";
5
5
  import { Readable } from "node:stream";
6
6
 
7
7
  //#region src/cli/commands/uploads/transfer.ts
@@ -16,13 +16,13 @@ const uploadsTransferCommand = define({
16
16
  short: "f",
17
17
  description: "Path to file"
18
18
  },
19
- "file-key": {
19
+ provider: {
20
20
  type: "string",
21
- description: "File key (encoded)"
21
+ description: "Storage provider"
22
22
  },
23
- "key-parts": {
23
+ "file-key": {
24
24
  type: "string",
25
- description: "File key parts as JSON array"
25
+ description: "File key"
26
26
  },
27
27
  filename: {
28
28
  type: "string",
@@ -56,11 +56,8 @@ const uploadsTransferCommand = define({
56
56
  run: async (ctx) => {
57
57
  const filePath = ctx.values["file"];
58
58
  if (!filePath) throw new Error("Missing --file");
59
- const resolvedKey = resolveOptionalFileKeyValue({
60
- fileKey: ctx.values["file-key"],
61
- keyParts: ctx.values["key-parts"]
62
- });
63
- if (!resolvedKey.fileKey && !resolvedKey.keyParts) throw new Error("Missing file key. Provide --file-key or --key-parts.");
59
+ const provider = resolveProviderValue(ctx.values["provider"]);
60
+ const resolvedKey = resolveFileKeyValue({ fileKey: ctx.values["file-key"] });
64
61
  const sizeBytes = (await promises.stat(filePath)).size;
65
62
  const filename = ctx.values["filename"] ?? path.basename(filePath);
66
63
  const contentType = ctx.values["content-type"] ?? DEFAULT_CONTENT_TYPE;
@@ -69,8 +66,8 @@ const uploadsTransferCommand = define({
69
66
  const metadata = parseJsonValue("metadata", ctx.values["metadata"]);
70
67
  const client = createClientFromContext(ctx);
71
68
  const upload = await client.createUpload({
69
+ provider,
72
70
  fileKey: resolvedKey.fileKey,
73
- keyParts: resolvedKey.keyParts,
74
71
  filename,
75
72
  sizeBytes,
76
73
  contentType,
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.js","names":["fs","init: RequestInit & { duplex?: \"half\" }","response","completedParts: { partNumber: number; etag: string; sizeBytes: number }[]","completionParts: { partNumber: number; etag: string }[]"],"sources":["../../../../src/cli/commands/uploads/transfer.ts"],"sourcesContent":["import { define } from \"gunshi\";\nimport { createReadStream, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport {\n baseArgs,\n createClientFromContext,\n parseJsonValue,\n resolveOptionalFileKeyValue,\n} from \"../../utils/options.js\";\n\nconst DEFAULT_CONTENT_TYPE = \"application/octet-stream\";\n\nexport const uploadsTransferCommand = define({\n name: \"transfer\",\n description: \"Create an upload and transfer a file\",\n args: {\n ...baseArgs,\n file: {\n type: \"string\",\n short: \"f\",\n description: \"Path to file\",\n },\n \"file-key\": {\n type: \"string\",\n description: \"File key (encoded)\",\n },\n \"key-parts\": {\n type: \"string\",\n description: \"File key parts as JSON array\",\n },\n filename: {\n type: \"string\",\n description: \"Override filename\",\n },\n \"content-type\": {\n type: \"string\",\n description: \"Content type (default: application/octet-stream)\",\n },\n checksum: {\n type: \"string\",\n description: 'Checksum JSON, e.g. \\'{\"algo\":\"sha256\",\"value\":\"...\"}\\'',\n },\n tags: {\n type: \"string\",\n description: \"Tags as JSON array\",\n },\n visibility: {\n type: \"string\",\n description: \"Visibility (private, public, unlisted)\",\n },\n \"uploader-id\": {\n type: \"string\",\n description: \"Uploader id\",\n },\n metadata: {\n type: \"string\",\n description: \"Metadata JSON object\",\n },\n },\n run: async (ctx) => {\n const filePath = ctx.values[\"file\"] as string | undefined;\n if (!filePath) {\n throw new Error(\"Missing --file\");\n }\n\n const resolvedKey = resolveOptionalFileKeyValue({\n fileKey: ctx.values[\"file-key\"] as string | undefined,\n keyParts: ctx.values[\"key-parts\"] as string | undefined,\n });\n\n if (!resolvedKey.fileKey && !resolvedKey.keyParts) {\n throw new Error(\"Missing file key. Provide --file-key or --key-parts.\");\n }\n\n const stats = await fs.stat(filePath);\n const sizeBytes = stats.size;\n const filename = (ctx.values[\"filename\"] as string | undefined) ?? path.basename(filePath);\n const contentType = (ctx.values[\"content-type\"] as string | undefined) ?? DEFAULT_CONTENT_TYPE;\n\n const checksum = parseJsonValue(\"checksum\", ctx.values[\"checksum\"] as string | undefined);\n const tags = parseJsonValue(\"tags\", ctx.values[\"tags\"] as string | undefined);\n const metadata = parseJsonValue(\"metadata\", ctx.values[\"metadata\"] as string | undefined);\n\n const client = createClientFromContext(ctx);\n const upload = (await client.createUpload({\n fileKey: resolvedKey.fileKey,\n keyParts: resolvedKey.keyParts,\n filename,\n sizeBytes,\n contentType,\n checksum,\n tags,\n visibility: ctx.values[\"visibility\"] as string | undefined,\n uploaderId: ctx.values[\"uploader-id\"] as string | undefined,\n metadata,\n })) as {\n uploadId: string;\n strategy: \"direct-single\" | \"direct-multipart\" | \"proxy\";\n upload: {\n partSizeBytes?: number;\n maxParts?: number;\n uploadUrl?: string;\n uploadHeaders?: Record<string, string>;\n };\n };\n\n if (upload.strategy === \"direct-single\") {\n if (!upload.upload.uploadUrl) {\n throw new Error(\"Missing upload URL for direct upload\");\n }\n\n const headers = new Headers(upload.upload.uploadHeaders ?? {});\n headers.set(\"Content-Length\", String(sizeBytes));\n const init: RequestInit & { duplex?: \"half\" } = {\n method: \"PUT\",\n headers,\n body: Readable.toWeb(createReadStream(filePath)) as BodyInit,\n duplex: \"half\",\n };\n const response = await fetch(upload.upload.uploadUrl, init);\n\n if (!response.ok) {\n throw new Error(`Direct upload failed (${response.status})`);\n }\n\n await client.reportProgress(upload.uploadId, {\n bytesUploaded: sizeBytes,\n partsUploaded: 1,\n });\n\n const file = await client.completeUpload(upload.uploadId, []);\n console.log(JSON.stringify({ upload, file }, null, 2));\n return;\n }\n\n if (upload.strategy === \"direct-multipart\") {\n const partSizeBytes = upload.upload.partSizeBytes;\n if (!partSizeBytes) {\n throw new Error(\"Missing multipart part size from server\");\n }\n\n const totalParts = Math.ceil(sizeBytes / partSizeBytes);\n if (upload.upload.maxParts && totalParts > upload.upload.maxParts) {\n throw new Error(\"Multipart upload exceeds maximum parts\");\n }\n\n const partNumbers = Array.from({ length: totalParts }, (_, index) => index + 1);\n const partUrls = (await client.getPartUrls(upload.uploadId, partNumbers)) as {\n parts: { partNumber: number; url: string; headers?: Record<string, string> }[];\n };\n const orderedParts = partUrls.parts.sort((a, b) => a.partNumber - b.partNumber);\n\n const completedParts: { partNumber: number; etag: string; sizeBytes: number }[] = [];\n const completionParts: { partNumber: number; etag: string }[] = [];\n\n let bytesUploaded = 0;\n let partsUploaded = 0;\n\n for (const part of orderedParts) {\n const start = (part.partNumber - 1) * partSizeBytes;\n const length = Math.min(partSizeBytes, sizeBytes - start);\n const end = start + length - 1;\n\n const headers = new Headers(part.headers ?? {});\n headers.set(\"Content-Length\", String(length));\n const init: RequestInit & { duplex?: \"half\" } = {\n method: \"PUT\",\n headers,\n body: Readable.toWeb(createReadStream(filePath, { start, end })) as BodyInit,\n duplex: \"half\",\n };\n\n const response = await fetch(part.url, init);\n\n if (!response.ok) {\n throw new Error(`Multipart upload failed (${response.status})`);\n }\n\n const etag = response.headers.get(\"etag\") ?? response.headers.get(\"ETag\");\n if (!etag) {\n throw new Error(\"Missing ETag for uploaded part\");\n }\n\n completedParts.push({ partNumber: part.partNumber, etag, sizeBytes: length });\n completionParts.push({ partNumber: part.partNumber, etag });\n\n bytesUploaded += length;\n partsUploaded += 1;\n await client.reportProgress(upload.uploadId, {\n bytesUploaded,\n partsUploaded,\n });\n }\n\n await client.completeParts(upload.uploadId, completedParts);\n const file = await client.completeUpload(upload.uploadId, completionParts);\n console.log(JSON.stringify({ upload, file }, null, 2));\n return;\n }\n\n const response = await client.uploadContent(\n upload.uploadId,\n Readable.toWeb(createReadStream(filePath)) as BodyInit,\n contentType,\n );\n console.log(JSON.stringify({ upload, file: response }, null, 2));\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"transfer.js","names":["fs","init: RequestInit & { duplex?: \"half\" }","response","completedParts: { partNumber: number; etag: string; sizeBytes: number }[]","completionParts: { partNumber: number; etag: string }[]"],"sources":["../../../../src/cli/commands/uploads/transfer.ts"],"sourcesContent":["import { createReadStream, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { Readable } from \"node:stream\";\n\nimport { define } from \"gunshi\";\n\nimport {\n baseArgs,\n createClientFromContext,\n parseJsonValue,\n resolveFileKeyValue,\n resolveProviderValue,\n} from \"../../utils/options.js\";\n\nconst DEFAULT_CONTENT_TYPE = \"application/octet-stream\";\n\nexport const uploadsTransferCommand = define({\n name: \"transfer\",\n description: \"Create an upload and transfer a file\",\n args: {\n ...baseArgs,\n file: {\n type: \"string\",\n short: \"f\",\n description: \"Path to file\",\n },\n provider: {\n type: \"string\",\n description: \"Storage provider\",\n },\n \"file-key\": {\n type: \"string\",\n description: \"File key\",\n },\n filename: {\n type: \"string\",\n description: \"Override filename\",\n },\n \"content-type\": {\n type: \"string\",\n description: \"Content type (default: application/octet-stream)\",\n },\n checksum: {\n type: \"string\",\n description: 'Checksum JSON, e.g. \\'{\"algo\":\"sha256\",\"value\":\"...\"}\\'',\n },\n tags: {\n type: \"string\",\n description: \"Tags as JSON array\",\n },\n visibility: {\n type: \"string\",\n description: \"Visibility (private, public, unlisted)\",\n },\n \"uploader-id\": {\n type: \"string\",\n description: \"Uploader id\",\n },\n metadata: {\n type: \"string\",\n description: \"Metadata JSON object\",\n },\n },\n run: async (ctx) => {\n const filePath = ctx.values[\"file\"] as string | undefined;\n if (!filePath) {\n throw new Error(\"Missing --file\");\n }\n\n const provider = resolveProviderValue(ctx.values[\"provider\"] as string | undefined);\n const resolvedKey = resolveFileKeyValue({\n fileKey: ctx.values[\"file-key\"] as string | undefined,\n });\n\n const stats = await fs.stat(filePath);\n const sizeBytes = stats.size;\n const filename = (ctx.values[\"filename\"] as string | undefined) ?? path.basename(filePath);\n const contentType = (ctx.values[\"content-type\"] as string | undefined) ?? DEFAULT_CONTENT_TYPE;\n\n const checksum = parseJsonValue(\"checksum\", ctx.values[\"checksum\"] as string | undefined);\n const tags = parseJsonValue(\"tags\", ctx.values[\"tags\"] as string | undefined);\n const metadata = parseJsonValue(\"metadata\", ctx.values[\"metadata\"] as string | undefined);\n\n const client = createClientFromContext(ctx);\n const upload = (await client.createUpload({\n provider,\n fileKey: resolvedKey.fileKey,\n filename,\n sizeBytes,\n contentType,\n checksum,\n tags,\n visibility: ctx.values[\"visibility\"] as string | undefined,\n uploaderId: ctx.values[\"uploader-id\"] as string | undefined,\n metadata,\n })) as {\n uploadId: string;\n strategy: \"direct-single\" | \"direct-multipart\" | \"proxy\";\n upload: {\n partSizeBytes?: number;\n maxParts?: number;\n uploadUrl?: string;\n uploadHeaders?: Record<string, string>;\n };\n };\n\n if (upload.strategy === \"direct-single\") {\n if (!upload.upload.uploadUrl) {\n throw new Error(\"Missing upload URL for direct upload\");\n }\n\n const headers = new Headers(upload.upload.uploadHeaders ?? {});\n headers.set(\"Content-Length\", String(sizeBytes));\n const init: RequestInit & { duplex?: \"half\" } = {\n method: \"PUT\",\n headers,\n body: Readable.toWeb(createReadStream(filePath)) as BodyInit,\n duplex: \"half\",\n };\n const response = await fetch(upload.upload.uploadUrl, init);\n\n if (!response.ok) {\n throw new Error(`Direct upload failed (${response.status})`);\n }\n\n await client.reportProgress(upload.uploadId, {\n bytesUploaded: sizeBytes,\n partsUploaded: 1,\n });\n\n const file = await client.completeUpload(upload.uploadId, []);\n console.log(JSON.stringify({ upload, file }, null, 2));\n return;\n }\n\n if (upload.strategy === \"direct-multipart\") {\n const partSizeBytes = upload.upload.partSizeBytes;\n if (!partSizeBytes) {\n throw new Error(\"Missing multipart part size from server\");\n }\n\n const totalParts = Math.ceil(sizeBytes / partSizeBytes);\n if (upload.upload.maxParts && totalParts > upload.upload.maxParts) {\n throw new Error(\"Multipart upload exceeds maximum parts\");\n }\n\n const partNumbers = Array.from({ length: totalParts }, (_, index) => index + 1);\n const partUrls = (await client.getPartUrls(upload.uploadId, partNumbers)) as {\n parts: { partNumber: number; url: string; headers?: Record<string, string> }[];\n };\n const orderedParts = partUrls.parts.sort((a, b) => a.partNumber - b.partNumber);\n\n const completedParts: { partNumber: number; etag: string; sizeBytes: number }[] = [];\n const completionParts: { partNumber: number; etag: string }[] = [];\n\n let bytesUploaded = 0;\n let partsUploaded = 0;\n\n for (const part of orderedParts) {\n const start = (part.partNumber - 1) * partSizeBytes;\n const length = Math.min(partSizeBytes, sizeBytes - start);\n const end = start + length - 1;\n\n const headers = new Headers(part.headers ?? {});\n headers.set(\"Content-Length\", String(length));\n const init: RequestInit & { duplex?: \"half\" } = {\n method: \"PUT\",\n headers,\n body: Readable.toWeb(createReadStream(filePath, { start, end })) as BodyInit,\n duplex: \"half\",\n };\n\n const response = await fetch(part.url, init);\n\n if (!response.ok) {\n throw new Error(`Multipart upload failed (${response.status})`);\n }\n\n const etag = response.headers.get(\"etag\") ?? response.headers.get(\"ETag\");\n if (!etag) {\n throw new Error(\"Missing ETag for uploaded part\");\n }\n\n completedParts.push({ partNumber: part.partNumber, etag, sizeBytes: length });\n completionParts.push({ partNumber: part.partNumber, etag });\n\n bytesUploaded += length;\n partsUploaded += 1;\n await client.reportProgress(upload.uploadId, {\n bytesUploaded,\n partsUploaded,\n });\n }\n\n await client.completeParts(upload.uploadId, completedParts);\n const file = await client.completeUpload(upload.uploadId, completionParts);\n console.log(JSON.stringify({ upload, file }, null, 2));\n return;\n }\n\n const response = await client.uploadContent(\n upload.uploadId,\n Readable.toWeb(createReadStream(filePath)) as BodyInit,\n contentType,\n );\n console.log(JSON.stringify({ upload, file: response }, null, 2));\n },\n});\n"],"mappings":"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"}
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
+ import { filesDeleteCommand } from "./commands/files/delete.js";
3
+ import { filesDownloadUrlCommand } from "./commands/files/download-url.js";
4
+ import { filesDownloadCommand } from "./commands/files/download.js";
5
+ import { filesGetCommand } from "./commands/files/get.js";
6
+ import { filesListCommand } from "./commands/files/list.js";
7
+ import { filesUpdateCommand } from "./commands/files/update.js";
8
+ import { filesUploadCommand } from "./commands/files/upload.js";
9
+ import { uploadsAbortCommand } from "./commands/uploads/abort.js";
10
+ import { uploadsCompleteCommand } from "./commands/uploads/complete.js";
11
+ import { uploadsContentCommand } from "./commands/uploads/content.js";
2
12
  import { uploadsCreateCommand } from "./commands/uploads/create.js";
3
13
  import { uploadsGetCommand } from "./commands/uploads/get.js";
4
- import { uploadsProgressCommand } from "./commands/uploads/progress.js";
5
- import { uploadsPartsUrlsCommand } from "./commands/uploads/parts-urls.js";
6
- import { uploadsPartsListCommand } from "./commands/uploads/parts-list.js";
7
14
  import { uploadsPartsCompleteCommand } from "./commands/uploads/parts-complete.js";
8
- import { uploadsCompleteCommand } from "./commands/uploads/complete.js";
9
- import { uploadsAbortCommand } from "./commands/uploads/abort.js";
10
- import { uploadsContentCommand } from "./commands/uploads/content.js";
15
+ import { uploadsPartsListCommand } from "./commands/uploads/parts-list.js";
16
+ import { uploadsPartsUrlsCommand } from "./commands/uploads/parts-urls.js";
17
+ import { uploadsProgressCommand } from "./commands/uploads/progress.js";
11
18
  import { uploadsTransferCommand } from "./commands/uploads/transfer.js";
12
- import { filesUploadCommand } from "./commands/files/upload.js";
13
- import { filesListCommand } from "./commands/files/list.js";
14
- import { filesGetCommand } from "./commands/files/get.js";
15
- import { filesUpdateCommand } from "./commands/files/update.js";
16
- import { filesDeleteCommand } from "./commands/files/delete.js";
17
- import { filesDownloadUrlCommand } from "./commands/files/download-url.js";
18
- import { filesDownloadCommand } from "./commands/files/download.js";
19
19
  import { Args, Command } from "gunshi";
20
20
 
21
21
  //#region src/cli/index.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;cA6Ba,gBAAc,QAAA;cAKd,cAAY,QAAA;AALZ,iBA0HS,GAAA,CAAA,CAvHpB,EAuHuB,OAvHvB,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;cA+Ba,gBAAc,QAAA;cAKd,cAAY,QAAA;AALZ,iBA0HS,GAAA,CAAA,CAvHpB,EAuHuB,OAvHvB,CAAA,IAAA,CAAA"}
package/dist/cli/index.js CHANGED
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
+ import { filesDeleteCommand } from "./commands/files/delete.js";
3
+ import { filesDownloadUrlCommand } from "./commands/files/download-url.js";
4
+ import { filesDownloadCommand } from "./commands/files/download.js";
5
+ import { filesGetCommand } from "./commands/files/get.js";
6
+ import { filesListCommand } from "./commands/files/list.js";
7
+ import { filesUpdateCommand } from "./commands/files/update.js";
8
+ import { filesUploadCommand } from "./commands/files/upload.js";
9
+ import { uploadsAbortCommand } from "./commands/uploads/abort.js";
10
+ import { uploadsCompleteCommand } from "./commands/uploads/complete.js";
11
+ import { uploadsContentCommand } from "./commands/uploads/content.js";
2
12
  import { uploadsCreateCommand } from "./commands/uploads/create.js";
3
13
  import { uploadsGetCommand } from "./commands/uploads/get.js";
4
- import { uploadsProgressCommand } from "./commands/uploads/progress.js";
5
- import { uploadsPartsUrlsCommand } from "./commands/uploads/parts-urls.js";
6
- import { uploadsPartsListCommand } from "./commands/uploads/parts-list.js";
7
14
  import { uploadsPartsCompleteCommand } from "./commands/uploads/parts-complete.js";
8
- import { uploadsCompleteCommand } from "./commands/uploads/complete.js";
9
- import { uploadsAbortCommand } from "./commands/uploads/abort.js";
10
- import { uploadsContentCommand } from "./commands/uploads/content.js";
15
+ import { uploadsPartsListCommand } from "./commands/uploads/parts-list.js";
16
+ import { uploadsPartsUrlsCommand } from "./commands/uploads/parts-urls.js";
17
+ import { uploadsProgressCommand } from "./commands/uploads/progress.js";
11
18
  import { uploadsTransferCommand } from "./commands/uploads/transfer.js";
12
- import { filesUploadCommand } from "./commands/files/upload.js";
13
- import { filesListCommand } from "./commands/files/list.js";
14
- import { filesGetCommand } from "./commands/files/get.js";
15
- import { filesUpdateCommand } from "./commands/files/update.js";
16
- import { filesDeleteCommand } from "./commands/files/delete.js";
17
- import { filesDownloadUrlCommand } from "./commands/files/download-url.js";
18
- import { filesDownloadCommand } from "./commands/files/download.js";
19
- import { cli, define } from "gunshi";
20
19
  import { readFileSync } from "node:fs";
21
20
  import { dirname, join } from "node:path";
22
21
  import { fileURLToPath } from "node:url";
22
+ import { cli, define } from "gunshi";
23
23
 
24
24
  //#region src/cli/index.ts
25
25
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["uploadsSubCommands: Map<string, Command<Args>>","filesSubCommands: Map<string, Command<Args>>"],"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { cli, define } from \"gunshi\";\nimport type { Args, Command } from \"gunshi\";\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { uploadsCreateCommand } from \"./commands/uploads/create.js\";\nimport { uploadsGetCommand } from \"./commands/uploads/get.js\";\nimport { uploadsProgressCommand } from \"./commands/uploads/progress.js\";\nimport { uploadsPartsUrlsCommand } from \"./commands/uploads/parts-urls.js\";\nimport { uploadsPartsListCommand } from \"./commands/uploads/parts-list.js\";\nimport { uploadsPartsCompleteCommand } from \"./commands/uploads/parts-complete.js\";\nimport { uploadsCompleteCommand } from \"./commands/uploads/complete.js\";\nimport { uploadsAbortCommand } from \"./commands/uploads/abort.js\";\nimport { uploadsContentCommand } from \"./commands/uploads/content.js\";\nimport { uploadsTransferCommand } from \"./commands/uploads/transfer.js\";\nimport { filesUploadCommand } from \"./commands/files/upload.js\";\nimport { filesListCommand } from \"./commands/files/list.js\";\nimport { filesGetCommand } from \"./commands/files/get.js\";\nimport { filesUpdateCommand } from \"./commands/files/update.js\";\nimport { filesDeleteCommand } from \"./commands/files/delete.js\";\nimport { filesDownloadUrlCommand } from \"./commands/files/download-url.js\";\nimport { filesDownloadCommand } from \"./commands/files/download.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst packageJson = JSON.parse(readFileSync(join(__dirname, \"../../package.json\"), \"utf-8\"));\nconst version = packageJson.version as string;\n\nexport const uploadsCommand = define({\n name: \"uploads\",\n description: \"Upload session commands\",\n});\n\nexport const filesCommand = define({\n name: \"files\",\n description: \"File commands\",\n});\n\nconst uploadsSubCommands: Map<string, Command<Args>> = new Map();\nuploadsSubCommands.set(\"create\", uploadsCreateCommand as Command<Args>);\nuploadsSubCommands.set(\"get\", uploadsGetCommand as Command<Args>);\nuploadsSubCommands.set(\"progress\", uploadsProgressCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-urls\", uploadsPartsUrlsCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-list\", uploadsPartsListCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-complete\", uploadsPartsCompleteCommand as Command<Args>);\nuploadsSubCommands.set(\"complete\", uploadsCompleteCommand as Command<Args>);\nuploadsSubCommands.set(\"abort\", uploadsAbortCommand as Command<Args>);\nuploadsSubCommands.set(\"content\", uploadsContentCommand as Command<Args>);\nuploadsSubCommands.set(\"transfer\", uploadsTransferCommand as Command<Args>);\n\nconst filesSubCommands: Map<string, Command<Args>> = new Map();\nfilesSubCommands.set(\"upload\", filesUploadCommand as Command<Args>);\nfilesSubCommands.set(\"list\", filesListCommand as Command<Args>);\nfilesSubCommands.set(\"get\", filesGetCommand as Command<Args>);\nfilesSubCommands.set(\"update\", filesUpdateCommand as Command<Args>);\nfilesSubCommands.set(\"delete\", filesDeleteCommand as Command<Args>);\nfilesSubCommands.set(\"download-url\", filesDownloadUrlCommand as Command<Args>);\nfilesSubCommands.set(\"download\", filesDownloadCommand as Command<Args>);\n\nconst printMainHelp = () => {\n console.log(\"Upload management CLI for Fragno\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" uploads Manage upload sessions\");\n console.log(\" files Manage files\");\n console.log(\"\");\n console.log(\"GLOBAL OPTIONS:\");\n console.log(\" -b, --base-url Upload fragment base URL\");\n console.log(\" -H, --header Extra HTTP header (repeatable)\");\n console.log(\" --timeout Request timeout in ms (default: 15000)\");\n console.log(\" --retries Retry count for network/5xx/429 (default: 2)\");\n console.log(\" --retry-delay Retry delay in ms (default: 500)\");\n console.log(\"\");\n console.log(\"ENVIRONMENT:\");\n console.log(\" FRAGNO_UPLOAD_BASE_URL Default base URL\");\n console.log(\" FRAGNO_UPLOAD_HEADERS Extra headers separated by ';' or newlines\");\n console.log(\" FRAGNO_UPLOAD_TIMEOUT_MS Default timeout in ms\");\n console.log(\" FRAGNO_UPLOAD_RETRIES Default retry count\");\n console.log(\" FRAGNO_UPLOAD_RETRY_DELAY_MS Default retry delay in ms\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload uploads create -b https://host/api/uploads --file-key s~Zm9v --filename demo.txt --size-bytes 10 --content-type text/plain\",\n );\n console.log(\" fragno-upload uploads get -b https://host/api/uploads -i upl_123\");\n console.log(\n \" fragno-upload uploads transfer -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n console.log(\" fragno-upload files list -b https://host/api/uploads --prefix s~Zm9v.\");\n console.log(\n \" fragno-upload files download -b https://host/api/uploads --file-key s~Zm9v -o ./download.txt\",\n );\n};\n\nconst printUploadsHelp = () => {\n console.log(\"Upload session commands\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload uploads <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" create Create an upload session\");\n console.log(\" get Get upload status\");\n console.log(\" progress Record upload progress\");\n console.log(\" parts-urls Get signed URLs for multipart upload\");\n console.log(\" parts-list List uploaded parts\");\n console.log(\" parts-complete Record completed parts\");\n console.log(\" complete Complete an upload\");\n console.log(\" abort Abort an upload\");\n console.log(\" content Upload file bytes via proxy upload\");\n console.log(\" transfer Create an upload and transfer a file\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload uploads create -b https://host/api/uploads --file-key s~Zm9v --filename demo.txt --size-bytes 10 --content-type text/plain\",\n );\n console.log(\" fragno-upload uploads get -b https://host/api/uploads -i upl_123\");\n console.log(\n \" fragno-upload uploads transfer -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n};\n\nconst printFilesHelp = () => {\n console.log(\"File commands\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload files <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" upload Upload a file via /files\");\n console.log(\" list List files\");\n console.log(\" get Get file metadata\");\n console.log(\" update Update file metadata\");\n console.log(\" delete Delete a file\");\n console.log(\" download-url Get a signed download URL\");\n console.log(\" download Download file contents\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload files upload -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n console.log(\" fragno-upload files list -b https://host/api/uploads --prefix s~Zm9v.\");\n console.log(\n \" fragno-upload files download -b https://host/api/uploads --file-key s~Zm9v -o ./download.txt\",\n );\n};\n\nexport async function run() {\n try {\n const args = process.argv.slice(2);\n\n if (!args.length || args[0] === \"--help\" || args[0] === \"-h\") {\n printMainHelp();\n return;\n }\n\n if (args[0] === \"--version\" || args[0] === \"-v\") {\n console.log(version);\n return;\n }\n\n if (args[0] === \"uploads\") {\n const subCommandName = args[1];\n if (!subCommandName || subCommandName === \"--help\" || subCommandName === \"-h\") {\n printUploadsHelp();\n return;\n }\n if (subCommandName === \"--version\" || subCommandName === \"-v\") {\n console.log(version);\n return;\n }\n\n const subCommand = uploadsSubCommands.get(subCommandName);\n if (!subCommand) {\n console.error(`Unknown command: ${subCommandName}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload uploads --help' for available commands.\");\n process.exit(1);\n }\n\n await cli(args.slice(2), subCommand, {\n name: `fragno-upload uploads ${subCommandName}`,\n version,\n });\n return;\n }\n\n if (args[0] === \"files\") {\n const subCommandName = args[1];\n if (!subCommandName || subCommandName === \"--help\" || subCommandName === \"-h\") {\n printFilesHelp();\n return;\n }\n if (subCommandName === \"--version\" || subCommandName === \"-v\") {\n console.log(version);\n return;\n }\n\n const subCommand = filesSubCommands.get(subCommandName);\n if (!subCommand) {\n console.error(`Unknown command: ${subCommandName}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload files --help' for available commands.\");\n process.exit(1);\n }\n\n await cli(args.slice(2), subCommand, {\n name: `fragno-upload files ${subCommandName}`,\n version,\n });\n return;\n }\n\n console.error(`Unknown command: ${args[0]}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload --help' for available commands.\");\n process.exit(1);\n } catch (error) {\n console.error(error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nif (import.meta.main) {\n await run();\n}\n\nexport {\n uploadsCreateCommand,\n uploadsGetCommand,\n uploadsProgressCommand,\n uploadsPartsUrlsCommand,\n uploadsPartsListCommand,\n uploadsPartsCompleteCommand,\n uploadsCompleteCommand,\n uploadsAbortCommand,\n uploadsContentCommand,\n uploadsTransferCommand,\n filesUploadCommand,\n filesListCommand,\n filesGetCommand,\n filesUpdateCommand,\n filesDeleteCommand,\n filesDownloadUrlCommand,\n filesDownloadCommand,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["uploadsSubCommands: Map<string, Command<Args>>","filesSubCommands: Map<string, Command<Args>>"],"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { cli, define } from \"gunshi\";\nimport type { Args, Command } from \"gunshi\";\n\nimport { filesDeleteCommand } from \"./commands/files/delete.js\";\nimport { filesDownloadUrlCommand } from \"./commands/files/download-url.js\";\nimport { filesDownloadCommand } from \"./commands/files/download.js\";\nimport { filesGetCommand } from \"./commands/files/get.js\";\nimport { filesListCommand } from \"./commands/files/list.js\";\nimport { filesUpdateCommand } from \"./commands/files/update.js\";\nimport { filesUploadCommand } from \"./commands/files/upload.js\";\nimport { uploadsAbortCommand } from \"./commands/uploads/abort.js\";\nimport { uploadsCompleteCommand } from \"./commands/uploads/complete.js\";\nimport { uploadsContentCommand } from \"./commands/uploads/content.js\";\nimport { uploadsCreateCommand } from \"./commands/uploads/create.js\";\nimport { uploadsGetCommand } from \"./commands/uploads/get.js\";\nimport { uploadsPartsCompleteCommand } from \"./commands/uploads/parts-complete.js\";\nimport { uploadsPartsListCommand } from \"./commands/uploads/parts-list.js\";\nimport { uploadsPartsUrlsCommand } from \"./commands/uploads/parts-urls.js\";\nimport { uploadsProgressCommand } from \"./commands/uploads/progress.js\";\nimport { uploadsTransferCommand } from \"./commands/uploads/transfer.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst packageJson = JSON.parse(readFileSync(join(__dirname, \"../../package.json\"), \"utf-8\"));\nconst version = packageJson.version as string;\n\nexport const uploadsCommand = define({\n name: \"uploads\",\n description: \"Upload session commands\",\n});\n\nexport const filesCommand = define({\n name: \"files\",\n description: \"File commands\",\n});\n\nconst uploadsSubCommands: Map<string, Command<Args>> = new Map();\nuploadsSubCommands.set(\"create\", uploadsCreateCommand as Command<Args>);\nuploadsSubCommands.set(\"get\", uploadsGetCommand as Command<Args>);\nuploadsSubCommands.set(\"progress\", uploadsProgressCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-urls\", uploadsPartsUrlsCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-list\", uploadsPartsListCommand as Command<Args>);\nuploadsSubCommands.set(\"parts-complete\", uploadsPartsCompleteCommand as Command<Args>);\nuploadsSubCommands.set(\"complete\", uploadsCompleteCommand as Command<Args>);\nuploadsSubCommands.set(\"abort\", uploadsAbortCommand as Command<Args>);\nuploadsSubCommands.set(\"content\", uploadsContentCommand as Command<Args>);\nuploadsSubCommands.set(\"transfer\", uploadsTransferCommand as Command<Args>);\n\nconst filesSubCommands: Map<string, Command<Args>> = new Map();\nfilesSubCommands.set(\"upload\", filesUploadCommand as Command<Args>);\nfilesSubCommands.set(\"list\", filesListCommand as Command<Args>);\nfilesSubCommands.set(\"get\", filesGetCommand as Command<Args>);\nfilesSubCommands.set(\"update\", filesUpdateCommand as Command<Args>);\nfilesSubCommands.set(\"delete\", filesDeleteCommand as Command<Args>);\nfilesSubCommands.set(\"download-url\", filesDownloadUrlCommand as Command<Args>);\nfilesSubCommands.set(\"download\", filesDownloadCommand as Command<Args>);\n\nconst printMainHelp = () => {\n console.log(\"Upload management CLI for Fragno\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" uploads Manage upload sessions\");\n console.log(\" files Manage files\");\n console.log(\"\");\n console.log(\"GLOBAL OPTIONS:\");\n console.log(\" -b, --base-url Upload fragment base URL\");\n console.log(\" -H, --header Extra HTTP header (repeatable)\");\n console.log(\" --timeout Request timeout in ms (default: 15000)\");\n console.log(\" --retries Retry count for network/5xx/429 (default: 2)\");\n console.log(\" --retry-delay Retry delay in ms (default: 500)\");\n console.log(\"\");\n console.log(\"ENVIRONMENT:\");\n console.log(\" FRAGNO_UPLOAD_BASE_URL Default base URL\");\n console.log(\" FRAGNO_UPLOAD_HEADERS Extra headers separated by ';' or newlines\");\n console.log(\" FRAGNO_UPLOAD_TIMEOUT_MS Default timeout in ms\");\n console.log(\" FRAGNO_UPLOAD_RETRIES Default retry count\");\n console.log(\" FRAGNO_UPLOAD_RETRY_DELAY_MS Default retry delay in ms\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload uploads create -b https://host/api/uploads --file-key s~Zm9v --filename demo.txt --size-bytes 10 --content-type text/plain\",\n );\n console.log(\" fragno-upload uploads get -b https://host/api/uploads -i upl_123\");\n console.log(\n \" fragno-upload uploads transfer -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n console.log(\" fragno-upload files list -b https://host/api/uploads --prefix s~Zm9v.\");\n console.log(\n \" fragno-upload files download -b https://host/api/uploads --file-key s~Zm9v -o ./download.txt\",\n );\n};\n\nconst printUploadsHelp = () => {\n console.log(\"Upload session commands\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload uploads <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" create Create an upload session\");\n console.log(\" get Get upload status\");\n console.log(\" progress Record upload progress\");\n console.log(\" parts-urls Get signed URLs for multipart upload\");\n console.log(\" parts-list List uploaded parts\");\n console.log(\" parts-complete Record completed parts\");\n console.log(\" complete Complete an upload\");\n console.log(\" abort Abort an upload\");\n console.log(\" content Upload file bytes via proxy upload\");\n console.log(\" transfer Create an upload and transfer a file\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload uploads create -b https://host/api/uploads --file-key s~Zm9v --filename demo.txt --size-bytes 10 --content-type text/plain\",\n );\n console.log(\" fragno-upload uploads get -b https://host/api/uploads -i upl_123\");\n console.log(\n \" fragno-upload uploads transfer -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n};\n\nconst printFilesHelp = () => {\n console.log(\"File commands\");\n console.log(\"\");\n console.log(\"USAGE:\");\n console.log(\" fragno-upload files <COMMAND>\");\n console.log(\"\");\n console.log(\"COMMANDS:\");\n console.log(\" upload Upload a file via /files\");\n console.log(\" list List files\");\n console.log(\" get Get file metadata\");\n console.log(\" update Update file metadata\");\n console.log(\" delete Delete a file\");\n console.log(\" download-url Get a signed download URL\");\n console.log(\" download Download file contents\");\n console.log(\"\");\n console.log(\"EXAMPLES:\");\n console.log(\n \" fragno-upload files upload -b https://host/api/uploads -f ./demo.txt --file-key s~Zm9v\",\n );\n console.log(\" fragno-upload files list -b https://host/api/uploads --prefix s~Zm9v.\");\n console.log(\n \" fragno-upload files download -b https://host/api/uploads --file-key s~Zm9v -o ./download.txt\",\n );\n};\n\nexport async function run() {\n try {\n const args = process.argv.slice(2);\n\n if (!args.length || args[0] === \"--help\" || args[0] === \"-h\") {\n printMainHelp();\n return;\n }\n\n if (args[0] === \"--version\" || args[0] === \"-v\") {\n console.log(version);\n return;\n }\n\n if (args[0] === \"uploads\") {\n const subCommandName = args[1];\n if (!subCommandName || subCommandName === \"--help\" || subCommandName === \"-h\") {\n printUploadsHelp();\n return;\n }\n if (subCommandName === \"--version\" || subCommandName === \"-v\") {\n console.log(version);\n return;\n }\n\n const subCommand = uploadsSubCommands.get(subCommandName);\n if (!subCommand) {\n console.error(`Unknown command: ${subCommandName}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload uploads --help' for available commands.\");\n process.exit(1);\n }\n\n await cli(args.slice(2), subCommand, {\n name: `fragno-upload uploads ${subCommandName}`,\n version,\n });\n return;\n }\n\n if (args[0] === \"files\") {\n const subCommandName = args[1];\n if (!subCommandName || subCommandName === \"--help\" || subCommandName === \"-h\") {\n printFilesHelp();\n return;\n }\n if (subCommandName === \"--version\" || subCommandName === \"-v\") {\n console.log(version);\n return;\n }\n\n const subCommand = filesSubCommands.get(subCommandName);\n if (!subCommand) {\n console.error(`Unknown command: ${subCommandName}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload files --help' for available commands.\");\n process.exit(1);\n }\n\n await cli(args.slice(2), subCommand, {\n name: `fragno-upload files ${subCommandName}`,\n version,\n });\n return;\n }\n\n console.error(`Unknown command: ${args[0]}`);\n console.log(\"\");\n console.log(\"Run 'fragno-upload --help' for available commands.\");\n process.exit(1);\n } catch (error) {\n console.error(error instanceof Error ? error.message : error);\n process.exit(1);\n }\n}\n\nif (import.meta.main) {\n await run();\n}\n\nexport {\n uploadsCreateCommand,\n uploadsGetCommand,\n uploadsProgressCommand,\n uploadsPartsUrlsCommand,\n uploadsPartsListCommand,\n uploadsPartsCompleteCommand,\n uploadsCompleteCommand,\n uploadsAbortCommand,\n uploadsContentCommand,\n uploadsTransferCommand,\n filesUploadCommand,\n filesListCommand,\n filesGetCommand,\n filesUpdateCommand,\n filesDeleteCommand,\n filesDownloadUrlCommand,\n filesDownloadCommand,\n};\n"],"mappings":"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"}
@@ -113,6 +113,10 @@ async function requestJson(config, path, { method = "GET", query, body } = {}) {
113
113
  return parsed;
114
114
  }
115
115
  function createClient(config) {
116
+ const buildByKeyQuery = (provider, fileKey) => ({
117
+ provider,
118
+ key: fileKey
119
+ });
116
120
  return {
117
121
  buildUrl: (path, query) => buildUrl(config.baseUrl, path, query),
118
122
  requestResponse: (path, options) => requestResponse(config, path, options),
@@ -158,14 +162,27 @@ function createClient(config) {
158
162
  method: "GET",
159
163
  query
160
164
  }),
161
- getFile: (fileKey) => requestJson(config, `/files/${fileKey}`),
162
- updateFile: (fileKey, payload) => requestJson(config, `/files/${fileKey}`, {
165
+ getFile: (provider, fileKey) => requestJson(config, "/files/by-key", {
166
+ method: "GET",
167
+ query: buildByKeyQuery(provider, fileKey)
168
+ }),
169
+ updateFile: (provider, fileKey, payload) => requestJson(config, "/files/by-key", {
163
170
  method: "PATCH",
171
+ query: buildByKeyQuery(provider, fileKey),
164
172
  body: payload
165
173
  }),
166
- deleteFile: (fileKey) => requestJson(config, `/files/${fileKey}`, { method: "DELETE" }),
167
- getDownloadUrl: (fileKey) => requestJson(config, `/files/${fileKey}/download-url`),
168
- downloadContent: (fileKey) => requestResponse(config, `/files/${fileKey}/content`, { method: "GET" })
174
+ deleteFile: (provider, fileKey) => requestJson(config, "/files/by-key", {
175
+ method: "DELETE",
176
+ query: buildByKeyQuery(provider, fileKey)
177
+ }),
178
+ getDownloadUrl: (provider, fileKey) => requestJson(config, "/files/by-key/download-url", {
179
+ method: "GET",
180
+ query: buildByKeyQuery(provider, fileKey)
181
+ }),
182
+ downloadContent: (provider, fileKey) => requestResponse(config, "/files/by-key/content", {
183
+ method: "GET",
184
+ query: buildByKeyQuery(provider, fileKey)
185
+ })
169
186
  };
170
187
  }
171
188