UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

34 lines (33 loc) • 1.48 kB
import { a as resolveGlobalSingleton } from "./global-singleton-0m-JziJW.mjs"; import { n as registerListener, t as notifyListeners } from "./listeners-BogSNJ-R.mjs"; //#region src/infra/gateway-work-metrics.ts const state = resolveGlobalSingleton(Symbol.for("openclaw.gatewayWorkMetrics"), () => ({ snapshot: void 0, listeners: /* @__PURE__ */ new Set(), demandListeners: /* @__PURE__ */ new Set() })); /** The Gateway projection publishes after owner changes and clears on shutdown. */ function publishGatewayWorkMetrics(snapshot) { state.snapshot = snapshot; notifyListeners(state.listeners, snapshot); } /** Replay the current projection when an exporter starts or restarts. */ function onGatewayWorkMetrics(listener) { const wasEmpty = state.listeners.size === 0; const unsubscribe = registerListener(state.listeners, listener); if (wasEmpty) notifyListeners(state.demandListeners, void 0); notifyListeners([listener], state.snapshot); return () => { const subscribed = state.listeners.has(listener); unsubscribe(); if (subscribed && state.listeners.size === 0) notifyListeners(state.demandListeners, void 0); }; } function hasGatewayWorkMetricsListeners() { return state.listeners.size > 0; } function onGatewayWorkMetricsDemand(listener) { return registerListener(state.demandListeners, listener); } //#endregion export { publishGatewayWorkMetrics as i, onGatewayWorkMetrics as n, onGatewayWorkMetricsDemand as r, hasGatewayWorkMetricsListeners as t };