shipmail-cli 0.6.0 → 0.6.1

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 (3) hide show
  1. package/README.md +5 -0
  2. package/dist/cli.js +23 -7
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -152,6 +152,7 @@ Use repeatable `--header "Name: value"` flags for request headers. Use `--output
152
152
  - `api <METHOD> <PATH>`
153
153
  - `domains list|search|create|get|verify|delete`
154
154
  - `mailboxes list|create|get|suspend|resume|forwarding|forwarding-add|forwarding-remove|app-passwords|folders|identities|stage-attachment|prepare-attachment-upload`
155
+ - `members list|get`
155
156
  - `inbox list|message|threads|thread|thread-state|draft|send-draft|reply-message|reply-thread|update|move`
156
157
  - `reply-scans create|status|results`
157
158
  - `messages send|list|analytics|get|reply` (test keys also support `--sandbox-outcome`)
@@ -167,6 +168,10 @@ Use repeatable `--header "Name: value"` flags for request headers. Use `--output
167
168
  - `newsletters create|update|preview|preflight|test-send|schedule|cancel|resume`
168
169
  - `newsletter-assets list|upload|register-url`
169
170
 
171
+ Member output uses the roles `owner`, `admin`, and `member`. Its `mailbox_access.scope` is `all` or
172
+ `selected`; `mailbox_ids` is empty for `all`, while selected IDs may be limited to mailboxes the
173
+ API key can reach.
174
+
170
175
  Configure a publisher-owned Atom self URL and the number of recent issues:
171
176
 
