stow-cli 1.0.3 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/{app-JPUDM4LJ.js → app-2A2CFVBC.js} +1 -1
  2. package/dist/app-2H4TLSN7.js +239 -0
  3. package/dist/app-DTW2LNXW.js +249 -0
  4. package/dist/app-HYCPA7GA.js +239 -0
  5. package/dist/app-IZGSPZPX.js +239 -0
  6. package/dist/app-UGUM75MC.js +239 -0
  7. package/dist/app-XPOEAZJC.js +239 -0
  8. package/dist/app-YITP5APT.js +233 -0
  9. package/dist/{backfill-QZTVNJZM.js → backfill-G57M2BRA.js} +3 -3
  10. package/dist/{buckets-JQKZ3PH3.js → buckets-NXIVHPW5.js} +2 -2
  11. package/dist/chunk-2AORPTQB.js +23 -0
  12. package/dist/chunk-5LU25QZK.js +17 -0
  13. package/dist/chunk-FEMMZ4YZ.js +125 -0
  14. package/dist/chunk-LYCXXF2T.js +79 -0
  15. package/dist/chunk-MHRMBH4Y.js +36 -0
  16. package/dist/{chunk-WAQSCS57.js → chunk-QF7PVPWQ.js} +1 -1
  17. package/dist/chunk-R5CCBTXZ.js +79 -0
  18. package/dist/chunk-TOADDO2F.js +23 -0
  19. package/dist/chunk-YRHPOFJT.js +115 -0
  20. package/dist/chunk-ZDVARBCV.js +43 -0
  21. package/dist/cli.d.ts +1 -0
  22. package/dist/cli.js +43 -43
  23. package/dist/delete-AECEJX5W.js +18 -0
  24. package/dist/delete-GEX3O7YS.js +14 -0
  25. package/dist/delete-KYOZEODD.js +18 -0
  26. package/dist/delete-OLOAJRRO.js +18 -0
  27. package/dist/delete-V4EY4UBG.js +18 -0
  28. package/dist/{drops-QXGTYB5E.js → drops-RD55IDZ4.js} +2 -2
  29. package/dist/{files-OCYICIAM.js → files-E662TXUP.js} +3 -3
  30. package/dist/{health-YMZTZUFX.js → health-6LWM7KAT.js} +3 -3
  31. package/dist/{jobs-6JY4SVV5.js → jobs-CLXYKZ3B.js} +4 -4
  32. package/dist/{jobs-OKKGKSIH.js → jobs-K3LTNETU.js} +5 -5
  33. package/dist/list-7A3VZA2T.js +97 -0
  34. package/dist/list-DHXVIMRI.js +94 -0
  35. package/dist/list-DJEAKEZJ.js +106 -0
  36. package/dist/list-DQRU6QHO.js +106 -0
  37. package/dist/list-I5A6LTHX.js +106 -0
  38. package/dist/list-KEQPJY7I.js +109 -0
  39. package/dist/list-Z3MPT6MI.js +109 -0
  40. package/dist/{maintenance-EZUHQK5Q.js → maintenance-7LOAGG6J.js} +6 -6
  41. package/dist/open-2YNHG3MA.js +15 -0
  42. package/dist/open-F73Q2OHD.js +15 -0
  43. package/dist/{profiles-GWLBEEIT.js → profiles-C6SCFXS6.js} +2 -2
  44. package/dist/{queues-EQX7EJZF.js → queues-2GJAMMNF.js} +4 -4
  45. package/dist/{search-2PXM6XQ6.js → search-DV4VV62L.js} +2 -2
  46. package/dist/{tags-LSVEIIUF.js → tags-URHK2YH5.js} +2 -2
  47. package/dist/upload-3NS5O3UL.js +120 -0
  48. package/dist/upload-5RIDB2C5.js +92 -0
  49. package/dist/upload-B2PGW3AN.js +125 -0
  50. package/dist/{upload-ESYKBYHA.js → upload-DQDBDIDI.js} +1 -1
  51. package/dist/upload-FGNGNPC3.js +93 -0
  52. package/dist/upload-HKUPWTK2.js +173 -0
  53. package/dist/upload-JDVSJVWK.js +173 -0
  54. package/dist/upload-K4H7ZVRW.js +98 -0
  55. package/dist/upload-MI6VFGTC.js +92 -0
  56. package/dist/whoami-2SLCNVKP.js +27 -0
  57. package/dist/whoami-5IYRZKWS.js +28 -0
  58. package/dist/{whoami-4UYMSRVP.js → whoami-754O5IML.js} +1 -1
  59. package/dist/whoami-DOMX3Z5K.js +28 -0
  60. package/dist/whoami-IPMCUEUH.js +27 -0
  61. package/dist/whoami-JSQA2IDN.js +27 -0
  62. package/dist/whoami-RKH5HHPR.js +27 -0
  63. package/package.json +4 -4
