Skip to content

feat: add experimental local wallet creation - #367

Open
replghost wants to merge 7 commits into
mainfrom
feat/pwa-wallet
Open

replghost wants to merge 7 commits into
mainfrom
feat/pwa-wallet

Conversation

@replghost

@replghost replghost commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Experimental local wallet: creation, handover, usernames, allowances

Everything here is behind the Experimental local wallet setting (packages/config/src/mode.ts). It builds on the local signer from #362: protocol-frame storage, local-wallet-handler, and the signing worker.

Creation (55731f2)

  • Generates a 24-word phrase and saves the wallet only after the user confirms the backup.
  • Adds the opt-in setting. It is on by default on test deployments and localhost, and off on dot.li.

One signing tab per browser profile

  • The protocol frame holds a Web Lock lease (packages/protocol/src/wallet-owner.ts) and runs a handover over BroadcastChannel. The new request localWalletOwner is only accepted from host and landing origins.
  • Before a page boots a local core, it takes the lease. If another tab holds it, that tab disposes its cores, releases the lock and shows the paused banner: "Paused: the test wallet is in use in another tab. Click or type here to use it in this tab." The next click or key press in that tab reloads it and takes the wallet back.
  • If the protocol frame holding the lease goes away, the page pauses too, so two tabs never sign at once.
  • If the tab holding the wallet does not respond, the new tab shows a "Test wallet is open in another tab" error page.
  • A save or forget in one tab broadcasts local-wallet-changed to the others. Their wallet mode or keys are now out of date, so they pause until reloaded.

