157 lines
4.6 KiB
JavaScript
157 lines
4.6 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, state) {
|
|
const container = document.getElementById('nip07-status');
|
|
const textEl = document.getElementById('nip07-status-text');
|
|
if (container && textEl) {
|
|
container.className = 'status status--' + state;
|
|
textEl.textContent = message;
|
|
}
|
|
}
|
|
|
|
// 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 — ready', 'connected');
|
|
} else {
|
|
console.log('NIP-07 extension not found');
|
|
updateStatus('No NIP-07 extension found', 'error');
|
|
}
|
|
|
|
// Start polling every 500 ms
|
|
setInterval(pollForRequests, 500);
|
|
});
|