@cakemail-org/cakemail-cli 1.7.0 → 2.0.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/.claude/settings.local.json +12 -0
- package/.env.example +40 -0
- package/.env.test.example +45 -0
- package/CHANGELOG.md +1031 -0
- package/README.md +41 -37
- package/audit-formats.js +128 -0
- package/cakemail.rb +20 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/account.js +1 -1
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/attributes.js +1 -1
- package/dist/commands/attributes.js.map +1 -1
- package/dist/commands/campaigns.js +1 -1
- package/dist/commands/campaigns.js.map +1 -1
- package/dist/commands/contacts.js +1 -1
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/emails.js +1 -1
- package/dist/commands/emails.js.map +1 -1
- package/dist/commands/interests.js +1 -1
- package/dist/commands/interests.js.map +1 -1
- package/dist/commands/lists.js +1 -1
- package/dist/commands/lists.js.map +1 -1
- package/dist/commands/logs.js +1 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +1 -1
- package/dist/commands/segments.js +1 -1
- package/dist/commands/segments.js.map +1 -1
- package/dist/commands/senders.js +1 -1
- package/dist/commands/senders.js.map +1 -1
- package/dist/commands/suppressed.js +1 -1
- package/dist/commands/suppressed.js.map +1 -1
- package/dist/commands/tags.js +1 -1
- package/dist/commands/tags.js.map +1 -1
- package/dist/commands/templates.js +1 -1
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/transactional-templates.js +1 -1
- package/dist/commands/transactional-templates.js.map +1 -1
- package/dist/commands/webhooks.js +1 -1
- package/dist/commands/webhooks.js.map +1 -1
- package/dist/utils/config.js +2 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.js +1 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +32 -4
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/spinner.d.ts +17 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +43 -0
- package/dist/utils/spinner.js.map +1 -0
- package/docs/DOCUMENTATION-STANDARD.md +1068 -0
- package/docs/README.md +161 -0
- package/docs/developer/ARCHITECTURE.md +516 -0
- package/docs/developer/AUTH.md +204 -0
- package/docs/developer/CONTRIBUTING.md +227 -0
- package/docs/developer/DOCUMENTATION_SUMMARY.md +346 -0
- package/docs/developer/PROJECT_INDEX.md +365 -0
- package/docs/planning/API_COVERAGE.md +1045 -0
- package/docs/planning/BACKLOG.md +1159 -0
- package/docs/planning/PROFILE_SYSTEM_TASKS.md +287 -0
- package/docs/planning/UX_IMPLEMENTATION_PLAN.md +691 -0
- package/docs/planning/archive/RELEASE_CHECKLIST_v1.3.0.md +332 -0
- package/docs/planning/archive/RELEASE_v1.3.0.md +428 -0
- package/docs/planning/archive/cakemail-cli-ux-improvements.md +438 -0
- package/docs/planning/cakemail-profile-system-plan.md +1121 -0
- package/docs/testing/AI_USER_SIMULATION_DESIGN.md +1342 -0
- package/docs/testing/KENOGAMI_BIDIRECTIONAL_FLOW.md +1517 -0
- package/docs/testing/KENOGAMI_TRUTH_RECONCILIATION_SYSTEM.md +1369 -0
- package/docs/user-manual/.obsidian/app.json +1 -0
- package/docs/user-manual/.obsidian/appearance.json +1 -0
- package/docs/user-manual/.obsidian/core-plugins.json +33 -0
- package/docs/user-manual/.obsidian/workspace.json +167 -0
- package/docs/user-manual/01-getting-started/01-installation.md +214 -0
- package/docs/user-manual/01-getting-started/02-quick-start.md +432 -0
- package/docs/user-manual/01-getting-started/03-authentication.md +448 -0
- package/docs/user-manual/01-getting-started/04-configuration.md +430 -0
- package/docs/user-manual/01-getting-started/05-output-formats.md +447 -0
- package/docs/user-manual/02-core-concepts/01-accounts.md +514 -0
- package/docs/user-manual/02-core-concepts/02-profile-system.md +771 -0
- package/docs/user-manual/02-core-concepts/03-smart-defaults.md +485 -0
- package/docs/user-manual/02-core-concepts/04-authentication-methods.md +435 -0
- package/docs/user-manual/02-core-concepts/05-pagination-filtering.md +600 -0
- package/docs/user-manual/02-core-concepts/06-error-handling.md +718 -0
- package/docs/user-manual/02-core-concepts/07-api-coverage.md +483 -0
- package/docs/user-manual/03-email-operations/01-senders.md +490 -0
- package/docs/user-manual/03-email-operations/02-templates.md +444 -0
- package/docs/user-manual/03-email-operations/03-transactional-emails.md +706 -0
- package/docs/user-manual/03-email-operations/04-email-tracking.md +407 -0
- package/docs/user-manual/04-campaign-management/01-campaigns-basics.md +394 -0
- package/docs/user-manual/04-campaign-management/02-campaign-scheduling.md +630 -0
- package/docs/user-manual/04-campaign-management/03-campaign-testing.md +997 -0
- package/docs/user-manual/04-campaign-management/04-campaign-lifecycle.md +709 -0
- package/docs/user-manual/04-campaign-management/05-campaign-links.md +934 -0
- package/docs/user-manual/05-contact-management/01-lists.md +836 -0
- package/docs/user-manual/05-contact-management/02-contacts.md +1035 -0
- package/docs/user-manual/05-contact-management/03-custom-attributes.md +788 -0
- package/docs/user-manual/05-contact-management/04-segments.md +1028 -0
- package/docs/user-manual/05-contact-management/05-contact-import-export.md +1031 -0
- package/docs/user-manual/06-analytics-reporting/01-campaign-analytics.md +867 -0
- package/docs/user-manual/06-analytics-reporting/02-account-reports.md +227 -0
- package/docs/user-manual/07-integrations/01-webhooks-integration.md +259 -0
- package/docs/user-manual/07-integrations/02-automation.md +326 -0
- package/docs/user-manual/08-advanced-usage/01-scripting-patterns.md +672 -0
- package/docs/user-manual/08-advanced-usage/02-bulk-operations.md +932 -0
- package/docs/user-manual/08-advanced-usage/03-ci-cd-integration.md +892 -0
- package/docs/user-manual/08-advanced-usage/04-performance-optimization.md +766 -0
- package/docs/user-manual/09-command-reference/01-config.md +776 -0
- package/docs/user-manual/09-command-reference/02-account.md +652 -0
- package/docs/user-manual/09-command-reference/03-lists.md +958 -0
- package/docs/user-manual/09-command-reference/04-contacts.md +1408 -0
- package/docs/user-manual/09-command-reference/05-attributes.md +617 -0
- package/docs/user-manual/09-command-reference/06-segments.md +894 -0
- package/docs/user-manual/09-command-reference/07-senders.md +803 -0
- package/docs/user-manual/09-command-reference/08-templates.md +818 -0
- package/docs/user-manual/09-command-reference/09-campaigns.md +1250 -0
- package/docs/user-manual/09-command-reference/10-emails.md +807 -0
- package/docs/user-manual/09-command-reference/11-reports.md +1135 -0
- package/docs/user-manual/09-command-reference/12-webhooks.md +773 -0
- package/docs/user-manual/09-command-reference/13-suppressed.md +797 -0
- package/docs/user-manual/09-command-reference/14-interests.md +630 -0
- package/docs/user-manual/09-command-reference/15-tags.md +584 -0
- package/docs/user-manual/09-command-reference/16-logs.md +656 -0
- package/docs/user-manual/09-command-reference/17-transactional-templates.md +850 -0
- package/docs/user-manual/10-troubleshooting/01-common-errors.md +457 -0
- package/docs/user-manual/10-troubleshooting/02-authentication-issues.md +558 -0
- package/docs/user-manual/10-troubleshooting/03-connection-problems.md +634 -0
- package/docs/user-manual/10-troubleshooting/04-debugging.md +725 -0
- package/docs/user-manual/11-appendix/04-faq.md +484 -0
- package/docs/user-manual/11-appendix/05-glossary.md +250 -0
- package/docs/user-manual/README.md +0 -0
- package/package.json +13 -61
- package/src/cli.ts +125 -0
- package/src/client.ts +16 -0
- package/src/commands/account.ts +267 -0
- package/src/commands/accounts.ts +78 -0
- package/src/commands/actions.ts +249 -0
- package/src/commands/attributes.ts +139 -0
- package/src/commands/campaign-blueprints.ts +106 -0
- package/src/commands/campaigns.ts +469 -0
- package/src/commands/config.ts +77 -0
- package/src/commands/contacts.ts +612 -0
- package/src/commands/custom-attributes.ts +127 -0
- package/src/commands/dkims.ts +117 -0
- package/src/commands/domains.ts +82 -0
- package/src/commands/email-apis.ts +569 -0
- package/src/commands/emails.ts +197 -0
- package/src/commands/forms.ts +283 -0
- package/src/commands/interests.ts +155 -0
- package/src/commands/links.ts +38 -0
- package/src/commands/lists.ts +406 -0
- package/src/commands/logos.ts +71 -0
- package/src/commands/logs.ts +386 -0
- package/src/commands/reports.ts +306 -0
- package/src/commands/segments.ts +158 -0
- package/src/commands/senders.ts +204 -0
- package/src/commands/sub-accounts.ts +271 -0
- package/src/commands/suppressed-emails.ts +234 -0
- package/src/commands/suppressed.ts +198 -0
- package/src/commands/system-emails.ts +85 -0
- package/src/commands/tags.ts +146 -0
- package/src/commands/tasks.ts +116 -0
- package/src/commands/templates.ts +189 -0
- package/src/commands/tokens.ts +83 -0
- package/src/commands/transactional-emails.ts +374 -0
- package/src/commands/transactional-templates.ts +385 -0
- package/src/commands/users.ts +506 -0
- package/src/commands/webhooks.ts +172 -0
- package/src/commands/workflow-blueprints.ts +123 -0
- package/src/commands/workflows.ts +265 -0
- package/src/types/profile.ts +93 -0
- package/src/utils/auth.ts +272 -0
- package/src/utils/config-file.ts +96 -0
- package/src/utils/config.ts +134 -0
- package/src/utils/confirm.ts +32 -0
- package/src/utils/defaults.ts +99 -0
- package/src/utils/errors.ts +116 -0
- package/src/utils/interactive.ts +91 -0
- package/src/utils/list-defaults.ts +74 -0
- package/src/utils/output.ts +190 -0
- package/src/utils/progress.ts +320 -0
- package/src/utils/spinner.ts +22 -0
- package/tests/IMPLEMENTATION_STATUS.md +258 -0
- package/tests/PTY_SETUP.md +118 -0
- package/tests/PTY_TESTING_GUIDE.md +507 -0
- package/tests/README.md +244 -0
- package/tests/fixtures/api-responses/campaigns.json +34 -0
- package/tests/fixtures/test-config.json +13 -0
- package/tests/helpers/cli-runner.ts +128 -0
- package/tests/helpers/mock-server.ts +301 -0
- package/tests/helpers/pty-runner.ts +181 -0
- package/tests/integration/campaigns-real-api.test.ts +196 -0
- package/tests/integration/setup-integration.ts +50 -0
- package/tests/pty/campaigns.test.ts +241 -0
- package/tests/setup.ts +34 -0
- package/tsconfig.json +15 -0
- package/vitest.config.ts +28 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
# Output Formats
|
|
2
|
+
|
|
3
|
+
The Cakemail CLI supports three output formats: JSON, Table, and Compact. Choose the format that best suits your needs.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Different output formats are useful for different scenarios:
|
|
8
|
+
|
|
9
|
+
- **JSON**: Machine-readable, full data, perfect for scripting
|
|
10
|
+
- **Table**: Human-readable, structured, great for interactive use
|
|
11
|
+
- **Compact**: Concise summaries, quick scanning, best for lists
|
|
12
|
+
|
|
13
|
+
## Choosing a Format
|
|
14
|
+
|
|
15
|
+
You can set the output format in three ways:
|
|
16
|
+
|
|
17
|
+
1. **Per-command flag** (highest priority)
|
|
18
|
+
```bash
|
|
19
|
+
cakemail -f table campaigns list
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. **Environment variable**
|
|
23
|
+
```bash
|
|
24
|
+
export CAKEMAIL_OUTPUT_FORMAT=compact
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
3. **`.env` file**
|
|
28
|
+
```bash
|
|
29
|
+
# .env
|
|
30
|
+
CAKEMAIL_OUTPUT_FORMAT=compact
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Priority**: Command flag > Environment variable > `.env` file > Default (JSON)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## JSON Format
|
|
38
|
+
|
|
39
|
+
### Overview
|
|
40
|
+
|
|
41
|
+
JSON is the default output format. It provides complete, structured data that's easy to parse programmatically.
|
|
42
|
+
|
|
43
|
+
### When to Use
|
|
44
|
+
|
|
45
|
+
- Scripting and automation
|
|
46
|
+
- Processing output with `jq` or other tools
|
|
47
|
+
- Saving output to files for later processing
|
|
48
|
+
- CI/CD pipelines
|
|
49
|
+
- Need full data structure
|
|
50
|
+
|
|
51
|
+
### Example
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
cakemail -f json campaigns list --limit 2
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Output:**
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"data": [
|
|
61
|
+
{
|
|
62
|
+
"id": 12345,
|
|
63
|
+
"name": "Summer Sale Newsletter",
|
|
64
|
+
"status": "delivered",
|
|
65
|
+
"list_id": 789,
|
|
66
|
+
"sender_id": 456,
|
|
67
|
+
"template_id": 123,
|
|
68
|
+
"subject": "Summer Sale - Up to 50% Off!",
|
|
69
|
+
"scheduled_for": "2024-06-15T10:00:00Z",
|
|
70
|
+
"created_on": "2024-06-10T14:30:00Z",
|
|
71
|
+
"updated_on": "2024-06-15T10:05:00Z"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": 12346,
|
|
75
|
+
"name": "Product Update",
|
|
76
|
+
"status": "scheduled",
|
|
77
|
+
"list_id": 789,
|
|
78
|
+
"sender_id": 456,
|
|
79
|
+
"template_id": 124,
|
|
80
|
+
"subject": "New Features Released",
|
|
81
|
+
"scheduled_for": "2024-06-20T15:00:00Z",
|
|
82
|
+
"created_on": "2024-06-18T09:00:00Z",
|
|
83
|
+
"updated_on": "2024-06-18T09:15:00Z"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"count": 2,
|
|
87
|
+
"total": 47,
|
|
88
|
+
"page": 1,
|
|
89
|
+
"per_page": 2
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Processing JSON Output
|
|
94
|
+
|
|
95
|
+
Use `jq` to extract specific fields:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Get just campaign names
|
|
99
|
+
cakemail -f json campaigns list | jq -r '.data[].name'
|
|
100
|
+
|
|
101
|
+
# Filter by status
|
|
102
|
+
cakemail -f json campaigns list | jq '.data[] | select(.status=="delivered")'
|
|
103
|
+
|
|
104
|
+
# Count total campaigns
|
|
105
|
+
cakemail -f json campaigns list | jq '.total'
|
|
106
|
+
|
|
107
|
+
# Get IDs and names as CSV
|
|
108
|
+
cakemail -f json campaigns list | jq -r '.data[] | "\(.id),\(.name)"'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Table Format
|
|
114
|
+
|
|
115
|
+
### Overview
|
|
116
|
+
|
|
117
|
+
Table format displays data in a structured, human-readable table with columns and rows.
|
|
118
|
+
|
|
119
|
+
### When to Use
|
|
120
|
+
|
|
121
|
+
- Interactive terminal use
|
|
122
|
+
- Reading detailed information
|
|
123
|
+
- Comparing multiple items side-by-side
|
|
124
|
+
- Presenting data to humans
|
|
125
|
+
- Visual clarity is important
|
|
126
|
+
|
|
127
|
+
### Example
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
cakemail -f table campaigns list --limit 3
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Output:**
|
|
134
|
+
```
|
|
135
|
+
┌─────────┬──────────────────────────┬───────────┬──────────────────────────────┬────────────────────┐
|
|
136
|
+
│ ID │ Name │ Status │ Subject │ Scheduled For │
|
|
137
|
+
├─────────┼──────────────────────────┼───────────┼──────────────────────────────┼────────────────────┤
|
|
138
|
+
│ 12345 │ Summer Sale Newsletter │ delivered │ Summer Sale - Up to 50% Off! │ 2024-06-15 10:00 │
|
|
139
|
+
│ 12346 │ Product Update │ scheduled │ New Features Released │ 2024-06-20 15:00 │
|
|
140
|
+
│ 12347 │ Monthly Newsletter │ draft │ June 2024 Newsletter │ - │
|
|
141
|
+
└─────────┴──────────────────────────┴───────────┴──────────────────────────────┴────────────────────┘
|
|
142
|
+
|
|
143
|
+
Total: 47 campaigns
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Table Format Features
|
|
147
|
+
|
|
148
|
+
- **Headers**: Column names clearly labeled
|
|
149
|
+
- **Alignment**: Proper column alignment for readability
|
|
150
|
+
- **Unicode borders**: Clean, professional appearance
|
|
151
|
+
- **Pagination info**: Shows total count below table
|
|
152
|
+
- **Truncation**: Long values are truncated with `...` to fit
|
|
153
|
+
|
|
154
|
+
### Customizing Display
|
|
155
|
+
|
|
156
|
+
Tables automatically select the most relevant columns for each resource:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Campaigns: ID, Name, Status, Subject, Scheduled
|
|
160
|
+
cakemail -f table campaigns list
|
|
161
|
+
|
|
162
|
+
# Lists: ID, Name, Language, Active Contacts, Created
|
|
163
|
+
cakemail -f table lists list
|
|
164
|
+
|
|
165
|
+
# Contacts: ID, Email, Status, Name, Subscribed On
|
|
166
|
+
cakemail -f table contacts list 123
|
|
167
|
+
|
|
168
|
+
# Templates: ID, Name, Subject, Tags, Created
|
|
169
|
+
cakemail -f table templates list
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Compact Format
|
|
175
|
+
|
|
176
|
+
### Overview
|
|
177
|
+
|
|
178
|
+
Compact format displays each item as a single line with key information, perfect for quick scanning.
|
|
179
|
+
|
|
180
|
+
### When to Use
|
|
181
|
+
|
|
182
|
+
- Quick overview of many items
|
|
183
|
+
- Terminal with limited space
|
|
184
|
+
- Need to see item count at a glance
|
|
185
|
+
- Focused on specific fields
|
|
186
|
+
- Log-like output
|
|
187
|
+
|
|
188
|
+
### Example
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
cakemail -f compact campaigns list --limit 5
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Output:**
|
|
195
|
+
```
|
|
196
|
+
[12345] Summer Sale Newsletter (delivered) - Summer Sale - Up to 50% Off!
|
|
197
|
+
[12346] Product Update (scheduled) - New Features Released
|
|
198
|
+
[12347] Monthly Newsletter (draft) - June 2024 Newsletter
|
|
199
|
+
[12348] Welcome Series (delivered) - Welcome to Our Community
|
|
200
|
+
[12349] Abandoned Cart (suspended) - Complete Your Purchase
|
|
201
|
+
|
|
202
|
+
Total: 47 campaigns
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Compact Format Patterns
|
|
206
|
+
|
|
207
|
+
Each resource type has a specific compact format:
|
|
208
|
+
|
|
209
|
+
**Campaigns:**
|
|
210
|
+
```
|
|
211
|
+
[ID] Name (status) - Subject
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Lists:**
|
|
215
|
+
```
|
|
216
|
+
[ID] Name - 1,234 contacts (language)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Contacts:**
|
|
220
|
+
```
|
|
221
|
+
[ID] email@example.com (status) - First Last
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Templates:**
|
|
225
|
+
```
|
|
226
|
+
[ID] Name - Subject
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Senders:**
|
|
230
|
+
```
|
|
231
|
+
[ID] name <email> (confirmed/unconfirmed)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Benefits
|
|
235
|
+
|
|
236
|
+
- **Fast scanning**: Quickly find items by ID or name
|
|
237
|
+
- **Space efficient**: Many items visible at once
|
|
238
|
+
- **Key info only**: No extraneous details
|
|
239
|
+
- **Grep-friendly**: Easy to filter with standard tools
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Find campaigns with "newsletter" in the name
|
|
243
|
+
cakemail -f compact campaigns list | grep -i newsletter
|
|
244
|
+
|
|
245
|
+
# Count delivered campaigns
|
|
246
|
+
cakemail -f compact campaigns list | grep delivered | wc -l
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Format Comparison
|
|
252
|
+
|
|
253
|
+
### Visual Comparison
|
|
254
|
+
|
|
255
|
+
**JSON:**
|
|
256
|
+
```json
|
|
257
|
+
{"id": 12345, "name": "Summer Sale", "status": "delivered", "subject": "Big Sale!"}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Table:**
|
|
261
|
+
```
|
|
262
|
+
┌───────┬─────────────┬───────────┬───────────┐
|
|
263
|
+
│ ID │ Name │ Status │ Subject │
|
|
264
|
+
├───────┼─────────────┼───────────┼───────────┤
|
|
265
|
+
│ 12345 │ Summer Sale │ delivered │ Big Sale! │
|
|
266
|
+
└───────┴─────────────┴───────────┴───────────┘
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Compact:**
|
|
270
|
+
```
|
|
271
|
+
[12345] Summer Sale (delivered) - Big Sale!
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Decision Matrix
|
|
275
|
+
|
|
276
|
+
| Scenario | Recommended Format | Why |
|
|
277
|
+
|----------|-------------------|-----|
|
|
278
|
+
| Scripting/automation | JSON | Machine-readable, complete data |
|
|
279
|
+
| Interactive browsing | Table | Visual clarity, structured |
|
|
280
|
+
| Quick scanning | Compact | Concise, space-efficient |
|
|
281
|
+
| Piping to `jq` | JSON | JSON processing |
|
|
282
|
+
| Piping to `grep` | Compact | Line-based filtering |
|
|
283
|
+
| CI/CD logs | JSON | Parseable, complete |
|
|
284
|
+
| Terminal exploration | Table or Compact | Human-readable |
|
|
285
|
+
| Saving to file | JSON | Structured data storage |
|
|
286
|
+
| Presenting to users | Table | Professional appearance |
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## Setting Default Format
|
|
291
|
+
|
|
292
|
+
### Project-Level Default
|
|
293
|
+
|
|
294
|
+
Create a `.env` file in your project:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# .env
|
|
298
|
+
CAKEMAIL_OUTPUT_FORMAT=compact
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Now all commands use compact format:
|
|
302
|
+
```bash
|
|
303
|
+
cakemail campaigns list # Uses compact
|
|
304
|
+
cakemail lists list # Uses compact
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Global Default
|
|
308
|
+
|
|
309
|
+
Set a user-wide default:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# ~/.cakemail/.env
|
|
313
|
+
CAKEMAIL_OUTPUT_FORMAT=table
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Shell Environment
|
|
317
|
+
|
|
318
|
+
Add to your shell profile:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
echo 'export CAKEMAIL_OUTPUT_FORMAT=compact' >> ~/.zshrc
|
|
322
|
+
source ~/.zshrc
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Per-Command Override
|
|
328
|
+
|
|
329
|
+
Override the default for a single command:
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# Default is compact, but use JSON for this command
|
|
333
|
+
export CAKEMAIL_OUTPUT_FORMAT=compact
|
|
334
|
+
cakemail -f json campaigns list
|
|
335
|
+
|
|
336
|
+
# Default is JSON, but use table for this command
|
|
337
|
+
cakemail -f table campaigns get 12345
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Format-Specific Tips
|
|
343
|
+
|
|
344
|
+
### JSON Tips
|
|
345
|
+
|
|
346
|
+
1. **Pretty print with jq:**
|
|
347
|
+
```bash
|
|
348
|
+
cakemail -f json campaigns list | jq .
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
2. **Save to file:**
|
|
352
|
+
```bash
|
|
353
|
+
cakemail -f json campaigns list > campaigns.json
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
3. **Extract specific fields:**
|
|
357
|
+
```bash
|
|
358
|
+
cakemail -f json campaigns list | jq '.data[].name'
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
4. **Filter results:**
|
|
362
|
+
```bash
|
|
363
|
+
cakemail -f json campaigns list | jq '.data[] | select(.status=="delivered")'
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Table Tips
|
|
367
|
+
|
|
368
|
+
1. **Best with pagination:**
|
|
369
|
+
```bash
|
|
370
|
+
cakemail -f table campaigns list --limit 20
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
2. **Redirect to file (preserves formatting):**
|
|
374
|
+
```bash
|
|
375
|
+
cakemail -f table campaigns list > campaigns.txt
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
3. **Combine with less for scrolling:**
|
|
379
|
+
```bash
|
|
380
|
+
cakemail -f table campaigns list | less
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Compact Tips
|
|
384
|
+
|
|
385
|
+
1. **Grep for specific items:**
|
|
386
|
+
```bash
|
|
387
|
+
cakemail -f compact campaigns list | grep "Newsletter"
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
2. **Count items:**
|
|
391
|
+
```bash
|
|
392
|
+
cakemail -f compact campaigns list | grep delivered | wc -l
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
3. **Extract IDs:**
|
|
396
|
+
```bash
|
|
397
|
+
cakemail -f compact campaigns list | grep -oE '\[([0-9]+)\]' | tr -d '[]'
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Examples by Use Case
|
|
403
|
+
|
|
404
|
+
### Daily Interactive Use
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
# Set default to table or compact
|
|
408
|
+
export CAKEMAIL_OUTPUT_FORMAT=table
|
|
409
|
+
|
|
410
|
+
# Browse campaigns
|
|
411
|
+
cakemail campaigns list
|
|
412
|
+
|
|
413
|
+
# Check specific campaign
|
|
414
|
+
cakemail campaigns get 12345
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Automation Script
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
#!/bin/bash
|
|
421
|
+
# Always use JSON in scripts
|
|
422
|
+
export CAKEMAIL_OUTPUT_FORMAT=json
|
|
423
|
+
|
|
424
|
+
# Get campaign count
|
|
425
|
+
total=$(cakemail campaigns list | jq '.total')
|
|
426
|
+
|
|
427
|
+
# Process each campaign
|
|
428
|
+
cakemail campaigns list | jq -r '.data[].id' | while read id; do
|
|
429
|
+
echo "Processing campaign $id"
|
|
430
|
+
done
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Quick Terminal Checks
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
# Use compact for quick scans
|
|
437
|
+
export CAKEMAIL_OUTPUT_FORMAT=compact
|
|
438
|
+
|
|
439
|
+
# Quick list
|
|
440
|
+
cakemail campaigns list
|
|
441
|
+
|
|
442
|
+
# Find specific campaign
|
|
443
|
+
cakemail campaigns list | grep "Summer"
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|