Usernames through the identity proxy

  • scripts/identity-proxy.ts and nginx/snippets/dotli-identity-proxy.conf add a same-origin proxy on root and shell origins only, with a fixed list of routes. Product, app and protocol origins get 404.
  • Wired into the dev, preview and serve servers, the nginx templates, the Makefile (ci-deploy-nginx), and an opt-in step in the deploy workflow. Documented in README, DEPLOYMENT and docs/docker.
  • New network field identityBackendBaseUrl.
  • In the Wallet tab:
    • The username People holds for the account is shown as verified.
    • A base-name field (the network adds .##) checks availability and claims the name.
    • The page builds the same proofs a native signing host builds: the sr25519 backend auth, plus the ring-VRF member key and proof from the core's own published truapi_verifiable module. Only public keys and signatures leave the browser.
    • A claim counts once People records it. The live cores then re-activate under the new name.

Usage & allowances

  • A read-only snapshot from finalized chain state for the current product:
    • PGAS balance on Asset Hub for the product's Index(0) account.
    • Bulletin TransactionStorage.Authorizations for the product's storage account.
  • Each section names the block it was read at. Sections that cannot be read show the reason; nothing is inferred.
  • Statement-store slots and the PGAS and Bulletin claim pools are not shown. @parity/truapi-host 0.24 has no allowance snapshot export, and they cannot be read reliably from the page.

Temporary light-client submit fallback

  • In local wallet mode only: when a light-client author_submitAndWatchExtrinsic watch ends dropped, the same bytes are sent again through the trusted RPC node. This works around smoldot's MissingProofEntry on PGAS claim_pgas.
  • The broker routes legacy author_extrinsicUpdate watches again.
  • Documented in docs/chain-connections.md, with criteria for removing it.

Verification

  • npm run typecheck, npm run lint, npm run format:check: pass.
  • npm test: every package passes. Under parallel load, three timing-sensitive debug-panel tests (early-buffer, panel-work, panel) failed once. They pass when run on their own (85/85).
  • The derived keys match the published core wasm. The username tests check every signature against the SCALE bytes the pallets verify.
  • The CI-env build passes. The panel chunk loads truapi_verifiable lazily, and its wasm stays out of the service worker precache.
  • local-wallet.spec.ts, including the new two-tab handover test, passes 3/3 against Paseo Next V2. The banner appears in the tab that lost the wallet; a click takes the wallet back and pauses the other tab.
  • Full functional suite on the CI-env build: 71 passed, 13 skipped, 0 failed.
  • The Wallet tab shows the username read from People (… · verified on People) and the live Usage & allowances section for the product.

@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

Bundle Size Report

Eager path (module entry + modulepreloaded chunks):

Path Raw Brotli Gzip
host/(eager path) 416.9 KB (+3.5 KB) 142.4 KB (+1.1 KB) 162.6 KB (+1.5 KB)
host/landing/(eager path) 353.2 KB (+3.5 KB) 119.7 KB (+1.1 KB) 137.1 KB (+1.5 KB)
sandbox/(eager path) 242.0 KB (+108 B) 69.4 KB (+19 B) 80.5 KB (+35 B)

Chunks over 500 KB:

File Raw Brotli Gzip
host/assets/truapi_provider_bg.wasm 4.01 MB 955.7 KB 1.27 MB
host/assets/truapi_server_bg.wasm 2.70 MB 731.0 KB 965.5 KB
host/assets/truapi_signing_bg.wasm 2.92 MB 791.8 KB 1.02 MB
host/assets/truapi_verifiable_bg.wasm (×2) 9.79 MB (+4.89 MB) 9.22 MB (+4.61 MB) 9.28 MB (+4.64 MB)
Total 21.28 MB (+4.97 MB) 12.25 MB (+4.63 MB) (compression rate: 42%) 13.20 MB (+4.67 MB)
All files
File Raw Brotli Gzip
host/.well-known/apple-app-site-association 505 B 505 B 505 B
host/.well-known/assetlinks.json 2.1 KB 343 B 427 B
host/assets/AccountContent.js 2.4 KB 1.1 KB (+2 B) 1.2 KB (-3 B)
host/assets/AnchoredContent.js 2.1 KB 825 B (+1 B) 901 B (+2 B)
host/assets/AuthButton.css 1.5 KB 534 B (-1 B) 633 B
host/assets/AuthButton.js 4.6 KB 1.9 KB (+6 B) 2.1 KB (+4 B)
host/assets/AuthModal.css 3.4 KB (+17 B) 815 B (+3 B) 961 B (+6 B)
host/assets/AuthModal.js 8.0 KB (+11 B) 2.9 KB (-9 B) 3.2 KB (+6 B)
host/assets/Button.js 2.1 KB 954 B (+10 B) 1.1 KB (+1 B)
host/assets/ChainsContent.js 7.3 KB 2.5 KB (+2 B) 2.8 KB (+1 B)
host/assets/ChatDock.js 2.3 KB 1.1 KB (-3 B) 1.2 KB (-1 B)
host/assets/ChatDock.css 469 B 469 B 469 B
host/assets/ChatPanel.js 20.6 KB 6.4 KB (+17 B) 7.2 KB (+1 B)
host/assets/ChatPanel.css 5.8 KB 1.3 KB (-1 B) 1.5 KB
host/assets/Chip.js 435 B 435 B 435 B
host/assets/DropdownMenu.js 2.5 KB 1.2 KB (-12 B) 1.3 KB (+1 B)
host/assets/DropdownMenu.css 788 B 788 B 788 B
host/assets/DropdownMenuSurface.js 2.0 KB 912 B (-1 B) 1.0 KB
host/assets/FloatingLayer.js 2.6 KB 1.1 KB 1.2 KB (+1 B)
host/assets/IconButton.js 1.3 KB 633 B (+8 B) 740 B
host/assets/LandingAuth.js 238 B 238 B 238 B
host/assets/LandingNav.css 1.5 KB 488 B (+6 B) 581 B
host/assets/LandingNav.js 2.8 KB 1.3 KB (-4 B) 1.5 KB (-1 B)
host/assets/LandingPart.js 648 B 648 B 648 B
host/assets/LandingRecents.css 1.3 KB 459 B (+5 B) 580 B (+3 B)
host/assets/LandingRecents.js 2.6 KB 1.1 KB (-5 B) 1.2 KB (+5 B)
host/assets/LoadingScreen.js 3.8 KB (-16 B) 1.7 KB (-3 B) 2.0 KB (+8 B)
host/assets/LoadingScreen.css 3.3 KB (-31 B) 1.0 KB (-12 B) 1.2 KB (-13 B)
host/assets/LogoWordmark.css 15.5 KB (+17 B) 3.0 KB (-4 B) 3.4 KB (+7 B)
host/assets/Modal.js 2.7 KB 1.0 KB 1.1 KB (+2 B)
host/assets/ModalLayer.js 5.0 KB 2.1 KB (+1 B) 2.3 KB (+1 B)
host/assets/PermissionsContent.js 4.5 KB 1.7 KB (-4 B) 1.9 KB (+2 B)
host/assets/Popover.js 4.3 KB 1.7 KB (-4 B) 1.9 KB
host/assets/PopoverSurface.js 1.3 KB 645 B (+28 B) 706 B (+1 B)
host/assets/SectionLabel.js 1.1 KB 399 B 450 B (-1 B)
host/assets/SegmentedControl.js 1.5 KB 737 B 830 B (-1 B)
host/assets/SessionStore.js 34.0 KB (-1.9 KB) 9.0 KB (-882 B) 11.4 KB (-904 B)
host/assets/SettingsContent.js 10.0 KB (+358 B) 3.2 KB (+58 B) 3.7 KB (+84 B)
host/assets/SettingsContent.css 4.1 KB 1013 B (+1 B) 1.2 KB (-3 B)
host/assets/ShieldIcons.js 1.2 KB 460 B 530 B
host/assets/Spinner.js 241 B 241 B 241 B
host/assets/StatusDot.css 563 B 563 B 563 B
host/assets/StatusDot.js 563 B 563 B 563 B
host/assets/Surface.js 1.6 KB 687 B (+2 B) 774 B (+1 B)
host/assets/Topbar.astro_astro_type_script_index_0_lang.js 468 B 468 B 468 B
host/assets/TopbarActions.js 9.6 KB 3.3 KB (+25 B) 3.7 KB (+5 B)
host/assets/TopbarActions.css 1.3 KB 480 B 587 B
host/assets/TopbarReveal.js 806 B 806 B 806 B
host/assets/TopbarReveal.css 687 B 687 B 687 B
host/assets/UrlPill.astro_astro_type_script_index_0_lang.js 528 B 528 B 528 B
host/assets/UrlPillShield.css 956 B 956 B 956 B
host/assets/UrlPillShield.js 4.6 KB 1.6 KB (+2 B) 1.8 KB (+3 B)
host/assets/VerificationContent.js 1.3 KB 617 B (-7 B) 720 B (+2 B)
host/assets/Well.js 1.2 KB 534 B (+3 B) 614 B
host/assets/_md.js 1.8 KB (+209 B) 849 B (+50 B) 946 B (+79 B)
host/assets/account.js 1.2 KB 564 B (+1 B) 643 B (-1 B)
host/assets/active.CPsmhfHv.js 238 B 238 B 238 B
host/assets/app-roots.js 351 B 351 B 351 B
host/assets/auth-controller.js 5.2 KB 2.0 KB (-2 B) 2.3 KB
host/assets/auth.js 386 B 386 B 386 B
host/assets/base.js 4.6 KB 1.9 KB 2.0 KB
host/assets/bitswap.js 12.1 KB (-28 B) 4.2 KB (-17 B) 4.7 KB (-15 B)
host/assets/blake2.js (×2) 10.0 KB (-2.7 KB) 3.8 KB (-1.1 KB) 4.3 KB (-1.2 KB)
host/assets/bridge.js 128.9 KB (+3.7 KB) 29.6 KB (+966 B) 35.6 KB (+1.3 KB)
host/assets/broken.js 248 B 248 B 248 B
host/assets/browser.js 22.6 KB 7.4 KB 8.4 KB
host/assets/chain-sync.js 2.9 KB 1.2 KB 1.3 KB (-1 B)
host/assets/chat-panel.js 2.7 KB 1.0 KB (+2 B) 1.1 KB
host/assets/cid-cache.js 2.0 KB 869 B (-1 B) 965 B (+2 B)
host/assets/client.js (×2) 18.0 KB (+811 B) 6.4 KB (+214 B) 7.0 KB (+207 B)
host/assets/create-store.js 107.6 KB 32.2 KB (-33 B) 36.1 KB (-2 B)
host/assets/db.js 2.3 KB 811 B 941 B (+1 B)
host/assets/device.js 235 B 235 B 235 B
host/assets/dist.js 65 B 65 B 65 B
host/assets/dot-url.js 232 B 232 B 232 B
host/assets/dotli-debug-bus.js (×2) 798 B 798 B 798 B
host/assets/drag.js 430 B 430 B 430 B
host/assets/error-copy.js 259 B 259 B 259 B
host/assets/errors.js (×3) 3.4 KB 1.9 KB 2.0 KB
host/assets/fetch.js 64.8 KB 16.8 KB (+20 B) 19.3 KB (-1 B)
host/assets/fit.js 584 B 584 B 584 B
host/assets/focus.js 1.3 KB 531 B 676 B
host/assets/html.js 435 B 435 B 435 B
host/assets/idle.js 323 B 323 B 323 B
host/assets/in-sheet.js 64 B 64 B 64 B
host/assets/index.css 12.0 KB (+2 B) 2.7 KB (+5 B) 3.0 KB (-2 B)
host/assets/index.astro_astro_type_script_index_0_lang.js 35.5 KB (+30 B) 11.9 KB (+21 B) 13.2 KB (+29 B)
host/assets/ipfs.js 954 B 954 B 954 B
host/assets/landing.css 7.7 KB 1.5 KB (+3 B) 1.8 KB (-4 B)
host/assets/landing.astro_astro_type_script_index_0_lang.js 206 B 206 B 206 B
host/assets/lazy.js (×2) 3.4 KB (+73 B) 1.9 KB (+17 B) 2.0 KB (+29 B)
host/assets/loading.js 268 B 268 B 268 B
host/assets/local-wallet-core.js 1.3 KB (-1.8 KB) 597 B (-801 B) 684 B (-879 B)
host/assets/local-wallet.BiMcP1PE.js 2.3 KB 1.1 KB 1.2 KB
host/assets/log.js 1.6 KB 699 B 798 B
host/assets/manifest-types.js 3.6 KB 1.1 KB 1.3 KB
host/assets/manifest.js 20.9 KB (+28 B) 6.9 KB (-11 B) 7.6 KB (+2 B)
host/assets/metrics.js 2.0 KB 882 B 992 B
host/assets/modal-stack.js 681 B 681 B 681 B
host/assets/mount.css (×2) 22.8 KB (+562 B) 5.3 KB (+139 B) 6.0 KB (+127 B)
host/assets/mount.js (×2) 204.1 KB (+62.7 KB) 60.4 KB (+18.9 KB) 70.4 KB (+21.7 KB)
host/assets/network-health.js 3.2 KB 1.3 KB (+1 B) 1.4 KB (-1 B)
host/assets/network-monitor.js 2.8 KB 1.1 KB (+4 B) 1.2 KB
host/assets/network.js (×2) 4.7 KB (+100 B) 2.1 KB (+41 B) 2.4 KB (+38 B)
host/assets/perf.js 148 B 148 B 148 B
host/assets/permission-changes.js 340 B 340 B 340 B
host/assets/permissions.js (×2) 4.4 KB 1.8 KB 2.0 KB
host/assets/phone.Bu6jif0Q.js 307 B 307 B 307 B
host/assets/preload-helper.js 1.4 KB 664 B 792 B
host/assets/product-frame-layout.js 1.0 KB 471 B (-9 B) 536 B (-2 B)
host/assets/product.js 422 B 422 B 422 B
host/assets/proofs.js 26.0 KB (+37 B) 7.5 KB (-15 B) 8.3 KB (+14 B)
host/assets/provider.js 22.2 KB 5.9 KB (-3 B) 6.7 KB (-2 B)
host/assets/recent-labels.js 787 B 787 B 787 B
host/assets/reduced-motion.js 97 B 97 B 97 B
host/assets/resolve.js 4.5 KB 1.7 KB (+4 B) 2.0 KB (-2 B)
host/assets/rolldown-runtime.js 716 B 716 B 716 B
host/assets/root.js 444 B 444 B 444 B
host/assets/rpc-chain.js 28.9 KB 9.3 KB (+3 B) 10.1 KB (-2 B)
host/assets/rpc-resolve.js 2.3 KB 989 B (+2 B) 1.1 KB (+1 B)
host/assets/runtime-config.js 4.8 KB 1.5 KB (+5 B) 1.7 KB (-2 B)
host/assets/scale-ts.js 4.8 KB 1.9 KB 2.1 KB
host/assets/scale.js 2.2 KB 1007 B (+8 B) 1.1 KB (+1 B)
host/assets/settings-actions.js 10.1 KB (+55 B) 3.6 KB (+5 B) 4.0 KB (+16 B)
host/assets/settings-glyph.js 283 B 283 B 283 B
host/assets/settings.js 422 B (+69 B) 422 B (+69 B) 422 B (+69 B)
host/assets/sha2.js 5.8 KB (+3.9 KB) 2.4 KB (+1.5 KB) 3.0 KB (+1.9 KB)
host/assets/sha3.js 3.6 KB 1.5 KB 1.6 KB
host/assets/shared-mode.js (×2) 1.8 KB 820 B (-8 B) 929 B (-1 B)
host/assets/signing-worker.js (×2) 40.1 KB 9.1 KB 10.3 KB
host/assets/spans.js 824 B 824 B 824 B
host/assets/src.js 79.9 KB (-32 B) 25.1 KB (-22 B) 27.7 KB (-12 B)
host/assets/startup.css 5.7 KB 1.7 KB 1.9 KB
host/assets/startup.js 12.3 KB (+338 B) 4.4 KB (+116 B) 4.9 KB (+136 B)
host/assets/topbar.93i9N1UB.js 2.0 KB 852 B 981 B
host/assets/topbar-status.js 2.2 KB 904 B (-3 B) 1.0 KB (-5 B)
host/assets/topbar.Bq-n4Klp.js 196 B 196 B 196 B
host/assets/topbar.js 575 B 575 B 575 B
host/assets/truapi_provider_bg.wasm 4.01 MB 955.7 KB 1.27 MB
host/assets/truapi_server_bg.wasm 2.70 MB 731.0 KB 965.5 KB
host/assets/truapi_signing_bg.wasm 2.92 MB 791.8 KB 1.02 MB
host/assets/truapi_verifiable.js 14.3 KB 2.8 KB 3.2 KB
host/assets/truapi_verifiable_bg.wasm (×2) 9.79 MB (+4.89 MB) 9.22 MB (+4.61 MB) 9.28 MB (+4.64 MB)
host/assets/twoX.js 8.5 KB 3.0 KB (-7 B) 3.3 KB (+2 B)
host/assets/ui.js 3.9 KB 1.4 KB (+4 B) 1.6 KB (+2 B)
host/assets/url-pill.js 382 B 382 B 382 B
host/assets/use-store.js 366 B 366 B 366 B
host/assets/utils.js 4.3 KB (+791 B) 1.6 KB (+228 B) 1.8 KB (+262 B)
host/assets/verify.js (×2) 12.9 KB 4.3 KB (-9 B) 4.8 KB (+1 B)
host/assets/wallet-boot.js 3.9 KB (+3.1 KB) 1.7 KB (+938 B) 1.9 KB (+1.1 KB)
host/assets/wallet-mode.js 184 B 184 B 184 B
host/assets/wallet-pause.js 4.7 KB 1.7 KB 1.9 KB
host/assets/wallet-switch.js 623 B 623 B 623 B
host/assets/web.js (×2) 93.5 KB 29.2 KB (+5 B) 32.1 KB (+2 B)
host/assets/worker-runtime.js (×2) 37.2 KB 8.8 KB 10.0 KB
host/favicon.svg 1.8 KB 1.8 KB 1.8 KB
host/host-sw.js 9.7 KB (+69 B) 2.6 KB (+18 B) 2.9 KB (+20 B)
host/host_version.json 109 B 109 B 109 B
host/icon-192.png 12.5 KB 12.5 KB 12.5 KB
host/icon-512.png 42.8 KB 42.8 KB 42.8 KB
host/index.html 53.4 KB (-8 B) 12.8 KB (-17 B) 15.0 KB (-10 B)
host/landing.html 38.4 KB (+6 B) 9.6 KB (-26 B) 11.4 KB
host/manifest.webmanifest 441 B 441 B 441 B
host/workbox.js 14.8 KB 4.6 KB 5.1 KB
sandbox/app-sw.js 5.1 KB 1.9 KB (-1 B) 2.2 KB (-1 B)
sandbox/assets/bitswap-bridge.js 1.2 KB 582 B (-2 B) 669 B (-4 B)
sandbox/assets/fetch.js 4.0 KB 1.4 KB (+23 B) 1.6 KB (+10 B)
sandbox/assets/index.js 238.0 KB (+108 B) 68.0 KB (-4 B) 79.2 KB (+38 B)
sandbox/assets/index.css 10.4 KB 2.6 KB 2.9 KB (-2 B)
sandbox/assets/mount.js 67.4 KB (+769 B) 22.2 KB (+226 B) 24.5 KB (+274 B)
sandbox/assets/mount.css 16.1 KB (+445 B) 3.1 KB (+69 B) 3.5 KB (+86 B)
sandbox/favicon.svg 1.8 KB 1.8 KB 1.8 KB
sandbox/host_version.json 108 B 108 B 108 B
sandbox/index.html 1.7 KB 400 B (-5 B) 610 B (-3 B)
Total 21.28 MB (+4.97 MB) 12.25 MB (+4.63 MB) (compression rate: 42%) 13.20 MB (+4.67 MB)

Commit: f15d14b

@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

⚡ Performance Report

Cold Start

Overall: 🔴 regressed  |  p50: 10.72s → 12.18s (+13.6%)  |  p95: 11.79s → 12.71s (+7.8%)  |  Mann-Whitney: z=3.92 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 10.72s 12.18s +1.46s (+13.6%) 11.79s 12.71s +918ms (+7.8%) 🔴 regressed
Host total 7.91s 8.93s +1.02s (+12.9%) 8.88s 9.49s +606ms (+6.8%) 🔴 regressed
Name resolution 7.69s 8.62s +922ms (+12.0%) 8.66s 9.17s +506ms (+5.8%) 🔴 regressed
App total 2.78s 2.91s +130ms (+4.7%) 3.20s 3.60s +395ms (+12.3%) 🔴 regressed

Warm Start

Overall: 🔴 regressed  |  p50: 424ms → 573ms (+35.1%)  |  p95: 451ms → 596ms (+32.2%)  |  Mann-Whitney: z=4.41 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 424ms 573ms +149ms (+35.1%) 451ms 596ms +145ms (+32.2%) 🔴 regressed
Host total 139ms 207ms +68ms (+48.9%) 151ms 236ms +85ms (+56.3%) 🔴 regressed
App total 262ms 318ms +56ms (+21.4%) 276ms 342ms +66ms (+23.9%) 🔴 regressed

Lukewarm Start (different site, same session)

Overall: 🔴 regressed  |  p50: 13.82s → 15.02s (+8.6%)  |  p95: 14.69s → 15.77s (+7.4%)  |  Mann-Whitney: z=4.18 ✅ significant

Phase breakdown
Phase Base p50 PR p50 p50 Δ Base p95 PR p95 p95 Δ Verdict
End-to-end 13.82s 15.02s +1.19s (+8.6%) 14.69s 15.77s +1.08s (+7.4%) 🔴 regressed
Host total 9.22s 10.11s +889ms (+9.6%) 9.84s 10.69s +841ms (+8.5%) 🔴 regressed
Name resolution 7.24s 8.01s +776ms (+10.7%) 7.80s 8.60s +798ms (+10.2%) 🔴 regressed
App total 4.52s 5.03s +506ms (+11.2%) 4.79s 5.20s +408ms (+8.5%) 🔴 regressed

Commit: f15d14b  |  Outliers (>2x best) discarded before stats

@replghost replghost added the deploy: paseo.fyi Deploy this pull request to paseo.fyi label Oct 11, 2026
@replghost replghost removed the deploy: paseo.fyi Deploy this pull request to paseo.fyi label Oct 11, 2026
replghost added a commit that referenced this pull request Oct 12, 2026
Merges #367 (feat/pwa-wallet 7a65763: wallet creation, single-tab owner lock and handover, identity proxy, allowances, username claim, light-client submit fallback) into the Media integration layer. Resolution:

- Local wallet boot: the owner lease is acquired before native Chat custody is requested, so a handover pauses this tab's cores (disposing Chat and releasing its custody) before the next tab acquires either.
- Protocol frame: localWalletOwner and coreCustody both served by the local wallet handler; their messages, method sets and client calls kept side by side.
- Chain pool: #367's trusted submit fallback wraps light-client transports; Media's advertisement lookup and vox presence routes stay per connection. Broker and watch guard merged cleanly: #185's resolver guarantees plus #367's legacy author_submitAndWatchExtrinsic routing.
- Settings: PolkaVM apps and Local wallet switches both kept beside Background receiving; tests extended for both.
- Debug panel: Runtime tab (PolkaVM diagnostics) and Wallet tab (local wallet) both gated.
- nginx: identity proxy and Media TURN both on the root and shell servers, both 404 elsewhere; deploy-nginx keeps receiving CSP/proxy, TURN private include and #367's per-site snippet isolation. deploy.yml keeps both parents' steps here; they are unified in the next commit.
- package-lock refreshed with npm 12.2.0.
replghost added a commit that referenced this pull request Oct 12, 2026
…iving

The merges left deploy.yml with two nginx steps for paseo.fyi: #367's identity proxy rollout (ci-deploy-nginx, per-site snippets) and #291's receiving rollout (plain deploy-nginx, shared snippets), each rewriting the same site config with a different snippet directory. Now one 'Deploy nginx config' step runs make ci-deploy-nginx for the opted-in paseoli.dev and paseo.fyi environments with SENTRY_DSN, the Media TURN secret pair and the receiving CSP/push origin/proxy port, so one rendered config carries the identity proxy, Media TURN route and receiving CSP/proxy over main's nginx. This follows the previous #335 rollout (identity environments only); receiving rollouts to paseo.li/testnet.li stay with make deploy-nginx.

- Smokes after the frontend upload: identity attester, Media TURN credential (when the key id is set) and a new receiving smoke (relay healthz through the product-host proxy, and the worker CSP on that host's /host-sw.js naming the relay).
- The manual Deploy nginx workflow no longer offers paseoli.dev or paseo.fyi: a shared-snippet dispatch would overwrite their per-site config, empty the TURN include and drop the receiving CSP.
- DEPLOYMENT.md documents the single rollout, its inputs and the three smokes.
replghost added a commit that referenced this pull request Oct 12, 2026
… wallet off

#367's Local wallet switch in Settings makes the next boot fall back to Polkadot App, logging the local account out as #291's switchToPolkadotApp does, but without revoking that account's retained receiving registrations. applyAndReset now runs the same local-first revocation (as for a network change) when the switch turns off a wallet that is signing, and keeps the preference and page unchanged if revocation fails. A Polkadot App session with an unused local wallet is left alone.

This branch was successfully deployed

1 active (outdated) deployment
paseo.fyi — 55731f2d Deployed Oct 11, 2026 by replghost via Deploy paseo.fyi #2042
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant