import { createEnclave } from '../dist/enclave.js'; let enclave = null; let lastDatabase = null; const LogLevel = { INFO: 'info', OK: 'ok', ERR: 'err', DATA: 'data' }; function log(level, method, message, data = null) { const el = document.getElementById('log'); const time = new Date().toISOString().slice(11, 23); const prefix = method ? `[${method}]` : ''; let entry = `
${time} ${prefix} ${message}`; if (data !== null) { entry += `\n${JSON.stringify(data, null, 2)}`; } entry += '
'; el.innerHTML += entry; el.scrollTop = el.scrollHeight; console.log(`[${time}] ${prefix} ${message}`, data ?? ''); } function setStatus(ok, message) { const el = document.getElementById('status'); el.textContent = message; el.className = `status ${ok ? 'ok' : 'err'}`; } async function init() { try { log(LogLevel.INFO, null, 'Loading enclave.wasm...'); enclave = await createEnclave('./enclave.wasm', { debug: true }); setStatus(true, 'Ready'); log(LogLevel.OK, null, 'Plugin loaded'); } catch (err) { setStatus(false, 'Failed'); log(LogLevel.ERR, null, `Load failed: ${err.message}`); } } window.testGenerate = async function() { if (!enclave) return log(LogLevel.ERR, 'generate', 'Plugin not loaded'); const credential = document.getElementById('credential').value; log(LogLevel.INFO, 'generate', `credential=${credential.slice(0, 16)}...`); try { const result = await enclave.generate(credential); log(LogLevel.OK, 'generate', `DID created: ${result.did}`, result); if (result.database) { lastDatabase = result.database; document.getElementById('database').value = btoa(String.fromCharCode(...result.database)); log(LogLevel.INFO, 'generate', 'Database saved for load() test'); } return result; } catch (err) { log(LogLevel.ERR, 'generate', err.message); throw err; } }; window.testLoad = async function() { if (!enclave) return log(LogLevel.ERR, 'load', 'Plugin not loaded'); const b64 = document.getElementById('database').value; if (!b64) return log(LogLevel.ERR, 'load', 'Database required'); log(LogLevel.INFO, 'load', `database.length=${b64.length}`); try { const database = Uint8Array.from(atob(b64), c => c.charCodeAt(0)); const result = await enclave.load(database); if (result.success) { log(LogLevel.OK, 'load', `Loaded DID: ${result.did}`, result); } else { log(LogLevel.ERR, 'load', result.error, result); } return result; } catch (err) { log(LogLevel.ERR, 'load', err.message); throw err; } }; window.testExec = async function() { if (!enclave) return log(LogLevel.ERR, 'exec', 'Plugin not loaded'); const filter = document.getElementById('filter').value; if (!filter) return log(LogLevel.ERR, 'exec', 'Filter required'); log(LogLevel.INFO, 'exec', `filter="${filter}"`); try { const result = await enclave.exec(filter); if (result.success) { log(LogLevel.OK, 'exec', 'Success', result); } else { log(LogLevel.ERR, 'exec', result.error, result); } return result; } catch (err) { log(LogLevel.ERR, 'exec', err.message); throw err; } }; window.testQuery = async function() { if (!enclave) return log(LogLevel.ERR, 'query', 'Plugin not loaded'); const did = document.getElementById('did').value; log(LogLevel.INFO, 'query', did ? `did="${did}"` : 'did=(current)'); try { const result = await enclave.query(did); log(LogLevel.OK, 'query', `Resolved: ${result.did}`, result); return result; } catch (err) { log(LogLevel.ERR, 'query', err.message); throw err; } }; window.setFilter = function(filter) { document.getElementById('filter').value = filter; }; window.clearLog = function() { document.getElementById('log').innerHTML = ''; }; window.runAllTests = async function() { log(LogLevel.INFO, null, '=== Running all tests ==='); try { await testGenerate(); await testLoad(); await testExec(); await testQuery(); log(LogLevel.OK, null, '=== All tests passed ==='); } catch (err) { log(LogLevel.ERR, null, `=== Tests failed: ${err.message} ===`); } }; init();