| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #!/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); });
|