type HeadersInit = Record; export type TransportRequestArgs = { method: string; params: readonly unknown[]; }; export type TransportRequestOptions = { signal?: AbortSignal; headers?: HeadersInit; }; export type TransportRequestFn = (args: TransportRequestArgs, opts?: TransportRequestOptions) => Promise; export type TransportInstance = { type: string; url?: string; request: TransportRequestFn; }; export type TransportConfig = { /** 요청당 기본 timeout (ms). 기본값 30_000. */ timeout?: number; /** 모든 요청에 병합되는 기본 헤더. */ headers?: HeadersInit; /** 모든 요청에 병합되는 추가 fetch 옵션. */ fetchOptions?: Omit; /** * 클라이언트-레벨 AbortSignal. 이 transport 로 만들어진 모든 fetch 에 자동 * 첨부되며, per-request `opts.signal` 및 내부 timeout signal 과 함께 * `AbortSignal.any` 로 병합된다. abort 한 번이면 이 transport 의 모든 * in-flight 요청이 즉시 cancel. */ signal?: AbortSignal; }; /** * Transport 는 팩토리다 — (보통 createClient 가) 호출하면 request-id 카운터 * 와 상태에 바인드된 실제 TransportInstance 를 반환한다. */ export type Transport = (config?: { id?: () => number; }) => TransportInstance; export {};