@afoures/http-client 0.1.1 → 0.3.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/README.md +5 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +2 -2
- package/dist/lib/endpoint.d.mts +2 -2
- package/dist/lib/endpoint.mjs +118 -67
- package/dist/lib/errors.d.mts +59 -35
- package/dist/lib/errors.mjs +25 -27
- package/dist/lib/http-client.d.mts +21 -21
- package/dist/lib/http-client.mjs +133 -13
- package/dist/lib/types.d.mts +14 -46
- package/docs/endpoint-definition.md +1 -1
- package/docs/error-handling.md +3 -3
- package/docs/http-client.md +5 -5
- package/docs/response-parsing.md +14 -10
- package/docs/retry-policy.md +1 -1
- package/docs/schema-integration.md +14 -5
- package/docs/serialization.md +13 -12
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbortedError,
|
|
1
|
+
import { AbortedError, NetworkError, ParseError, SerializationError, TimeoutError, UnexpectedError } from "./errors.mjs";
|
|
2
2
|
import { HTTPFetch, HTTPMethod, HeadersInitWithReducer, MaybePromise, Schema } from "./types.mjs";
|
|
3
3
|
import { AnyEndpoint, Endpoint } from "./endpoint.mjs";
|
|
4
4
|
import * as _standard_schema_spec0 from "@standard-schema/spec";
|
|
@@ -21,44 +21,44 @@ declare function http_client<const endpoints extends EndpointMap>({
|
|
|
21
21
|
fetch: custom_fetch
|
|
22
22
|
}: HttpClientOptions<endpoints>): { [K in keyof { -readonly [name in keyof endpoints]: endpoints[name] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
23
23
|
headers?: HeadersInitWithReducer;
|
|
24
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T ? { [K in keyof T]: T[K] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
24
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T ? { [K in keyof T]: T[K] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : endpoints[name] extends EndpointMap ? (endpoints[name] extends infer T_1 extends EndpointMap ? { -readonly [name_2 in keyof T_1]: T_1[name_2] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
25
25
|
headers?: HeadersInitWithReducer;
|
|
26
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_2 ? { [K_1 in keyof T_2]: T_2[K_1] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
26
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_2 ? { [K_1 in keyof T_2]: T_2[K_1] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_1[name_2] extends EndpointMap ? (T_1[name_2] extends infer T_3 extends EndpointMap ? { -readonly [name_3 in keyof T_3]: T_3[name_3] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
27
27
|
headers?: HeadersInitWithReducer;
|
|
28
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_4 ? { [K_2 in keyof T_4]: T_4[K_2] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
28
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_4 ? { [K_2 in keyof T_4]: T_4[K_2] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_3[name_3] extends EndpointMap ? (T_3[name_3] extends infer T_5 extends EndpointMap ? { -readonly [name_4 in keyof T_5]: T_5[name_4] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
29
29
|
headers?: HeadersInitWithReducer;
|
|
30
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_6 ? { [K_3 in keyof T_6]: T_6[K_3] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
30
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_6 ? { [K_3 in keyof T_6]: T_6[K_3] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_5[name_4] extends EndpointMap ? (T_5[name_4] extends infer T_7 extends EndpointMap ? { -readonly [name_5 in keyof T_7]: T_7[name_5] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
31
31
|
headers?: HeadersInitWithReducer;
|
|
32
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_8 ? { [K_4 in keyof T_8]: T_8[K_4] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
32
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_8 ? { [K_4 in keyof T_8]: T_8[K_4] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_7[name_5] extends EndpointMap ? (T_7[name_5] extends infer T_9 extends EndpointMap ? { -readonly [name_6 in keyof T_9]: T_9[name_6] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
33
33
|
headers?: HeadersInitWithReducer;
|
|
34
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_10 ? { [K_5 in keyof T_10]: T_10[K_5] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
34
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_10 ? { [K_5 in keyof T_10]: T_10[K_5] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_9[name_6] extends EndpointMap ? (T_9[name_6] extends infer T_11 extends EndpointMap ? { -readonly [name_7 in keyof T_11]: T_11[name_7] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
35
35
|
headers?: HeadersInitWithReducer;
|
|
36
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_12 ? { [K_6 in keyof T_12]: T_12[K_6] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
36
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_12 ? { [K_6 in keyof T_12]: T_12[K_6] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_11[name_7] extends EndpointMap ? (T_11[name_7] extends infer T_13 extends EndpointMap ? { -readonly [name_8 in keyof T_13]: T_13[name_8] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
37
37
|
headers?: HeadersInitWithReducer;
|
|
38
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_14 ? { [K_7 in keyof T_14]: T_14[K_7] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
38
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_14 ? { [K_7 in keyof T_14]: T_14[K_7] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_13[name_8] extends EndpointMap ? (T_13[name_8] extends infer T_15 extends EndpointMap ? { -readonly [name_9 in keyof T_15]: T_15[name_9] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
39
39
|
headers?: HeadersInitWithReducer;
|
|
40
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_16 ? { [K_8 in keyof T_16]: T_16[K_8] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
40
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_16 ? { [K_8 in keyof T_16]: T_16[K_8] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_15[name_9] extends EndpointMap ? (T_15[name_9] extends infer T_17 extends EndpointMap ? { -readonly [name_10 in keyof T_17]: T_17[name_10] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
41
41
|
headers?: HeadersInitWithReducer;
|
|
42
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_18 ? { [K_9 in keyof T_18]: T_18[K_9] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
42
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_18 ? { [K_9 in keyof T_18]: T_18[K_9] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_17[name_10] extends EndpointMap ? (T_17[name_10] extends infer T_19 extends EndpointMap ? { -readonly [name_11 in keyof T_19]: T_19[name_11] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: /*elided*/any) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_19[name_11] extends EndpointMap ? /*elided*/any : never } : never) extends infer T_18 ? { [K_9 in keyof T_18]: T_18[K_9] } : never : never } : never) extends infer T_16 ? { [K_8 in keyof T_16]: T_16[K_8] } : never : never } : never) extends infer T_14 ? { [K_7 in keyof T_14]: T_14[K_7] } : never : never } : never) extends infer T_12 ? { [K_6 in keyof T_12]: T_12[K_6] } : never : never } : never) extends infer T_10 ? { [K_5 in keyof T_10]: T_10[K_5] } : never : never } : never) extends infer T_8 ? { [K_4 in keyof T_8]: T_8[K_4] } : never : never } : never) extends infer T_6 ? { [K_3 in keyof T_6]: T_6[K_3] } : never : never } : never) extends infer T_4 ? { [K_2 in keyof T_4]: T_4[K_2] } : never : never } : never) extends infer T_2 ? { [K_1 in keyof T_2]: T_2[K_1] } : never : never } : never) extends infer T ? { [K in keyof T]: T[K] } : never : never }]: { -readonly [name in keyof endpoints]: endpoints[name] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
43
43
|
headers?: HeadersInitWithReducer;
|
|
44
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T ? { [K_2 in keyof T]: T[K_2] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
44
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T ? { [K_2 in keyof T]: T[K_2] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : endpoints[name] extends EndpointMap ? (endpoints[name] extends infer T_1 extends EndpointMap ? { -readonly [name_2 in keyof T_1]: T_1[name_2] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
45
45
|
headers?: HeadersInitWithReducer;
|
|
46
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_2 ? { [K_3 in keyof T_2]: T_2[K_3] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
46
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_2 ? { [K_3 in keyof T_2]: T_2[K_3] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_1[name_2] extends EndpointMap ? (T_1[name_2] extends infer T_3 extends EndpointMap ? { -readonly [name_3 in keyof T_3]: T_3[name_3] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
47
47
|
headers?: HeadersInitWithReducer;
|
|
48
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_4 ? { [K_4 in keyof T_4]: T_4[K_4] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
48
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_4 ? { [K_4 in keyof T_4]: T_4[K_4] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_3[name_3] extends EndpointMap ? (T_3[name_3] extends infer T_5 extends EndpointMap ? { -readonly [name_4 in keyof T_5]: T_5[name_4] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
49
49
|
headers?: HeadersInitWithReducer;
|
|
50
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_6 ? { [K_5 in keyof T_6]: T_6[K_5] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
50
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_6 ? { [K_5 in keyof T_6]: T_6[K_5] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_5[name_4] extends EndpointMap ? (T_5[name_4] extends infer T_7 extends EndpointMap ? { -readonly [name_5 in keyof T_7]: T_7[name_5] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
51
51
|
headers?: HeadersInitWithReducer;
|
|
52
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_8 ? { [K_6 in keyof T_8]: T_8[K_6] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
52
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_8 ? { [K_6 in keyof T_8]: T_8[K_6] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_7[name_5] extends EndpointMap ? (T_7[name_5] extends infer T_9 extends EndpointMap ? { -readonly [name_6 in keyof T_9]: T_9[name_6] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
53
53
|
headers?: HeadersInitWithReducer;
|
|
54
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_10 ? { [K_7 in keyof T_10]: T_10[K_7] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
54
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_10 ? { [K_7 in keyof T_10]: T_10[K_7] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_9[name_6] extends EndpointMap ? (T_9[name_6] extends infer T_11 extends EndpointMap ? { -readonly [name_7 in keyof T_11]: T_11[name_7] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
55
55
|
headers?: HeadersInitWithReducer;
|
|
56
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_12 ? { [K_8 in keyof T_12]: T_12[K_8] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
56
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_12 ? { [K_8 in keyof T_12]: T_12[K_8] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_11[name_7] extends EndpointMap ? (T_11[name_7] extends infer T_13 extends EndpointMap ? { -readonly [name_8 in keyof T_13]: T_13[name_8] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
57
57
|
headers?: HeadersInitWithReducer;
|
|
58
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_14 ? { [K_9 in keyof T_14]: T_14[K_9] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
58
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_14 ? { [K_9 in keyof T_14]: T_14[K_9] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_13[name_8] extends EndpointMap ? (T_13[name_8] extends infer T_15 extends EndpointMap ? { -readonly [name_9 in keyof T_15]: T_15[name_9] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
59
59
|
headers?: HeadersInitWithReducer;
|
|
60
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_16 ? { [K_10 in keyof T_16]: T_16[K_10] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
60
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_16 ? { [K_10 in keyof T_16]: T_16[K_10] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_15[name_9] extends EndpointMap ? (T_15[name_9] extends infer T_17 extends EndpointMap ? { -readonly [name_10 in keyof T_17]: T_17[name_10] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: HTTPFetch.TypedParamsInit<pathname, params_schema> & HTTPFetch.TypedQueryInit<query_schema> & HTTPFetch.TypedBodyInit<body_schema> & HTTPFetch.OptionalRequestInit & {
|
|
61
61
|
headers?: HeadersInitWithReducer;
|
|
62
|
-
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_18 ? { [K_11 in keyof T_18]: T_18[K_11] } : never) => Promise<TimeoutError | AbortedError | SerializationError |
|
|
62
|
+
} & Omit<RequestInit, "body" | "method" | "headers"> extends infer T_18 ? { [K_11 in keyof T_18]: T_18[K_11] } : never) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_17[name_10] extends EndpointMap ? (T_17[name_10] extends infer T_19 extends EndpointMap ? { -readonly [name_11 in keyof T_19]: T_19[name_11] extends Endpoint<infer http_method extends HTTPMethod.Any, infer pathname extends `/${string}`, infer params_schema extends Schema._<unknown, unknown>, infer query_schema extends Schema._<unknown, unknown>, infer body_schema extends Schema._<unknown, unknown>, infer data_schema extends Schema._<unknown, unknown>, infer error_schema extends Schema._<unknown, unknown>> ? (input: /*elided*/any) => Promise<TimeoutError | AbortedError | SerializationError | ParseError | NetworkError | UnexpectedError | HTTPFetch.RedirectMessage | HTTPFetch.ClientErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.ServerErrorResponse<[error_schema] extends [never] ? string : _standard_schema_spec0.StandardSchemaV1.InferOutput<error_schema>> | HTTPFetch.SuccessfulResponse<[data_schema] extends [never] ? void : _standard_schema_spec0.StandardSchemaV1.InferOutput<data_schema>>> : T_19[name_11] extends EndpointMap ? /*elided*/any : never } : never) extends infer T_18 ? { [K_11 in keyof T_18]: T_18[K_11] } : never : never } : never) extends infer T_16 ? { [K_10 in keyof T_16]: T_16[K_10] } : never : never } : never) extends infer T_14 ? { [K_9 in keyof T_14]: T_14[K_9] } : never : never } : never) extends infer T_12 ? { [K_8 in keyof T_12]: T_12[K_8] } : never : never } : never) extends infer T_10 ? { [K_7 in keyof T_10]: T_10[K_7] } : never : never } : never) extends infer T_8 ? { [K_6 in keyof T_8]: T_8[K_6] } : never : never } : never) extends infer T_6 ? { [K_5 in keyof T_6]: T_6[K_5] } : never : never } : never) extends infer T_4 ? { [K_4 in keyof T_4]: T_4[K_4] } : never : never } : never) extends infer T_2 ? { [K_3 in keyof T_2]: T_2[K_3] } : never : never } : never) extends infer T ? { [K_2 in keyof T]: T[K_2] } : never : never }[K] };
|
|
63
63
|
//#endregion
|
|
64
64
|
export { EndpointMap, HttpClientOptions, http_client };
|
package/dist/lib/http-client.mjs
CHANGED
|
@@ -6,7 +6,16 @@ import { extract_args, merge_options, remove_custom_options, sleep } from "./uti
|
|
|
6
6
|
//#region src/lib/http-client.ts
|
|
7
7
|
function fetch_endpoint_factory({ base_url, endpoint, custom_fetch, get_default_options = () => ({}), hooks = {} }) {
|
|
8
8
|
async function fetch_endpoint(input) {
|
|
9
|
-
|
|
9
|
+
let start_time = Date.now();
|
|
10
|
+
if (!URL.canParse(base_url)) return new UnexpectedError(`Invalid base_url: ${base_url}`, {
|
|
11
|
+
operation: "base_url_validation",
|
|
12
|
+
request: {
|
|
13
|
+
url: base_url,
|
|
14
|
+
method: endpoint.method,
|
|
15
|
+
baseUrl: base_url
|
|
16
|
+
},
|
|
17
|
+
timing: { startTime: start_time }
|
|
18
|
+
});
|
|
10
19
|
const { args, options } = extract_args(input);
|
|
11
20
|
const { headers, ...merged_options } = merge_options(await get_default_options(), endpoint.options, options);
|
|
12
21
|
const url = await endpoint.generate_url({
|
|
@@ -15,12 +24,29 @@ function fetch_endpoint_factory({ base_url, endpoint, custom_fetch, get_default_
|
|
|
15
24
|
query: args.query
|
|
16
25
|
}).catch((error) => new UnexpectedError("Failed to generate URL", {
|
|
17
26
|
cause: error,
|
|
18
|
-
operation: "generate_url"
|
|
27
|
+
operation: "generate_url",
|
|
28
|
+
request: {
|
|
29
|
+
url: base_url,
|
|
30
|
+
method: endpoint.method,
|
|
31
|
+
baseUrl: base_url
|
|
32
|
+
},
|
|
33
|
+
input: {
|
|
34
|
+
params: args.params,
|
|
35
|
+
query: args.query
|
|
36
|
+
},
|
|
37
|
+
timing: { startTime: start_time }
|
|
19
38
|
}));
|
|
20
39
|
if (url instanceof Error) return url;
|
|
21
40
|
const serialized = await endpoint.serialize_body({ body: args.body }).catch((error) => new UnexpectedError("Failed to serialize body", {
|
|
22
41
|
cause: error,
|
|
23
|
-
operation: "serialize_body"
|
|
42
|
+
operation: "serialize_body",
|
|
43
|
+
request: {
|
|
44
|
+
url: url instanceof URL ? url.toString() : base_url,
|
|
45
|
+
method: endpoint.method,
|
|
46
|
+
baseUrl: base_url
|
|
47
|
+
},
|
|
48
|
+
input: { body: args.body },
|
|
49
|
+
timing: { startTime: start_time }
|
|
24
50
|
}));
|
|
25
51
|
if (serialized instanceof Error) return serialized;
|
|
26
52
|
headers.delete("Content-Type");
|
|
@@ -50,7 +76,18 @@ function fetch_endpoint_factory({ base_url, endpoint, custom_fetch, get_default_
|
|
|
50
76
|
} catch (local_error) {
|
|
51
77
|
error = new UnexpectedError("Failed to create request", {
|
|
52
78
|
cause: local_error,
|
|
53
|
-
operation: "create_request"
|
|
79
|
+
operation: "create_request",
|
|
80
|
+
request: {
|
|
81
|
+
url: url instanceof URL ? url.toString() : base_url,
|
|
82
|
+
method: endpoint.method,
|
|
83
|
+
headers,
|
|
84
|
+
timeout: options.timeout,
|
|
85
|
+
baseUrl: base_url
|
|
86
|
+
},
|
|
87
|
+
timing: {
|
|
88
|
+
startTime: start_time,
|
|
89
|
+
attempt: 1
|
|
90
|
+
}
|
|
54
91
|
});
|
|
55
92
|
break;
|
|
56
93
|
}
|
|
@@ -60,17 +97,48 @@ function fetch_endpoint_factory({ base_url, endpoint, custom_fetch, get_default_
|
|
|
60
97
|
response = await custom_fetch(request);
|
|
61
98
|
error = void 0;
|
|
62
99
|
} catch (local_error) {
|
|
100
|
+
const duration = Date.now() - start_time;
|
|
63
101
|
if (local_error instanceof Error && local_error.name === "TimeoutError") error = new TimeoutError(local_error.message, {
|
|
64
102
|
cause: local_error,
|
|
65
|
-
operation: "fetch"
|
|
103
|
+
operation: "fetch",
|
|
104
|
+
request: {
|
|
105
|
+
url: request.url,
|
|
106
|
+
method: request.method,
|
|
107
|
+
timeout: options.timeout
|
|
108
|
+
},
|
|
109
|
+
timing: {
|
|
110
|
+
startTime: start_time,
|
|
111
|
+
duration,
|
|
112
|
+
attempt
|
|
113
|
+
}
|
|
66
114
|
});
|
|
67
115
|
else if (local_error instanceof Error && local_error.name === "AbortError") error = new AbortedError(local_error.message, {
|
|
68
116
|
cause: local_error,
|
|
69
|
-
operation: "fetch"
|
|
117
|
+
operation: "fetch",
|
|
118
|
+
request: {
|
|
119
|
+
url: request.url,
|
|
120
|
+
method: request.method,
|
|
121
|
+
timeout: options.timeout
|
|
122
|
+
},
|
|
123
|
+
timing: {
|
|
124
|
+
startTime: start_time,
|
|
125
|
+
duration,
|
|
126
|
+
attempt
|
|
127
|
+
}
|
|
70
128
|
});
|
|
71
129
|
else error = new NetworkError("Network error", {
|
|
72
130
|
cause: local_error,
|
|
73
|
-
operation: "fetch"
|
|
131
|
+
operation: "fetch",
|
|
132
|
+
request: {
|
|
133
|
+
url: request.url,
|
|
134
|
+
method: request.method,
|
|
135
|
+
timeout: options.timeout
|
|
136
|
+
},
|
|
137
|
+
timing: {
|
|
138
|
+
startTime: start_time,
|
|
139
|
+
duration,
|
|
140
|
+
attempt
|
|
141
|
+
}
|
|
74
142
|
});
|
|
75
143
|
}
|
|
76
144
|
try {
|
|
@@ -91,25 +159,77 @@ function fetch_endpoint_factory({ base_url, endpoint, custom_fetch, get_default_
|
|
|
91
159
|
} catch (local_error) {
|
|
92
160
|
error = new UnexpectedError("Failed to check retry policy", {
|
|
93
161
|
cause: local_error,
|
|
94
|
-
operation: "retry_policy"
|
|
162
|
+
operation: "retry_policy",
|
|
163
|
+
request: {
|
|
164
|
+
url: url instanceof URL ? url.toString() : base_url,
|
|
165
|
+
method: endpoint.method,
|
|
166
|
+
timeout: options.timeout,
|
|
167
|
+
baseUrl: base_url
|
|
168
|
+
},
|
|
169
|
+
timing: {
|
|
170
|
+
startTime: start_time,
|
|
171
|
+
attempt,
|
|
172
|
+
maxAttempts: typeof retry_policy.attempts === "function" ? void 0 : retry_policy.attempts
|
|
173
|
+
}
|
|
95
174
|
});
|
|
96
175
|
break;
|
|
97
176
|
}
|
|
98
177
|
} while (true);
|
|
99
178
|
if (error) return error;
|
|
100
|
-
if (!response) return new UnexpectedError("", {
|
|
179
|
+
if (!response) return new UnexpectedError("No response received", {
|
|
101
180
|
cause: "No response received",
|
|
102
|
-
operation: "parse_response"
|
|
181
|
+
operation: "parse_response",
|
|
182
|
+
request: {
|
|
183
|
+
url: url instanceof URL ? url.toString() : base_url,
|
|
184
|
+
method: endpoint.method,
|
|
185
|
+
timeout: options.timeout,
|
|
186
|
+
baseUrl: base_url
|
|
187
|
+
},
|
|
188
|
+
timing: {
|
|
189
|
+
startTime: start_time,
|
|
190
|
+
attempt
|
|
191
|
+
}
|
|
103
192
|
});
|
|
104
193
|
hooks.on_response?.(response);
|
|
105
|
-
return await endpoint.parse_response(response).catch((error) => {
|
|
194
|
+
return await endpoint.parse_response(response).catch(async (error) => {
|
|
195
|
+
const response_body = await response.clone().text().catch(() => void 0);
|
|
106
196
|
if (error instanceof Error && error.name === "AbortError") return new AbortedError(error.message, {
|
|
107
197
|
cause: error,
|
|
108
|
-
operation: "parse_response"
|
|
198
|
+
operation: "parse_response",
|
|
199
|
+
request: {
|
|
200
|
+
url: response.url,
|
|
201
|
+
method: request?.method
|
|
202
|
+
},
|
|
203
|
+
response: {
|
|
204
|
+
status: response.status,
|
|
205
|
+
statusText: response.statusText,
|
|
206
|
+
headers: response.headers,
|
|
207
|
+
body: response_body
|
|
208
|
+
},
|
|
209
|
+
timing: {
|
|
210
|
+
startTime: start_time,
|
|
211
|
+
attempt
|
|
212
|
+
}
|
|
109
213
|
});
|
|
110
214
|
return new UnexpectedError("Failed to parse response", {
|
|
111
215
|
cause: error,
|
|
112
|
-
operation: "parse_response"
|
|
216
|
+
operation: "parse_response",
|
|
217
|
+
request: {
|
|
218
|
+
url: response.url,
|
|
219
|
+
method: request?.method,
|
|
220
|
+
timeout: options.timeout,
|
|
221
|
+
baseUrl: base_url
|
|
222
|
+
},
|
|
223
|
+
response: {
|
|
224
|
+
status: response.status,
|
|
225
|
+
statusText: response.statusText,
|
|
226
|
+
headers: response.headers,
|
|
227
|
+
body: response_body
|
|
228
|
+
},
|
|
229
|
+
timing: {
|
|
230
|
+
startTime: start_time,
|
|
231
|
+
attempt
|
|
232
|
+
}
|
|
113
233
|
});
|
|
114
234
|
});
|
|
115
235
|
}
|
package/dist/lib/types.d.mts
CHANGED
|
@@ -63,6 +63,8 @@ declare namespace RetryPolicy {
|
|
|
63
63
|
}
|
|
64
64
|
declare namespace HTTPFetch {
|
|
65
65
|
type SharedResponseContent = {
|
|
66
|
+
method: HTTPMethod.Any;
|
|
67
|
+
url?: string;
|
|
66
68
|
headers: Headers;
|
|
67
69
|
raw_response: Response;
|
|
68
70
|
};
|
|
@@ -133,85 +135,51 @@ declare namespace Schema {
|
|
|
133
135
|
type infer_input<schema extends Schema.Any, default_value extends unknown = never> = [default_value] extends [never] ? StandardSchemaV1.InferInput<schema> : [schema] extends [never] ? default_value : StandardSchemaV1.InferInput<schema>;
|
|
134
136
|
type infer_output<schema extends Schema.Any, default_value extends unknown = never> = [default_value] extends [never] ? StandardSchemaV1.InferOutput<schema> : [schema] extends [never] ? default_value : StandardSchemaV1.InferOutput<schema>;
|
|
135
137
|
}
|
|
136
|
-
declare namespace Json {
|
|
137
|
-
/**
|
|
138
|
-
Matches a JSON object.
|
|
139
|
-
@category JSON
|
|
140
|
-
*/
|
|
141
|
-
type Object = { [Key in string]: Json.Value };
|
|
142
|
-
/**
|
|
143
|
-
Matches a JSON array.
|
|
144
|
-
@category JSON
|
|
145
|
-
*/
|
|
146
|
-
type Array = Json.Value[] | readonly Json.Value[];
|
|
147
|
-
/**
|
|
148
|
-
Matches any valid JSON primitive value.
|
|
149
|
-
@category JSON
|
|
150
|
-
*/
|
|
151
|
-
type Primitive = string | number | boolean | null;
|
|
152
|
-
/**
|
|
153
|
-
Matches any valid JSON value.
|
|
154
|
-
@category JSON
|
|
155
|
-
*/
|
|
156
|
-
type Value = Json.Primitive | Json.Object | Json.Array;
|
|
157
|
-
}
|
|
158
138
|
declare namespace Serializer {
|
|
159
139
|
type Any = {
|
|
160
140
|
schema: Schema.Any;
|
|
161
|
-
|
|
141
|
+
serialize?: string | ((data: any) => any);
|
|
162
142
|
};
|
|
163
143
|
type Params<pathname extends Pathname.Relative, schema extends Schema._> = schema extends Schema._<any, Pathname.Params<pathname>> ? {
|
|
164
144
|
schema: schema;
|
|
165
|
-
|
|
145
|
+
serialize?: (data: Schema.infer_output<NoInfer<schema>>) => Pathname.Params<pathname>;
|
|
166
146
|
} : {
|
|
167
147
|
schema: schema;
|
|
168
|
-
|
|
148
|
+
serialize: (data: Schema.infer_output<NoInfer<schema>>) => Pathname.Params<pathname>;
|
|
169
149
|
};
|
|
170
150
|
type QueryString<schema extends Schema._> = schema extends Schema._<any, Array<Array<string>> | Record<string, string> | undefined> ? {
|
|
171
151
|
schema: schema;
|
|
172
|
-
|
|
152
|
+
serialize?: "urlencoded" | ((data: Schema.infer_output<NoInfer<schema>>) => URLSearchParams);
|
|
173
153
|
} : {
|
|
174
154
|
schema: schema;
|
|
175
|
-
|
|
155
|
+
serialize: (data: Schema.infer_output<NoInfer<schema>>) => URLSearchParams;
|
|
176
156
|
};
|
|
177
|
-
type Body<schema extends Schema._> =
|
|
157
|
+
type Body<schema extends Schema._> = {
|
|
178
158
|
schema: schema;
|
|
179
|
-
|
|
159
|
+
serialize: "json" | ((data: Schema.infer_output<NoInfer<schema>, any>) => {
|
|
180
160
|
body: BodyInit | null;
|
|
181
161
|
content_type: string;
|
|
182
162
|
});
|
|
183
|
-
} : {
|
|
184
|
-
schema: schema;
|
|
185
|
-
serialization: (data: Schema.infer_output<NoInfer<schema>>) => {
|
|
186
|
-
body: BodyInit | null;
|
|
187
|
-
content_type: string;
|
|
188
|
-
};
|
|
189
163
|
};
|
|
190
164
|
}
|
|
191
165
|
declare namespace Parser {
|
|
192
166
|
type Any = {
|
|
193
167
|
schema: Schema.Any;
|
|
194
|
-
|
|
168
|
+
parse: string | ((data: any) => any);
|
|
195
169
|
};
|
|
196
170
|
type Data<schema extends Schema._> = schema extends Schema._<string, any> ? {
|
|
197
171
|
schema: schema;
|
|
198
|
-
|
|
199
|
-
} : schema extends Schema._<Json.Value, any> ? {
|
|
200
|
-
schema: schema;
|
|
201
|
-
deserialization?: "json" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
172
|
+
parse: "text" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
202
173
|
} : {
|
|
203
174
|
schema: schema;
|
|
204
|
-
|
|
175
|
+
parse: "json" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
205
176
|
};
|
|
206
177
|
type Error<schema extends Schema._> = schema extends Schema._<string, any> ? {
|
|
207
178
|
schema: schema;
|
|
208
|
-
|
|
209
|
-
} : schema extends Schema._<Json.Value, any> ? {
|
|
210
|
-
schema: schema;
|
|
211
|
-
deserialization: "json" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
179
|
+
parse: "text" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
212
180
|
} : {
|
|
213
181
|
schema: schema;
|
|
214
|
-
|
|
182
|
+
parse: "json" | ((body: Response["body"]) => Promise<Schema.infer_input<NoInfer<schema>>>);
|
|
215
183
|
};
|
|
216
184
|
}
|
|
217
185
|
//#endregion
|
|
@@ -97,7 +97,7 @@ Generates a full URL with params and query serialized:
|
|
|
97
97
|
|
|
98
98
|
```typescript
|
|
99
99
|
const url = await endpoint.generate_url({
|
|
100
|
-
|
|
100
|
+
base_url: 'https://api.example.com',
|
|
101
101
|
params: { id: '123' },
|
|
102
102
|
query: { include: 'posts' },
|
|
103
103
|
})
|
package/docs/error-handling.md
CHANGED
|
@@ -74,15 +74,15 @@ if (result instanceof SerializationError) {
|
|
|
74
74
|
}
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
### `
|
|
77
|
+
### `ParseError`
|
|
78
78
|
|
|
79
79
|
Failed to parse response:
|
|
80
80
|
|
|
81
81
|
```typescript
|
|
82
82
|
const result = await api.users.get({ params: { id: '123' } })
|
|
83
83
|
|
|
84
|
-
if (result instanceof
|
|
85
|
-
console.log(result.kind) // "
|
|
84
|
+
if (result instanceof ParseError) {
|
|
85
|
+
console.log(result.kind) // "ParseError"
|
|
86
86
|
console.log(result.cause) // Schema validation issues
|
|
87
87
|
}
|
|
88
88
|
```
|
package/docs/http-client.md
CHANGED
|
@@ -9,12 +9,12 @@ import { Endpoint, http_client } from '@afoures/http-client'
|
|
|
9
9
|
import { z } from 'zod'
|
|
10
10
|
|
|
11
11
|
const api = http_client({
|
|
12
|
-
|
|
12
|
+
base_url: 'https://api.example.com',
|
|
13
13
|
endpoints: {
|
|
14
14
|
users: new Endpoint({
|
|
15
15
|
method: 'GET',
|
|
16
16
|
pathname: '/users',
|
|
17
|
-
data: { schema: z.array(z.object({ id: z.string() })) },
|
|
17
|
+
data: { schema: z.array(z.object({ id: z.string() })), parse: 'json' },
|
|
18
18
|
}),
|
|
19
19
|
},
|
|
20
20
|
})
|
|
@@ -28,7 +28,7 @@ Nest endpoints in objects for logical grouping:
|
|
|
28
28
|
|
|
29
29
|
```typescript
|
|
30
30
|
const api = http_client({
|
|
31
|
-
|
|
31
|
+
base_url: 'https://api.example.com',
|
|
32
32
|
endpoints: {
|
|
33
33
|
users: {
|
|
34
34
|
list: new Endpoint({ method: 'GET', pathname: '/users' }),
|
|
@@ -60,7 +60,7 @@ Provide sync or async default options for all requests:
|
|
|
60
60
|
|
|
61
61
|
```typescript
|
|
62
62
|
const api = http_client({
|
|
63
|
-
|
|
63
|
+
base_url: 'https://api.example.com',
|
|
64
64
|
endpoints: { /* ... */ },
|
|
65
65
|
options: async () => {
|
|
66
66
|
const token = await getAuthToken()
|
|
@@ -84,7 +84,7 @@ Provide a custom fetch function for proxying, logging, or modifying requests:
|
|
|
84
84
|
|
|
85
85
|
```typescript
|
|
86
86
|
const api = http_client({
|
|
87
|
-
|
|
87
|
+
base_url: 'https://api.example.com',
|
|
88
88
|
endpoints: { /* ... */ },
|
|
89
89
|
fetch: async (request) => {
|
|
90
90
|
console.log('Request:', request.url)
|