UNPKG

9.83 kBTypeScriptView Raw
1import { Agent } from 'http';
2import { URL } from 'url';
3import { Readable } from 'stream';
4/**
5 * Support `instanceof` operator for `GaxiosError`s in different versions of this library.
6 *
7 * @see {@link GaxiosError[Symbol.hasInstance]}
8 */
9export declare const GAXIOS_ERROR_SYMBOL: unique symbol;
10export declare class GaxiosError<T = any> extends Error {
11 config: GaxiosOptions;
12 response?: GaxiosResponse<T> | undefined;
13 error?: (Error | NodeJS.ErrnoException) | undefined;
14 /**
15 * An Error code.
16 * See {@link https://nodejs.org/api/errors.html#errorcode error.code}
17 *
18 * @example
19 * 'ECONNRESET'
20 */
21 code?: string;
22 /**
23 * An HTTP Status code.
24 * See {@link https://developer.mozilla.org/en-US/docs/Web/API/Response/status Response: status property}
25 *
26 * @example
27 * 500
28 */
29 status?: number;
30 /**
31 * Support `instanceof` operator for `GaxiosError` across builds/duplicated files.
32 *
33 * @see {@link GAXIOS_ERROR_SYMBOL}
34 * @see {@link GaxiosError[Symbol.hasInstance]}
35 * @see {@link https://github.com/microsoft/TypeScript/issues/13965#issuecomment-278570200}
36 * @see {@link https://stackoverflow.com/questions/46618852/require-and-instanceof}
37 * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/@@hasInstance#reverting_to_default_instanceof_behavior}
38 */
39 [GAXIOS_ERROR_SYMBOL]: string;
40 /**
41 * Support `instanceof` operator for `GaxiosError` across builds/duplicated files.
42 *
43 * @see {@link GAXIOS_ERROR_SYMBOL}
44 * @see {@link GaxiosError[GAXIOS_ERROR_SYMBOL]}
45 */
46 static [Symbol.hasInstance](instance: unknown): boolean;
47 constructor(message: string, config: GaxiosOptions, response?: GaxiosResponse<T> | undefined, error?: (Error | NodeJS.ErrnoException) | undefined);
48}
49export interface Headers {
50 [index: string]: any;
51}
52export type GaxiosPromise<T = any> = Promise<GaxiosResponse<T>>;
53export interface GaxiosXMLHttpRequest {
54 responseURL: string;
55}
56export interface GaxiosResponse<T = any> {
57 config: GaxiosOptions;
58 data: T;
59 status: number;
60 statusText: string;
61 headers: Headers;
62 request: GaxiosXMLHttpRequest;
63}
64export interface GaxiosMultipartOptions {
65 headers: Headers;
66 content: string | Readable;
67}
68/**
69 * Request options that are used to form the request.
70 */
71export interface GaxiosOptions {
72 /**
73 * Optional method to override making the actual HTTP request. Useful
74 * for writing tests.
75 */
76 adapter?: <T = any>(options: GaxiosOptions, defaultAdapter: (options: GaxiosOptions) => GaxiosPromise<T>) => GaxiosPromise<T>;
77 url?: string | URL;
78 /**
79 * @deprecated
80 */
81 baseUrl?: string;
82 baseURL?: string | URL;
83 method?: 'GET' | 'HEAD' | 'POST' | 'DELETE' | 'PUT' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'PATCH';
84 headers?: Headers;
85 data?: any;
86 body?: any;
87 /**
88 * The maximum size of the http response content in bytes allowed.
89 */
90 maxContentLength?: number;
91 /**
92 * The maximum number of redirects to follow. Defaults to 20.
93 */
94 maxRedirects?: number;
95 follow?: number;
96 /**
97 * A collection of parts to send as a `Content-Type: multipart/related` request.
98 */
99 multipart?: GaxiosMultipartOptions[];
100 params?: any;
101 paramsSerializer?: (params: {
102 [index: string]: string | number;
103 }) => string;
104 timeout?: number;
105 /**
106 * @deprecated ignored
107 */
108 onUploadProgress?: (progressEvent: any) => void;
109 responseType?: 'arraybuffer' | 'blob' | 'json' | 'text' | 'stream' | 'unknown';
110 agent?: Agent | ((parsedUrl: URL) => Agent);
111 validateStatus?: (status: number) => boolean;
112 retryConfig?: RetryConfig;
113 retry?: boolean;
114 signal?: any;
115 size?: number;
116 /**
117 * Implementation of `fetch` to use when making the API call. By default,
118 * will use the browser context if available, and fall back to `node-fetch`
119 * in node.js otherwise.
120 */
121 fetchImplementation?: FetchImplementation;
122 cert?: string;
123 key?: string;
124 /**
125 * An optional proxy to use for requests.
126 * Available via `process.env.HTTP_PROXY` and `process.env.HTTPS_PROXY` as well - with a preference for the this config option when multiple are available.
127 * The {@link GaxiosOptions.agent `agent`} option overrides this.
128 *
129 * @see {@link GaxiosOptions.noProxy}
130 * @see {@link GaxiosOptions.agent}
131 */
132 proxy?: string | URL;
133 /**
134 * A list for excluding traffic for proxies.
135 * Available via `process.env.NO_PROXY` as well as a common-separated list of strings - merged with any local `noProxy` rules.
136 *
137 * - When provided a string, it is matched by
138 * - Wildcard `*.` and `.` matching are available. (e.g. `.example.com` or `*.example.com`)
139 * - When provided a URL, it is matched by the `.origin` property.
140 * - For example, requesting `https://example.com` with the following `noProxy`s would result in a no proxy use:
141 * - new URL('https://example.com')
142 * - new URL('https://example.com:443')
143 * - The following would be used with a proxy:
144 * - new URL('http://example.com:80')
145 * - new URL('https://example.com:8443')
146 * - When provided a regular expression it is used to match the stringified URL
147 *
148 * @see {@link GaxiosOptions.proxy}
149 */
150 noProxy?: (string | URL | RegExp)[];
151 /**
152 * An experimental error redactor.
153 *
154 * @remarks
155 *
156 * This does not replace the requirement for an active Data Loss Prevention (DLP) provider. For DLP suggestions, see:
157 * - https://cloud.google.com/sensitive-data-protection/docs/redacting-sensitive-data#dlp_deidentify_replace_infotype-nodejs
158 * - https://cloud.google.com/sensitive-data-protection/docs/infotypes-reference#credentials_and_secrets
159 *
160 * @experimental
161 */
162 errorRedactor?: typeof defaultErrorRedactor | false;
163}
164/**
165 * A partial object of `GaxiosResponse` with only redactable keys
166 *
167 * @experimental
168 */
169export type RedactableGaxiosOptions = Pick<GaxiosOptions, 'body' | 'data' | 'headers' | 'url'>;
170/**
171 * A partial object of `GaxiosResponse` with only redactable keys
172 *
173 * @experimental
174 */
175export type RedactableGaxiosResponse<T = any> = Pick<GaxiosResponse<T>, 'config' | 'data' | 'headers'>;
176/**
177 * Configuration for the Gaxios `request` method.
178 */
179export interface RetryConfig {
180 /**
181 * The number of times to retry the request. Defaults to 3.
182 */
183 retry?: number;
184 /**
185 * The number of retries already attempted.
186 */
187 currentRetryAttempt?: number;
188 /**
189 * The amount of time to initially delay the retry, in ms. Defaults to 100ms.
190 */
191 retryDelay?: number;
192 /**
193 * The HTTP Methods that will be automatically retried.
194 * Defaults to ['GET','PUT','HEAD','OPTIONS','DELETE']
195 */
196 httpMethodsToRetry?: string[];
197 /**
198 * The HTTP response status codes that will automatically be retried.
199 * Defaults to: [[100, 199], [408, 408], [429, 429], [500, 599]]
200 */
201 statusCodesToRetry?: number[][];
202 /**
203 * Function to invoke when a retry attempt is made.
204 */
205 onRetryAttempt?: (err: GaxiosError) => Promise<void> | void;
206 /**
207 * Function to invoke which determines if you should retry
208 */
209 shouldRetry?: (err: GaxiosError) => Promise<boolean> | boolean;
210 /**
211 * When there is no response, the number of retries to attempt. Defaults to 2.
212 */
213 noResponseRetries?: number;
214 /**
215 * Function to invoke which returns a promise. After the promise resolves,
216 * the retry will be triggered. If provided, this will be used in-place of
217 * the `retryDelay`
218 */
219 retryBackoff?: (err: GaxiosError, defaultBackoffMs: number) => Promise<void>;
220 /**
221 * Time that the initial request was made. Users should not set this directly.
222 */
223 timeOfFirstRequest?: number;
224 /**
225 * The length of time to keep retrying in ms. The last sleep period will
226 * be shortened as necessary, so that the last retry runs at deadline (and not
227 * considerably beyond it). The total time starting from when the initial
228 * request is sent, after which an error will be returned, regardless of the
229 * retrying attempts made meanwhile. Defaults to Number.MAX_SAFE_INTEGER indicating to effectively
230 * ignore totalTimeout.
231 */
232 totalTimeout?: number;
233 maxRetryDelay?: number;
234 retryDelayMultiplier?: number;
235}
236export type FetchImplementation = (input: FetchRequestInfo, init?: FetchRequestInit) => Promise<FetchResponse>;
237export type FetchRequestInfo = any;
238export interface FetchResponse {
239 readonly status: number;
240 readonly statusText: string;
241 readonly url: string;
242 readonly body: unknown | null;
243 arrayBuffer(): Promise<unknown>;
244 blob(): Promise<unknown>;
245 readonly headers: FetchHeaders;
246 json(): Promise<any>;
247 text(): Promise<string>;
248}
249export interface FetchRequestInit {
250 method?: string;
251}
252export interface FetchHeaders {
253 append(name: string, value: string): void;
254 delete(name: string): void;
255 get(name: string): string | null;
256 has(name: string): boolean;
257 set(name: string, value: string): void;
258 forEach(callbackfn: (value: string, key: string) => void, thisArg?: any): void;
259}
260/**
261 * An experimental error redactor.
262 *
263 * @param config Config to potentially redact properties of
264 * @param response Config to potentially redact properties of
265 *
266 * @experimental
267 */
268export declare function defaultErrorRedactor<T = any>(data: {
269 config?: RedactableGaxiosOptions;
270 response?: RedactableGaxiosResponse<T>;
271}): {
272 config?: RedactableGaxiosOptions;
273 response?: RedactableGaxiosResponse<T>;
274};