aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
Commit message (Collapse)AuthorAgeFilesLines
* nostr: fetch the encrypted key with the password when there's no session keyHEADmasterAdam Soltys29 hours1-1/+6
| | | | | | | | | Without the sk cookie from a password login (nostr logins, older sessions) the reveal button was hidden and signing failed. Ask for the password and get the key from /nsec instead. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UjHzoBmW1iPpEe5qC2LDYB
* nostr: sign with the session key instead of the encrypted key from /meAdam Soltys6 days1-3/+9
| | | | Co-Authored-By: Claude Opus 5.5 <[email protected]>
* ecash: carry pasted tokens in the URL instead of storing them server-sideAdam Soltys2026-09-271-4/+2
| | | | | | | | The server no longer accepts anonymous token uploads. A pasted token now redirects straight to /ecash/<token>, and the page asks the server for the token's status statelessly. Ids from previously shared links still resolve. Co-Authored-By: Claude Fable 5.1 <[email protected]>
* invoice: a reusable bolt12 offer has no terminal paid stateAdam Soltys2026-09-221-1/+6
| | | | | | | | | | | | | | | | | | | | | A bolt12 offer is a standing payment code. CLN derives the same offer_id from the same (amount, description), so re-creating one hands back the original record, whose `received` has accumulated over the offer's whole lifetime. The invoice layout read that as "this invoice was paid" and redirected to the success screen, so reopening a long-lived offer never showed the QR and left no way to copy the lno. Treat a payment as celebratory only when it arrives while the page is open: the socket handler now passes the amount of that payment as `?paid=<amount>`, and the layout uses it in place of the lifetime total for reusable offers. Single-use invoices keep the existing logic, so a partly-paid invoice still stays on the QR rather than celebrating early. The success screen showed lifetime `received` for the same reason, which misreported a single payment to a long-lived offer; it now renders the amount the socket reported, which is already net of tip. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
* send: quote the lightning routing fee up front and add Max to lightning sendsAdam Soltys2026-09-211-0/+14
| | | | | | | | | | | | | | | | | | | The lightning send page now asks the server what the payment will cost before showing the Send button: the exact routing fee from the route query, the platform fee, and the total. The quoted fee is submitted as the maxfee, so what the user sees is what gets debited; advanced settings still let them override it, and if the quote fails the page falls back to the old 2% reserve. Max on the amount step asks the server for the largest amount whose amount + routing fee + platform fee lands exactly on the balance, and for an offer picks up the invoice fetched for that exact amount. LNURL-pay gets a Max button too. The invoice only exists once we name an amount, so the action fetches a probe invoice at the ceiling, lets the server solve for the amount, then fetches the real invoice for it. Co-Authored-By: Claude Fable 5.1 <[email protected]>
* ecash: drop the mint account special-case and the mint routeAdam Soltys2026-09-161-1/+0
| | | | | | | The server no longer keeps a house ecash pool, so there is no mint account to skip when parsing a payment and no /ecash/mint endpoint. Co-Authored-By: Claude Fable 5.1 <[email protected]>
* register: start the session from the register responseAdam Soltys2026-09-141-9/+30
| | | | | | | | | | | /register now verifies the recaptcha token itself, and Google tokens are single-use — so the follow-up /login that reused the same token came back "failed captcha" for an account that had just been created. The register response already carries the JWT; set the session cookies from it and only fall back to /login when registration itself failed. Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_0166Ci2XdCair1B9ych7w8dq
* Only pay internally when the name is really a local accountAdam Soltys2026-08-021-1/+10
| | | | | | | | | | Addresses at our own domain used to have the domain stripped and get paid internally on the assumption that every one of them was ours. v3 payment addresses live at the same domain, so check the account exists first and otherwise leave the address intact — it then flows through the normal lightning-address path. Co-Authored-By: Claude Fable 5 <[email protected]>
* bolt12 zaps: accept offers in send flow, show/publish user offerAdam Soltys2026-07-301-2/+2
| | | | | | | | | | - parse lno= from BIP-321 bitcoin: URIs; send page parses offers for preview now that /parse handles them - settings/nostr shows the user's standing lno1 offer with copy/QR and a button to publish it as a kind 10058 offer list for NIP-177 zaps - new locale strings translated Co-Authored-By: Claude Fable 5 <[email protected]>
* Fix parse matching subdomain addresses as local usersAdam Soltys2026-02-251-1/+1
| | | | Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix: pass Uint8Array to finalizeEvent and nip04 (nostr-tools API change)Adam Soltys2026-02-141-6/+7
| | | | Co-Authored-By: Claude Opus 4.6 <[email protected]>
* fix importsAdam Soltys2026-02-092-2/+2
|
* skip captcha for fundsAdam Soltys2026-02-061-3/+10
|
* forward host headerAdam Soltys2026-02-061-1/+1
|
* fix tor loginAdam Soltys2026-02-061-9/+16
|
* fix importAdam Soltys2026-01-271-7/+6
|
* forward ip to backendAdam Soltys2026-01-272-2/+17
|
* redirect on invalid tokenAdam Soltys2026-01-211-0/+14
|
* captchaAdam Soltys2026-01-211-1/+7
|
* login challengeAdam Soltys2025-10-011-2/+0
|
* fix nostr cancel buttonAdam Soltys2025-09-301-2/+8
|
* register captchaAdam Soltys2025-09-281-0/+2
|
* pass cookies to parseAdam Soltys2025-09-181-3/+3
|
* sendinvoice supportAdam Soltys2025-09-181-1/+4
|
* upgrade dependenciesAdam Soltys2025-09-091-22/+40
|
* prevent redirect while navigatingAdam Soltys2025-09-091-2/+1
|
* look for bip21 lightning earlierAdam Soltys2025-07-261-6/+6
|
* handle null tipsAdam Soltys2025-07-192-2/+4
|
* prompt for tip for auto paysAdam Soltys2025-07-191-6/+5
|
* user onboardingAdam Soltys2025-07-101-1/+1
|
* fund sweepAdam Soltys2025-07-072-0/+52
|
* fix magic stringAdam Soltys2025-05-271-1/+1
|
* default to back camera for ios, remember cameraAdam Soltys2025-03-141-0/+1
|
* handle peanutsAdam Soltys2025-03-121-0/+21
|
* handle nostr inputsAdam Soltys2025-02-281-0/+7
|
* version bumpAdam Soltys2025-02-281-4/+0
|
* assetsAdam Soltys2025-02-281-0/+4
|
* fix bip21 parse without amountAdam Soltys2025-02-031-3/+5
|
* fix nostr connectAdam Soltys2025-01-231-3/+8
|
* use nsec if availableAdam Soltys2025-01-221-1/+12
|
* missing variableAdam Soltys2025-01-221-1/+1
|
* notesAdam Soltys2025-01-211-0/+22
|
* nostr routesAdam Soltys2025-01-201-0/+1
|
* allow mint self-paymentsAdam Soltys2025-01-171-0/+1
|
* wrap decrypt in tryAdam Soltys2025-01-171-5/+7
|
* event viewer and zapsAdam Soltys2025-01-161-0/+9
|
* update translationsAdam Soltys2025-01-123-3/+66
|
* nostr signingAdam Soltys2025-01-094-46/+96
|
* nostr signinAdam Soltys2025-01-072-45/+19
|
* scrap key generationAdam Soltys2024-12-301-23/+2
|