@cakemail-org/cakemail-cli 1.3.0 → 1.7.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 (103) hide show
  1. package/README.md +312 -12
  2. package/dist/cli.js +59 -8
  3. package/dist/cli.js.map +1 -1
  4. package/dist/client.d.ts +2 -0
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +15 -7
  7. package/dist/client.js.map +1 -1
  8. package/dist/commands/account.d.ts +5 -0
  9. package/dist/commands/account.d.ts.map +1 -0
  10. package/dist/commands/account.js +231 -0
  11. package/dist/commands/account.js.map +1 -0
  12. package/dist/commands/attributes.d.ts.map +1 -1
  13. package/dist/commands/attributes.js +43 -15
  14. package/dist/commands/attributes.js.map +1 -1
  15. package/dist/commands/campaigns.d.ts.map +1 -1
  16. package/dist/commands/campaigns.js +255 -26
  17. package/dist/commands/campaigns.js.map +1 -1
  18. package/dist/commands/config.d.ts +8 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +294 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/contacts.d.ts.map +1 -1
  23. package/dist/commands/contacts.js +321 -47
  24. package/dist/commands/contacts.js.map +1 -1
  25. package/dist/commands/interests.d.ts +5 -0
  26. package/dist/commands/interests.d.ts.map +1 -0
  27. package/dist/commands/interests.js +172 -0
  28. package/dist/commands/interests.js.map +1 -0
  29. package/dist/commands/lists.d.ts.map +1 -1
  30. package/dist/commands/lists.js +165 -30
  31. package/dist/commands/lists.js.map +1 -1
  32. package/dist/commands/logs.d.ts +5 -0
  33. package/dist/commands/logs.d.ts.map +1 -0
  34. package/dist/commands/logs.js +237 -0
  35. package/dist/commands/logs.js.map +1 -0
  36. package/dist/commands/reports.d.ts.map +1 -1
  37. package/dist/commands/reports.js +90 -13
  38. package/dist/commands/reports.js.map +1 -1
  39. package/dist/commands/segments.d.ts.map +1 -1
  40. package/dist/commands/segments.js +59 -21
  41. package/dist/commands/segments.js.map +1 -1
  42. package/dist/commands/senders.d.ts.map +1 -1
  43. package/dist/commands/senders.js +46 -12
  44. package/dist/commands/senders.js.map +1 -1
  45. package/dist/commands/suppressed.d.ts.map +1 -1
  46. package/dist/commands/suppressed.js +20 -6
  47. package/dist/commands/suppressed.js.map +1 -1
  48. package/dist/commands/tags.d.ts +5 -0
  49. package/dist/commands/tags.d.ts.map +1 -0
  50. package/dist/commands/tags.js +124 -0
  51. package/dist/commands/tags.js.map +1 -0
  52. package/dist/commands/templates.d.ts.map +1 -1
  53. package/dist/commands/templates.js +11 -3
  54. package/dist/commands/templates.js.map +1 -1
  55. package/dist/commands/transactional-templates.d.ts +5 -0
  56. package/dist/commands/transactional-templates.d.ts.map +1 -0
  57. package/dist/commands/transactional-templates.js +354 -0
  58. package/dist/commands/transactional-templates.js.map +1 -0
  59. package/dist/types/profile.d.ts +92 -0
  60. package/dist/types/profile.d.ts.map +1 -0
  61. package/dist/types/profile.js +119 -0
  62. package/dist/types/profile.js.map +1 -0
  63. package/dist/utils/auth.d.ts +33 -0
  64. package/dist/utils/auth.d.ts.map +1 -0
  65. package/dist/utils/auth.js +226 -0
  66. package/dist/utils/auth.js.map +1 -0
  67. package/dist/utils/config-file.d.ts +99 -0
  68. package/dist/utils/config-file.d.ts.map +1 -0
  69. package/dist/utils/config-file.js +259 -0
  70. package/dist/utils/config-file.js.map +1 -0
  71. package/dist/utils/config.d.ts +13 -2
  72. package/dist/utils/config.d.ts.map +1 -1
  73. package/dist/utils/config.js +82 -8
  74. package/dist/utils/config.js.map +1 -1
  75. package/dist/utils/confirm.d.ts +38 -0
  76. package/dist/utils/confirm.d.ts.map +1 -0
  77. package/dist/utils/confirm.js +124 -0
  78. package/dist/utils/confirm.js.map +1 -0
  79. package/dist/utils/defaults.d.ts +39 -0
  80. package/dist/utils/defaults.d.ts.map +1 -0
  81. package/dist/utils/defaults.js +195 -0
  82. package/dist/utils/defaults.js.map +1 -0
  83. package/dist/utils/errors.d.ts +67 -0
  84. package/dist/utils/errors.d.ts.map +1 -0
  85. package/dist/utils/errors.js +395 -0
  86. package/dist/utils/errors.js.map +1 -0
  87. package/dist/utils/interactive.d.ts +97 -0
  88. package/dist/utils/interactive.d.ts.map +1 -0
  89. package/dist/utils/interactive.js +265 -0
  90. package/dist/utils/interactive.js.map +1 -0
  91. package/dist/utils/list-defaults.d.ts +33 -0
  92. package/dist/utils/list-defaults.d.ts.map +1 -0
  93. package/dist/utils/list-defaults.js +52 -0
  94. package/dist/utils/list-defaults.js.map +1 -0
  95. package/dist/utils/output.d.ts +72 -2
  96. package/dist/utils/output.d.ts.map +1 -1
  97. package/dist/utils/output.js +407 -38
  98. package/dist/utils/output.js.map +1 -1
  99. package/dist/utils/progress.d.ts +139 -0
  100. package/dist/utils/progress.d.ts.map +1 -0
  101. package/dist/utils/progress.js +216 -0
  102. package/dist/utils/progress.js.map +1 -0
  103. package/package.json +19 -3
