@devdogsuga/newsletter 0.1.7 → 0.1.8

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 (2) hide show
  1. package/README.md +17 -16
  2. package/package.json +3 -4
package/README.md CHANGED
@@ -5,9 +5,9 @@ components with two callers:
5
5
 
6
6
  - **`apps/platform`** renders issues as pages at `/changelog` and
7
7
  `/changelog/<version>`, straight from `ChangelogEmail`.
8
- - **`@devdogsuga/newsletter-cli`** exports issues as files — `pnpm
9
- newsletter` from the Backstage root — an `.html` preview and an
10
- Outlook-importable `.eml` per issue, and pushes or sends them.
8
+ - **`@devdogsuga/backstage`**'s `newsletter` command exports issues as files
9
+ (an `.html` preview and an Outlook-importable `.eml` per issue), drafts them
10
+ into the club mailbox, and sends them.
11
11
 
12
12
  It deliberately does not go through `@devdogsuga/email`. That package's
13
13
  compiled-slot pipeline exists to prove a template cannot branch on its inputs,
@@ -103,23 +103,22 @@ file; the platform archive and the exported email can never disagree.
103
103
  ## Exporting
104
104
 
105
105
  ```bash
106
- # rebuilds brand, events and newsletter first, so the export carries the
107
- # checkout's current issues and club config
108
- pnpm newsletter # pick issues interactively
109
- pnpm newsletter '*' --out ~/changelog
106
+ # the issues published in this package; no checkout needed
107
+ pnpm dlx @devdogsuga/backstage newsletter render # pick issues interactively
108
+ pnpm dlx @devdogsuga/backstage newsletter render '*' --out ~/changelog
110
109
  ```
111
110
 
112
111
  The `.eml` carries `X-Unsent: 1` and no `Message-ID`, so **classic Outlook
113
112
  for Windows** opens it as an editable compose draft. New Outlook and Outlook
114
113
  on the web do not honor `X-Unsent` and open `.eml` files read-only; for those
115
- clients the draft has to already be in the mailbox — which is what `--push`
116
- does. Either way the draft is a review copy: the send happens with `--send`
117
- (below), because every Outlook composer rewrites what it sends.
114
+ clients the draft has to already be in the mailbox — which is what
115
+ `newsletter draft` does. Either way the draft is a review copy: the send
116
+ happens with `newsletter send` (below), because every Outlook composer rewrites what it sends.
118
117
 
119
118
  ## Pushing a draft
120
119
 
121
120
  ```bash
122
- pnpm newsletter 3.0.1 --push
121
+ pnpm dlx @devdogsuga/backstage newsletter draft 3.0.1
123
122
  ```
124
123
 
125
124
  appends the issue — same MIME as the `.eml`, minus `X-Unsent` — straight into
@@ -138,21 +137,23 @@ differently, into Word HTML, with the same result.)
138
137
  ## Sending
139
138
 
140
139
  ```bash
141
- pnpm newsletter 3.0.1 --send listserv@listserv.uga.edu
140
+ pnpm dlx @devdogsuga/backstage newsletter send 3.0.1 --to listserv@listserv.uga.edu
142
141
  ```
143
142
 
144
143
  submits the issue over SMTP as the club mailbox, byte-for-byte as authored —
145
144
  no composer touches it, so recipients get the document with its stylesheet,
146
- pins and gradient underlays intact. `--send` takes the recipients, comma-separated;
147
- there is deliberately no interactive path to a send.
145
+ pins and gradient underlays intact. `--to` is required and takes the
146
+ recipients, comma-separated; there is no default audience. Every send asks
147
+ first, naming the issue and the full recipient list; with no terminal, `--yes`
148
+ answers it.
148
149
 
149
- The first `--push` or `--send` opens a browser; sign in as the mailbox and
150
+ The first `draft` or `send` opens a browser; sign in as the mailbox and
150
151
  the CLI catches the redirect itself on a loopback port. (If no local port
151
152
  would bind, it falls back to printing the URL and asking for the
152
153
  `https://localhost` address the browser lands on.) The refresh token is
153
154
  stored at `~/.config/devdogsuga/newsletter-mailbox.json` (mode 600 — it opens
154
155
  the club mailbox, treat it like a password) and every later run is silent.
155
- `--mailbox` overrides the account.
156
+ Drafts and sends always use the club mailbox.
156
157
 
157
158
  Why IMAP/SMTP and not Microsoft Graph: UGA's tenant blocks user consent for
158
159
  every Graph mail scope, but Microsoft's default consent policy allowlists a
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devdogsuga/newsletter",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The DevDogs Changelog: email-safe React components rendered as platform pages and exported as Outlook-importable .eml files",
@@ -30,8 +30,8 @@
30
30
  "dependencies": {
31
31
  "react": "^19.2.8",
32
32
  "react-dom": "^19.2.8",
33
- "@devdogsuga/brand": "0.1.4",
34
- "@devdogsuga/events": "0.1.4"
33
+ "@devdogsuga/events": "0.1.5",
34
+ "@devdogsuga/brand": "0.1.5"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^26.2.0",
@@ -48,7 +48,6 @@
48
48
  "typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
49
49
  "test": "vitest run",
50
50
  "test:watch": "vitest",
51
- "test:coverage": "vitest run --coverage",
52
51
  "lint": "eslint .",
53
52
  "lint:fix": "eslint . --fix"
54
53
  }