This release adds the draft Nutroot specification, gated on version 3 (BLS) keysets. Note, there are a few more v5 breaking changes since rc.09, please check the migration-5.0.0.md document.
What's Changed
- chore(deps): bump replace-in-file from 8.4.0 to 9.0.0 by @dependabot[bot] in #1065
- chore(deps): bump @types/node from 25.6.0 to 26.2.0 by @dependabot[bot] in #1064
- chore(deps): bump typescript-eslint from 8.67.0 to 8.68.0 in the eslint group by @dependabot[bot] in #1061
- chore(deps): bump @eslint/js from 9.39.4 to 9.39.5 in the dev-tooling group by @dependabot[bot] in #1062
- chore(deps): bump the commitlint packages to 21.2.2 by @dependabot[bot] in #1063
- chore: group the commitlint and vite bumps with their families by @robwoodgate in #1074
- chore: drop four unused devDependencies by @robwoodgate in #1075
- chore(deps): bump @types/node from 26.2.0 to 26.4.0 in the dev-tooling group across 1 directory by @dependabot[bot] in #1076
- chore(deps): bump lint-staged from 16.4.0 to 17.3.0 by @dependabot[bot] in #1078
- fix(utils): guard the keysetIds argument of getDecodedToken by @robwoodgate in #1084
- fix(transport): never retry a request carrying a Blind-auth header by @robwoodgate in #1090
- feat(nutroot): nutroot secrets for v3 keysets (NUT-10) by @robwoodgate in #950
- feat(nutroot): adapt NIP-07 browser signers to both lock families by @robwoodgate in #1005
- fix(nutroot): tighten v3 spending, requests and melt outputs by @robwoodgate in #1092
- fix(wallet): normalise quote amounts in WebSocket updates by @robwoodgate in #1088
- fix(wallet): unblind melt change and restore with the keyset the mint signed under by @robwoodgate in #1081
- feat(events): polling fallback behind every NUT-17 subscription by @robwoodgate in #1072
- feat(nut14): preimage option for spending HTLC inputs by @robwoodgate in #1071
- test: import LockBuilder and the BLS helpers statically by @robwoodgate in #1093
- perf(wallet): restore only the counters a scan needs by @robwoodgate in #964
- feat(wallet): accept a custom hash-to-curve for proof state checks by @robwoodgate in #1080
- fix(wallet): unblind swap and mint outputs with the keyset the mint signed under by @robwoodgate in #1095
- fix(utils): tighten UTF-8, CBOR and TLV decoding by @robwoodgate in #1097
- fix(nut26): reject repeated singular TLV tags and untyped policy flags by @robwoodgate in #1099
- fix(nut11): reject malformed P2PK tag values and bound key lists by @robwoodgate in #1101
- fix(nut11): bind SIG_INPUTS signatures to the secret and honour overlapping HTLC refunds by @robwoodgate in #1104
- fix(nut11): validate a SIG_ALL signing package before signing it by @robwoodgate in #1106
- refactor(crypto): sign and verify P2PK over a digest by @robwoodgate in #1108
- fix(crypto): validate helper inputs at the boundary by @robwoodgate in #1111
- fix(wallet): require a 64-byte seed at construction by @robwoodgate in #1113
- fix(model): tighten Amount construction and strict wire JSON parsing by @robwoodgate in #1114
- fix(mint): validate and bound mint response shapes by @robwoodgate in #1116
- fix(mint): strip wallet fields from inputs and bind melt responses by @robwoodgate in #1118
- test(wallet): give the restore state-check scan a 15s budget by @robwoodgate in #1120
- fix(transport): bound the WebSocket queue and tear down cleanly by @robwoodgate in #1121
- fix(model): validate persisted outputs and pin the hash-to-curve counter by @robwoodgate in #1123
- fix(transport): scope request logs, merge headers case-insensitively, sanitize log context by @robwoodgate in #1125
- feat(crypto): hash the transcript plainly, tag the BAT message by @robwoodgate in #1129
- fix(wallet): enforce payment-request terms and guard counters, previews and cache age by @robwoodgate in #1127
- chore(deps): bump the dev-tooling group with 4 updates by @dependabot[bot] in #1132
- fix(core): reject incomplete DLEQ proofs on encode and decode by @robwoodgate in #1135
- chore(deps): bump typescript-eslint from 8.68.0 to 8.69.0 in the eslint group by @dependabot[bot] in #1131
- fix(auth): install OIDC tokens through the session they belong to by @robwoodgate in #1137
- chore(ci): run the auth demo against a live mint by @robwoodgate in #1139
- fix(wallet): bind created quotes to what was asked for by @robwoodgate in #1141
- fix(wallet): keep the keychain consistent across refreshes and cache loads by @robwoodgate in #1143
- fix(auth): bound OIDC reads and delays, refuse redirects and non-S256 PKCE by @robwoodgate in #1145
- fix: throw CTSError from the last four bare Error sites, and lint for it by @robwoodgate in #1147
- docs: note that getKeyset looks up an explicit empty id in the v5 migration guide by @robwoodgate in #1148
- refactor(wallet)!: drop the wire payload from mint previews by @robwoodgate in #1150
- chore(main): release 5.0.0-rc.10 by @robwoodgate in #1086
Full Changelog: v5.0.0-rc.9...v5.0.0-rc.10