@@ -0,0 +1,92 @@
1
+ import {
2
+ createStow
3
+ } from "./chunk-JYOMHKFS.js";
4
+ import {
5
+ formatBytes
6
+ } from "./chunk-ZDVARBCV.js";
7
+ import "./chunk-OZ7QQTIZ.js";
8
+
9
+ // src/commands/upload.ts
10
+ import { existsSync, readFileSync } from "fs";
11
+ import { basename, resolve } from "path";
12
+ var CONTENT_TYPES = {
13
+ png: "image/png",
14
+ jpg: "image/jpeg",
15
+ jpeg: "image/jpeg",
16
+ gif: "image/gif",
17
+ webp: "image/webp",
18
+ svg: "image/svg+xml",
19
+ ico: "image/x-icon",
20
+ avif: "image/avif",
21
+ pdf: "application/pdf",
22
+ mp4: "video/mp4",
23
+ webm: "video/webm",
24
+ mov: "video/quicktime",
25
+ mp3: "audio/mpeg",
26
+ wav: "audio/wav",
27
+ ogg: "audio/ogg",
28
+ zip: "application/zip",
29
+ tar: "application/x-tar",
30
+ gz: "application/gzip",
31
+ txt: "text/plain",
32
+ json: "application/json",
33
+ xml: "application/xml",
34
+ html: "text/html",
35
+ css: "text/css",
36
+ js: "application/javascript"
37
+ };
38
+ function getContentType(filename) {
39
+ const ext = filename.toLowerCase().split(".").pop();
40
+ return CONTENT_TYPES[ext || ""] || "application/octet-stream";
41
+ }
42
+ function readFile(filePath) {
43
+ const resolvedPath = resolve(filePath);
44
+ if (!existsSync(resolvedPath)) {
45
+ console.error(`Error: File not found: ${filePath}`);
46
+ process.exit(1);
47
+ }
48
+ const buffer = readFileSync(resolvedPath);
49
+ const filename = basename(resolvedPath);
50
+ const contentType = getContentType(filename);
51
+ return { buffer, filename, contentType };
52
+ }
53
+ function printUploadResult(url, options, opts) {
54
+ if (options.quiet) {
55
+ console.log(url);
56
+ return;
57
+ }
58
+ console.error(opts?.deduped ? "Done! (deduped)" : "Done!");
59
+ console.log("");
60
+ console.log(url);
61
+ }
62
+ async function uploadDrop(filePath, options) {
63
+ const { buffer, filename, contentType } = readFile(filePath);
64
+ if (!options.quiet) {
65
+ console.error(`Uploading ${filename} (${formatBytes(buffer.length)})...`);
66
+ }
67
+ const stow = createStow();
68
+ const result = await stow.drop(buffer, {
69
+ filename,
70
+ contentType
71
+ });
72
+ printUploadResult(result.url, options);
73
+ }
74
+ async function uploadFile(filePath, options) {
75
+ const { buffer, filename, contentType } = readFile(filePath);
76
+ if (!options.quiet) {
77
+ console.error(`Uploading ${filename} (${formatBytes(buffer.length)})...`);
78
+ }
79
+ const stow = createStow();
80
+ const result = await stow.uploadFile(buffer, {
81
+ ...options.bucket ? { bucket: options.bucket } : {},
82
+ filename,
83
+ contentType
84
+ });
85
+ printUploadResult(result.url ?? result.key, options, {
86
+ deduped: result.deduped
87
+ });
88
+ }
89
+ export {
90
+ uploadDrop,
91
+ uploadFile
92
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ formatBytes
3
+ } from "./chunk-ZDVARBCV.js";
4
+ import {
5
+ apiRequest
6
+ } from "./chunk-LYCXXF2T.js";
7
+ import "./chunk-OZ7QQTIZ.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const data = await apiRequest("/api/whoami");
12
+ console.log(`Account: ${data.user.email}`);
13
+ console.log("");
14
+ console.log(`Buckets: ${data.stats.bucketCount}`);
15
+ console.log(`Files: ${data.stats.totalFiles}`);
16
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
17
+ if (data.key) {
18
+ console.log("");
19
+ console.log(`API Key: ${data.key.name}`);
20
+ console.log(`Scope: ${data.key.scope}`);
21
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
22
+ console.log(`Perms: ${perms.join(", ")}`);
23
+ }
24
+ }
25
+ export {
26
+ whoami
27
+ };
@@ -0,0 +1,28 @@
1
+ import {
2
+ formatBytes
3
+ } from "./chunk-ELSDWMEB.js";
4
+ import {
5
+ createStow
6
+ } from "./chunk-5LU25QZK.js";
7
+ import "./chunk-TOADDO2F.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const stow = createStow();
12
+ const data = await stow.whoami();
13
+ console.log(`Account: ${data.user.email}`);
14
+ console.log("");
15
+ console.log(`Buckets: ${data.stats.bucketCount}`);
16
+ console.log(`Files: ${data.stats.totalFiles}`);
17
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
18
+ if (data.key) {
19
+ console.log("");
20
+ console.log(`API Key: ${data.key.name}`);
21
+ console.log(`Scope: ${data.key.scope}`);
22
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
23
+ console.log(`Perms: ${perms.join(", ")}`);
24
+ }
25
+ }
26
+ export {
27
+ whoami
28
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  formatBytes
3
- } from "./chunk-ELSDWMEB.js";
3
+ } from "./chunk-ZDVARBCV.js";
4
4
  import {
5
5
  createStow
6
6
  } from "./chunk-JYOMHKFS.js";
