zlient 3.3.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth.d.ts +12 -12
- package/dist/auth.d.ts.map +1 -1
- package/dist/endpoint-utils.d.ts +36 -0
- package/dist/endpoint-utils.d.ts.map +1 -0
- package/dist/event-emitter.d.ts +12 -0
- package/dist/event-emitter.d.ts.map +1 -0
- package/dist/http/http-client.d.ts +35 -105
- package/dist/http/http-client.d.ts.map +1 -1
- package/dist/http/http-endpoint.d.ts +2 -2
- package/dist/http/http-endpoint.d.ts.map +1 -1
- package/dist/http/request-utils.d.ts +23 -0
- package/dist/http/request-utils.d.ts.map +1 -0
- package/dist/index.cjs +528 -381
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +527 -382
- package/dist/index.js.map +1 -1
- package/dist/realtime-utils.d.ts +4 -0
- package/dist/realtime-utils.d.ts.map +1 -0
- package/dist/sse/sse-client.d.ts +14 -9
- package/dist/sse/sse-client.d.ts.map +1 -1
- package/dist/sse/sse-endpoint.d.ts.map +1 -1
- package/dist/types.d.ts +24 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +10 -2
- package/dist/validation.d.ts.map +1 -1
- package/dist/ws/ws-client.d.ts +9 -6
- package/dist/ws/ws-client.d.ts.map +1 -1
- package/dist/ws/ws-endpoint.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/auth.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { RequestOptions as ReqOpts } from './types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Context passed to authentication providers when applying credentials.
|
|
4
|
+
* The `url` property is mutable — auth providers that need to add query
|
|
5
|
+
* parameters (e.g. API keys) should update it directly instead of modifying
|
|
6
|
+
* the RequestInit.
|
|
4
7
|
*/
|
|
5
8
|
export interface AuthContext {
|
|
6
9
|
url: string;
|
|
7
|
-
init: RequestInit
|
|
8
|
-
__urlOverride?: string;
|
|
9
|
-
};
|
|
10
|
+
init: RequestInit;
|
|
10
11
|
options?: ReqOpts;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
@@ -16,8 +17,8 @@ export interface AuthContext {
|
|
|
16
17
|
* @example
|
|
17
18
|
* ```ts
|
|
18
19
|
* class CustomAuth implements AuthProvider {
|
|
19
|
-
*
|
|
20
|
-
* init.headers
|
|
20
|
+
* apply({ init }) {
|
|
21
|
+
* (init.headers as Record<string, string>)['X-Custom-Auth'] = 'token';
|
|
21
22
|
* }
|
|
22
23
|
* }
|
|
23
24
|
* ```
|
|
@@ -26,17 +27,16 @@ export interface AuthProvider {
|
|
|
26
27
|
/**
|
|
27
28
|
* Apply authentication to the outgoing request.
|
|
28
29
|
* Called after SDK headers are assembled, but before request is sent.
|
|
29
|
-
*
|
|
30
|
-
* @param req - Request context including URL, init, and options
|
|
30
|
+
* May update `ctx.url` to append query-based credentials.
|
|
31
31
|
*/
|
|
32
|
-
apply(
|
|
32
|
+
apply(ctx: AuthContext): Promise<void> | void;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* No-op authentication provider (no authentication applied).
|
|
36
36
|
* Use this when you don't need authentication.
|
|
37
37
|
*/
|
|
38
38
|
export declare class NoAuth implements AuthProvider {
|
|
39
|
-
apply(
|
|
39
|
+
apply(_ctx: AuthContext): void;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* API Key authentication provider.
|
|
@@ -58,7 +58,7 @@ export declare class ApiKeyAuth implements AuthProvider {
|
|
|
58
58
|
query?: string;
|
|
59
59
|
value: string;
|
|
60
60
|
});
|
|
61
|
-
apply(
|
|
61
|
+
apply(ctx: AuthContext): void;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Bearer token authentication provider.
|
|
@@ -78,6 +78,6 @@ export declare class ApiKeyAuth implements AuthProvider {
|
|
|
78
78
|
export declare class BearerTokenAuth implements AuthProvider {
|
|
79
79
|
private getToken;
|
|
80
80
|
constructor(getToken: () => Promise<string> | string);
|
|
81
|
-
apply(
|
|
81
|
+
apply(ctx: AuthContext): Promise<void>;
|
|
82
82
|
}
|
|
83
83
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,qBAAa,MAAO,YAAW,YAAY;IACzC,KAAK,CAAC,IAAI,EAAE,WAAW;CAGxB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAW,YAAW,YAAY;IACjC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAS5E,KAAK,CAAC,GAAG,EAAE,WAAW;CAgBvB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;IAEtD,KAAK,CAAC,GAAG,EAAE,WAAW;CAc7B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { StandardSchemaV1 } from './types';
|
|
2
|
+
export declare function validateRequiredHeaders(mustHeaderKeys: readonly string[] | undefined, headers: Record<string, string> | undefined): void;
|
|
3
|
+
export declare function parseEndpointValue(schema: StandardSchemaV1 | undefined, value: unknown, skipValidation: boolean, label: string): Promise<unknown>;
|
|
4
|
+
export declare function assertRequiredEndpointValue(schema: StandardSchemaV1 | undefined, value: unknown, missingParam: string, message: string): void;
|
|
5
|
+
export declare function resolveEndpointPath<PathParams>(path: string | ((params: PathParams) => string), rawPathParams: unknown, parsedPathParams: PathParams): string;
|
|
6
|
+
export type EndpointParamsConfig = {
|
|
7
|
+
request?: StandardSchemaV1;
|
|
8
|
+
query?: StandardSchemaV1;
|
|
9
|
+
pathParams?: StandardSchemaV1;
|
|
10
|
+
path: string | ((params: unknown) => string);
|
|
11
|
+
advanced?: {
|
|
12
|
+
skipRequestValidation?: boolean;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export type RawEndpointParams = {
|
|
16
|
+
data?: unknown;
|
|
17
|
+
query?: unknown;
|
|
18
|
+
pathParams?: unknown;
|
|
19
|
+
};
|
|
20
|
+
export type ValidatedEndpointParams = {
|
|
21
|
+
parsedData: unknown;
|
|
22
|
+
parsedQuery: unknown;
|
|
23
|
+
parsedPathParams: unknown;
|
|
24
|
+
pathStr: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Shared validation pipeline used by HTTP, SSE, and WebSocket endpoints.
|
|
28
|
+
* Validates request body, query params, and path params; asserts required
|
|
29
|
+
* fields are present; and resolves the final path string.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateEndpointParams(config: EndpointParamsConfig, raw: RawEndpointParams, labels?: {
|
|
32
|
+
request?: string;
|
|
33
|
+
query?: string;
|
|
34
|
+
path?: string;
|
|
35
|
+
}): Promise<ValidatedEndpointParams>;
|
|
36
|
+
//# sourceMappingURL=endpoint-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-utils.d.ts","sourceRoot":"","sources":["../lib/endpoint-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGrD,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC1C,IAAI,CASN;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,OAAO,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,KAAK,EAAE,OAAO,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,IAAI,CAGN;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAC5C,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,EAC/C,aAAa,EAAE,OAAO,EACtB,gBAAgB,EAAE,UAAU,GAC3B,MAAM,CAUR;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE;QAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,iBAAiB,EACtB,MAAM,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,OAAO,CAAC,uBAAuB,CAAC,CAwClC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventHandler } from './realtime-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal typed event emitter used internally by SSEConnectionImpl and WSConnectionImpl.
|
|
4
|
+
* Not part of the public API.
|
|
5
|
+
*/
|
|
6
|
+
export declare class EventEmitter {
|
|
7
|
+
private handlers;
|
|
8
|
+
on(event: string, handler: EventHandler): void;
|
|
9
|
+
off(event: string, handler: EventHandler): void;
|
|
10
|
+
protected emit(event: string, ...args: unknown[]): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../lib/event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAA6C;IAE7D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAS9C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAI/C,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAMxD"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AuthProvider } from '../auth';
|
|
2
2
|
import { LoggerUtil } from '../logger';
|
|
3
|
-
import { ClientOptions, HTTPMethod, HTTPStatusCodeNumber, RequestOptions, ResponseSchema, SSEEndpointCall, SSEEndpointConfig, SSEResponseSchema, StandardSchemaV1, WSEndpointCall, WSEndpointConfig } from '../types';
|
|
3
|
+
import { ClientOptions, FetchLike, HTTPMethod, HTTPStatusCodeNumber, RequestOptions, ResponseSchema, SSEEndpointCall, SSEEndpointConfig, SSEResponseSchema, StandardSchemaV1, WSEndpointCall, WSEndpointConfig } from '../types';
|
|
4
4
|
import { EndpointCall, EndpointConfig } from './http-endpoint';
|
|
5
5
|
/**
|
|
6
|
-
* HTTP client with built-in authentication, and interceptors.
|
|
6
|
+
* HTTP client with built-in authentication, retry, and interceptors.
|
|
7
7
|
* Supports multiple base URLs, type-safe requests, and comprehensive error handling.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
@@ -13,8 +13,6 @@ import { EndpointCall, EndpointConfig } from './http-endpoint';
|
|
|
13
13
|
* headers: { 'Content-Type': 'application/json' },
|
|
14
14
|
* timeout: { requestTimeoutMs: 30000 }
|
|
15
15
|
* });
|
|
16
|
-
*
|
|
17
|
-
* const { data } = await client.request('GET', '/users', undefined, { query: { page: 1 } });
|
|
18
16
|
* ```
|
|
19
17
|
*/
|
|
20
18
|
export declare class HttpClient {
|
|
@@ -28,46 +26,22 @@ export declare class HttpClient {
|
|
|
28
26
|
private logger;
|
|
29
27
|
private metrics;
|
|
30
28
|
private onUnauthenticated?;
|
|
31
|
-
/**
|
|
32
|
-
* Creates a new HTTP client instance.
|
|
33
|
-
*
|
|
34
|
-
* @param opts - Client configuration options
|
|
35
|
-
* @throws {Error} If no fetch implementation is available
|
|
36
|
-
*/
|
|
37
29
|
constructor(opts: ClientOptions);
|
|
38
|
-
/**
|
|
39
|
-
* Set or update the authentication provider.
|
|
40
|
-
*
|
|
41
|
-
* @param auth - Authentication provider instance
|
|
42
|
-
* @example
|
|
43
|
-
* ```ts
|
|
44
|
-
* client.setAuth(new BearerTokenAuth(() => getToken()));
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
30
|
+
/** Set or update the authentication provider at runtime. */
|
|
47
31
|
setAuth(auth: AuthProvider): void;
|
|
48
32
|
private resolveBaseUrl;
|
|
49
|
-
/**
|
|
50
|
-
* Run all registered before-request hooks.
|
|
51
|
-
* @private
|
|
52
|
-
*/
|
|
53
33
|
private runBeforeHooks;
|
|
54
|
-
/**
|
|
55
|
-
* Run all registered after-response hooks.
|
|
56
|
-
* @private
|
|
57
|
-
*/
|
|
58
34
|
private runAfterHooks;
|
|
59
35
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* @returns Object mapping base URL keys to their resolved URLs
|
|
36
|
+
* Returns retry info if the response should be retried, or null if not.
|
|
63
37
|
*/
|
|
64
|
-
|
|
38
|
+
private getRetryInfo;
|
|
39
|
+
private logRetry;
|
|
65
40
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* @param key - Base URL key (defaults to 'default' if not provided)
|
|
69
|
-
* @returns Resolved base URL string
|
|
41
|
+
* Checks whether the 401 response should trigger a token refresh + retry.
|
|
70
42
|
*/
|
|
43
|
+
private shouldRefresh;
|
|
44
|
+
getBaseUrls(): import("..").BaseUrlMap;
|
|
71
45
|
getBaseUrl(key: string): string;
|
|
72
46
|
/** @internal */
|
|
73
47
|
getAuth(): AuthProvider;
|
|
@@ -75,20 +49,15 @@ export declare class HttpClient {
|
|
|
75
49
|
getHeaders(): Record<string, string>;
|
|
76
50
|
/** @internal */
|
|
77
51
|
getLogger(): LoggerUtil;
|
|
52
|
+
/** @internal */
|
|
53
|
+
getFetch(): FetchLike;
|
|
78
54
|
/**
|
|
79
55
|
* Make an HTTP request with automatic retry, authentication, and validation.
|
|
80
56
|
*
|
|
81
|
-
* @param method - HTTP method (GET, POST, PUT, etc.)
|
|
82
|
-
* @param path - Request path (will be appended to base URL)
|
|
83
|
-
* @param body - Request body (will be JSON.stringify'd if Content-Type is json)
|
|
84
|
-
* @param options - Additional request options (headers, query params, etc.)
|
|
85
|
-
* @returns Promise resolving to response data and Response object
|
|
86
|
-
* @throws {ApiError} If request fails or response validation fails
|
|
87
|
-
*
|
|
88
57
|
* @example
|
|
89
58
|
* ```ts
|
|
90
|
-
* const { data
|
|
91
|
-
* query: { page: 1
|
|
59
|
+
* const { data } = await client.request('GET', '/users', undefined, {
|
|
60
|
+
* query: { page: 1 },
|
|
92
61
|
* headers: { 'X-Custom': 'value' }
|
|
93
62
|
* });
|
|
94
63
|
* ```
|
|
@@ -97,107 +66,68 @@ export declare class HttpClient {
|
|
|
97
66
|
data: T;
|
|
98
67
|
status: HTTPStatusCodeNumber;
|
|
99
68
|
}>;
|
|
100
|
-
/**
|
|
101
|
-
* Convenience method for GET requests.
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* ```ts
|
|
105
|
-
* const { data } = await client.get('/users', { query: { page: 1 } });
|
|
106
|
-
* ```
|
|
107
|
-
*/
|
|
108
69
|
get<T = unknown>(path: string, options?: RequestOptions): Promise<{
|
|
109
70
|
data: T;
|
|
110
71
|
status: HTTPStatusCodeNumber;
|
|
111
72
|
}>;
|
|
112
|
-
/**
|
|
113
|
-
* Convenience method for POST requests.
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* ```ts
|
|
117
|
-
* const { data } = await client.post('/users', { name: 'John' });
|
|
118
|
-
* ```
|
|
119
|
-
*/
|
|
120
73
|
post<T = unknown>(path: string, body?: unknown, options?: RequestOptions): Promise<{
|
|
121
74
|
data: T;
|
|
122
75
|
status: HTTPStatusCodeNumber;
|
|
123
76
|
}>;
|
|
124
|
-
/**
|
|
125
|
-
* Convenience method for PUT requests.
|
|
126
|
-
*
|
|
127
|
-
* @example
|
|
128
|
-
* ```ts
|
|
129
|
-
* const { data } = await client.put('/users/1', { name: 'John Updated' });
|
|
130
|
-
* ```
|
|
131
|
-
*/
|
|
132
77
|
put<T = unknown>(path: string, body?: unknown, options?: RequestOptions): Promise<{
|
|
133
78
|
data: T;
|
|
134
79
|
status: HTTPStatusCodeNumber;
|
|
135
80
|
}>;
|
|
136
|
-
/**
|
|
137
|
-
* Convenience method for PATCH requests.
|
|
138
|
-
*
|
|
139
|
-
* @example
|
|
140
|
-
* ```ts
|
|
141
|
-
* const { data } = await client.patch('/users/1', { name: 'John' });
|
|
142
|
-
* ```
|
|
143
|
-
*/
|
|
144
81
|
patch<T = unknown>(path: string, body?: unknown, options?: RequestOptions): Promise<{
|
|
145
82
|
data: T;
|
|
146
83
|
status: HTTPStatusCodeNumber;
|
|
147
84
|
}>;
|
|
148
|
-
/**
|
|
149
|
-
* Convenience method for DELETE requests.
|
|
150
|
-
*
|
|
151
|
-
* @example
|
|
152
|
-
* ```ts
|
|
153
|
-
* const { data } = await client.delete('/users/1');
|
|
154
|
-
* ```
|
|
155
|
-
*/
|
|
156
85
|
delete<T = unknown>(path: string, options?: RequestOptions): Promise<{
|
|
157
86
|
data: T;
|
|
158
87
|
status: HTTPStatusCodeNumber;
|
|
159
88
|
}>;
|
|
160
89
|
/**
|
|
161
|
-
* Create a strongly-typed endpoint
|
|
90
|
+
* Create a strongly-typed HTTP endpoint.
|
|
162
91
|
* Works with any Standard Schema-compatible library (Zod, Valibot, ArkType, etc.)
|
|
163
92
|
*
|
|
164
|
-
* @param config - Endpoint configuration with schemas
|
|
165
|
-
* @returns Endpoint call function
|
|
166
|
-
*
|
|
167
93
|
* @example
|
|
168
94
|
* ```ts
|
|
169
|
-
* // With Zod
|
|
170
|
-
* import { z } from 'zod';
|
|
171
95
|
* const getUser = client.createEndpoint({
|
|
172
96
|
* method: 'GET',
|
|
173
97
|
* path: '/users/:id',
|
|
174
98
|
* response: z.object({ id: z.string(), name: z.string() }),
|
|
175
99
|
* pathParams: z.object({ id: z.string() }),
|
|
176
100
|
* });
|
|
177
|
-
*
|
|
178
|
-
* // With Valibot
|
|
179
|
-
* import * as v from 'valibot';
|
|
180
|
-
* const getUser = client.createEndpoint({
|
|
181
|
-
* method: 'GET',
|
|
182
|
-
* path: '/users/:id',
|
|
183
|
-
* response: v.object({ id: v.string(), name: v.string() }),
|
|
184
|
-
* pathParams: v.object({ id: v.string() }),
|
|
185
|
-
* });
|
|
186
101
|
* ```
|
|
187
102
|
*/
|
|
188
103
|
createEndpoint<ResSchema extends ResponseSchema, ReqSchema extends StandardSchemaV1 | undefined = undefined, QuerySchema extends StandardSchemaV1 | undefined = undefined, PathSchema extends StandardSchemaV1 | undefined = undefined, MustHeaderKeys extends readonly string[] = readonly []>(config: EndpointConfig<ResSchema, ReqSchema, QuerySchema, PathSchema, MustHeaderKeys>): EndpointCall<ResSchema, ReqSchema, QuerySchema, PathSchema, MustHeaderKeys>;
|
|
189
104
|
/**
|
|
190
|
-
* Create a strongly-typed WebSocket endpoint
|
|
105
|
+
* Create a strongly-typed WebSocket endpoint.
|
|
191
106
|
*
|
|
192
|
-
* @
|
|
193
|
-
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const chat = client.createWebSocket({
|
|
110
|
+
* path: '/ws/chat',
|
|
111
|
+
* send: z.object({ text: z.string() }),
|
|
112
|
+
* receive: z.object({ text: z.string(), user: z.string() }),
|
|
113
|
+
* });
|
|
114
|
+
* const conn = await chat();
|
|
115
|
+
* ```
|
|
194
116
|
*/
|
|
195
117
|
createWebSocket<SendSchema extends StandardSchemaV1 | undefined = undefined, ReceiveSchema extends StandardSchemaV1 | undefined = undefined, QuerySchema extends StandardSchemaV1 | undefined = undefined, PathSchema extends StandardSchemaV1 | undefined = undefined>(config: WSEndpointConfig<SendSchema, ReceiveSchema, QuerySchema, PathSchema>): WSEndpointCall<SendSchema, ReceiveSchema, QuerySchema, PathSchema>;
|
|
196
118
|
/**
|
|
197
|
-
* Create a strongly-typed Server-Sent Events
|
|
119
|
+
* Create a strongly-typed Server-Sent Events endpoint.
|
|
198
120
|
*
|
|
199
|
-
* @
|
|
200
|
-
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* const stream = client.createSSE({
|
|
124
|
+
* method: 'GET',
|
|
125
|
+
* path: '/events',
|
|
126
|
+
* response: z.object({ message: z.string() }),
|
|
127
|
+
* });
|
|
128
|
+
* const conn = await stream();
|
|
129
|
+
* conn.on('message', (data) => console.log(data));
|
|
130
|
+
* ```
|
|
201
131
|
*/
|
|
202
132
|
createSSE<ResSchema extends SSEResponseSchema | undefined = undefined, ReqSchema extends StandardSchemaV1 | undefined = undefined, QuerySchema extends StandardSchemaV1 | undefined = undefined, PathSchema extends StandardSchemaV1 | undefined = undefined>(config: SSEEndpointConfig<ResSchema, ReqSchema, QuerySchema, PathSchema>): SSEEndpointCall<ResSchema, ReqSchema, QuerySchema, PathSchema>;
|
|
203
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../lib/http/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../lib/http/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HTTPMethod, ResponseSchema, SchemaMap, StandardSchemaV1 } from '../types';
|
|
1
|
+
import { HTTPMethod, InferPathOutput, InferQueryOutput, ResponseSchema, SchemaMap, StandardSchemaV1 } from '../types';
|
|
2
2
|
import { HttpClient } from './http-client';
|
|
3
3
|
export type EndpointConfig<ResSchema extends ResponseSchema, ReqSchema extends StandardSchemaV1 | undefined = undefined, QuerySchema extends StandardSchemaV1 | undefined = undefined, PathSchema extends StandardSchemaV1 | undefined = undefined, MustHeaderKeys extends readonly string[] = readonly []> = {
|
|
4
4
|
method: keyof typeof HTTPMethod;
|
|
@@ -40,5 +40,5 @@ export declare class EndpointImpl<ResSchema extends ResponseSchema, ReqSchema ex
|
|
|
40
40
|
constructor(client: HttpClient, config: EndpointConfig<ResSchema, ReqSchema, QuerySchema, PathSchema, MustHeaderKeys>);
|
|
41
41
|
call(params: EndpointCallParams<ReqSchema, QuerySchema, PathSchema, MustHeaderKeys>): Promise<InferResponse<ResSchema>>;
|
|
42
42
|
}
|
|
43
|
-
export {};
|
|
43
|
+
export type { InferPathOutput, InferQueryOutput };
|
|
44
44
|
//# sourceMappingURL=http-endpoint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-endpoint.d.ts","sourceRoot":"","sources":["../../lib/http/http-endpoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-endpoint.d.ts","sourceRoot":"","sources":["../../lib/http/http-endpoint.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EAEd,SAAS,EACT,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,MAAM,cAAc,CACxB,SAAS,SAAS,cAAc,EAChC,SAAS,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAC1D,WAAW,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAC5D,UAAU,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAC3D,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,IACpD;IACF,MAAM,EAAE,MAAM,OAAO,UAAU,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;IAClG,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAGF,KAAK,eAAe,CAAC,IAAI,SAAS,SAAS,MAAM,EAAE,IAAI,IAAI,SAAS,SAAS,EAAE,GAC3E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAClC;KAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,kBAAkB,CAC5B,SAAS,SAAS,gBAAgB,GAAG,SAAS,EAC9C,WAAW,SAAS,gBAAgB,GAAG,SAAS,EAChD,UAAU,SAAS,gBAAgB,GAAG,SAAS,EAC/C,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,IACpD;IACF,IAAI,CAAC,EAAE,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC3F,KAAK,CAAC,EAAE,WAAW,SAAS,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;IAChG,UAAU,CAAC,EAAE,UAAU,SAAS,gBAAgB,GAC5C,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,GACvC,KAAK,CAAC;IACV,MAAM,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC;CACjC,GAAG,CAAC,cAAc,SAAS,SAAS,EAAE,GACnC;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpC;IAAE,OAAO,EAAE,eAAe,CAAC,cAAc,CAAC,CAAA;CAAE,CAAC,CAAC;AAGlD,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,gBAAgB,GAC9C,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,GAC/B,CAAC,SAAS,SAAS,GACjB;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC3F,CAAC,MAAM,CAAC,CAAC,GACV,KAAK,CAAC;AAEZ,MAAM,MAAM,YAAY,CACtB,SAAS,SAAS,cAAc,EAChC,SAAS,SAAS,gBAAgB,GAAG,SAAS,EAC9C,WAAW,SAAS,gBAAgB,GAAG,SAAS,EAChD,UAAU,SAAS,gBAAgB,GAAG,SAAS,EAC/C,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,IACpD,CACF,MAAM,EAAE,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,KAC3E,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AAEvC,qBAAa,YAAY,CACvB,SAAS,SAAS,cAAc,EAChC,SAAS,SAAS,gBAAgB,GAAG,SAAS,EAC9C,WAAW,SAAS,gBAAgB,GAAG,SAAS,EAChD,UAAU,SAAS,gBAAgB,GAAG,SAAS,EAC/C,cAAc,SAAS,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE;IAGpD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;gBADN,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC;IAGzF,IAAI,CACR,MAAM,EAAE,kBAAkB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,GAC7E,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;CAmDrC;AAGD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AuthContext, AuthProvider } from '../auth';
|
|
2
|
+
import type { LoggerUtil } from '../logger';
|
|
3
|
+
import type { MetricsCollector } from '../metrics';
|
|
4
|
+
import { ApiError, HTTPMethod } from '../types';
|
|
5
|
+
import type { HTTPStatusCodeNumber, RetryPolicy } from '../types';
|
|
6
|
+
export declare function serializeRequestBody(body: unknown, headers: Record<string, string>): BodyInit | undefined;
|
|
7
|
+
export declare function parseResponseData(res: Response, method: keyof typeof HTTPMethod, url: string): Promise<unknown>;
|
|
8
|
+
export declare function createStatusError(method: keyof typeof HTTPMethod, url: string, res: Response, details: unknown): ApiError;
|
|
9
|
+
export declare function createNetworkError(method: keyof typeof HTTPMethod, url: string, error: unknown): ApiError;
|
|
10
|
+
export declare function isRetryableResponse(retryPolicy: RetryPolicy, method: keyof typeof HTTPMethod, status: HTTPStatusCodeNumber, retryAttempt: number, skipRetry: boolean | undefined): boolean;
|
|
11
|
+
export declare function getRetryDelay(retryPolicy: RetryPolicy, retryAttempt: number, response: Response): {
|
|
12
|
+
delay: number;
|
|
13
|
+
usedRetryAfter: boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare function recordSuccessfulRequest(logger: LoggerUtil, metrics: MetricsCollector, method: keyof typeof HTTPMethod, path: string, url: string, status: number, durationMs: number): void;
|
|
16
|
+
export declare function recordFailedRequest(logger: LoggerUtil, metrics: MetricsCollector, method: keyof typeof HTTPMethod, path: string, url: string, durationMs: number, error: unknown): void;
|
|
17
|
+
/**
|
|
18
|
+
* Re-applies auth to an existing AuthContext, cloning headers first so that
|
|
19
|
+
* a fresh token overwrites the stale one from the previous attempt.
|
|
20
|
+
*/
|
|
21
|
+
export declare function reapplyAuth(auth: AuthProvider, ctx: AuthContext): Promise<void>;
|
|
22
|
+
export declare function startRequestTimeout(timeoutMs: number | undefined, hasExternalSignal: boolean, controller: AbortController): ReturnType<typeof setTimeout> | undefined;
|
|
23
|
+
//# sourceMappingURL=request-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-utils.d.ts","sourceRoot":"","sources":["../../lib/http/request-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAElE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,QAAQ,GAAG,SAAS,CAkBtB;AAcD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAeD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,OAAO,GACf,QAAQ,CAcV;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,QAAQ,CAgBV;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,MAAM,EAAE,oBAAoB,EAC5B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,OAAO,GAAG,SAAS,GAC7B,OAAO,CAQT;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAiB5C;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,IAAI,CAWN;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,OAAO,UAAU,EAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,IAAI,CAYN;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,iBAAiB,EAAE,OAAO,EAC1B,UAAU,EAAE,eAAe,GAC1B,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CAQ3C"}
|