/** * An environments implementation of ``getUrl`` must return this type. */ export type GetUrlResponse = { statusCode: number; statusMessage: string; headers: Record; body: null | Uint8Array; }; /** * This can be used to control how throttling is handled in * [[FetchRequest-setThrottleParams]]. */ export type FetchThrottleParams = { maxAttempts?: number; slotInterval?: number; }; /** * Called before any network request, allowing updated headers (e.g. Bearer tokens), etc. */ export type FetchPreflightFunc = (req: FetchRequest) => Promise; /** * Called on the response, allowing client-based throttling logic or post-processing. */ export type FetchProcessFunc = (req: FetchRequest, resp: FetchResponse) => Promise; /** * Called prior to each retry; return true to retry, false to abort. */ export type FetchRetryFunc = (req: FetchRequest, resp: FetchResponse, attempt: number) => Promise; /** * Called on Gateway URLs. */ export type FetchGatewayFunc = (url: string, signal?: FetchCancelSignal) => Promise; /** * Used to perform a fetch; use this to override the underlying network * fetch layer. In NodeJS, the default uses the "http" and "https" libraries * and in the browser ``fetch`` is used. If you wish to use Axios, this is * how you would register it. */ export type FetchGetUrlFunc = (req: FetchRequest, signal?: FetchCancelSignal) => Promise; /** * @_ignore */ export declare class FetchCancelSignal { #private; constructor(request: FetchRequest); addListener(listener: () => void): void; get cancelled(): boolean; checkSignal(): void; } /** * Represents a request for a resource using a URI. * * By default, the supported schemes are ``HTTP``, ``HTTPS``, ``data:``, * and ``IPFS:``. * * Additional schemes can be added globally using [[registerGateway]]. * * @example: * req = new FetchRequest("https://www.ricmoo.com") * resp = await req.send() * resp.body.length * //_result: */ export declare class FetchRequest implements Iterable<[key: string, value: string]> { #private; /** * The fetch URI to requrest. */ get url(): string; set url(url: string); /** * The fetch body, if any, to send as the request body. //(default: null)// * * When setting a body, the intrinsic ``Content-Type`` is automatically * set and will be used if **not overridden** by setting a custom * header. * * If %%body%% is null, the body is cleared (along with the * intrinsic ``Content-Type``) and the . * * If %%body%% is a string, the intrincis ``Content-Type`` is set to * ``text/plain``. * * If %%body%% is a Uint8Array, the intrincis ``Content-Type`` is set to * ``application/octet-stream``. * * If %%body%% is any other object, the intrincis ``Content-Type`` is * set to ``application/json``. */ get body(): null | Uint8Array; set body(body: null | string | Readonly | Readonly); /** * Returns true if the request has a body. */ hasBody(): this is (FetchRequest & { body: Uint8Array; }); /** * The HTTP method to use when requesting the URI. If no method * has been explicitly set, then ``GET`` is used if the body is * null and ``POST`` otherwise. */ get method(): string; set method(method: null | string); /** * The headers that will be used when requesting the URI. All * keys are lower-case. * * This object is a copy, so any chnages will **NOT** be reflected * in the ``FetchRequest``. * * To set a header entry, use the ``setHeader`` method. */ get headers(): Record; /** * Get the header for %%key%%, ignoring case. */ getHeader(key: string): string; /** * Set the header for %%key%% to %%value%%. All values are coerced * to a string. */ setHeader(key: string, value: string | number): void; /** * Clear all headers, resetting all intrinsic headers. */ clearHeaders(): void; [Symbol.iterator](): Iterator<[key: string, value: string]>; /** * The value that will be sent for the ``Authorization`` header. * * To set the credentials, use the ``setCredentials`` method. */ get credentials(): null | string; /** * Sets an ``Authorization`` for %%username%% with %%password%%. */ setCredentials(username: string, password: string): void; /** * Enable and request gzip-encoded responses. The response will * automatically be decompressed. //(default: true)// */ get allowGzip(): boolean; set allowGzip(value: boolean); /** * Allow ``Authentication`` credentials to be sent over insecure * channels. //(default: false)// */ get allowInsecureAuthentication(): boolean; set allowInsecureAuthentication(value: boolean); /** * The timeout (in milliseconds) to wait for a complere response. * //(default: 5 minutes)// */ get timeout(): number; set timeout(timeout: number); /** * This function is called prior to each request, for example * during a redirection or retry in case of server throttling. * * This offers an opportunity to populate headers or update * content before sending a request. */ get preflightFunc(): null | FetchPreflightFunc; set preflightFunc(preflight: null | FetchPreflightFunc); /** * This function is called after each response, offering an * opportunity to provide client-level throttling or updating * response data. * * Any error thrown in this causes the ``send()`` to throw. * * To schedule a retry attempt (assuming the maximum retry limit * has not been reached), use [[response.throwThrottleError]]. */ get processFunc(): null | FetchProcessFunc; set processFunc(process: null | FetchProcessFunc); /** * This function is called on each retry attempt. */ get retryFunc(): null | FetchRetryFunc; set retryFunc(retry: null | FetchRetryFunc); /** * Create a new FetchRequest instance with default values. * * Once created, each property may be set before issuing a * ``.send()`` to make the request. */ constructor(url: string); toString(): string; /** * Update the throttle parameters used to determine maximum * attempts and exponential-backoff properties. */ setThrottleParams(params: FetchThrottleParams): void; /** * Resolves to the response by sending the request. */ send(): Promise; /** * Cancels the inflight response, causing a ``CANCELLED`` * error to be rejected from the [[send]]. */ cancel(): void; /** * Returns a new [[FetchRequest]] that represents the redirection * to %%location%%. */ redirect(location: string): FetchRequest; /** * Create a new copy of this request. */ clone(): FetchRequest; /** * Locks all static configuration for gateways and FetchGetUrlFunc * registration. */ static lockConfig(): void; /** * Get the current Gateway function for %%scheme%%. */ static getGateway(scheme: string): null | FetchGatewayFunc; /** * Use the %%func%% when fetching URIs using %%scheme%%. * * This method affects all requests globally. * * If [[lockConfig]] has been called, no change is made and this * throws. */ static registerGateway(scheme: string, func: FetchGatewayFunc): void; /** * Use %%getUrl%% when fetching URIs over HTTP and HTTPS requests. * * This method affects all requests globally. * * If [[lockConfig]] has been called, no change is made and this * throws. */ static registerGetUrl(getUrl: FetchGetUrlFunc): void; /** * Creates a function that can "fetch" data URIs. * * Note that this is automatically done internally to support * data URIs, so it is not necessary to register it. * * This is not generally something that is needed, but may * be useful in a wrapper to perfom custom data URI functionality. */ static createDataGateway(): FetchGatewayFunc; /** * Creates a function that will fetch IPFS (unvalidated) from * a custom gateway baseUrl. * * The default IPFS gateway used internally is * ``"https:/\/gateway.ipfs.io/ipfs/"``. */ static createIpfsGatewayFunc(baseUrl: string): FetchGatewayFunc; } /** * The response for a FetchREquest. */ export declare class FetchResponse implements Iterable<[key: string, value: string]> { #private; toString(): string; /** * The response status code. */ get statusCode(): number; /** * The response status message. */ get statusMessage(): string; /** * The response headers. All keys are lower-case. */ get headers(): Record; /** * The response body, or ``null`` if there was no body. */ get body(): null | Readonly; /** * The response body as a UTF-8 encoded string, or the empty * string (i.e. ``""``) if there was no body. * * An error is thrown if the body is invalid UTF-8 data. */ get bodyText(): string; /** * The response body, decoded as JSON. * * An error is thrown if the body is invalid JSON-encoded data * or if there was no body. */ get bodyJson(): any; [Symbol.iterator](): Iterator<[key: string, value: string]>; constructor(statusCode: number, statusMessage: string, headers: Readonly>, body: null | Uint8Array, request?: FetchRequest); /** * Return a Response with matching headers and body, but with * an error status code (i.e. 599) and %%message%% with an * optional %%error%%. */ makeServerError(message?: string, error?: Error): FetchResponse; /** * If called within a [request.processFunc](FetchRequest-processFunc) * call, causes the request to retry as if throttled for %%stall%% * milliseconds. */ throwThrottleError(message?: string, stall?: number): never; /** * Get the header value for %%key%%, ignoring case. */ getHeader(key: string): string; /** * Returns true of the response has a body. */ hasBody(): this is (FetchResponse & { body: Uint8Array; }); /** * The request made for this response. */ get request(): null | FetchRequest; /** * Returns true if this response was a success statusCode. */ ok(): boolean; /** * Throws a ``SERVER_ERROR`` if this response is not ok. */ assertOk(): void; } //# sourceMappingURL=fetch.d.ts.map