@@ -0,0 +1,28 @@
1
+ import {
2
+ createStow
3
+ } from "./chunk-JYOMHKFS.js";
4
+ import {
5
+ formatBytes
6
+ } from "./chunk-ZDVARBCV.js";
7
+ import "./chunk-OZ7QQTIZ.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const stow = createStow();
12
+ const data = await stow.whoami();
13
+ console.log(`Account: ${data.user.email}`);
14
+ console.log("");
15
+ console.log(`Buckets: ${data.stats.bucketCount}`);
16
+ console.log(`Files: ${data.stats.totalFiles}`);
17
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
18
+ if (data.key) {
19
+ console.log("");
20
+ console.log(`API Key: ${data.key.name}`);
21
+ console.log(`Scope: ${data.key.scope}`);
22
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
23
+ console.log(`Perms: ${perms.join(", ")}`);
24
+ }
25
+ }
26
+ export {
27
+ whoami
28
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ formatBytes
3
+ } from "./chunk-MHRMBH4Y.js";
4
+ import {
5
+ apiRequest
6
+ } from "./chunk-YRHPOFJT.js";
7
+ import "./chunk-2AORPTQB.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const data = await apiRequest("/api/whoami");
12
+ console.log(`Account: ${data.user.email}`);
13
+ console.log("");
14
+ console.log(`Buckets: ${data.stats.bucketCount}`);
15
+ console.log(`Files: ${data.stats.totalFiles}`);
16
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
17
+ if (data.key) {
18
+ console.log("");
19
+ console.log(`API Key: ${data.key.name}`);
20
+ console.log(`Scope: ${data.key.scope}`);
21
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
22
+ console.log(`Perms: ${perms.join(", ")}`);
23
+ }
24
+ }
25
+ export {
26
+ whoami
27
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ formatBytes
3
+ } from "./chunk-ZDVARBCV.js";
4
+ import {
5
+ apiRequest
6
+ } from "./chunk-R5CCBTXZ.js";
7
+ import "./chunk-2AORPTQB.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const data = await apiRequest("/api/whoami");
12
+ console.log(`Account: ${data.user.email}`);
13
+ console.log("");
14
+ console.log(`Buckets: ${data.stats.bucketCount}`);
15
+ console.log(`Files: ${data.stats.totalFiles}`);
16
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
17
+ if (data.key) {
18
+ console.log("");
19
+ console.log(`API Key: ${data.key.name}`);
20
+ console.log(`Scope: ${data.key.scope}`);
21
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
22
+ console.log(`Perms: ${perms.join(", ")}`);
23
+ }
24
+ }
25
+ export {
26
+ whoami
27
+ };
@@ -0,0 +1,27 @@
1
+ import {
2
+ formatBytes
3
+ } from "./chunk-ZDVARBCV.js";
4
+ import {
5
+ apiRequest
6
+ } from "./chunk-FEMMZ4YZ.js";
7
+ import "./chunk-2AORPTQB.js";
8
+
9
+ // src/commands/whoami.ts
10
+ async function whoami() {
11
+ const data = await apiRequest("/api/whoami");
12
+ console.log(`Account: ${data.user.email}`);
13
+ console.log("");
14
+ console.log(`Buckets: ${data.stats.bucketCount}`);
15
+ console.log(`Files: ${data.stats.totalFiles}`);
16
+ console.log(`Storage: ${formatBytes(data.stats.totalBytes)}`);
17
+ if (data.key) {
18
+ console.log("");
19
+ console.log(`API Key: ${data.key.name}`);
20
+ console.log(`Scope: ${data.key.scope}`);
21
+ const perms = Object.entries(data.key.permissions).filter(([, v]) => v).map(([k]) => k);
22
+ console.log(`Perms: ${perms.join(", ")}`);
23
+ }
24
+ }
25
+ export {
26
+ whoami
27
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stow-cli",
3
- "version": "1.0.3",
3
+ "version": "2.0.2",
4
4
  "type": "module",
5
5
  "description": "CLI for Stow file storage",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@howells/stow-server": "workspace:*",
33
- "clipboardy": "^5.3.0",
33
+ "clipboardy": "^5.3.1",
34
34
  "commander": "^14.0.3",
35
35
  "ink": "^6.8.0",
36
36
  "ink-select-input": "^6.2.0",
@@ -41,10 +41,10 @@
41
41
  },
42
42
  "devDependencies": {
43
43
  "@stow/typescript-config": "workspace:*",
44
- "@types/node": "^25.3.0",
44
+ "@types/node": "^25.5.0",
45
45
  "@types/react": "19.2.14",
46
46
  "tsup": "^8.5.1",
47
47
  "typescript": "^5.9.3",
48
- "vitest": "^4.0.18"
48
+ "vitest": "^4.1.0"
49
49
  }
50
50
  }