@cakemail-org/cakemail-cli 1.2.0 → 1.5.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.
- package/README.md +140 -0
- package/dist/cli.js +48 -6
- package/dist/cli.js.map +1 -1
- package/dist/client.js +0 -2
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts +5 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +231 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/attributes.d.ts +5 -0
- package/dist/commands/attributes.d.ts.map +1 -0
- package/dist/commands/attributes.js +126 -0
- package/dist/commands/attributes.js.map +1 -0
- package/dist/commands/campaigns.d.ts.map +1 -1
- package/dist/commands/campaigns.js +153 -19
- package/dist/commands/campaigns.js.map +1 -1
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +235 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +436 -14
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/emails.d.ts.map +1 -1
- package/dist/commands/emails.js +53 -0
- package/dist/commands/emails.js.map +1 -1
- package/dist/commands/lists.d.ts.map +1 -1
- package/dist/commands/lists.js +282 -11
- package/dist/commands/lists.js.map +1 -1
- package/dist/commands/reports.d.ts +5 -0
- package/dist/commands/reports.d.ts.map +1 -0
- package/dist/commands/reports.js +334 -0
- package/dist/commands/reports.js.map +1 -0
- package/dist/commands/segments.d.ts +5 -0
- package/dist/commands/segments.d.ts.map +1 -0
- package/dist/commands/segments.js +203 -0
- package/dist/commands/segments.js.map +1 -0
- package/dist/commands/senders.d.ts.map +1 -1
- package/dist/commands/senders.js +36 -5
- package/dist/commands/senders.js.map +1 -1
- package/dist/commands/suppressed.d.ts +5 -0
- package/dist/commands/suppressed.d.ts.map +1 -0
- package/dist/commands/suppressed.js +193 -0
- package/dist/commands/suppressed.js.map +1 -0
- package/dist/commands/templates.d.ts.map +1 -1
- package/dist/commands/templates.js +11 -3
- package/dist/commands/templates.js.map +1 -1
- package/dist/types/profile.d.ts +92 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +119 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/utils/auth.d.ts +26 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +198 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/config-file.d.ts +92 -0
- package/dist/utils/config-file.d.ts.map +1 -0
- package/dist/utils/config-file.js +244 -0
- package/dist/utils/config-file.js.map +1 -0
- package/dist/utils/config.d.ts +11 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +74 -8
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/confirm.d.ts +38 -0
- package/dist/utils/confirm.d.ts.map +1 -0
- package/dist/utils/confirm.js +124 -0
- package/dist/utils/confirm.js.map +1 -0
- package/dist/utils/defaults.d.ts +39 -0
- package/dist/utils/defaults.d.ts.map +1 -0
- package/dist/utils/defaults.js +195 -0
- package/dist/utils/defaults.js.map +1 -0
- package/dist/utils/errors.d.ts +67 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +395 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/interactive.d.ts +97 -0
- package/dist/utils/interactive.d.ts.map +1 -0
- package/dist/utils/interactive.js +265 -0
- package/dist/utils/interactive.js.map +1 -0
- package/dist/utils/output.d.ts +72 -2
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +383 -37
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/progress.d.ts +139 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +216 -0
- package/dist/utils/progress.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
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';
|
|
6
|
+
export function createReportsCommand(client, formatter) {
|
|
7
|
+
const reports = new Command('reports')
|
|
8
|
+
.description('View analytics and reports');
|
|
9
|
+
// Campaign report
|
|
10
|
+
reports
|
|
11
|
+
.command('campaign <id>')
|
|
12
|
+
.description('Get campaign analytics and statistics')
|
|
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
|
+
}
|
|
20
|
+
const spinner = ora(`Fetching campaign ${id} report...`).start();
|
|
21
|
+
try {
|
|
22
|
+
const data = await client.sdk.reportService.getCampaignStats({ campaignId: parseInt(id) });
|
|
23
|
+
spinner.stop();
|
|
24
|
+
formatter.output(data);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
spinner.stop();
|
|
28
|
+
displayError(error, {
|
|
29
|
+
command: 'reports campaign',
|
|
30
|
+
resource: 'campaign',
|
|
31
|
+
resourceId: id,
|
|
32
|
+
operation: 'fetch report'
|
|
33
|
+
});
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
// Campaign links report
|
|
38
|
+
reports
|
|
39
|
+
.command('campaign-links <id>')
|
|
40
|
+
.description('Get campaign link click analytics')
|
|
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
|
+
}
|
|
48
|
+
const spinner = ora(`Fetching link analytics for campaign ${id}...`).start();
|
|
49
|
+
try {
|
|
50
|
+
const data = await client.sdk.reportService.getCampaignLinksStats({ campaignId: parseInt(id) });
|
|
51
|
+
spinner.stop();
|
|
52
|
+
formatter.output(data);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
spinner.stop();
|
|
56
|
+
displayError(error, {
|
|
57
|
+
command: 'reports campaign-links',
|
|
58
|
+
resource: 'campaign',
|
|
59
|
+
resourceId: id,
|
|
60
|
+
operation: 'fetch link analytics'
|
|
61
|
+
});
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// List report
|
|
66
|
+
reports
|
|
67
|
+
.command('list <id>')
|
|
68
|
+
.description('Get list analytics and statistics')
|
|
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
|
+
}
|
|
76
|
+
const spinner = ora(`Fetching list ${id} report...`).start();
|
|
77
|
+
try {
|
|
78
|
+
const data = await client.sdk.reportService.getListStats({ listId: parseInt(id) });
|
|
79
|
+
spinner.stop();
|
|
80
|
+
formatter.output(data);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
spinner.stop();
|
|
84
|
+
displayError(error, {
|
|
85
|
+
command: 'reports list',
|
|
86
|
+
resource: 'list',
|
|
87
|
+
resourceId: id,
|
|
88
|
+
operation: 'fetch report'
|
|
89
|
+
});
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// Account report
|
|
94
|
+
reports
|
|
95
|
+
.command('account')
|
|
96
|
+
.description('Get account-wide analytics and statistics')
|
|
97
|
+
.action(async () => {
|
|
98
|
+
const spinner = ora('Fetching account report...').start();
|
|
99
|
+
try {
|
|
100
|
+
const data = await client.sdk.reportService.getSelfAccountStats({});
|
|
101
|
+
spinner.stop();
|
|
102
|
+
formatter.output(data);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
spinner.stop();
|
|
106
|
+
formatter.error(error.message);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Email API stats
|
|
111
|
+
reports
|
|
112
|
+
.command('emails')
|
|
113
|
+
.description('Get Email API statistics')
|
|
114
|
+
.option('--from <date>', 'Start date (YYYY-MM-DD)')
|
|
115
|
+
.option('--to <date>', 'End date (YYYY-MM-DD)')
|
|
116
|
+
.action(async (options) => {
|
|
117
|
+
const spinner = ora('Fetching email statistics...').start();
|
|
118
|
+
try {
|
|
119
|
+
const params = {};
|
|
120
|
+
if (options.from)
|
|
121
|
+
params.from = options.from;
|
|
122
|
+
if (options.to)
|
|
123
|
+
params.to = options.to;
|
|
124
|
+
const data = await client.sdk.emailApiService.getEmailApiStats(params);
|
|
125
|
+
spinner.stop();
|
|
126
|
+
formatter.output(data);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
spinner.stop();
|
|
130
|
+
formatter.error(error.message);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
// Email API summary
|
|
135
|
+
reports
|
|
136
|
+
.command('emails-summary')
|
|
137
|
+
.description('Get Email API activity summary')
|
|
138
|
+
.option('--from <date>', 'Start date (YYYY-MM-DD)')
|
|
139
|
+
.option('--to <date>', 'End date (YYYY-MM-DD)')
|
|
140
|
+
.action(async (options) => {
|
|
141
|
+
const spinner = ora('Fetching email activity summary...').start();
|
|
142
|
+
try {
|
|
143
|
+
const params = {};
|
|
144
|
+
if (options.from)
|
|
145
|
+
params.from = options.from;
|
|
146
|
+
if (options.to)
|
|
147
|
+
params.to = options.to;
|
|
148
|
+
const data = await client.sdk.emailApiService.getEmailApiSummary(params);
|
|
149
|
+
spinner.stop();
|
|
150
|
+
formatter.output(data);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
spinner.stop();
|
|
154
|
+
formatter.error(error.message);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// Transactional email stats
|
|
159
|
+
reports
|
|
160
|
+
.command('transactional-emails')
|
|
161
|
+
.description('Get transactional email statistics')
|
|
162
|
+
.option('--from <date>', 'Start date (YYYY-MM-DD)')
|
|
163
|
+
.option('--to <date>', 'End date (YYYY-MM-DD)')
|
|
164
|
+
.action(async (options) => {
|
|
165
|
+
const spinner = ora('Fetching transactional email statistics...').start();
|
|
166
|
+
try {
|
|
167
|
+
const params = {};
|
|
168
|
+
if (options.from)
|
|
169
|
+
params.from = options.from;
|
|
170
|
+
if (options.to)
|
|
171
|
+
params.to = options.to;
|
|
172
|
+
const data = await client.sdk.transactionalEmailService.getEmailsStats(params);
|
|
173
|
+
spinner.stop();
|
|
174
|
+
formatter.output(data);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
spinner.stop();
|
|
178
|
+
formatter.error(error.message);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// List campaigns exports
|
|
183
|
+
reports
|
|
184
|
+
.command('campaigns-exports')
|
|
185
|
+
.description('List campaign report exports')
|
|
186
|
+
.option('-l, --limit <number>', 'Limit number of results')
|
|
187
|
+
.option('-p, --page <number>', 'Page number')
|
|
188
|
+
.action(async (options) => {
|
|
189
|
+
const spinner = ora('Fetching campaign report exports...').start();
|
|
190
|
+
try {
|
|
191
|
+
const params = {};
|
|
192
|
+
if (options.limit)
|
|
193
|
+
params.per_page = parseInt(options.limit);
|
|
194
|
+
if (options.page)
|
|
195
|
+
params.page = parseInt(options.page);
|
|
196
|
+
const data = await client.sdk.reportService.listCampaignsReportsExports(params);
|
|
197
|
+
spinner.stop();
|
|
198
|
+
formatter.output(data);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
spinner.stop();
|
|
202
|
+
formatter.error(error.message);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
// Create campaigns export
|
|
207
|
+
reports
|
|
208
|
+
.command('export-campaigns')
|
|
209
|
+
.description('Create and download a campaigns report export')
|
|
210
|
+
.option('--from <date>', 'Start date (YYYY-MM-DD)')
|
|
211
|
+
.option('--to <date>', 'End date (YYYY-MM-DD)')
|
|
212
|
+
.option('--status <status>', 'Filter by status')
|
|
213
|
+
.option('--no-wait', 'Create export without waiting for completion')
|
|
214
|
+
.action(async (options) => {
|
|
215
|
+
try {
|
|
216
|
+
const params = {};
|
|
217
|
+
if (options.from)
|
|
218
|
+
params.from = options.from;
|
|
219
|
+
if (options.to)
|
|
220
|
+
params.to = options.to;
|
|
221
|
+
if (options.status)
|
|
222
|
+
params.status = options.status;
|
|
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
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
formatter.error(error.message);
|
|
266
|
+
process.exit(1);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
// Get campaigns export
|
|
270
|
+
reports
|
|
271
|
+
.command('campaigns-export <id>')
|
|
272
|
+
.description('Get a campaigns report export status')
|
|
273
|
+
.action(async (id) => {
|
|
274
|
+
const spinner = ora(`Fetching export ${id}...`).start();
|
|
275
|
+
try {
|
|
276
|
+
const data = await client.sdk.reportService.getCampaignsReportsExport({ exportId: id });
|
|
277
|
+
spinner.stop();
|
|
278
|
+
formatter.output(data);
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
spinner.stop();
|
|
282
|
+
formatter.error(error.message);
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
// Download campaigns export
|
|
287
|
+
reports
|
|
288
|
+
.command('download-campaigns-export <id>')
|
|
289
|
+
.description('Download a campaigns report export')
|
|
290
|
+
.action(async (id) => {
|
|
291
|
+
const spinner = ora(`Downloading export ${id}...`).start();
|
|
292
|
+
try {
|
|
293
|
+
const data = await client.sdk.reportService.downloadCampaignsReportsExport({ exportId: id });
|
|
294
|
+
spinner.stop();
|
|
295
|
+
formatter.success('Export downloaded');
|
|
296
|
+
formatter.output(data);
|
|
297
|
+
}
|
|
298
|
+
catch (error) {
|
|
299
|
+
spinner.stop();
|
|
300
|
+
formatter.error(error.message);
|
|
301
|
+
process.exit(1);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
// Delete campaigns export
|
|
305
|
+
reports
|
|
306
|
+
.command('delete-campaigns-export <id>')
|
|
307
|
+
.description('Delete a campaigns report export')
|
|
308
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
309
|
+
.action(async (id, options) => {
|
|
310
|
+
// Interactive confirmation (unless --force is used)
|
|
311
|
+
if (!options.force) {
|
|
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
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const spinner = ora(`Deleting export ${id}...`).start();
|
|
321
|
+
try {
|
|
322
|
+
await client.sdk.reportService.deleteCampaignsReportsExport({ exportId: id });
|
|
323
|
+
spinner.stop();
|
|
324
|
+
formatter.success(`Export ${id} deleted`);
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
spinner.stop();
|
|
328
|
+
formatter.error(error.message);
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
return reports;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=reports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/commands/reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { CakemailClient } from '../client.js';
|
|
3
|
+
import { OutputFormatter } from '../utils/output.js';
|
|
4
|
+
export declare function createSegmentsCommand(client: CakemailClient, formatter: OutputFormatter): Command;
|
|
5
|
+
//# sourceMappingURL=segments.d.ts.map
|
|
@@ -0,0 +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;AAKrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAmNjG"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { confirmDelete } from '../utils/confirm.js';
|
|
4
|
+
import { autoDetectList } from '../utils/defaults.js';
|
|
5
|
+
export function createSegmentsCommand(client, formatter) {
|
|
6
|
+
const segments = new Command('segments')
|
|
7
|
+
.description('Manage contact segments');
|
|
8
|
+
// List segments
|
|
9
|
+
segments
|
|
10
|
+
.command('list [list-id]')
|
|
11
|
+
.description('List all segments in a list (auto-detects if only one list exists)')
|
|
12
|
+
.option('-l, --limit <number>', 'Limit number of results')
|
|
13
|
+
.option('-p, --page <number>', 'Page number')
|
|
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
|
+
}
|
|
20
|
+
const spinner = ora('Fetching segments...').start();
|
|
21
|
+
try {
|
|
22
|
+
const params = {
|
|
23
|
+
listId: detectedListId
|
|
24
|
+
};
|
|
25
|
+
if (options.limit)
|
|
26
|
+
params.per_page = parseInt(options.limit);
|
|
27
|
+
if (options.page)
|
|
28
|
+
params.page = parseInt(options.page);
|
|
29
|
+
const data = await client.sdk.segmentService.listSegments(params);
|
|
30
|
+
spinner.stop();
|
|
31
|
+
formatter.output(data);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
spinner.stop();
|
|
35
|
+
formatter.error(error.message);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
// Get segment
|
|
40
|
+
segments
|
|
41
|
+
.command('get [list-id] <segment-id>')
|
|
42
|
+
.description('Get segment details (auto-detects if only one list exists)')
|
|
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
|
+
}
|
|
49
|
+
const spinner = ora(`Fetching segment ${segmentId}...`).start();
|
|
50
|
+
try {
|
|
51
|
+
const data = await client.sdk.segmentService.getSegment({
|
|
52
|
+
listId: detectedListId,
|
|
53
|
+
segmentId: parseInt(segmentId)
|
|
54
|
+
});
|
|
55
|
+
spinner.stop();
|
|
56
|
+
formatter.output(data);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
spinner.stop();
|
|
60
|
+
formatter.error(error.message);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// Create segment
|
|
65
|
+
segments
|
|
66
|
+
.command('create [list-id]')
|
|
67
|
+
.description('Create a new segment (auto-detects if only one list exists)')
|
|
68
|
+
.requiredOption('-n, --name <name>', 'Segment name')
|
|
69
|
+
.option('-c, --conditions <json>', 'Segment conditions as JSON')
|
|
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
|
+
}
|
|
76
|
+
const spinner = ora('Creating segment...').start();
|
|
77
|
+
try {
|
|
78
|
+
const payload = {
|
|
79
|
+
name: options.name
|
|
80
|
+
};
|
|
81
|
+
if (options.conditions) {
|
|
82
|
+
payload.conditions = JSON.parse(options.conditions);
|
|
83
|
+
}
|
|
84
|
+
const data = await client.sdk.segmentService.createSegment({
|
|
85
|
+
listId: detectedListId,
|
|
86
|
+
requestBody: payload
|
|
87
|
+
});
|
|
88
|
+
spinner.stop();
|
|
89
|
+
formatter.success(`Segment created: ${data.id}`);
|
|
90
|
+
formatter.output(data);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
spinner.stop();
|
|
94
|
+
formatter.error(error.message);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// Update segment
|
|
99
|
+
segments
|
|
100
|
+
.command('update [list-id] <segment-id>')
|
|
101
|
+
.description('Update a segment (auto-detects if only one list exists)')
|
|
102
|
+
.option('-n, --name <name>', 'Segment name')
|
|
103
|
+
.option('-c, --conditions <json>', 'Segment conditions as JSON')
|
|
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
|
+
}
|
|
110
|
+
const spinner = ora(`Updating segment ${segmentId}...`).start();
|
|
111
|
+
try {
|
|
112
|
+
const payload = {};
|
|
113
|
+
if (options.name)
|
|
114
|
+
payload.name = options.name;
|
|
115
|
+
if (options.conditions) {
|
|
116
|
+
payload.conditions = JSON.parse(options.conditions);
|
|
117
|
+
}
|
|
118
|
+
const data = await client.sdk.segmentService.patchSegment({
|
|
119
|
+
listId: detectedListId,
|
|
120
|
+
segmentId: parseInt(segmentId),
|
|
121
|
+
requestBody: payload
|
|
122
|
+
});
|
|
123
|
+
spinner.stop();
|
|
124
|
+
formatter.success(`Segment ${segmentId} updated`);
|
|
125
|
+
formatter.output(data);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
spinner.stop();
|
|
129
|
+
formatter.error(error.message);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
// Delete segment
|
|
134
|
+
segments
|
|
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')
|
|
138
|
+
.action(async (listId, segmentId, options) => {
|
|
139
|
+
// Auto-detect list ID if not provided
|
|
140
|
+
const detectedListId = await autoDetectList(client, formatter, listId, { useCache: true });
|
|
141
|
+
if (!detectedListId) {
|
|
142
|
+
process.exit(1);
|
|
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
|
+
}
|
|
154
|
+
const spinner = ora(`Deleting segment ${segmentId}...`).start();
|
|
155
|
+
try {
|
|
156
|
+
await client.sdk.segmentService.deleteSegment({
|
|
157
|
+
listId: detectedListId,
|
|
158
|
+
segmentId: parseInt(segmentId)
|
|
159
|
+
});
|
|
160
|
+
spinner.stop();
|
|
161
|
+
formatter.success(`Segment ${segmentId} deleted`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
spinner.stop();
|
|
165
|
+
formatter.error(error.message);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// List segment contacts
|
|
170
|
+
segments
|
|
171
|
+
.command('contacts [list-id] <segment-id>')
|
|
172
|
+
.description('List contacts in a segment (auto-detects if only one list exists)')
|
|
173
|
+
.option('-l, --limit <number>', 'Limit number of results')
|
|
174
|
+
.option('-p, --page <number>', 'Page number')
|
|
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
|
+
}
|
|
181
|
+
const spinner = ora('Fetching segment contacts...').start();
|
|
182
|
+
try {
|
|
183
|
+
const params = {
|
|
184
|
+
listId: detectedListId,
|
|
185
|
+
segmentId: parseInt(segmentId)
|
|
186
|
+
};
|
|
187
|
+
if (options.limit)
|
|
188
|
+
params.per_page = parseInt(options.limit);
|
|
189
|
+
if (options.page)
|
|
190
|
+
params.page = parseInt(options.page);
|
|
191
|
+
const data = await client.sdk.contactService.listContactsOfSegment(params);
|
|
192
|
+
spinner.stop();
|
|
193
|
+
formatter.output(data);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
spinner.stop();
|
|
197
|
+
formatter.error(error.message);
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
return segments;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=segments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segments.js","sourceRoot":"","sources":["../../src/commands/segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CAAC,MAAsB,EAAE,SAA0B;IACtF,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;SACrC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAE1C,gBAAgB;IAChB,QAAQ;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,oEAAoE,CAAC;SACjF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAChC,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAQ;gBAClB,MAAM,EAAE,cAAc;aACvB,CAAC;YACF,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,QAAQ;SACL,OAAO,CAAC,4BAA4B,CAAC;SACrC,WAAW,CAAC,4DAA4D,CAAC;SACzE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;QAClC,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC;gBACtD,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;aAC/B,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,6DAA6D,CAAC;SAC1E,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC;SACnD,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAChC,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ;gBACnB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;YACF,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC;gBACzD,MAAM,EAAE,cAAc;gBACtB,WAAW,EAAE,OAAO;aACrB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,+BAA+B,CAAC;SACxC,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,mBAAmB,EAAE,cAAc,CAAC;SAC3C,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3C,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC9C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC;gBACxD,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;gBAC9B,WAAW,EAAE,OAAO;aACrB,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,OAAO,CAAC,WAAW,SAAS,UAAU,CAAC,CAAC;YAClD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,+BAA+B,CAAC;SACxC,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3C,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE;gBAC1D,qCAAqC;aACtC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,SAAS,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC;gBAC5C,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;aAC/B,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,OAAO,CAAC,WAAW,SAAS,UAAU,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,wBAAwB;IACxB,QAAQ;SACL,OAAO,CAAC,iCAAiC,CAAC;SAC1C,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAC3C,sCAAsC;QACtC,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAQ;gBAClB,MAAM,EAAE,cAAc;gBACtB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;aAC/B,CAAC;YACF,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"senders.d.ts","sourceRoot":"","sources":["../../src/commands/senders.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;
|
|
1
|
+
{"version":3,"file":"senders.d.ts","sourceRoot":"","sources":["../../src/commands/senders.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,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAmMhG"}
|
package/dist/commands/senders.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
+
import { displayError, validate } from '../utils/errors.js';
|
|
4
|
+
import { confirmDelete } from '../utils/confirm.js';
|
|
3
5
|
export function createSendersCommand(client, formatter) {
|
|
4
6
|
const senders = new Command('senders')
|
|
5
7
|
.description('Manage email senders');
|
|
@@ -55,6 +57,12 @@ export function createSendersCommand(client, formatter) {
|
|
|
55
57
|
.requiredOption('-n, --name <name>', 'Sender name')
|
|
56
58
|
.requiredOption('-e, --email <email>', 'Sender email')
|
|
57
59
|
.action(async (options) => {
|
|
60
|
+
// Validate email
|
|
61
|
+
const emailValidation = validate.email(options.email);
|
|
62
|
+
if (!emailValidation.valid) {
|
|
63
|
+
formatter.error(emailValidation.error);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
58
66
|
const spinner = ora('Creating sender...').start();
|
|
59
67
|
try {
|
|
60
68
|
const data = await client.sdk.senderService.createSender({
|
|
@@ -70,7 +78,11 @@ export function createSendersCommand(client, formatter) {
|
|
|
70
78
|
}
|
|
71
79
|
catch (error) {
|
|
72
80
|
spinner.stop();
|
|
73
|
-
|
|
81
|
+
displayError(error, {
|
|
82
|
+
command: 'senders create',
|
|
83
|
+
resource: 'sender',
|
|
84
|
+
operation: 'create'
|
|
85
|
+
});
|
|
74
86
|
process.exit(1);
|
|
75
87
|
}
|
|
76
88
|
});
|
|
@@ -81,6 +93,14 @@ export function createSendersCommand(client, formatter) {
|
|
|
81
93
|
.option('-n, --name <name>', 'Sender name')
|
|
82
94
|
.option('-e, --email <email>', 'Sender email')
|
|
83
95
|
.action(async (id, options) => {
|
|
96
|
+
// Validate email if provided
|
|
97
|
+
if (options.email) {
|
|
98
|
+
const emailValidation = validate.email(options.email);
|
|
99
|
+
if (!emailValidation.valid) {
|
|
100
|
+
formatter.error(emailValidation.error);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
84
104
|
const spinner = ora(`Updating sender ${id}...`).start();
|
|
85
105
|
try {
|
|
86
106
|
const payload = {};
|
|
@@ -98,7 +118,12 @@ export function createSendersCommand(client, formatter) {
|
|
|
98
118
|
}
|
|
99
119
|
catch (error) {
|
|
100
120
|
spinner.stop();
|
|
101
|
-
|
|
121
|
+
displayError(error, {
|
|
122
|
+
command: 'senders update',
|
|
123
|
+
resource: 'sender',
|
|
124
|
+
resourceId: id,
|
|
125
|
+
operation: 'update'
|
|
126
|
+
});
|
|
102
127
|
process.exit(1);
|
|
103
128
|
}
|
|
104
129
|
});
|
|
@@ -106,11 +131,17 @@ export function createSendersCommand(client, formatter) {
|
|
|
106
131
|
senders
|
|
107
132
|
.command('delete <id>')
|
|
108
133
|
.description('Delete a sender')
|
|
109
|
-
.option('-f, --force', 'Skip confirmation')
|
|
134
|
+
.option('-f, --force', 'Skip confirmation prompt')
|
|
110
135
|
.action(async (id, options) => {
|
|
136
|
+
// Interactive confirmation (unless --force is used)
|
|
111
137
|
if (!options.force) {
|
|
112
|
-
|
|
113
|
-
|
|
138
|
+
const confirmed = await confirmDelete('sender', id, [
|
|
139
|
+
'Sender will be permanently deleted'
|
|
140
|
+
]);
|
|
141
|
+
if (!confirmed) {
|
|
142
|
+
formatter.info('Deletion cancelled');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
114
145
|
}
|
|
115
146
|
const spinner = ora(`Deleting sender ${id}...`).start();
|
|
116
147
|
try {
|