"use strict"; /** * Monitor Bridge Client * * Queries the local HarborForge.Monitor bridge endpoint on MONITOR_PORT * to enrich plugin telemetry with host/hardware data. * * If the bridge is unreachable, all methods return null gracefully — * the plugin continues to function without Monitor data. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.MonitorBridgeClient = void 0; class MonitorBridgeClient { baseUrl; timeoutMs; constructor(port, timeoutMs = 3000) { this.baseUrl = `http://127.0.0.1:${port}`; this.timeoutMs = timeoutMs; } async health() { return this.fetchJson('/health'); } async telemetry() { return this.fetchJson('/telemetry'); } /** * POST OpenClaw metadata to the Monitor bridge so it can enrich * its heartbeat uploads with OpenClaw version, plugin version, * and agent information. */ async pushOpenClawMeta(meta) { try { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), this.timeoutMs); const response = await fetch(`${this.baseUrl}/openclaw`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(meta), signal: controller.signal, }); clearTimeout(timeout); return response.ok; } catch { return false; } } async fetchJson(path) { try { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), this.timeoutMs); const response = await fetch(`${this.baseUrl}${path}`, { signal: controller.signal, }); clearTimeout(timeout); if (!response.ok) return null; return (await response.json()); } catch { return null; } } } exports.MonitorBridgeClient = MonitorBridgeClient; //# sourceMappingURL=monitor-bridge.js.map