@cakemail-org/cakemail-cli 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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +460 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +66 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client.d.ts +27 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +41 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/commands/campaigns.d.ts +5 -0
  12. package/dist/commands/campaigns.d.ts.map +1 -0
  13. package/dist/commands/campaigns.js +334 -0
  14. package/dist/commands/campaigns.js.map +1 -0
  15. package/dist/commands/contacts.d.ts +5 -0
  16. package/dist/commands/contacts.d.ts.map +1 -0
  17. package/dist/commands/contacts.js +164 -0
  18. package/dist/commands/contacts.js.map +1 -0
  19. package/dist/commands/emails.d.ts +5 -0
  20. package/dist/commands/emails.d.ts.map +1 -0
  21. package/dist/commands/emails.js +140 -0
  22. package/dist/commands/emails.js.map +1 -0
  23. package/dist/commands/lists.d.ts +5 -0
  24. package/dist/commands/lists.d.ts.map +1 -0
  25. package/dist/commands/lists.js +102 -0
  26. package/dist/commands/lists.js.map +1 -0
  27. package/dist/commands/senders.d.ts +5 -0
  28. package/dist/commands/senders.d.ts.map +1 -0
  29. package/dist/commands/senders.js +168 -0
  30. package/dist/commands/senders.js.map +1 -0
  31. package/dist/commands/templates.d.ts +5 -0
  32. package/dist/commands/templates.d.ts.map +1 -0
  33. package/dist/commands/templates.js +198 -0
  34. package/dist/commands/templates.js.map +1 -0
  35. package/dist/commands/webhooks.d.ts +5 -0
  36. package/dist/commands/webhooks.d.ts.map +1 -0
  37. package/dist/commands/webhooks.js +144 -0
  38. package/dist/commands/webhooks.js.map +1 -0
  39. package/dist/utils/config.d.ts +7 -0
  40. package/dist/utils/config.d.ts.map +1 -0
  41. package/dist/utils/config.js +21 -0
  42. package/dist/utils/config.js.map +1 -0
  43. package/dist/utils/output.d.ts +16 -0
  44. package/dist/utils/output.d.ts.map +1 -0
  45. package/dist/utils/output.js +197 -0
  46. package/dist/utils/output.js.map +1 -0
  47. package/package.json +57 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 François Lane
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,460 @@
1
+ # Cakemail CLI
2
+
3
+ Official command-line interface for the Cakemail API.
4
+
5
+ Built on top of the official [@cakemail-org/cakemail-sdk](https://www.npmjs.com/package/@cakemail-org/cakemail-sdk) with 100% API coverage (232 operations).
6
+
7
+ ## Installation
8
+
9
+ ### via Homebrew (macOS/Linux)
10
+
11
+ ```bash
12
+ brew tap cakemail/cakemail
13
+ brew install cakemail-cli
14
+ ```
15
+
16
+ ### via npm
17
+
18
+ ```bash
19
+ npm install -g @cakemail-org/cakemail-cli
20
+ ```
21
+
22
+ ### via npx (no installation)
23
+
24
+ ```bash
25
+ npx @cakemail-org/cakemail-cli --help
26
+ ```
27
+
28
+ ## Configuration
29
+
30
+ Set your Cakemail credentials using environment variables:
31
+
32
+ ```bash
33
+ # Option 1: Use access token
34
+ export CAKEMAIL_ACCESS_TOKEN=your_access_token
35
+
36
+ # Option 2: Use email/password
37
+ export CAKEMAIL_EMAIL=your@email.com
38
+ export CAKEMAIL_PASSWORD=your_password
39
+
40
+ # Optional: Set default output format
41
+ export CAKEMAIL_OUTPUT_FORMAT=compact # json, table, or compact
42
+ ```
43
+
44
+ Or create a `.env` file in your project directory:
45
+
46
+ ```bash
47
+ # Authentication (choose one method)
48
+ CAKEMAIL_EMAIL=your@email.com
49
+ CAKEMAIL_PASSWORD=your_password
50
+ # OR
51
+ # CAKEMAIL_ACCESS_TOKEN=your_access_token
52
+
53
+ # Optional: Default output format (json, table, compact)
54
+ CAKEMAIL_OUTPUT_FORMAT=compact
55
+
56
+ # Optional: API base URL (defaults to https://api.cakemail.dev)
57
+ # CAKEMAIL_API_BASE=https://api.cakemail.dev
58
+ ```
59
+
60
+ ## Usage
61
+
62
+ ```bash
63
+ cakemail [options] <command>
64
+ ```
65
+
66
+ ### Global Options
67
+
68
+ - `-f, --format <format>` - Output format: `json`, `table`, or `compact` (default: `json`)
69
+ - `--access-token <token>` - Override access token from environment
70
+ - `--email <email>` - Override email from environment
71
+ - `--password <password>` - Override password from environment
72
+
73
+ ### Output Formats
74
+
75
+ The CLI supports three output formats. You can set a default in your `.env` file with `CAKEMAIL_OUTPUT_FORMAT` or override it per-command with the `-f` flag.
76
+
77
+ **Priority:** CLI flag (`-f`) > Environment variable (`CAKEMAIL_OUTPUT_FORMAT`) > Default (`json`)
78
+
79
+ **JSON** (default) - Full structured data output:
80
+ ```bash
81
+ cakemail campaigns list
82
+ cakemail -f json campaigns list
83
+ ```
84
+
85
+ **Table** - Formatted table view with key fields:
86
+ ```bash
87
+ cakemail -f table campaigns list
88
+ cakemail -f table templates list
89
+ ```
90
+
91
+ **Compact** - One-line summary per item:
92
+ ```bash
93
+ cakemail -f compact lists list
94
+ cakemail -f compact contacts list 123
95
+ ```
96
+
97
+ **Set a default format:**
98
+ ```bash
99
+ # In your .env file
100
+ CAKEMAIL_OUTPUT_FORMAT=compact
101
+
102
+ # Now all commands use compact by default
103
+ cakemail campaigns list # Uses compact
104
+ cakemail -f json campaigns list # Override to JSON
105
+ ```
106
+
107
+ ### Commands
108
+
109
+ #### Email API v2
110
+
111
+ ```bash
112
+ # Send an email with HTML content
113
+ cakemail emails send -t recipient@example.com -s "Subject" --html "<h1>Hello</h1>"
114
+
115
+ # Send an email with HTML file
116
+ cakemail emails send -t recipient@example.com -s "Subject" --html-file email.html
117
+
118
+ # Send an email using a template
119
+ cakemail emails send -t recipient@example.com -s "Subject" --template-id 123 --params '{"name":"John"}'
120
+
121
+ # Send with custom sender
122
+ cakemail emails send \
123
+ -t recipient@example.com \
124
+ -s "Subject" \
125
+ --html "<p>Content</p>" \
126
+ --from-email sender@example.com \
127
+ --from-name "John Doe" \
128
+ --reply-to reply@example.com
129
+
130
+ # Send with tracking and tags
131
+ cakemail emails send \
132
+ -t recipient@example.com \
133
+ -s "Subject" \
134
+ --html "<p>Content</p>" \
135
+ --tracking \
136
+ --tags "newsletter,promo"
137
+
138
+ # Get email details
139
+ cakemail emails get <email-id>
140
+
141
+ # Render email HTML
142
+ cakemail emails render <email-id>
143
+ cakemail emails render <email-id> --as-submitted --tracking
144
+ ```
145
+
146
+ #### Templates
147
+
148
+ ```bash
149
+ # List all templates
150
+ cakemail templates list [options]
151
+ -l, --limit <number> Limit results
152
+ -p, --page <number> Page number
153
+ -f, --filter <filter> Filter (e.g., "name==Newsletter")
154
+ -s, --sort <sort> Sort (e.g., "+name", "-created_on")
155
+
156
+ # Get template details
157
+ cakemail templates get <id>
158
+
159
+ # Create a template
160
+ cakemail templates create -n "My Template" --html-file template.html
161
+ -n, --name <name> Template name (required)
162
+ --html <html> HTML content
163
+ --html-file <path> Path to HTML file
164
+ --text <text> Plain text content
165
+ --text-file <path> Path to text file
166
+ --subject <subject> Default email subject
167
+ --tags <tags> Comma-separated tags
168
+
169
+ # Update a template
170
+ cakemail templates update <id> [options]
171
+ -n, --name <name> Template name
172
+ --html <html> HTML content
173
+ --html-file <path> Path to HTML file
174
+ --text <text> Plain text content
175
+ --text-file <path> Path to text file
176
+ --subject <subject> Default email subject
177
+ --tags <tags> Comma-separated tags
178
+
179
+ # Render a template
180
+ cakemail templates render <id>
181
+
182
+ # Delete template
183
+ cakemail templates delete <id> --force
184
+ ```
185
+
186
+ #### Campaigns
187
+
188
+ ```bash
189
+ # List all campaigns
190
+ cakemail campaigns list [options]
191
+ -s, --status <status> Filter by status
192
+ -l, --limit <number> Limit results
193
+ -p, --page <number> Page number
194
+ --sort <sort> Sort (e.g., "+name", "-created_on", "+scheduled_for")
195
+ --filter <filter> Filter (e.g., "status==delivered;name==Newsletter")
196
+
197
+ # Get campaign details
198
+ cakemail campaigns get <id>
199
+
200
+ # Create a campaign
201
+ cakemail campaigns create -n "My Campaign" -l <list-id> [options]
202
+ -n, --name <name> Campaign name (required)
203
+ -l, --list-id <id> List ID (required)
204
+ -s, --sender-id <id> Sender ID
205
+ -t, --template-id <id> Template ID
206
+ --subject <subject> Email subject
207
+
208
+ # Update a campaign
209
+ cakemail campaigns update <id> [options]
210
+ -n, --name <name> Campaign name
211
+ -l, --list-id <id> List ID
212
+ -s, --sender-id <id> Sender ID
213
+ -t, --template-id <id> Template ID
214
+ --subject <subject> Email subject
215
+
216
+ # Schedule a campaign
217
+ cakemail campaigns schedule <id> -d <datetime>
218
+ -d, --date <datetime> Schedule datetime (ISO 8601)
219
+
220
+ # Reschedule a campaign
221
+ cakemail campaigns reschedule <id> -d <datetime>
222
+ -d, --date <datetime> New schedule datetime (ISO 8601)
223
+
224
+ # Unschedule a campaign
225
+ cakemail campaigns unschedule <id>
226
+
227
+ # Send test email
228
+ cakemail campaigns test <id> -e <email>
229
+ -e, --email <email> Recipient email
230
+
231
+ # Archive/Unarchive campaign
232
+ cakemail campaigns archive <id>
233
+ cakemail campaigns unarchive <id>
234
+
235
+ # Cancel a scheduled campaign
236
+ cakemail campaigns cancel <id>
237
+
238
+ # Suspend/Resume campaign
239
+ cakemail campaigns suspend <id>
240
+ cakemail campaigns resume <id>
241
+
242
+ # List campaign links
243
+ cakemail campaigns links <id> [options]
244
+ -l, --limit <number> Limit results
245
+ -p, --page <number> Page number
246
+
247
+ # Delete campaign
248
+ cakemail campaigns delete <id> --force
249
+ ```
250
+
251
+ #### Lists
252
+
253
+ ```bash
254
+ # List all contact lists
255
+ cakemail lists list [options]
256
+ -l, --limit <number> Limit results
257
+ -p, --page <number> Page number
258
+ --sort <sort> Sort (e.g., "+name", "-created_on")
259
+ --filter <filter> Filter (e.g., "status==active;name==Newsletter")
260
+
261
+ # Get list details
262
+ cakemail lists get <id>
263
+
264
+ # Create a list
265
+ cakemail lists create -n "My List" [options]
266
+ -n, --name <name> List name (required)
267
+ -l, --language <lang> Language code (e.g., en, fr)
268
+
269
+ # Delete list
270
+ cakemail lists delete <id> --force
271
+ ```
272
+
273
+ #### Contacts
274
+
275
+ ```bash
276
+ # List contacts in a list
277
+ cakemail contacts list <list-id> [options]
278
+ -l, --limit <number> Limit results
279
+ -p, --page <number> Page number
280
+ -q, --query <query> Search query
281
+ --sort <sort> Sort (e.g., "+email", "-subscribed_on", "+status")
282
+ --filter <filter> Filter (e.g., "status==active;email==user@example.com")
283
+
284
+ # Get contact details
285
+ cakemail contacts get <list-id> <contact-id>
286
+
287
+ # Add a contact
288
+ cakemail contacts add <list-id> -e <email> [options]
289
+ -e, --email <email> Contact email (required)
290
+ -f, --first-name <name> First name
291
+ -l, --last-name <name> Last name
292
+ -d, --data <json> Custom attributes as JSON
293
+
294
+ # Update contact
295
+ cakemail contacts update <list-id> <contact-id> [options]
296
+ -e, --email <email> Contact email
297
+ -f, --first-name <name> First name
298
+ -l, --last-name <name> Last name
299
+ -d, --data <json> Custom attributes as JSON
300
+
301
+ # Delete contact
302
+ cakemail contacts delete <list-id> <contact-id> --force
303
+
304
+ # Unsubscribe contact
305
+ cakemail contacts unsubscribe <list-id> <contact-id>
306
+ ```
307
+
308
+ #### Senders
309
+
310
+ ```bash
311
+ # List all senders
312
+ cakemail senders list [options]
313
+ -l, --limit <number> Limit results
314
+ -p, --page <number> Page number
315
+ --sort <sort> Sort (e.g., "+name", "+email", "-confirmed")
316
+ --filter <filter> Filter (e.g., "confirmed==true;email==sender@example.com")
317
+
318
+ # Get sender details
319
+ cakemail senders get <id>
320
+
321
+ # Create a sender
322
+ cakemail senders create -n "John Doe" -e "john@example.com"
323
+ -n, --name <name> Sender name (required)
324
+ -e, --email <email> Sender email (required)
325
+
326
+ # Update a sender
327
+ cakemail senders update <id> [options]
328
+ -n, --name <name> Sender name
329
+ -e, --email <email> Sender email
330
+
331
+ # Confirm sender (using confirmation ID from email)
332
+ cakemail senders confirm <confirmation-id>
333
+
334
+ # Resend confirmation email
335
+ cakemail senders resend-confirmation <id>
336
+
337
+ # Delete sender
338
+ cakemail senders delete <id> --force
339
+ ```
340
+
341
+ #### Webhooks
342
+
343
+ ```bash
344
+ # List all webhooks
345
+ cakemail webhooks list [options]
346
+ -l, --limit <number> Limit results
347
+ -p, --page <number> Page number
348
+
349
+ # Get webhook details
350
+ cakemail webhooks get <id>
351
+
352
+ # Create a webhook
353
+ cakemail webhooks create -u <url> -e <events> [options]
354
+ -u, --url <url> Webhook URL (required)
355
+ -e, --events <events> Comma-separated events (required)
356
+ -n, --name <name> Webhook name
357
+ -s, --secret <secret> Webhook secret for verification
358
+
359
+ # Update a webhook
360
+ cakemail webhooks update <id> [options]
361
+ -u, --url <url> Webhook URL
362
+ -e, --events <events> Comma-separated events
363
+ -n, --name <name> Webhook name
364
+ -s, --secret <secret> Webhook secret
365
+
366
+ # Archive a webhook
367
+ cakemail webhooks archive <id>
368
+
369
+ # Unarchive a webhook
370
+ cakemail webhooks unarchive <id>
371
+ ```
372
+
373
+ ## Examples
374
+
375
+ ```bash
376
+ # Create a template
377
+ cakemail templates create \
378
+ -n "Newsletter Template" \
379
+ --html-file templates/newsletter.html \
380
+ --subject "Weekly Newsletter" \
381
+ --tags "newsletter,weekly"
382
+
383
+ # Send a transactional email
384
+ cakemail emails send \
385
+ -t customer@example.com \
386
+ -s "Order Confirmation" \
387
+ --html-file templates/order-confirmation.html \
388
+ --from-email orders@myshop.com \
389
+ --from-name "My Shop" \
390
+ --tracking \
391
+ --tags "transactional,order"
392
+
393
+ # Manage campaign lifecycle
394
+ cakemail campaigns schedule 123 -d "2025-10-15T10:00:00Z"
395
+ cakemail campaigns suspend 123
396
+ cakemail campaigns resume 123
397
+ cakemail campaigns cancel 123
398
+
399
+ # List campaigns in table format
400
+ cakemail -f table campaigns list
401
+
402
+ # List campaigns in compact format
403
+ cakemail -f compact campaigns list
404
+
405
+ # Sort and filter campaigns
406
+ cakemail campaigns list --sort "-created_on" --filter "status==delivered"
407
+ cakemail campaigns list --sort "+name"
408
+
409
+ # Sort and filter lists
410
+ cakemail lists list --sort "+name" --filter "status==active"
411
+
412
+ # Sort and filter contacts
413
+ cakemail contacts list 123 --sort "-subscribed_on" --filter "status==active"
414
+
415
+ # Sort and filter senders
416
+ cakemail senders list --sort "+email" --filter "confirmed==true"
417
+
418
+ # Create a new list
419
+ cakemail lists create -n "Newsletter Subscribers" -l en
420
+
421
+ # Add a contact with custom attributes
422
+ cakemail contacts add 123 -e "user@example.com" -f "John" -l "Doe" -d '{"company":"Acme"}'
423
+
424
+ # Schedule a campaign
425
+ cakemail campaigns schedule 456 -d "2025-10-15T10:00:00Z"
426
+
427
+ # Send a test campaign
428
+ cakemail campaigns test 456 -e "test@example.com"
429
+
430
+ # Create a webhook for email events
431
+ cakemail webhooks create \
432
+ -u "https://example.com/webhook" \
433
+ -e "email.sent,email.opened,email.clicked" \
434
+ -n "My Webhook" \
435
+ -s "my_secret_key"
436
+ ```
437
+
438
+ ## Development
439
+
440
+ ```bash
441
+ # Install dependencies
442
+ npm install
443
+
444
+ # Build
445
+ npm run build
446
+
447
+ # Run locally
448
+ npm start -- campaigns list
449
+
450
+ # or use node directly
451
+ node dist/cli.js campaigns list
452
+ ```
453
+
454
+ ## License
455
+
456
+ MIT
457
+
458
+ ## Support
459
+
460
+ For issues and questions, please visit: https://github.com/cakemail/cli/issues
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { CakemailClient } from './client.js';
4
+ import { OutputFormatter } from './utils/output.js';
5
+ import { getConfig } from './utils/config.js';
6
+ import { createCampaignsCommand } from './commands/campaigns.js';
7
+ import { createListsCommand } from './commands/lists.js';
8
+ import { createContactsCommand } from './commands/contacts.js';
9
+ import { createSendersCommand } from './commands/senders.js';
10
+ import { createWebhooksCommand } from './commands/webhooks.js';
11
+ import { createEmailsCommand } from './commands/emails.js';
12
+ import { createTemplatesCommand } from './commands/templates.js';
13
+ import chalk from 'chalk';
14
+ async function main() {
15
+ const program = new Command();
16
+ program
17
+ .name('cakemail')
18
+ .description('Official Cakemail CLI - Command-line interface for the Cakemail API')
19
+ .version('1.2.0')
20
+ .option('-f, --format <format>', 'Output format (json|table|compact)')
21
+ .option('--access-token <token>', 'Cakemail access token (overrides env)')
22
+ .option('--email <email>', 'Cakemail account email (overrides env)')
23
+ .option('--password <password>', 'Cakemail account password (overrides env)');
24
+ try {
25
+ // Get config (don't require credentials for help/version)
26
+ const config = getConfig(false);
27
+ // Create client and formatter with lazy format evaluation
28
+ // Client will fail on first API call if credentials are missing
29
+ const client = new CakemailClient(config);
30
+ const formatter = new OutputFormatter(() => {
31
+ const opts = program.opts();
32
+ // Override config with CLI options
33
+ if (opts.accessToken)
34
+ config.accessToken = opts.accessToken;
35
+ if (opts.email)
36
+ config.email = opts.email;
37
+ if (opts.password)
38
+ config.password = opts.password;
39
+ // Priority: CLI flag > env var > default
40
+ return opts.format || config.outputFormat || 'json';
41
+ });
42
+ // Add commands
43
+ program.addCommand(createCampaignsCommand(client, formatter));
44
+ program.addCommand(createListsCommand(client, formatter));
45
+ program.addCommand(createContactsCommand(client, formatter));
46
+ program.addCommand(createSendersCommand(client, formatter));
47
+ program.addCommand(createWebhooksCommand(client, formatter));
48
+ program.addCommand(createEmailsCommand(client, formatter));
49
+ program.addCommand(createTemplatesCommand(client, formatter));
50
+ // Parse
51
+ await program.parseAsync(process.argv);
52
+ }
53
+ catch (error) {
54
+ console.error(chalk.red('Error:'), error.message);
55
+ if (error.message.includes('Missing credentials')) {
56
+ console.error(chalk.yellow('\nTip:'), 'Set credentials in environment variables or .env file:');
57
+ console.error(' CAKEMAIL_ACCESS_TOKEN=your_access_token');
58
+ console.error(' or');
59
+ console.error(' CAKEMAIL_EMAIL=your@email.com');
60
+ console.error(' CAKEMAIL_PASSWORD=your_password');
61
+ }
62
+ process.exit(1);
63
+ }
64
+ }
65
+ main();
66
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { CakemailClient as SDK } from '@cakemail-org/cakemail-sdk';
2
+ export interface CakemailConfig {
3
+ accessToken?: string;
4
+ email?: string;
5
+ password?: string;
6
+ baseURL?: string;
7
+ }
8
+ /**
9
+ * Wrapper around the official Cakemail SDK
10
+ * Provides backward compatibility with our CLI while using the SDK
11
+ */
12
+ export declare class CakemailClient {
13
+ sdk: SDK;
14
+ private config;
15
+ constructor(config: CakemailConfig);
16
+ /**
17
+ * Legacy method for backward compatibility with our commands
18
+ * Routes to appropriate SDK resource methods
19
+ */
20
+ get<T = any>(url: string, config?: {
21
+ params?: any;
22
+ }): Promise<T>;
23
+ post<T = any>(url: string, data?: any): Promise<T>;
24
+ patch<T = any>(url: string, data?: any): Promise<T>;
25
+ delete<T = any>(url: string): Promise<T>;
26
+ }
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,GAAG,EAAwB,MAAM,4BAA4B,CAAC;AAEzF,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAClB,GAAG,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,cAAc;IAiBlC;;;OAGG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAMhE,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlD,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAInD,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAG/C"}
package/dist/client.js ADDED
@@ -0,0 +1,41 @@
1
+ import { CakemailClient as SDK } from '@cakemail-org/cakemail-sdk';
2
+ /**
3
+ * Wrapper around the official Cakemail SDK
4
+ * Provides backward compatibility with our CLI while using the SDK
5
+ */
6
+ export class CakemailClient {
7
+ sdk;
8
+ config;
9
+ constructor(config) {
10
+ this.config = config;
11
+ // The SDK requires email and password
12
+ if (!config.email || !config.password) {
13
+ throw new Error('Email and password are required for SDK authentication');
14
+ }
15
+ const sdkConfig = {
16
+ email: config.email,
17
+ password: config.password,
18
+ baseURL: config.baseURL || process.env.CAKEMAIL_API_BASE || 'https://api.cakemail.dev',
19
+ };
20
+ this.sdk = new SDK(sdkConfig);
21
+ }
22
+ /**
23
+ * Legacy method for backward compatibility with our commands
24
+ * Routes to appropriate SDK resource methods
25
+ */
26
+ async get(url, config) {
27
+ // The SDK handles all requests through resources
28
+ // This is for backward compatibility - we'll migrate commands to use SDK resources directly
29
+ throw new Error('Direct HTTP methods deprecated - use SDK resources (client.sdk.campaigns, client.sdk.lists, etc.)');
30
+ }
31
+ async post(url, data) {
32
+ throw new Error('Direct HTTP methods deprecated - use SDK resources (client.sdk.campaigns, client.sdk.lists, etc.)');
33
+ }
34
+ async patch(url, data) {
35
+ throw new Error('Direct HTTP methods deprecated - use SDK resources (client.sdk.campaigns, client.sdk.lists, etc.)');
36
+ }
37
+ async delete(url) {
38
+ throw new Error('Direct HTTP methods deprecated - use SDK resources (client.sdk.campaigns, client.sdk.lists, etc.)');
39
+ }
40
+ }
41
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,GAAG,EAAwB,MAAM,4BAA4B,CAAC;AASzF;;;GAGG;AACH,MAAM,OAAO,cAAc;IAClB,GAAG,CAAM;IACR,MAAM,CAAiB;IAE/B,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,sCAAsC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAyB;YACtC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,0BAA0B;SACvF,CAAC;QAEF,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAU,GAAW,EAAE,MAAyB;QACvD,iDAAiD;QACjD,4FAA4F;QAC5F,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;IAED,KAAK,CAAC,IAAI,CAAU,GAAW,EAAE,IAAU;QACzC,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;IAED,KAAK,CAAC,KAAK,CAAU,GAAW,EAAE,IAAU;QAC1C,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;IAED,KAAK,CAAC,MAAM,CAAU,GAAW;QAC/B,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACvH,CAAC;CACF"}
@@ -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 createCampaignsCommand(client: CakemailClient, formatter: OutputFormatter): Command;
5
+ //# sourceMappingURL=campaigns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/commands/campaigns.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,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAkUlG"}