@equinor/fusion-framework-module-http 8.0.3 → 8.0.5
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/CHANGELOG.md +25 -0
- package/dist/esm/configurator.js +8 -1
- package/dist/esm/configurator.js.map +1 -1
- package/dist/esm/errors/ClientNotFoundException.js +10 -0
- package/dist/esm/errors/ClientNotFoundException.js.map +1 -0
- package/dist/esm/errors/HttpJsonResponseError.js +27 -0
- package/dist/esm/errors/HttpJsonResponseError.js.map +1 -0
- package/dist/esm/errors/HttpResponseError.js +19 -0
- package/dist/esm/errors/HttpResponseError.js.map +1 -0
- package/dist/esm/errors/ServerSentEventResponseError.js +25 -0
- package/dist/esm/errors/ServerSentEventResponseError.js.map +1 -0
- package/dist/esm/errors/index.js +5 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/client/client-msal.js +1 -0
- package/dist/esm/lib/client/client-msal.js.map +1 -1
- package/dist/esm/lib/client/client.js +40 -4
- package/dist/esm/lib/client/client.js.map +1 -1
- package/dist/esm/lib/operators/{http-request-handler.js → HttpRequestHandler.js} +3 -3
- package/dist/esm/lib/operators/HttpRequestHandler.js.map +1 -0
- package/dist/esm/lib/operators/{http-response-handler.js → HttpResponseHandler.js} +2 -2
- package/dist/esm/lib/operators/HttpResponseHandler.js.map +1 -0
- package/dist/esm/lib/operators/{process-operators.js → ProcessOperators.js} +4 -1
- package/dist/esm/lib/operators/ProcessOperators.js.map +1 -0
- package/dist/esm/lib/operators/{capitalize-request-method.operator.js → capitalize-request-method-operator.js} +4 -2
- package/dist/esm/lib/operators/capitalize-request-method-operator.js.map +1 -0
- package/dist/esm/lib/operators/{fetch-request.schema.js → fetch-request.schemas.js} +1 -1
- package/dist/esm/lib/operators/fetch-request.schemas.js.map +1 -0
- package/dist/esm/lib/operators/index.js +6 -6
- package/dist/esm/lib/operators/index.js.map +1 -1
- package/dist/esm/lib/operators/{request-validation.operator.js → request-validation-operator.js} +3 -2
- package/dist/esm/lib/operators/{request-validation.operator.js.map → request-validation-operator.js.map} +1 -1
- package/dist/esm/lib/operators/{sse.operator.js → sse-map.operator.js} +5 -3
- package/dist/esm/lib/operators/sse-map.operator.js.map +1 -0
- package/dist/esm/lib/selectors/blob-selector.js +3 -2
- package/dist/esm/lib/selectors/blob-selector.js.map +1 -1
- package/dist/esm/lib/selectors/{sse-selector.js → create-sse-selector.js} +20 -5
- package/dist/esm/lib/selectors/create-sse-selector.js.map +1 -0
- package/dist/esm/lib/selectors/index.js +1 -1
- package/dist/esm/lib/selectors/index.js.map +1 -1
- package/dist/esm/lib/selectors/json-selector.js +1 -1
- package/dist/esm/lib/selectors/json-selector.js.map +1 -1
- package/dist/esm/module.js +4 -1
- package/dist/esm/module.js.map +1 -1
- package/dist/esm/provider.js +14 -8
- package/dist/esm/provider.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/configurator.d.ts +6 -1
- package/dist/types/errors/ClientNotFoundException.d.ts +9 -0
- package/dist/types/errors/HttpJsonResponseError.d.ts +24 -0
- package/dist/types/errors/HttpResponseError.d.ts +15 -0
- package/dist/types/errors/ServerSentEventResponseError.d.ts +23 -0
- package/dist/types/errors/index.d.ts +4 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/lib/client/client-msal.d.ts +1 -0
- package/dist/types/lib/client/client.d.ts +33 -3
- package/dist/types/lib/operators/{http-request-handler.d.ts → HttpRequestHandler.d.ts} +1 -1
- package/dist/types/lib/operators/{http-response-handler.d.ts → HttpResponseHandler.d.ts} +1 -1
- package/dist/types/lib/operators/index.d.ts +6 -6
- package/dist/types/lib/operators/{sse.operator.d.ts → sse-map.operator.d.ts} +1 -1
- package/dist/types/lib/selectors/index.d.ts +2 -2
- package/dist/types/provider.d.ts +7 -8
- package/dist/types/version.d.ts +1 -1
- package/package.json +7 -7
- package/src/configurator.ts +8 -1
- package/src/errors/ClientNotFoundException.ts +9 -0
- package/src/errors/HttpJsonResponseError.ts +32 -0
- package/src/errors/HttpResponseError.ts +21 -0
- package/src/errors/ServerSentEventResponseError.ts +30 -0
- package/src/errors/index.ts +4 -0
- package/src/index.ts +2 -1
- package/src/lib/client/client-msal.ts +1 -0
- package/src/lib/client/client.ts +40 -4
- package/src/lib/operators/{http-request-handler.ts → HttpRequestHandler.ts} +2 -2
- package/src/lib/operators/{http-response-handler.ts → HttpResponseHandler.ts} +1 -1
- package/src/lib/operators/{process-operators.ts → ProcessOperators.ts} +3 -0
- package/src/lib/operators/{capitalize-request-method.operator.ts → capitalize-request-method-operator.ts} +3 -1
- package/src/lib/operators/index.ts +6 -6
- package/src/lib/operators/{request-validation.operator.ts → request-validation-operator.ts} +2 -1
- package/src/lib/operators/{sse.operator.ts → sse-map.operator.ts} +2 -1
- package/src/lib/operators/types.ts +1 -0
- package/src/lib/selectors/blob-selector.ts +3 -2
- package/src/lib/selectors/{sse-selector.ts → create-sse-selector.ts} +34 -17
- package/src/lib/selectors/index.ts +2 -2
- package/src/lib/selectors/json-selector.ts +1 -1
- package/src/module.ts +4 -1
- package/src/provider.ts +14 -8
- package/src/version.ts +1 -1
- package/tests/HttpClient.test.ts +2 -2
- package/tests/operators.test.ts +5 -1
- package/tests/sse.selector.test.ts +34 -21
- package/vitest.config.ts +1 -1
- package/dist/esm/errors.js +0 -58
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/lib/operators/capitalize-request-method.operator.js.map +0 -1
- package/dist/esm/lib/operators/fetch-request.schema.js.map +0 -1
- package/dist/esm/lib/operators/http-request-handler.js.map +0 -1
- package/dist/esm/lib/operators/http-response-handler.js.map +0 -1
- package/dist/esm/lib/operators/process-operators.js.map +0 -1
- package/dist/esm/lib/operators/sse.operator.js.map +0 -1
- package/dist/esm/lib/selectors/sse-selector.js.map +0 -1
- package/dist/types/errors.d.ts +0 -51
- package/src/errors.ts +0 -69
- package/dist/types/lib/operators/{process-operators.d.ts → ProcessOperators.d.ts} +0 -0
- package/dist/types/lib/operators/{capitalize-request-method.operator.d.ts → capitalize-request-method-operator.d.ts} +0 -0
- package/dist/types/lib/operators/{fetch-request.schema.d.ts → fetch-request.schemas.d.ts} +26 -26
- /package/dist/types/lib/operators/{request-validation.operator.d.ts → request-validation-operator.d.ts} +0 -0
- /package/dist/types/lib/selectors/{sse-selector.d.ts → create-sse-selector.d.ts} +0 -0
- /package/src/lib/operators/{fetch-request.schema.ts → fetch-request.schemas.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EMPTY, from, fromEvent } from 'rxjs';
|
|
2
2
|
import { finalize, takeUntil } from 'rxjs/operators';
|
|
3
|
-
import { ServerSentEventResponseError } from '../../errors.js';
|
|
3
|
+
import { ServerSentEventResponseError } from '../../errors/index.js';
|
|
4
4
|
const defaultDataParser = (data) => {
|
|
5
5
|
try {
|
|
6
6
|
return JSON.parse(data);
|
|
@@ -94,28 +94,38 @@ async function* readStream(reader, options) {
|
|
|
94
94
|
: [options.eventFilter]
|
|
95
95
|
: null;
|
|
96
96
|
const decoder = new TextDecoder();
|
|
97
|
+
// keep reading chunks from the stream until the reader signals completion
|
|
97
98
|
while (true) {
|
|
98
99
|
const { done, value } = await reader.read();
|
|
100
|
+
// the underlying stream has ended, nothing more to read
|
|
99
101
|
if (done) {
|
|
102
|
+
// exit the read loop rather than yielding any further events
|
|
100
103
|
break;
|
|
101
104
|
}
|
|
102
105
|
const text = decoder.decode(value, { stream: true });
|
|
103
106
|
const events = parseEvents(text, { dataParser: options?.dataParser });
|
|
107
|
+
// a chunk may contain multiple complete SSE events, emit each in turn
|
|
104
108
|
for (const event of events) {
|
|
109
|
+
// a retry directive reconfigures the reconnection delay rather than being a data event
|
|
105
110
|
if (event.retry) {
|
|
106
111
|
await new Promise((resolve) => setTimeout(resolve, Number.parseInt(event.retry ?? '300', 10)));
|
|
112
|
+
// nothing to yield for a retry-only event
|
|
107
113
|
continue;
|
|
108
114
|
}
|
|
115
|
+
// heartbeat filtering is opt-in via the skipHeartbeats option
|
|
109
116
|
if (skipHeartbeats) {
|
|
110
117
|
// Skip comment-based heartbeats (no event, data, or id)
|
|
111
118
|
if (!event.event && !event.data && !event.id) {
|
|
119
|
+
// this event carries no payload, so treat it as a heartbeat and skip it
|
|
112
120
|
continue;
|
|
113
121
|
}
|
|
114
122
|
// Skip named heartbeat events (e.g., event: heartbeat or event: ping)
|
|
115
123
|
if (event.event && ['heartbeat', 'ping'].includes(event.event)) {
|
|
124
|
+
// an explicitly named heartbeat/ping event should also be skipped
|
|
116
125
|
continue;
|
|
117
126
|
}
|
|
118
127
|
}
|
|
128
|
+
// only emit events that pass the caller-provided event type filter, if any
|
|
119
129
|
if (!eventFilter || (event.event && eventFilter.includes(event.event))) {
|
|
120
130
|
yield event;
|
|
121
131
|
}
|
|
@@ -135,21 +145,26 @@ async function* readStream(reader, options) {
|
|
|
135
145
|
*/
|
|
136
146
|
export const createSseSelector = (options) => {
|
|
137
147
|
return (response) => {
|
|
148
|
+
// an unsuccessful HTTP status means there is no valid SSE stream to read
|
|
138
149
|
if (!response.ok) {
|
|
139
150
|
throw new ServerSentEventResponseError(`HTTP error! Status: ${response.status}`, response);
|
|
140
151
|
}
|
|
152
|
+
// a missing body means there is nothing to stream from
|
|
141
153
|
if (!response.body) {
|
|
142
154
|
throw new ServerSentEventResponseError('Response body is not readable', response);
|
|
143
155
|
}
|
|
156
|
+
// guard against consuming a non-SSE response as if it were an event stream
|
|
144
157
|
if (!response.headers.get('Content-Type')?.includes('text/event-stream')) {
|
|
145
158
|
throw new ServerSentEventResponseError('Response is not a text/event-stream', response);
|
|
146
159
|
}
|
|
147
160
|
const reader = response.body.getReader();
|
|
148
|
-
return from(readStream(reader, {
|
|
161
|
+
return (from(readStream(reader, {
|
|
149
162
|
dataParser: options?.dataParser,
|
|
150
163
|
skipHeartbeats: options?.skipHeartbeats,
|
|
151
164
|
eventFilter: options?.eventFilter,
|
|
152
|
-
}))
|
|
165
|
+
}))
|
|
166
|
+
// stop the stream on abort and always release the underlying reader when done
|
|
167
|
+
.pipe(
|
|
153
168
|
// Stop reading if the abort signal is triggered
|
|
154
169
|
takeUntil(options?.abortSignal ? fromEvent(options.abortSignal, 'abort') : EMPTY), finalize(async () => {
|
|
155
170
|
// cancel just in case of a pre-mature exit
|
|
@@ -157,8 +172,8 @@ export const createSseSelector = (options) => {
|
|
|
157
172
|
/** ignore cancellation errors */
|
|
158
173
|
});
|
|
159
174
|
reader.releaseLock();
|
|
160
|
-
}));
|
|
175
|
+
})));
|
|
161
176
|
};
|
|
162
177
|
};
|
|
163
178
|
export default createSseSelector;
|
|
164
|
-
//# sourceMappingURL=sse-selector.js.map
|
|
179
|
+
//# sourceMappingURL=create-sse-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-sse-selector.js","sourceRoot":"","sources":["../../../../src/lib/selectors/create-sse-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/selectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/selectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-selector.js","sourceRoot":"","sources":["../../../../src/lib/selectors/json-selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"json-selector.js","sourceRoot":"","sources":["../../../../src/lib/selectors/json-selector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAqB,KAAK,EAIjD,QAAmB,EACH,EAAE;IAClB,2DAA2D;IAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,OAAO,EAAoB,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,2CAA2C;YAC3C,MAAM,IAAI,qBAAqB,CAAC,6BAA6B,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,yBAAyB;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,MAAM,IAAI,qBAAqB,CAAC,0BAA0B,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/esm/module.js
CHANGED
|
@@ -35,15 +35,18 @@ export const module = {
|
|
|
35
35
|
*/
|
|
36
36
|
initialize: async ({ config, hasModule, requireInstance, }) => {
|
|
37
37
|
const httpProvider = new HttpClientProvider(config);
|
|
38
|
+
// wire up an MSAL bearer-token handler only when the auth module is registered
|
|
38
39
|
if (hasModule('auth')) {
|
|
39
40
|
const authProvider = await requireInstance('auth');
|
|
40
41
|
httpProvider.defaultHttpRequestHandler.set('MSAL', async (request) => {
|
|
41
42
|
const { scopes = [] } = request;
|
|
43
|
+
// only attempt to acquire a token when the request actually declares scopes
|
|
42
44
|
if (scopes.length) {
|
|
43
|
-
/** TODO should be try catch, check caller for handling */
|
|
45
|
+
/** TODO(#5143): should be try catch, check caller for handling */
|
|
44
46
|
const accessToken = await authProvider.acquireAccessToken({
|
|
45
47
|
request: { scopes },
|
|
46
48
|
});
|
|
49
|
+
// without a token there's nothing to attach, fall through to the default request
|
|
47
50
|
if (accessToken) {
|
|
48
51
|
const headers = new Headers(request.headers);
|
|
49
52
|
headers.set('Authorization', `Bearer ${accessToken}`);
|
package/dist/esm/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,sBAAsB,GAEvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA4B,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkC1E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAmB;IACpC,IAAI,EAAE,MAAM;IACZ;;;;;;;;OAQG;IACH,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,cAAc,CAAC;IAE3D;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,KAAK,EAAE,EACjB,MAAM,EACN,SAAS,EACT,eAAe,GAChB,EAA+C,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YACnD,YAAY,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACnE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;gBAChC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,sBAAsB,GAEvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA4B,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAkC1E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAmB;IACpC,IAAI,EAAE,MAAM;IACZ;;;;;;;;OAQG;IACH,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,cAAc,CAAC;IAE3D;;;;;;;;;;;OAWG;IACH,UAAU,EAAE,KAAK,EAAE,EACjB,MAAM,EACN,SAAS,EACT,eAAe,GAChB,EAA+C,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpD,+EAA+E;QAC/E,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YACnD,YAAY,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACnE,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;gBAChC,4EAA4E;gBAC5E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,kEAAkE;oBAClE,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC;wBACxD,OAAO,EAAE,EAAE,MAAM,EAAE;qBACpB,CAAC,CAAC;oBACH,iFAAiF;oBACjF,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,WAAW,EAAE,CAAC,CAAC;wBACtD,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC;oBACjC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAyE,EAC9B,EAAE,CAAC,CAAC;IAC/C,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,IAAuC,EACI,EAAE,CAAC,CAAC;IAC/C,MAAM;IACN,SAAS,EAAE,CAAC,MAAwC,EAAE,EAAE;QACtD,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;CACF,CAAC,CAAC;AAWH,eAAe,MAAM,CAAC"}
|
package/dist/esm/provider.js
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { BaseModuleProvider } from '@equinor/fusion-framework-module/provider';
|
|
2
2
|
import { version } from './version';
|
|
3
|
-
|
|
4
|
-
* Thrown when `createClient(name)` is called with an unknown client key.
|
|
5
|
-
*
|
|
6
|
-
* This is only used when the provided string is neither a registered client name
|
|
7
|
-
* nor an absolute `http:` or `https:` URL.
|
|
8
|
-
*/
|
|
9
|
-
export class ClientNotFoundException extends Error {
|
|
10
|
-
}
|
|
3
|
+
import { ClientNotFoundException } from './errors/index.js';
|
|
11
4
|
/** URL protocols accepted as valid ad-hoc base URIs. */
|
|
12
5
|
const SUPPORTED_PROTOCOLS = ['http:', 'https:', 'ws:', 'wss:'];
|
|
13
6
|
/**
|
|
@@ -45,6 +38,10 @@ export class HttpClientProvider extends BaseModuleProvider {
|
|
|
45
38
|
get defaultHttpRequestHandler() {
|
|
46
39
|
return this.config.defaultHttpRequestHandler;
|
|
47
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a new `HttpClientProvider`.
|
|
43
|
+
* @param config - The configurator providing client definitions and defaults.
|
|
44
|
+
*/
|
|
48
45
|
constructor(config) {
|
|
49
46
|
super({
|
|
50
47
|
version,
|
|
@@ -81,6 +78,7 @@ export class HttpClientProvider extends BaseModuleProvider {
|
|
|
81
78
|
const { baseUri, defaultScopes = [], onCreate, ctor = this.config.defaultHttpClientCtor, requestHandler = this.defaultHttpRequestHandler, responseHandler, } = config;
|
|
82
79
|
const options = { requestHandler, responseHandler };
|
|
83
80
|
const instance = new ctor(baseUri || '', options);
|
|
81
|
+
// attach the resolved default scopes onto the instance without overwriting other own properties
|
|
84
82
|
Object.assign(instance, { defaultScopes });
|
|
85
83
|
onCreate?.(instance);
|
|
86
84
|
return instance;
|
|
@@ -88,6 +86,7 @@ export class HttpClientProvider extends BaseModuleProvider {
|
|
|
88
86
|
/**
|
|
89
87
|
* Creates a client instance and returns it as the requested custom client type.
|
|
90
88
|
*
|
|
89
|
+
* @template T - The custom `HttpClient` implementation type to cast the created instance to.
|
|
91
90
|
* @param key - The key of the pre-configured HTTP client to create.
|
|
92
91
|
* @returns The created HTTP client instance, cast to the specified type `T`.
|
|
93
92
|
*
|
|
@@ -98,6 +97,8 @@ export class HttpClientProvider extends BaseModuleProvider {
|
|
|
98
97
|
* is configured to use a different implementation.
|
|
99
98
|
*/
|
|
100
99
|
createCustomClient(key) {
|
|
100
|
+
// `createClient` always returns the provider's configured `HttpClient` implementation —
|
|
101
|
+
// cast through `unknown` to hand back the caller-requested implementation type `T`.
|
|
101
102
|
return this.createClient(key);
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
@@ -109,14 +110,19 @@ export class HttpClientProvider extends BaseModuleProvider {
|
|
|
109
110
|
*
|
|
110
111
|
* @param keyOrConfig - The key or configuration object for the HTTP client.
|
|
111
112
|
* @returns The resolved HTTP client configuration.
|
|
113
|
+
* @throws {ClientNotFoundException} When `keyOrConfig` is a string that is neither a registered
|
|
114
|
+
* client key nor a URL-like value.
|
|
112
115
|
*/
|
|
113
116
|
_resolveConfig(keyOrConfig) {
|
|
117
|
+
// a string may reference a registered client key or an ad-hoc URL; anything else is used as-is
|
|
114
118
|
if (typeof keyOrConfig === 'string') {
|
|
115
119
|
const config = this.config.clients[keyOrConfig];
|
|
120
|
+
// an absolute http(s) URL can be used directly as an ad-hoc baseUri
|
|
116
121
|
if (!config && isURL(keyOrConfig)) {
|
|
117
122
|
return { baseUri: keyOrConfig };
|
|
118
123
|
}
|
|
119
124
|
else if (!config && looksLikeURL(keyOrConfig)) {
|
|
125
|
+
// recover from a missing protocol instead of failing outright, but warn so it can be fixed
|
|
120
126
|
console.warn(`[HttpClientProvider] "${keyOrConfig}" looks like a URL but is missing the http:// or https:// protocol. ` +
|
|
121
127
|
`Treating it as "https://${keyOrConfig}". ` +
|
|
122
128
|
`Pass a fully-qualified URL to silence this warning.`);
|
package/dist/esm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED