codex@macbookpro
·
2026-03-31
execution-timeouts.ts
1export const DEFAULT_BAA_INSTRUCTION_TIMEOUT_MS = 30_000;
2export const DEFAULT_BAA_EXEC_INSTRUCTION_TIMEOUT_MS = 60_000;
3
4export const DEFAULT_BROWSER_PROXY_TIMEOUT_MS = 20_000;
5export const DEFAULT_BROWSER_PROXY_ACTION_RESULT_TIMEOUT_GRACE_MS = 5_000;
6
7export const DEFAULT_BAA_DELIVERY_ACTION_TIMEOUT_MS = 15_000;
8export const DEFAULT_BAA_DELIVERY_ACTION_RESULT_TIMEOUT_MS = 20_000;
9
10export const DEFAULT_RENEWAL_EXECUTION_TIMEOUT_MS = DEFAULT_BROWSER_PROXY_TIMEOUT_MS;
11
12export const DEFAULT_FIREFOX_API_REQUEST_TIMEOUT_MS = 15_000;
13export const DEFAULT_FIREFOX_ACTION_RESULT_TIMEOUT_MS = 10_000;
14export const DEFAULT_FIREFOX_STREAM_IDLE_TIMEOUT_MS = 30_000;
15export const DEFAULT_FIREFOX_STREAM_MAX_BUFFERED_BYTES = 512 * 1024;
16export const DEFAULT_FIREFOX_STREAM_MAX_BUFFERED_EVENTS = 256;
17export const DEFAULT_FIREFOX_STREAM_OPEN_TIMEOUT_MS = 10_000;
18
19export function resolveDeliveryActionResultTimeoutMs(timeoutMs?: number | null): number {
20 return timeoutMs == null
21 ? DEFAULT_BAA_DELIVERY_ACTION_RESULT_TIMEOUT_MS
22 : timeoutMs + DEFAULT_BROWSER_PROXY_ACTION_RESULT_TIMEOUT_GRACE_MS;
23}
24
25export async function withAbortableTimeout<T>(
26 timeoutMs: number,
27 createTimeoutError: () => Error,
28 work: (signal: AbortSignal) => Promise<T>
29): Promise<T> {
30 const controller = new AbortController();
31
32 return await new Promise<T>((resolve, reject) => {
33 let settled = false;
34 const timeoutId = globalThis.setTimeout(() => {
35 const timeoutError = createTimeoutError();
36 controller.abort(timeoutError);
37
38 if (settled) {
39 return;
40 }
41
42 settled = true;
43 reject(timeoutError);
44 }, timeoutMs);
45
46 const finish = (handler: () => void) => {
47 if (settled) {
48 return;
49 }
50
51 settled = true;
52 globalThis.clearTimeout(timeoutId);
53 handler();
54 };
55
56 void Promise.resolve().then(() => work(controller.signal)).then(
57 (value) => {
58 finish(() => {
59 resolve(value);
60 });
61 },
62 (error) => {
63 finish(() => {
64 reject(error);
65 });
66 }
67 );
68 });
69}