aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/migrate
Commit message (Collapse)AuthorAgeFilesLines
* migrate: hand the name over to the registrar too — after flagging the ↵Adam Soltys2026-08-301-0/+28
| | | | | | | account, tell names.coinos.io which v3 identity may claim it (MIGRATE_TOKEN), with retries; without the grant the registrar squat guard refused every migrated claim Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MrkLsNScXe9b6BviUSdmMr
* migrate: shorter button, drop the destination rowAdam Soltys2026-08-031-5/+2
| | | | | | | | | | "Move my balance and address to coinos v3" wrapped on a phone; the paragraph above already says what happens, so the button is just "Migrate". The destination row went with it — it only ever said "your coinos v3 wallet". Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* migrate: flag the account instead of renaming itAdam Soltys2026-08-032-38/+12
| | | | | | | | | | Renaming to <name>v2 was a hack for freeing the username, and v3/v4/v9 fallbacks made it worse. The page now sweeps the balance and sets the new `migrated` flag: the registrar takes over receiving for the name while the old account keeps working here, unchanged. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* migrate: the retired name has to be letters and numbers onlyAdam Soltys2026-08-032-9/+32
| | | | | | | | | | The server enforces /^[\p{L}\p{N}]{2,24}$/u, so <name>_v2 was rejected outright. Candidates are <name>v2, v3, … each trimmed to fit the 24-char limit (so a long username still lands inside it), and the rename walks to the next one if a retired name is already taken. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* migrate: don't show the temporary v3 addressAdam Soltys2026-08-031-1/+3
| | | | | | | | | | It's an npub-shaped placeholder, and the whole point of the page is that the user keeps their real username — seeing "[email protected]" as the destination just reads as a mistake. The row says "your coinos v3 wallet" instead. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* migrate: run the sweep server-side, and send the whole balanceAdam Soltys2026-08-032-88/+121
| | | | | | | | | | | | | | | | | | Two fixes from the first live test: The POST went out from the browser, where $lib/utils' base is "" — so it hit the SvelteKit page route and came back "POST method not allowed". Payments in this app all run server-side with auth(cookies), because that's where the session token is usable; /migrate is a form action now like the rest of the send flows. And the routing reserve is gone: the ASP's node has two direct channels to ln.coinos.io, so a sweep is one hop and costs nothing. It sends the full balance, only retrying 0.5% lighter if a payment actually comes back short. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
* migrate: satisfy the type checker on the error pathAdam Soltys2026-08-031-1/+1
|
* Add /migrate: hand a legacy account over to coinos v3Adam Soltys2026-08-032-0/+128
coinos v3 links here with ?to=<the user's new payment address>&back=<url>. The user is already signed in on this site, so no password or key has to travel anywhere: we fetch an invoice from the v3 registrar for the balance (less a small routing reserve), pay it, then rename the account to <username>_v2 — which releases the username so v3's registrar will let them claim it. Old account stays, renamed, and stops receiving. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi