220 lines
6.5 KiB
HTML
220 lines
6.5 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>EDUT Launcher Shell</title>
|
|
<link rel="stylesheet" href="./style.css" />
|
|
</head>
|
|
<body>
|
|
<main class="shell">
|
|
<header class="hero">
|
|
<h1>EDUT Launcher</h1>
|
|
<p>Wallet-first onboarding shell (local integration harness)</p>
|
|
</header>
|
|
|
|
<section class="panel">
|
|
<h2>Connection</h2>
|
|
<div class="grid two">
|
|
<label>
|
|
API base URL
|
|
<input id="apiBase" value="https://api.edut.ai" />
|
|
</label>
|
|
<label>
|
|
Chain ID
|
|
<input id="chainId" type="number" value="84532" />
|
|
</label>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<h2>Wallet Intent</h2>
|
|
<div class="actions">
|
|
<button id="btnRunMembershipFlow">Run membership flow</button>
|
|
<button id="btnConnectWallet">Connect wallet</button>
|
|
<button id="btnIntent">Create intent</button>
|
|
<button id="btnSignIntent">Sign intent (EIP-712)</button>
|
|
<button id="btnVerify">Verify signature</button>
|
|
<button id="btnStatus">Membership status</button>
|
|
</div>
|
|
<p id="flowStatus" class="flow-status">flow idle</p>
|
|
<div class="grid three">
|
|
<label>
|
|
Wallet
|
|
<input id="walletAddress" placeholder="0x..." />
|
|
</label>
|
|
<label>
|
|
Origin
|
|
<input id="walletOrigin" value="https://edut.ai" />
|
|
</label>
|
|
<label>
|
|
Locale
|
|
<input id="walletLocale" value="en" />
|
|
</label>
|
|
</div>
|
|
<div class="grid three">
|
|
<label>
|
|
Intent ID
|
|
<input id="intentId" />
|
|
</label>
|
|
<label>
|
|
Designation code
|
|
<input id="designationCode" />
|
|
</label>
|
|
<label>
|
|
Display token
|
|
<input id="displayToken" />
|
|
</label>
|
|
</div>
|
|
<label>
|
|
Signature (EIP-712)
|
|
<textarea id="walletSignature" rows="2" placeholder="0x..."></textarea>
|
|
</label>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<h2>Membership Quote + Confirm</h2>
|
|
<div class="actions">
|
|
<button id="btnQuote">Get quote</button>
|
|
<button id="btnSignPayerProof">Sign payer proof</button>
|
|
<button id="btnSendMembershipTx">Send membership tx</button>
|
|
<button id="btnConfirmMembership">Confirm membership tx</button>
|
|
</div>
|
|
<div class="grid three">
|
|
<label>
|
|
Payer wallet (optional)
|
|
<input id="payerWallet" placeholder="0x..." />
|
|
</label>
|
|
<label>
|
|
Payer proof (optional)
|
|
<input id="payerProof" placeholder="0x..." />
|
|
</label>
|
|
<label>
|
|
Sponsor org root (optional)
|
|
<input id="sponsorOrgRoot" placeholder="org_root_id" />
|
|
</label>
|
|
</div>
|
|
<div class="grid three">
|
|
<label>
|
|
Quote ID
|
|
<input id="quoteId" />
|
|
</label>
|
|
<label>
|
|
Tx value
|
|
<input id="quoteValue" />
|
|
</label>
|
|
<label>
|
|
Payer used
|
|
<input id="quotePayer" />
|
|
</label>
|
|
</div>
|
|
<label>
|
|
Confirm tx hash
|
|
<input id="confirmTxHash" placeholder="0x..." />
|
|
</label>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<h2>Member Channel</h2>
|
|
<div class="grid three">
|
|
<label>
|
|
Device ID
|
|
<input id="deviceId" value="desktop-local-01" />
|
|
</label>
|
|
<label>
|
|
Platform
|
|
<select id="platform">
|
|
<option>desktop</option>
|
|
<option>ios</option>
|
|
<option>android</option>
|
|
</select>
|
|
</label>
|
|
<label>
|
|
App version
|
|
<input id="appVersion" value="0.1.0" />
|
|
</label>
|
|
</div>
|
|
<div class="grid three">
|
|
<label>
|
|
Org root ID
|
|
<input id="orgRootId" value="org.local.root" />
|
|
</label>
|
|
<label>
|
|
Principal ID
|
|
<input id="principalId" value="human.local" />
|
|
</label>
|
|
<label>
|
|
Principal role
|
|
<select id="principalRole">
|
|
<option>org_root_owner</option>
|
|
<option>workspace_member</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<div class="actions">
|
|
<button id="btnRegisterChannel">Register channel</button>
|
|
<button id="btnUnregisterChannel">Unregister channel</button>
|
|
</div>
|
|
<div class="grid two">
|
|
<label>
|
|
Cursor
|
|
<input id="eventCursor" />
|
|
</label>
|
|
<label>
|
|
Limit
|
|
<input id="eventLimit" type="number" value="25" />
|
|
</label>
|
|
</div>
|
|
<div class="actions">
|
|
<button id="btnPollEvents">Poll events</button>
|
|
</div>
|
|
<div id="eventList" class="event-list"></div>
|
|
<label>
|
|
Support summary (owner only)
|
|
<input id="supportSummary" value="Need diagnostics snapshot." />
|
|
</label>
|
|
<div class="actions">
|
|
<button id="btnSupportTicket">Open support ticket</button>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<h2>Governance Install + Lease</h2>
|
|
<div class="actions">
|
|
<button id="btnInstallToken">Issue install token</button>
|
|
<button id="btnInstallStatus">Install status</button>
|
|
</div>
|
|
<div class="grid three">
|
|
<label>
|
|
Install token
|
|
<input id="installToken" />
|
|
</label>
|
|
<label>
|
|
Entitlement ID
|
|
<input id="entitlementId" />
|
|
</label>
|
|
<label>
|
|
Runtime version
|
|
<input id="runtimeVersion" />
|
|
</label>
|
|
</div>
|
|
<label>
|
|
Package hash
|
|
<input id="packageHash" />
|
|
</label>
|
|
<div class="actions">
|
|
<button id="btnInstallConfirm">Confirm install</button>
|
|
<button id="btnLeaseHeartbeat">Lease heartbeat</button>
|
|
<button id="btnOfflineRenew">Offline renew</button>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="panel">
|
|
<h2>Response Log</h2>
|
|
<pre id="log"></pre>
|
|
</section>
|
|
</main>
|
|
<script src="./app.js"></script>
|
|
</body>
|
|
</html>
|