mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 11:58:38 +00:00
refactor(probe): share withTimeout
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import { messagingApi } from "@line/bot-sdk";
|
import { messagingApi } from "@line/bot-sdk";
|
||||||
import type { LineProbeResult } from "./types.js";
|
import type { LineProbeResult } from "./types.js";
|
||||||
|
import { withTimeout } from "../utils/with-timeout.js";
|
||||||
|
|
||||||
export async function probeLineBot(
|
export async function probeLineBot(
|
||||||
channelAccessToken: string,
|
channelAccessToken: string,
|
||||||
@@ -30,18 +31,3 @@ export async function probeLineBot(
|
|||||||
return { ok: false, error: message };
|
return { ok: false, error: message };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
|
|
||||||
if (!timeoutMs || timeoutMs <= 0) {
|
|
||||||
return promise;
|
|
||||||
}
|
|
||||||
let timer: NodeJS.Timeout | null = null;
|
|
||||||
const timeout = new Promise<T>((_, reject) => {
|
|
||||||
timer = setTimeout(() => reject(new Error("timeout")), timeoutMs);
|
|
||||||
});
|
|
||||||
return Promise.race([promise, timeout]).finally(() => {
|
|
||||||
if (timer) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import type { BaseProbeResult } from "../channels/plugins/types.js";
|
import type { BaseProbeResult } from "../channels/plugins/types.js";
|
||||||
|
import { withTimeout } from "../utils/with-timeout.js";
|
||||||
import { createSlackWebClient } from "./client.js";
|
import { createSlackWebClient } from "./client.js";
|
||||||
|
|
||||||
export type SlackProbe = BaseProbeResult & {
|
export type SlackProbe = BaseProbeResult & {
|
||||||
@@ -8,21 +9,6 @@ export type SlackProbe = BaseProbeResult & {
|
|||||||
team?: { id?: string; name?: string };
|
team?: { id?: string; name?: string };
|
||||||
};
|
};
|
||||||
|
|
||||||
function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
|
|
||||||
if (!timeoutMs || timeoutMs <= 0) {
|
|
||||||
return promise;
|
|
||||||
}
|
|
||||||
let timer: NodeJS.Timeout | null = null;
|
|
||||||
const timeout = new Promise<T>((_, reject) => {
|
|
||||||
timer = setTimeout(() => reject(new Error("timeout")), timeoutMs);
|
|
||||||
});
|
|
||||||
return Promise.race([promise, timeout]).finally(() => {
|
|
||||||
if (timer) {
|
|
||||||
clearTimeout(timer);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function probeSlack(token: string, timeoutMs = 2500): Promise<SlackProbe> {
|
export async function probeSlack(token: string, timeoutMs = 2500): Promise<SlackProbe> {
|
||||||
const client = createSlackWebClient(token);
|
const client = createSlackWebClient(token);
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
|
|||||||
14
src/utils/with-timeout.ts
Normal file
14
src/utils/with-timeout.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
|
||||||
|
if (!timeoutMs || timeoutMs <= 0) {
|
||||||
|
return promise;
|
||||||
|
}
|
||||||
|
let timer: NodeJS.Timeout | null = null;
|
||||||
|
const timeout = new Promise<T>((_, reject) => {
|
||||||
|
timer = setTimeout(() => reject(new Error("timeout")), timeoutMs);
|
||||||
|
});
|
||||||
|
return Promise.race([promise, timeout]).finally(() => {
|
||||||
|
if (timer) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user