import { Router, AnyRoute, ExtractRouteParams } from '@kaito-http/core'; import { SSEEvent, KaitoSSEResponse } from '@kaito-http/core/stream'; type PickRequiredKeys = { [K in keyof T as undefined extends T[K] ? never : K]: T[K]; }; type IfNeverThenUndefined = [T] extends [never] ? undefined : T; type IfNoKeysThenUndefined = [keyof T] extends [never] ? undefined : T; type MakeQueryUndefinedIfNoRequiredKeys = [keyof T] extends [never] ? undefined : [keyof PickRequiredKeys] extends [never] ? T | undefined : T; type RemoveOnlyUndefinedKeys = { [K in keyof T as [T[K]] extends [undefined] ? never : K]: T[K]; }; type UndefinedKeysToOptional = { [K in keyof T as undefined extends T[K] ? K : never]?: T[K]; } & { [K in keyof T as undefined extends T[K] ? never : K]: T[K]; }; type IsExactly = T extends A ? (A extends T ? True : False) : False; type AlwaysEnabledOptions = { signal?: AbortSignal | null | undefined; headers?: HeadersInit; }; declare class KaitoClientHTTPError extends Error { readonly request: Request; readonly response: Response; readonly body: { message: string; }; constructor(request: Request, response: Response, body: { message: string; }); } type JSONIFY = T extends { toJSON(...args: any): infer R; } ? R : T extends Record ? { [K in keyof T]: JSONIFY; } : T extends Array ? Array> : T; type Prettify = { [K in keyof T]: T[K]; } & {}; interface KaitoHTTPClientRootOptions { /** * The base URL for all API requests. * All paths will be resolved relative to this URL. * * @example 'https://api.example.com' */ base: string; /** * A function that is called before the request is made. * Useful for adding headers, authentication, etc. * * @param url The URL to make the request to * @param init The request init object * @returns A Promise resolving to the modified Request object * * @example * ```ts * before: async (url, init) => { * const request = new Request(url, init); * request.headers.set('Authorization', 'Bearer token'); * return request; * } * ``` */ before?: (url: URL, init: RequestInit) => Promise; /** * Custom fetch implementation to use instead of the global fetch. * Useful for adding custom fetch behavior or using a different fetch implementation. * * @param request The Request object to fetch * @returns A Promise resolving to the Response * * @example * ```ts * fetch: async (request) => { * const response = await customFetch(request); * return response; * } * ``` */ fetch?: (request: Request) => Promise; } declare class KaitoSSEStream> implements AsyncIterable { private readonly stream; private buffer; constructor(stream: ReadableStream>); private parseEvent; [Symbol.asyncIterator](): AsyncGenerator; /** * Get the underlying stream for more advanced use cases */ getStream(): ReadableStream; } declare function createKaitoHTTPClient = never>(rootOptions: KaitoHTTPClientRootOptions): { get: ? R : never, AnyRoute>, { method: "GET"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "GET"; path: Path; }>["run"]>>>>; post: ? R : never, AnyRoute>, { method: "POST"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "POST"; path: Path; }>["run"]>>>>; put: ? R : never, AnyRoute>, { method: "PUT"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "PUT"; path: Path; }>["run"]>>>>; patch: ? R : never, AnyRoute>, { method: "PATCH"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "PATCH"; path: Path; }>["run"]>>>>; delete: ? R : never, AnyRoute>, { method: "DELETE"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "DELETE"; path: Path; }>["run"]>>>>; head: ? R : never, AnyRoute>, { method: "HEAD"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "HEAD"; path: Path; }>["run"]>>>>; options: ? R : never, AnyRoute>, { method: "OPTIONS"; }>["path"]>(path: Path, ...[options]: [keyof PickRequiredKeys<{ body: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T ? { [K in keyof T]: T[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>>, Response, true, never>>; }>] extends [never] ? [options?: AlwaysEnabledOptions] : [options: RemoveOnlyUndefinedKeys ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["body"]>["_input"]>; params: IfNoKeysThenUndefined, string>>; query: MakeQueryUndefinedIfNoRequiredKeys ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["query"]>]: NonNullable ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["query"]>[Key]>["_input"]; }> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>; sse: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>> extends KaitoSSEResponse ? true : never>; response: IfNeverThenUndefined ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>>, Response, true, never>>; }>> & AlwaysEnabledOptions]) => Promise ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>> extends KaitoSSEResponse> ? KaitoSSEStream : JSONIFY ? R : never, AnyRoute>, { method: "OPTIONS"; path: Path; }>["run"]>>>>; }; declare function isKaitoClientHTTPError(error: unknown): error is KaitoClientHTTPError; export { type AlwaysEnabledOptions, type IfNeverThenUndefined, type IfNoKeysThenUndefined, type IsExactly, type JSONIFY, KaitoClientHTTPError, type KaitoHTTPClientRootOptions, KaitoSSEStream, type MakeQueryUndefinedIfNoRequiredKeys, type PickRequiredKeys, type Prettify, type RemoveOnlyUndefinedKeys, type UndefinedKeysToOptional, createKaitoHTTPClient, isKaitoClientHTTPError };