Commit Graph
100 Commits
Author SHA1 Message Date
protom 5d6e092ae4 docs(lnurlcash): update the minting contract and test harness description 2026-09-05 15:21:55 +02:00
protom b2b5974dae chore: ignore Playwright MCP artifacts 2026-09-05 15:21:55 +02:00
protom f62e5d7ad4 build(deps): pin lnurlcash-kit 0.8.0 and conformance 0.7.0 2026-09-05 15:21:47 +02:00
protom a91ef30498 refactor(ops): require durable allocation and checkpoints 2026-09-05 11:59:34 +02:00
protom 8e9c9dcbbc feat(composables): route fund dialogs through the durable seam 2026-09-05 11:44:29 +02:00
protom 04e62110b6 fix(composables): commit carve checkpoints by output secret 2026-09-05 11:44:29 +02:00
protom 29830dc9e3 fix(nwc): await durable commits before responses 2026-09-05 11:38:29 +02:00
protom 22b1c5595c feat(ops): draw mint-touching output secrets from caller allocation 2026-09-05 11:34:01 +02:00
protom e6d0712258 feat(wallet): allocate operation secrets from the cash root 2026-09-05 11:33:42 +02:00
protom 3876791a0b feat(funds): recover staged mutations 2026-09-05 10:22:51 +02:00
protom a30c4bb2cc feat(trust): keep previous mint signing key verifiable 2026-09-05 10:22:24 +02:00
protom 7b7d4edaf3 test(stores): stub mutation locks in trust and nwc-drain harnesses 2026-09-05 09:42:51 +02:00
protom ff9e8a073e test(funds): fence harness on v2 owner install 2026-09-05 09:29:05 +02:00
protom e94549a16e fix(wallet): activate complete wallet material 2026-09-05 09:17:12 +02:00
protom 641608eff0 feat(backup): preserve BIP-32 counters 2026-09-05 08:22:21 +02:00
protom 0cec423d6f feat(funds): persist BIP-32 counters atomically 2026-09-05 08:22:02 +02:00
protom 7e4e67e1cd fix(unlock): bind factors to wallet material 2026-09-05 07:28:03 +02:00
protom aaee045916 test(passkeys): reverify exact-material slot binding 2026-09-05 07:27:56 +02:00
protom 9374a87d0d fix(passkeys): bind slots to wallet material 2026-09-04 21:27:14 +02:00
protom b7c0a33a69 feat(biometrics): unlock complete wallet material 2026-09-04 20:53:45 +02:00
protom 6099bb4b6b feat(passkeys): wrap complete wallet material 2026-09-04 20:19:48 +02:00
protom d48deeb6e0 feat(keys): persist BIP-32 wallet material 2026-09-04 19:46:15 +02:00
protom 0677b65016 docs: record lnurlcash 0.8 dependency pins 2026-09-04 18:48:41 +02:00
protom cbe49a83af build(deps): adopt lnurlcash-kit 0.8 contracts 2026-09-04 18:48:11 +02:00
protom 9408cf91d6 Merge pull request #7 from tompro/release-please--branches--main--components--sattle
chore(main): release sattle 0.0.4
2026-09-04 10:25:01 +02:00
protom 09f7fe0287 Merge pull request #8 from tompro/fix/carve-checkpoint
fix: commit carves before the settlement wait (#6)
2026-08-31 14:57:49 +02:00
protom 9e37fee841 fix: commit send, pay and move carves at the checkpoint (#6)
The three composables commit the carve inside onCarve via the existing
commitCarve helper instead of after the flow, falling back to a URL
lookup for no-mutation carves (which fire no hook). On
failed-funds-returned with a rotation, the re-secured note is added
before the burned carved note is marked spent.
2026-08-31 14:48:03 +02:00
protom 587dd11ba8 fix(lnurlcash): commit carves before the settlement wait (#6)
A flow that carves and then waits minutes on a settlement poll used to
commit the carve only after the whole flow resolved - an abort mid-wait
left burned inputs spendable locally and stranded the fresh outputs.
ensureExactAmount now reports a mutation-bearing carve through the new
FundOperationOptions.onCarve checkpoint the moment its outcome is known;
payWithBearers and transferBetweenMints thread it through.

Because the carve may now be committed before the flows' classification
rotates run, those rotations no longer rewrite carve.note in the result -
returned funds come back as a separate verified rotatedNote, so the
committed carve and the re-secured note can both be persisted. NWC's
payChangeset adapts to the rotatedNote field; its own commit timing is
unchanged (follow-up).
2026-08-31 14:48:03 +02:00
protom f3d5cc4b31 Merge pull request #5 from tompro/feat/named-mint-outputs
feat: support LUD-25 named mint outputs (lnurl-mint v0.4.0)
2026-08-31 14:19:59 +02:00
protom 50b2427b8d fix(lnurlcash): rescue landed mutations from retry refusals
A split, merge or rotate whose answer is 'Invalid or already spent k1.'
may be the refusal of a retried request that already LANDED - believing
it strands the fresh outputs server-side and desyncs the wallet (the
input is burned at the mint but still spendable locally, so every later
operation fails). All three flows now probe a would-be output when a
refusal carries fresh secrets: live outputs are adopted (or surfaced
unverified when the probe can't tell), a genuine refusal still fails.
2026-08-31 14:03:15 +02:00
protom 48be23dceb feat(lnurlcash): probe would-be outputs before believing a mutation refusal
The redeem callback is a GET and HTTP stacks retry GETs, so a mint can
execute the first attempt and refuse the repeat as an already-spent input
(LUD-25 says SHOULD replay; real mints refuse). The kit attaches the fresh
output secrets to every refusal - probeMutationOutput tells a landed
mutation from a genuine refusal. The harness wrapper reproduces the retry
against the mock.
2026-08-31 14:03:15 +02:00
protom 4cc8e0aba2 fix: replace forgesworn with moneyer in the public mint suggestions
@mint.forgesworn.dev is shutting down; @moneyer.dev takes its place in the
curated quick-start list.
2026-08-31 13:31:36 +02:00
protom 6bb07ff9ec fix(lnurlcash): assert named claims land at the wallet's own secret
Review feedback: bind the claim answer to the secret that was polled
before building a note from it. The kit already guarantees this -
claimMintedNote returns the queried secret by construction and
fetchNoteInfo rejects a mismatched k1 echo - so the assert cannot trip
through the kit (and is therefore not separately testable); it exists so
a future kit regression fails loudly instead of tracking a wrong secret.
2026-08-31 12:54:46 +02:00
protom 637376e291 docs(lnurlcash): document the two mint output modes
Reword the rotate-after-claim invariant for named outputs and fix the
test-harness pointer (ops.testHarness.ts, not test-utils.ts).
2026-08-31 12:23:10 +02:00
protom 39a144cf50 feat(receive): accept named mints that serve no verify URL
Named mints claim through the wallet's own secret, so a missing LUD-21
verify URL no longer blocks receiving; unnamed mints still require it -
there the preimage it reveals IS the claim.
2026-08-31 12:23:10 +02:00
protom ae5064b69a feat(nwc): make_invoice against mints with wallet-named outputs
The named-mint branch claims by the wallet's secret and treats the verify
preimage as an ordinary payment receipt - but keeps the rotated guard
before handing it out, because the rescue path (a mint that credited the
preimage despite the binding) claims through claimFromPreimage, where a
failed rotate leaves that preimage a live note secret. possibleCopy is
committed exactly like the unnamed path.
2026-08-31 12:23:10 +02:00
protom c9963934aa feat(funds): keep the claimable note of a pending named transfer
An unknown-still-pending transfer to a named mint carries the note at the
wallet's own secret in its claim material - persist it unverified like the
settled-claim-failed path already does, instead of dropping it with the
result object.
2026-08-31 12:22:56 +02:00
protom 67b2122e52 feat(lnurlcash): transfer to mints with wallet-named outputs
A named target needs no verify URL: the note appearing at the wallet's own
secret is the settlement proof, and it is claimed without a rotate. The
claim material carries the secret - and the unverified note at it - from
the start, so a melt settling after the poll budget is never a lost note;
the source-note oracle classification is unchanged.
2026-08-31 12:22:56 +02:00
protom 58268b2921 feat(lnurlcash): claim mint outputs named by a wallet-chosen secret
lnurl-mint >= 0.4 refuses a mint quote without comment=sha256(secret) and
keys the note by that secret instead of the payment preimage. prepareMint
detects the capability per mint (commentAllowed >= 64 or mintToHash),
binds the quote to a wallet-drawn secret, and claimMintedNote polls the
note itself - no preimage, no rotate, since the secret never rode an
invoice. Mints that never advertised the capability get the byte-identical
old request and stay on the preimage path; a mint that took the hash but
credited the preimage is caught by the claim poll and rescued through the
quote's verify URL. The d.ts augments the conformance package's stale
published declarations for its comment-naming flags.
2026-08-31 12:22:45 +02:00
protom 9f4ae3b0f5 refactor(lnurlcash): generalize bounded polling beyond verify endpoints
pollVerifyUntilSettled keeps its exact behavior and messages, reimplemented
on a generic pollUntil so flows that watch something other than a LUD-21
verify (a named mint output appearing) share the same backoff, budget and
abort semantics.
2026-08-31 12:22:30 +02:00
protom bb147faef1 build(deps): bump lnurlcash-kit to 0.5.0 and lnurlcash-conformance to 0.4.0
The kit release line adds the LUD-25 output-naming protocol (comment/h on
the pay callback, claim polling, merge batching); the mock mint now
defaults to plain https withdraw links and serves the originally issued
invoice on verify, which the two adapted tests pinned the old shape of.
2026-08-31 12:22:21 +02:00
protom bfa0572090 Merge pull request #4 from tompro/release-please--branches--main--components--sattle
chore(main): release sattle 0.0.3
2026-08-24 19:07:58 +02:00
protom 338b2812e3 Merge pull request #3 from tompro/refactor/wallet-integrity
fix(wallet): enforce owner-bound integrity and durable commits
2026-08-24 16:30:06 +02:00
protom e892a330fc fix: consume owner monitor transition failures 2026-08-24 16:26:29 +02:00
protom 72f387f6e5 docs: document wallet integrity boundaries 2026-08-22 16:56:50 +02:00
protom 76d59d8d08 test: harden NWC browser lifecycle coverage 2026-08-22 16:56:49 +02:00
protom a40079200d test: cover wallet lifecycle through the browser 2026-08-22 16:56:49 +02:00
protom 578613c869 refactor: split wallet onboarding panels 2026-08-22 16:56:49 +02:00
protom 3c2a2cc4a5 feat: await trusted mint management actions 2026-08-22 16:56:49 +02:00
protom 401a26dc6b fix: fence send and pay flows 2026-08-22 16:56:38 +02:00
protom f087ebe2f2 fix: surface receive post-commit trust failures 2026-08-22 16:56:38 +02:00
protom c59521a421 fix: commit carved wallet funds atomically 2026-08-22 16:56:38 +02:00
protom 3f6010b312 feat: restore Nostr backups through wallet lifecycle 2026-08-22 16:56:37 +02:00
protom 99e6ae1b12 fix: await wallet commits in the NWC store 2026-08-22 16:56:37 +02:00
protom 81c28ec16d feat: scope trusted mint state in Pinia 2026-08-22 16:56:25 +02:00
protom e98373491f fix: drain accepted NWC work before wallet lock 2026-08-22 16:56:25 +02:00
protom 2e0f0038f7 feat: invalidate stale wallet tabs 2026-08-22 16:56:25 +02:00
protom 3acc63e968 fix: clear runtime state after lifecycle failures 2026-08-22 16:56:25 +02:00
protom c319e11d3e feat: activate only proven wallet owners 2026-08-22 16:56:24 +02:00
protom 62b93baa05 feat: serialize wallet lifecycle transitions 2026-08-22 16:56:11 +02:00
protom 5b3a69e910 feat: apply wallet fund changes atomically 2026-08-22 16:56:11 +02:00
protom 9fa4abdaf3 feat: fence wallet mutations by lifecycle owner 2026-08-22 16:56:11 +02:00
protom 54031dc8de fix: publish activity only after persistence 2026-08-22 16:56:10 +02:00
protom e9bbb358aa fix: mirror trusted mint commits across tabs 2026-08-22 16:56:10 +02:00
protom 83c9e5b95f feat: converge trusted mints on storage events 2026-08-22 16:55:47 +02:00
protom d735aca885 feat: serialize trusted mint transactions 2026-08-22 16:55:47 +02:00
protom 82f008b33f feat: validate trusted mint registry envelopes 2026-08-22 16:55:47 +02:00
protom d890a69c40 feat: preserve trusted mint rekey transitions 2026-08-22 16:55:47 +02:00
protom 7890a492f3 refactor: export owner-aware NWC APIs 2026-08-22 16:55:47 +02:00
protom 3ed214c157 feat: drain tracked NWC handlers on stop 2026-08-22 16:55:36 +02:00
protom 513c67fc14 fix: hide invoice settlement until commit 2026-08-22 16:55:35 +02:00
protom 09b7b63c9d fix: await NWC payment bearer commits 2026-08-22 16:55:35 +02:00
protom fff24a75b2 fix: preserve conservative NWC budget debits 2026-08-22 16:55:35 +02:00
protom b52172c0cb fix: validate NWC requests before dispatch 2026-08-22 16:55:35 +02:00
protom 228a92b0f0 feat: create owner-bound NWC connections 2026-08-22 16:55:24 +02:00
protom 9f6bcad706 feat: scope NWC storage to wallet owners 2026-08-22 16:55:23 +02:00
protom 3054834cdb test: split NWC protocol harness 2026-08-22 16:55:23 +02:00
protom 845ec410e5 feat: expose fund ownership assertions 2026-08-22 16:55:23 +02:00
protom 02f901c87c fix: fence inter-mint transfer operations 2026-08-22 16:55:23 +02:00
protom c4c9d8a94a fix: fence invoice payment operations 2026-08-22 16:55:12 +02:00
protom 7f69f781f5 fix: fence mint and receive operations 2026-08-22 16:55:12 +02:00
protom 6fa4283ed6 fix: fence carve operations before mutation 2026-08-22 16:55:12 +02:00
protom 22420b9112 test: split wallet operation harness 2026-08-22 16:55:12 +02:00
protom f55f208836 feat: await owner-aware Nostr restores 2026-08-22 16:55:12 +02:00
protom 7607e47358 feat: apply owner-aware wallet backups 2026-08-22 16:55:00 +02:00
protom 0862a10b01 fix: validate auxiliary wallet storage 2026-08-22 16:55:00 +02:00
protom 586d12b666 feat: commit bearer changesets in one write 2026-08-22 16:55:00 +02:00
protom 69fbdb68ee feat: add persisted owner guards and events 2026-08-22 16:55:00 +02:00
protom 1dbf5788f9 fix: normalize storage lock failures 2026-08-22 16:55:00 +02:00
protom 12e4ec9199 feat: scope passkey slots to proven owners 2026-08-22 16:54:49 +02:00
protom d9be457221 feat: harden passkey ceremonies 2026-08-22 16:54:49 +02:00
protom 058b10ddf1 refactor: isolate passkey wrapping crypto 2026-08-22 16:54:48 +02:00
protom acfab83438 feat: bind saved keys to versioned wallet owners 2026-08-22 16:54:48 +02:00
protom 0e0133f550 test: split Nostr backup integration cases 2026-08-22 16:54:48 +02:00
protom b258d86af7 refactor: isolate Nostr backup publishing transport 2026-08-22 16:54:29 +02:00
protom 2a90343e7e refactor: validate Nostr backup event payloads 2026-08-22 16:54:29 +02:00
protom b6fff605a1 refactor: tighten protocol amount helpers 2026-08-22 16:54:29 +02:00
protom 8548afcd21 refactor: add strict JSON parsing helpers 2026-08-22 16:54:29 +02:00
protom 30d1d0aeae build: pin LNURLcash protocol packages to npm 0.1.1 2026-08-22 16:54:28 +02:00
protom 84441f53e3 Merge pull request #2 from tompro/chore/mit-license
docs: add MIT license
2026-08-20 13:43:37 +02:00