mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 06:20:31 +00:00
34 lines
1.1 KiB
TypeScript
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;
|
|
}
|
|
}
|