mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 15:30:43 +00:00
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { normalizeOptionalString } from "../shared/string-coerce.js";
|
|
|
|
const INVALID_REQUEST = "INVALID_REQUEST";
|
|
const APPROVAL_NOT_FOUND = "APPROVAL_NOT_FOUND";
|
|
|
|
function readErrorCode(value: unknown): string | null {
|
|
return typeof value === "string" ? (normalizeOptionalString(value) ?? null) : null;
|
|
}
|
|
|
|
function readApprovalNotFoundDetailsReason(value: unknown): string | null {
|
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
return null;
|
|
}
|
|
const reason = (value as { reason?: unknown }).reason;
|
|
return typeof reason === "string" ? (normalizeOptionalString(reason) ?? null) : null;
|
|
}
|
|
|
|
export function isApprovalNotFoundError(err: unknown): boolean {
|
|
if (!(err instanceof Error)) {
|
|
return false;
|
|
}
|
|
const gatewayCode = readErrorCode((err as { gatewayCode?: unknown }).gatewayCode);
|
|
if (gatewayCode === APPROVAL_NOT_FOUND) {
|
|
return true;
|
|
}
|
|
const detailsReason = readApprovalNotFoundDetailsReason((err as { details?: unknown }).details);
|
|
if (gatewayCode === INVALID_REQUEST && detailsReason === APPROVAL_NOT_FOUND) {
|
|
return true;
|
|
}
|
|
return /unknown or expired approval id/i.test(err.message);
|
|
}
|