@voltro/plugin-mail 0.66.1 → 0.67.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/CHANGELOG.md +44 -0
- package/THIRD-PARTY-NOTICES.md +25 -25
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -39,6 +39,50 @@ _Changes staged for the next release accumulate here (rolled up from
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
## [0.67.0] — 2026-09-07
|
|
43
|
+
|
|
44
|
+
### ⚠ BREAKING
|
|
45
|
+
|
|
46
|
+
- **@voltro/client, @voltro/protocol, @voltro/runtime, @voltro/cli, @voltro/web** — Confirmed optimistic writes now reconcile against a token-bound post-ACK primary snapshot, never an unrelated delta, changed row or timeout. Matching snapshots retire only covered previews; server normalisation and later writers remain authoritative. Same-tick acknowledgements coalesce, and affected cache entries preserve primary consistency across same-subject reconnects. Migration: deploy matching client/server framework versions together and account for an additional subscription read per affected acknowledgement group; affected entries use primary snapshots instead of replica reads/delta-resume for their cache lifetime. Native hooks need no source rewrite. Direct callers of the public `supersedesConfirmedPatches(event, baseBefore, baseAfter)` helper must migrate to `(event, reconciliationToken)` using the token of the post-ACK read, or use the native `SubscriptionCache`; row comparison cannot be mechanically rewritten into causal proof.
|
|
47
|
+
|
|
48
|
+
**`voltro update` carries you across this** — codemod `0.67.0/01_subscription-reconciliation`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
|
|
49
|
+
- **@voltro/cli** — `voltro support sentry <eventId>` is removed. It wrapped `sentry-cli sourcemaps explain`, which sentry-cli 3 dropped in favour of Sentry's in-product source-map debugger; `@voltro/cli` now depends on `@sentry/cli` 3, whose `execute(args, live)` takes a boolean. Migration: delete the invocation from scripts, CI jobs and runbooks and read the event's source-map resolution in Sentry itself. `voltro support collect` is unchanged.
|
|
50
|
+
|
|
51
|
+
**`voltro update` carries you across this** — codemod `0.67.0/03_support-sentry-removed`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
|
|
52
|
+
- **@voltro/cli, @voltro/workflow, @voltro/testing** — `voltro test` runs on vitest 5, and `@voltro/workflow` names `vitest ^5.0.0` as its peer. Migration: set `vitest` and `@vitest/coverage-v8` to `^5.0.0` together in every app that declares them (the coverage provider peer-pins the exact vitest version), install, and run the suite once — vitest 5 clears mocks before each test by default, fails a test whose async assertion was not awaited, and no longer looks a config file up in ancestor directories. Scaffolded templates ship on 5.
|
|
53
|
+
|
|
54
|
+
**`voltro update` carries you across this** — codemod `0.67.0/02_vitest-5`. If you pin versions by hand and never run it, print the notes without changing anything: `voltro update --codemods-only --from <your current version> --dry-run` (this one ships in 0.67.0).
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **@voltro/ui-shadcn, @voltro/cli, @voltro/devtools, @voltro/devtools-ui** — Add the opt-in Signal brand stylesheet, accessible `SignalHeader` and pausable `SignalField` with reduced-motion and visibility handling. Development and production builds resolve the stylesheet from the same UI-kit installation; the in-browser devtools use the matching plum/violet palette and declare the Tailwind dependency required to compile their source stylesheet locally.
|
|
59
|
+
|
|
60
|
+
Code blocks use matching light/dark surfaces, code comparisons retain readable contrast, and the shared routes view uses a direct heading.
|
|
61
|
+
|
|
62
|
+
`DocsLayout` supports custom header and introduction slots and an optional desktop sidebar. Its mobile drawer uses native modal focus and Escape behavior; search contains keyboard focus and restores the opener when dismissed.
|
|
63
|
+
|
|
64
|
+
`VoltroWordmark` owns product badges and an operator warning tone. `SignalHeader` shares responsive brand geometry and an optional sticky reading surface; `AppShell` accepts a custom header slot. All first-party product headers and footers use this composition, including the compact local Devtools identity.
|
|
65
|
+
|
|
66
|
+
Shared `SignalPreferences`, `SignalSearch` and `SignalHeaderAction` align header controls across public and operating apps. Signal fields support both themes; `ProfileMenu` accepts a custom trigger and preserves an explicit System choice.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- **@voltro/cli, @voltro/runtime, @voltro/database, @voltro/protocol, @voltro/voltro, @voltro/sql-mssql, @voltro/sql-turso, @voltro/workflow, @voltro/plugin-sso-saml, @voltro/plugin-sentry** — Dependency refresh: Effect 3.22.1 with the matching `@effect/*` patch releases (`@effect/cluster` 0.60.2, `@effect/sql-mssql` 0.54.0, `@effect/platform` 0.97.1, `@effect/rpc` 0.76.2, `@effect/sql` 0.52.1, `@effect/workflow` 0.19.1), `@libsql/client` 0.18.0 — and `@effect/sql-mssql` 0.54.0 flipped its TLS default to encrypt-and-verify, so the mssql dialect now passes `encrypt: false` explicitly for an unset connection to keep the documented modes (unset → plaintext, `sslmode=require` → encrypt without verification) — `@sentry/cli` 3, `xml-encryption` 6, vite 8.2.2, and the tracked minor/patch lines. The mssql patch for `@effect/cluster` — the four SQL fixes plus the shard-release backoff — was regenerated against 0.60.2 (upstream refactored `SqlMessageStorage`, so the 0.60.0 hunks no longer applied) and ships as `patches/@effect__cluster@0.60.2.patch`; `voltro add mssql` writes the new key. Projects scaffolded by the CLI record the pnpm that ran it, which is 12.x on the framework's own toolchain; pnpm 11+ replaced `onlyBuiltDependencies` with `allowBuilds`, and the framework's workspaces declare it.
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
|
|
74
|
+
- **@voltro/cli, @voltro/runtime, @voltro/database, @voltro/voltro** — The tunable readers that take `env = process.env` (`resolveEagerFallbackWarnIntervalMs`, `resolveWorkflowRecordingMode`, `readPollCeilingMs`, and the `SchedulingEnv` / `ReactiveEnv` / `InspectRingsEnv` shapes) accept a bare `NodeJS.ProcessEnv` again. They were typed as all-optional literals, which TypeScript's weak-type check rejects for `Dict<string>` the moment nothing in the compilation augments `ProcessEnv` — an app that compiles framework source with only `@types/node` (a mobile app, which declares no env) failed `tsc` on `dbMetrics.ts`. The parameters now carry an index signature.
|
|
75
|
+
- **@voltro/client, @voltro/web** — The subscription recovery watchdog knows when it was throttled. A browser delays timers in a hidden tab, so the stall timer could fire long after it was due, report the interval it was armed with as the interval waited, warn, and invalidate entries whose deliveries were queued behind the same throttling. It now compares its due time with its fire time: late beyond a tolerance, or firing in a hidden tab, it records one `subscription.recovery-timer-late` per attempt (with `timerLateMs` and `hidden`) and re-arms; the first on-time fire in a visible tab decides. `subscription.recovery-stuck` carries the time actually waited and the number of deferrals.
|
|
76
|
+
|
|
77
|
+
The client runtime yields to the event loop through a `MessageChannel` in the browser instead of `setTimeout`, so tasks queued behind Effect's periodic yield are not held to the hidden-tab timer grid. `runtime.resolved` records the channel in use as `scheduler`.
|
|
78
|
+
|
|
79
|
+
`socket.frames` marks frame-arrival bursts on the raw socket — the first frame after open and each frame that follows a gap of five seconds or more, at most eight per socket — so an export separates a late arrival from late processing.
|
|
80
|
+
|
|
81
|
+
`apiSurface: compatible` — the golden churn in `@voltro/client` and `@voltro/web` is two members added to the `ClientDiagnosticKind` union (`socket.frames`, `subscription.recovery-timer-late`); every existing member is unchanged, the framework is the only producer, and a reader that does not know the new kinds sees two more events it can ignore. Only a switch exhaustive over the vocabulary needs two arms.
|
|
82
|
+
- **@voltro/cli** — Web middleware is precompiled into the server production output and rooted by runtime pruning, preserving its behavior in source-free Docker deployments. Missing transitive imports now fail loudly instead of silently disabling a present middleware; rebuilding after removal clears the previous policy. Runtime tracing also preserves transitive dependencies when a deploy directory is reached through a symlink. Native bundle imports now propagate missing-library and initialization errors instead of returning a circular shim's empty exports. Rebuild and deploy the complete `.framework` output; no application API changes are required.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
42
86
|
## [0.66.1] — 2026-09-06
|
|
43
87
|
|
|
44
88
|
### Fixed
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -9,7 +9,7 @@ Generated from the resolved runtime dependency closure (78 packages).
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## @effect/cluster@0.60.
|
|
12
|
+
## @effect/cluster@0.60.2
|
|
13
13
|
|
|
14
14
|
License: MIT
|
|
15
15
|
|
|
@@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
37
37
|
SOFTWARE.
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
## @effect/platform@0.97.
|
|
40
|
+
## @effect/platform@0.97.1
|
|
41
41
|
|
|
42
42
|
License: MIT
|
|
43
43
|
|
|
@@ -65,7 +65,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
65
65
|
SOFTWARE.
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
## @effect/platform-node@0.108.
|
|
68
|
+
## @effect/platform-node@0.108.1
|
|
69
69
|
|
|
70
70
|
License: MIT
|
|
71
71
|
|
|
@@ -93,7 +93,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
93
93
|
SOFTWARE.
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
## @effect/platform-node-shared@0.61.
|
|
96
|
+
## @effect/platform-node-shared@0.61.1
|
|
97
97
|
|
|
98
98
|
License: MIT
|
|
99
99
|
|
|
@@ -121,7 +121,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
121
121
|
SOFTWARE.
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
## @effect/sql@0.52.
|
|
124
|
+
## @effect/sql@0.52.1
|
|
125
125
|
|
|
126
126
|
License: MIT
|
|
127
127
|
|
|
@@ -177,7 +177,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
177
177
|
SOFTWARE.
|
|
178
178
|
```
|
|
179
179
|
|
|
180
|
-
## @effect/workflow@0.19.
|
|
180
|
+
## @effect/workflow@0.19.1
|
|
181
181
|
|
|
182
182
|
License: MIT
|
|
183
183
|
|
|
@@ -448,7 +448,7 @@ Apache License
|
|
|
448
448
|
limitations under the License.
|
|
449
449
|
```
|
|
450
450
|
|
|
451
|
-
## @opentelemetry/api-logs@0.
|
|
451
|
+
## @opentelemetry/api-logs@0.222.0
|
|
452
452
|
|
|
453
453
|
License: Apache-2.0
|
|
454
454
|
|
|
@@ -656,7 +656,7 @@ Apache License
|
|
|
656
656
|
limitations under the License.
|
|
657
657
|
```
|
|
658
658
|
|
|
659
|
-
## @opentelemetry/context-async-hooks@2.
|
|
659
|
+
## @opentelemetry/context-async-hooks@2.11.0
|
|
660
660
|
|
|
661
661
|
License: Apache-2.0
|
|
662
662
|
|
|
@@ -864,7 +864,7 @@ Apache License
|
|
|
864
864
|
limitations under the License.
|
|
865
865
|
```
|
|
866
866
|
|
|
867
|
-
## @opentelemetry/core@2.
|
|
867
|
+
## @opentelemetry/core@2.10.0
|
|
868
868
|
|
|
869
869
|
License: Apache-2.0
|
|
870
870
|
|
|
@@ -1072,7 +1072,7 @@ Apache License
|
|
|
1072
1072
|
limitations under the License.
|
|
1073
1073
|
```
|
|
1074
1074
|
|
|
1075
|
-
## @opentelemetry/exporter-metrics-otlp-http@0.
|
|
1075
|
+
## @opentelemetry/exporter-metrics-otlp-http@0.222.0
|
|
1076
1076
|
|
|
1077
1077
|
License: Apache-2.0
|
|
1078
1078
|
|
|
@@ -1280,7 +1280,7 @@ Apache License
|
|
|
1280
1280
|
limitations under the License.
|
|
1281
1281
|
```
|
|
1282
1282
|
|
|
1283
|
-
## @opentelemetry/exporter-trace-otlp-http@0.
|
|
1283
|
+
## @opentelemetry/exporter-trace-otlp-http@0.222.0
|
|
1284
1284
|
|
|
1285
1285
|
License: Apache-2.0
|
|
1286
1286
|
|
|
@@ -1488,7 +1488,7 @@ Apache License
|
|
|
1488
1488
|
limitations under the License.
|
|
1489
1489
|
```
|
|
1490
1490
|
|
|
1491
|
-
## @opentelemetry/otlp-exporter-base@0.
|
|
1491
|
+
## @opentelemetry/otlp-exporter-base@0.222.0
|
|
1492
1492
|
|
|
1493
1493
|
License: Apache-2.0
|
|
1494
1494
|
|
|
@@ -1696,7 +1696,7 @@ Apache License
|
|
|
1696
1696
|
limitations under the License.
|
|
1697
1697
|
```
|
|
1698
1698
|
|
|
1699
|
-
## @opentelemetry/otlp-transformer@0.
|
|
1699
|
+
## @opentelemetry/otlp-transformer@0.222.0
|
|
1700
1700
|
|
|
1701
1701
|
License: Apache-2.0
|
|
1702
1702
|
|
|
@@ -1904,7 +1904,7 @@ Apache License
|
|
|
1904
1904
|
limitations under the License.
|
|
1905
1905
|
```
|
|
1906
1906
|
|
|
1907
|
-
## @opentelemetry/resources@2.
|
|
1907
|
+
## @opentelemetry/resources@2.11.0
|
|
1908
1908
|
|
|
1909
1909
|
License: Apache-2.0
|
|
1910
1910
|
|
|
@@ -2112,7 +2112,7 @@ Apache License
|
|
|
2112
2112
|
limitations under the License.
|
|
2113
2113
|
```
|
|
2114
2114
|
|
|
2115
|
-
## @opentelemetry/sdk-logs@0.
|
|
2115
|
+
## @opentelemetry/sdk-logs@0.222.0
|
|
2116
2116
|
|
|
2117
2117
|
License: Apache-2.0
|
|
2118
2118
|
|
|
@@ -2320,7 +2320,7 @@ Apache License
|
|
|
2320
2320
|
limitations under the License.
|
|
2321
2321
|
```
|
|
2322
2322
|
|
|
2323
|
-
## @opentelemetry/sdk-metrics@2.
|
|
2323
|
+
## @opentelemetry/sdk-metrics@2.11.0
|
|
2324
2324
|
|
|
2325
2325
|
License: Apache-2.0
|
|
2326
2326
|
|
|
@@ -2528,7 +2528,7 @@ Apache License
|
|
|
2528
2528
|
limitations under the License.
|
|
2529
2529
|
```
|
|
2530
2530
|
|
|
2531
|
-
## @opentelemetry/sdk-trace@2.
|
|
2531
|
+
## @opentelemetry/sdk-trace@2.11.0
|
|
2532
2532
|
|
|
2533
2533
|
License: Apache-2.0
|
|
2534
2534
|
|
|
@@ -2736,7 +2736,7 @@ Apache License
|
|
|
2736
2736
|
limitations under the License.
|
|
2737
2737
|
```
|
|
2738
2738
|
|
|
2739
|
-
## @opentelemetry/sdk-trace-base@2.
|
|
2739
|
+
## @opentelemetry/sdk-trace-base@2.11.0
|
|
2740
2740
|
|
|
2741
2741
|
License: Apache-2.0
|
|
2742
2742
|
|
|
@@ -2944,7 +2944,7 @@ Apache License
|
|
|
2944
2944
|
limitations under the License.
|
|
2945
2945
|
```
|
|
2946
2946
|
|
|
2947
|
-
## @opentelemetry/sdk-trace-node@2.
|
|
2947
|
+
## @opentelemetry/sdk-trace-node@2.11.0
|
|
2948
2948
|
|
|
2949
2949
|
License: Apache-2.0
|
|
2950
2950
|
|
|
@@ -3416,7 +3416,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
3416
3416
|
SOFTWARE.
|
|
3417
3417
|
```
|
|
3418
3418
|
|
|
3419
|
-
## @upstash/redis@1.38.
|
|
3419
|
+
## @upstash/redis@1.38.3
|
|
3420
3420
|
|
|
3421
3421
|
License: MIT
|
|
3422
3422
|
|
|
@@ -4046,7 +4046,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
4046
4046
|
SOFTWARE.
|
|
4047
4047
|
```
|
|
4048
4048
|
|
|
4049
|
-
## jose@6.2.
|
|
4049
|
+
## jose@6.2.10
|
|
4050
4050
|
|
|
4051
4051
|
License: MIT
|
|
4052
4052
|
|
|
@@ -4192,7 +4192,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
4192
4192
|
SOFTWARE.
|
|
4193
4193
|
```
|
|
4194
4194
|
|
|
4195
|
-
## msgpackr@1.
|
|
4195
|
+
## msgpackr@1.12.1
|
|
4196
4196
|
|
|
4197
4197
|
License: MIT
|
|
4198
4198
|
|
|
@@ -4248,7 +4248,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
4248
4248
|
SOFTWARE.
|
|
4249
4249
|
```
|
|
4250
4250
|
|
|
4251
|
-
## multipasta@0.2.
|
|
4251
|
+
## multipasta@0.2.8
|
|
4252
4252
|
|
|
4253
4253
|
License: MIT
|
|
4254
4254
|
|
|
@@ -4590,7 +4590,7 @@ License: MIT
|
|
|
4590
4590
|
|
|
4591
4591
|
_(no bundled license text found in the package; see its npm page.)_
|
|
4592
4592
|
|
|
4593
|
-
## picomatch@4.0.
|
|
4593
|
+
## picomatch@4.0.7
|
|
4594
4594
|
|
|
4595
4595
|
License: MIT
|
|
4596
4596
|
|
|
@@ -5127,7 +5127,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
5127
5127
|
SOFTWARE.
|
|
5128
5128
|
```
|
|
5129
5129
|
|
|
5130
|
-
## undici@8.
|
|
5130
|
+
## undici@8.10.0
|
|
5131
5131
|
|
|
5132
5132
|
License: MIT
|
|
5133
5133
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/plugin-mail",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"description": "Transactional email plugin — one MailProvider contract, multiple adapters (Resend / Postmark / SendGrid / SMTP + console/memory for dev/test). Exposes a MailService via the plugin services layer with transient retry and a dev allowlist.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -33,19 +33,19 @@
|
|
|
33
33
|
"node": ">=24.0.0"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@effect/platform": "^0.97.
|
|
37
|
-
"@effect/sql": "^0.52.
|
|
36
|
+
"@effect/platform": "^0.97.1",
|
|
37
|
+
"@effect/sql": "^0.52.1",
|
|
38
38
|
"@effect/sql-pg": "^0.53.0",
|
|
39
|
-
"@voltro/env": "0.
|
|
40
|
-
"@voltro/logger": "0.
|
|
41
|
-
"@voltro/protocol": "0.
|
|
39
|
+
"@voltro/env": "0.67.0",
|
|
40
|
+
"@voltro/logger": "0.67.0",
|
|
41
|
+
"@voltro/protocol": "0.67.0"
|
|
42
42
|
},
|
|
43
43
|
"optionalDependencies": {
|
|
44
44
|
"nodemailer": "'>=9.0.5'"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@react-email/render": "^2.0.8",
|
|
48
|
-
"effect": "^3.22.
|
|
48
|
+
"effect": "^3.22.1",
|
|
49
49
|
"react": "^19.0.0",
|
|
50
50
|
"react-dom": "^19.0.0"
|
|
51
51
|
},
|