#!/usr/bin/env node // Sync missing kidlisp records for @jeffrey to ATProto import { connect } from "../../system/backend/database.mjs"; import { createMediaRecord, MediaTypes } from "../../system/backend/media-atproto.mjs"; const isDryRun = process.argv[2] !== 'live'; async function main() { console.log(`\nšŸ”„ SYNC @JEFFREY KIDLISP TO ATPROTO`); console.log(` Mode: ${isDryRun ? 'šŸ” DRY RUN' : '⚔ LIVE'}\n`); const database = await connect(); // Get @jeffrey user const jeffreyUser = await database.db.collection('users').findOne({'atproto.handle': 'jeffrey.at.aesthetic.computer'}); if (!jeffreyUser) { console.error('āŒ @jeffrey user not found'); await database.disconnect(); process.exit(1); } // Find kidlisp missing rkey const kidlispCollection = database.db.collection('kidlisp'); const missing = await kidlispCollection.find({ user: jeffreyUser._id, $or: [ { 'atproto.rkey': { $exists: false } }, { 'atproto.rkey': null } ] }).toArray(); console.log(`šŸ“ Found ${missing.length} kidlisp records missing ATProto records`); if (missing.length === 0) { console.log('āœ… All kidlisp already synced!'); await database.disconnect(); process.exit(0); } if (isDryRun) { console.log(`\nšŸ” DRY RUN - Would create ATProto records for:`); missing.forEach(k => { console.log(` - ${k.code}: "${k.source?.substring(0, 50)}..."`); }); console.log(`\nšŸ’” Run with 'live' argument to apply changes`); await database.disconnect(); process.exit(0); } // Create ATProto records let created = 0; let failed = 0; for (const kidlisp of missing) { try { const result = await createMediaRecord( database, MediaTypes.KIDLISP, kidlisp, { userSub: jeffreyUser._id } ); if (result.error) { console.log(`āš ļø Failed ${kidlisp.code}: ${result.error}`); failed++; } else { console.log(`āœ… Created ${kidlisp.code} → rkey: ${result.rkey}`); created++; } } catch (error) { console.error(`āŒ Error creating ${kidlisp.code}:`, error.message); failed++; } } console.log(`\nšŸ“Š Results:`); console.log(` āœ… Created: ${created}`); console.log(` āŒ Failed: ${failed}`); await database.disconnect(); process.exit(0); } main().catch(err => { console.error('āŒ Error:', err); process.exit(1); });