Files
openclaw/extensions/telegram/src/polling-transport-state.ts
2026-03-26 21:13:16 +00:00

34 lines
1.1 KiB
TypeScript

import type { TelegramTransport } from "./fetch.js";
type TelegramPollingTransportStateOpts = {
log: (line: string) => void;
initialTransport?: TelegramTransport;
createTelegramTransport?: () => TelegramTransport;
};
export class TelegramPollingTransportState {
#telegramTransport: TelegramTransport | undefined;
#transportDirty = false;
constructor(private readonly opts: TelegramPollingTransportStateOpts) {
this.#telegramTransport = opts.initialTransport;
}
markDirty() {
this.#transportDirty = true;
}
acquireForNextCycle(): TelegramTransport | undefined {
const shouldCreateTransport = this.#transportDirty || !this.#telegramTransport;
const nextTransport = shouldCreateTransport
? (this.opts.createTelegramTransport?.() ?? this.#telegramTransport)
: this.#telegramTransport;
if (this.#transportDirty && nextTransport) {
this.opts.log("[telegram][diag] rebuilding transport for next polling cycle");
}
this.#telegramTransport = nextTransport;
this.#transportDirty = false;
return nextTransport;
}
}