const assert = require('node:assert/strict'); const vm = require('node:vm'); const fs = require('node:fs'); const probe = JSON.parse(fs.readFileSync(process.argv[2], 'utf8')); const rows = [90, 20, 60, 10, 70, 30, 40, 0].map((t, i) => ({id: String(i), t})); const reads = []; let closed = false; const store = {openCursor() { const request = {}; let index = 0; function advance() {queueMicrotask(() => { const row = rows[index++]; request.result = row ? {primaryKey: row.id, value: row, continue: advance} : null; request.onsuccess(); });} advance(); return request; }}; const db = {transaction(name, mode) { assert.equal(name, 'message'); assert.equal(mode, 'readonly'); return {objectStore: () => store}; }, close: () => {closed = true;}}; const modules = { WAWebSchemaMessage: {getMessageTable: () => ({get: async key => { reads.push(key); return rows.find(r => r.id === key); }})}, WAWebDBMessageSerialization: {messageFromDbRow: row => ({...row, type: 'chat', body: 'fixture-' + row.id})}, }; (async () => { const result = await vm.runInNewContext(probe, { location: {origin: 'https://web.whatsapp.com'}, require: n => modules[n], indexedDB: {databases: async () => [{name: 'model-storage'}], open: () => { const request = {}; queueMicrotask(() => {request.result = db; request.onsuccess();}); return request; }}, }); assert.deepEqual(Array.from(result.messages, m => m.timestamp), [10, 20, 30, 40, 60]); assert.equal(result.scanned, 8); assert.equal(reads.length, 5); assert.ok(result.messages.every(m => m.body.startsWith('fixture-'))); assert.equal(result.cdp, false); assert.equal(closed, true); console.log('PASS: oldest selection, bounded app decryption, decoded text, readonly transaction, cleanup'); })().catch(error => {console.error(error); process.exitCode = 1;});