/** 服务端 relay_key 列宽(字节)。 */ export const RELAY_KEY_MAX_BYTES: number; /** UTF-8 字节数。 */ export function byteLength(s: string | null | undefined): number; /** 按字节截断,回退到最近的字符边界(不产生半个字符)。 */ export function truncateToBytes(s: string | null | undefined, maxBytes: number): string; /** * 把 relay_key 收敛到服务端能接受的长度。 * 未超限时原样返回;超限时保留可读前缀 + `:sha256:<原始键的完整哈希>`。 */ export function clampRelayKey(key: string | null | undefined, limit?: number): string; /** * 这次失败是不是「永远不会成功」。 * 4xx(除 408 / 429)= 永久;408 / 429 / 5xx / 无 status = 暂时。 */ export function isPermanentFailure(err: { status?: number | string } | null | undefined): boolean; /** 网关把重复的 relay_key 判为**幂等命中**时的回包标识。 */ export const DUPLICATE_RELAY_STATUS: string; /** * 这个回包是不是「重复键,什么都没发生」。 * * 网关对重复键回 HTTP 200 + `{status:"duplicate_relay"}` 并**提前返回**: * 不建请求、不发邮件,也永远不会有人来决策。长得像成功,但等决策的那一侧 * 会永远等下去(静默挂死),所以必须单独认。 */ export function isDuplicateRelay(res: unknown): boolean;