@@ -0,0 +1,237 @@
1
+ import { Command } from 'commander';
2
+ import ora from 'ora';
3
+ import { displayError } from '../utils/errors.js';
4
+ import { autoDetectList } from '../utils/defaults.js';
5
+ export function createLogsCommand(client, formatter) {
6
+ const logs = new Command('logs')
7
+ .description('View activity logs');
8
+ // Get campaign logs
9
+ logs
10
+ .command('campaign <campaign-id>')
11
+ .description('View logs for a campaign')
12
+ .option('--start-time <timestamp>', 'Start time (Unix timestamp)')
13
+ .option('--end-time <timestamp>', 'End time (Unix timestamp)')
14
+ .option('-p, --page <number>', 'Page number')
15
+ .option('--per-page <number>', 'Results per page')
16
+ .option('--with-count', 'Include total count')
17
+ .option('--filter <filter>', 'Filter (e.g., "type==open;email==user@example.com")')
18
+ .option('--sort <sort>', 'Sort by field: +time, -log_id, etc.')
19
+ .option('--cursor <cursor>', 'Cursor for pagination')
20
+ .action(async (campaignId, options) => {
21
+ const spinner = ora(`Fetching logs for campaign ${campaignId}...`).start();
22
+ try {
23
+ const params = {
24
+ campaignId: parseInt(campaignId)
25
+ };
26
+ if (options.startTime)
27
+ params.startTime = parseInt(options.startTime);
28
+ if (options.endTime)
29
+ params.endTime = parseInt(options.endTime);
30
+ if (options.page)
31
+ params.page = parseInt(options.page);
32
+ if (options.perPage)
33
+ params.perPage = parseInt(options.perPage);
34
+ if (options.withCount)
35
+ params.withCount = true;
36
+ if (options.filter)
37
+ params.filter = options.filter;
38
+ if (options.sort)
39
+ params.sort = options.sort;
40
+ if (options.cursor)
41
+ params.cursor = options.cursor;
42
+ const data = await client.sdk.logService.getCampaignLogs(params);
43
+ spinner.stop();
44
+ formatter.output(data);
45
+ }
46
+ catch (error) {
47
+ spinner.stop();
48
+ displayError(error, {
49
+ command: 'logs campaign',
50
+ resource: 'campaign',
51
+ resourceId: campaignId,
52
+ operation: 'fetch logs'
53
+ });
54
+ process.exit(1);
55
+ }
56
+ });
57
+ // Get list logs
58
+ logs
59
+ .command('list [list-id]')
60
+ .description('View logs for a list (auto-detects if only one list exists)')
61
+ .option('--start-time <timestamp>', 'Start time (Unix timestamp)')
62
+ .option('--end-time <timestamp>', 'End time (Unix timestamp)')
63
+ .option('-p, --page <number>', 'Page number')
64
+ .option('--per-page <number>', 'Results per page')
65
+ .option('--with-count', 'Include total count')
66
+ .option('--filter <filter>', 'Filter (e.g., "type==subscribe;email==user@example.com")')
67
+ .action(async (listId, options) => {
68
+ // Auto-detect list ID if not provided
69
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
70
+ if (!detectedListId) {
71
+ process.exit(1);
72
+ }
73
+ const spinner = ora(`Fetching logs for list ${detectedListId}...`).start();
74
+ try {
75
+ const params = {
76
+ listId: detectedListId
77
+ };
78
+ if (options.startTime)
79
+ params.startTime = parseInt(options.startTime);
80
+ if (options.endTime)
81
+ params.endTime = parseInt(options.endTime);
82
+ if (options.page)
83
+ params.page = parseInt(options.page);
84
+ if (options.perPage)
85
+ params.perPage = parseInt(options.perPage);
86
+ if (options.withCount)
87
+ params.withCount = true;
88
+ if (options.filter)
89
+ params.filter = options.filter;
90
+ const data = await client.sdk.logService.getListLogs(params);
91
+ spinner.stop();
92
+ formatter.output(data);
93
+ }
94
+ catch (error) {
95
+ spinner.stop();
96
+ displayError(error, {
97
+ command: 'logs list',
98
+ resource: 'list',
99
+ resourceId: detectedListId,
100
+ operation: 'fetch logs'
101
+ });
102
+ process.exit(1);
103
+ }
104
+ });
105
+ // Export campaign logs
106
+ logs
107
+ .command('campaign-export <campaign-id>')
108
+ .description('Create a campaign log export')
109
+ .option('--description <description>', 'Export description')
110
+ .option('--filter <filter>', 'Filter logs to export')
111
+ .action(async (campaignId, options) => {
112
+ const spinner = ora(`Creating log export for campaign ${campaignId}...`).start();
113
+ try {
114
+ const payload = {};
115
+ if (options.description)
116
+ payload.description = options.description;
117
+ if (options.filter)
118
+ payload.filter = options.filter;
119
+ const data = await client.sdk.logService.campaignLogExportCreate({
120
+ campaignId: parseInt(campaignId),
121
+ requestBody: payload
122
+ });
123
+ spinner.stop();
124
+ formatter.success('Campaign log export created successfully');
125
+ formatter.output(data);
126
+ formatter.info('\nUse the export ID to download: cakemail logs campaign-export-download <campaign-id> <export-id>');
127
+ }
128
+ catch (error) {
129
+ spinner.stop();
130
+ displayError(error, {
131
+ command: 'logs campaign-export',
132
+ resource: 'campaign',
133
+ resourceId: campaignId,
134
+ operation: 'create log export'
135
+ });
136
+ process.exit(1);
137
+ }
138
+ });
139
+ // Download campaign log export
140
+ logs
141
+ .command('campaign-export-download <campaign-id> <export-id>')
142
+ .description('Download a campaign log export')
143
+ .action(async (campaignId, exportId) => {
144
+ const spinner = ora('Fetching download URL...').start();
145
+ try {
146
+ const data = await client.sdk.logService.campaignLogExportDownload({
147
+ campaignId: parseInt(campaignId),
148
+ campaignLogExportId: exportId
149
+ });
150
+ spinner.stop();
151
+ formatter.success('Export download URL retrieved');
152
+ formatter.output(data);
153
+ }
154
+ catch (error) {
155
+ spinner.stop();
156
+ displayError(error, {
157
+ command: 'logs campaign-export-download',
158
+ resource: 'campaign log export',
159
+ resourceId: exportId,
160
+ operation: 'download'
161
+ });
162
+ process.exit(1);
163
+ }
164
+ });
165
+ // Export list logs
166
+ logs
167
+ .command('list-export [list-id]')
168
+ .description('Create a list log export (auto-detects if only one list exists)')
169
+ .option('--description <description>', 'Export description')
170
+ .option('--filter <filter>', 'Filter logs to export')
171
+ .action(async (listId, options) => {
172
+ // Auto-detect list ID if not provided
173
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
174
+ if (!detectedListId) {
175
+ process.exit(1);
176
+ }
177
+ const spinner = ora(`Creating log export for list ${detectedListId}...`).start();
178
+ try {
179
+ const payload = {};
180
+ if (options.description)
181
+ payload.description = options.description;
182
+ if (options.filter)
183
+ payload.filter = options.filter;
184
+ const data = await client.sdk.logService.listLogsExportCreate({
185
+ listId: detectedListId,
186
+ requestBody: payload
187
+ });
188
+ spinner.stop();
189
+ formatter.success('List log export created successfully');
190
+ formatter.output(data);
191
+ formatter.info('\nUse the export ID to download: cakemail logs list-export-download <list-id> <export-id>');
192
+ }
193
+ catch (error) {
194
+ spinner.stop();
195
+ displayError(error, {
196
+ command: 'logs list-export',
197
+ resource: 'list',
198
+ resourceId: detectedListId,
199
+ operation: 'create log export'
200
+ });
201
+ process.exit(1);
202
+ }
203
+ });
204
+ // Download list log export
205
+ logs
206
+ .command('list-export-download [list-id] <export-id>')
207
+ .description('Download a list log export (auto-detects if only one list exists)')
208
+ .action(async (listId, exportId) => {
209
+ // Auto-detect list ID if not provided
210
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
211
+ if (!detectedListId) {
212
+ process.exit(1);
213
+ }
214
+ const spinner = ora('Fetching download URL...').start();
215
+ try {
216
+ const data = await client.sdk.logService.listLogsExportDownload({
217
+ listId: detectedListId,
218
+ listLogsExportId: exportId
219
+ });
220
+ spinner.stop();
221
+ formatter.success('Export download URL retrieved');
222
+ formatter.output(data);
223
+ }
224
+ catch (error) {
225
+ spinner.stop();
226
+ displayError(error, {
227
+ command: 'logs list-export-download',
228
+ resource: 'list log export',
229
+ resourceId: exportId,
230
+ operation: 'download'
231
+ });
232
+ process.exit(1);
233
+ }
234
+ });
235
+ return logs;
236
+ }
237
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAyPhG"}
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMrD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAgVhG"}
@@ -1,5 +1,8 @@
1
1
  import { Command } from 'commander';
