import { createPostgresPool } from './src/lib/postgres.mjs'; import { deriveQuoteOutcomeRecords } from './src/core/quote-outcomes.mjs'; async function main() { const pool = createPostgresPool({ connectionString: process.env.POSTGRES_URL }); // Wait a bit for connection await new Promise(r => setTimeout(r, 1000)); console.log("Fetching submissions..."); const expectedDeltasRows = await pool.query(` SELECT quote_id, COALESCE(observed_at, ingested_at) as submitted_at, payload->>'expected_inventory_delta' as expected_inventory_delta FROM trade_execution_results WHERE payload->>'status' = 'submitted' ORDER BY COALESCE(observed_at, ingested_at) DESC LIMIT 2000 `); const submissions = expectedDeltasRows.rows.map(r => ({ quote_id: r.quote_id, submitted_at: r.submitted_at, expected_inventory_delta: typeof r.expected_inventory_delta === 'string' && r.expected_inventory_delta ? JSON.parse(r.expected_inventory_delta) : r.expected_inventory_delta })); console.log("Fetching inventory...", submissions.length); const inventoryRows = await pool.query(` SELECT event_id as inventory_id, observed_at, payload FROM intent_inventory_snapshots ORDER BY COALESCE(observed_at, ingested_at) DESC LIMIT 5000 `); const inventorySnapshots = inventoryRows.rows.map(r => ({ inventory_id: r.inventory_id, observed_at: r.observed_at, asset_balances: r.payload?.asset_balances || {}, })); console.log("Checking for matches...", submissions.length, inventorySnapshots.length); const records = deriveQuoteOutcomeRecords({ submissions, inventorySnapshots, }); const completed = records.filter(r => r.outcome_status === 'completed'); console.log("Found", completed.length, "completed trades out of", records.length); process.exit(0); } main().catch(console.error);