UNPKG

4.95 kBTypeScriptView Raw
1import * as fetch from 'node-fetch';
2import * as https from 'node:https';
3
4export declare function createBuilder(
5 transport?: Transport
6): HttpTransportBuilder;
7export declare function createClient(): HttpTransportClient;
8
9declare type callbackFunction<T> = (err: any, value?: T) => void;
10export declare type Plugin<
11 ContextExtra = {},
12 ContextCurrent extends Context = Context
13> = (
14 ctx: ContextCurrent & ContextExtra,
15 next: () => (void | Promise<void>)
16) => any;
17export declare type Header = Object;
18export declare type Querystring = Object;
19export declare type Body = string;
20export declare type RequestOptions = Object;
21export declare type ErrorObject = {
22 message: string;
23};
24
25export declare type JsonResponse = {
26 body: string;
27 elapsedTime: number;
28 url: string;
29 headers: Object;
30 statusCode: number;
31};
32
33declare type RetryAttempt = {
34 reason: string;
35 statusCode: number;
36};
37
38declare type contextDefaults = {
39 userAgent?: string;
40 retries?: number;
41 retryDelay?: number;
42};
43
44declare type ToJsonOpts = {
45 throwOnConflict?: boolean;
46 force?: boolean;
47};
48
49declare enum Method {
50 get,
51 set,
52 put,
53 patch,
54 delete,
55 head,
56 options
57}
58
59export declare function toJson(opts: ToJsonOpts): Plugin;
60export declare function logger(logger?: any): Plugin;
61export declare function setContextProperty(opts: any, path: string): Plugin;
62
63export declare class Request {
64 addQuery(key: string, value: string): Request;
65 addHeader(key: string, value: string): Request;
66 body(content: string): Request;
67 method(method: Method): Request;
68 baseUrl(baseUrl: string): Request;
69 timeout(timeout: number): Request;
70 getMethod(): Method;
71 getTimeout(): number;
72 getUrl(): string;
73 getRequestKey(): string;
74 getHeaders(): Object;
75 getQueries(): Object;
76 hasQueries(): boolean;
77 hasBaseQueries(): boolean;
78 hasHeaders(): boolean;
79 getBody(): string;
80 create(): Request;
81}
82
83export declare class Response {
84 headers: Header[];
85 elapsedTime: number;
86 url: string;
87 statusCode: number;
88 body: Body;
89 httpResponse?: fetch.Response;
90 readonly length: number;
91 static create(opts?: JsonResponse): Response;
92 addHeader(key: string, value: string): Request;
93 getHeader(key: string): string;
94 toJSON(): JsonResponse;
95}
96
97export declare class HttpTransportBuilder<
98 ContextCurrent extends Context = Context
99> {
100 userAgent(userAgent: string): HttpTransportBuilder<ContextCurrent>;
101 retries(retries: number): HttpTransportBuilder<ContextCurrent>;
102 retryDelay(retryDelay: number): HttpTransportBuilder<ContextCurrent>;
103 use<ContextExtra = {}>(
104 fn: Plugin<ContextExtra, ContextCurrent>
105 ): HttpTransportBuilder<ContextExtra & ContextCurrent>;
106 createClient(): HttpTransportClient<ContextCurrent>;
107}
108
109export declare class HttpTransportClient<
110 ContextCurrent extends Context = Context
111> {
112 use<ContextExtra = {}>(
113 fn: Plugin<ContextExtra & ContextCurrent>
114 ): HttpTransportClient<ContextExtra & ContextCurrent>;
115 get(baseUrl: string): HttpTransportClient<ContextCurrent>;
116 post(
117 baseUrl: string,
118 body: string | object
119 ): HttpTransportClient<ContextCurrent>;
120 patch(
121 baseUrl: string,
122 body: string | object
123 ): HttpTransportClient<ContextCurrent>;
124 put(
125 baseUrl: string,
126 body: string | object
127 ): HttpTransportClient<ContextCurrent>;
128 delete(baseUrl: string): HttpTransportClient<ContextCurrent>;
129 head(baseUrl: string): HttpTransportClient<ContextCurrent>;
130 headers(headers: Header): HttpTransportClient<ContextCurrent>;
131 query(query: Querystring): HttpTransportClient<ContextCurrent>;
132 timeout(timeout: number): HttpTransportClient<ContextCurrent>;
133 retries(retries: number): HttpTransportClient<ContextCurrent>;
134 retryDelay(retryDelay: number): HttpTransportClient<ContextCurrent>;
135 asBody(): Promise<ContextCurrent["res"]["body"]>;
136 asResponse(): Promise<ContextCurrent["res"]>;
137}
138
139declare class Context {
140 plugins: Plugin[];
141 req: Request;
142 res: Response;
143
144 static create(defaults: contextDefaults): any;
145 retryAttempts: Array<RetryAttempt>;
146 addPlugin(plugin: Plugin): Context;
147}
148
149export type TransportOptions = {
150 agentOpts?: https.AgentOptions,
151 defaults?: {
152 timeout?: number
153 compress?: boolean
154 proxy?: string
155 }
156}
157
158export declare class defaultTransport extends FetchTransport {
159 constructor(options: TransportOptions);
160}
161export declare class FetchTransport extends Transport {
162 constructor(options: TransportOptions);
163}
164
165export declare class Transport {
166 toError(err: ErrorObject, ctx: Context): Error;
167 createError(err: ErrorObject, ctx: Context): Error;
168 execute(ctx: Context): Promise<FetchTransport>;
169 onError(ctx: Context): Function;
170 toOptions(ctx: Context): RequestOptions;
171 toResponse(ctx: Context, from: fetch.Response): Response;
172 makeRequest(ctx: Context, opts: RequestOptions): Promise<Response>;
173}
174
175export declare var builder: HttpTransportBuilder;
176export declare var transport: Transport;
177export declare var context: Context;