From 923650e570b928e054668f22787a652ac9be54ae Mon Sep 17 00:00:00 2001 From: Edut LLC Date: Fri, 20 Feb 2026 16:12:24 -0800 Subject: [PATCH] launcher: use edut id verification retry codes --- app/app.js | 9 ++++++++- docs/integration-contract.md | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/app.js b/app/app.js index 7eef57e..fc1fad7 100644 --- a/app/app.js +++ b/app/app.js @@ -1133,14 +1133,21 @@ async function onCheckoutConfirm() { async function confirmCheckoutWithRetry(maxAttempts = 8, intervalMs = 2500) { let lastErr = null; + const retryableCodes = new Set([ + "tx_verification_failed", + "edut_id_verification_failed", + "membership_verification_failed", + ]); for (let attempt = 1; attempt <= maxAttempts; attempt += 1) { try { const out = await onCheckoutConfirm(); return out; } catch (err) { lastErr = err; + const code = String(err?.payload?.code || "").trim().toLowerCase(); const message = String(err || ""); - if (!message.includes("tx verification pending/failed") + if (!retryableCodes.has(code) + && !message.includes("tx verification pending/failed") && !message.includes("edut id verification pending/failed") && !message.includes("membership verification pending/failed")) { throw err; diff --git a/docs/integration-contract.md b/docs/integration-contract.md index 3a4ff94..d1c2ab2 100644 --- a/docs/integration-contract.md +++ b/docs/integration-contract.md @@ -30,6 +30,14 @@ Launcher integrates with EDUT web/backend contracts as follows: - `wallet_session_invalid` - `wallet_session_expired` - `wallet_session_mismatch` + - `edut_id_required` (legacy alias `membership_required`) + - `edut_id_inactive` (legacy alias `membership_inactive`) + +## Checkout Quote Compatibility + +1. Launcher sends `include_edut_id_if_missing` as the canonical quote option field. +2. Launcher also sends `include_membership_if_missing` as a legacy compatibility alias. +3. Backend must treat both fields equivalently when present. ## Runtime Mode Signal