169 lines
5.3 KiB
HTML
169 lines
5.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Motr Enclave Test</title>
|
|
<style>
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
padding: 20px;
|
|
background: #f5f5f5;
|
|
}
|
|
h1 {
|
|
color: #333;
|
|
}
|
|
.card {
|
|
background: white;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
margin-bottom: 20px;
|
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
}
|
|
.card h2 {
|
|
margin-top: 0;
|
|
color: #555;
|
|
font-size: 1.2rem;
|
|
}
|
|
label {
|
|
display: block;
|
|
margin-bottom: 5px;
|
|
font-weight: 500;
|
|
color: #666;
|
|
}
|
|
input, textarea {
|
|
width: 100%;
|
|
padding: 10px;
|
|
border: 1px solid #ddd;
|
|
border-radius: 4px;
|
|
font-family: monospace;
|
|
font-size: 14px;
|
|
margin-bottom: 10px;
|
|
}
|
|
textarea {
|
|
min-height: 100px;
|
|
resize: vertical;
|
|
}
|
|
button {
|
|
background: #4a90d9;
|
|
color: white;
|
|
border: none;
|
|
padding: 10px 20px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
margin-right: 10px;
|
|
margin-bottom: 10px;
|
|
}
|
|
button:hover {
|
|
background: #357abd;
|
|
}
|
|
button:disabled {
|
|
background: #ccc;
|
|
cursor: not-allowed;
|
|
}
|
|
.output {
|
|
background: #1e1e1e;
|
|
color: #d4d4d4;
|
|
padding: 15px;
|
|
border-radius: 4px;
|
|
font-family: monospace;
|
|
font-size: 13px;
|
|
white-space: pre-wrap;
|
|
word-break: break-all;
|
|
max-height: 300px;
|
|
overflow-y: auto;
|
|
}
|
|
.status {
|
|
padding: 10px;
|
|
border-radius: 4px;
|
|
margin-bottom: 15px;
|
|
}
|
|
.status.success {
|
|
background: #d4edda;
|
|
color: #155724;
|
|
}
|
|
.status.error {
|
|
background: #f8d7da;
|
|
color: #721c24;
|
|
}
|
|
.status.loading {
|
|
background: #fff3cd;
|
|
color: #856404;
|
|
}
|
|
.btn-group {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 10px;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Motr Enclave Plugin Test</h1>
|
|
|
|
<div class="card">
|
|
<h2>Plugin Status</h2>
|
|
<div id="status" class="status loading">Loading plugin...</div>
|
|
<button id="loadPluginBtn" onclick="loadPlugin()">Reload Plugin</button>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>generate()</h2>
|
|
<p>Initialize database with WebAuthn credential</p>
|
|
<label for="credentialInput">Credential (Base64):</label>
|
|
<input type="text" id="credentialInput" value="dGVzdC1jcmVkZW50aWFsLWRhdGEtZm9yLXRlc3Rpbmc=" placeholder="Base64-encoded PublicKeyCredential">
|
|
<button onclick="testGenerate()">Run generate()</button>
|
|
<div id="generateOutput" class="output"></div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>load()</h2>
|
|
<p>Load database from serialized buffer</p>
|
|
<label for="databaseInput">Database Buffer (Base64):</label>
|
|
<input type="text" id="databaseInput" placeholder="Base64-encoded database buffer">
|
|
<button onclick="testLoad()">Run load()</button>
|
|
<button onclick="useGeneratedDb()">Use Generated DB</button>
|
|
<div id="loadOutput" class="output"></div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>exec()</h2>
|
|
<p>Execute action with GitHub-style filter syntax</p>
|
|
<label for="filterInput">Filter:</label>
|
|
<input type="text" id="filterInput" value="resource:accounts action:list" placeholder="resource:accounts action:sign subject:did:sonr:abc">
|
|
<label for="tokenInput">UCAN Token (optional):</label>
|
|
<input type="text" id="tokenInput" placeholder="UCAN token for authorization">
|
|
<div class="btn-group">
|
|
<button onclick="testExec()">Run exec()</button>
|
|
<button onclick="setFilter('resource:accounts action:list')">List Accounts</button>
|
|
<button onclick="setFilter('resource:credentials action:list')">List Credentials</button>
|
|
<button onclick="setFilter('resource:sessions action:list')">List Sessions</button>
|
|
<button onclick="setFilter('resource:accounts action:sign')">Sign</button>
|
|
</div>
|
|
<div id="execOutput" class="output"></div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>query()</h2>
|
|
<p>Resolve DID to document with resources</p>
|
|
<label for="didInput">DID:</label>
|
|
<input type="text" id="didInput" placeholder="did:sonr:abc123 (leave empty for current DID)">
|
|
<button onclick="testQuery()">Run query()</button>
|
|
<div id="queryOutput" class="output"></div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h2>Console Log</h2>
|
|
<button onclick="clearLog()">Clear</button>
|
|
<div id="consoleLog" class="output"></div>
|
|
</div>
|
|
|
|
<script type="module" src="test.js"></script>
|
|
</body>
|
|
</html>
|