@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.
- package/README.md +312 -12
- package/dist/cli.js +59 -8
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +15 -7
- 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.map +1 -1
- package/dist/commands/attributes.js +43 -15
- package/dist/commands/attributes.js.map +1 -1
- package/dist/commands/campaigns.d.ts.map +1 -1
- package/dist/commands/campaigns.js +255 -26
- 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 +294 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +321 -47
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/interests.d.ts +5 -0
- package/dist/commands/interests.d.ts.map +1 -0
- package/dist/commands/interests.js +172 -0
- package/dist/commands/interests.js.map +1 -0
- package/dist/commands/lists.d.ts.map +1 -1
- package/dist/commands/lists.js +165 -30
- package/dist/commands/lists.js.map +1 -1
- package/dist/commands/logs.d.ts +5 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +237 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/reports.d.ts.map +1 -1
- package/dist/commands/reports.js +90 -13
- package/dist/commands/reports.js.map +1 -1
- package/dist/commands/segments.d.ts.map +1 -1
- package/dist/commands/segments.js +59 -21
- package/dist/commands/segments.js.map +1 -1
- package/dist/commands/senders.d.ts.map +1 -1
- package/dist/commands/senders.js +46 -12
- package/dist/commands/senders.js.map +1 -1
- package/dist/commands/suppressed.d.ts.map +1 -1
- package/dist/commands/suppressed.js +20 -6
- package/dist/commands/suppressed.js.map +1 -1
- package/dist/commands/tags.d.ts +5 -0
- package/dist/commands/tags.d.ts.map +1 -0
- package/dist/commands/tags.js +124 -0
- package/dist/commands/tags.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/commands/transactional-templates.d.ts +5 -0
- package/dist/commands/transactional-templates.d.ts.map +1 -0
- package/dist/commands/transactional-templates.js +354 -0
- package/dist/commands/transactional-templates.js.map +1 -0
- 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 +33 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +226 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/config-file.d.ts +99 -0
- package/dist/utils/config-file.d.ts.map +1 -0
- package/dist/utils/config-file.js +259 -0
- package/dist/utils/config-file.js.map +1 -0
- package/dist/utils/config.d.ts +13 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +82 -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/list-defaults.d.ts +33 -0
- package/dist/utils/list-defaults.d.ts.map +1 -0
- package/dist/utils/list-defaults.js +52 -0
- package/dist/utils/list-defaults.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 +407 -38
- 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 +19 -3
package/README.md
CHANGED
|
@@ -25,18 +25,54 @@ npm install -g @cakemail-org/cakemail-cli
|
|
|
25
25
|
npx @cakemail-org/cakemail-cli --help
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## Quick Start
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
No setup required! Just run any command and the CLI will guide you through authentication:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
cakemail campaigns list
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The CLI will prompt for your email and password, then save OAuth tokens to `~/.cakemail/config.json`.
|
|
37
|
+
|
|
38
|
+
**NEW in v1.7.0**: The CLI now uses OAuth token-based authentication. Your password is never stored - only secure access and refresh tokens are saved.
|
|
39
|
+
|
|
40
|
+
### Profile System (NEW in v1.5.0)
|
|
41
|
+
|
|
42
|
+
Choose a profile that matches your workflow:
|
|
43
|
+
|
|
44
|
+
- **Developer**: Fast, scriptable, no interruptions (JSON output, no prompts, no confirmations)
|
|
45
|
+
- **Marketer**: Guided, interactive, safe (Compact output, prompts, confirmations, tips)
|
|
46
|
+
- **Balanced**: Best of both worlds (Table output, auto-detect prompts, confirmations) - **Default**
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Switch profiles
|
|
50
|
+
cakemail config profile-set developer # For scripts and automation
|
|
51
|
+
cakemail config profile-set marketer # For exploratory work
|
|
52
|
+
cakemail config profile-set balanced # For general use
|
|
53
|
+
|
|
54
|
+
# Preview a profile before switching
|
|
55
|
+
cakemail config preview developer
|
|
56
|
+
|
|
57
|
+
# Override profile for one command
|
|
58
|
+
cakemail --profile developer campaigns list
|
|
59
|
+
|
|
60
|
+
# Disable all prompts for scripting
|
|
61
|
+
cakemail --batch campaigns create --name "Test" --list-id 123 --sender-id 456
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Manual Configuration (Optional)
|
|
35
65
|
|
|
36
|
-
|
|
66
|
+
You can also configure manually with environment variables or `.env` file:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Option 1: Use email/password
|
|
37
70
|
export CAKEMAIL_EMAIL=your@email.com
|
|
38
71
|
export CAKEMAIL_PASSWORD=your_password
|
|
39
72
|
|
|
73
|
+
# Option 2: Use access token
|
|
74
|
+
export CAKEMAIL_ACCESS_TOKEN=your_access_token
|
|
75
|
+
|
|
40
76
|
# Optional: Set default output format
|
|
41
77
|
export CAKEMAIL_OUTPUT_FORMAT=compact # json, table, or compact
|
|
42
78
|
```
|
|
@@ -66,9 +102,12 @@ cakemail [options] <command>
|
|
|
66
102
|
### Global Options
|
|
67
103
|
|
|
68
104
|
- `-f, --format <format>` - Output format: `json`, `table`, or `compact` (default: `json`)
|
|
105
|
+
- `--profile <type>` - Override profile for this command: `developer`, `marketer`, or `balanced`
|
|
106
|
+
- `--batch` - Run in batch/scripting mode (disable all interactive prompts)
|
|
69
107
|
- `--access-token <token>` - Override access token from environment
|
|
70
108
|
- `--email <email>` - Override email from environment
|
|
71
109
|
- `--password <password>` - Override password from environment
|
|
110
|
+
- `--account <id>` - Override account ID for this command
|
|
72
111
|
|
|
73
112
|
### Output Formats
|
|
74
113
|
|
|
@@ -106,6 +145,37 @@ cakemail -f json campaigns list # Override to JSON
|
|
|
106
145
|
|
|
107
146
|
### Commands
|
|
108
147
|
|
|
148
|
+
#### Profile Management (v1.5.0+) & Logout (NEW in v1.7.0)
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Show current profile and settings
|
|
152
|
+
cakemail config profile
|
|
153
|
+
|
|
154
|
+
# Switch to a different profile
|
|
155
|
+
cakemail config profile-set developer # Fast, scriptable
|
|
156
|
+
cakemail config profile-set marketer # Guided, interactive
|
|
157
|
+
cakemail config profile-set balanced # Balanced (default)
|
|
158
|
+
|
|
159
|
+
# Preview a profile without switching
|
|
160
|
+
cakemail config preview developer
|
|
161
|
+
cakemail config preview marketer
|
|
162
|
+
|
|
163
|
+
# Customize individual settings
|
|
164
|
+
cakemail config set output.format table
|
|
165
|
+
cakemail config set behavior.confirm_destructive false
|
|
166
|
+
cakemail config set display.date_format iso8601
|
|
167
|
+
|
|
168
|
+
# Reset all settings to profile defaults
|
|
169
|
+
cakemail config reset
|
|
170
|
+
|
|
171
|
+
# Show complete configuration
|
|
172
|
+
cakemail config show
|
|
173
|
+
|
|
174
|
+
# Logout and clear all credentials (NEW in v1.7.0)
|
|
175
|
+
cakemail logout # Interactive confirmation
|
|
176
|
+
cakemail logout --force # Skip confirmation
|
|
177
|
+
```
|
|
178
|
+
|
|
109
179
|
#### Email API v2
|
|
110
180
|
|
|
111
181
|
```bash
|
|
@@ -197,14 +267,21 @@ cakemail campaigns list [options]
|
|
|
197
267
|
# Get campaign details
|
|
198
268
|
cakemail campaigns get <id>
|
|
199
269
|
|
|
200
|
-
# Create a campaign
|
|
270
|
+
# Create a campaign (interactive in marketer/balanced profiles)
|
|
201
271
|
cakemail campaigns create -n "My Campaign" -l <list-id> [options]
|
|
202
|
-
-n, --name <name> Campaign name (
|
|
203
|
-
-l, --list-id <id> List ID (
|
|
204
|
-
-s, --sender-id <id> Sender ID
|
|
272
|
+
-n, --name <name> Campaign name (prompts if missing)
|
|
273
|
+
-l, --list-id <id> List ID (auto-detects or shows selection)
|
|
274
|
+
-s, --sender-id <id> Sender ID (auto-detects or shows selection)
|
|
205
275
|
-t, --template-id <id> Template ID
|
|
206
276
|
--subject <subject> Email subject
|
|
207
277
|
|
|
278
|
+
# Interactive example (marketer profile)
|
|
279
|
+
cakemail campaigns create
|
|
280
|
+
# Prompts: Campaign name? Select list? Select sender?
|
|
281
|
+
|
|
282
|
+
# Non-interactive example (developer profile or --batch)
|
|
283
|
+
cakemail campaigns create --name "Newsletter" --list-id 123 --sender-id 456
|
|
284
|
+
|
|
208
285
|
# Update a campaign
|
|
209
286
|
cakemail campaigns update <id> [options]
|
|
210
287
|
-n, --name <name> Campaign name
|
|
@@ -261,10 +338,17 @@ cakemail lists list [options]
|
|
|
261
338
|
# Get list details
|
|
262
339
|
cakemail lists get <id>
|
|
263
340
|
|
|
264
|
-
# Create a list
|
|
341
|
+
# Create a list (interactive in marketer/balanced profiles)
|
|
265
342
|
cakemail lists create -n "My List" [options]
|
|
266
|
-
-n, --name <name> List name (
|
|
267
|
-
-l, --language <lang> Language code (
|
|
343
|
+
-n, --name <name> List name (prompts if missing)
|
|
344
|
+
-l, --language <lang> Language code (optional, prompts in interactive mode)
|
|
345
|
+
|
|
346
|
+
# Interactive example
|
|
347
|
+
cakemail lists create
|
|
348
|
+
# Prompts: List name? Language code (optional)?
|
|
349
|
+
|
|
350
|
+
# Non-interactive example
|
|
351
|
+
cakemail lists create --name "Newsletter Subscribers" --language en
|
|
268
352
|
|
|
269
353
|
# Delete list
|
|
270
354
|
cakemail lists delete <id> --force
|
|
@@ -510,6 +594,165 @@ cakemail emails logs --tag newsletter --status delivered
|
|
|
510
594
|
cakemail emails tags
|
|
511
595
|
```
|
|
512
596
|
|
|
597
|
+
#### Tags (NEW in v1.6.0)
|
|
598
|
+
|
|
599
|
+
```bash
|
|
600
|
+
# List all tags
|
|
601
|
+
cakemail tags list <list-id>
|
|
602
|
+
-p, --page <number> Page number
|
|
603
|
+
--per-page <number> Results per page
|
|
604
|
+
--with-count Include total count
|
|
605
|
+
|
|
606
|
+
# Show tag details
|
|
607
|
+
cakemail tags show <list-id> <tag-id>
|
|
608
|
+
|
|
609
|
+
# Create a tag
|
|
610
|
+
cakemail tags create <list-id> -n "vip" -d "VIP customers"
|
|
611
|
+
-n, --name <name> Tag name (required)
|
|
612
|
+
-d, --description <text> Tag description
|
|
613
|
+
|
|
614
|
+
# Update a tag
|
|
615
|
+
cakemail tags update <list-id> <tag-id> -n "premium" -d "Premium members"
|
|
616
|
+
-n, --name <name> New tag name
|
|
617
|
+
-d, --description <text> New description
|
|
618
|
+
|
|
619
|
+
# Delete a tag
|
|
620
|
+
cakemail tags delete <list-id> <tag-id> --force
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
#### Interests (NEW in v1.6.0)
|
|
624
|
+
|
|
625
|
+
```bash
|
|
626
|
+
# List all interests
|
|
627
|
+
cakemail interests list <list-id>
|
|
628
|
+
-p, --page <number> Page number
|
|
629
|
+
--per-page <number> Results per page
|
|
630
|
+
--with-count Include total count
|
|
631
|
+
|
|
632
|
+
# Show interest details
|
|
633
|
+
cakemail interests show <list-id> <interest-id>
|
|
634
|
+
|
|
635
|
+
# Create an interest
|
|
636
|
+
cakemail interests create <list-id> -n "Product Updates" -d "Receive product announcements"
|
|
637
|
+
-n, --name <name> Interest name (required)
|
|
638
|
+
-d, --description <text> Interest description
|
|
639
|
+
|
|
640
|
+
# Update an interest
|
|
641
|
+
cakemail interests update <list-id> <interest-id> -n "News" -d "Newsletter updates"
|
|
642
|
+
-n, --name <name> New interest name
|
|
643
|
+
-d, --description <text> New description
|
|
644
|
+
|
|
645
|
+
# Delete an interest
|
|
646
|
+
cakemail interests delete <list-id> <interest-id> --force
|
|
647
|
+
|
|
648
|
+
# Manage contact interests
|
|
649
|
+
cakemail contacts add-interests <list-id> -i "Product Updates,News" -c "1,2,3"
|
|
650
|
+
cakemail contacts add-interests <list-id> -i "Newsletter" -q "status='subscribed'"
|
|
651
|
+
cakemail contacts remove-interests <list-id> -i "Old Interest" -c "1,2,3"
|
|
652
|
+
-i, --interests <interests> Comma-separated interest names (required)
|
|
653
|
+
-c, --contacts <ids> Comma-separated contact IDs
|
|
654
|
+
-q, --query <query> SQL query to select contacts
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
#### Campaign Enhancements (NEW in v1.6.0)
|
|
658
|
+
|
|
659
|
+
```bash
|
|
660
|
+
# Enhanced campaign commands with additional filters
|
|
661
|
+
cakemail campaigns list --sort "+scheduled_for" # Sort by scheduled date
|
|
662
|
+
cakemail campaigns list --filter "status==delivered;name==Newsletter"
|
|
663
|
+
|
|
664
|
+
# Show rendered campaign HTML
|
|
665
|
+
cakemail campaigns show-html <id>
|
|
666
|
+
|
|
667
|
+
# Get campaign statistics
|
|
668
|
+
cakemail campaigns stats <id>
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
#### Activity Logs (NEW in v1.6.0)
|
|
672
|
+
|
|
673
|
+
```bash
|
|
674
|
+
# Campaign activity logs
|
|
675
|
+
cakemail logs campaign <campaign-id>
|
|
676
|
+
--from <date> Filter by start date (YYYY-MM-DD)
|
|
677
|
+
--to <date> Filter by end date (YYYY-MM-DD)
|
|
678
|
+
--status <status> Filter by status
|
|
679
|
+
-p, --page <number> Page number
|
|
680
|
+
--per-page <number> Results per page
|
|
681
|
+
|
|
682
|
+
# List activity logs
|
|
683
|
+
cakemail logs list <list-id>
|
|
684
|
+
--from <date> Filter by start date
|
|
685
|
+
--to <date> Filter by end date
|
|
686
|
+
--status <status> Filter by status
|
|
687
|
+
-p, --page <number> Page number
|
|
688
|
+
--per-page <number> Results per page
|
|
689
|
+
|
|
690
|
+
# Show single log entry
|
|
691
|
+
cakemail logs show <list-id> <log-id>
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
#### Transactional Templates (NEW in v1.6.0)
|
|
695
|
+
|
|
696
|
+
```bash
|
|
697
|
+
# List transactional templates
|
|
698
|
+
cakemail transactional-templates list [list-id]
|
|
699
|
+
-p, --page <number> Page number
|
|
700
|
+
--per-page <number> Results per page
|
|
701
|
+
--with-count Include total count
|
|
702
|
+
|
|
703
|
+
# Show template details
|
|
704
|
+
cakemail transactional-templates show [list-id] <template-id>
|
|
705
|
+
|
|
706
|
+
# Create a transactional template
|
|
707
|
+
cakemail transactional-templates create [list-id] \
|
|
708
|
+
-n "Order Confirmation" \
|
|
709
|
+
-s "Your Order #{{order_id}}" \
|
|
710
|
+
--html "<h1>Order Confirmation</h1>" \
|
|
711
|
+
--sender-id 123
|
|
712
|
+
-n, --name <name> Template name (required)
|
|
713
|
+
-s, --subject <subject> Email subject (required)
|
|
714
|
+
--html <html> HTML content (required)
|
|
715
|
+
--text <text> Plain text content
|
|
716
|
+
--sender-id <id> Sender ID
|
|
717
|
+
--tracking <tracking> Tracking settings
|
|
718
|
+
|
|
719
|
+
# Update a template
|
|
720
|
+
cakemail transactional-templates update [list-id] <template-id> \
|
|
721
|
+
-n "New Name" \
|
|
722
|
+
-s "New Subject"
|
|
723
|
+
-n, --name <name> Template name
|
|
724
|
+
-s, --subject <subject> Email subject
|
|
725
|
+
--html <html> HTML content
|
|
726
|
+
--text <text> Plain text content
|
|
727
|
+
--sender-id <id> Sender ID
|
|
728
|
+
--tracking <tracking> Tracking settings
|
|
729
|
+
|
|
730
|
+
# Delete a template
|
|
731
|
+
cakemail transactional-templates delete [list-id] <template-id> --force
|
|
732
|
+
|
|
733
|
+
# Send transactional email from template
|
|
734
|
+
cakemail transactional-templates send [list-id] <template-id> \
|
|
735
|
+
-c 456 \
|
|
736
|
+
--variables '{"order_id":"12345"}'
|
|
737
|
+
-c, --contact-id <id> Contact ID to send to
|
|
738
|
+
-e, --email <email> Email address (alternative to contact-id)
|
|
739
|
+
--variables <json> Template variables as JSON
|
|
740
|
+
|
|
741
|
+
# Send test email
|
|
742
|
+
cakemail transactional-templates test [list-id] <template-id> \
|
|
743
|
+
-e "test@example.com" \
|
|
744
|
+
--variables '{"order_id":"TEST"}'
|
|
745
|
+
-e, --email <email> Email address (required)
|
|
746
|
+
--variables <json> Template variables as JSON
|
|
747
|
+
|
|
748
|
+
# Render template preview
|
|
749
|
+
cakemail transactional-templates render [list-id] <template-id> \
|
|
750
|
+
-c 456 \
|
|
751
|
+
--variables '{"order_id":"12345"}'
|
|
752
|
+
-c, --contact-id <id> Contact ID for personalization
|
|
753
|
+
--variables <json> Template variables as JSON
|
|
754
|
+
```
|
|
755
|
+
|
|
513
756
|
## Examples
|
|
514
757
|
|
|
515
758
|
```bash
|
|
@@ -591,6 +834,63 @@ npm start -- campaigns list
|
|
|
591
834
|
node dist/cli.js campaigns list
|
|
592
835
|
```
|
|
593
836
|
|
|
837
|
+
### Testing
|
|
838
|
+
|
|
839
|
+
The CLI has a comprehensive test suite:
|
|
840
|
+
|
|
841
|
+
```bash
|
|
842
|
+
# Run all tests
|
|
843
|
+
npm test
|
|
844
|
+
|
|
845
|
+
# Run integration tests (requires real API credentials)
|
|
846
|
+
npm run test:integration
|
|
847
|
+
|
|
848
|
+
# Run PTY tests (requires Node 18-20)
|
|
849
|
+
npm run test:pty
|
|
850
|
+
|
|
851
|
+
# Generate coverage report
|
|
852
|
+
npm run test:coverage
|
|
853
|
+
|
|
854
|
+
# Watch mode for development
|
|
855
|
+
npm run test:watch
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
**Test Types:**
|
|
859
|
+
|
|
860
|
+
1. **Integration Tests** - Test against real Cakemail API
|
|
861
|
+
- Requires credentials in `.env` file
|
|
862
|
+
- Tests real API calls and responses
|
|
863
|
+
- Currently: 5 passing tests
|
|
864
|
+
|
|
865
|
+
2. **PTY Tests** - Simulate real terminal user experience
|
|
866
|
+
- Tests colors, spinners, interactive prompts
|
|
867
|
+
- Tests all output formats (JSON, table, compact)
|
|
868
|
+
- Requires Node 18.x or 20.x (node-pty compatibility)
|
|
869
|
+
- Uses mock HTTP server for isolated testing
|
|
870
|
+
|
|
871
|
+
**Setting up Integration Tests:**
|
|
872
|
+
|
|
873
|
+
Create a `.env` file with test credentials:
|
|
874
|
+
|
|
875
|
+
```bash
|
|
876
|
+
CAKEMAIL_EMAIL=your_test_account@example.com
|
|
877
|
+
CAKEMAIL_PASSWORD=your_test_password
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
**PTY Tests (Note):**
|
|
881
|
+
|
|
882
|
+
PTY tests require Node 18 or 20 due to node-pty compilation limitations with Node 24+. If you're on Node 24:
|
|
883
|
+
|
|
884
|
+
```bash
|
|
885
|
+
# Switch to Node 20 for PTY tests
|
|
886
|
+
nvm install 20
|
|
887
|
+
nvm use 20
|
|
888
|
+
npm install
|
|
889
|
+
npm run test:pty
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
See `tests/PTY_TESTING_GUIDE.md` for complete testing documentation.
|
|
893
|
+
|
|
594
894
|
## License
|
|
595
895
|
|
|
596
896
|
MIT
|
package/dist/cli.js
CHANGED
|
@@ -14,23 +14,48 @@ import { createReportsCommand } from './commands/reports.js';
|
|
|
14
14
|
import { createSegmentsCommand } from './commands/segments.js';
|
|
15
15
|
import { createAttributesCommand } from './commands/attributes.js';
|
|
16
16
|
import { createSuppressedCommand } from './commands/suppressed.js';
|
|
17
|
+
import { createAccountCommand } from './commands/account.js';
|
|
18
|
+
import { createTagsCommand } from './commands/tags.js';
|
|
19
|
+
import { createInterestsCommand } from './commands/interests.js';
|
|
20
|
+
import { createLogsCommand } from './commands/logs.js';
|
|
21
|
+
import { createTransactionalTemplatesCommand } from './commands/transactional-templates.js';
|
|
22
|
+
import { registerConfigCommands } from './commands/config.js';
|
|
23
|
+
import { getProfileConfig } from './utils/config-file.js';
|
|
17
24
|
import chalk from 'chalk';
|
|
18
25
|
async function main() {
|
|
19
26
|
const program = new Command();
|
|
20
27
|
program
|
|
21
28
|
.name('cakemail')
|
|
22
29
|
.description('Official Cakemail CLI - Command-line interface for the Cakemail API')
|
|
23
|
-
.version('1.
|
|
30
|
+
.version('1.7.0')
|
|
24
31
|
.option('-f, --format <format>', 'Output format (json|table|compact)')
|
|
32
|
+
.option('--profile <type>', 'Override profile for this command (developer|marketer|balanced)')
|
|
33
|
+
.option('--batch', 'Run in batch/scripting mode (disable all interactive prompts)')
|
|
25
34
|
.option('--access-token <token>', 'Cakemail access token (overrides env)')
|
|
26
35
|
.option('--email <email>', 'Cakemail account email (overrides env)')
|
|
27
|
-
.option('--password <password>', 'Cakemail account password (overrides env)')
|
|
36
|
+
.option('--password <password>', 'Cakemail account password (overrides env)')
|
|
37
|
+
.option('--account <id>', 'Account ID to use for this command (overrides current account)');
|
|
28
38
|
try {
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
// Check if this is a help/version command that doesn't need credentials
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
// Check if it's root-level help/version (single flag only)
|
|
42
|
+
const isRootHelp = (args.length === 1) &&
|
|
43
|
+
(args[0] === '-h' || args[0] === '--help' ||
|
|
44
|
+
args[0] === '-V' || args[0] === '--version');
|
|
45
|
+
// Check if it's a help request for any subcommand
|
|
46
|
+
const isSubcommandHelp = args.includes('-h') || args.includes('--help');
|
|
47
|
+
// For root help/version only, skip auth and commands
|
|
48
|
+
if (isRootHelp) {
|
|
49
|
+
await program.parseAsync(process.argv);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// For subcommand help, we need to add commands but can skip auth
|
|
53
|
+
// For everything else, we need full auth
|
|
54
|
+
const needsAuth = !isSubcommandHelp;
|
|
55
|
+
// Get config with interactive authentication if needed
|
|
56
|
+
const config = await getConfig(needsAuth, needsAuth);
|
|
57
|
+
// Create client and formatter (use dummy values for help commands)
|
|
58
|
+
const client = new CakemailClient(needsAuth ? config : { accessToken: 'dummy', profileConfig: config.profileConfig });
|
|
34
59
|
const formatter = new OutputFormatter(() => {
|
|
35
60
|
const opts = program.opts();
|
|
36
61
|
// Override config with CLI options
|
|
@@ -40,10 +65,32 @@ async function main() {
|
|
|
40
65
|
config.email = opts.email;
|
|
41
66
|
if (opts.password)
|
|
42
67
|
config.password = opts.password;
|
|
43
|
-
|
|
68
|
+
if (opts.account)
|
|
69
|
+
config.currentAccountId = opts.account;
|
|
70
|
+
// Priority: CLI flag > env var > profile config > default
|
|
44
71
|
return opts.format || config.outputFormat || 'json';
|
|
72
|
+
}, () => {
|
|
73
|
+
const opts = program.opts();
|
|
74
|
+
// Handle --batch flag by setting environment variable
|
|
75
|
+
if (opts.batch) {
|
|
76
|
+
process.env.CAKEMAIL_BATCH_MODE = 'true';
|
|
77
|
+
}
|
|
78
|
+
// Handle --profile override
|
|
79
|
+
if (opts.profile) {
|
|
80
|
+
const validProfiles = ['developer', 'marketer', 'balanced'];
|
|
81
|
+
if (!validProfiles.includes(opts.profile)) {
|
|
82
|
+
console.error(chalk.red(`Invalid profile: ${opts.profile}`));
|
|
83
|
+
console.error(chalk.gray(`Valid profiles: ${validProfiles.join(', ')}`));
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
return getProfileConfig(opts.profile);
|
|
87
|
+
}
|
|
88
|
+
// Return default profile config
|
|
89
|
+
return config.profileConfig;
|
|
45
90
|
});
|
|
46
91
|
// Add commands
|
|
92
|
+
registerConfigCommands(program);
|
|
93
|
+
program.addCommand(createAccountCommand(client, formatter));
|
|
47
94
|
program.addCommand(createCampaignsCommand(client, formatter));
|
|
48
95
|
program.addCommand(createListsCommand(client, formatter));
|
|
49
96
|
program.addCommand(createContactsCommand(client, formatter));
|
|
@@ -55,6 +102,10 @@ async function main() {
|
|
|
55
102
|
program.addCommand(createSegmentsCommand(client, formatter));
|
|
56
103
|
program.addCommand(createAttributesCommand(client, formatter));
|
|
57
104
|
program.addCommand(createSuppressedCommand(client, formatter));
|
|
105
|
+
program.addCommand(createTagsCommand(client, formatter));
|
|
106
|
+
program.addCommand(createInterestsCommand(client, formatter));
|
|
107
|
+
program.addCommand(createLogsCommand(client, formatter));
|
|
108
|
+
program.addCommand(createTransactionalTemplatesCommand(client, formatter));
|
|
58
109
|
// Parse
|
|
59
110
|
await program.parseAsync(process.argv);
|
|
60
111
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,uBAAuB,EAAE,oCAAoC,CAAC;SACrE,MAAM,CAAC,wBAAwB,EAAE,uCAAuC,CAAC;SACzE,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACnE,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,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;IAyBlC;;;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
CHANGED
|
@@ -4,19 +4,27 @@ import { CakemailClient as SDK } from '@cakemail-org/cakemail-sdk';
|
|
|
4
4
|
* Provides backward compatibility with our CLI while using the SDK
|
|
5
5
|
*/
|
|
6
6
|
export class CakemailClient {
|
|
7
|
-
sdk;
|
|
8
|
-
config;
|
|
9
7
|
constructor(config) {
|
|
10
8
|
this.config = config;
|
|
11
|
-
// The SDK
|
|
12
|
-
if (!config.email || !config.password) {
|
|
13
|
-
throw new Error('
|
|
9
|
+
// The SDK supports either access token OR email/password
|
|
10
|
+
if (!config.accessToken && (!config.email || !config.password)) {
|
|
11
|
+
throw new Error('Either accessToken or email/password is required for authentication');
|
|
14
12
|
}
|
|
15
13
|
const sdkConfig = {
|
|
16
|
-
email: config.email,
|
|
17
|
-
password: config.password,
|
|
18
14
|
baseURL: config.baseURL || process.env.CAKEMAIL_API_BASE || 'https://api.cakemail.dev',
|
|
19
15
|
};
|
|
16
|
+
// Use access token if available, otherwise use email/password
|
|
17
|
+
if (config.accessToken) {
|
|
18
|
+
sdkConfig.accessToken = config.accessToken;
|
|
19
|
+
if (config.refreshToken)
|
|
20
|
+
sdkConfig.refreshToken = config.refreshToken;
|
|
21
|
+
if (config.expiresIn)
|
|
22
|
+
sdkConfig.expiresIn = config.expiresIn;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
sdkConfig.email = config.email;
|
|
26
|
+
sdkConfig.password = config.password;
|
|
27
|
+
}
|
|
20
28
|
this.sdk = new SDK(sdkConfig);
|
|
21
29
|
}
|
|
22
30
|
/**
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,GAAG,EAAwB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,GAAG,EAAwB,MAAM,4BAA4B,CAAC;AAWzF;;;GAGG;AACH,MAAM,OAAO,cAAc;IAIzB,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,yDAAyD;QACzD,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,SAAS,GAAyB;YACtC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,0BAA0B;SACvF,CAAC;QAEF,8DAA8D;QAC9D,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YAC3C,IAAI,MAAM,CAAC,YAAY;gBAAE,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;YACtE,IAAI,MAAM,CAAC,SAAS;gBAAE,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC/B,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACvC,CAAC;QAED,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 createAccountCommand(client: CakemailClient, formatter: OutputFormatter): Command;
|
|
5
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.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;AAQrD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAgQhG"}
|