@bleedingdev/modern-js-create-request 3.5.0-ultramodern.6 → 3.5.0-ultramodern.76

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.
@@ -1,219 +1,27 @@
1
1
  import "node:module";
2
- import { compile } from "path-to-regexp";
3
- import { stringify } from "qs";
4
2
  import { handleRes } from "./handleRes.mjs";
5
- import { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, TRACEPARENT_HEADER, attachOperationContextHeaders, buildEnvelopeHeaderValue, deleteHeader, extractPathParamNames, isEmptyDomain, isSecuredRequestId, parseTraceparentValue, readHeader, resolveConfiguredRequest, toOrigin, writeHeader } from "./policyCore.mjs";
6
- import { executeWithResilience } from "./transport.mjs";
7
- import { BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS, BFF_ENVELOPE_HEADER, BFF_OPERATION_CONTEXT_DETAIL_HEADER, BFF_OPERATION_CONTEXT_HEADER } from "./types.mjs";
8
- import { getUploadPayload } from "./utiles.mjs";
3
+ import { createRequestFactory } from "./requestFactory.mjs";
9
4
  export * from "./requestContext.mjs";
10
5
  export * from "./traceparent.mjs";
11
6
  export * from "./types.mjs";
12
- const realRequest = new Map();
13
- const realAllowedHeaders = new Map();
14
- const realRequireEnvelope = new Map();
15
- const realAllowCrossOriginEnvelope = new Map();
16
- const realTransportResilience = new Map();
17
- const realIdentityBinding = new Map();
18
- const realOperationContract = new Map();
19
- const domainMap = new Map();
20
- const OPERATION_CONTEXT_DETAIL_HEADER = BFF_OPERATION_CONTEXT_DETAIL_HEADER;
21
7
  const resolveBrowserOrigin = ()=>"u" > typeof window ? window.location.origin : void 0;
22
8
  const originFetch = (...params)=>{
23
9
  const [url, init] = params;
24
10
  if (init?.method?.toLowerCase() === 'get') init.body = void 0;
25
11
  return fetch(url, init).then(handleRes);
26
12
  };
