#!/usr/bin/env node 'use strict'; const assert = require('assert/strict'); const { createAccountConnectionMonitor } = require('../mcp/src/core/account-connection-monitor'); function result(online, statusCode = online ? 2 : 0) { return { status: 'ok', summary: { uid: 'device-1', online, statusCode }, data: { uid: 'device-1', online, statusCode }, warnings: [], errors: [] }; } async function main() { let clock = 100000; let recoveryCalls = 0; const samples = [result(true), result(false), result(false), result(true)]; const monitor = createAccountConnectionMonitor({ checkStatus: async () => samples.shift(), recoverLogin: async () => { recoveryCalls += 1; return { summary: { loggedIn: true, statusCode: 2 } }; }, now: () => clock, cacheTtlMs: 0, recoveryCooldownMs: 0, }); assert.equal((await monitor.getStatus({ force: true })).summary.connectionState, 'online'); clock += 15000; const transient = await monitor.getStatus({ force: true }); assert.equal(transient.summary.online, true); assert.equal(transient.summary.connectionState, 'verifying'); clock += 15000; const recovered = await monitor.getStatus({ force: true }); assert.equal(recoveryCalls, 1); assert.equal(recovered.summary.online, true); assert.equal(recovered.summary.autoRecovered, true); process.stdout.write(JSON.stringify({ status: 'ok', checks: 7 }) + '\n'); } main().catch(error => { console.error(error); process.exit(1); });