import init, { open_invite, handle_new_lox_credential, trust_promotion, handle_trust_promotion, trust_migration, handle_trust_migration, set_panic_hook } from "./pkg/lox_wasm.js"; let pubkeys = await request_pubkeys(); let requested_invite = await init().then(() => { set_panic_hook(); let requested_invite = request_open_invite().then((token) => { return open_invite(token); }); return requested_invite; }); console.log("Got request and state: "+requested_invite); let open_lox_cred = await init().then(() => { set_panic_hook(); let cred = requested_cred("/openreq", requested_invite).then((response) => { return handle_new_lox_credential(requested_invite, response, pubkeys); }); return cred; }); let requested_trust_promo = trust_promotion(open_lox_cred, pubkeys); let trust_promo_cred = await init().then(() => { set_panic_hook(); let cred = requested_cred("/trustpromo", requested_trust_promo).then((response)=> { return handle_trust_promotion(requested_trust_promo, response); }); return cred; }); let reachability_cred = await request_reachability(); let requested_trust_migration = trust_migration(open_lox_cred, trust_promo_cred, pubkeys); let level_1_cred = await init().then(() => { set_panic_hook(); let cred = requested_cred("/trustmig", requested_trust_migration).then((response)=> { return handle_trust_migration(requested_trust_migration, response, pubkeys); }); return cred; }); function requested_cred(command, requested) { return new Promise((fulfill, reject) => { let req = JSON.parse(requested); loxServerPostRequest(command, req.request).then((response) => { console.log("Got new Trust Migration Lox Credential: " + JSON.stringify(response)); fulfill(JSON.stringify(response)); return; }).catch(() => { console.log("Error requesting new Lox credential from server"); reject(); }); }); } function request_open_invite() { return new Promise((fulfill, reject) => { loxServerGetRequest("/invite").then((response) => { console.log("Got invitation token: " + response.invite); fulfill(response.invite); return; }).catch(() => { console.log("Error requesting open invite from Lox server"); reject(); }); }); } function request_pubkeys() { return new Promise((fulfill, reject) => { loxServerGetRequest("/pubkeys").then((response) => { console.log("Got pubkeys: " + JSON.stringify(response)); fulfill(JSON.stringify(response)); return; }).catch(() => { console.log("Error requesting open invite from Lox server"); reject(); }); }); } function request_reachability() { return new Promise((fulfill, reject) => { loxServerGetRequest("/reachability").then((response) => { console.log("Got reachability Cred: " + JSON.stringify(response)); fulfill(JSON.stringify(response)); return; }).catch(() => { console.log("Error requesting bucket reachability credential from Lox server"); reject(); }); }); } function loxServerGetRequest(data) { return new Promise((fulfill, reject) => { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.DONE !== xhr.readyState) { return; } if (xhr.status !== 200) { console.log("Error. Status code: "+xhr.status); console.log(xhr); reject(); return; } const response = JSON.parse(xhr.responseText); fulfill(response); return; }; try { xhr.open('GET', "http://localhost:8001"+data); } catch (err) { console.log("Error connecting to lox bridge db"); reject(); return; } xhr.send(); }); } function loxServerPostRequest(data, payload) { return new Promise((fulfill, reject) => { const xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.DONE !== xhr.readyState) { return; } if (xhr.status !== 200) { console.log("Error. Status code: "+xhr.status); console.log(xhr); reject(); return; } const response = JSON.parse(xhr.responseText); fulfill(response); return; }; try { xhr.open('POST', "http://localhost:8001"+data, true) xhr.setRequestHeader("Content-Type", "application/json"); } catch (err) { console.log("Error connecting to lox bridge db"); reject(); return; } xhr.send(JSON.stringify(payload)); }); } // The correct key should be matched against a public commit to the key to // verify that the key issuer is in fact the correct Bridge Authority function loxKeyRequest(key_type) { return new Promise((fulfull, reject) => { }) }