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
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
protom
cb5e0e3586
docs: add MIT license
2026-08-20 13:40:59 +02:00
protom
22e987bbb3
docs: marketing readme with brand assets and app screenshots
2026-08-20 12:30:54 +02:00
protom
1df7fb8fdb
Merge pull request #1 from tompro/release-please--branches--main--components--sattle
...
chore(main): release sattle 0.0.2
2026-08-20 12:19:19 +02:00
protom
16d27dce02
docs: add AGENTS.md knowledge base (root, protocol engine, e2e)
2026-08-20 12:03:11 +02:00
protom
d0573cd6b6
ci: release-please for version bumps, changelog and release tagging
2026-08-20 12:03:10 +02:00
protom
7841a13ba3
build: depend on upstream lnurlcash-kit (git-install PR merged), pinned to the merge commit
2026-08-20 10:59:58 +02:00
protom
68bdf29fd5
build: bump lnurlcash-kit past the upstream detached-fetch fix, drop the boot workaround
2026-08-20 10:53:13 +02:00
protom
f4b9377d17
feat: reusable mint fee math with cached quotes, fee-aware Max in move funds
2026-08-20 10:13:36 +02:00
protom
39261212cf
fix: discover a mint's signing key from the mint-address endpoint, not the payRequest
2026-08-20 09:54:26 +02:00
protom
3f22534cf0
feat: capacitor android platform project
2026-08-20 08:31:59 +02:00
protom
229e9fcf38
feat: deep link routing for lightning and lnurl schemes plus association files
2026-08-20 08:31:59 +02:00
protom
e59b722b5e
feat: native biometric unlock via biometric-gated wrap of the linking key
2026-08-20 08:31:59 +02:00
protom
f525b06966
feat: capability layer for clipboard, share and deep links with tests
2026-08-20 08:31:59 +02:00
protom
12851a2b1c
build: capacitor 8 dependencies, config and android sync scripts
2026-08-20 08:31:59 +02:00
protom
4683ffee57
test: e2e coverage for nwc settings and service lifecycle
2026-08-20 01:20:41 +02:00
protom
52211273b1
feat: nwc connections settings page with one-time connection strings and service lifecycle
2026-08-20 01:20:41 +02:00
protom
33318a5150
feat: nip-47 nwc wallet service engine with per-connection budgets
2026-08-20 01:20:41 +02:00
protom
34c97708f8
test: use a long sentinel id in the nostr backup no-plaintext assertion (short ids randomly appear in base64 ciphertext)
2026-08-20 00:00:08 +02:00
protom
2ab4ab194e
test: e2e coverage for backup and security pages
2026-08-19 23:55:59 +02:00
protom
1920a00cd6
feat: backup and security settings pages, nostr restore onboarding, passkey unlock entry
2026-08-19 23:55:59 +02:00
protom
7db34083e6
feat: webauthn prf passkey unlock engine as alternative wrap of the linking key
2026-08-19 23:55:59 +02:00
protom
7ecade32ee
feat: nostr kind-30078 backup engine with nip-44 self-encryption and merge-on-restore
2026-08-19 23:55:59 +02:00
protom
70e61c2f34
ci: run playwright e2e suite on github runners
2026-08-19 22:43:31 +02:00
protom
d2fc34ed25
test: e2e coverage for mint management and inter-mint transfer
2026-08-19 22:27:14 +02:00
protom
f631c7c264
feat: manage mints and move funds settings pages
2026-08-19 22:27:14 +02:00
protom
142734b903
feat: inter-mint transfer op with fee quote and ambiguity-safe outcomes
2026-08-19 22:27:14 +02:00
protom
7e091cd6ed
build: provide chromium in nix dev shell for playwright e2e
2026-08-19 21:36:48 +02:00
protom
05fc40263b
test: playwright e2e setup with onboarding, navigation and receive specs
2026-08-19 21:36:48 +02:00
protom
1839700215
fix: bind window.fetch at boot so lnurlcash-kit transport works in browsers
2026-08-19 21:36:48 +02:00
protom
1fe1453745
feat: wallet screens, branded header layout and mobile-first main view
2026-08-19 21:06:17 +02:00
protom
48e4c84092
feat: sattle branding, logo assets and generated app icons
2026-08-19 21:06:17 +02:00