@benglo/storu-cli 1.0.2 → 1.2.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.
Files changed (39) hide show
  1. package/dist/api-client.d.ts +71 -2
  2. package/dist/api-client.d.ts.map +1 -1
  3. package/dist/api-client.js +126 -6
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/commands/apps.d.ts +2 -1
  6. package/dist/commands/apps.d.ts.map +1 -1
  7. package/dist/commands/apps.js +87 -16
  8. package/dist/commands/apps.js.map +1 -1
  9. package/dist/commands/epics.d.ts +2 -1
  10. package/dist/commands/epics.d.ts.map +1 -1
  11. package/dist/commands/epics.js +108 -22
  12. package/dist/commands/epics.js.map +1 -1
  13. package/dist/commands/labels.d.ts +5 -0
  14. package/dist/commands/labels.d.ts.map +1 -0
  15. package/dist/commands/labels.js +81 -0
  16. package/dist/commands/labels.js.map +1 -0
  17. package/dist/commands/releases.d.ts +2 -1
  18. package/dist/commands/releases.d.ts.map +1 -1
  19. package/dist/commands/releases.js +118 -20
  20. package/dist/commands/releases.js.map +1 -1
  21. package/dist/commands/stories.d.ts +2 -1
  22. package/dist/commands/stories.d.ts.map +1 -1
  23. package/dist/commands/stories.js +349 -78
  24. package/dist/commands/stories.js.map +1 -1
  25. package/dist/commands/subscribers.d.ts +5 -0
  26. package/dist/commands/subscribers.d.ts.map +1 -0
  27. package/dist/commands/subscribers.js +66 -0
  28. package/dist/commands/subscribers.js.map +1 -0
  29. package/dist/config.d.ts +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +25 -12
  32. package/dist/config.js.map +1 -1
  33. package/dist/helpers.d.ts +20 -0
  34. package/dist/helpers.d.ts.map +1 -0
  35. package/dist/helpers.js +32 -0
  36. package/dist/helpers.js.map +1 -0
  37. package/dist/index.js +29 -21
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
@@ -1,128 +1,399 @@
1
- export function registerStoriesCommand(program, client) {
2
- const storiesCmd = program
3
- .command("stories")
1
+ import { shortId, output, resolveApp } from "../helpers.js";
2
+ function parseGithubUrl(url) {
3
+ const match = /github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/.exec(url);
4
+ if (!match)
5
+ return null;
6
+ return { owner: match[1], repo: match[2], issue_number: parseInt(match[3], 10) };
7
+ }
8
+ function normaliseAc(raw) {
9
+ if (!raw || raw.length === 0)
10
+ return [];
11
+ if (typeof raw[0] === "string") {
12
+ return raw.map((text) => ({ text, checked: false }));
13
+ }
14
+ return raw;
15
+ }
16
+ function printStory(data) {
17
+ process.stdout.write(`\nStory: ${data.title}\n`);
18
+ process.stdout.write(`${"─".repeat(60)}\n`);
19
+ process.stdout.write(`ID: ${data.id}\n`);
20
+ process.stdout.write(`Status: ${data.status}\n`);
21
+ process.stdout.write(`Priority: ${data.priority}\n`);
22
+ process.stdout.write(`App: ${data.application_id}\n`);
23
+ process.stdout.write(`Epic: ${data.epic_id ?? "(none)"}\n`);
24
+ process.stdout.write(`Assignee: ${data.assignee_id ?? "(none)"}\n`);
25
+ process.stdout.write(`Version: ${data.version}\n`);
26
+ if (data.description) {
27
+ process.stdout.write(`\nDescription:\n${data.description}\n`);
28
+ }
29
+ if (data.acceptance_criteria && data.acceptance_criteria.length > 0) {
30
+ process.stdout.write(`\nAcceptance Criteria:\n`);
31
+ const criteria = normaliseAc(data.acceptance_criteria);
32
+ criteria.forEach((ac, i) => {
33
+ const tick = ac.checked ? "[x]" : "[ ]";
34
+ process.stdout.write(` ${i}. ${tick} ${ac.text}\n`);
35
+ });
36
+ }
37
+ if (Array.isArray(data.labels) && data.labels.length > 0) {
38
+ process.stdout.write(`\nLabels: ${JSON.stringify(data.labels)}\n`);
39
+ }
40
+ if (Array.isArray(data.activity) && data.activity.length > 0) {
41
+ process.stdout.write(`\nRecent Activity (${data.activity.length} entries)\n`);
42
+ }
43
+ }
44
+ export function registerStoryCommand(program, client, getConfig) {
45
+ const storyCmd = program.command("story").description("Manage stories");
46
+ // ── story list ────────────────────────────────────────────────────────────
47
+ storyCmd
48
+ .command("list")
4
49
  .description("List stories for an application")
5
- .requiredOption("--app <slug-or-id>", "Application slug or ID")
50
+ .option("--app <slug-or-id>", "Application slug or ID")
6
51
  .option("--status <status>", "Filter by status (backlog|in_progress|in_review|done)")
7
52
  .option("--assignee <id>", "Filter by assignee profile UUID")
8
53
  .option("--priority <priority>", "Filter by priority (low|medium|high|critical)")
9
54
  .option("--epic <id>", "Filter by epic UUID")
10
- .action(async (options) => {
11
- const appId = await client.resolveAppId(options.app);
55
+ .option("--json", "Output raw JSON")
56
+ .action(async (opts) => {
57
+ const appId = await resolveApp(client, opts, getConfig());
12
58
  const result = await client.listStories({
13
59
  app_id: appId,
14
- status: options.status,
15
- assignee_id: options.assignee,
16
- priority: options.priority,
17
- epic_id: options.epic,
60
+ status: opts.status,
61
+ assignee_id: opts.assignee,
62
+ priority: opts.priority,
63
+ epic_id: opts.epic,
18
64
  });
19
65
  if (!result.success || !result.data) {
20
- process.stderr.write(`Error: ${result.error ?? "Failed to list stories"}\n`);
21
- process.exit(1);
66
+ throw new Error(result.error ?? "Failed to list stories");
22
67
  }
23
68
  const rows = result.data;
24
- if (rows.length === 0) {
25
- process.stdout.write("No stories found.\n");
26
- return;
27
- }
28
- const tableData = rows.map((story) => ({
29
- ID: story.id,
30
- Title: story.title,
31
- Status: story.status,
32
- Priority: story.priority,
33
- Assignee: story.assignee_id ?? "",
34
- Epic: story.epic_id ?? "",
35
- }));
36
- console.table(tableData);
69
+ output(rows, opts, (data) => {
70
+ if (data.length === 0) {
71
+ process.stdout.write("No stories found.\n");
72
+ return;
73
+ }
74
+ const tableData = data.map((story) => ({
75
+ ID: shortId(story.id),
76
+ Title: story.title,
77
+ Status: story.status,
78
+ Priority: story.priority,
79
+ Assignee: story.assignee_id ? shortId(story.assignee_id) : "",
80
+ Epic: story.epic_id ? shortId(story.epic_id) : "",
81
+ }));
82
+ console.table(tableData);
83
+ });
37
84
  });
38
- const storyCmd = program.command("story").description("Manage a single story");
85
+ // ── story view ────────────────────────────────────────────────────────────
39
86
  storyCmd
40
- .command("get <id>")
87
+ .command("view <id>")
41
88
  .description("Get full details for a story")
42
- .action(async (id) => {
89
+ .option("--json", "Output raw JSON")
90
+ .option("--web", "Open story in the browser")
91
+ .action(async (id, opts) => {
92
+ if (opts.web) {
93
+ const config = getConfig();
94
+ const baseUrl = config.api_url;
95
+ const url = `${baseUrl}/board`;
96
+ process.stdout.write(`Opening: ${url}\n`);
97
+ const { exec } = await import("child_process");
98
+ exec(`xdg-open "${url}" 2>/dev/null || open "${url}" 2>/dev/null || start "${url}"`);
99
+ return;
100
+ }
43
101
  const result = await client.getStory(id);
44
102
  if (!result.success || !result.data) {
45
- process.stderr.write(`Error: ${result.error ?? "Failed to get story"}\n`);
46
- process.exit(1);
103
+ throw new Error(result.error ?? "Failed to get story");
47
104
  }
48
105
  const story = result.data;
49
- process.stdout.write(`\nStory: ${story.title}\n`);
50
- process.stdout.write(`${"─".repeat(60)}\n`);
51
- process.stdout.write(`ID: ${story.id}\n`);
52
- process.stdout.write(`Status: ${story.status}\n`);
53
- process.stdout.write(`Priority: ${story.priority}\n`);
54
- process.stdout.write(`App: ${story.application_id}\n`);
55
- process.stdout.write(`Epic: ${story.epic_id ?? "(none)"}\n`);
56
- process.stdout.write(`Assignee: ${story.assignee_id ?? "(none)"}\n`);
57
- process.stdout.write(`Version: ${story.version}\n`);
58
- if (story.description) {
59
- process.stdout.write(`\nDescription:\n${story.description}\n`);
60
- }
61
- if (story.acceptance_criteria && story.acceptance_criteria.length > 0) {
62
- process.stdout.write(`\nAcceptance Criteria:\n`);
63
- for (const criterion of story.acceptance_criteria) {
64
- process.stdout.write(` - ${criterion}\n`);
65
- }
66
- }
67
- if (Array.isArray(story.labels) && story.labels.length > 0) {
68
- process.stdout.write(`\nLabels: ${JSON.stringify(story.labels)}\n`);
69
- }
70
- if (Array.isArray(story.activity) && story.activity.length > 0) {
71
- process.stdout.write(`\nRecent Activity (${story.activity.length} entries)\n`);
72
- }
106
+ output(story, opts, printStory);
73
107
  });
108
+ // ── story create ──────────────────────────────────────────────────────────
74
109
  storyCmd
75
110
  .command("create")
76
111
  .description("Create a new story")
77
- .requiredOption("--app <slug-or-id>", "Application slug or UUID")
112
+ .option("--app <slug-or-id>", "Application slug or UUID")
78
113
  .requiredOption("--title <title>", "Story title")
114
+ .option("--description <text>", "Story description")
79
115
  .option("--epic <id>", "Parent epic UUID")
80
116
  .option("--priority <priority>", "Priority (low|medium|high|critical)")
81
117
  .option("--assignee <id>", "Assignee profile UUID")
82
- .option("--description <text>", "Story description")
83
- .action(async (options) => {
84
- const appId = await client.resolveAppId(options.app);
118
+ .option("--json", "Output raw JSON")
119
+ .action(async (opts) => {
120
+ const appId = await resolveApp(client, opts, getConfig());
85
121
  const result = await client.createStory({
86
122
  application_id: appId,
87
- title: options.title,
88
- epic_id: options.epic,
89
- priority: options.priority,
90
- assignee_id: options.assignee,
91
- description: options.description,
123
+ title: opts.title,
124
+ epic_id: opts.epic,
125
+ priority: opts.priority,
126
+ assignee_id: opts.assignee,
127
+ description: opts.description,
92
128
  });
93
129
  if (!result.success || !result.data) {
94
- process.stderr.write(`Error: ${result.error ?? "Failed to create story"}\n`);
95
- process.exit(1);
130
+ throw new Error(result.error ?? "Failed to create story");
131
+ }
132
+ const story = result.data;
133
+ output(story, opts, (data) => {
134
+ process.stdout.write(`Story created: ${data.id}\n`);
135
+ process.stdout.write(` Title: ${data.title}\n`);
136
+ process.stdout.write(` Status: ${data.status}\n`);
137
+ process.stdout.write(` Priority: ${data.priority}\n`);
138
+ });
139
+ });
140
+ // ── story edit ────────────────────────────────────────────────────────────
141
+ storyCmd
142
+ .command("edit <id>")
143
+ .description("Update a story")
144
+ .option("--title <title>", "New title")
145
+ .option("--description <text>", "New description")
146
+ .option("--priority <priority>", "Priority (low|medium|high|critical)")
147
+ .option("--assignee <id>", "Assignee profile UUID")
148
+ .option("--epic <id>", "Set parent epic UUID (use \"none\" to unset)")
149
+ .option("--github <url>", "GitHub issue URL to link")
150
+ .option("--labels <ids>", "Set labels (comma-separated IDs)")
151
+ .option("--json", "Output raw JSON")
152
+ .action(async (id, opts) => {
153
+ const getResult = await client.getStory(id);
154
+ if (!getResult.success || !getResult.data) {
155
+ throw new Error(getResult.error ?? "Story not found");
156
+ }
157
+ const current = getResult.data;
158
+ const update = { version: current.version };
159
+ if (opts.title !== undefined)
160
+ update.title = opts.title;
161
+ if (opts.description !== undefined)
162
+ update.description = opts.description;
163
+ if (opts.priority !== undefined)
164
+ update.priority = opts.priority;
165
+ if (opts.assignee !== undefined)
166
+ update.assignee_id = opts.assignee;
167
+ if (opts.epic !== undefined) {
168
+ update.epic_id = opts.epic === "none" ? null : opts.epic;
169
+ }
170
+ if (opts.github !== undefined) {
171
+ const parsed = parseGithubUrl(opts.github);
172
+ if (!parsed) {
173
+ throw new Error("Invalid GitHub URL. Expected format: https://github.com/{owner}/{repo}/issues/{number}");
174
+ }
175
+ update.github_owner = parsed.owner;
176
+ update.github_repo = parsed.repo;
177
+ update.github_issue_number = parsed.issue_number;
178
+ }
179
+ if (opts.labels !== undefined) {
180
+ update.label_ids = opts.labels.split(",").map((s) => s.trim()).filter(Boolean);
181
+ }
182
+ const result = await client.updateStory(id, update);
183
+ if (!result.success || !result.data) {
184
+ throw new Error(result.error ?? "Failed to update story");
96
185
  }
97
186
  const story = result.data;
98
- process.stdout.write(`Story created: ${story.id}\n`);
99
- process.stdout.write(` Title: ${story.title}\n`);
100
- process.stdout.write(` Status: ${story.status}\n`);
101
- process.stdout.write(` Priority: ${story.priority}\n`);
187
+ output(story, opts, (data) => {
188
+ process.stdout.write(`Story updated: ${data.id}\n`);
189
+ process.stdout.write(` Title: ${data.title}\n`);
190
+ process.stdout.write(` Status: ${data.status}\n`);
191
+ process.stdout.write(` Priority: ${data.priority}\n`);
192
+ });
102
193
  });
194
+ // ── story delete ──────────────────────────────────────────────────────────
195
+ storyCmd
196
+ .command("delete <id>")
197
+ .description("Delete a story")
198
+ .action(async (id) => {
199
+ const result = await client.deleteStory(id);
200
+ if (!result.success) {
201
+ throw new Error(result.error ?? "Failed to delete story");
202
+ }
203
+ process.stdout.write(`Story deleted: ${id}\n`);
204
+ });
205
+ // ── story move ────────────────────────────────────────────────────────────
103
206
  storyCmd
104
207
  .command("move <id> <status>")
105
208
  .description("Change the status of a story")
106
209
  .action(async (id, status) => {
107
- // Fetch current version first
108
210
  const getResult = await client.getStory(id);
109
211
  if (!getResult.success || !getResult.data) {
110
- process.stderr.write(`Error: ${getResult.error ?? "Story not found"}\n`);
111
- process.exit(1);
212
+ throw new Error(getResult.error ?? "Story not found");
213
+ }
214
+ const current = getResult.data;
215
+ const result = await client.updateStory(id, { version: current.version, status });
216
+ if (!result.success || !result.data) {
217
+ throw new Error(result.error ?? "Failed to move story");
218
+ }
219
+ const story = result.data;
220
+ process.stdout.write(`Story ${story.id} moved to '${story.status}'\n`);
221
+ });
222
+ // ── story assign ──────────────────────────────────────────────────────────
223
+ storyCmd
224
+ .command("assign <id> <user-id>")
225
+ .description("Assign a story to a user")
226
+ .action(async (id, userId) => {
227
+ const getResult = await client.getStory(id);
228
+ if (!getResult.success || !getResult.data) {
229
+ throw new Error(getResult.error ?? "Story not found");
230
+ }
231
+ const current = getResult.data;
232
+ const result = await client.updateStory(id, { version: current.version, assignee_id: userId });
233
+ if (!result.success || !result.data) {
234
+ throw new Error(result.error ?? "Failed to assign story");
235
+ }
236
+ const story = result.data;
237
+ process.stdout.write(`Story ${story.id} assigned to '${story.assignee_id}'\n`);
238
+ });
239
+ // ── story claim ───────────────────────────────────────────────────────────
240
+ storyCmd
241
+ .command("claim <id>")
242
+ .description("Claim a story (assign to yourself via API key identity)")
243
+ .action(async (id) => {
244
+ const getResult = await client.getStory(id);
245
+ if (!getResult.success || !getResult.data) {
246
+ throw new Error(getResult.error ?? "Story not found");
247
+ }
248
+ const current = getResult.data;
249
+ // POST to claim endpoint — use updateStory with assignee_id "me" if API supports it,
250
+ // otherwise fall through to a dedicated claim endpoint when available
251
+ const result = await client.updateStory(id, { version: current.version, assignee_id: "me" });
252
+ if (!result.success || !result.data) {
253
+ throw new Error(result.error ?? "Failed to claim story");
254
+ }
255
+ const story = result.data;
256
+ process.stdout.write(`Story ${story.id} claimed (assigned to ${story.assignee_id ?? "you"})\n`);
257
+ });
258
+ // ── story unclaim ─────────────────────────────────────────────────────────
259
+ storyCmd
260
+ .command("unclaim <id>")
261
+ .description("Unassign yourself from a story")
262
+ .action(async (id) => {
263
+ const getResult = await client.getStory(id);
264
+ if (!getResult.success || !getResult.data) {
265
+ throw new Error(getResult.error ?? "Story not found");
266
+ }
267
+ const current = getResult.data;
268
+ const result = await client.updateStory(id, { version: current.version, assignee_id: undefined });
269
+ if (!result.success || !result.data) {
270
+ throw new Error(result.error ?? "Failed to unclaim story");
271
+ }
272
+ process.stdout.write(`Story ${id} unassigned.\n`);
273
+ });
274
+ // ── story pr ──────────────────────────────────────────────────────────────
275
+ storyCmd
276
+ .command("pr <id> <url>")
277
+ .description("Link a GitHub pull request or issue URL to a story")
278
+ .action(async (id, url) => {
279
+ const parsed = parseGithubUrl(url);
280
+ if (!parsed) {
281
+ throw new Error("Invalid GitHub URL. Expected format: https://github.com/{owner}/{repo}/issues/{number}");
282
+ }
283
+ const getResult = await client.getStory(id);
284
+ if (!getResult.success || !getResult.data) {
285
+ throw new Error(getResult.error ?? "Story not found");
286
+ }
287
+ const current = getResult.data;
288
+ const result = await client.updateStory(id, {
289
+ version: current.version,
290
+ github_owner: parsed.owner,
291
+ github_repo: parsed.repo,
292
+ github_issue_number: parsed.issue_number,
293
+ });
294
+ if (!result.success || !result.data) {
295
+ throw new Error(result.error ?? "Failed to link PR");
296
+ }
297
+ process.stdout.write(`Story ${id} linked to ${url}\n`);
298
+ });
299
+ // ── story comment ─────────────────────────────────────────────────────────
300
+ storyCmd
301
+ .command("comment <id> <text>")
302
+ .description("Add a comment to a story")
303
+ .action(async (id, text) => {
304
+ const result = await client.addComment(id, text);
305
+ if (!result.success || !result.data) {
306
+ throw new Error(result.error ?? "Failed to add comment");
307
+ }
308
+ const comment = result.data;
309
+ process.stdout.write(`Comment added: ${comment.id}\n`);
310
+ });
311
+ // ── story ac ──────────────────────────────────────────────────────────────
312
+ storyCmd
313
+ .command("ac <id>")
314
+ .description("Manage acceptance criteria for a story")
315
+ .option("--set <json>", "Replace all ACs with a JSON array")
316
+ .option("--add <json>", "Append AC(s) — JSON object or array, auto-detected")
317
+ .option("--check <index>", "Mark AC at index as checked (0-based)")
318
+ .option("--uncheck <index>", "Mark AC at index as unchecked (0-based)")
319
+ .option("--json", "Output raw JSON")
320
+ .action(async (id, opts) => {
321
+ const getResult = await client.getStory(id);
322
+ if (!getResult.success || !getResult.data) {
323
+ throw new Error(getResult.error ?? "Story not found");
112
324
  }
113
325
  const current = getResult.data;
326
+ let criteria = normaliseAc(current.acceptance_criteria);
327
+ if (opts.set !== undefined) {
328
+ let parsed;
329
+ try {
330
+ parsed = JSON.parse(opts.set);
331
+ }
332
+ catch {
333
+ throw new Error("--set value is not valid JSON");
334
+ }
335
+ if (!Array.isArray(parsed)) {
336
+ throw new Error("--set value must be a JSON array");
337
+ }
338
+ criteria = parsed.map((item) => {
339
+ if (typeof item === "string")
340
+ return { text: item, checked: false };
341
+ return { text: item.text, checked: item.checked ?? false };
342
+ });
343
+ }
344
+ else if (opts.add !== undefined) {
345
+ let parsed;
346
+ try {
347
+ parsed = JSON.parse(opts.add);
348
+ }
349
+ catch {
350
+ throw new Error("--add value is not valid JSON");
351
+ }
352
+ const items = Array.isArray(parsed)
353
+ ? parsed
354
+ : [parsed];
355
+ for (const item of items) {
356
+ if (typeof item === "string") {
357
+ criteria.push({ text: item, checked: false });
358
+ }
359
+ else {
360
+ criteria.push({ text: item.text, checked: item.checked ?? false });
361
+ }
362
+ }
363
+ }
364
+ if (opts.check !== undefined) {
365
+ const idx = parseInt(opts.check, 10);
366
+ if (isNaN(idx) || idx < 0 || idx >= criteria.length) {
367
+ throw new Error(`--check index ${opts.check} is out of range (0–${criteria.length - 1})`);
368
+ }
369
+ criteria = criteria.map((ac, i) => i === idx ? { ...ac, checked: true } : ac);
370
+ }
371
+ if (opts.uncheck !== undefined) {
372
+ const idx = parseInt(opts.uncheck, 10);
373
+ if (isNaN(idx) || idx < 0 || idx >= criteria.length) {
374
+ throw new Error(`--uncheck index ${opts.uncheck} is out of range (0–${criteria.length - 1})`);
375
+ }
376
+ criteria = criteria.map((ac, i) => i === idx ? { ...ac, checked: false } : ac);
377
+ }
114
378
  const result = await client.updateStory(id, {
115
379
  version: current.version,
116
- status,
380
+ acceptance_criteria: criteria,
117
381
  });
118
382
  if (!result.success || !result.data) {
119
- process.stderr.write(`Error: ${result.error ?? "Failed to move story"}\n`);
120
- process.exit(1);
383
+ throw new Error(result.error ?? "Failed to update acceptance criteria");
121
384
  }
122
385
  const story = result.data;
123
- process.stdout.write(`Story ${story.id} moved to '${story.status}'\n`);
386
+ output(story, opts, (data) => {
387
+ const updated = normaliseAc(data.acceptance_criteria);
388
+ if (updated.length === 0) {
389
+ process.stdout.write("No acceptance criteria.\n");
390
+ return;
391
+ }
392
+ updated.forEach((ac, i) => {
393
+ const tick = ac.checked ? "[x]" : "[ ]";
394
+ process.stdout.write(` ${i}. ${tick} ${ac.text}\n`);
395
+ });
396
+ });
124
397
  });
125
- // Silence unused variable warning
126
- void storiesCmd;
127
398
  }
128
399
  //# sourceMappingURL=stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/commands/stories.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/commands/stories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ import { StoruApiClient } from "../api-client.js";
3
+ import type { StoruConfig } from "../config.js";
4
+ export declare function registerSubscriberCommand(program: Command, client: StoruApiClient, getConfig: () => StoruConfig): void;
5
+ //# sourceMappingURL=subscribers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.d.ts","sourceRoot":"","sources":["../../src/commands/subscribers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAWhD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,WAAW,GAC3B,IAAI,CAwEN"}
@@ -0,0 +1,66 @@
1
+ import { shortId, output, resolveApp } from "../helpers.js";
2
+ export function registerSubscriberCommand(program, client, getConfig) {
3
+ const subscriberCmd = program.command("subscriber").description("Manage subscribers");
4
+ subscriberCmd
5
+ .command("list")
6
+ .description("List subscribers for an application")
7
+ .option("--app <slug-or-id>", "Application UUID or slug")
8
+ .option("--json", "Output raw JSON")
9
+ .action(async (opts) => {
10
+ const appId = await resolveApp(client, opts, getConfig());
11
+ const result = await client.listSubscribers({ app: appId });
12
+ if (!result.success || !result.data) {
13
+ throw new Error(result.error ?? "Failed to list subscribers");
14
+ }
15
+ const rows = result.data;
16
+ output(rows, opts, (data) => {
17
+ if (data.length === 0) {
18
+ process.stdout.write("No subscribers found.\n");
19
+ return;
20
+ }
21
+ const tableData = data.map((sub) => ({
22
+ ID: shortId(sub.id),
23
+ Email: sub.email,
24
+ Name: sub.name ?? "",
25
+ }));
26
+ console.table(tableData);
27
+ });
28
+ });
29
+ subscriberCmd
30
+ .command("add")
31
+ .description("Add a subscriber to an application")
32
+ .option("--app <slug-or-id>", "Application UUID or slug")
33
+ .requiredOption("--email <email>", "Subscriber email address")
34
+ .option("--name <name>", "Subscriber display name")
35
+ .option("--json", "Output raw JSON")
36
+ .action(async (opts) => {
37
+ const appId = await resolveApp(client, opts, getConfig());
38
+ const result = await client.createSubscriber({
39
+ application_id: appId,
40
+ email: opts.email,
41
+ name: opts.name,
42
+ });
43
+ if (!result.success || !result.data) {
44
+ throw new Error(result.error ?? "Failed to add subscriber");
45
+ }
46
+ const sub = result.data;
47
+ output(sub, opts, (data) => {
48
+ process.stdout.write(`Subscriber added: ${data.id}\n`);
49
+ process.stdout.write(` Email: ${data.email}\n`);
50
+ if (data.name) {
51
+ process.stdout.write(` Name: ${data.name}\n`);
52
+ }
53
+ });
54
+ });
55
+ subscriberCmd
56
+ .command("remove <id>")
57
+ .description("Remove a subscriber")
58
+ .action(async (id) => {
59
+ const result = await client.deleteSubscriber(id);
60
+ if (!result.success) {
61
+ throw new Error(result.error ?? "Failed to remove subscriber");
62
+ }
63
+ process.stdout.write(`Subscriber removed: ${id}\n`);
64
+ });
65
+ }
66
+ //# sourceMappingURL=subscribers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../../src/commands/subscribers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAU5D,MAAM,UAAU,yBAAyB,CACvC,OAAgB,EAChB,MAAsB,EACtB,SAA4B;IAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAEtF,aAAa;SACV,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,IAAsC,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,4BAA4B,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAuB,CAAC;QAE5C,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAqB,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;aACrB,CAAC,CAAC,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,aAAa;SACV,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;SACxD,cAAc,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;SAC7D,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,IAAoE,EAAE,EAAE;QACrF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;YAC3C,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAqB,CAAC;QAEzC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,aAAa;SACV,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface StoruConfig {
2
2
  api_url: string;
3
3
  api_key: string;
4
+ default_app?: string;
4
5
  }
5
6
  export declare function configPath(): string;
6
7
  export declare function configExists(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAmCxC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIrD;AAaD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAoD7C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,WAAW,CAyCxC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIrD;AAaD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CA6D7C"}