/ mock-email-export.js
mock-email-export.js
1 #!/usr/bin/env node 2 3 /** 4 * Mock Email Export Script 5 * 6 * Simulates a conversation ending and triggers email export with test data. 7 * This allows quick iteration on email generation without running a full video call. 8 * 9 * Usage: node mock-email-export.js 10 */ 11 12 const mockInvocations = [ 13 { 14 dreamUUID: '550e8400-e29b-41d4-a716-446655440000', 15 nodeName: 'InterBrain', 16 timestamp: new Date(), 17 githubRepoUrl: 'github.com/ProjectLiminality/InterBrain' 18 }, 19 { 20 dreamUUID: 'test-uuid-1', 21 nodeName: 'TestNode1', 22 timestamp: new Date(), 23 radicleId: 'rad:z4SmnVEi6cBjjSScqqG541pZkbFDP' 24 }, 25 { 26 dreamUUID: 'test-uuid-2', 27 nodeName: 'TestNode2', 28 timestamp: new Date(), 29 radicleId: 'rad:zWyXQGs2bqjAbSgjAuNdkWq1bQjG' 30 } 31 ]; 32 33 const senderDid = 'did:key:z6MksAEMTumQbRK1dvFqt7Xt5YHMRPsmhhS2jfhxzbsDUWX5'; 34 const senderName = 'InterfaceGuy'; 35 36 console.log('📧 Mock Email Export Data'); 37 console.log('=========================='); 38 console.log(''); 39 console.log('Sender:', senderName); 40 console.log('DID:', senderDid); 41 console.log(''); 42 console.log('Invoked Nodes:'); 43 mockInvocations.forEach((inv, i) => { 44 console.log(`${i + 1}. ${inv.nodeName}`); 45 if (inv.radicleId) console.log(` Radicle: ${inv.radicleId}`); 46 if (inv.githubRepoUrl) console.log(` GitHub: ${inv.githubRepoUrl}`); 47 }); 48 console.log(''); 49 50 // Generate the URIs 51 const vaultName = 'DreamVault'; 52 53 // Individual clone links 54 console.log('Individual Clone Links:'); 55 console.log(''); 56 57 // InterBrain with collaboration handshake 58 const interbrainUri = `obsidian://interbrain-clone?repo=github.com/ProjectLiminality/InterBrain&senderDid=${encodeURIComponent(senderDid)}&senderName=${encodeURIComponent(senderName)}`; 59 console.log(`1. InterBrain:`); 60 console.log(` ${interbrainUri}`); 61 console.log(''); 62 63 // Radicle nodes with collaboration handshake 64 mockInvocations.forEach((inv, i) => { 65 if (inv.radicleId) { 66 const uri = `obsidian://interbrain-clone?id=${inv.radicleId}&senderDid=${encodeURIComponent(senderDid)}&senderName=${encodeURIComponent(senderName)}`; 67 console.log(`${i + 2}. ${inv.nodeName}:`); 68 console.log(` ${uri}`); 69 console.log(''); 70 } 71 }); 72 73 // Batch clone link (all identifiers) 74 const allIds = mockInvocations.map(inv => inv.radicleId || inv.githubRepoUrl).filter(Boolean); 75 const batchUri = `obsidian://interbrain-clone-batch?ids=${encodeURIComponent(allIds.join(','))}&senderDid=${encodeURIComponent(senderDid)}&senderName=${encodeURIComponent(senderName)}`; 76 console.log('Batch Clone Link (all nodes):'); 77 console.log(` ${batchUri}`); 78 console.log(''); 79 80 // Install script links 81 console.log('Install Script Links:'); 82 console.log(''); 83 84 // Conservative install (just InterBrain + Alice's identity) 85 const conservativeInstallUri = `obsidian://interbrain-clone?repo=github.com/ProjectLiminality/InterBrain&senderDid=${encodeURIComponent(senderDid)}&senderName=${encodeURIComponent(senderName)}`; 86 const conservativeInstall = `curl -fsSL https://raw.githubusercontent.com/ProjectLiminality/InterBrain/main/install.sh | bash -s -- --uri "${conservativeInstallUri}"`; 87 console.log('Conservative Install (InterBrain + sender connection):'); 88 console.log(conservativeInstall); 89 console.log(''); 90 91 // Full install (all shared nodes) 92 const fullInstall = `curl -fsSL https://raw.githubusercontent.com/ProjectLiminality/InterBrain/main/install.sh | bash -s -- --uri "${batchUri}"`; 93 console.log('Full Install (all shared DreamNodes):'); 94 console.log(fullInstall); 95 console.log(''); 96 97 console.log('=========================='); 98 console.log('✅ Mock data generated successfully'); 99 console.log(''); 100 console.log('To test email generation:'); 101 console.log('1. Copy one of the install commands above'); 102 console.log('2. The email service should include these in the footer'); 103 console.log('3. Test by running a mock conversation end in Obsidian');