Fix: email-only members were locked out of the members area

refreshNavWallet assumed every signed-in session has a wallet address and
threw on null for email-only members; the catch returned null and render()
treated the member as signed out even though the session and cookie were
valid. Nav now shows the email (or member badge) when no wallet is linked.
Verified with a full browser cycle: session landing, logout, fresh code
sign-in. Assets v=20260904k.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-04 15:27:08 -05:00
parent a386c8e3a3
commit 547bff0d05
5 changed files with 23 additions and 20 deletions
+5 -2
View File
@@ -52,8 +52,11 @@ window.IAP = (function () {
const el = $('navWallet');
if (!el) return;
if (me.signedIn) {
el.innerHTML = (me.memberId ? '<span class="badge">member #' + me.memberId + '</span> ' : '')
+ '<span class="mono">' + me.address.slice(0, 6) + '…' + me.address.slice(-4) + '</span>';
// email-only members have no wallet address yet
const who = me.address
? '<span class="mono">' + me.address.slice(0, 6) + '…' + me.address.slice(-4) + '</span>'
: (me.email ? String(me.email).replace(/[&<>]/g, '') : 'signed in');
el.innerHTML = (me.memberId ? '<span class="badge">member #' + me.memberId + '</span> ' : '') + who;
} else {
el.innerHTML = '<a href="/my">Sign in</a>';
}
+4 -4
View File
@@ -5,7 +5,7 @@
<title>The contract | InstantAdPay</title>
<meta name="description" content="Plain-language review of the InstantAdPay settlement contract: what it does, what nobody can change, what the operator can and cannot touch, and how to verify all of it yourself.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260904j">
<link rel="stylesheet" href="/assets/site.css?v=20260904k">
</head>
<body>
<div class="wrap">
@@ -129,8 +129,8 @@
<div class="small">Advertising services with a performance referral program. Not an investment product; no income guarantees. Crypto transactions are irreversible. Never spend what you cannot afford.</div>
</footer>
</div>
<script src="/assets/common.js?v=20260904j"></script>
<script src="/assets/contract.js?v=20260904j"></script>
<script src="/assets/chat.js?v=20260904j"></script>
<script src="/assets/common.js?v=20260904k"></script>
<script src="/assets/contract.js?v=20260904k"></script>
<script src="/assets/chat.js?v=20260904k"></script>
</body>
</html>
+5 -5
View File
@@ -5,7 +5,7 @@
<title>InstantAdPay: advertise and earn, locked in code</title>
<meta name="description" content="Real ad packages with instant on-chain settlement. Every purchase pays the sponsor line in the same transaction, verifiable by anyone on the live ledger.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260904j">
<link rel="stylesheet" href="/assets/site.css?v=20260904k">
</head>
<body>
@@ -398,9 +398,9 @@
</div>
</section>
<script src="/assets/common.js?v=20260904j"></script>
<script src="/assets/wallet.js?v=20260904j"></script>
<script src="/assets/home.js?v=20260904j"></script>
<script src="/assets/chat.js?v=20260904j"></script>
<script src="/assets/common.js?v=20260904k"></script>
<script src="/assets/wallet.js?v=20260904k"></script>
<script src="/assets/home.js?v=20260904k"></script>
<script src="/assets/chat.js?v=20260904k"></script>
</body>
</html>
+4 -4
View File
@@ -5,7 +5,7 @@
<title>Live ledger | InstantAdPay</title>
<meta name="description" content="Every purchase, payout, and pass-up on InstantAdPay, streamed straight from the blockchain with a verify link on every line.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260904j">
<link rel="stylesheet" href="/assets/site.css?v=20260904k">
</head>
<body>
<div class="wrap">
@@ -25,8 +25,8 @@
<div>InstantAdPay · <a href="/">how it works</a> · <a id="contractLink" href="#" target="_blank" rel="noopener">contract source ↗</a></div>
</footer>
</div>
<script src="/assets/common.js?v=20260904j"></script>
<script src="/assets/ledger.js?v=20260904j"></script>
<script src="/assets/chat.js?v=20260904j"></script>
<script src="/assets/common.js?v=20260904k"></script>
<script src="/assets/ledger.js?v=20260904k"></script>
<script src="/assets/chat.js?v=20260904k"></script>
</body>
</html>
+5 -5
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>My account | InstantAdPay</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260904j">
<link rel="stylesheet" href="/assets/site.css?v=20260904k">
</head>
<body>
<div class="wrap">
@@ -160,9 +160,9 @@
<footer><div>InstantAdPay · <a href="/ledger">live ledger</a></div></footer>
</div>
<script src="/assets/common.js?v=20260904j"></script>
<script src="/assets/wallet.js?v=20260904j"></script>
<script src="/assets/my.js?v=20260904j"></script>
<script src="/assets/chat.js?v=20260904j"></script>
<script src="/assets/common.js?v=20260904k"></script>
<script src="/assets/wallet.js?v=20260904k"></script>
<script src="/assets/my.js?v=20260904k"></script>
<script src="/assets/chat.js?v=20260904k"></script>
</body>
</html>