launcher/app/index.html

342 lines
12 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</title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<main class="shell">
<header class="hero">
<h1>EDUT Launcher</h1>
<p>Deterministic infrastructure control surface.</p>
</header>
<section class="panel">
<h2>Control Surface</h2>
<div class="actions">
<button id="btnQuickConnect">Connect wallet</button>
<button id="btnQuickActivate">Activate membership</button>
<button id="btnQuickRefresh">Refresh status + feed</button>
<button id="btnQuickInstallStatus">Governance status</button>
</div>
<p id="flowStatus" class="flow-status">ready</p>
<div class="grid two">
<article class="stat">
<h3>Wallet</h3>
<p id="summaryWallet">not connected</p>
</article>
<article class="stat">
<h3>Session</h3>
<p id="summarySession">none</p>
</article>
<article class="stat">
<h3>Membership</h3>
<p id="summaryMembership">unknown</p>
</article>
<article class="stat">
<h3>Designation</h3>
<p id="summaryDesignation">-</p>
</article>
<article class="stat">
<h3>Identity Assurance</h3>
<p id="summaryAssurance">unknown</p>
</article>
<article class="stat">
<h3>Admin Policy</h3>
<p id="summaryAdminPolicy">blocked</p>
</article>
<article class="stat">
<h3>Last Sync</h3>
<p id="summaryLastSync">never</p>
</article>
</div>
</section>
<section class="panel">
<h2>Updates</h2>
<p class="note">Communication is pull-first. No broadcast notifications.</p>
<div id="eventList" class="event-list"></div>
</section>
<section class="panel">
<h2>Support</h2>
<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>Response Log</h2>
<pre id="log"></pre>
</section>
<details class="panel advanced">
<summary>Advanced Integration Controls</summary>
<div class="advanced-body">
<section class="subpanel">
<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="subpanel">
<h2>Membership Flow Controls</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="btnRefreshSession">Refresh session</button>
<button id="btnRevokeSession">Revoke session</button>
<button id="btnStatus">Membership status</button>
</div>
<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="subpanel">
<h2>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>
<div class="grid three">
<label>
Identity assurance (optional)
<select id="membershipIdentityAssurance">
<option value="">(auto)</option>
<option value="onramp_attested">onramp_attested</option>
<option value="crypto_direct_unattested">crypto_direct_unattested</option>
<option value="sponsored_unattested">sponsored_unattested</option>
</select>
</label>
<label>
Attested by (optional)
<input id="membershipIdentityAttestedBy" placeholder="moonpay" />
</label>
<label>
Attestation id (optional)
<input id="membershipIdentityAttestationId" placeholder="provider-session-id" />
</label>
</div>
</section>
<section class="subpanel">
<h2>Marketplace Checkout</h2>
<div class="actions">
<button id="btnListOffers">List offers</button>
<button id="btnRunCheckoutFlow">Run checkout flow</button>
<button id="btnCheckoutQuote">Checkout quote</button>
<button id="btnSendCheckoutTx">Send checkout tx</button>
<button id="btnCheckoutConfirm">Checkout confirm</button>
<button id="btnListEntitlements">List entitlements</button>
</div>
<div class="grid three">
<label>
Offer ID
<select id="checkoutOfferId">
<option value="edut.solo.core">edut.solo.core</option>
<option value="edut.workspace.core">edut.workspace.core</option>
<option value="edut.workspace.ai">edut.workspace.ai</option>
<option value="edut.workspace.lane24">edut.workspace.lane24</option>
<option value="edut.workspace.sovereign">edut.workspace.sovereign</option>
</select>
</label>
<label>
Checkout quote ID
<input id="checkoutQuoteId" />
</label>
<label>
Checkout tx hash
<input id="checkoutTxHash" placeholder="0x..." />
</label>
</div>
<div class="grid two">
<label>
Checkout total
<input id="checkoutTotal" />
</label>
<label>
Checkout entitlement ID
<input id="checkoutEntitlementId" />
</label>
</div>
</section>
<section class="subpanel">
<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="grid two">
<label>
Cursor
<input id="eventCursor" />
</label>
<label>
Limit
<input id="eventLimit" type="number" value="25" />
</label>
</div>
<div class="actions">
<button id="btnRegisterChannel">Register channel</button>
<button id="btnUnregisterChannel">Unregister channel</button>
<button id="btnPollEvents">Poll events</button>
</div>
</section>
<section class="subpanel">
<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>
Operation mode
<select id="operationMode">
<option value="human_manual">human_manual</option>
<option value="worker_auto">worker_auto</option>
</select>
</label>
<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>
</div>
</details>
</main>
<script src="./app.js"></script>
</body>
</html>