fix(telegram): break spool retry import cycle

This commit is contained in:
Vincent Koc
2026-07-10 06:27:08 -07:00
parent f33b887467
commit 4ed8460418
3 changed files with 34 additions and 23 deletions
@@ -7,7 +7,7 @@ import {
import type { BackoffPolicy } from "openclaw/plugin-sdk/runtime-env";
import { computeBackoff } from "openclaw/plugin-sdk/runtime-env";
import { isTelegramMessageDispatchReplayForgetError } from "./message-dispatch-dedupe.js";
import type { TelegramSpooledUpdate } from "./telegram-ingress-spool.js";
import type { TelegramSpooledUpdate } from "./telegram-ingress-spool.types.js";
export const TELEGRAM_SPOOLED_RETRY_MAX_ATTEMPTS = 8;
export const TELEGRAM_SPOOLED_RETRY_DEAD_LETTER_MIN_AGE_MS = 24 * 60 * 60 * 1000;
@@ -15,6 +15,16 @@ import { getTelegramRuntime } from "./runtime.js";
import { getTelegramSequentialKey } from "./sequential-key.js";
import { resolveSpooledUpdatePersistenceRetryDelayMs } from "./spooled-update-retry-policy.js";
import { normalizeTelegramStateAccountId } from "./state-account-id.js";
import type {
ClaimedTelegramSpooledUpdate,
TelegramSpooledUpdate,
TelegramSpooledUpdateClaimOwner,
} from "./telegram-ingress-spool.types.js";
export type {
ClaimedTelegramSpooledUpdate,
TelegramSpooledUpdate,
} from "./telegram-ingress-spool.types.js";
const SPOOL_VERSION = 1;
const TELEGRAM_INGRESS_SPOOL_PREFIX = "ingress-spool-";
@@ -26,13 +36,6 @@ const TELEGRAM_SPOOLED_UPDATE_COMPLETED_TTL_MS = 30 * 24 * 60 * 60 * 1000;
const TELEGRAM_SPOOLED_UPDATE_COMPLETED_MAX_ENTRIES = 1000;
const TELEGRAM_SPOOLED_UPDATE_PROCESS_ID = `${process.pid}:${randomUUID()}`;
type TelegramSpooledUpdateClaimOwner = {
processId: string;
processPid: number;
claimedAt: number;
claimToken?: string;
};
type TelegramSpooledUpdatePayload = {
version: number;
updateId: number;
@@ -40,21 +43,6 @@ type TelegramSpooledUpdatePayload = {
update: unknown;
};
export type TelegramSpooledUpdate = {
updateId: number;
path: string;
update: unknown;
receivedAt: number;
attempts?: number;
lastAttemptAt?: number;
lastError?: string;
claim?: TelegramSpooledUpdateClaimOwner;
};
export type ClaimedTelegramSpooledUpdate = TelegramSpooledUpdate & {
pendingPath: string;
};
export class TelegramSpooledUpdateCompletionOwnershipError extends Error {
constructor(updateId: number) {
super(`Telegram spooled update ${updateId} lost claim ownership before completion.`);
@@ -0,0 +1,23 @@
// Telegram plugin module defines ingress spool record contracts.
export type TelegramSpooledUpdateClaimOwner = {
processId: string;
processPid: number;
claimedAt: number;
claimToken?: string;
};
export type TelegramSpooledUpdate = {
updateId: number;
path: string;
update: unknown;
receivedAt: number;
attempts?: number;
lastAttemptAt?: number;
lastError?: string;
claim?: TelegramSpooledUpdateClaimOwner;
};
export type ClaimedTelegramSpooledUpdate = TelegramSpooledUpdate & {
pendingPath: string;
};