First fully working version.
This commit is contained in:
@@ -899,13 +899,8 @@
|
||||
const nostrEvent = message[2];
|
||||
addLogEntry('success', `Received EVENT from ${relayUrl}: ${nostrEvent.id.substring(0, 16)}...`);
|
||||
|
||||
// Truncate content for readability
|
||||
const truncatedEvent = { ...nostrEvent };
|
||||
if (truncatedEvent.content && truncatedEvent.content.length > 10) {
|
||||
const content = truncatedEvent.content;
|
||||
truncatedEvent.content = content.substring(0, 5) + '...' + content.substring(content.length - 5);
|
||||
}
|
||||
addLogEntry('info', `Full received event:\n${JSON.stringify(truncatedEvent, null, 2)}`);
|
||||
// Log full event without truncation
|
||||
addLogEntry('info', `Full received event:\n${JSON.stringify(nostrEvent, null, 2)}`);
|
||||
handleIncomingEvent(nostrEvent);
|
||||
} else if (message[0] === 'EOSE' && message[1] === subscriptionId) {
|
||||
addLogEntry('info', `End of stored events from ${relayUrl}`);
|
||||
@@ -953,11 +948,19 @@
|
||||
const innerEvent = decryptedPayload.event;
|
||||
addLogEntry('info', `Discarding padding: "${decryptedPayload.padding}"`);
|
||||
|
||||
// DEBUG: Log the inner event BEFORE attempting second decryption
|
||||
addLogEntry('info', `INNER EVENT BEFORE SECOND DECRYPTION:`);
|
||||
addLogEntry('info', ` Inner event ID: ${innerEvent.id}`);
|
||||
addLogEntry('info', ` Inner event pubkey: ${innerEvent.pubkey}`);
|
||||
addLogEntry('info', ` Inner event content length: ${innerEvent.content.length}`);
|
||||
addLogEntry('info', ` Inner event full JSON:\n${JSON.stringify(innerEvent, null, 2)}`);
|
||||
|
||||
// Second decryption to get the actual routing instructions that were encrypted for me
|
||||
// Use the inner event's pubkey, not the outer event's pubkey
|
||||
decryptedPayload = await decryptRoutingEvent(innerEvent);
|
||||
|
||||
if (!decryptedPayload) {
|
||||
addLogEntry('error', `Failed to decrypt inner event ${event.id.substring(0,16)}...`);
|
||||
addLogEntry('error', `Failed to decrypt inner event ${innerEvent.id.substring(0,16)}...`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -966,13 +969,8 @@
|
||||
addLogEntry('info', `Detected Type 1 (Routing Payload) - processing routing instructions directly`);
|
||||
}
|
||||
|
||||
// Log the complete decrypted payload with truncated content
|
||||
const truncatedPayload = { ...decryptedPayload };
|
||||
if (truncatedPayload.event && truncatedPayload.event.content && truncatedPayload.event.content.length > 10) {
|
||||
const content = truncatedPayload.event.content;
|
||||
truncatedPayload.event.content = content.substring(0, 5) + '...' + content.substring(content.length - 5);
|
||||
}
|
||||
addLogEntry('info', `Final routing payload:\n${JSON.stringify(truncatedPayload, null, 2)}`);
|
||||
// Log the complete decrypted payload without truncation
|
||||
addLogEntry('info', `Final routing payload:\n${JSON.stringify(decryptedPayload, null, 2)}`);
|
||||
|
||||
// Parse routing instructions (these are from the builder, specific to this daemon)
|
||||
const { event: wrappedEvent, routing } = decryptedPayload;
|
||||
@@ -1020,11 +1018,32 @@
|
||||
// Decrypt routing event using NIP-44 via NIP-07 interface
|
||||
async function decryptRoutingEvent(event) {
|
||||
try {
|
||||
// DEBUG: Log full decryption attempt details
|
||||
addLogEntry('info', `DEBUG DECRYPTION ATTEMPT:`);
|
||||
addLogEntry('info', ` Event ID: ${event.id}`);
|
||||
addLogEntry('info', ` Event pubkey (who signed): ${event.pubkey}`);
|
||||
addLogEntry('info', ` My daemon pubkey: ${userPubkey}`);
|
||||
addLogEntry('info', ` Content length: ${event.content.length}`);
|
||||
addLogEntry('info', ` Full event JSON:\n${JSON.stringify(event, null, 2)}`);
|
||||
|
||||
// DEBUG: Log exact parameters being passed to NIP-44 decrypt
|
||||
addLogEntry('info', ` CALLING window.nostr.nip44.decrypt() with:`);
|
||||
addLogEntry('info', ` pubkey parameter: "${event.pubkey}"`);
|
||||
addLogEntry('info', ` content parameter: "${event.content}"`);
|
||||
addLogEntry('info', ` content parameter length: ${event.content.length}`);
|
||||
addLogEntry('info', ` content parameter type: ${typeof event.content}`);
|
||||
|
||||
// Use window.nostr.nip44.decrypt() which handles the private key internally
|
||||
const decrypted = await window.nostr.nip44.decrypt(event.pubkey, event.content);
|
||||
|
||||
addLogEntry('success', ` Decryption successful! Decrypted length: ${decrypted.length}`);
|
||||
addLogEntry('info', ` Decrypted preview: ${decrypted.substring(0, 100)}...`);
|
||||
|
||||
return JSON.parse(decrypted);
|
||||
|
||||
} catch (error) {
|
||||
addLogEntry('error', ` Decryption failed: ${error.message}`);
|
||||
addLogEntry('error', ` Error details: ${JSON.stringify(error, null, 2)}`);
|
||||
console.error('Decryption error:', error);
|
||||
return null;
|
||||
}
|
||||
@@ -1122,17 +1141,8 @@
|
||||
|
||||
addLogEntry('info', `DEBUG Creating padding payload with ${paddingData.length} bytes of padding`);
|
||||
|
||||
// Log the complete padding payload with truncated content before encryption
|
||||
const truncatedPaddingPayload = { ...paddingPayload };
|
||||
if (truncatedPaddingPayload.event && truncatedPaddingPayload.event.content && truncatedPaddingPayload.event.content.length > 10) {
|
||||
const content = truncatedPaddingPayload.event.content;
|
||||
truncatedPaddingPayload.event.content = content.substring(0, 5) + '...' + content.substring(content.length - 5);
|
||||
}
|
||||
if (truncatedPaddingPayload.padding && truncatedPaddingPayload.padding.length > 10) {
|
||||
const padding = truncatedPaddingPayload.padding;
|
||||
truncatedPaddingPayload.padding = padding.substring(0, 5) + '...' + padding.substring(padding.length - 5);
|
||||
}
|
||||
addLogEntry('info', `Padding payload to encrypt:\n${JSON.stringify(truncatedPaddingPayload, null, 2)}`);
|
||||
// Log the complete padding payload before encryption
|
||||
addLogEntry('info', `Padding payload to encrypt:\n${JSON.stringify(paddingPayload, null, 2)}`);
|
||||
|
||||
// Encrypt padding payload to next Superball
|
||||
let ephemeralKeyHex;
|
||||
@@ -1169,13 +1179,8 @@
|
||||
// Sign with ephemeral key
|
||||
const signedEvent = window.NostrTools.finalizeEvent(routingEvent, ephemeralKey);
|
||||
|
||||
// Log the complete rewrapped event with truncated content before publishing
|
||||
const truncatedSignedEvent = { ...signedEvent };
|
||||
if (truncatedSignedEvent.content && truncatedSignedEvent.content.length > 10) {
|
||||
const content = truncatedSignedEvent.content;
|
||||
truncatedSignedEvent.content = content.substring(0, 5) + '...' + content.substring(content.length - 5);
|
||||
}
|
||||
addLogEntry('info', `Padding-wrapped event to publish:\n${JSON.stringify(truncatedSignedEvent, null, 2)}`);
|
||||
// Log the complete rewrapped event before publishing
|
||||
addLogEntry('info', `Padding-wrapped event to publish:\n${JSON.stringify(signedEvent, null, 2)}`);
|
||||
|
||||
// Publish to specified relays
|
||||
await publishToRelays(signedEvent, routing.relays);
|
||||
@@ -1200,13 +1205,8 @@
|
||||
await Promise.any(pool.publish(relays, event));
|
||||
addLogEntry('success', `Published to relays: ${relays.join(', ')}`);
|
||||
|
||||
// Truncate content for readability
|
||||
const truncatedEvent = { ...event };
|
||||
if (truncatedEvent.content && truncatedEvent.content.length > 10) {
|
||||
const content = truncatedEvent.content;
|
||||
truncatedEvent.content = content.substring(0, 5) + '...' + content.substring(content.length - 5);
|
||||
}
|
||||
addLogEntry('info', `Full published event:\n${JSON.stringify(truncatedEvent, null, 2)}`);
|
||||
// Log full published event
|
||||
addLogEntry('info', `Full published event:\n${JSON.stringify(event, null, 2)}`);
|
||||
} catch (aggregateError) {
|
||||
const errorMessages = aggregateError.errors.map((err, index) =>
|
||||
`${relays[index]}: ${err.message}`
|
||||
|
||||
Reference in New Issue
Block a user