2
2
  import ora from 'ora';
3
+ import { pollUntilComplete } from '../utils/progress.js';
4
+ import { displayError, validate } from '../utils/errors.js';
5
+ import { confirmDelete } from '../utils/confirm.js';
3
6
  export function createReportsCommand(client, formatter) {
4
7
  const reports = new Command('reports')
5
8
  .description('View analytics and reports');
@@ -8,6 +11,12 @@ export function createReportsCommand(client, formatter) {
8
11
  .command('campaign <id>')
9
12
  .description('Get campaign analytics and statistics')
10
13
  .action(async (id) => {
14
+ // Validate ID
15
+ const validation = validate.id(id, 'Campaign ID');
16
+ if (!validation.valid) {
17
+ formatter.error(validation.error);
18
+ process.exit(1);
19
+ }
11
20
  const spinner = ora(`Fetching campaign ${id} report...`).start();
12
21
  try {
13
22
  const data = await client.sdk.reportService.getCampaignStats({ campaignId: parseInt(id) });
@@ -16,7 +25,12 @@ export function createReportsCommand(client, formatter) {
16
25
  }
17
26
  catch (error) {
18
27
  spinner.stop();
19
- formatter.error(error.message);
28
+ displayError(error, {
29
+ command: 'reports campaign',
30
+ resource: 'campaign',
31
+ resourceId: id,
32
+ operation: 'fetch report'
33
+ });
20
34
  process.exit(1);
21
35
  }
22
36
  });
@@ -25,6 +39,12 @@ export function createReportsCommand(client, formatter) {
25
39
  .command('campaign-links <id>')
26
40
  .description('Get campaign link click analytics')
27
41
  .action(async (id) => {
42
+ // Validate ID
43
+ const validation = validate.id(id, 'Campaign ID');
44
+ if (!validation.valid) {
45
+ formatter.error(validation.error);
46
+ process.exit(1);
47
+ }
28
48
  const spinner = ora(`Fetching link analytics for campaign ${id}...`).start();
29
49
  try {
30
50
  const data = await client.sdk.reportService.getCampaignLinksStats({ campaignId: parseInt(id) });
@@ -33,7 +53,12 @@ export function createReportsCommand(client, formatter) {
33
53
  }
34
54
  catch (error) {
35
55
  spinner.stop();
36
- formatter.error(error.message);
56
+ displayError(error, {
57
+ command: 'reports campaign-links',
58
+ resource: 'campaign',
59
+ resourceId: id,
60
+ operation: 'fetch link analytics'
61
+ });
37
62
  process.exit(1);
38
63
  }
39
64
  });
@@ -42,6 +67,12 @@ export function createReportsCommand(client, formatter) {
42
67
  .command('list <id>')
43
68
  .description('Get list analytics and statistics')
44
69
  .action(async (id) => {
70
+ // Validate ID
71
+ const validation = validate.id(id, 'List ID');
72
+ if (!validation.valid) {
73
+ formatter.error(validation.error);
74
+ process.exit(1);
75
+ }
45
76
  const spinner = ora(`Fetching list ${id} report...`).start();
46
77
  try {
47
78
  const data = await client.sdk.reportService.getListStats({ listId: parseInt(id) });
@@ -50,7 +81,12 @@ export function createReportsCommand(client, formatter) {
50
81
  }
51
82
  catch (error) {
52
83
  spinner.stop();
53
- formatter.error(error.message);
84
+ displayError(error, {
85
+ command: 'reports list',
86
+ resource: 'list',
87
+ resourceId: id,
88
+ operation: 'fetch report'
89
+ });
54
90
  process.exit(1);
55
91
  }
56
92
  });
@@ -170,12 +206,12 @@ export function createReportsCommand(client, formatter) {
170
206
  // Create campaigns export
171
207
  reports
172
208
  .command('export-campaigns')
173
- .description('Create a campaigns report export')
209
+ .description('Create and download a campaigns report export')
174
210
  .option('--from <date>', 'Start date (YYYY-MM-DD)')
175
211
  .option('--to <date>', 'End date (YYYY-MM-DD)')
176
212
  .option('--status <status>', 'Filter by status')
213
+ .option('--no-wait', 'Create export without waiting for completion')
177
214
  .action(async (options) => {
178
- const spinner = ora('Creating campaign report export...').start();
179
215
  try {
180
216
  const params = {};
181
217
  if (options.from)
@@ -184,13 +220,48 @@ export function createReportsCommand(client, formatter) {
184
220
  params.to = options.to;
185
221
  if (options.status)
186
222
  params.status = options.status;
187
- const data = await client.sdk.reportService.createCampaignsReportsExport({ requestBody: params });
188
- spinner.stop();
189
- formatter.success('Campaign report export created');
190
- formatter.output(data);
223
+ // Create the export
224
+ const spinner = ora('Creating campaign report export...').start();
225
+ const exportResponse = await client.sdk.reportService.createCampaignsReportsExport({ requestBody: params });
226
+ spinner.succeed('Export job created');
227
+ const exportId = exportResponse.data?.id;
228
+ if (!exportId) {
229
+ formatter.error('Export ID not returned');
230
+ process.exit(1);
231
+ }
232
+ // If --no-wait flag is set, just show the export ID
233
+ if (options.wait === false) {
234
+ formatter.info(`Export ID: ${exportId}`);
235
+ formatter.info(`Check status with: cakemail reports campaigns-export ${exportId}`);
236
+ formatter.output(exportResponse);
237
+ return;
238
+ }
239
+ // Poll until export is ready
240
+ const result = await pollUntilComplete(async () => {
241
+ const status = await client.sdk.reportService.getCampaignsReportsExport({
242
+ exportId: exportId
243
+ });
244
+ const exportStatus = status.data?.status;
245
+ const complete = exportStatus === 'ready' || exportStatus === 'error';
246
+ return {
247
+ complete,
248
+ status: exportStatus === 'ready'
249
+ ? 'Export ready'
250
+ : `Export ${exportStatus || 'processing'}...`,
251
+ data: status
252
+ };
253
+ }, 'Waiting for export to complete...', { checkInterval: 2000, maxAttempts: 60 });
254
+ if (result.data?.status === 'ready') {
255
+ formatter.info(`Export completed. Download with: cakemail reports download-campaigns-export ${exportId}`);
256
+ formatter.output(result);
257
+ }
258
+ else {
259
+ formatter.error('Export failed');
260
+ formatter.output(result);
261
+ process.exit(1);
262
+ }
191
263
  }
192
264
  catch (error) {
193
- spinner.stop();
194
265
  formatter.error(error.message);
195
266
  process.exit(1);
196
267
  }
@@ -234,11 +305,17 @@ export function createReportsCommand(client, formatter) {
234
305
  reports
235
306
  .command('delete-campaigns-export <id>')
236
307
  .description('Delete a campaigns report export')
237
- .option('-f, --force', 'Skip confirmation')
308
+ .option('-f, --force', 'Skip confirmation prompt')
238
309
  .action(async (id, options) => {
310
+ // Interactive confirmation (unless --force is used)
239
311
  if (!options.force) {
240
- formatter.info('Use --force to confirm deletion');
241
- process.exit(1);
312
+ const confirmed = await confirmDelete('campaigns report export', id, [
313
+ 'Export file will be permanently deleted'
314
+ ]);
315
+ if (!confirmed) {
316
+ formatter.info('Deletion cancelled');
317
+ return;
318
+ }
242
319
  }
243
320
  const spinner = ora(`Deleting export ${id}...`).start();
244
321
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/commands/segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAkKjG"}
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../src/commands/segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAKrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAmNjG"}
@@ -1,19 +1,26 @@
1
1
  import { Command } from 'commander';
2
2
  import ora from 'ora';
3
+ import { confirmDelete } from '../utils/confirm.js';
4
+ import { autoDetectList } from '../utils/defaults.js';
3
5
  export function createSegmentsCommand(client, formatter) {
4
6
  const segments = new Command('segments')
5
7
  .description('Manage contact segments');
6
8
  // List segments
7
9
  segments
8
- .command('list <list-id>')
9
- .description('List all segments in a list')
10
+ .command('list [list-id]')
11
+ .description('List all segments in a list (auto-detects if only one list exists)')
10
12
  .option('-l, --limit <number>', 'Limit number of results')
11
13
  .option('-p, --page <number>', 'Page number')
12
14
  .action(async (listId, options) => {
15
+ // Auto-detect list ID if not provided
16
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
17
+ if (!detectedListId) {
18
+ process.exit(1);
19
+ }
13
20
  const spinner = ora('Fetching segments...').start();
14
21
  try {
15
22
  const params = {
16
- listId: parseInt(listId)
23
+ listId: detectedListId
17
24
  };
18
25
  if (options.limit)
19
26
  params.per_page = parseInt(options.limit);
@@ -31,13 +38,18 @@ export function createSegmentsCommand(client, formatter) {
31
38
  });
32
39
  // Get segment
33
40
  segments
34
- .command('get <list-id> <segment-id>')
35
- .description('Get segment details')
41
+ .command('get [list-id] <segment-id>')
42
+ .description('Get segment details (auto-detects if only one list exists)')
36
43
  .action(async (listId, segmentId) => {
44
+ // Auto-detect list ID if not provided
45
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
46
+ if (!detectedListId) {
47
+ process.exit(1);
48
+ }
37
49
  const spinner = ora(`Fetching segment ${segmentId}...`).start();
38
50
  try {
39
51
  const data = await client.sdk.segmentService.getSegment({
40
- listId: parseInt(listId),
52
+ listId: detectedListId,
41
53
  segmentId: parseInt(segmentId)
42
54
  });
43
55
  spinner.stop();
@@ -51,11 +63,16 @@ export function createSegmentsCommand(client, formatter) {
51
63
  });
52
64
  // Create segment
53
65
  segments
54
- .command('create <list-id>')
55
- .description('Create a new segment')
66
+ .command('create [list-id]')
67
+ .description('Create a new segment (auto-detects if only one list exists)')
56
68
  .requiredOption('-n, --name <name>', 'Segment name')
57
69
  .option('-c, --conditions <json>', 'Segment conditions as JSON')
58
70
  .action(async (listId, options) => {
71
+ // Auto-detect list ID if not provided
72
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
73
+ if (!detectedListId) {
74
+ process.exit(1);
75
+ }
59
76
  const spinner = ora('Creating segment...').start();
60
77
  try {
61
78
  const payload = {
@@ -65,7 +82,7 @@ export function createSegmentsCommand(client, formatter) {
65
82
  payload.conditions = JSON.parse(options.conditions);
66
83
  }
67
84
  const data = await client.sdk.segmentService.createSegment({
68
- listId: parseInt(listId),
85
+ listId: detectedListId,
69
86
  requestBody: payload
70
87
  });
71
88
  spinner.stop();
@@ -80,11 +97,16 @@ export function createSegmentsCommand(client, formatter) {
80
97
  });
81
98
  // Update segment
82
99
  segments
83
- .command('update <list-id> <segment-id>')
84
- .description('Update a segment')
100
+ .command('update [list-id] <segment-id>')
101
+ .description('Update a segment (auto-detects if only one list exists)')
85
102
  .option('-n, --name <name>', 'Segment name')
86
103
  .option('-c, --conditions <json>', 'Segment conditions as JSON')
87
104
  .action(async (listId, segmentId, options) => {
105
+ // Auto-detect list ID if not provided
106
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
107
+ if (!detectedListId) {
108
+ process.exit(1);
109
+ }
88
110
  const spinner = ora(`Updating segment ${segmentId}...`).start();
89
111
  try {
90
112
  const payload = {};
@@ -94,7 +116,7 @@ export function createSegmentsCommand(client, formatter) {
94
116
  payload.conditions = JSON.parse(options.conditions);
95
117
  }
96
118
  const data = await client.sdk.segmentService.patchSegment({
97
- listId: parseInt(listId),
119
+ listId: detectedListId,
98
120
  segmentId: parseInt(segmentId),
99
121
  requestBody: payload
100
122
  });
@@ -110,18 +132,29 @@ export function createSegmentsCommand(client, formatter) {
110
132
  });
111
133
  // Delete segment
112
134
  segments
113
- .command('delete <list-id> <segment-id>')
114
- .description('Delete a segment')
115
- .option('-f, --force', 'Skip confirmation')
135
+ .command('delete [list-id] <segment-id>')
136
+ .description('Delete a segment (auto-detects if only one list exists)')
137
+ .option('-f, --force', 'Skip confirmation prompt')
116
138
  .action(async (listId, segmentId, options) => {
117
- if (!options.force) {
118
- formatter.info('Use --force to confirm deletion');
139
+ // Auto-detect list ID if not provided
140
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
141
+ if (!detectedListId) {
119
142
  process.exit(1);
120
143
  }
144
+ // Interactive confirmation (unless --force is used)
145
+ if (!options.force) {
146
+ const confirmed = await confirmDelete('segment', segmentId, [
147
+ 'Segment will be permanently deleted'
148
+ ]);
149
+ if (!confirmed) {
150
+ formatter.info('Deletion cancelled');
151
+ return;
152
+ }
153
+ }
121
154
  const spinner = ora(`Deleting segment ${segmentId}...`).start();
122
155
  try {
123
156
  await client.sdk.segmentService.deleteSegment({
124
- listId: parseInt(listId),
157
+ listId: detectedListId,
125
158
  segmentId: parseInt(segmentId)
126
159
  });
127
160
  spinner.stop();
@@ -135,15 +168,20 @@ export function createSegmentsCommand(client, formatter) {
135
168
  });
136
169
  // List segment contacts
137
170
  segments
138
- .command('contacts <list-id> <segment-id>')
139
- .description('List contacts in a segment')
171
+ .command('contacts [list-id] <segment-id>')
172
+ .description('List contacts in a segment (auto-detects if only one list exists)')
140
173
  .option('-l, --limit <number>', 'Limit number of results')
141
174
  .option('-p, --page <number>', 'Page number')
142
175
  .action(async (listId, segmentId, options) => {
176
+ // Auto-detect list ID if not provided
177
+ const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
178
+ if (!detectedListId) {
179
+ process.exit(1);
180
+ }
143
181
  const spinner = ora('Fetching segment contacts...').start();
144
182
  try {
145
183
  const params = {
146
- listId: parseInt(listId),
184
+ listId: detectedListId,
147
185
  segmentId: parseInt(segmentId)
148
186
  };
149
187
  if (options.limit)