UNPKG

ox

Version:

Ethereum Standard Library

66 lines 3.54 kB
import * as Errors from './Errors.js'; import * as promise from './internal/promise.js'; import type * as RpcSchema_internal from './internal/rpcSchema.js'; import * as internal from './internal/rpcTransport.js'; import type { Compute } from './internal/types.js'; import type * as RpcResponse from './RpcResponse.js'; import type * as RpcSchema from './RpcSchema.js'; /** Root type for an RPC Transport. */ export type RpcTransport<raw extends boolean = false, options extends Record<string, unknown> = {}, schema extends RpcSchema.Generic = RpcSchema.Default> = Compute<{ request: RequestFn<raw, options, schema>; }>; /** HTTP-based RPC Transport. */ export type Http<raw extends boolean = false, schema extends RpcSchema.Generic = RpcSchema.Default> = RpcTransport<raw, HttpOptions, schema>; export type HttpOptions = { /** Request configuration to pass to `fetch`. */ fetchOptions?: Omit<RequestInit, 'body'> | ((method: RpcSchema.Generic['Request']) => Omit<RequestInit, 'body'> | Promise<Omit<RequestInit, 'body'>>) | undefined; /** Function to use to make the request. @default fetch */ fetchFn?: typeof fetch | undefined; /** Timeout for the request in milliseconds. @default 10_000 */ timeout?: number | undefined; }; export type RequestFn<raw extends boolean = false, options extends Record<string, unknown> = {}, schema extends RpcSchema.Generic = RpcSchema.Default> = <methodName extends RpcSchema.MethodNameGeneric, raw_override extends boolean | undefined = undefined>(parameters: Compute<RpcSchema_internal.ExtractRequestOpaque<schema, methodName>>, options?: internal.Options<raw_override, options, schema>) => Promise<raw_override extends boolean ? raw_override extends true ? RpcResponse.RpcResponse<RpcSchema.ExtractReturnType<schema, methodName>> : RpcSchema.ExtractReturnType<schema, methodName> : raw extends true ? RpcResponse.RpcResponse<RpcSchema.ExtractReturnType<schema, methodName>> : RpcSchema.ExtractReturnType<schema, methodName>>; /** * Creates a HTTP JSON-RPC Transport from a URL. * * @example * ```ts twoslash * import { RpcTransport } from 'ox' * * const transport = RpcTransport.fromHttp( * 'https://1.rpc.thirdweb.com' * ) * * const blockNumber = await transport.request({ * method: 'eth_blockNumber' * }) * // @log: '0x1a2b3c' * ``` * * @param url - URL to perform the JSON-RPC requests to. * @param options - Transport options. * @returns HTTP JSON-RPC Transport. */ export declare function fromHttp<raw extends boolean = false, schema extends RpcSchema.Schema = RpcSchema.Default>(url: string, options?: fromHttp.Options<raw, schema>): Http<raw, RpcSchema.ToGeneric<schema>>; export declare namespace fromHttp { type Options<raw extends boolean = false, schema extends RpcSchema.Schema = RpcSchema.Default> = internal.Options<raw, HttpOptions, schema>; type ErrorType = promise.withTimeout.ErrorType | HttpError | Errors.GlobalErrorType; } /** Thrown when a HTTP request fails. */ export declare class HttpError extends Errors.BaseError { readonly name = "RpcTransport.HttpError"; constructor({ body, details, response, url, }: { body: unknown; details: string; response: Response; url: string; }); } /** Thrown when a HTTP response is malformed. */ export declare class MalformedResponseError extends Errors.BaseError { readonly name = "RpcTransport.MalformedResponseError"; constructor({ response }: { response: string; }); } //# sourceMappingURL=RpcTransport.d.ts.map