@duplojs/http 0.7.4 → 0.8.4
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/client/getBody.cjs +3 -3
- package/dist/client/getBody.mjs +3 -3
- package/dist/client/hooks.cjs +45 -0
- package/dist/client/hooks.d.ts +6 -1
- package/dist/client/hooks.mjs +41 -1
- package/dist/client/httpClient.cjs +25 -1
- package/dist/client/httpClient.d.ts +8 -3
- package/dist/client/httpClient.mjs +25 -1
- package/dist/client/index.cjs +7 -0
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.mjs +2 -1
- package/dist/client/insertParamsInPath.cjs +1 -1
- package/dist/client/insertParamsInPath.mjs +1 -1
- package/dist/client/promiseRequest.cjs +83 -26
- package/dist/client/promiseRequest.d.ts +46 -29
- package/dist/client/promiseRequest.mjs +83 -26
- package/dist/client/queryToString.cjs +1 -1
- package/dist/client/queryToString.mjs +1 -1
- package/dist/client/serverSentEvents.cjs +231 -0
- package/dist/client/serverSentEvents.d.ts +2 -0
- package/dist/client/serverSentEvents.mjs +208 -0
- package/dist/client/types/clientRequestParams.d.ts +2 -0
- package/dist/client/types/clientResponse.d.ts +34 -3
- package/dist/client/types/hooks.d.ts +17 -7
- package/dist/client/types/promiseRequestParams.d.ts +1 -0
- package/dist/client/types/serverRoute.d.ts +2 -0
- package/dist/core/builders/route/handler.d.ts +5 -2
- package/dist/core/defaultHooks/index.cjs +8 -0
- package/dist/core/defaultHooks/index.d.ts +1 -1
- package/dist/core/defaultHooks/index.mjs +8 -0
- package/dist/core/functionsBuilders/route/default.cjs +9 -13
- package/dist/core/functionsBuilders/route/default.mjs +2 -6
- package/dist/core/functionsBuilders/steps/create.d.ts +2 -2
- package/dist/core/functionsBuilders/steps/defaults/cutStep.cjs +1 -1
- package/dist/core/functionsBuilders/steps/defaults/cutStep.mjs +1 -1
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.cjs +37 -17
- package/dist/core/functionsBuilders/steps/defaults/handlerStep.mjs +37 -17
- package/dist/core/functionsBuilders/steps/defaults/processStep.cjs +3 -3
- package/dist/core/functionsBuilders/steps/defaults/processStep.mjs +3 -3
- package/dist/core/hub/defaultEmptyReaderImplementation.cjs +9 -0
- package/dist/core/hub/defaultEmptyReaderImplementation.d.ts +1 -0
- package/dist/core/hub/defaultEmptyReaderImplementation.mjs +7 -0
- package/dist/core/hub/defaultMalformedUrlHandler.cjs +14 -0
- package/dist/core/hub/defaultMalformedUrlHandler.d.ts +10 -0
- package/dist/core/hub/defaultMalformedUrlHandler.mjs +12 -0
- package/dist/core/hub/defaultNotfoundHandler.d.ts +1 -1
- package/dist/core/hub/index.cjs +14 -1
- package/dist/core/hub/index.d.ts +4 -0
- package/dist/core/hub/index.mjs +13 -2
- package/dist/core/implementHttpServer.cjs +7 -2
- package/dist/core/implementHttpServer.d.ts +7 -1
- package/dist/core/implementHttpServer.mjs +5 -0
- package/dist/core/index.cjs +18 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.mjs +8 -2
- package/dist/core/request/bodyController/base.cjs +24 -6
- package/dist/core/request/bodyController/base.d.ts +9 -0
- package/dist/core/request/bodyController/base.mjs +25 -8
- package/dist/core/request/bodyController/empty.cjs +11 -0
- package/dist/core/request/bodyController/empty.d.ts +3 -0
- package/dist/core/request/bodyController/empty.mjs +8 -0
- package/dist/core/request/bodyController/formData.d.ts +2 -2
- package/dist/core/request/bodyController/index.cjs +4 -0
- package/dist/core/request/bodyController/index.d.ts +1 -0
- package/dist/core/request/bodyController/index.mjs +2 -1
- package/dist/core/request/index.cjs +5 -0
- package/dist/core/request/index.d.ts +1 -1
- package/dist/core/request/index.mjs +6 -1
- package/dist/core/response/contract.cjs +17 -4
- package/dist/core/response/contract.d.ts +19 -4
- package/dist/core/response/contract.mjs +17 -4
- package/dist/core/response/index.cjs +2 -0
- package/dist/core/response/index.d.ts +1 -0
- package/dist/core/response/index.mjs +1 -0
- package/dist/core/response/serverSentEventsPredicted.cjs +23 -0
- package/dist/core/response/serverSentEventsPredicted.d.ts +14 -0
- package/dist/core/response/serverSentEventsPredicted.mjs +21 -0
- package/dist/core/route/hooks.cjs +9 -0
- package/dist/core/route/hooks.d.ts +10 -9
- package/dist/core/route/hooks.mjs +9 -1
- package/dist/core/route/index.cjs +1 -0
- package/dist/core/route/index.mjs +1 -1
- package/dist/core/router/buildSystemRoute.cjs +33 -0
- package/dist/core/router/buildSystemRoute.d.ts +11 -0
- package/dist/core/router/buildSystemRoute.mjs +31 -0
- package/dist/core/router/decodeUrl.cjs +5 -4
- package/dist/core/router/decodeUrl.d.ts +1 -1
- package/dist/core/router/decodeUrl.mjs +5 -4
- package/dist/core/router/index.cjs +24 -23
- package/dist/core/router/index.d.ts +1 -0
- package/dist/core/router/index.mjs +25 -25
- package/dist/core/serverSentEvents.cjs +96 -0
- package/dist/core/serverSentEvents.d.ts +33 -0
- package/dist/core/serverSentEvents.mjs +96 -0
- package/dist/core/steps/cut.d.ts +2 -2
- package/dist/core/steps/handler.d.ts +10 -5
- package/dist/interfaces/node/bodyReaders/formData/index.cjs +33 -14
- package/dist/interfaces/node/bodyReaders/formData/index.mjs +34 -15
- package/dist/interfaces/node/bodyReaders/formData/readRequestFormData.cjs +8 -11
- package/dist/interfaces/node/bodyReaders/formData/readRequestFormData.mjs +8 -11
- package/dist/interfaces/node/createHttpServer.cjs +2 -3
- package/dist/interfaces/node/createHttpServer.mjs +2 -3
- package/dist/interfaces/node/hooks/index.cjs +61 -38
- package/dist/interfaces/node/hooks/index.d.ts +6 -4
- package/dist/interfaces/node/hooks/index.mjs +61 -38
- package/dist/interfaces/node/index.cjs +1 -1
- package/dist/interfaces/node/index.mjs +1 -1
- package/dist/plugins/cacheController/createResponseHeader.cjs +43 -0
- package/dist/plugins/cacheController/createResponseHeader.d.ts +2 -0
- package/dist/plugins/cacheController/createResponseHeader.mjs +41 -0
- package/dist/plugins/cacheController/hooks.cjs +23 -0
- package/dist/plugins/cacheController/hooks.d.ts +4 -0
- package/dist/plugins/cacheController/hooks.mjs +21 -0
- package/dist/plugins/cacheController/index.cjs +10 -0
- package/dist/plugins/cacheController/index.d.ts +3 -0
- package/dist/plugins/cacheController/index.mjs +3 -0
- package/dist/plugins/cacheController/types/cacheControlDirectives.cjs +2 -0
- package/dist/plugins/cacheController/types/cacheControlDirectives.d.ts +16 -0
- package/dist/plugins/cacheController/types/cacheControlDirectives.mjs +1 -0
- package/dist/plugins/cacheController/types/index.cjs +4 -0
- package/dist/plugins/cacheController/types/index.d.ts +1 -0
- package/dist/plugins/cacheController/types/index.mjs +1 -0
- package/dist/plugins/codeGenerator/aggregateStepContract.cjs +9 -2
- package/dist/plugins/codeGenerator/aggregateStepContract.d.ts +1 -1
- package/dist/plugins/codeGenerator/aggregateStepContract.mjs +10 -3
- package/dist/plugins/codeGenerator/plugin.cjs +4 -4
- package/dist/plugins/codeGenerator/plugin.mjs +1 -1
- package/dist/plugins/openApiGenerator/aggregateStepContract.d.ts +2 -7
- package/dist/plugins/openApiGenerator/routeToOpenApi.cjs +46 -8
- package/dist/plugins/openApiGenerator/routeToOpenApi.d.ts +2 -2
- package/dist/plugins/openApiGenerator/routeToOpenApi.mjs +46 -8
- package/dist/plugins/openApiGenerator/types/endpointResponse.d.ts +7 -3
- package/dist/plugins/static/index.cjs +14 -0
- package/dist/plugins/static/index.d.ts +3 -0
- package/dist/plugins/static/index.mjs +3 -0
- package/dist/plugins/static/kind.cjs +9 -0
- package/dist/plugins/static/kind.d.ts +6 -0
- package/dist/plugins/static/kind.mjs +7 -0
- package/dist/plugins/static/makeRouteFile.cjs +62 -0
- package/dist/plugins/static/makeRouteFile.d.ts +48 -0
- package/dist/plugins/static/makeRouteFile.mjs +58 -0
- package/dist/plugins/static/makeRouteFolder.cjs +67 -0
- package/dist/plugins/static/makeRouteFolder.d.ts +39 -0
- package/dist/plugins/static/makeRouteFolder.mjs +65 -0
- package/dist/plugins/static/plugin.cjs +53 -0
- package/dist/plugins/static/plugin.d.ts +26 -0
- package/dist/plugins/static/plugin.mjs +50 -0
- package/package.json +18 -7
- /package/dist/plugins/codeGenerator/{typescriptTransfomer.cjs → typescriptTransformer.cjs} +0 -0
- /package/dist/plugins/codeGenerator/{typescriptTransfomer.d.ts → typescriptTransformer.d.ts} +0 -0
- /package/dist/plugins/codeGenerator/{typescriptTransfomer.mjs → typescriptTransformer.mjs} +0 -0
package/dist/client/getBody.cjs
CHANGED
|
@@ -5,15 +5,15 @@ function getBody(response) {
|
|
|
5
5
|
if (!responseContentType) {
|
|
6
6
|
return Promise.resolve(undefined);
|
|
7
7
|
}
|
|
8
|
+
else if (responseContentType.includes("text/event-stream")) {
|
|
9
|
+
return Promise.resolve(undefined);
|
|
10
|
+
}
|
|
8
11
|
else if (responseContentType.includes("json")) {
|
|
9
12
|
return response.json();
|
|
10
13
|
}
|
|
11
14
|
else if (responseContentType.includes("text")) {
|
|
12
15
|
return response.text();
|
|
13
16
|
}
|
|
14
|
-
else if (responseContentType.includes("form-data")) {
|
|
15
|
-
return response.formData();
|
|
16
|
-
}
|
|
17
17
|
else {
|
|
18
18
|
return Promise.resolve(undefined);
|
|
19
19
|
}
|
package/dist/client/getBody.mjs
CHANGED
|
@@ -3,15 +3,15 @@ function getBody(response) {
|
|
|
3
3
|
if (!responseContentType) {
|
|
4
4
|
return Promise.resolve(undefined);
|
|
5
5
|
}
|
|
6
|
+
else if (responseContentType.includes("text/event-stream")) {
|
|
7
|
+
return Promise.resolve(undefined);
|
|
8
|
+
}
|
|
6
9
|
else if (responseContentType.includes("json")) {
|
|
7
10
|
return response.json();
|
|
8
11
|
}
|
|
9
12
|
else if (responseContentType.includes("text")) {
|
|
10
13
|
return response.text();
|
|
11
14
|
}
|
|
12
|
-
else if (responseContentType.includes("form-data")) {
|
|
13
|
-
return response.formData();
|
|
14
|
-
}
|
|
15
15
|
else {
|
|
16
16
|
return Promise.resolve(undefined);
|
|
17
17
|
}
|
package/dist/client/hooks.cjs
CHANGED
|
@@ -68,12 +68,57 @@ async function launchErrorHook(clientHook, promiseRequestHook, error, requestPar
|
|
|
68
68
|
await clientHook[index](error, requestParams);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
async function launchCloseServerEventHook(clientHook, promiseRequestHook, response) {
|
|
72
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
73
|
+
await promiseRequestHook[index](response);
|
|
74
|
+
}
|
|
75
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
76
|
+
await clientHook[index](response);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async function launchBeforeRetryServerEventHook(clientHook, promiseRequestHook, response) {
|
|
80
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
81
|
+
await promiseRequestHook[index](response);
|
|
82
|
+
}
|
|
83
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
84
|
+
await clientHook[index](response);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function launchErrorServerEventHook(clientHook, promiseRequestHook, error, response) {
|
|
88
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
89
|
+
await promiseRequestHook[index](error, response);
|
|
90
|
+
}
|
|
91
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
92
|
+
await clientHook[index](error, response);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function launchStartServerEventHook(clientHook, promiseRequestHook, response) {
|
|
96
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
97
|
+
await promiseRequestHook[index](response);
|
|
98
|
+
}
|
|
99
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
100
|
+
await clientHook[index](response);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function launchReceiveEventServerEventHook(clientHook, promiseRequestHook, event, response) {
|
|
104
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
105
|
+
await promiseRequestHook[index](event, response);
|
|
106
|
+
}
|
|
107
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
108
|
+
await clientHook[index](event, response);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
71
111
|
|
|
112
|
+
exports.launchBeforeRetryServerEventHook = launchBeforeRetryServerEventHook;
|
|
113
|
+
exports.launchCloseServerEventHook = launchCloseServerEventHook;
|
|
72
114
|
exports.launchCodeHook = launchCodeHook;
|
|
73
115
|
exports.launchErrorHook = launchErrorHook;
|
|
116
|
+
exports.launchErrorServerEventHook = launchErrorServerEventHook;
|
|
74
117
|
exports.launchExpectedResponseHook = launchExpectedResponseHook;
|
|
75
118
|
exports.launchInformationHook = launchInformationHook;
|
|
76
119
|
exports.launchNotPredictedHook = launchNotPredictedHook;
|
|
120
|
+
exports.launchReceiveEventServerEventHook = launchReceiveEventServerEventHook;
|
|
77
121
|
exports.launchRequestHook = launchRequestHook;
|
|
78
122
|
exports.launchResponseHook = launchResponseHook;
|
|
79
123
|
exports.launchResponseTypeHook = launchResponseTypeHook;
|
|
124
|
+
exports.launchStartServerEventHook = launchStartServerEventHook;
|
package/dist/client/hooks.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CodeHook, type ErrorHook, type InformationHook, type NotPredictedResponseHook, type RequestHook, type ResponseHook, type ResponseTypeHook, type PromiseRequestParams, type NotPredictedClientResponse, type ClientResponse } from "./types";
|
|
1
|
+
import { type CodeHook, type ErrorHook, type InformationHook, type NotPredictedResponseHook, type RequestHook, type ResponseHook, type ResponseTypeHook, type PromiseRequestParams, type NotPredictedClientResponse, type ClientResponse, type CloseServerEventHook, type ClientEventsResponse, type BeforeRetryServerEventHook, type ErrorServerEventHook, type StartServerEventHook, type ServerEvent, type ReceiveEventServerEventHook } from "./types";
|
|
2
2
|
export declare function launchRequestHook(clientHook: readonly RequestHook[], promiseRequestHook: readonly RequestHook[], requestParams: PromiseRequestParams): Promise<PromiseRequestParams>;
|
|
3
3
|
export declare function launchResponseHook(clientHook: readonly ResponseHook[], promiseRequestHook: readonly ResponseHook[], response: ClientResponse): Promise<ClientResponse>;
|
|
4
4
|
export declare function launchInformationHook(clientHook: readonly InformationHook[], promiseRequestHook: readonly InformationHook[], response: ClientResponse): Promise<void>;
|
|
@@ -7,3 +7,8 @@ export declare function launchResponseTypeHook(clientHook: readonly ResponseType
|
|
|
7
7
|
export declare function launchExpectedResponseHook(clientHook: readonly ResponseTypeHook[], promiseRequestHook: readonly ResponseTypeHook[], response: ClientResponse): Promise<void>;
|
|
8
8
|
export declare function launchNotPredictedHook(clientHook: readonly NotPredictedResponseHook[], promiseRequestHook: readonly NotPredictedResponseHook[], response: NotPredictedClientResponse): Promise<void>;
|
|
9
9
|
export declare function launchErrorHook(clientHook: readonly ErrorHook[], promiseRequestHook: readonly ErrorHook[], error: unknown, requestParams: PromiseRequestParams): Promise<void>;
|
|
10
|
+
export declare function launchCloseServerEventHook(clientHook: readonly CloseServerEventHook[], promiseRequestHook: readonly CloseServerEventHook[], response: ClientEventsResponse): Promise<void>;
|
|
11
|
+
export declare function launchBeforeRetryServerEventHook(clientHook: readonly BeforeRetryServerEventHook[], promiseRequestHook: readonly BeforeRetryServerEventHook[], response: ClientEventsResponse): Promise<void>;
|
|
12
|
+
export declare function launchErrorServerEventHook(clientHook: readonly ErrorServerEventHook[], promiseRequestHook: readonly ErrorServerEventHook[], error: unknown, response: ClientEventsResponse): Promise<void>;
|
|
13
|
+
export declare function launchStartServerEventHook(clientHook: readonly StartServerEventHook[], promiseRequestHook: readonly StartServerEventHook[], response: ClientEventsResponse): Promise<void>;
|
|
14
|
+
export declare function launchReceiveEventServerEventHook(clientHook: readonly ReceiveEventServerEventHook[], promiseRequestHook: readonly ReceiveEventServerEventHook[], event: ServerEvent, response: ClientEventsResponse): Promise<void>;
|
package/dist/client/hooks.mjs
CHANGED
|
@@ -66,5 +66,45 @@ async function launchErrorHook(clientHook, promiseRequestHook, error, requestPar
|
|
|
66
66
|
await clientHook[index](error, requestParams);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
async function launchCloseServerEventHook(clientHook, promiseRequestHook, response) {
|
|
70
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
71
|
+
await promiseRequestHook[index](response);
|
|
72
|
+
}
|
|
73
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
74
|
+
await clientHook[index](response);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function launchBeforeRetryServerEventHook(clientHook, promiseRequestHook, response) {
|
|
78
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
79
|
+
await promiseRequestHook[index](response);
|
|
80
|
+
}
|
|
81
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
82
|
+
await clientHook[index](response);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function launchErrorServerEventHook(clientHook, promiseRequestHook, error, response) {
|
|
86
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
87
|
+
await promiseRequestHook[index](error, response);
|
|
88
|
+
}
|
|
89
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
90
|
+
await clientHook[index](error, response);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function launchStartServerEventHook(clientHook, promiseRequestHook, response) {
|
|
94
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
95
|
+
await promiseRequestHook[index](response);
|
|
96
|
+
}
|
|
97
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
98
|
+
await clientHook[index](response);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function launchReceiveEventServerEventHook(clientHook, promiseRequestHook, event, response) {
|
|
102
|
+
for (let index = 0; index < promiseRequestHook.length; index++) {
|
|
103
|
+
await promiseRequestHook[index](event, response);
|
|
104
|
+
}
|
|
105
|
+
for (let index = 0; index < clientHook.length; index++) {
|
|
106
|
+
await clientHook[index](event, response);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
69
109
|
|
|
70
|
-
export { launchCodeHook, launchErrorHook, launchExpectedResponseHook, launchInformationHook, launchNotPredictedHook, launchRequestHook, launchResponseHook, launchResponseTypeHook };
|
|
110
|
+
export { launchBeforeRetryServerEventHook, launchCloseServerEventHook, launchCodeHook, launchErrorHook, launchErrorServerEventHook, launchExpectedResponseHook, launchInformationHook, launchNotPredictedHook, launchReceiveEventServerEventHook, launchRequestHook, launchResponseHook, launchResponseTypeHook, launchStartServerEventHook };
|
|
@@ -40,6 +40,11 @@ function createHttpClient(clientParams) {
|
|
|
40
40
|
expectedResponse: [],
|
|
41
41
|
error: [],
|
|
42
42
|
notPredictedResponse: [],
|
|
43
|
+
beforeRetryServerEvent: [],
|
|
44
|
+
closeServerEvent: [],
|
|
45
|
+
errorServerEvent: [],
|
|
46
|
+
receiveEventServerEvent: [],
|
|
47
|
+
startServerEvent: [],
|
|
43
48
|
}, clientParams.hooks ?? {});
|
|
44
49
|
const config = {
|
|
45
50
|
baseUrl: clientParams.baseUrl,
|
|
@@ -102,9 +107,27 @@ function createHttpClient(clientParams) {
|
|
|
102
107
|
addErrorHook(hook) {
|
|
103
108
|
hooks.error.push(hook);
|
|
104
109
|
},
|
|
110
|
+
addBeforeRetryServerEventHook(hook) {
|
|
111
|
+
hooks.beforeRetryServerEvent.push(hook);
|
|
112
|
+
},
|
|
113
|
+
addCloseServerEventHook(hook) {
|
|
114
|
+
hooks.closeServerEvent.push(hook);
|
|
115
|
+
},
|
|
116
|
+
addErrorServerEventHook(hook) {
|
|
117
|
+
hooks.errorServerEvent.push(hook);
|
|
118
|
+
},
|
|
119
|
+
addReceiveEventServerEventHook(hook) {
|
|
120
|
+
hooks.receiveEventServerEvent.push(hook);
|
|
121
|
+
},
|
|
122
|
+
addStartServerEventHook(hook) {
|
|
123
|
+
hooks.startServerEvent.push(hook);
|
|
124
|
+
},
|
|
105
125
|
request(params) {
|
|
106
126
|
const headers = GG__namespace.reduce(defaultHeaders.entries(), GG__namespace.reduceFrom({}), ({ element, lastValue, next }) => {
|
|
107
|
-
|
|
127
|
+
const value = element[1]();
|
|
128
|
+
if (value !== undefined) {
|
|
129
|
+
lastValue[element[0]] = `${value}`;
|
|
130
|
+
}
|
|
108
131
|
return next(lastValue);
|
|
109
132
|
});
|
|
110
133
|
return new promiseRequest.PromiseRequest({
|
|
@@ -123,6 +146,7 @@ function createHttpClient(clientParams) {
|
|
|
123
146
|
predictedHeaderKey: config.predictedHeaderKey,
|
|
124
147
|
informationHeaderKey: config.informationHeaderKey,
|
|
125
148
|
disabledPredicateMode: config.disabledPredictedMode,
|
|
149
|
+
abortController: params.abortController ?? new AbortController(),
|
|
126
150
|
});
|
|
127
151
|
},
|
|
128
152
|
get: ((path, params) => self.request({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type Kind, type MayBeGetter, type SimplifyTopLevel, type IsEqual } from "@duplojs/utils";
|
|
2
|
-
import { type ClientRequestInitParams, type ServerRoute, type ServerRouteToClientRequestParams, type ServerRouteToClientResponse, type ClientRequestParams, type
|
|
2
|
+
import { type ClientRequestInitParams, type ServerRoute, type ServerRouteToClientRequestParams, type ServerRouteToClientResponse, type ClientRequestParams, type Hooks, type RequestHook, type ResponseHook, type InformationHook, type CodeHook, type ResponseTypeHook, type ExpectedResponseHook, type NotPredictedResponseHook, type ErrorHook, type GetServerRoutePath, type AllClientResponse, type BeforeRetryServerEventHook, type CloseServerEventHook, type ErrorServerEventHook, type StartServerEventHook, type ReceiveEventServerEventHook } from "./types";
|
|
3
3
|
import { PromiseRequest } from "./promiseRequest";
|
|
4
4
|
export declare const httpClientKind: import("@duplojs/utils").KindHandler<import("@duplojs/utils").KindDefinition<"@DuplojsHttpClient/http-client", unknown>>;
|
|
5
5
|
type MaybeRequestParams<GenericRequestParams extends object> = {} extends GenericRequestParams ? [params?: GenericRequestParams] : [params: GenericRequestParams];
|
|
6
|
-
type HttpClientRequestMethod<GenericServerRoute extends ServerRoute, GenericHookParams extends Record<string, unknown>, GenericMethod extends string> = IsEqual<GenericServerRoute, ServerRoute> extends true ? (path: string, params?: SimplifyTopLevel<Omit<ClientRequestParams<GenericHookParams>, "method" | "path">>) => PromiseRequest<GenericHookParams,
|
|
6
|
+
type HttpClientRequestMethod<GenericServerRoute extends ServerRoute, GenericHookParams extends Record<string, unknown>, GenericMethod extends string> = IsEqual<GenericServerRoute, ServerRoute> extends true ? (path: string, params?: SimplifyTopLevel<Omit<ClientRequestParams<GenericHookParams>, "method" | "path">>) => PromiseRequest<GenericHookParams, AllClientResponse<GenericHookParams>> : <GenericPath extends Extract<GenericServerRoute, {
|
|
7
7
|
method: GenericMethod;
|
|
8
8
|
}>["path"], GenericMatchedPath extends GetServerRoutePath<Extract<GenericServerRoute, {
|
|
9
9
|
method: GenericMethod;
|
|
@@ -40,9 +40,14 @@ export interface HttpClient<GenericServerRoute extends ServerRoute = ServerRoute
|
|
|
40
40
|
addExpectedResponseHook(hook: ExpectedResponseHook<GenericHookParams>): void;
|
|
41
41
|
addNotPredictedResponseHook(hook: NotPredictedResponseHook<GenericHookParams>): void;
|
|
42
42
|
addErrorHook(hook: ErrorHook<GenericHookParams>): void;
|
|
43
|
+
addBeforeRetryServerEventHook(hook: BeforeRetryServerEventHook<GenericHookParams>): void;
|
|
44
|
+
addCloseServerEventHook(hook: CloseServerEventHook<GenericHookParams>): void;
|
|
45
|
+
addErrorServerEventHook(hook: ErrorServerEventHook<GenericHookParams>): void;
|
|
46
|
+
addStartServerEventHook(hook: StartServerEventHook<GenericHookParams>): void;
|
|
47
|
+
addReceiveEventServerEventHook(hook: ReceiveEventServerEventHook<GenericHookParams>): void;
|
|
43
48
|
request<GenericClientRequestParams extends ServerRouteToClientRequestParams<GenericServerRoute, GenericHookParams>, GenericMatchedPath extends GetServerRoutePath<Extract<GenericServerRoute, {
|
|
44
49
|
method: GenericClientRequestParams["method"];
|
|
45
|
-
}>, GenericClientRequestParams["path"]>>(params: GenericClientRequestParams): PromiseRequest<GenericHookParams, ServerRouteToClientResponse<Extract<GenericServerRoute, {
|
|
50
|
+
}>, GenericClientRequestParams["path"]>>(params: GenericClientRequestParams): PromiseRequest<GenericHookParams, IsEqual<GenericServerRoute, ServerRoute> extends true ? AllClientResponse<GenericHookParams> : ServerRouteToClientResponse<Extract<GenericServerRoute, {
|
|
46
51
|
method: GenericClientRequestParams["method"];
|
|
47
52
|
path: GenericMatchedPath;
|
|
48
53
|
}>, GenericHookParams>>;
|
|
@@ -18,6 +18,11 @@ function createHttpClient(clientParams) {
|
|
|
18
18
|
expectedResponse: [],
|
|
19
19
|
error: [],
|
|
20
20
|
notPredictedResponse: [],
|
|
21
|
+
beforeRetryServerEvent: [],
|
|
22
|
+
closeServerEvent: [],
|
|
23
|
+
errorServerEvent: [],
|
|
24
|
+
receiveEventServerEvent: [],
|
|
25
|
+
startServerEvent: [],
|
|
21
26
|
}, clientParams.hooks ?? {});
|
|
22
27
|
const config = {
|
|
23
28
|
baseUrl: clientParams.baseUrl,
|
|
@@ -80,9 +85,27 @@ function createHttpClient(clientParams) {
|
|
|
80
85
|
addErrorHook(hook) {
|
|
81
86
|
hooks.error.push(hook);
|
|
82
87
|
},
|
|
88
|
+
addBeforeRetryServerEventHook(hook) {
|
|
89
|
+
hooks.beforeRetryServerEvent.push(hook);
|
|
90
|
+
},
|
|
91
|
+
addCloseServerEventHook(hook) {
|
|
92
|
+
hooks.closeServerEvent.push(hook);
|
|
93
|
+
},
|
|
94
|
+
addErrorServerEventHook(hook) {
|
|
95
|
+
hooks.errorServerEvent.push(hook);
|
|
96
|
+
},
|
|
97
|
+
addReceiveEventServerEventHook(hook) {
|
|
98
|
+
hooks.receiveEventServerEvent.push(hook);
|
|
99
|
+
},
|
|
100
|
+
addStartServerEventHook(hook) {
|
|
101
|
+
hooks.startServerEvent.push(hook);
|
|
102
|
+
},
|
|
83
103
|
request(params) {
|
|
84
104
|
const headers = GG.reduce(defaultHeaders.entries(), GG.reduceFrom({}), ({ element, lastValue, next }) => {
|
|
85
|
-
|
|
105
|
+
const value = element[1]();
|
|
106
|
+
if (value !== undefined) {
|
|
107
|
+
lastValue[element[0]] = `${value}`;
|
|
108
|
+
}
|
|
86
109
|
return next(lastValue);
|
|
87
110
|
});
|
|
88
111
|
return new PromiseRequest({
|
|
@@ -101,6 +124,7 @@ function createHttpClient(clientParams) {
|
|
|
101
124
|
predictedHeaderKey: config.predictedHeaderKey,
|
|
102
125
|
informationHeaderKey: config.informationHeaderKey,
|
|
103
126
|
disabledPredicateMode: config.disabledPredictedMode,
|
|
127
|
+
abortController: params.abortController ?? new AbortController(),
|
|
104
128
|
});
|
|
105
129
|
},
|
|
106
130
|
get: ((path, params) => self.request({
|
package/dist/client/index.cjs
CHANGED
|
@@ -9,20 +9,26 @@ var insertParamsInPath = require('./insertParamsInPath.cjs');
|
|
|
9
9
|
var queryToString = require('./queryToString.cjs');
|
|
10
10
|
var promiseRequest = require('./promiseRequest.cjs');
|
|
11
11
|
var unexpectedResponseError = require('./unexpectedResponseError.cjs');
|
|
12
|
+
var serverSentEvents = require('./serverSentEvents.cjs');
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
exports.createClientKind = kind.createClientKind;
|
|
16
17
|
exports.createHttpClient = httpClient.createHttpClient;
|
|
17
18
|
exports.httpClientKind = httpClient.httpClientKind;
|
|
19
|
+
exports.launchBeforeRetryServerEventHook = hooks.launchBeforeRetryServerEventHook;
|
|
20
|
+
exports.launchCloseServerEventHook = hooks.launchCloseServerEventHook;
|
|
18
21
|
exports.launchCodeHook = hooks.launchCodeHook;
|
|
19
22
|
exports.launchErrorHook = hooks.launchErrorHook;
|
|
23
|
+
exports.launchErrorServerEventHook = hooks.launchErrorServerEventHook;
|
|
20
24
|
exports.launchExpectedResponseHook = hooks.launchExpectedResponseHook;
|
|
21
25
|
exports.launchInformationHook = hooks.launchInformationHook;
|
|
22
26
|
exports.launchNotPredictedHook = hooks.launchNotPredictedHook;
|
|
27
|
+
exports.launchReceiveEventServerEventHook = hooks.launchReceiveEventServerEventHook;
|
|
23
28
|
exports.launchRequestHook = hooks.launchRequestHook;
|
|
24
29
|
exports.launchResponseHook = hooks.launchResponseHook;
|
|
25
30
|
exports.launchResponseTypeHook = hooks.launchResponseTypeHook;
|
|
31
|
+
exports.launchStartServerEventHook = hooks.launchStartServerEventHook;
|
|
26
32
|
exports.getBody = getBody.getBody;
|
|
27
33
|
exports.insertParamsInPath = insertParamsInPath.insertParamsInPath;
|
|
28
34
|
exports.queryToString = queryToString.queryToString;
|
|
@@ -31,3 +37,4 @@ exports.UnexpectedCodeResponseError = unexpectedResponseError.UnexpectedCodeResp
|
|
|
31
37
|
exports.UnexpectedInformationResponseError = unexpectedResponseError.UnexpectedInformationResponseError;
|
|
32
38
|
exports.UnexpectedResponseError = unexpectedResponseError.UnexpectedResponseError;
|
|
33
39
|
exports.UnexpectedResponseTypeError = unexpectedResponseError.UnexpectedResponseTypeError;
|
|
40
|
+
exports.makeClientEventsResponse = serverSentEvents.makeClientEventsResponse;
|
package/dist/client/index.d.ts
CHANGED
package/dist/client/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import './types/index.mjs';
|
|
2
2
|
export { createClientKind } from './kind.mjs';
|
|
3
3
|
export { createHttpClient, httpClientKind } from './httpClient.mjs';
|
|
4
|
-
export { launchCodeHook, launchErrorHook, launchExpectedResponseHook, launchInformationHook, launchNotPredictedHook, launchRequestHook, launchResponseHook, launchResponseTypeHook } from './hooks.mjs';
|
|
4
|
+
export { launchBeforeRetryServerEventHook, launchCloseServerEventHook, launchCodeHook, launchErrorHook, launchErrorServerEventHook, launchExpectedResponseHook, launchInformationHook, launchNotPredictedHook, launchReceiveEventServerEventHook, launchRequestHook, launchResponseHook, launchResponseTypeHook, launchStartServerEventHook } from './hooks.mjs';
|
|
5
5
|
export { getBody } from './getBody.mjs';
|
|
6
6
|
export { insertParamsInPath } from './insertParamsInPath.mjs';
|
|
7
7
|
export { queryToString } from './queryToString.mjs';
|
|
8
8
|
export { PromiseRequest } from './promiseRequest.mjs';
|
|
9
9
|
export { UnexpectedCodeResponseError, UnexpectedInformationResponseError, UnexpectedResponseError, UnexpectedResponseTypeError } from './unexpectedResponseError.mjs';
|
|
10
|
+
export { makeClientEventsResponse } from './serverSentEvents.mjs';
|
|
@@ -4,7 +4,7 @@ function insertParamsInPath(path, params) {
|
|
|
4
4
|
if (!params) {
|
|
5
5
|
return path;
|
|
6
6
|
}
|
|
7
|
-
return Object.entries(params).reduce((pv, [key, value]) => value
|
|
7
|
+
return Object.entries(params).reduce((pv, [key, value]) => value !== undefined
|
|
8
8
|
? pv.replace(`{${key}}`, value.toString())
|
|
9
9
|
: pv, path);
|
|
10
10
|
}
|
|
@@ -2,7 +2,7 @@ function insertParamsInPath(path, params) {
|
|
|
2
2
|
if (!params) {
|
|
3
3
|
return path;
|
|
4
4
|
}
|
|
5
|
-
return Object.entries(params).reduce((pv, [key, value]) => value
|
|
5
|
+
return Object.entries(params).reduce((pv, [key, value]) => value !== undefined
|
|
6
6
|
? pv.replace(`{${key}}`, value.toString())
|
|
7
7
|
: pv, path);
|
|
8
8
|
}
|
|
@@ -9,6 +9,7 @@ var EE = require('@duplojs/utils/either');
|
|
|
9
9
|
var SS = require('@duplojs/utils/string');
|
|
10
10
|
var AA = require('@duplojs/utils/array');
|
|
11
11
|
var unexpectedResponseError = require('./unexpectedResponseError.cjs');
|
|
12
|
+
var serverSentEvents = require('./serverSentEvents.cjs');
|
|
12
13
|
|
|
13
14
|
function _interopNamespaceDefault(e) {
|
|
14
15
|
var n = Object.create(null);
|
|
@@ -65,7 +66,7 @@ class PromiseRequest extends Promise {
|
|
|
65
66
|
return EE__namespace.right("response", response);
|
|
66
67
|
})
|
|
67
68
|
.then(async (result) => {
|
|
68
|
-
if (EE__namespace.
|
|
69
|
+
if (EE__namespace.futureErrorKind.has(result)) {
|
|
69
70
|
const error = utils.unwrap(result);
|
|
70
71
|
await hooks.launchErrorHook(params.hooks.error, this.hooks.error ?? [], error, params);
|
|
71
72
|
return EE__namespace.left("request-error", {
|
|
@@ -146,10 +147,22 @@ class PromiseRequest extends Promise {
|
|
|
146
147
|
this.hooks.error.push(callback);
|
|
147
148
|
return this;
|
|
148
149
|
}
|
|
150
|
+
whenReceiveServerEvent(eventName, callback) {
|
|
151
|
+
void this.then(EE__namespace.whenIsRight((response) => {
|
|
152
|
+
if ((response.predicted === true
|
|
153
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
154
|
+
&& Symbol.asyncIterator in response) {
|
|
155
|
+
response.onReceiveEvent(eventName, callback);
|
|
156
|
+
}
|
|
157
|
+
}));
|
|
158
|
+
return this;
|
|
159
|
+
}
|
|
149
160
|
iWantInformation(information) {
|
|
150
161
|
const formattedInformation = AA__namespace.coalescing(information);
|
|
151
162
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
152
|
-
if (response.
|
|
163
|
+
if ((response.predicted === true
|
|
164
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
165
|
+
&& response.information !== undefined
|
|
153
166
|
&& AA__namespace.includes(formattedInformation, response.information)) {
|
|
154
167
|
return EE__namespace.right("response", response);
|
|
155
168
|
}
|
|
@@ -159,7 +172,9 @@ class PromiseRequest extends Promise {
|
|
|
159
172
|
iWantCode(code) {
|
|
160
173
|
const formattedCode = AA__namespace.coalescing(code);
|
|
161
174
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
162
|
-
if (
|
|
175
|
+
if ((response.predicted === true
|
|
176
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
177
|
+
&& AA__namespace.includes(formattedCode, response.code)) {
|
|
163
178
|
return EE__namespace.right("response", response);
|
|
164
179
|
}
|
|
165
180
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -167,7 +182,9 @@ class PromiseRequest extends Promise {
|
|
|
167
182
|
}
|
|
168
183
|
iWantInformationalResponse() {
|
|
169
184
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
170
|
-
if (
|
|
185
|
+
if ((response.predicted === true
|
|
186
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
187
|
+
&& SS__namespace.startsWith(response.code, "1")) {
|
|
171
188
|
return EE__namespace.right("response", response);
|
|
172
189
|
}
|
|
173
190
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -175,7 +192,9 @@ class PromiseRequest extends Promise {
|
|
|
175
192
|
}
|
|
176
193
|
iWantSuccessfulResponse() {
|
|
177
194
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
178
|
-
if (
|
|
195
|
+
if ((response.predicted === true
|
|
196
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
197
|
+
&& SS__namespace.startsWith(response.code, "2")) {
|
|
179
198
|
return EE__namespace.right("response", response);
|
|
180
199
|
}
|
|
181
200
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -183,7 +202,9 @@ class PromiseRequest extends Promise {
|
|
|
183
202
|
}
|
|
184
203
|
iWantRedirectionResponse() {
|
|
185
204
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
186
|
-
if (
|
|
205
|
+
if ((response.predicted === true
|
|
206
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
207
|
+
&& SS__namespace.startsWith(response.code, "3")) {
|
|
187
208
|
return EE__namespace.right("response", response);
|
|
188
209
|
}
|
|
189
210
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -191,7 +212,9 @@ class PromiseRequest extends Promise {
|
|
|
191
212
|
}
|
|
192
213
|
iWantClientErrorResponse() {
|
|
193
214
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
194
|
-
if (
|
|
215
|
+
if ((response.predicted === true
|
|
216
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
217
|
+
&& SS__namespace.startsWith(response.code, "4")) {
|
|
195
218
|
return EE__namespace.right("response", response);
|
|
196
219
|
}
|
|
197
220
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -199,7 +222,9 @@ class PromiseRequest extends Promise {
|
|
|
199
222
|
}
|
|
200
223
|
iWantServerErrorResponse() {
|
|
201
224
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
202
|
-
if (
|
|
225
|
+
if ((response.predicted === true
|
|
226
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
227
|
+
&& SS__namespace.startsWith(response.code, "5")) {
|
|
203
228
|
return EE__namespace.right("response", response);
|
|
204
229
|
}
|
|
205
230
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -207,7 +232,20 @@ class PromiseRequest extends Promise {
|
|
|
207
232
|
}
|
|
208
233
|
iWantExpectedResponse() {
|
|
209
234
|
return this.then(EE__namespace.whenIsRight((response) => {
|
|
210
|
-
if (
|
|
235
|
+
if ((response.predicted === true
|
|
236
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
237
|
+
&& (SS__namespace.startsWith(response.code, "2")
|
|
238
|
+
|| SS__namespace.startsWith(response.code, "4"))) {
|
|
239
|
+
return EE__namespace.right("response", response);
|
|
240
|
+
}
|
|
241
|
+
return EE__namespace.left("unexpect-response", response);
|
|
242
|
+
}));
|
|
243
|
+
}
|
|
244
|
+
iSelectExpectedResponseByInformation(selector) {
|
|
245
|
+
return this.then(EE__namespace.whenIsRight((response) => {
|
|
246
|
+
if ((response.predicted === true
|
|
247
|
+
|| response.requestParams.disabledPredicateMode === true)
|
|
248
|
+
&& selector[(response.information ?? "")] === true) {
|
|
211
249
|
return EE__namespace.right("response", response);
|
|
212
250
|
}
|
|
213
251
|
return EE__namespace.left("unexpect-response", response);
|
|
@@ -293,6 +331,16 @@ class PromiseRequest extends Promise {
|
|
|
293
331
|
throw new unexpectedResponseError.UnexpectedResponseError(utils.unwrap(maybeResponse));
|
|
294
332
|
});
|
|
295
333
|
}
|
|
334
|
+
iSelectExpectedResponseByInformationOrThrow(selector) {
|
|
335
|
+
return this
|
|
336
|
+
.iSelectExpectedResponseByInformation(selector)
|
|
337
|
+
.then((maybeResponse) => {
|
|
338
|
+
if (EE__namespace.isRight(maybeResponse)) {
|
|
339
|
+
return utils.unwrap(maybeResponse);
|
|
340
|
+
}
|
|
341
|
+
throw new unexpectedResponseError.UnexpectedResponseError(utils.unwrap(maybeResponse));
|
|
342
|
+
});
|
|
343
|
+
}
|
|
296
344
|
static get [Symbol.species]() {
|
|
297
345
|
return Promise;
|
|
298
346
|
}
|
|
@@ -326,28 +374,37 @@ class PromiseRequest extends Promise {
|
|
|
326
374
|
}
|
|
327
375
|
}
|
|
328
376
|
}
|
|
329
|
-
|
|
377
|
+
const fetchUrl = `${requestParams.baseUrl}${url}`;
|
|
378
|
+
const fetchInitParams = {
|
|
330
379
|
...requestParams.initParams,
|
|
331
380
|
headers: headers,
|
|
332
381
|
method: requestParams.method,
|
|
333
382
|
body: body,
|
|
334
|
-
|
|
383
|
+
signal: requestParams.abortController.signal,
|
|
384
|
+
};
|
|
385
|
+
return fetch(fetchUrl, fetchInitParams)
|
|
335
386
|
.then((response) => getBody.getBody(response)
|
|
336
|
-
.then((body) =>
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
387
|
+
.then((body) => {
|
|
388
|
+
const clientResponse = {
|
|
389
|
+
body,
|
|
390
|
+
information: response.headers.get(requestParams.informationHeaderKey) ?? undefined,
|
|
391
|
+
code: response.status.toString(),
|
|
392
|
+
ok: (response.status < 500)
|
|
393
|
+
? response.ok
|
|
394
|
+
: null,
|
|
395
|
+
headers: response.headers,
|
|
396
|
+
type: response.type,
|
|
397
|
+
url: response.url,
|
|
398
|
+
redirected: response.redirected,
|
|
399
|
+
raw: response,
|
|
400
|
+
requestParams,
|
|
401
|
+
predicted: response.headers.get(requestParams.predictedHeaderKey) !== null,
|
|
402
|
+
};
|
|
403
|
+
if (response.headers.get("content-type")?.includes("text/event-stream")) {
|
|
404
|
+
return EE__namespace.right("response", serverSentEvents.makeClientEventsResponse(clientResponse, fetchUrl, fetchInitParams));
|
|
405
|
+
}
|
|
406
|
+
return EE__namespace.right("response", clientResponse);
|
|
407
|
+
}))
|
|
351
408
|
.catch((error) => EE__namespace.left("request-error", {
|
|
352
409
|
error,
|
|
353
410
|
requestParams,
|