| 86 | // Merge a fresh per-attempt timeout signal with the persistent user/oRPC signal. |
| 87 | // Called once per attempt inside execute() so every retry gets its own timeout budget. |
| 88 | function mergeSignal(userSignal: AbortSignal | undefined, effectiveTimeoutMs: number | undefined): AbortSignal | undefined { |
| 89 | const timeoutSignal = effectiveTimeoutMs !== undefined && effectiveTimeoutMs > 0 |
| 90 | ? AbortSignal.timeout(effectiveTimeoutMs) |
| 91 | : undefined |
| 92 | |
| 93 | if (timeoutSignal === undefined) |
| 94 | return userSignal |
| 95 | if (userSignal === undefined) |
| 96 | return timeoutSignal |
| 97 | return AbortSignal.any([timeoutSignal, userSignal]) |
| 98 | } |
| 99 | |
| 100 | function mergeHeaders(input: HeadersInit | undefined, contentType: string | undefined): Headers { |
| 101 | const headers = new Headers(input ?? {}) |