172
177
  ```bash
package/dist/cli.js CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  } from "shipmail";
16
16
 
17
17
  // src/version.ts
18
- var VERSION = "0.6.0";
18
+ var VERSION = "0.6.1";
19
19
 
20
20
  // src/cli.ts
21
21
  var DEFAULT_BASE_URL = "https://shipmail.to/api/v1";
@@ -277,6 +277,7 @@ async function newsletterCreateParams(options) {
277
277
  const archive_visibility = parseArchiveVisibility(options);
278
278
  const feed_entry_url = getString(options, "feed-entry-url");
279
279
  const styling_mode = parseStylingMode(options);
280
+ const track_engagement = getBoolean(options, "track-engagement");
280
281
  const preview_text = getString(options, "preview-text");
281
282
  return {
282
283
  audience_id,
@@ -290,7 +291,8 @@ async function newsletterCreateParams(options) {
290
291
  ...send_window_hours !== void 0 ? { send_window_hours } : {},
291
292
  ...archive_visibility !== void 0 ? { archive_visibility } : {},
292
293
  ...feed_entry_url !== void 0 ? { feed_entry_url } : {},
293
- ...styling_mode !== void 0 ? { styling_mode } : {}
294
+ ...styling_mode !== void 0 ? { styling_mode } : {},
295
+ ...track_engagement !== void 0 ? { track_engagement } : {}
294
296
  };
295
297
  }
296
298
  async function newsletterUpdateParams(options) {
@@ -303,6 +305,7 @@ async function newsletterUpdateParams(options) {
303
305
  const archive_visibility = parseArchiveVisibility(options);
304
306
  const feed_entry_url = getString(options, "feed-entry-url");
305
307
  const styling_mode = parseStylingMode(options);
308
+ const track_engagement = getBoolean(options, "track-engagement");
306
309
  const blocksInput = getString(options, "blocks");
307
310
  const bodyHtmlInput = getString(options, "body-html");
308
311
  const bodyTextInput = getString(options, "body-text");
@@ -321,7 +324,8 @@ async function newsletterUpdateParams(options) {
321
324
  ...send_window_hours !== void 0 ? { send_window_hours } : {},
322
325
  ...archive_visibility !== void 0 ? { archive_visibility } : {},
323
326
  ...feed_entry_url !== void 0 ? { feed_entry_url } : {},
324
- ...styling_mode !== void 0 ? { styling_mode } : {}
327
+ ...styling_mode !== void 0 ? { styling_mode } : {},
328
+ ...track_engagement !== void 0 ? { track_engagement } : {}
325
329
  };
326
330
  if (Object.keys(params).length === 0) {
327
331
  throw new CliUsageError("Provide at least one field to update.");
@@ -471,8 +475,8 @@ Usage:
471
475
  --name "July changelog" \\
472
476
  --subject "What shipped in July" \\
473
477
  --blocks @blocks.json \\
474
- [--feed-entry-url https://example.com/post] [--styling-mode styled|plain]
475
- shipmail newsletters update nws_789 --subject "Updated subject" --blocks @blocks-v2.json [--feed-entry-url https://example.com/post] [--styling-mode styled|plain]
478
+ [--feed-entry-url https://example.com/post] [--styling-mode styled|plain] [--track-engagement true|false]
479
+ shipmail newsletters update nws_789 --subject "Updated subject" --blocks @blocks-v2.json [--feed-entry-url https://example.com/post] [--styling-mode styled|plain] [--track-engagement true|false]
476
480
  shipmail newsletters preview <id>
477
481
  shipmail newsletters preflight <id>
478
482
  shipmail newsletters test-send <id> --recipient-email owner@example.com
@@ -502,9 +506,9 @@ Usage:
502
506
  shipmail audiences subscribers resubscribe <audience-id> <subscriber-id> --consent-source "Signup form"
503
507
  shipmail audiences subscribers remove <audience-id> <subscriber-id>
504
508
  shipmail calendar events list --mailbox hello@example.com --from 2026-08-01T00:00:00Z --to 2026-08-08T00:00:00Z [--expand true] [--limit 100]
505
- shipmail calendar events create --mailbox hello@example.com --title "Sync" --start 2026-08-01T14:00:00 [--timezone Europe/Paris] [--duration PT30M] [--invitation-language en|fr|es] [--attendees JSON|@file] [--reminders JSON|@file]
509
+ shipmail calendar events create --mailbox hello@example.com --title "Sync" --start 2026-08-01T14:00:00 [--timezone Europe/Paris] [--duration PT30M] [--invitation-language en|fr|es] [--attendees JSON|@file] [--reminders JSON|@file] [--operation-key key] [--send-invitations true|false]
506
510
  shipmail calendar events get <event-id> --mailbox hello@example.com
507
- shipmail calendar events update <event-id> --mailbox hello@example.com [--title "..."] [--start ...] [--invitation-language en|fr|es]
511
+ shipmail calendar events update <event-id> --mailbox hello@example.com [--title "..."] [--start ...] [--invitation-language en|fr|es] [--operation-key key] [--expected-revision sha256] [--send-guest-updates true|false]
508
512
  shipmail calendar events delete <event-id> --mailbox hello@example.com
509
513
  shipmail calendar availability --mailbox hello@example.com --from 2026-08-03T00:00:00Z --to 2026-08-04T00:00:00Z [--duration 30] [--days 1,2,3,4,5] [--window-start 540] [--window-end 1020]
510
514
  shipmail booking-pages list [--limit 25] [--cursor cur]
@@ -521,9 +525,16 @@ Conversation IDs:
521
525
  <thread-id> accepts a conversation ID (thd_...) or the mail-server thread ID. Store the
522
526
  conversation_id every response carries. thread_id is deprecated and unchanged.
523
527
 
528
+ Member access output:
529
+ role is owner, admin, or member. mailbox_access.scope is all or selected. mailbox_ids is empty
530
+ for all; selected IDs may be limited to mailboxes the API key can reach.
531
+
524
532
  Newsletter styling:
525
533
  --styling-mode <styled|plain> styled applies Shipmail's email theme. plain sends your HTML without injected styles, width, or centering, so the reader's email client styles it.
526
534
 
535
+ Newsletter tracking:
536
+ --track-engagement <true|false> Track opens and clicks for this issue. Off by default. Changes only while the issue is a draft or scheduled for later.
537
+
527
538
  Newsletter block prose:
528
539
  Paragraph, quote, callout, list-item, and column bodies accept bare text or sanitized inline HTML. Use <p> and <br> for line breaks.
529
540
 
@@ -2003,6 +2014,8 @@ async function runCalendarEvents(client, parsed, out) {
2003
2014
  title: getRequiredString(options, "title"),
2004
2015
  start: getRequiredString(options, "start"),
2005
2016
  calendar_id: getString(options, "calendar-id"),
2017
+ operation_key: getString(options, "operation-key"),
2018
+ send_invitations: getBoolean(options, "send-invitations"),
2006
2019
  ...await calendarEventFields(options)
2007
2020
  };
2008
2021
  writeJson(out, await client.calendar.events.create(params));
@@ -2022,6 +2035,9 @@ async function runCalendarEvents(client, parsed, out) {
2022
2035
  mailbox: getRequiredString(options, "mailbox"),
2023
2036
  title: getString(options, "title"),
2024
2037
  start: getString(options, "start"),
2038
+ operation_key: getString(options, "operation-key"),
2039
+ expected_revision: getString(options, "expected-revision"),
2040
+ send_guest_updates: getBoolean(options, "send-guest-updates"),
2025
2041
  ...await calendarEventFields(options)
2026
2042
  };
2027
2043
  writeJson(out, await client.calendar.events.update(id, params));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shipmail-cli",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Official CLI for the Shipmail API",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,7 +41,7 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "shipmail": "0.6.0"
44
+ "shipmail": "0.6.2"
45
45
  },
46
46
  "devDependencies": {
47
47
  "tsup": "^8.4.0",