Align launcher copy to EDUT ID and add inline glossary help
Some checks are pending
check / launcher (push) Waiting to run
Some checks are pending
check / launcher (push) Waiting to run
This commit is contained in:
parent
96cbba87ca
commit
d9f963f1b0
28
app/app.js
28
app/app.js
@ -649,7 +649,7 @@ async function onSendMembershipTx() {
|
|||||||
params: [txRequest],
|
params: [txRequest],
|
||||||
});
|
});
|
||||||
$("confirmTxHash").value = txHash;
|
$("confirmTxHash").value = txHash;
|
||||||
logLine("membership tx sent", {
|
logLine("EDUT ID tx sent", {
|
||||||
quote_id: state.lastQuote.quote_id,
|
quote_id: state.lastQuote.quote_id,
|
||||||
tx_hash: txHash,
|
tx_hash: txHash,
|
||||||
payer_wallet: from,
|
payer_wallet: from,
|
||||||
@ -733,7 +733,7 @@ async function onStatus() {
|
|||||||
if (out.designation_code) {
|
if (out.designation_code) {
|
||||||
$("designationCode").value = out.designation_code;
|
$("designationCode").value = out.designation_code;
|
||||||
}
|
}
|
||||||
logLine("membership status", out);
|
logLine("EDUT ID status", out);
|
||||||
refreshOverview(out);
|
refreshOverview(out);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
@ -761,7 +761,7 @@ async function onQuote() {
|
|||||||
$("quoteId").value = out.quote_id || "";
|
$("quoteId").value = out.quote_id || "";
|
||||||
$("quoteValue").value = out.value || "";
|
$("quoteValue").value = out.value || "";
|
||||||
$("quotePayer").value = out.payer_wallet || "";
|
$("quotePayer").value = out.payer_wallet || "";
|
||||||
logLine("membership quote", out);
|
logLine("EDUT ID quote", out);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,14 +795,14 @@ async function onConfirmMembership() {
|
|||||||
identity_attested_by: out.identity_attested_by || "",
|
identity_attested_by: out.identity_attested_by || "",
|
||||||
identity_attestation_id: out.identity_attestation_id || "",
|
identity_attestation_id: out.identity_attestation_id || "",
|
||||||
};
|
};
|
||||||
logLine("membership confirm", out);
|
logLine("EDUT ID confirm", out);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function requireMembershipState(actionLabel, opts = {}) {
|
async function requireMembershipState(actionLabel, opts = {}) {
|
||||||
const status = await onStatus();
|
const status = await onStatus();
|
||||||
if (String(status.status || "").toLowerCase() !== "active") {
|
if (String(status.status || "").toLowerCase() !== "active") {
|
||||||
throw new Error(`${actionLabel} requires active membership`);
|
throw new Error(`${actionLabel} requires active EDUT ID`);
|
||||||
}
|
}
|
||||||
if (opts.requireOnramp && !isOnrampAttested(status.identity_assurance_level)) {
|
if (opts.requireOnramp && !isOnrampAttested(status.identity_assurance_level)) {
|
||||||
throw new Error(`${actionLabel} requires onramp_attested identity assurance`);
|
throw new Error(`${actionLabel} requires onramp_attested identity assurance`);
|
||||||
@ -846,17 +846,17 @@ async function confirmMembershipWithRetry(maxAttempts = 8, intervalMs = 2500) {
|
|||||||
await sleep(intervalMs);
|
await sleep(intervalMs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw lastErr || new Error("membership confirm failed");
|
throw lastErr || new Error("EDUT ID confirmation failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onRunMembershipFlow() {
|
async function onRunMembershipFlow() {
|
||||||
setFlowStatus("connecting wallet");
|
setFlowStatus("connecting wallet");
|
||||||
await onConnectWallet();
|
await onConnectWallet();
|
||||||
|
|
||||||
setFlowStatus("checking membership");
|
setFlowStatus("checking EDUT ID");
|
||||||
const status = await onStatus();
|
const status = await onStatus();
|
||||||
if (String(status.status || "").toLowerCase() === "active") {
|
if (String(status.status || "").toLowerCase() === "active") {
|
||||||
setFlowStatus("membership already active");
|
setFlowStatus("EDUT ID already active");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -866,9 +866,9 @@ async function onRunMembershipFlow() {
|
|||||||
await onSignIntent();
|
await onSignIntent();
|
||||||
setFlowStatus("verifying intent");
|
setFlowStatus("verifying intent");
|
||||||
await onVerify();
|
await onVerify();
|
||||||
setFlowStatus("quoting membership");
|
setFlowStatus("quoting EDUT ID");
|
||||||
await onQuote();
|
await onQuote();
|
||||||
setFlowStatus("sending membership transaction");
|
setFlowStatus("sending EDUT ID transaction");
|
||||||
await onSendMembershipTx();
|
await onSendMembershipTx();
|
||||||
|
|
||||||
const txHash = $("confirmTxHash").value.trim();
|
const txHash = $("confirmTxHash").value.trim();
|
||||||
@ -877,14 +877,14 @@ async function onRunMembershipFlow() {
|
|||||||
}
|
}
|
||||||
setFlowStatus("waiting for chain confirmation");
|
setFlowStatus("waiting for chain confirmation");
|
||||||
await waitForTxMined(txHash);
|
await waitForTxMined(txHash);
|
||||||
setFlowStatus("confirming membership with API");
|
setFlowStatus("confirming EDUT ID with API");
|
||||||
await confirmMembershipWithRetry();
|
await confirmMembershipWithRetry();
|
||||||
setFlowStatus("refreshing status");
|
setFlowStatus("refreshing status");
|
||||||
const refreshed = await onStatus();
|
const refreshed = await onStatus();
|
||||||
if (isOnrampAttested(refreshed.identity_assurance_level)) {
|
if (isOnrampAttested(refreshed.identity_assurance_level)) {
|
||||||
setFlowStatus("membership flow complete (attested)");
|
setFlowStatus("EDUT ID flow complete (attested)");
|
||||||
} else {
|
} else {
|
||||||
setFlowStatus("membership active (unattested)");
|
setFlowStatus("EDUT ID active (unattested)");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1150,7 +1150,7 @@ async function onQuickActivate() {
|
|||||||
async function onQuickRefresh() {
|
async function onQuickRefresh() {
|
||||||
const status = await onStatus();
|
const status = await onStatus();
|
||||||
if (String(status.status || "").toLowerCase() !== "active") {
|
if (String(status.status || "").toLowerCase() !== "active") {
|
||||||
setFlowStatus("membership inactive");
|
setFlowStatus("EDUT ID inactive");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -3,21 +3,21 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>EDUT Launcher</title>
|
<title>EDUT ID Manager</title>
|
||||||
<link rel="stylesheet" href="./style.css" />
|
<link rel="stylesheet" href="./style.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="shell">
|
<main class="shell">
|
||||||
<header class="hero">
|
<header class="hero">
|
||||||
<h1>EDUT Launcher</h1>
|
<h1>EDUT ID Manager</h1>
|
||||||
<p>Deterministic infrastructure control surface.</p>
|
<p>Deterministic identity, access, and control surface.</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section class="panel">
|
<section class="panel">
|
||||||
<h2>Control Surface</h2>
|
<h2>Control Surface</h2>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button id="btnQuickConnect">Connect wallet</button>
|
<button id="btnQuickConnect">Connect wallet</button>
|
||||||
<button id="btnQuickActivate">Activate membership</button>
|
<button id="btnQuickActivate">Activate EDUT ID</button>
|
||||||
<button id="btnQuickRefresh">Refresh status + feed</button>
|
<button id="btnQuickRefresh">Refresh status + feed</button>
|
||||||
<button id="btnQuickInstallStatus">Governance status</button>
|
<button id="btnQuickInstallStatus">Governance status</button>
|
||||||
<button id="btnRefreshBalances">Refresh balances</button>
|
<button id="btnRefreshBalances">Refresh balances</button>
|
||||||
@ -40,7 +40,7 @@
|
|||||||
<p id="summaryFunds">-- ETH | -- USDC</p>
|
<p id="summaryFunds">-- ETH | -- USDC</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="stat">
|
<article class="stat">
|
||||||
<h3>Membership</h3>
|
<h3><span class="term-inline">EDUT ID<details class="inline-help"><summary aria-label="What is EDUT ID?">?</summary><p>EDUT ID is your one-time identity credential used for checkout, activation, and ownership proof.</p></details></span></h3>
|
||||||
<p id="summaryMembership">unknown</p>
|
<p id="summaryMembership">unknown</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="stat">
|
<article class="stat">
|
||||||
@ -48,11 +48,11 @@
|
|||||||
<p id="summaryMode">human_manual</p>
|
<p id="summaryMode">human_manual</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="stat">
|
<article class="stat">
|
||||||
<h3>Designation</h3>
|
<h3><span class="term-inline">Designation<details class="inline-help"><summary aria-label="What is designation?">?</summary><p>Designation is the protocol reference created during wallet intent and carried through activation evidence.</p></details></span></h3>
|
||||||
<p id="summaryDesignation">-</p>
|
<p id="summaryDesignation">-</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="stat">
|
<article class="stat">
|
||||||
<h3>Identity Assurance</h3>
|
<h3><span class="term-inline">Identity Assurance<details class="inline-help"><summary aria-label="What is identity assurance?">?</summary><p>Assurance level records how identity was attested, such as direct crypto flow or on-ramp attestation.</p></details></span></h3>
|
||||||
<p id="summaryAssurance">unknown</p>
|
<p id="summaryAssurance">unknown</p>
|
||||||
</article>
|
</article>
|
||||||
<article class="stat">
|
<article class="stat">
|
||||||
@ -110,16 +110,16 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="subpanel">
|
<section class="subpanel">
|
||||||
<h2>Membership Flow Controls</h2>
|
<h2>EDUT ID Flow Controls</h2>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button id="btnRunMembershipFlow">Run membership flow</button>
|
<button id="btnRunMembershipFlow">Run EDUT ID flow</button>
|
||||||
<button id="btnConnectWallet">Connect wallet</button>
|
<button id="btnConnectWallet">Connect wallet</button>
|
||||||
<button id="btnIntent">Create intent</button>
|
<button id="btnIntent">Create intent</button>
|
||||||
<button id="btnSignIntent">Sign intent (EIP-712)</button>
|
<button id="btnSignIntent">Sign intent (EIP-712)</button>
|
||||||
<button id="btnVerify">Verify signature</button>
|
<button id="btnVerify">Verify signature</button>
|
||||||
<button id="btnRefreshSession">Refresh session</button>
|
<button id="btnRefreshSession">Refresh session</button>
|
||||||
<button id="btnRevokeSession">Revoke session</button>
|
<button id="btnRevokeSession">Revoke session</button>
|
||||||
<button id="btnStatus">Membership status</button>
|
<button id="btnStatus">EDUT ID status</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid three">
|
<div class="grid three">
|
||||||
<label>
|
<label>
|
||||||
@ -160,8 +160,8 @@
|
|||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button id="btnQuote">Get quote</button>
|
<button id="btnQuote">Get quote</button>
|
||||||
<button id="btnSignPayerProof">Sign payer proof</button>
|
<button id="btnSignPayerProof">Sign payer proof</button>
|
||||||
<button id="btnSendMembershipTx">Send membership tx</button>
|
<button id="btnSendMembershipTx">Send EDUT ID tx</button>
|
||||||
<button id="btnConfirmMembership">Confirm membership tx</button>
|
<button id="btnConfirmMembership">Confirm EDUT ID tx</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid three">
|
<div class="grid three">
|
||||||
<label>
|
<label>
|
||||||
|
|||||||
@ -53,6 +53,51 @@ body {
|
|||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.term-inline {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-help {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-help > summary {
|
||||||
|
list-style: none;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border: 1px solid var(--line);
|
||||||
|
border-radius: 50%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 14px;
|
||||||
|
font-size: 10px;
|
||||||
|
color: var(--muted);
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
background: #0f1828;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-help > summary::-webkit-details-marker {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline-help > p {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
left: 0;
|
||||||
|
width: min(300px, 80vw);
|
||||||
|
border: 1px solid var(--line);
|
||||||
|
border-radius: 8px;
|
||||||
|
background: #0f1828;
|
||||||
|
color: var(--text);
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 1.45;
|
||||||
|
z-index: 30;
|
||||||
|
}
|
||||||
|
|
||||||
.note {
|
.note {
|
||||||
margin: 0 0 10px;
|
margin: 0 0 10px;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user