@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.
- package/README.md +17 -16
- 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/
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
#
|
|
107
|
-
|
|
108
|
-
pnpm newsletter
|
|
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
|
|
116
|
-
does. Either way the draft is a review copy: the 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
|
|
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 --
|
|
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. `--
|
|
147
|
-
there is
|
|
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
|
|
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
|
-
|
|
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.
|
|
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/
|
|
34
|
-
"@devdogsuga/
|
|
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
|
}
|