27
- const attachEnvelopeHeaderIfRequired = (headers, requestId, finalURL)=>{
28
- const shouldRequireEnvelope = realRequireEnvelope.get(requestId) ?? isSecuredRequestId(requestId);
29
- if (!shouldRequireEnvelope) return;
30
- headers[BFF_ENVELOPE_HEADER] = buildEnvelopeHeaderValue({
31
- requestId,
32
- target: 'browser',
33
- sourceOrigin: resolveBrowserOrigin(),
34
- targetOrigin: toOrigin(finalURL),
35
- traceContext: parseTraceparentValue(readHeader(headers, TRACEPARENT_HEADER)),
36
- allowCrossOriginEnvelope: realAllowCrossOriginEnvelope.get(requestId)
37
- });
38
- };
39
- const attachSecuredOperationHeaders = (headers, requestId, method, path, operationContext)=>{
40
- if (!isSecuredRequestId(requestId)) return;
41
- attachOperationContextHeaders({
42
- headers,
43
- requestId,
44
- target: 'browser',
45
- method,
46
- path,
47
- operationContext,
48
- operationContract: realOperationContract.get(requestId),
49
- operationContextHeader: BFF_OPERATION_CONTEXT_HEADER,
50
- operationContextDetailHeader: OPERATION_CONTEXT_DETAIL_HEADER
51
- });
52
- };
53
- const configure = (options)=>{
54
- const { request, interceptor, allowedHeaders, transport, requireEnvelope, allowCrossOriginEnvelope, identityBinding, operationContract, setDomain, requestId = 'default' } = options;
55
- const hasExistingDomain = domainMap.has(requestId);
56
- if ('default' !== requestId && !setDomain && !hasExistingDomain) throw new ProducerDomainNotConfiguredError(requestId);
57
- let configuredRequest = request || originFetch;
58
- if (interceptor && !request) configuredRequest = interceptor(fetch);
59
- if (Array.isArray(allowedHeaders)) realAllowedHeaders.set(requestId, allowedHeaders);
60
- if (transport && 'object' == typeof transport) realTransportResilience.set(requestId, transport);
61
- if (identityBinding && 'object' == typeof identityBinding) realIdentityBinding.set(requestId, identityBinding);
62
- if (operationContract && 'object' == typeof operationContract) realOperationContract.set(requestId, operationContract);
63
- if ('boolean' == typeof requireEnvelope) realRequireEnvelope.set(requestId, requireEnvelope);
64
- if ('boolean' == typeof allowCrossOriginEnvelope || 'function' == typeof allowCrossOriginEnvelope) realAllowCrossOriginEnvelope.set(requestId, allowCrossOriginEnvelope);
65
- if (setDomain) {
66
- const resolvedDomain = setDomain({
67
- target: 'browser',
68
- requestId
69
- });
70
- if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
71
- if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
72
- }
73
- realRequest.set(requestId, configuredRequest);
74
- };
75
- const normalizeRequestOptions = (...args)=>{
76
- if ('object' == typeof args[0] && null !== args[0]) return args[0];
77
- const [path, method, port, httpMethodDecider, fetch1, requestId, operationContext] = args;
78
- return {
79
- path,
80
- method,
81
- port,
82
- httpMethodDecider,
83
- fetch: fetch1,
84
- requestId,
85
- operationContext
86
- };
87
- };
88
- const createRequest = (...args)=>{
89
- const { path, method, port, httpMethodDecider = 'functionName', fetch: fetch1 = originFetch, domain, requestId = 'default', operationContext } = normalizeRequestOptions(...args);
90
- const getFinalPath = compile(path, {
91
- encode: encodeURIComponent
92
- });
93
- const keyNames = extractPathParamNames(path);
94
- const sender = async (...args)=>{
95
- const fetcher = resolveConfiguredRequest(realRequest, requestId, fetch1);
96
- let body;
97
- let finalURL;
98
- let headers;
99
- if ('inputParams' === httpMethodDecider) {
100
- finalURL = path;
101
- body = JSON.stringify({
102
- args
103
- });
104
- headers = {
105
- 'Content-Type': 'application/json'
106
- };
107
- } else {
108
- const payload = 'object' == typeof args[args.length - 1] ? args[args.length - 1] : {};
109
- payload.params = payload.params || {};
110
- const requestParams = args[0];
111
- if ('object' == typeof requestParams && requestParams.params) {
112
- const { params } = requestParams;
113
- keyNames.forEach((keyName)=>{
114
- payload.params[keyName] = params[keyName];
115
- });
116
- } else keyNames.forEach((keyName, index)=>{
117
- payload.params[keyName] = args[index];
118
- });
119
- const finalPath = getFinalPath(payload.params);
120
- finalURL = payload.query ? `${finalPath}?${stringify(payload.query)}` : finalPath;
121
- headers = payload.headers ? {
122
- ...payload.headers
123
- } : {};
124
- const identityBinding = realIdentityBinding.get(requestId);
125
- const identityBindingEnabled = identityBinding?.enabled ?? isSecuredRequestId(requestId);
126
- const identityBindingStrict = identityBinding?.strict ?? isSecuredRequestId(requestId);
127
- const protectedIdentityHeaders = (identityBinding?.protectedHeaders || BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS).map((header)=>header.toLowerCase());
128
- if (identityBindingEnabled) {
129
- const derivedIdentityHeaders = {};
130
- const customDerivedHeaders = identityBinding?.deriveHeaders?.({
131
- requestId,
132
- target: 'browser',
133
- incomingHeaders: {},
134
- protectedHeaders: [
135
- ...protectedIdentityHeaders
136
- ]
137
- });
138
- if (customDerivedHeaders && 'object' == typeof customDerivedHeaders) for (const header of protectedIdentityHeaders){
139
- const customValue = readHeader(customDerivedHeaders, header);
140
- if (void 0 !== customValue) writeHeader(derivedIdentityHeaders, header, customValue);
141
- }
142
- for (const header of protectedIdentityHeaders){
143
- const attemptedValue = readHeader(headers, header);
144
- if (void 0 === attemptedValue) continue;
145
- const violation = {
146
- requestId,
147
- target: 'browser',
148
- header,
149
- attemptedValue,
150
- derivedValue: readHeader(derivedIdentityHeaders, header),
151
- reason: identityBindingStrict ? 'client_override_rejected' : 'client_override_blocked'
152
- };
153
- identityBinding?.onViolation?.(violation);
154
- if (identityBindingStrict) throw new IdentityBindingViolationError(violation);
155
- deleteHeader(headers, header);
156
- }
157
- Object.keys(derivedIdentityHeaders).forEach((header)=>{
158
- writeHeader(headers, header, derivedIdentityHeaders[header]);
159
- });
160
- }
161
- body = payload.data && 'object' == typeof payload.data ? JSON.stringify(payload.data) : payload.body;
162
- if (payload.data) {
163
- headers['Content-Type'] = 'application/json';
164
- body = 'object' == typeof payload.data ? JSON.stringify(payload.data) : payload.body;
165
- } else if (payload.body) {
166
- headers['Content-Type'] = 'text/plain';
167
- body = payload.body;
168
- } else if (payload.formData) body = payload.formData;
169
- else if (payload.formUrlencoded) {
170
- headers['Content-Type'] = 'application/x-www-form-urlencoded';
171
- body = 'object' != typeof payload.formUrlencoded || payload.formUrlencoded instanceof URLSearchParams ? payload.formUrlencoded : stringify(payload.formUrlencoded);
172
- }
173
- }
174
- headers.accept = "application/json,*/*;q=0.8";
175
- const configDomain = domainMap.get(requestId);
176
- if ('default' !== requestId && isEmptyDomain(configDomain)) throw new ProducerDomainNotConfiguredError(requestId);
177
- finalURL = `${configDomain || ''}${finalURL}`;
178
- attachEnvelopeHeaderIfRequired(headers, requestId, finalURL);
179
- attachSecuredOperationHeaders(headers, requestId, method, path, operationContext);
180
- return executeWithResilience({
181
- requestId,
182
- target: 'browser',
183
- method,
184
- url: finalURL,
185
- init: {
186
- method,
187
- body,
188
- headers
189
- },
190
- fetcher,
191
- transport: realTransportResilience.get(requestId)
192
- });
193
- };
194
- return sender;
195
- };
196
- const createUploader = ({ path, domain, requestId = 'default', operationContext })=>{
197
- const getFinalPath = compile(path, {
198
- encode: encodeURIComponent
199
- });
200
- const sender = (...args)=>{
201
- const fetcher = resolveConfiguredRequest(realRequest, requestId, originFetch);
202
- const { body, headers: uploadHeaders, params } = getUploadPayload(args);
203
- const headers = {
204
- ...uploadHeaders
205
- };
206
- const finalPath = getFinalPath(params);
207
- const configDomain = domainMap.get(requestId);
208
- const finalURL = `${configDomain || domain || ''}${finalPath}`;
209
- attachEnvelopeHeaderIfRequired(headers, requestId, finalURL);
210
- attachSecuredOperationHeaders(headers, requestId, 'POST', path, operationContext);
211
- return fetcher(finalURL, {
212
- method: 'POST',
213
- body,
214
- headers
215
- });
216
- };
217
- return sender;
218
- };
219
- export { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, configure, createRequest, createUploader };
13
+ const requestFactory = createRequestFactory({
14
+ target: 'browser',
15
+ getFetch: ()=>fetch,
16
+ originFetch: originFetch,
17
+ readIncomingHeaders: ()=>({}),
18
+ resolveSourceOrigin: resolveBrowserOrigin,
19
+ createInputParamsBody: (args)=>JSON.stringify({
20
+ args
21
+ }),
22
+ resolveRequestUrl: ({ configDomain, path })=>`${configDomain || ''}${path}`,
23
+ resolveUploadUrl: ({ configDomain, domain, path })=>`${configDomain || domain || ''}${path}`
24
+ });
25
+ const { configure: configure, createRequest: createRequest, createUploader: createUploader } = requestFactory;
26
+ export { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError } from "./policyCore.mjs";
27
+ export { configure, createRequest, createUploader };
@@ -1,25 +1,11 @@
1
1
  import "node:module";
