diff --git a/extensions/matrix/src/matrix/sdk/timeout-abort-signal.ts b/extensions/matrix/src/matrix/sdk/timeout-abort-signal.ts index 082dd8b9c50..1a9f2229c85 100644 --- a/extensions/matrix/src/matrix/sdk/timeout-abort-signal.ts +++ b/extensions/matrix/src/matrix/sdk/timeout-abort-signal.ts @@ -1,31 +1 @@ -export function buildTimeoutAbortSignal(params: { timeoutMs?: number; signal?: AbortSignal }): { - signal?: AbortSignal; - cleanup: () => void; -} { - const { timeoutMs, signal } = params; - if (!timeoutMs && !signal) { - return { signal: undefined, cleanup: () => {} }; - } - if (!timeoutMs) { - return { signal, cleanup: () => {} }; - } - - const controller = new AbortController(); - const timeoutId = setTimeout(controller.abort.bind(controller), timeoutMs); - const onAbort = () => controller.abort(); - if (signal) { - if (signal.aborted) { - controller.abort(); - } else { - signal.addEventListener("abort", onAbort, { once: true }); - } - } - - return { - signal: controller.signal, - cleanup: () => { - clearTimeout(timeoutId); - signal?.removeEventListener("abort", onAbort); - }, - }; -} +export { buildTimeoutAbortSignal } from "openclaw/plugin-sdk/extension-shared"; diff --git a/src/plugin-sdk/extension-shared.ts b/src/plugin-sdk/extension-shared.ts index 66f99dd158c..5dd830a10ca 100644 --- a/src/plugin-sdk/extension-shared.ts +++ b/src/plugin-sdk/extension-shared.ts @@ -3,6 +3,7 @@ import { hasEnvHttpProxyConfigured } from "../infra/net/proxy-env.js"; import { runPassiveAccountLifecycle } from "./channel-lifecycle.core.js"; import { createLoggerBackedRuntime } from "./runtime-logger.js"; export { safeParseJsonWithSchema, safeParseWithSchema } from "../utils/zod-parse.js"; +export { buildTimeoutAbortSignal } from "../utils/fetch-timeout.js"; type PassiveChannelStatusSnapshot = { configured?: boolean;