@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.
- package/README.md +148 -12
- package/dist/browser/client/clients.js +17 -9
- package/dist/browser/client/clients.js.map +1 -1
- package/dist/browser/client/helpers.d.ts +15 -6
- package/dist/browser/client/helpers.d.ts.map +1 -1
- package/dist/browser/client/helpers.js +176 -30
- package/dist/browser/client/helpers.js.map +1 -1
- 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
- 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
- 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
- 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
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/atom/index.js +2 -1
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/atom/index.js.map +1 -0
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/clean-stores/index.js +6 -0
- 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
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/computed/index.js +8 -5
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/computed/index.js.map +1 -0
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js +1 -1
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/lifecycle/index.js.map +1 -1
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/listen-keys/index.js +1 -1
- 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
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js +1 -1
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/map/index.js.map +1 -1
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js +1 -1
- package/dist/browser/client/node_modules/.pnpm/{nanostores@1.1.0 → nanostores@1.2.0}/node_modules/nanostores/task/index.js.map +1 -1
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js +16 -0
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.2.0/node_modules/nanostores/warn/index.js.map +1 -0
- package/dist/browser/client/packages/fragment-upload/src/definition.js +1 -42
- package/dist/browser/client/packages/fragment-upload/src/definition.js.map +1 -1
- package/dist/browser/client/packages/fragment-upload/src/routes/files.js +12 -5
- package/dist/browser/client/packages/fragment-upload/src/routes/files.js.map +1 -1
- package/dist/browser/client/packages/fragment-upload/src/routes/shared.js +3 -4
- package/dist/browser/client/packages/fragment-upload/src/routes/shared.js.map +1 -1
- package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js +32 -21
- package/dist/browser/client/packages/fragment-upload/src/routes/uploads.js.map +1 -1
- package/dist/browser/client/packages/fragment-upload/src/schema.js +33 -3
- package/dist/browser/client/packages/fragment-upload/src/schema.js.map +1 -1
- package/dist/browser/client/packages/fragment-upload/src/types.d.ts +1 -2
- package/dist/browser/client/packages/fragment-upload/src/types.d.ts.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/client.js +28 -12
- package/dist/browser/client/packages/fragno/dist/client/client.js.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/client.svelte.js +11 -3
- package/dist/browser/client/packages/fragno/dist/client/client.svelte.js.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/react.js +104 -12
- package/dist/browser/client/packages/fragno/dist/client/react.js.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/solid.js +25 -11
- package/dist/browser/client/packages/fragno/dist/client/solid.js.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/vanilla.js +21 -1
- package/dist/browser/client/packages/fragno/dist/client/vanilla.js.map +1 -1
- package/dist/browser/client/packages/fragno/dist/client/vue.js +19 -11
- package/dist/browser/client/packages/fragno/dist/client/vue.js.map +1 -1
- package/dist/browser/client/react.d.ts +215 -192
- package/dist/browser/client/react.d.ts.map +1 -1
- package/dist/browser/client/react.js.map +1 -1
- package/dist/browser/client/solid.d.ts +218 -196
- package/dist/browser/client/solid.d.ts.map +1 -1
- package/dist/browser/client/solid.js.map +1 -1
- package/dist/browser/client/svelte.d.ts +216 -193
- package/dist/browser/client/svelte.d.ts.map +1 -1
- package/dist/browser/client/svelte.js.map +1 -1
- package/dist/browser/client/vanilla.d.ts +217 -195
- package/dist/browser/client/vanilla.d.ts.map +1 -1
- package/dist/browser/client/vanilla.js.map +1 -1
- package/dist/browser/client/vue.d.ts +217 -194
- package/dist/browser/client/vue.d.ts.map +1 -1
- package/dist/browser/client/vue.js.map +1 -1
- package/dist/cli/commands/files/delete.d.ts +4 -4
- package/dist/cli/commands/files/delete.d.ts.map +1 -1
- package/dist/cli/commands/files/delete.js +8 -10
- package/dist/cli/commands/files/delete.js.map +1 -1
- package/dist/cli/commands/files/download-url.d.ts +4 -4
- package/dist/cli/commands/files/download-url.d.ts.map +1 -1
- package/dist/cli/commands/files/download-url.js +8 -10
- package/dist/cli/commands/files/download-url.js.map +1 -1
- package/dist/cli/commands/files/download.d.ts +4 -4
- package/dist/cli/commands/files/download.d.ts.map +1 -1
- package/dist/cli/commands/files/download.js +10 -12
- package/dist/cli/commands/files/download.js.map +1 -1
- package/dist/cli/commands/files/get.d.ts +4 -4
- package/dist/cli/commands/files/get.d.ts.map +1 -1
- package/dist/cli/commands/files/get.js +8 -10
- package/dist/cli/commands/files/get.js.map +1 -1
- package/dist/cli/commands/files/list.d.ts +4 -4
- package/dist/cli/commands/files/list.d.ts.map +1 -1
- package/dist/cli/commands/files/list.js +6 -8
- package/dist/cli/commands/files/list.js.map +1 -1
- package/dist/cli/commands/files/update.d.ts +4 -4
- package/dist/cli/commands/files/update.d.ts.map +1 -1
- package/dist/cli/commands/files/update.js +8 -10
- package/dist/cli/commands/files/update.js.map +1 -1
- package/dist/cli/commands/files/upload.d.ts +4 -4
- package/dist/cli/commands/files/upload.d.ts.map +1 -1
- package/dist/cli/commands/files/upload.js +10 -12
- package/dist/cli/commands/files/upload.js.map +1 -1
- package/dist/cli/commands/uploads/abort.d.ts +2 -2
- package/dist/cli/commands/uploads/abort.d.ts.map +1 -1
- package/dist/cli/commands/uploads/abort.js.map +1 -1
- package/dist/cli/commands/uploads/complete.d.ts +2 -2
- package/dist/cli/commands/uploads/complete.d.ts.map +1 -1
- package/dist/cli/commands/uploads/complete.js.map +1 -1
- package/dist/cli/commands/uploads/content.d.ts +2 -2
- package/dist/cli/commands/uploads/content.d.ts.map +1 -1
- package/dist/cli/commands/uploads/content.js +1 -1
- package/dist/cli/commands/uploads/content.js.map +1 -1
- package/dist/cli/commands/uploads/create.d.ts +4 -4
- package/dist/cli/commands/uploads/create.d.ts.map +1 -1
- package/dist/cli/commands/uploads/create.js +8 -11
- package/dist/cli/commands/uploads/create.js.map +1 -1
- package/dist/cli/commands/uploads/get.d.ts +2 -2
- package/dist/cli/commands/uploads/get.d.ts.map +1 -1
- package/dist/cli/commands/uploads/get.js.map +1 -1
- package/dist/cli/commands/uploads/parts-complete.d.ts +2 -2
- package/dist/cli/commands/uploads/parts-complete.d.ts.map +1 -1
- package/dist/cli/commands/uploads/parts-complete.js.map +1 -1
- package/dist/cli/commands/uploads/parts-list.d.ts +2 -2
- package/dist/cli/commands/uploads/parts-list.d.ts.map +1 -1
- package/dist/cli/commands/uploads/parts-list.js.map +1 -1
- package/dist/cli/commands/uploads/parts-urls.d.ts +2 -2
- package/dist/cli/commands/uploads/parts-urls.d.ts.map +1 -1
- package/dist/cli/commands/uploads/parts-urls.js.map +1 -1
- package/dist/cli/commands/uploads/progress.d.ts +2 -2
- package/dist/cli/commands/uploads/progress.d.ts.map +1 -1
- package/dist/cli/commands/uploads/progress.js.map +1 -1
- package/dist/cli/commands/uploads/transfer.d.ts +4 -4
- package/dist/cli/commands/uploads/transfer.d.ts.map +1 -1
- package/dist/cli/commands/uploads/transfer.js +9 -12
- package/dist/cli/commands/uploads/transfer.js.map +1 -1
- package/dist/cli/index.d.ts +13 -13
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +14 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/client.js +22 -5
- package/dist/cli/utils/client.js.map +1 -1
- package/dist/cli/utils/options.js +7 -43
- package/dist/cli/utils/options.js.map +1 -1
- package/dist/node/cli/commands/files/delete.d.ts +4 -4
- package/dist/node/cli/commands/files/delete.d.ts.map +1 -1
- package/dist/node/cli/commands/files/delete.js +8 -10
- package/dist/node/cli/commands/files/delete.js.map +1 -1
- package/dist/node/cli/commands/files/download-url.d.ts +4 -4
- package/dist/node/cli/commands/files/download-url.d.ts.map +1 -1
- package/dist/node/cli/commands/files/download-url.js +8 -10
- package/dist/node/cli/commands/files/download-url.js.map +1 -1
- package/dist/node/cli/commands/files/download.d.ts +4 -4
- package/dist/node/cli/commands/files/download.d.ts.map +1 -1
- package/dist/node/cli/commands/files/download.js +9 -11
- package/dist/node/cli/commands/files/download.js.map +1 -1
- package/dist/node/cli/commands/files/get.d.ts +4 -4
- package/dist/node/cli/commands/files/get.d.ts.map +1 -1
- package/dist/node/cli/commands/files/get.js +8 -10
- package/dist/node/cli/commands/files/get.js.map +1 -1
- package/dist/node/cli/commands/files/list.d.ts +4 -4
- package/dist/node/cli/commands/files/list.d.ts.map +1 -1
- package/dist/node/cli/commands/files/list.js +6 -8
- package/dist/node/cli/commands/files/list.js.map +1 -1
- package/dist/node/cli/commands/files/update.d.ts +4 -4
- package/dist/node/cli/commands/files/update.d.ts.map +1 -1
- package/dist/node/cli/commands/files/update.js +8 -10
- package/dist/node/cli/commands/files/update.js.map +1 -1
- package/dist/node/cli/commands/files/upload.d.ts +4 -4
- package/dist/node/cli/commands/files/upload.d.ts.map +1 -1
- package/dist/node/cli/commands/files/upload.js +9 -11
- package/dist/node/cli/commands/files/upload.js.map +1 -1
- package/dist/node/cli/commands/uploads/abort.d.ts +2 -2
- package/dist/node/cli/commands/uploads/abort.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/abort.js.map +1 -1
- package/dist/node/cli/commands/uploads/complete.d.ts +2 -2
- package/dist/node/cli/commands/uploads/complete.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/complete.js.map +1 -1
- package/dist/node/cli/commands/uploads/content.d.ts +2 -2
- package/dist/node/cli/commands/uploads/content.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/content.js.map +1 -1
- package/dist/node/cli/commands/uploads/create.d.ts +4 -4
- package/dist/node/cli/commands/uploads/create.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/create.js +8 -11
- package/dist/node/cli/commands/uploads/create.js.map +1 -1
- package/dist/node/cli/commands/uploads/get.d.ts +2 -2
- package/dist/node/cli/commands/uploads/get.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/get.js.map +1 -1
- package/dist/node/cli/commands/uploads/parts-complete.d.ts +2 -2
- package/dist/node/cli/commands/uploads/parts-complete.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/parts-complete.js.map +1 -1
- package/dist/node/cli/commands/uploads/parts-list.d.ts +2 -2
- package/dist/node/cli/commands/uploads/parts-list.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/parts-list.js.map +1 -1
- package/dist/node/cli/commands/uploads/parts-urls.d.ts +2 -2
- package/dist/node/cli/commands/uploads/parts-urls.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/parts-urls.js.map +1 -1
- package/dist/node/cli/commands/uploads/progress.d.ts +2 -2
- package/dist/node/cli/commands/uploads/progress.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/progress.js.map +1 -1
- package/dist/node/cli/commands/uploads/transfer.d.ts +4 -4
- package/dist/node/cli/commands/uploads/transfer.d.ts.map +1 -1
- package/dist/node/cli/commands/uploads/transfer.js +8 -11
- package/dist/node/cli/commands/uploads/transfer.js.map +1 -1
- package/dist/node/cli/index.d.ts +13 -13
- package/dist/node/cli/index.d.ts.map +1 -1
- package/dist/node/cli/index.js +14 -14
- package/dist/node/cli/index.js.map +1 -1
- package/dist/node/cli/utils/client.js +22 -5
- package/dist/node/cli/utils/client.js.map +1 -1
- package/dist/node/cli/utils/options.js +7 -43
- package/dist/node/cli/utils/options.js.map +1 -1
- package/dist/node/client/clients.d.ts +217 -194
- package/dist/node/client/clients.d.ts.map +1 -1
- package/dist/node/client/clients.js +17 -9
- package/dist/node/client/clients.js.map +1 -1
- package/dist/node/client/helpers.d.ts +15 -6
- package/dist/node/client/helpers.d.ts.map +1 -1
- package/dist/node/client/helpers.js +176 -30
- package/dist/node/client/helpers.js.map +1 -1
- package/dist/node/client/react.d.ts +217 -194
- package/dist/node/client/react.d.ts.map +1 -1
- package/dist/node/client/react.js.map +1 -1
- package/dist/node/client/solid.d.ts +218 -196
- package/dist/node/client/solid.d.ts.map +1 -1
- package/dist/node/client/solid.js.map +1 -1
- package/dist/node/client/svelte.d.ts +216 -193
- package/dist/node/client/svelte.d.ts.map +1 -1
- package/dist/node/client/svelte.js.map +1 -1
- package/dist/node/client/vanilla.d.ts +217 -195
- package/dist/node/client/vanilla.d.ts.map +1 -1
- package/dist/node/client/vanilla.js.map +1 -1
- package/dist/node/client/vue.d.ts +217 -194
- package/dist/node/client/vue.d.ts.map +1 -1
- package/dist/node/client/vue.js.map +1 -1
- package/dist/node/config.d.ts +6 -6
- package/dist/node/config.d.ts.map +1 -1
- package/dist/node/config.js.map +1 -1
- package/dist/node/definition.d.ts +588 -219
- package/dist/node/definition.d.ts.map +1 -1
- package/dist/node/definition.js +27 -3
- package/dist/node/definition.js.map +1 -1
- package/dist/node/file-key.d.ts +19 -0
- package/dist/node/file-key.d.ts.map +1 -0
- package/dist/node/file-key.js +47 -0
- package/dist/node/file-key.js.map +1 -0
- package/dist/node/index.d.ts +582 -175
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +3 -2
- package/dist/node/index.js.map +1 -1
- package/dist/node/routes/files.js +99 -64
- package/dist/node/routes/files.js.map +1 -1
- package/dist/node/routes/index.d.ts +1497 -721
- package/dist/node/routes/index.d.ts.map +1 -1
- package/dist/node/routes/shared.js +5 -9
- package/dist/node/routes/shared.js.map +1 -1
- package/dist/node/routes/uploads.js +105 -47
- package/dist/node/routes/uploads.js.map +1 -1
- package/dist/node/schema.d.ts +6 -6
- package/dist/node/schema.d.ts.map +1 -1
- package/dist/node/schema.js +12 -3
- package/dist/node/schema.js.map +1 -1
- package/dist/node/services/files.d.ts +6 -2
- package/dist/node/services/files.d.ts.map +1 -1
- package/dist/node/services/files.js +22 -20
- package/dist/node/services/files.js.map +1 -1
- package/dist/node/services/helpers.js +37 -15
- package/dist/node/services/helpers.js.map +1 -1
- package/dist/node/services/uploads.d.ts +10 -5
- package/dist/node/services/uploads.d.ts.map +1 -1
- package/dist/node/services/uploads.js +340 -63
- package/dist/node/services/uploads.js.map +1 -1
- package/dist/node/storage/fs.d.ts.map +1 -1
- package/dist/node/storage/fs.js +16 -10
- package/dist/node/storage/fs.js.map +1 -1
- package/dist/node/storage/object-key.js +36 -0
- package/dist/node/storage/object-key.js.map +1 -0
- package/dist/node/storage/r2-binding.d.ts +59 -0
- package/dist/node/storage/r2-binding.d.ts.map +1 -0
- package/dist/node/storage/r2-binding.js +245 -0
- package/dist/node/storage/r2-binding.js.map +1 -0
- package/dist/node/storage/r2.d.ts +6 -5
- package/dist/node/storage/r2.d.ts.map +1 -1
- package/dist/node/storage/s3.d.ts.map +1 -1
- package/dist/node/storage/s3.js +16 -10
- package/dist/node/storage/s3.js.map +1 -1
- package/dist/node/storage/types.d.ts +6 -5
- package/dist/node/storage/types.d.ts.map +1 -1
- package/dist/node/types.d.ts +1 -2
- package/dist/node/types.d.ts.map +1 -1
- package/package.json +26 -46
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js.map +0 -1
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js +0 -6
- package/dist/browser/client/node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/computed/index.js.map +0 -1
- package/dist/browser/client/packages/fragment-upload/src/keys.d.ts +0 -7
- package/dist/browser/client/packages/fragment-upload/src/keys.d.ts.map +0 -1
- package/dist/browser/client/packages/fragment-upload/src/keys.js +0 -28
- package/dist/browser/client/packages/fragment-upload/src/keys.js.map +0 -1
- package/dist/browser/index-BdjKPO4J.d.ts +0 -177
- package/dist/browser/index-BdjKPO4J.d.ts.map +0 -1
- package/dist/browser/index.js +0 -3
- package/dist/browser/src-vdNJUbjT.js +0 -1982
- package/dist/browser/src-vdNJUbjT.js.map +0 -1
- package/dist/cli/keys.js +0 -32
- package/dist/cli/keys.js.map +0 -1
- package/dist/node/keys.d.ts +0 -12
- package/dist/node/keys.d.ts.map +0 -1
- package/dist/node/keys.js +0 -63
- package/dist/node/keys.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as gunshi10 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/create.d.ts
|
|
4
|
-
declare const uploadsCreateCommand:
|
|
5
|
-
|
|
4
|
+
declare const uploadsCreateCommand: gunshi10.Command<{
|
|
5
|
+
provider: {
|
|
6
6
|
type: "string";
|
|
7
7
|
description: string;
|
|
8
8
|
};
|
|
9
|
-
"key
|
|
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":";;;
|
|
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,
|
|
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
|
-
|
|
10
|
+
provider: {
|
|
11
11
|
type: "string",
|
|
12
|
-
description: "
|
|
12
|
+
description: "Storage provider"
|
|
13
13
|
},
|
|
14
|
-
"key
|
|
14
|
+
"file-key": {
|
|
15
15
|
type: "string",
|
|
16
|
-
description: "File key
|
|
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
|
|
59
|
-
|
|
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
|
|
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
|
|
1
|
+
import * as gunshi11 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/get.d.ts
|
|
4
|
-
declare const uploadsGetCommand:
|
|
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":";;;
|
|
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":";;;;
|
|
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
|
|
1
|
+
import * as gunshi12 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/parts-complete.d.ts
|
|
4
|
-
declare const uploadsPartsCompleteCommand:
|
|
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":";;;
|
|
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":";;;;
|
|
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
|
|
1
|
+
import * as gunshi13 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/parts-list.d.ts
|
|
4
|
-
declare const uploadsPartsListCommand:
|
|
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":";;;
|
|
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":";;;;
|
|
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
|
|
1
|
+
import * as gunshi14 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/parts-urls.d.ts
|
|
4
|
-
declare const uploadsPartsUrlsCommand:
|
|
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":";;;
|
|
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":";;;;
|
|
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
|
|
1
|
+
import * as gunshi15 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/progress.d.ts
|
|
4
|
-
declare const uploadsProgressCommand:
|
|
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":";;;
|
|
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":";;;;
|
|
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
|
|
1
|
+
import * as gunshi0 from "gunshi";
|
|
2
2
|
|
|
3
3
|
//#region src/cli/commands/uploads/transfer.d.ts
|
|
4
|
-
declare const uploadsTransferCommand:
|
|
4
|
+
declare const uploadsTransferCommand: gunshi0.Command<{
|
|
5
5
|
file: {
|
|
6
6
|
type: "string";
|
|
7
7
|
short: string;
|
|
8
8
|
description: string;
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
provider: {
|
|
11
11
|
type: "string";
|
|
12
12
|
description: string;
|
|
13
13
|
};
|
|
14
|
-
"key
|
|
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":";;;
|
|
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,
|
|
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
|
-
|
|
19
|
+
provider: {
|
|
20
20
|
type: "string",
|
|
21
|
-
description: "
|
|
21
|
+
description: "Storage provider"
|
|
22
22
|
},
|
|
23
|
-
"key
|
|
23
|
+
"file-key": {
|
|
24
24
|
type: "string",
|
|
25
|
-
description: "File key
|
|
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
|
|
60
|
-
|
|
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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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -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 {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/cli/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;
|
|
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 {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
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));
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,YAAY,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC;AAEzD,MAAM,UADc,KAAK,MAAM,aAAa,KAAK,WAAW,qBAAqB,EAAE,QAAQ,CAAC,CAChE;AAE5B,MAAa,iBAAiB,OAAO;CACnC,MAAM;CACN,aAAa;CACd,CAAC;AAEF,MAAa,eAAe,OAAO;CACjC,MAAM;CACN,aAAa;CACd,CAAC;AAEF,MAAMA,qCAAiD,IAAI,KAAK;AAChE,mBAAmB,IAAI,UAAU,qBAAsC;AACvE,mBAAmB,IAAI,OAAO,kBAAmC;AACjE,mBAAmB,IAAI,YAAY,uBAAwC;AAC3E,mBAAmB,IAAI,cAAc,wBAAyC;AAC9E,mBAAmB,IAAI,cAAc,wBAAyC;AAC9E,mBAAmB,IAAI,kBAAkB,4BAA6C;AACtF,mBAAmB,IAAI,YAAY,uBAAwC;AAC3E,mBAAmB,IAAI,SAAS,oBAAqC;AACrE,mBAAmB,IAAI,WAAW,sBAAuC;AACzE,mBAAmB,IAAI,YAAY,uBAAwC;AAE3E,MAAMC,mCAA+C,IAAI,KAAK;AAC9D,iBAAiB,IAAI,UAAU,mBAAoC;AACnE,iBAAiB,IAAI,QAAQ,iBAAkC;AAC/D,iBAAiB,IAAI,OAAO,gBAAiC;AAC7D,iBAAiB,IAAI,UAAU,mBAAoC;AACnE,iBAAiB,IAAI,UAAU,mBAAoC;AACnE,iBAAiB,IAAI,gBAAgB,wBAAyC;AAC9E,iBAAiB,IAAI,YAAY,qBAAsC;AAEvE,MAAM,sBAAsB;AAC1B,SAAQ,IAAI,mCAAmC;AAC/C,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,SAAS;AACrB,SAAQ,IAAI,4BAA4B;AACxC,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IAAI,gDAAgD;AAC5D,SAAQ,IAAI,sCAAsC;AAClD,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,kBAAkB;AAC9B,SAAQ,IAAI,mDAAmD;AAC/D,SAAQ,IAAI,yDAAyD;AACrE,SAAQ,IAAI,iEAAiE;AAC7E,SAAQ,IAAI,uEAAuE;AACnF,SAAQ,IAAI,2DAA2D;AACvE,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,eAAe;AAC3B,SAAQ,IAAI,gDAAgD;AAC5D,SAAQ,IAAI,0EAA0E;AACtF,SAAQ,IAAI,qDAAqD;AACjE,SAAQ,IAAI,mDAAmD;AAC/D,SAAQ,IAAI,2DAA2D;AACvE,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IACN,6IACD;AACD,SAAQ,IAAI,qEAAqE;AACjF,SAAQ,IACN,+FACD;AACD,SAAQ,IAAI,0EAA0E;AACtF,SAAQ,IACN,iGACD;;AAGH,MAAM,yBAAyB;AAC7B,SAAQ,IAAI,0BAA0B;AACtC,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,SAAS;AACrB,SAAQ,IAAI,oCAAoC;AAChD,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IAAI,iDAAiD;AAC7D,SAAQ,IAAI,0CAA0C;AACtD,SAAQ,IAAI,+CAA+C;AAC3D,SAAQ,IAAI,6DAA6D;AACzE,SAAQ,IAAI,4CAA4C;AACxD,SAAQ,IAAI,+CAA+C;AAC3D,SAAQ,IAAI,2CAA2C;AACvD,SAAQ,IAAI,wCAAwC;AACpD,SAAQ,IAAI,2DAA2D;AACvE,SAAQ,IAAI,6DAA6D;AACzE,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IACN,6IACD;AACD,SAAQ,IAAI,qEAAqE;AACjF,SAAQ,IACN,+FACD;;AAGH,MAAM,uBAAuB;AAC3B,SAAQ,IAAI,gBAAgB;AAC5B,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,SAAS;AACrB,SAAQ,IAAI,kCAAkC;AAC9C,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IAAI,iDAAiD;AAC7D,SAAQ,IAAI,mCAAmC;AAC/C,SAAQ,IAAI,0CAA0C;AACtD,SAAQ,IAAI,6CAA6C;AACzD,SAAQ,IAAI,sCAAsC;AAClD,SAAQ,IAAI,kDAAkD;AAC9D,SAAQ,IAAI,+CAA+C;AAC3D,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IACN,2FACD;AACD,SAAQ,IAAI,0EAA0E;AACtF,SAAQ,IACN,iGACD;;AAGH,eAAsB,MAAM;AAC1B,KAAI;EACF,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE;AAElC,MAAI,CAAC,KAAK,UAAU,KAAK,OAAO,YAAY,KAAK,OAAO,MAAM;AAC5D,kBAAe;AACf;;AAGF,MAAI,KAAK,OAAO,eAAe,KAAK,OAAO,MAAM;AAC/C,WAAQ,IAAI,QAAQ;AACpB;;AAGF,MAAI,KAAK,OAAO,WAAW;GACzB,MAAM,iBAAiB,KAAK;AAC5B,OAAI,CAAC,kBAAkB,mBAAmB,YAAY,mBAAmB,MAAM;AAC7E,sBAAkB;AAClB;;AAEF,OAAI,mBAAmB,eAAe,mBAAmB,MAAM;AAC7D,YAAQ,IAAI,QAAQ;AACpB;;GAGF,MAAM,aAAa,mBAAmB,IAAI,eAAe;AACzD,OAAI,CAAC,YAAY;AACf,YAAQ,MAAM,oBAAoB,iBAAiB;AACnD,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,6DAA6D;AACzE,YAAQ,KAAK,EAAE;;AAGjB,SAAM,IAAI,KAAK,MAAM,EAAE,EAAE,YAAY;IACnC,MAAM,yBAAyB;IAC/B;IACD,CAAC;AACF;;AAGF,MAAI,KAAK,OAAO,SAAS;GACvB,MAAM,iBAAiB,KAAK;AAC5B,OAAI,CAAC,kBAAkB,mBAAmB,YAAY,mBAAmB,MAAM;AAC7E,oBAAgB;AAChB;;AAEF,OAAI,mBAAmB,eAAe,mBAAmB,MAAM;AAC7D,YAAQ,IAAI,QAAQ;AACpB;;GAGF,MAAM,aAAa,iBAAiB,IAAI,eAAe;AACvD,OAAI,CAAC,YAAY;AACf,YAAQ,MAAM,oBAAoB,iBAAiB;AACnD,YAAQ,IAAI,GAAG;AACf,YAAQ,IAAI,2DAA2D;AACvE,YAAQ,KAAK,EAAE;;AAGjB,SAAM,IAAI,KAAK,MAAM,EAAE,EAAE,YAAY;IACnC,MAAM,uBAAuB;IAC7B;IACD,CAAC;AACF;;AAGF,UAAQ,MAAM,oBAAoB,KAAK,KAAK;AAC5C,UAAQ,IAAI,GAAG;AACf,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,KAAK,EAAE;UACR,OAAO;AACd,UAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,MAAM;AAC7D,UAAQ,KAAK,EAAE;;;AAInB,IAAI,OAAO,KAAK,KACd,OAAM,KAAK"}
|
package/dist/cli/utils/client.js
CHANGED
|
@@ -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,
|
|
162
|
-
|
|
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,
|
|
167
|
-
|
|
168
|
-
|
|
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
|
|