2
2
  import { storage } from "@modern-js/runtime-utils/node";
3
- import { compile } from "path-to-regexp";
4
- import { stringify } from "qs";
5
3
  import { handleRes } from "./handleRes.mjs";
6
- import { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, TRACEPARENT_HEADER, attachOperationContextHeaders, buildEnvelopeHeaderValue, deleteHeader, extractPathParamNames, firstHeaderValue, isEmptyDomain, isSecuredRequestId, parseTraceparentValue, readHeader, resolveConfiguredRequest, toOrigin, writeHeader } from "./policyCore.mjs";
7
- import { executeWithResilience } from "./transport.mjs";
8
- import { BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS, BFF_ENVELOPE_HEADER, BFF_OPERATION_CONTEXT_DETAIL_HEADER, BFF_OPERATION_CONTEXT_HEADER } from "./types.mjs";
9
- import { getUploadPayload } from "./utiles.mjs";
4
+ import { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, firstHeaderValue, toOrigin } from "./policyCore.mjs";
5
+ import { createRequestFactory } from "./requestFactory.mjs";
10
6
  export * from "./requestContext.mjs";
11
7
  export * from "./traceparent.mjs";
12
8
  export * from "./types.mjs";
13
- const realRequest = new Map();
14
- const realAllowedHeaders = new Map();
15
- const realResolveHeaders = new Map();
16
- const realRequireEnvelope = new Map();
17
- const realAllowCrossOriginEnvelope = new Map();
18
- const realTransportResilience = new Map();
19
- const realIdentityBinding = new Map();
20
- const realOperationContract = new Map();
21
- const domainMap = new Map();
22
- const OPERATION_CONTEXT_DETAIL_HEADER = BFF_OPERATION_CONTEXT_DETAIL_HEADER;
23
9
  const resolveSourceOrigin = (headers)=>{
24
10
  const origin = toOrigin(firstHeaderValue(headers.origin));
25
11
  if (origin) return origin;
@@ -42,225 +28,15 @@ const originFetch = (...params)=>{
42
28
  if (init?.method?.toLowerCase() === 'get') init.body = void 0;
43
29
  return fetch(...params).then(handleRes);
44
30
  };
45
- const attachEnvelopeHeaderIfRequired = (headers, requestId, url, webRequestHeaders)=>{
46
- const shouldRequireEnvelope = realRequireEnvelope.get(requestId) ?? isSecuredRequestId(requestId);
47
- if (!shouldRequireEnvelope) return;
48
- headers[BFF_ENVELOPE_HEADER] = buildEnvelopeHeaderValue({
49
- requestId,
50
- target: 'server',
51
- sourceOrigin: resolveSourceOrigin(webRequestHeaders),
52
- targetOrigin: toOrigin(url),
53
- traceContext: parseTraceparentValue(readHeader(headers, TRACEPARENT_HEADER)),
54
- allowCrossOriginEnvelope: realAllowCrossOriginEnvelope.get(requestId)
55
- });
56
- };
57
- const attachSecuredOperationHeaders = (headers, requestId, method, path, operationContext)=>{
58
- if (!isSecuredRequestId(requestId)) return;
59
- attachOperationContextHeaders({
60
- headers,
61
- requestId,
62
- target: 'server',
63
- method,
64
- path,
65
- operationContext,
66
- operationContract: realOperationContract.get(requestId),
67
- operationContextHeader: BFF_OPERATION_CONTEXT_HEADER,
68
- operationContextDetailHeader: OPERATION_CONTEXT_DETAIL_HEADER
69
- });
70
- };
71
- const configure = (options)=>{
72
- const { request, interceptor, allowedHeaders, resolveHeaders, transport, requireEnvelope, allowCrossOriginEnvelope, identityBinding, operationContract, setDomain, requestId = 'default' } = options;
73
- const hasExistingDomain = domainMap.has(requestId);
74
- if ('default' !== requestId && !setDomain && !hasExistingDomain) throw new ProducerDomainNotConfiguredError(requestId);
75
- let configuredRequest = request || originFetch;
76
- if (interceptor && !request) configuredRequest = interceptor(fetch);
77
- if (Array.isArray(allowedHeaders)) realAllowedHeaders.set(requestId, allowedHeaders);
78
- if ('function' == typeof resolveHeaders) realResolveHeaders.set(requestId, resolveHeaders);
79
- if (transport && 'object' == typeof transport) realTransportResilience.set(requestId, transport);
80
- if (identityBinding && 'object' == typeof identityBinding) realIdentityBinding.set(requestId, identityBinding);
81
- if (operationContract && 'object' == typeof operationContract) realOperationContract.set(requestId, operationContract);
82
- if ('boolean' == typeof requireEnvelope) realRequireEnvelope.set(requestId, requireEnvelope);
83
- if ('boolean' == typeof allowCrossOriginEnvelope || 'function' == typeof allowCrossOriginEnvelope) realAllowCrossOriginEnvelope.set(requestId, allowCrossOriginEnvelope);
84
- if (setDomain) {
85
- const resolvedDomain = setDomain({
86
- target: 'server',
87
- requestId
88
- });
89
- if ('default' !== requestId && isEmptyDomain(resolvedDomain)) throw new ProducerDomainNotConfiguredError(requestId);
90
- if ('string' == typeof resolvedDomain) domainMap.set(requestId, resolvedDomain);
91
- }
92
- realRequest.set(requestId, configuredRequest);
93
- };
94
- const normalizeRequestOptions = (...args)=>{
95
- if ('object' == typeof args[0] && null !== args[0]) return args[0];
96
- const [path, method, port, httpMethodDecider, fetch1, requestId, operationContext] = args;
97
- return {
98
- path,
99
- method,
100
- port,
101
- httpMethodDecider,
102
- fetch: fetch1,
103
- requestId,
104
- operationContext
105
- };
106
- };
107
- const createRequest = (...args)=>{
108
- const { path, method, port, httpMethodDecider = 'functionName', fetch: fetch1 = originFetch, requestId = 'default', operationContext } = normalizeRequestOptions(...args);
109
- const getFinalPath = compile(path, {
110
- encode: encodeURIComponent
111
- });
112
- const keyNames = extractPathParamNames(path);
113
- const sender = (...args)=>{
114
- const fetcher = resolveConfiguredRequest(realRequest, requestId, fetch1);
115
- const webRequestHeaders = readIncomingWebHeaders();
116
- let body;
117
- let headers;
118
- let url;
119
- if ('inputParams' === httpMethodDecider) {
120
- const configDomain = domainMap.get(requestId);
121
- if ('default' !== requestId && isEmptyDomain(configDomain)) throw new ProducerDomainNotConfiguredError(requestId);
122
- url = `${configDomain || `http://127.0.0.1:${port}`}${path}`;
123
- body = args;
124
- headers = {
125
- 'Content-Type': 'application/json'
126
- };
127
- } else {
128
- const payload = 'object' == typeof args[args.length - 1] ? args[args.length - 1] : {};
129
- payload.params = payload.params || {};
130
- const requestParams = args[0];
131
- if ('object' == typeof requestParams && requestParams.params) {
132
- const { params } = requestParams;
133
- keyNames.forEach((keyName)=>{
134
- payload.params[keyName] = params[keyName];
135
- });
136
- } else keyNames.forEach((keyName, index)=>{
137
- payload.params[keyName] = args[index];
138
- });
139
- const plainPath = getFinalPath(payload.params);
140
- const finalPath = payload.query ? `${plainPath}?${stringify(payload.query)}` : plainPath;
141
- headers = payload.headers ? {
142
- ...payload.headers
143
- } : {};
144
- const identityBinding = realIdentityBinding.get(requestId);
145
- const identityBindingEnabled = identityBinding?.enabled ?? isSecuredRequestId(requestId);
146
- const identityBindingStrict = identityBinding?.strict ?? isSecuredRequestId(requestId);
147
- const protectedIdentityHeaders = (identityBinding?.protectedHeaders || BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS).map((header)=>header.toLowerCase());
148
- const targetAllowedHeaders = realAllowedHeaders.get(requestId) || [];
149
- const forwardedHeaders = {};
150
- for (const key of targetAllowedHeaders)if (void 0 !== webRequestHeaders[key]) forwardedHeaders[key] = webRequestHeaders[key];
151
- if (identityBindingEnabled) {
152
- const derivedIdentityHeaders = {};
153
- for (const header of protectedIdentityHeaders){
154
- const incomingHeaderValue = readHeader(webRequestHeaders, header);
155
- if (void 0 !== incomingHeaderValue) writeHeader(derivedIdentityHeaders, header, incomingHeaderValue);
156
- }
157
- const customDerivedHeaders = identityBinding?.deriveHeaders?.({
158
- requestId,
159
- target: 'server',
160
- incomingHeaders: {
161
- ...webRequestHeaders
162
- },
163
- protectedHeaders: [
164
- ...protectedIdentityHeaders
165
- ]
166
- });
167
- if (customDerivedHeaders && 'object' == typeof customDerivedHeaders) for (const header of protectedIdentityHeaders){
168
- const customValue = readHeader(customDerivedHeaders, header);
169
- if (void 0 !== customValue) writeHeader(derivedIdentityHeaders, header, customValue);
170
- }
171
- for (const header of protectedIdentityHeaders){
172
- const attemptedValue = readHeader(headers, header);
173
- if (void 0 === attemptedValue) continue;
174
- const violation = {
175
- requestId,
176
- target: 'server',
177
- header,
178
- attemptedValue,
179
- derivedValue: readHeader(derivedIdentityHeaders, header),
180
- reason: identityBindingStrict ? 'client_override_rejected' : 'client_override_blocked'
181
- };
182
- identityBinding?.onViolation?.(violation);
183
- if (identityBindingStrict) throw new IdentityBindingViolationError(violation);
184
- deleteHeader(headers, header);
185
- }
186
- Object.keys(derivedIdentityHeaders).forEach((header)=>{
187
- writeHeader(forwardedHeaders, header, derivedIdentityHeaders[header]);
188
- });
189
- }
190
- const resolveHeaders = realResolveHeaders.get(requestId);
191
- if (resolveHeaders) {
192
- const resolvedHeaders = resolveHeaders({
193
- requestId,
194
- allowedHeaders: targetAllowedHeaders,
195
- incomingHeaders: {
196
- ...forwardedHeaders
197
- }
198
- });
199
- if (resolvedHeaders && 'object' == typeof resolvedHeaders) {
200
- for (const key of targetAllowedHeaders)if (void 0 !== resolvedHeaders[key]) forwardedHeaders[key] = resolvedHeaders[key];
201
- }
202
- }
203
- headers = {
204
- ...headers,
205
- ...forwardedHeaders
206
- };
207
- if (payload.data) {
208
- headers['Content-Type'] = 'application/json';
209
- body = 'object' == typeof payload.data ? JSON.stringify(payload.data) : payload.body;
210
- } else if (payload.body) {
211
- headers['Content-Type'] = 'text/plain';
212
- body = payload.body;
213
- } else if (payload.formData) body = payload.formData;
214
- else if (payload.formUrlencoded) {
215
- headers['Content-Type'] = 'application/x-www-form-urlencoded';
216
- body = 'object' == typeof payload.formUrlencoded ? stringify(payload.formUrlencoded) : payload.formUrlencoded;
217
- }
218
- const configDomain = domainMap.get(requestId);
219
- if ('default' !== requestId && isEmptyDomain(configDomain)) throw new ProducerDomainNotConfiguredError(requestId);
220
- url = `${configDomain || `http://127.0.0.1:${port}`}${finalPath}`;
221
- }
222
- if (void 0 === readHeader(headers, TRACEPARENT_HEADER)) {
223
- const incomingTraceparent = firstHeaderValue(readHeader(webRequestHeaders, TRACEPARENT_HEADER));
224
- if ('string' == typeof incomingTraceparent) writeHeader(headers, TRACEPARENT_HEADER, incomingTraceparent);
225
- }
226
- if (void 0 === readHeader(headers, TRACEPARENT_HEADER) && operationContext?.traceparent) writeHeader(headers, TRACEPARENT_HEADER, operationContext.traceparent);
227
- attachEnvelopeHeaderIfRequired(headers, requestId, url, webRequestHeaders);
228
- attachSecuredOperationHeaders(headers, requestId, method, path, operationContext);
229
- if ('get' === method.toLowerCase()) body = void 0;
230
- headers.accept = "application/json,*/*;q=0.8";
231
- return executeWithResilience({
232
- requestId,
233
- target: 'server',
234
- method,
235
- url,
236
- init: {
237
- method,
238
- body,
239
- headers
240
- },
241
- fetcher,
242
- transport: realTransportResilience.get(requestId)
243
- });
244
- };
245
- return sender;
246
- };
247
- const createUploader = ({ path, requestId = 'default', operationContext })=>{
248
- const sender = (...args)=>{
249
- const fetcher = resolveConfiguredRequest(realRequest, requestId, originFetch);
250
- const { body, headers: uploadHeaders } = getUploadPayload(args);
251
- const headers = {
252
- ...uploadHeaders
253
- };
254
- const configDomain = domainMap.get(requestId);
255
- const finalURL = `${configDomain || ''}${path}`;
256
- attachEnvelopeHeaderIfRequired(headers, requestId, finalURL, readIncomingWebHeaders());
257
- attachSecuredOperationHeaders(headers, requestId, 'POST', path, operationContext);
258
- return fetcher(finalURL, {
259
- method: 'POST',
260
- body,
261
- headers
262
- });
263
- };
264
- return sender;
265
- };
31
+ const requestFactory = createRequestFactory({
32
+ target: 'server',
33
+ getFetch: ()=>fetch,
34
+ originFetch: originFetch,
35
+ readIncomingHeaders: readIncomingWebHeaders,
36
+ resolveSourceOrigin: resolveSourceOrigin,
37
+ createInputParamsBody: (args)=>args,
38
+ resolveRequestUrl: ({ configDomain, path, port })=>`${configDomain || `http://127.0.0.1:${port}`}${path}`,
39
+ resolveUploadUrl: ({ configDomain, path })=>`${configDomain || ''}${path}`
40
+ });
41
+ const { configure: configure, createRequest: createRequest, createUploader: createUploader } = requestFactory;
266
42
  export { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, configure, createRequest, createUploader };
@@ -133,7 +133,7 @@ const resolveConfiguredRequest = (configuredRequests, requestId, fallback)=>{
133
133
  const buildEnvelopeHeaderValue = ({ requestId, target, sourceOrigin, targetOrigin, traceContext, allowCrossOriginEnvelope })=>{
134
134
  const isCrossOrigin = Boolean(sourceOrigin) && Boolean(targetOrigin) && sourceOrigin !== targetOrigin;
135
135
  if (isCrossOrigin) {
136
- const isAllowed = 'function' == typeof allowCrossOriginEnvelope ? allowCrossOriginEnvelope({
136
+ const isAllowed = 'function' == typeof allowCrossOriginEnvelope ? true === allowCrossOriginEnvelope({
137
137
  requestId,
138
138
  sourceOrigin,
139
139
  targetOrigin,
@@ -172,4 +172,4 @@ const attachOperationContextHeaders = ({ headers, requestId, target, method, pat
172
172
  writeHeader(headers, operationContextDetailHeader, JSON.stringify(contextPayload));
173
173
  return contextPayload;
174
174
  };
175
- export { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, TRACEPARENT_HEADER, attachOperationContextHeaders, buildEnvelopeHeaderValue, buildOperationContext, deleteHeader, extractPathParamNames, findHeaderKey, firstHeaderValue, isEmptyDomain, isSecuredRequestId, isStrictDefaultRequestIdEnabled, parseTraceparentValue, readHeader, resolveConfiguredRequest, toOrigin, validateOperationContract, writeHeader };
175
+ export { CrossOriginEnvelopePolicyError, IdentityBindingViolationError, OperationContractViolationError, ProducerClientNotInitializedError, ProducerDomainNotConfiguredError, TRACEPARENT_HEADER, attachOperationContextHeaders, buildEnvelopeHeaderValue, buildOperationContext, deleteHeader, extractPathParamNames, findHeaderKey, firstHeaderValue, isEmptyDomain, isSecuredRequestId, parseTraceparentValue, readHeader, resolveConfiguredRequest, toOrigin, validateOperationContract, writeHeader };