@bleedingdev/modern-js-create-request 3.8.3-ultramodern.1 → 3.8.3-ultramodern.3
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/cjs/requestFactory.js +39 -22
- package/dist/cjs/transport.js +12 -4
- package/dist/cjs/utiles.js +1 -1
- package/dist/esm/requestFactory.mjs +39 -22
- package/dist/esm/transport.mjs +12 -4
- package/dist/esm/utiles.mjs +1 -1
- package/dist/esm-node/requestFactory.mjs +39 -22
- package/dist/esm-node/transport.mjs +12 -4
- package/dist/esm-node/utiles.mjs +1 -1
- package/package.json +18 -8
|
@@ -81,8 +81,9 @@ const createRequestFactory = (environment)=>{
|
|
|
81
81
|
const protectedIdentityHeaders = (identityBinding?.protectedHeaders || external_types_js_namespaceObject.BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS).map((header)=>header.toLowerCase());
|
|
82
82
|
const targetAllowedHeaders = realAllowedHeaders.get(requestId) || [];
|
|
83
83
|
const forwardedHeaders = {};
|
|
84
|
-
if (isServerTarget) {
|
|
85
|
-
|
|
84
|
+
if (isServerTarget) for (const key of targetAllowedHeaders){
|
|
85
|
+
const incomingValue = (0, external_policyCore_js_namespaceObject.readHeader)(incomingHeaders, key);
|
|
86
|
+
if (void 0 !== incomingValue) (0, external_policyCore_js_namespaceObject.writeHeader)(forwardedHeaders, key, incomingValue);
|
|
86
87
|
}
|
|
87
88
|
if (identityBindingEnabled) {
|
|
88
89
|
const derivedIdentityHeaders = {};
|
|
@@ -134,21 +135,19 @@ const createRequestFactory = (environment)=>{
|
|
|
134
135
|
...forwardedHeaders
|
|
135
136
|
}
|
|
136
137
|
});
|
|
137
|
-
if (resolvedHeaders && 'object' == typeof resolvedHeaders) {
|
|
138
|
-
|
|
138
|
+
if (resolvedHeaders && 'object' == typeof resolvedHeaders) for (const key of targetAllowedHeaders){
|
|
139
|
+
const resolvedValue = (0, external_policyCore_js_namespaceObject.readHeader)(resolvedHeaders, key);
|
|
140
|
+
if (void 0 !== resolvedValue) {
|
|
139
141
|
if (identityBindingEnabled && protectedIdentityHeaders.includes(key.toLowerCase())) {
|
|
140
|
-
(0, external_policyCore_js_namespaceObject.writeHeader)(forwardedHeaders, key.toLowerCase(),
|
|
142
|
+
(0, external_policyCore_js_namespaceObject.writeHeader)(forwardedHeaders, key.toLowerCase(), resolvedValue);
|
|
141
143
|
continue;
|
|
142
144
|
}
|
|
143
|
-
forwardedHeaders
|
|
145
|
+
(0, external_policyCore_js_namespaceObject.writeHeader)(forwardedHeaders, key, resolvedValue);
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
148
|
}
|
|
147
149
|
}
|
|
148
|
-
if (isServerTarget)
|
|
149
|
-
...headers,
|
|
150
|
-
...forwardedHeaders
|
|
151
|
-
};
|
|
150
|
+
if (isServerTarget) for (const [header, value] of Object.entries(forwardedHeaders))(0, external_policyCore_js_namespaceObject.writeHeader)(headers, header, value);
|
|
152
151
|
return headers;
|
|
153
152
|
};
|
|
154
153
|
const configure = (options)=>{
|
|
@@ -157,6 +156,21 @@ const createRequestFactory = (environment)=>{
|
|
|
157
156
|
if ('default' !== requestId && !setDomain && !hasExistingDomain) throw new external_policyCore_js_namespaceObject.ProducerDomainNotConfiguredError(requestId);
|
|
158
157
|
let configuredRequest = request || environment.originFetch;
|
|
159
158
|
if (interceptor && !request) configuredRequest = interceptor(environment.getFetch());
|
|
159
|
+
let resolvedDomain;
|
|
160
|
+
if (setDomain) {
|
|
161
|
+
resolvedDomain = setDomain({
|
|
162
|
+
target: environment.target,
|
|
163
|
+
requestId
|
|
164
|
+
});
|
|
165
|
+
if ('default' !== requestId && (0, external_policyCore_js_namespaceObject.isEmptyDomain)(resolvedDomain)) throw new external_policyCore_js_namespaceObject.ProducerDomainNotConfiguredError(requestId);
|
|
166
|
+
}
|
|
167
|
+
realAllowedHeaders.delete(requestId);
|
|
168
|
+
realResolveHeaders.delete(requestId);
|
|
169
|
+
realTransportResilience.delete(requestId);
|
|
170
|
+
realIdentityBinding.delete(requestId);
|
|
171
|
+
realOperationContract.delete(requestId);
|
|
172
|
+
realRequireEnvelope.delete(requestId);
|
|
173
|
+
realAllowCrossOriginEnvelope.delete(requestId);
|
|
160
174
|
if (Array.isArray(allowedHeaders)) realAllowedHeaders.set(requestId, allowedHeaders);
|
|
161
175
|
if (isServerTarget && 'function' == typeof resolveHeaders) realResolveHeaders.set(requestId, resolveHeaders);
|
|
162
176
|
if (transport && 'object' == typeof transport) realTransportResilience.set(requestId, transport);
|
|
@@ -164,14 +178,7 @@ const createRequestFactory = (environment)=>{
|
|
|
164
178
|
if (operationContract && 'object' == typeof operationContract) realOperationContract.set(requestId, operationContract);
|
|
165
179
|
if ('boolean' == typeof requireEnvelope) realRequireEnvelope.set(requestId, requireEnvelope);
|
|
166
180
|
if ('boolean' == typeof allowCrossOriginEnvelope || 'function' == typeof allowCrossOriginEnvelope) realAllowCrossOriginEnvelope.set(requestId, allowCrossOriginEnvelope);
|
|
167
|
-
if (
|
|
168
|
-
const resolvedDomain = setDomain({
|
|
169
|
-
target: environment.target,
|
|
170
|
-
requestId
|
|
171
|
-
});
|
|
172
|
-
if ('default' !== requestId && (0, external_policyCore_js_namespaceObject.isEmptyDomain)(resolvedDomain)) throw new external_policyCore_js_namespaceObject.ProducerDomainNotConfiguredError(requestId);
|
|
173
|
-
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
174
|
-
}
|
|
181
|
+
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
175
182
|
realRequest.set(requestId, configuredRequest);
|
|
176
183
|
};
|
|
177
184
|
const createRequest = (...args)=>{
|
|
@@ -208,6 +215,7 @@ const createRequestFactory = (environment)=>{
|
|
|
208
215
|
headers = {
|
|
209
216
|
'Content-Type': 'application/json'
|
|
210
217
|
};
|
|
218
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
211
219
|
} else {
|
|
212
220
|
const payload = 'object' == typeof senderArgs[senderArgs.length - 1] ? senderArgs[senderArgs.length - 1] : {};
|
|
213
221
|
payload.params = payload.params || {};
|
|
@@ -282,7 +290,7 @@ const createRequestFactory = (environment)=>{
|
|
|
282
290
|
const sender = (...args)=>{
|
|
283
291
|
const fetcher = (0, external_policyCore_js_namespaceObject.resolveConfiguredRequest)(realRequest, requestId, environment.originFetch);
|
|
284
292
|
const { body, headers: uploadHeaders, params } = (0, external_utiles_js_namespaceObject.getUploadPayload)(args);
|
|
285
|
-
|
|
293
|
+
let headers = {
|
|
286
294
|
...uploadHeaders
|
|
287
295
|
};
|
|
288
296
|
const finalPath = getUploadPath ? getUploadPath(params) : path;
|
|
@@ -293,12 +301,21 @@ const createRequestFactory = (environment)=>{
|
|
|
293
301
|
path: finalPath
|
|
294
302
|
});
|
|
295
303
|
const incomingHeaders = environment.readIncomingHeaders();
|
|
304
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
296
305
|
attachEnvelopeHeaderIfRequired(headers, requestId, finalURL, incomingHeaders);
|
|
297
306
|
attachSecuredOperationHeaders(headers, requestId, 'POST', path, operationContext);
|
|
298
|
-
return
|
|
307
|
+
return (0, external_transport_js_namespaceObject.executeWithResilience)({
|
|
308
|
+
requestId,
|
|
309
|
+
target: environment.target,
|
|
299
310
|
method: 'POST',
|
|
300
|
-
|
|
301
|
-
|
|
311
|
+
url: finalURL,
|
|
312
|
+
init: {
|
|
313
|
+
method: 'POST',
|
|
314
|
+
body,
|
|
315
|
+
headers
|
|
316
|
+
},
|
|
317
|
+
fetcher: fetcher,
|
|
318
|
+
transport: realTransportResilience.get(requestId)
|
|
302
319
|
});
|
|
303
320
|
};
|
|
304
321
|
return sender;
|
package/dist/cjs/transport.js
CHANGED
|
@@ -52,9 +52,12 @@ const createTimeoutError = (timeoutMs)=>{
|
|
|
52
52
|
error.name = 'TimeoutError';
|
|
53
53
|
return error;
|
|
54
54
|
};
|
|
55
|
+
const unrefTimer = (timer)=>{
|
|
56
|
+
if ('object' == typeof timer && null !== timer && 'unref' in timer && 'function' == typeof timer.unref) timer.unref();
|
|
57
|
+
};
|
|
55
58
|
const wait = (ms)=>new Promise((resolve)=>{
|
|
56
59
|
const timer = setTimeout(()=>resolve(), ms);
|
|
57
|
-
|
|
60
|
+
unrefTimer(timer);
|
|
58
61
|
});
|
|
59
62
|
const toStatusCode = (error)=>{
|
|
60
63
|
if (!error || 'object' != typeof error) return;
|
|
@@ -121,7 +124,7 @@ const withTimeout = async (promise, timeoutMs, signalBuilder)=>{
|
|
|
121
124
|
if (controller) controller.abort();
|
|
122
125
|
rejectTimeout?.(createTimeoutError(timeoutMs));
|
|
123
126
|
}, timeoutMs);
|
|
124
|
-
|
|
127
|
+
unrefTimer(timer);
|
|
125
128
|
try {
|
|
126
129
|
const result = await Promise.race([
|
|
127
130
|
promise,
|
|
@@ -149,9 +152,14 @@ const executeWithResilience = async ({ requestId, target, method, url, init, fet
|
|
|
149
152
|
const canUseAbortController = "u" > typeof AbortController;
|
|
150
153
|
let controller;
|
|
151
154
|
if (timeoutMs && canUseAbortController) controller = new AbortController();
|
|
152
|
-
const
|
|
155
|
+
const callerSignal = init.signal;
|
|
156
|
+
const requestSignal = controller ? callerSignal && !callerSignal.aborted ? AbortSignal.any([
|
|
157
|
+
callerSignal,
|
|
158
|
+
controller.signal
|
|
159
|
+
]) : callerSignal || controller.signal : callerSignal;
|
|
160
|
+
const nextInit = requestSignal ? {
|
|
153
161
|
...init,
|
|
154
|
-
signal:
|
|
162
|
+
signal: requestSignal
|
|
155
163
|
} : init;
|
|
156
164
|
try {
|
|
157
165
|
const { result } = await withTimeout(fetcher(url, nextInit), timeoutMs, ()=>controller);
|
package/dist/cjs/utiles.js
CHANGED
|
@@ -32,7 +32,7 @@ const getUploadPayload = (args)=>{
|
|
|
32
32
|
const files = payload.files;
|
|
33
33
|
if (!files) throw new Error('no files');
|
|
34
34
|
const formdata = new FormData();
|
|
35
|
-
for (const [key, value] of Object.entries(files))if (value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
35
|
+
for (const [key, value] of Object.entries(files))if ("u" > typeof FileList && value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
36
36
|
const file = value.item(i);
|
|
37
37
|
if (file) formdata.append(key, file);
|
|
38
38
|
}
|
|
@@ -49,8 +49,9 @@ const createRequestFactory = (environment)=>{
|
|
|
49
49
|
const protectedIdentityHeaders = (identityBinding?.protectedHeaders || BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS).map((header)=>header.toLowerCase());
|
|
50
50
|
const targetAllowedHeaders = realAllowedHeaders.get(requestId) || [];
|
|
51
51
|
const forwardedHeaders = {};
|
|
52
|
-
if (isServerTarget) {
|
|
53
|
-
|
|
52
|
+
if (isServerTarget) for (const key of targetAllowedHeaders){
|
|
53
|
+
const incomingValue = readHeader(incomingHeaders, key);
|
|
54
|
+
if (void 0 !== incomingValue) writeHeader(forwardedHeaders, key, incomingValue);
|
|
54
55
|
}
|
|
55
56
|
if (identityBindingEnabled) {
|
|
56
57
|
const derivedIdentityHeaders = {};
|
|
@@ -101,21 +102,19 @@ const createRequestFactory = (environment)=>{
|
|
|
101
102
|
...forwardedHeaders
|
|
102
103
|
}
|
|
103
104
|
});
|
|
104
|
-
if (resolvedHeaders && 'object' == typeof resolvedHeaders) {
|
|
105
|
-
|
|
105
|
+
if (resolvedHeaders && 'object' == typeof resolvedHeaders) for (const key of targetAllowedHeaders){
|
|
106
|
+
const resolvedValue = readHeader(resolvedHeaders, key);
|
|
107
|
+
if (void 0 !== resolvedValue) {
|
|
106
108
|
if (identityBindingEnabled && protectedIdentityHeaders.includes(key.toLowerCase())) {
|
|
107
|
-
writeHeader(forwardedHeaders, key.toLowerCase(),
|
|
109
|
+
writeHeader(forwardedHeaders, key.toLowerCase(), resolvedValue);
|
|
108
110
|
continue;
|
|
109
111
|
}
|
|
110
|
-
forwardedHeaders
|
|
112
|
+
writeHeader(forwardedHeaders, key, resolvedValue);
|
|
111
113
|
}
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
|
-
if (isServerTarget)
|
|
116
|
-
...headers,
|
|
117
|
-
...forwardedHeaders
|
|
118
|
-
};
|
|
117
|
+
if (isServerTarget) for (const [header, value] of Object.entries(forwardedHeaders))writeHeader(headers, header, value);
|
|
119
118
|
return headers;
|
|
120
119
|
};
|
|
121
120
|
const configure = (options)=>{
|
|
@@ -124,6 +123,21 @@ const createRequestFactory = (environment)=>{
|
|
|
124
123
|
if ('default' !== requestId && !setDomain && !hasExistingDomain) throw new ProducerDomainNotConfiguredError(requestId);
|
|
125
124
|
let configuredRequest = request || environment.originFetch;
|
|
126
125
|
if (interceptor && !request) configuredRequest = interceptor(environment.getFetch());
|
|
126
|
+
let resolvedDomain;
|
|
127
|
+
if (setDomain) {
|
|
128
|
+
resolvedDomain = setDomain({
|
|
129
|
+
target: environment.target,
|
|
130
|
+
requestId
|
|
131
|
+
});
|
|
132
|
+
if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
|
|
133
|
+
}
|
|
134
|
+
realAllowedHeaders.delete(requestId);
|
|
135
|
+
realResolveHeaders.delete(requestId);
|
|
136
|
+
realTransportResilience.delete(requestId);
|
|
137
|
+
realIdentityBinding.delete(requestId);
|
|
138
|
+
realOperationContract.delete(requestId);
|
|
139
|
+
realRequireEnvelope.delete(requestId);
|
|
140
|
+
realAllowCrossOriginEnvelope.delete(requestId);
|
|
127
141
|
if (Array.isArray(allowedHeaders)) realAllowedHeaders.set(requestId, allowedHeaders);
|
|
128
142
|
if (isServerTarget && 'function' == typeof resolveHeaders) realResolveHeaders.set(requestId, resolveHeaders);
|
|
129
143
|
if (transport && 'object' == typeof transport) realTransportResilience.set(requestId, transport);
|
|
@@ -131,14 +145,7 @@ const createRequestFactory = (environment)=>{
|
|
|
131
145
|
if (operationContract && 'object' == typeof operationContract) realOperationContract.set(requestId, operationContract);
|
|
132
146
|
if ('boolean' == typeof requireEnvelope) realRequireEnvelope.set(requestId, requireEnvelope);
|
|
133
147
|
if ('boolean' == typeof allowCrossOriginEnvelope || 'function' == typeof allowCrossOriginEnvelope) realAllowCrossOriginEnvelope.set(requestId, allowCrossOriginEnvelope);
|
|
134
|
-
if (
|
|
135
|
-
const resolvedDomain = setDomain({
|
|
136
|
-
target: environment.target,
|
|
137
|
-
requestId
|
|
138
|
-
});
|
|
139
|
-
if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
|
|
140
|
-
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
141
|
-
}
|
|
148
|
+
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
142
149
|
realRequest.set(requestId, configuredRequest);
|
|
143
150
|
};
|
|
144
151
|
const createRequest = (...args)=>{
|
|
@@ -175,6 +182,7 @@ const createRequestFactory = (environment)=>{
|
|
|
175
182
|
headers = {
|
|
176
183
|
'Content-Type': 'application/json'
|
|
177
184
|
};
|
|
185
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
178
186
|
} else {
|
|
179
187
|
const payload = 'object' == typeof senderArgs[senderArgs.length - 1] ? senderArgs[senderArgs.length - 1] : {};
|
|
180
188
|
payload.params = payload.params || {};
|
|
@@ -249,7 +257,7 @@ const createRequestFactory = (environment)=>{
|
|
|
249
257
|
const sender = (...args)=>{
|
|
250
258
|
const fetcher = resolveConfiguredRequest(realRequest, requestId, environment.originFetch);
|
|
251
259
|
const { body, headers: uploadHeaders, params } = getUploadPayload(args);
|
|
252
|
-
|
|
260
|
+
let headers = {
|
|
253
261
|
...uploadHeaders
|
|
254
262
|
};
|
|
255
263
|
const finalPath = getUploadPath ? getUploadPath(params) : path;
|
|
@@ -260,12 +268,21 @@ const createRequestFactory = (environment)=>{
|
|
|
260
268
|
path: finalPath
|
|
261
269
|
});
|
|
262
270
|
const incomingHeaders = environment.readIncomingHeaders();
|
|
271
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
263
272
|
attachEnvelopeHeaderIfRequired(headers, requestId, finalURL, incomingHeaders);
|
|
264
273
|
attachSecuredOperationHeaders(headers, requestId, 'POST', path, operationContext);
|
|
265
|
-
return
|
|
274
|
+
return executeWithResilience({
|
|
275
|
+
requestId,
|
|
276
|
+
target: environment.target,
|
|
266
277
|
method: 'POST',
|
|
267
|
-
|
|
268
|
-
|
|
278
|
+
url: finalURL,
|
|
279
|
+
init: {
|
|
280
|
+
method: 'POST',
|
|
281
|
+
body,
|
|
282
|
+
headers
|
|
283
|
+
},
|
|
284
|
+
fetcher: fetcher,
|
|
285
|
+
transport: realTransportResilience.get(requestId)
|
|
269
286
|
});
|
|
270
287
|
};
|
|
271
288
|
return sender;
|
package/dist/esm/transport.mjs
CHANGED
|
@@ -23,9 +23,12 @@ const createTimeoutError = (timeoutMs)=>{
|
|
|
23
23
|
error.name = 'TimeoutError';
|
|
24
24
|
return error;
|
|
25
25
|
};
|
|
26
|
+
const unrefTimer = (timer)=>{
|
|
27
|
+
if ('object' == typeof timer && null !== timer && 'unref' in timer && 'function' == typeof timer.unref) timer.unref();
|
|
28
|
+
};
|
|
26
29
|
const wait = (ms)=>new Promise((resolve)=>{
|
|
27
30
|
const timer = setTimeout(()=>resolve(), ms);
|
|
28
|
-
|
|
31
|
+
unrefTimer(timer);
|
|
29
32
|
});
|
|
30
33
|
const toStatusCode = (error)=>{
|
|
31
34
|
if (!error || 'object' != typeof error) return;
|
|
@@ -92,7 +95,7 @@ const withTimeout = async (promise, timeoutMs, signalBuilder)=>{
|
|
|
92
95
|
if (controller) controller.abort();
|
|
93
96
|
rejectTimeout?.(createTimeoutError(timeoutMs));
|
|
94
97
|
}, timeoutMs);
|
|
95
|
-
|
|
98
|
+
unrefTimer(timer);
|
|
96
99
|
try {
|
|
97
100
|
const result = await Promise.race([
|
|
98
101
|
promise,
|
|
@@ -120,9 +123,14 @@ const executeWithResilience = async ({ requestId, target, method, url, init, fet
|
|
|
120
123
|
const canUseAbortController = "u" > typeof AbortController;
|
|
121
124
|
let controller;
|
|
122
125
|
if (timeoutMs && canUseAbortController) controller = new AbortController();
|
|
123
|
-
const
|
|
126
|
+
const callerSignal = init.signal;
|
|
127
|
+
const requestSignal = controller ? callerSignal && !callerSignal.aborted ? AbortSignal.any([
|
|
128
|
+
callerSignal,
|
|
129
|
+
controller.signal
|
|
130
|
+
]) : callerSignal || controller.signal : callerSignal;
|
|
131
|
+
const nextInit = requestSignal ? {
|
|
124
132
|
...init,
|
|
125
|
-
signal:
|
|
133
|
+
signal: requestSignal
|
|
126
134
|
} : init;
|
|
127
135
|
try {
|
|
128
136
|
const { result } = await withTimeout(fetcher(url, nextInit), timeoutMs, ()=>controller);
|
package/dist/esm/utiles.mjs
CHANGED
|
@@ -3,7 +3,7 @@ const getUploadPayload = (args)=>{
|
|
|
3
3
|
const files = payload.files;
|
|
4
4
|
if (!files) throw new Error('no files');
|
|
5
5
|
const formdata = new FormData();
|
|
6
|
-
for (const [key, value] of Object.entries(files))if (value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
6
|
+
for (const [key, value] of Object.entries(files))if ("u" > typeof FileList && value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
7
7
|
const file = value.item(i);
|
|
8
8
|
if (file) formdata.append(key, file);
|
|
9
9
|
}
|
|
@@ -50,8 +50,9 @@ const createRequestFactory = (environment)=>{
|
|
|
50
50
|
const protectedIdentityHeaders = (identityBinding?.protectedHeaders || BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS).map((header)=>header.toLowerCase());
|
|
51
51
|
const targetAllowedHeaders = realAllowedHeaders.get(requestId) || [];
|
|
52
52
|
const forwardedHeaders = {};
|
|
53
|
-
if (isServerTarget) {
|
|
54
|
-
|
|
53
|
+
if (isServerTarget) for (const key of targetAllowedHeaders){
|
|
54
|
+
const incomingValue = readHeader(incomingHeaders, key);
|
|
55
|
+
if (void 0 !== incomingValue) writeHeader(forwardedHeaders, key, incomingValue);
|
|
55
56
|
}
|
|
56
57
|
if (identityBindingEnabled) {
|
|
57
58
|
const derivedIdentityHeaders = {};
|
|
@@ -102,21 +103,19 @@ const createRequestFactory = (environment)=>{
|
|
|
102
103
|
...forwardedHeaders
|
|
103
104
|
}
|
|
104
105
|
});
|
|
105
|
-
if (resolvedHeaders && 'object' == typeof resolvedHeaders) {
|
|
106
|
-
|
|
106
|
+
if (resolvedHeaders && 'object' == typeof resolvedHeaders) for (const key of targetAllowedHeaders){
|
|
107
|
+
const resolvedValue = readHeader(resolvedHeaders, key);
|
|
108
|
+
if (void 0 !== resolvedValue) {
|
|
107
109
|
if (identityBindingEnabled && protectedIdentityHeaders.includes(key.toLowerCase())) {
|
|
108
|
-
writeHeader(forwardedHeaders, key.toLowerCase(),
|
|
110
|
+
writeHeader(forwardedHeaders, key.toLowerCase(), resolvedValue);
|
|
109
111
|
continue;
|
|
110
112
|
}
|
|
111
|
-
forwardedHeaders
|
|
113
|
+
writeHeader(forwardedHeaders, key, resolvedValue);
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
}
|
|
115
117
|
}
|
|
116
|
-
if (isServerTarget)
|
|
117
|
-
...headers,
|
|
118
|
-
...forwardedHeaders
|
|
119
|
-
};
|
|
118
|
+
if (isServerTarget) for (const [header, value] of Object.entries(forwardedHeaders))writeHeader(headers, header, value);
|
|
120
119
|
return headers;
|
|
121
120
|
};
|
|
122
121
|
const configure = (options)=>{
|
|
@@ -125,6 +124,21 @@ const createRequestFactory = (environment)=>{
|
|
|
125
124
|
if ('default' !== requestId && !setDomain && !hasExistingDomain) throw new ProducerDomainNotConfiguredError(requestId);
|
|
126
125
|
let configuredRequest = request || environment.originFetch;
|
|
127
126
|
if (interceptor && !request) configuredRequest = interceptor(environment.getFetch());
|
|
127
|
+
let resolvedDomain;
|
|
128
|
+
if (setDomain) {
|
|
129
|
+
resolvedDomain = setDomain({
|
|
130
|
+
target: environment.target,
|
|
131
|
+
requestId
|
|
132
|
+
});
|
|
133
|
+
if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
|
|
134
|
+
}
|
|
135
|
+
realAllowedHeaders.delete(requestId);
|
|
136
|
+
realResolveHeaders.delete(requestId);
|
|
137
|
+
realTransportResilience.delete(requestId);
|
|
138
|
+
realIdentityBinding.delete(requestId);
|
|
139
|
+
realOperationContract.delete(requestId);
|
|
140
|
+
realRequireEnvelope.delete(requestId);
|
|
141
|
+
realAllowCrossOriginEnvelope.delete(requestId);
|
|
128
142
|
if (Array.isArray(allowedHeaders)) realAllowedHeaders.set(requestId, allowedHeaders);
|
|
129
143
|
if (isServerTarget && 'function' == typeof resolveHeaders) realResolveHeaders.set(requestId, resolveHeaders);
|
|
130
144
|
if (transport && 'object' == typeof transport) realTransportResilience.set(requestId, transport);
|
|
@@ -132,14 +146,7 @@ const createRequestFactory = (environment)=>{
|
|
|
132
146
|
if (operationContract && 'object' == typeof operationContract) realOperationContract.set(requestId, operationContract);
|
|
133
147
|
if ('boolean' == typeof requireEnvelope) realRequireEnvelope.set(requestId, requireEnvelope);
|
|
134
148
|
if ('boolean' == typeof allowCrossOriginEnvelope || 'function' == typeof allowCrossOriginEnvelope) realAllowCrossOriginEnvelope.set(requestId, allowCrossOriginEnvelope);
|
|
135
|
-
if (
|
|
136
|
-
const resolvedDomain = setDomain({
|
|
137
|
-
target: environment.target,
|
|
138
|
-
requestId
|
|
139
|
-
});
|
|
140
|
-
if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
|
|
141
|
-
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
142
|
-
}
|
|
149
|
+
if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
|
|
143
150
|
realRequest.set(requestId, configuredRequest);
|
|
144
151
|
};
|
|
145
152
|
const createRequest = (...args)=>{
|
|
@@ -176,6 +183,7 @@ const createRequestFactory = (environment)=>{
|
|
|
176
183
|
headers = {
|
|
177
184
|
'Content-Type': 'application/json'
|
|
178
185
|
};
|
|
186
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
179
187
|
} else {
|
|
180
188
|
const payload = 'object' == typeof senderArgs[senderArgs.length - 1] ? senderArgs[senderArgs.length - 1] : {};
|
|
181
189
|
payload.params = payload.params || {};
|
|
@@ -250,7 +258,7 @@ const createRequestFactory = (environment)=>{
|
|
|
250
258
|
const sender = (...args)=>{
|
|
251
259
|
const fetcher = resolveConfiguredRequest(realRequest, requestId, environment.originFetch);
|
|
252
260
|
const { body, headers: uploadHeaders, params } = getUploadPayload(args);
|
|
253
|
-
|
|
261
|
+
let headers = {
|
|
254
262
|
...uploadHeaders
|
|
255
263
|
};
|
|
256
264
|
const finalPath = getUploadPath ? getUploadPath(params) : path;
|
|
@@ -261,12 +269,21 @@ const createRequestFactory = (environment)=>{
|
|
|
261
269
|
path: finalPath
|
|
262
270
|
});
|
|
263
271
|
const incomingHeaders = environment.readIncomingHeaders();
|
|
272
|
+
headers = applyIdentityAndForwardedHeaders(headers, requestId, incomingHeaders);
|
|
264
273
|
attachEnvelopeHeaderIfRequired(headers, requestId, finalURL, incomingHeaders);
|
|
265
274
|
attachSecuredOperationHeaders(headers, requestId, 'POST', path, operationContext);
|
|
266
|
-
return
|
|
275
|
+
return executeWithResilience({
|
|
276
|
+
requestId,
|
|
277
|
+
target: environment.target,
|
|
267
278
|
method: 'POST',
|
|
268
|
-
|
|
269
|
-
|
|
279
|
+
url: finalURL,
|
|
280
|
+
init: {
|
|
281
|
+
method: 'POST',
|
|
282
|
+
body,
|
|
283
|
+
headers
|
|
284
|
+
},
|
|
285
|
+
fetcher: fetcher,
|
|
286
|
+
transport: realTransportResilience.get(requestId)
|
|
270
287
|
});
|
|
271
288
|
};
|
|
272
289
|
return sender;
|
|
@@ -24,9 +24,12 @@ const createTimeoutError = (timeoutMs)=>{
|
|
|
24
24
|
error.name = 'TimeoutError';
|
|
25
25
|
return error;
|
|
26
26
|
};
|
|
27
|
+
const unrefTimer = (timer)=>{
|
|
28
|
+
if ('object' == typeof timer && null !== timer && 'unref' in timer && 'function' == typeof timer.unref) timer.unref();
|
|
29
|
+
};
|
|
27
30
|
const wait = (ms)=>new Promise((resolve)=>{
|
|
28
31
|
const timer = setTimeout(()=>resolve(), ms);
|
|
29
|
-
|
|
32
|
+
unrefTimer(timer);
|
|
30
33
|
});
|
|
31
34
|
const toStatusCode = (error)=>{
|
|
32
35
|
if (!error || 'object' != typeof error) return;
|
|
@@ -93,7 +96,7 @@ const withTimeout = async (promise, timeoutMs, signalBuilder)=>{
|
|
|
93
96
|
if (controller) controller.abort();
|
|
94
97
|
rejectTimeout?.(createTimeoutError(timeoutMs));
|
|
95
98
|
}, timeoutMs);
|
|
96
|
-
|
|
99
|
+
unrefTimer(timer);
|
|
97
100
|
try {
|
|
98
101
|
const result = await Promise.race([
|
|
99
102
|
promise,
|
|
@@ -121,9 +124,14 @@ const executeWithResilience = async ({ requestId, target, method, url, init, fet
|
|
|
121
124
|
const canUseAbortController = "u" > typeof AbortController;
|
|
122
125
|
let controller;
|
|
123
126
|
if (timeoutMs && canUseAbortController) controller = new AbortController();
|
|
124
|
-
const
|
|
127
|
+
const callerSignal = init.signal;
|
|
128
|
+
const requestSignal = controller ? callerSignal && !callerSignal.aborted ? AbortSignal.any([
|
|
129
|
+
callerSignal,
|
|
130
|
+
controller.signal
|
|
131
|
+
]) : callerSignal || controller.signal : callerSignal;
|
|
132
|
+
const nextInit = requestSignal ? {
|
|
125
133
|
...init,
|
|
126
|
-
signal:
|
|
134
|
+
signal: requestSignal
|
|
127
135
|
} : init;
|
|
128
136
|
try {
|
|
129
137
|
const { result } = await withTimeout(fetcher(url, nextInit), timeoutMs, ()=>controller);
|
package/dist/esm-node/utiles.mjs
CHANGED
|
@@ -4,7 +4,7 @@ const getUploadPayload = (args)=>{
|
|
|
4
4
|
const files = payload.files;
|
|
5
5
|
if (!files) throw new Error('no files');
|
|
6
6
|
const formdata = new FormData();
|
|
7
|
-
for (const [key, value] of Object.entries(files))if (value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
7
|
+
for (const [key, value] of Object.entries(files))if ("u" > typeof FileList && value instanceof FileList) for(let i = 0; i < value.length; i++){
|
|
8
8
|
const file = value.item(i);
|
|
9
9
|
if (file) formdata.append(key, file);
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.8.3-ultramodern.
|
|
20
|
+
"version": "3.8.3-ultramodern.3",
|
|
21
21
|
"modern:source": "./src/node.ts",
|
|
22
22
|
"types": "./dist/types/browser.d.ts",
|
|
23
23
|
"main": "./dist/cjs/node.js",
|
|
@@ -28,17 +28,27 @@
|
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
30
30
|
"types": "./dist/types/browser.d.ts",
|
|
31
|
-
"node":
|
|
31
|
+
"node": {
|
|
32
|
+
"import": "./dist/esm-node/node.mjs",
|
|
33
|
+
"require": "./dist/cjs/node.js"
|
|
34
|
+
},
|
|
35
|
+
"import": "./dist/esm/browser.mjs",
|
|
36
|
+
"require": "./dist/cjs/browser.js",
|
|
32
37
|
"default": "./dist/esm/browser.mjs"
|
|
33
38
|
},
|
|
34
39
|
"./client": {
|
|
35
40
|
"types": "./dist/types/browser.d.ts",
|
|
41
|
+
"import": "./dist/esm/browser.mjs",
|
|
42
|
+
"require": "./dist/cjs/browser.js",
|
|
36
43
|
"default": "./dist/esm/browser.mjs"
|
|
37
44
|
},
|
|
38
45
|
"./server": {
|
|
39
46
|
"types": "./dist/types/node.d.ts",
|
|
40
|
-
"
|
|
41
|
-
|
|
47
|
+
"node": {
|
|
48
|
+
"import": "./dist/esm-node/node.mjs",
|
|
49
|
+
"require": "./dist/cjs/node.js"
|
|
50
|
+
},
|
|
51
|
+
"default": "./dist/cjs/node.js"
|
|
42
52
|
}
|
|
43
53
|
},
|
|
44
54
|
"typesVersions": {
|
|
@@ -55,15 +65,15 @@
|
|
|
55
65
|
}
|
|
56
66
|
},
|
|
57
67
|
"dependencies": {
|
|
58
|
-
"@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.8.3-ultramodern.
|
|
59
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.
|
|
68
|
+
"@modern-js/runtime-utils": "npm:@bleedingdev/modern-js-runtime-utils@3.8.3-ultramodern.3",
|
|
69
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.3-ultramodern.3",
|
|
60
70
|
"@swc/helpers": "^0.5.23",
|
|
61
71
|
"encoding": "^0.1.13",
|
|
62
72
|
"path-to-regexp": "^8.4.2",
|
|
63
73
|
"qs": "^6.15.3"
|
|
64
74
|
},
|
|
65
75
|
"devDependencies": {
|
|
66
|
-
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.3-ultramodern.
|
|
76
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.3-ultramodern.3",
|
|
67
77
|
"@rslib/core": "0.23.2",
|
|
68
78
|
"@scripts/rstest-config": "2.66.0",
|
|
69
79
|
"@types/node": "^26.2.0",
|
|
@@ -78,7 +88,7 @@
|
|
|
78
88
|
},
|
|
79
89
|
"scripts": {
|
|
80
90
|
"dev": "rslib build --watch",
|
|
81
|
-
"build": "rslib build
|
|
91
|
+
"build": "rslib build",
|
|
82
92
|
"test": "rstest --passWithNoTests"
|
|
83
93
|
}
|
|
84
94
|
}
|