@sentroy-co/client-sdk 2.13.9 → 2.14.0

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.
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * `sentroy storage <subcommand>` — bucket + media browsing for the
4
+ * Sentroy storage product.
5
+ *
6
+ * Mirrors the dashboard at https://storage.sentroy.com but stays
7
+ * read-only: list/get buckets and media, surface usage + quota. Mutating
8
+ * ops (upload/delete) are intentionally not in this CLI — use the SDK or
9
+ * dashboard, which give you progress + crop UX.
10
+ *
11
+ * Auth: Bearer stk_… via `resolveSharedOpts({requireCompanySlug: true})`.
12
+ * Every path is prefixed `/api/companies/<slug>`.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.STORAGE_HANDLERS = void 0;
16
+ const args_1 = require("./args");
17
+ const format_1 = require("./format");
18
+ // ── Helpers ─────────────────────────────────────────────────────────────
19
+ function humanBytes(n) {
20
+ if (n === null || n === undefined || !Number.isFinite(n))
21
+ return "—";
22
+ if (n < 1024)
23
+ return `${n} B`;
24
+ const units = ["KB", "MB", "GB", "TB"];
25
+ let v = n / 1024;
26
+ let i = 0;
27
+ while (v >= 1024 && i < units.length - 1) {
28
+ v /= 1024;
29
+ i++;
30
+ }
31
+ return `${v.toFixed(1)} ${units[i]}`;
32
+ }
33
+ function yesNo(v) {
34
+ return v ? "yes" : "no";
35
+ }
36
+ function shortDate(v) {
37
+ if (typeof v !== "string" || v.length < 10)
38
+ return "";
39
+ return v.slice(0, 10);
40
+ }
41
+ function companyPrefix(shared) {
42
+ if (!shared.companySlug) {
43
+ (0, args_1.fail)("internal: company slug missing after resolveSharedOpts guard");
44
+ }
45
+ return `/api/companies/${encodeURIComponent(shared.companySlug)}`;
46
+ }
47
+ /** Append flag-derived query params; only emits keys whose flag is set. */
48
+ function buildQuery(flags, keys) {
49
+ const params = [];
50
+ for (const k of keys) {
51
+ const raw = flags[k];
52
+ if (raw === undefined || raw === false)
53
+ continue;
54
+ const value = raw === true ? "" : String(raw);
55
+ if (!value)
56
+ continue;
57
+ params.push(`${encodeURIComponent(k)}=${encodeURIComponent(value)}`);
58
+ }
59
+ return params.length ? `?${params.join("&")}` : "";
60
+ }
61
+ // ── Column specs ────────────────────────────────────────────────────────
62
+ const BUCKET_COLUMNS = [
63
+ { header: "ID", get: (b) => b.id, maxWidth: 24 },
64
+ { header: "NAME", get: (b) => b.name, maxWidth: 32 },
65
+ { header: "SLUG", get: (b) => b.slug, maxWidth: 32 },
66
+ { header: "PUBLIC", get: (b) => yesNo(b.isPublic), maxWidth: 6 },
67
+ { header: "USED", get: (b) => humanBytes(b.storageUsed), alignRight: true },
68
+ { header: "FILES", get: (b) => b.fileCount, alignRight: true },
69
+ { header: "CREATED", get: (b) => shortDate(b.createdAt), maxWidth: 10 },
70
+ ];
71
+ const MEDIA_COLUMNS = [
72
+ { header: "ID", get: (m) => m.id, maxWidth: 24 },
73
+ { header: "NAME", get: (m) => m.originalName, maxWidth: 40 },
74
+ { header: "TYPE", get: (m) => m.type, maxWidth: 12 },
75
+ { header: "MIME", get: (m) => m.mimeType, maxWidth: 24 },
76
+ { header: "SIZE", get: (m) => humanBytes(m.size), alignRight: true },
77
+ { header: "FOLDER", get: (m) => m.folder ?? "", maxWidth: 24 },
78
+ { header: "PUBLIC", get: (m) => yesNo(m.isPublic), maxWidth: 6 },
79
+ ];
80
+ // ── Subcommand handlers ─────────────────────────────────────────────────
81
+ async function bucketsList(argv) {
82
+ const { flags } = (0, args_1.parseFlags)(argv);
83
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
84
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/buckets`);
85
+ const rows = Array.isArray(data) ? data : (data?.items ?? []);
86
+ (0, format_1.printRows)(rows, BUCKET_COLUMNS, flags);
87
+ }
88
+ async function bucketsGet(argv) {
89
+ const { positional, flags } = (0, args_1.parseFlags)(argv);
90
+ const bucketSlug = positional[0];
91
+ if (!bucketSlug) {
92
+ (0, args_1.fail)("usage: sentroy storage buckets get <bucketSlug>");
93
+ }
94
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
95
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/buckets/${encodeURIComponent(bucketSlug)}`);
96
+ (0, format_1.printDetail)(data, flags);
97
+ }
98
+ async function mediaList(argv) {
99
+ const { positional, flags } = (0, args_1.parseFlags)(argv);
100
+ const bucketSlug = positional[0];
101
+ if (!bucketSlug) {
102
+ (0, args_1.fail)("usage: sentroy storage media list <bucketSlug> [--type= --folder= --q= --sort= --dir= --limit= --skip=]");
103
+ }
104
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
105
+ const query = buildQuery(flags, [
106
+ "type",
107
+ "folder",
108
+ "q",
109
+ "sort",
110
+ "dir",
111
+ "limit",
112
+ "skip",
113
+ ]);
114
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/buckets/${encodeURIComponent(bucketSlug)}/media${query}`);
115
+ const items = data?.items ?? [];
116
+ (0, format_1.printRows)(items, MEDIA_COLUMNS, flags);
117
+ // Footer only in table mode — JSON consumers get total/limit/skip in payload.
118
+ const output = typeof flags.output === "string" ? flags.output.toLowerCase() : "table";
119
+ if (output !== "json") {
120
+ const total = data?.total ?? items.length;
121
+ const limit = data?.limit ?? items.length;
122
+ const skip = data?.skip ?? 0;
123
+ const page = limit > 0 ? Math.floor(skip / limit) + 1 : 1;
124
+ const pages = limit > 0 ? Math.max(1, Math.ceil(total / limit)) : 1;
125
+ (0, args_1.info)(`Total: ${total} item${total === 1 ? "" : "s"}, page ${page}/${pages}`);
126
+ }
127
+ }
128
+ async function mediaGet(argv) {
129
+ const { positional, flags } = (0, args_1.parseFlags)(argv);
130
+ const bucketSlug = positional[0];
131
+ const mediaId = positional[1];
132
+ if (!bucketSlug || !mediaId) {
133
+ (0, args_1.fail)("usage: sentroy storage media get <bucketSlug> <mediaId>");
134
+ }
135
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
136
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/buckets/${encodeURIComponent(bucketSlug)}/media/${encodeURIComponent(mediaId)}`);
137
+ (0, format_1.printDetail)(data, flags);
138
+ }
139
+ async function usage(argv) {
140
+ const { flags } = (0, args_1.parseFlags)(argv);
141
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
142
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/usage`);
143
+ const output = typeof flags.output === "string" ? flags.output.toLowerCase() : "table";
144
+ if (output === "json") {
145
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
146
+ return;
147
+ }
148
+ // Table mode renders quota summary only — the nested arrays
149
+ // (buckets, byType, timeSeries, recent) bloat the terminal; nudge to
150
+ // --output=json for the full picture.
151
+ const quota = data?.quota ?? { used: 0, limit: 0, remaining: 0 };
152
+ const pct = quota.limit > 0 ? ((quota.used / quota.limit) * 100).toFixed(1) + "%" : "—";
153
+ (0, format_1.printDetail)({
154
+ used: humanBytes(quota.used),
155
+ limit: humanBytes(quota.limit),
156
+ remaining: humanBytes(quota.remaining),
157
+ utilization: pct,
158
+ buckets: data?.buckets?.length ?? 0,
159
+ recentItems: data?.recent?.length ?? 0,
160
+ }, flags);
161
+ (0, args_1.info)(`Pass ${args_1.c.cyan("--output=json")} for the full byType / timeSeries / recent payload.`);
162
+ }
163
+ async function quota(argv) {
164
+ const { flags } = (0, args_1.parseFlags)(argv);
165
+ const shared = (0, args_1.resolveSharedOpts)(flags, { requireCompanySlug: true });
166
+ const data = await (0, args_1.apiFetch)(shared, `${companyPrefix(shared)}/storage-quota`);
167
+ const output = typeof flags.output === "string" ? flags.output.toLowerCase() : "table";
168
+ if (output === "json") {
169
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
170
+ return;
171
+ }
172
+ const pct = data.limit > 0 ? ((data.used / data.limit) * 100).toFixed(1) + "%" : "—";
173
+ (0, format_1.printDetail)({
174
+ used: humanBytes(data.used),
175
+ limit: humanBytes(data.limit),
176
+ remaining: humanBytes(data.remaining),
177
+ utilization: pct,
178
+ }, flags);
179
+ }
180
+ // ── Export ──────────────────────────────────────────────────────────────
181
+ exports.STORAGE_HANDLERS = {
182
+ bucketsList,
183
+ bucketsGet,
184
+ mediaList,
185
+ mediaGet,
186
+ usage,
187
+ quota,
188
+ };
189
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/cli/storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentroy-co/client-sdk",
3
- "version": "2.13.9",
3
+ "version": "2.14.0",
4
4
  "description": "TypeScript SDK + CLI for the Sentroy platform — mail, storage, env vault + React components.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -59,7 +59,9 @@
59
59
  "dist",
60
60
  "src",
61
61
  "bin",
62
- "AGENTS.md"
62
+ "skill",
63
+ "AGENTS.md",
64
+ "SKILL.md"
63
65
  ],
64
66
  "scripts": {
65
67
  "build": "tsc && node scripts/build-styles.mjs",