import { renderBytes } from "./utils"; const status = document.getElementById("status"); const connectWalletButton = document.getElementById("connect"); const importKeystoreButton = document.getElementById("import"); const importFileInput = document.getElementById("import-file"); const exportKeystoreButton = document.getElementById("export"); const keystoreOptions = document.getElementById("keystore"); const keystorePassword = document.getElementById("password"); const readCredentialButton = document.getElementById("read-credential"); const registerNewCredentialButton = document.getElementById("register-new"); const currentCredentials = document.getElementById("current-credentials"); export function initUI() { const _renderCredential = (hash, credential) => { currentCredentials.innerHTML = `

Keystore hash

${hash || "none"}

Membership ID

${credential.membership.treeIndex || "none"}

Secret Hash

${renderBytes(credential.identity.IDSecretHash)}

Commitment

${renderBytes(credential.identity.IDCommitment)}

Nullifier

${renderBytes(credential.identity.IDNullifier)}

Trapdoor

${renderBytes(credential.identity.IDTrapdoor)}
`; }; const _renderKeystoreOptions = (options) => { keystoreOptions.innerHTML = ` ${options.map((v) => ``)} `; }; const registerEvents = ({ connectWallet, registerCredential, readKeystoreOptions, readCredential, saveLocalKeystore, importLocalKeystore, }) => { connectWalletButton.addEventListener("click", async () => { await connectWallet(); const keystoreKeys = readKeystoreOptions(); _renderKeystoreOptions(keystoreKeys); }); registerNewCredentialButton.addEventListener("click", async () => { const password = keystorePassword.value; if (!password) { alert("Please, input password in order to create new credentials."); return; } const { hash, credential } = await registerCredential(password); _renderCredential(hash, credential); const keystoreKeys = readKeystoreOptions(); _renderKeystoreOptions(keystoreKeys); keystoreOptions.value = hash; saveLocalKeystore(); }); readCredentialButton.addEventListener("click", async () => { const password = keystorePassword.value; if (!password) { alert( "Please, input password in order to read credential from Keystore." ); return; } const currentHash = keystoreOptions.value; if (!currentHash) { alert( "Please, select hash of a key in order to read credential from Keystore." ); return; } const credential = await readCredential(currentHash, password); _renderCredential(currentHash, credential); }); importFileInput.addEventListener("change", async (event) => { const file = event.currentTarget.files[0]; if (!file) { return; } const text = await file.text(); importLocalKeystore(text); const keystoreOptions = readKeystoreOptions(); _renderKeystoreOptions(keystoreOptions); }); importKeystoreButton.addEventListener("click", async () => { importFileInput.click(); }); exportKeystoreButton.addEventListener("click", () => { const filename = "keystore.json"; const text = saveLocalKeystore(); const file = new File([text], filename, { type: "application/json", }); const link = document.createElement("a"); link.href = URL.createObjectURL(file); link.download = filename; link.click(); }); }; return { registerEvents, onStatusChange: (value, category = "progress") => { status.className = category; status.innerText = value; }, }; }