* . * redesign onboarding screen * . * add signer proxy * . * . * . * . * fix proxy * clean up * fix new account
152 lines
3.9 KiB
JavaScript
152 lines
3.9 KiB
JavaScript
let isPolling = false;
|
|
|
|
async function pollForRequests() {
|
|
if (isPolling) return;
|
|
isPolling = true;
|
|
|
|
try {
|
|
const response = await fetch("/api/pending");
|
|
const data = await response.json();
|
|
|
|
console.log("Polled for requests, got:", data);
|
|
|
|
// Process any new requests
|
|
if (data.requests && data.requests.length > 0) {
|
|
console.log(`Processing ${data.requests.length} requests`);
|
|
for (const request of data.requests) {
|
|
await handleNip07Request(request);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error("Polling error:", error);
|
|
updateStatus("Error: " + error.message, "error");
|
|
}
|
|
|
|
isPolling = false;
|
|
}
|
|
|
|
async function handleNip07Request(request) {
|
|
console.log("Handling request:", request);
|
|
|
|
try {
|
|
let result;
|
|
|
|
if (!window.nostr) {
|
|
throw new Error("NIP-07 extension not available");
|
|
}
|
|
|
|
switch (request.method) {
|
|
case "get_public_key":
|
|
console.log("Calling nostr.getPublicKey()");
|
|
result = await window.nostr.getPublicKey();
|
|
console.log("Got public key:", result);
|
|
break;
|
|
|
|
case "sign_event":
|
|
console.log("Calling nostr.signEvent() with:", request.params);
|
|
result = await window.nostr.signEvent(request.params);
|
|
console.log("Got signed event:", result);
|
|
break;
|
|
|
|
case "nip04_encrypt":
|
|
console.log("Calling nostr.nip04.encrypt()");
|
|
result = await window.nostr.nip04.encrypt(
|
|
request.params.public_key,
|
|
request.params.content,
|
|
);
|
|
break;
|
|
|
|
case "nip04_decrypt":
|
|
console.log("Calling nostr.nip04.decrypt()");
|
|
result = await window.nostr.nip04.decrypt(
|
|
request.params.public_key,
|
|
request.params.content,
|
|
);
|
|
break;
|
|
|
|
case "nip44_encrypt":
|
|
console.log("Calling nostr.nip44.encrypt()");
|
|
result = await window.nostr.nip44.encrypt(
|
|
request.params.public_key,
|
|
request.params.content,
|
|
);
|
|
break;
|
|
|
|
case "nip44_decrypt":
|
|
console.log("Calling nostr.nip44.decrypt()");
|
|
result = await window.nostr.nip44.decrypt(
|
|
request.params.public_key,
|
|
request.params.content,
|
|
);
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Unknown method: ${request.method}`);
|
|
}
|
|
|
|
// Send response back to server
|
|
const responsePayload = {
|
|
id: request.id,
|
|
result: result,
|
|
error: null,
|
|
};
|
|
|
|
console.log("Sending response:", responsePayload);
|
|
|
|
await fetch("/api/response", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify(responsePayload),
|
|
});
|
|
|
|
console.log("Response sent successfully");
|
|
updateStatus("Request processed successfully", "connected");
|
|
} catch (error) {
|
|
console.error("Error handling request:", error);
|
|
|
|
// Send error response back to server
|
|
const errorPayload = {
|
|
id: request.id,
|
|
result: null,
|
|
error: error.message,
|
|
};
|
|
|
|
console.log("Sending error response:", errorPayload);
|
|
|
|
await fetch("/api/response", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify(errorPayload),
|
|
});
|
|
|
|
updateStatus("Error: " + error.message, "error");
|
|
}
|
|
}
|
|
|
|
function updateStatus(message, className) {
|
|
const statusEl = document.getElementById("status");
|
|
statusEl.textContent = message;
|
|
statusEl.className = className;
|
|
}
|
|
|
|
// Start polling when page loads
|
|
window.addEventListener("load", () => {
|
|
console.log("NIP-07 Proxy loaded");
|
|
|
|
// Check if NIP-07 extension is available
|
|
if (window.nostr) {
|
|
console.log("NIP-07 extension detected");
|
|
updateStatus("Connected to NIP-07 extension - Ready", "connected");
|
|
} else {
|
|
console.log("NIP-07 extension not found");
|
|
updateStatus("NIP-07 extension not found", "error");
|
|
}
|
|
|
|
// Start polling every 500 ms
|
|
setInterval(pollForRequests, 500);
|
|
});
|