SIGN IN SIGN UP

feat(api): introduce RequestConfigBuilder for SDK-agnostic abort signal support (#1008)

* feat(api): add RequestConfigBuilder class for SDK-agnostic request configuration

Body: Implement generic request configuration builder with chainable methods (addAbortSignal, addHeaders, setOption), static factory methods (fromMetadata, mergeAbortSignals), and 40 unit tests.

* docs(config-builder): enhance README with generic architecture design and multi-SDK examples

* fix(config-builder): fix broken TOC link and simplify mergeAbortSignals early-abort

- Fix README TOC: change #how-mergesignals-works to
  #how-mergeabortsignals-works to match the actual heading anchor
- Simplify mergeAbortSignals: return primarySignal directly when it's
  already aborted instead of creating a new AbortController

* fix: addHeaders default param and mergeAbortSignals order in RequestConfigBuilder (#615)

- Add default empty object parameter to addHeaders() so calling with
  undefined no longer throws TypeError from Object.keys(undefined)
- Reorder mergeAbortSignals to check primarySignal.aborted before
  allocating AbortController, preventing unnecessary controller creation

* refactor: use AbortSignal.any() for mergeAbortSignals

* feat(api): add abort signal builder utilities

* fix(api): prevent cleanup leaking into request config

* fix(api): chain request config cleanup

* docs(api): remove config builder readme

* fix(api): relax request config option constraints

* fix(api): address review feedback on request config builder

- rename addAbortSignal to setAbortSignal and document replace semantics
- type build()/fromMetadata() as Partial<TOptions> | undefined
- drop static mergeAbortSignals delegation in favor of the exported utility
- cover internal-controller abort propagation through addMergedSignal
- cover timeout-alone and primary-signal abort cases in abort-signal tests

* refactor(api): use native AbortSignal.timeout() in mergeAbortSignalAndTimeout

Replace the hand-rolled setTimeout/clearTimeout with AbortSignal.timeout(), which self-manages its timer. This removes the MergedAbortSignal cleanup contract and the leak risk when a caller forgets to run it, matching existing usage in zoo-code-auth, mcp oauth, and openai-codex oauth.

- mergeAbortSignalAndTimeout now returns AbortSignal | undefined

- RequestConfigBuilder drops getCleanup()/cleanupFn accumulation

* fix(api): isolate builder headers and harden config-builder tests

---------

Co-authored-by: Eason Liang <easonliang28@gmail.com>
Co-authored-by: Elliott de Launay <edelaunay@wealthsimple.com>
E
eason liang committed
dbad4af1058fa2949ff79c81254b6d784b5bb69d
Parent: 3e8144a
Committed by GitHub <noreply@github.com> on 8/18/2026, 11:12:37 PM