@opra/client 0.20.3 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser.js +79 -43
- package/cjs/{http/http-client.js → client.js} +42 -27
- package/cjs/{http/http-collection-node.js → collection-node.js} +1 -1
- package/cjs/{http/http-request-observable.js → http-request-observable.js} +9 -4
- package/cjs/{http/http-request.js → http-request.js} +5 -5
- package/cjs/{http/http-response.js → http-response.js} +3 -4
- package/cjs/index.js +8 -8
- package/cjs/{http/http-singleton-node.js → singleton-node.js} +1 -1
- package/cjs/types.js +44 -0
- package/esm/{http/http-client.js → client.js} +41 -26
- package/esm/{http/http-collection-node.js → collection-node.js} +1 -1
- package/esm/{http/http-request-observable.js → http-request-observable.js} +9 -4
- package/esm/{http/http-request.js → http-request.js} +6 -6
- package/esm/{http/http-response.js → http-response.js} +3 -4
- package/esm/index.js +8 -8
- package/esm/{http/http-singleton-node.js → singleton-node.js} +1 -1
- package/esm/types.js +41 -0
- package/package.json +2 -2
- package/types/{http/http-client.d.ts → client.d.ts} +7 -7
- package/types/{http/http-collection-node.d.ts → collection-node.d.ts} +23 -23
- package/types/{http/http-request-observable.d.ts → http-request-observable.d.ts} +5 -5
- package/types/{http/http-request.d.ts → http-request.d.ts} +24 -22
- package/types/{http/http-response.d.ts → http-response.d.ts} +4 -5
- package/types/{http/http-service-base.d.ts → http-service-base.d.ts} +1 -1
- package/types/index.d.ts +8 -8
- package/types/{http/http-singleton-node.d.ts → singleton-node.d.ts} +14 -14
- package/types/types.d.ts +111 -0
- package/cjs/http/http-types.js +0 -2
- package/esm/http/http-types.js +0 -1
- package/types/http/http-types.d.ts +0 -57
- /package/cjs/{http/batch-request.js → batch-request.js} +0 -0
- /package/cjs/{http/http-service-base.js → http-service-base.js} +0 -0
- /package/esm/{http/batch-request.js → batch-request.js} +0 -0
- /package/esm/{http/http-service-base.js → http-service-base.js} +0 -0
- /package/types/{http/batch-request.d.ts → batch-request.d.ts} +0 -0
package/browser.js
CHANGED
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
var __defProp = Object.defineProperty;
|
|
7
7
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
8
|
|
|
9
|
+
// ../../build/client/esm/client.js
|
|
10
|
+
import { lastValueFrom as lastValueFrom2, Observable as Observable2 } from "rxjs";
|
|
11
|
+
import { isReadableStreamLike } from "rxjs/internal/util/isReadableStreamLike";
|
|
12
|
+
import { DocumentFactory, HttpHeaderCodes, HttpParams, isBlob, joinPath } from "@opra/common";
|
|
13
|
+
|
|
9
14
|
// ../../build/client/esm/client-error.js
|
|
10
15
|
var ClientError = class extends Error {
|
|
11
16
|
static {
|
|
@@ -24,23 +29,18 @@ var ClientError = class extends Error {
|
|
|
24
29
|
}
|
|
25
30
|
};
|
|
26
31
|
|
|
27
|
-
// ../../build/client/esm/http/http-client.js
|
|
28
|
-
import { lastValueFrom as lastValueFrom2, Observable as Observable2 } from "rxjs";
|
|
29
|
-
import { isReadableStreamLike } from "rxjs/internal/util/isReadableStreamLike";
|
|
30
|
-
import { DocumentFactory, HttpHeaderCodes, HttpHeaders as HttpHeaders3, HttpParams, isBlob, joinPath } from "@opra/common";
|
|
31
|
-
|
|
32
32
|
// ../../build/client/esm/constants.js
|
|
33
33
|
var JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
|
|
34
34
|
var TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
|
|
35
35
|
var FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
|
|
36
36
|
var kHttpClientContext = Symbol("kContext");
|
|
37
37
|
|
|
38
|
-
// ../../build/client/esm/http
|
|
38
|
+
// ../../build/client/esm/http-request-observable.js
|
|
39
39
|
import { lastValueFrom, Observable } from "rxjs";
|
|
40
40
|
import { uid } from "@opra/common";
|
|
41
41
|
|
|
42
|
-
// ../../build/client/esm/http
|
|
43
|
-
import {
|
|
42
|
+
// ../../build/client/esm/http-request.js
|
|
43
|
+
import { OpraURL } from "@opra/common";
|
|
44
44
|
var directCopyProperties = [
|
|
45
45
|
"cache",
|
|
46
46
|
"credentials",
|
|
@@ -61,7 +61,7 @@ var HttpRequest = class _HttpRequest {
|
|
|
61
61
|
this.cache = init?.cache || "default";
|
|
62
62
|
this.credentials = init?.credentials || "same-origin";
|
|
63
63
|
this.destination = init?.destination || "";
|
|
64
|
-
this.headers = new
|
|
64
|
+
this.headers = init?.headers instanceof Headers ? init.headers : new Headers(init?.headers);
|
|
65
65
|
this.integrity = init?.integrity || "";
|
|
66
66
|
this.keepalive = init?.keepalive ?? false;
|
|
67
67
|
this.method = (init?.method || "GET").toUpperCase();
|
|
@@ -105,7 +105,7 @@ var HttpRequest = class _HttpRequest {
|
|
|
105
105
|
this[k] = update[k];
|
|
106
106
|
});
|
|
107
107
|
if (update.headers) {
|
|
108
|
-
const h = update.headers instanceof
|
|
108
|
+
const h = update.headers instanceof Headers ? update.headers : new Headers(update.headers);
|
|
109
109
|
h.forEach((v, k) => {
|
|
110
110
|
if (k.toLowerCase() === "set-cookie") {
|
|
111
111
|
this.headers.append(k, v);
|
|
@@ -120,7 +120,7 @@ var HttpRequest = class _HttpRequest {
|
|
|
120
120
|
this[k] = src[k];
|
|
121
121
|
});
|
|
122
122
|
if (src.headers) {
|
|
123
|
-
const h = src.headers instanceof
|
|
123
|
+
const h = src.headers instanceof Headers ? src.headers : new Headers(src.headers);
|
|
124
124
|
h.forEach((v, k) => {
|
|
125
125
|
if (k.toLowerCase() === "set-cookie") {
|
|
126
126
|
this.headers.append(k, v);
|
|
@@ -131,7 +131,24 @@ var HttpRequest = class _HttpRequest {
|
|
|
131
131
|
}
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
// ../../build/client/esm/
|
|
134
|
+
// ../../build/client/esm/types.js
|
|
135
|
+
var HttpObserveType;
|
|
136
|
+
(function(HttpObserveType2) {
|
|
137
|
+
HttpObserveType2["Response"] = "response";
|
|
138
|
+
HttpObserveType2["Body"] = "body";
|
|
139
|
+
HttpObserveType2["Events"] = "events";
|
|
140
|
+
})(HttpObserveType || (HttpObserveType = {}));
|
|
141
|
+
var HttpEventType;
|
|
142
|
+
(function(HttpEventType2) {
|
|
143
|
+
HttpEventType2["Sent"] = "sent";
|
|
144
|
+
HttpEventType2["UploadProgress"] = "upload-progress";
|
|
145
|
+
HttpEventType2["ResponseHeader"] = "response-header";
|
|
146
|
+
HttpEventType2["DownloadProgress"] = "download-progress";
|
|
147
|
+
HttpEventType2["Response"] = "response";
|
|
148
|
+
HttpEventType2["Custom"] = "custom";
|
|
149
|
+
})(HttpEventType || (HttpEventType = {}));
|
|
150
|
+
|
|
151
|
+
// ../../build/client/esm/http-request-observable.js
|
|
135
152
|
var kRequest = Symbol("kRequest");
|
|
136
153
|
var HttpRequestObservable = class extends Observable {
|
|
137
154
|
static {
|
|
@@ -139,14 +156,18 @@ var HttpRequestObservable = class extends Observable {
|
|
|
139
156
|
}
|
|
140
157
|
constructor(context, options) {
|
|
141
158
|
super((subscriber) => {
|
|
142
|
-
context.send(options?.observe ||
|
|
159
|
+
context.send(options?.observe || HttpObserveType.Body, this[kRequest]).subscribe(subscriber);
|
|
143
160
|
});
|
|
144
161
|
this[kHttpClientContext] = context;
|
|
145
162
|
this[kRequest] = new HttpRequest(options?.http);
|
|
146
163
|
this.contentId = uid(6);
|
|
147
164
|
}
|
|
148
165
|
header(name, value) {
|
|
149
|
-
this[kRequest].headers
|
|
166
|
+
const headers = this[kRequest].headers;
|
|
167
|
+
if (Array.isArray(value))
|
|
168
|
+
value.forEach((v) => headers.append(name, String(v)));
|
|
169
|
+
else
|
|
170
|
+
headers.append(name, value);
|
|
150
171
|
return this;
|
|
151
172
|
}
|
|
152
173
|
param(name, value) {
|
|
@@ -154,7 +175,7 @@ var HttpRequestObservable = class extends Observable {
|
|
|
154
175
|
return this;
|
|
155
176
|
}
|
|
156
177
|
async fetch(observe) {
|
|
157
|
-
return lastValueFrom(this[kHttpClientContext].send(observe ||
|
|
178
|
+
return lastValueFrom(this[kHttpClientContext].send(observe || HttpObserveType.Body, this[kRequest]));
|
|
158
179
|
}
|
|
159
180
|
with(cb) {
|
|
160
181
|
cb(this);
|
|
@@ -164,7 +185,7 @@ var HttpRequestObservable = class extends Observable {
|
|
|
164
185
|
HttpRequestObservable.kContext = kHttpClientContext;
|
|
165
186
|
HttpRequestObservable.kRequest = kRequest;
|
|
166
187
|
|
|
167
|
-
// ../../build/client/esm/
|
|
188
|
+
// ../../build/client/esm/collection-node.js
|
|
168
189
|
var HttpCollectionNode = class {
|
|
169
190
|
static {
|
|
170
191
|
__name(this, "HttpCollectionNode");
|
|
@@ -273,29 +294,28 @@ var HttpCollectionNode = class {
|
|
|
273
294
|
}
|
|
274
295
|
};
|
|
275
296
|
|
|
276
|
-
// ../../build/client/esm/http
|
|
277
|
-
import { HttpHeaders as HttpHeaders2 } from "@opra/common";
|
|
297
|
+
// ../../build/client/esm/http-response.js
|
|
278
298
|
var HttpResponse = class _HttpResponse {
|
|
279
299
|
static {
|
|
280
300
|
__name(this, "HttpResponse");
|
|
281
301
|
}
|
|
282
302
|
constructor(init) {
|
|
283
303
|
this.hasBody = false;
|
|
284
|
-
this.headers = init?.headers instanceof
|
|
304
|
+
this.headers = init?.headers instanceof Headers ? init?.headers : new Headers(init?.headers);
|
|
285
305
|
this.status = init?.status || 200;
|
|
286
306
|
this.statusText = init?.statusText || "OK";
|
|
287
307
|
this.url = init?.url || null;
|
|
288
308
|
this.ok = this.status >= 200 && this.status < 300;
|
|
289
309
|
this.body = init?.body;
|
|
290
310
|
this.hasBody = init?.body != null || !!init?.hasBody;
|
|
291
|
-
this.
|
|
311
|
+
this.totalCount = init?.totalCount;
|
|
292
312
|
}
|
|
293
313
|
clone(update) {
|
|
294
314
|
return new _HttpResponse({ ...this, ...update });
|
|
295
315
|
}
|
|
296
316
|
};
|
|
297
317
|
|
|
298
|
-
// ../../build/client/esm/
|
|
318
|
+
// ../../build/client/esm/singleton-node.js
|
|
299
319
|
var HttpSingletonNode = class {
|
|
300
320
|
static {
|
|
301
321
|
__name(this, "HttpSingletonNode");
|
|
@@ -357,7 +377,7 @@ var HttpSingletonNode = class {
|
|
|
357
377
|
}
|
|
358
378
|
};
|
|
359
379
|
|
|
360
|
-
// ../../build/client/esm/
|
|
380
|
+
// ../../build/client/esm/client.js
|
|
361
381
|
var kAssets = Symbol("kAssets");
|
|
362
382
|
var OpraHttpClient = class {
|
|
363
383
|
static {
|
|
@@ -375,7 +395,7 @@ var OpraHttpClient = class {
|
|
|
375
395
|
});
|
|
376
396
|
this.defaults = {
|
|
377
397
|
...options?.defaults,
|
|
378
|
-
headers: options?.defaults?.headers instanceof
|
|
398
|
+
headers: options?.defaults?.headers instanceof Headers ? options?.defaults?.headers : new Headers(options?.defaults?.headers),
|
|
379
399
|
params: options?.defaults?.params instanceof HttpParams ? options?.defaults?.params : new HttpParams(options?.defaults?.params)
|
|
380
400
|
};
|
|
381
401
|
}
|
|
@@ -389,10 +409,10 @@ var OpraHttpClient = class {
|
|
|
389
409
|
if (promise) {
|
|
390
410
|
return promise;
|
|
391
411
|
}
|
|
392
|
-
this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest(
|
|
412
|
+
this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest(HttpObserveType.Body, new HttpRequest({
|
|
393
413
|
method: "GET",
|
|
394
414
|
url: "$metadata",
|
|
395
|
-
headers: new
|
|
415
|
+
headers: new Headers({ "accept": "application/json" })
|
|
396
416
|
})));
|
|
397
417
|
return await promise.then(async (body) => {
|
|
398
418
|
const api = await DocumentFactory.createDocument(body);
|
|
@@ -463,12 +483,12 @@ var OpraHttpClient = class {
|
|
|
463
483
|
} else if (Buffer.isBuffer(request.body)) {
|
|
464
484
|
contentType = "application/octet-stream";
|
|
465
485
|
body = request.body;
|
|
466
|
-
request.headers.set("Content-Size", request.body.length);
|
|
486
|
+
request.headers.set("Content-Size", String(request.body.length));
|
|
467
487
|
delete request.duplex;
|
|
468
488
|
} else if (isBlob(request.body)) {
|
|
469
489
|
contentType = request.body.type || "application/octet-stream";
|
|
470
490
|
body = request.body;
|
|
471
|
-
request.headers.set("Content-Size", request.body.length);
|
|
491
|
+
request.headers.set("Content-Size", String(request.body.length));
|
|
472
492
|
delete request.duplex;
|
|
473
493
|
} else {
|
|
474
494
|
contentType = "application/json";
|
|
@@ -489,9 +509,13 @@ var OpraHttpClient = class {
|
|
|
489
509
|
await interceptor(ctx, request);
|
|
490
510
|
}
|
|
491
511
|
}
|
|
492
|
-
if (observe ===
|
|
493
|
-
subscriber.next({
|
|
494
|
-
|
|
512
|
+
if (observe === HttpObserveType.Events)
|
|
513
|
+
subscriber.next({
|
|
514
|
+
observe,
|
|
515
|
+
request,
|
|
516
|
+
event: HttpEventType.Sent
|
|
517
|
+
});
|
|
518
|
+
const response = await this._fetch(url, request);
|
|
495
519
|
await this._handleResponse(observe, subscriber, request, response);
|
|
496
520
|
})().catch((error) => subscriber.error(error));
|
|
497
521
|
});
|
|
@@ -503,8 +527,8 @@ var OpraHttpClient = class {
|
|
|
503
527
|
return new HttpResponse(init);
|
|
504
528
|
}
|
|
505
529
|
async _handleResponse(observe, subscriber, request, fetchResponse, ctx) {
|
|
506
|
-
const headers =
|
|
507
|
-
if (observe ===
|
|
530
|
+
const headers = fetchResponse.headers;
|
|
531
|
+
if (observe === HttpObserveType.Events) {
|
|
508
532
|
const response2 = this._createResponse({
|
|
509
533
|
url: fetchResponse.url,
|
|
510
534
|
headers,
|
|
@@ -512,17 +536,22 @@ var OpraHttpClient = class {
|
|
|
512
536
|
statusText: fetchResponse.statusText,
|
|
513
537
|
hasBody: !!fetchResponse.body
|
|
514
538
|
});
|
|
515
|
-
subscriber.next({
|
|
539
|
+
subscriber.next({
|
|
540
|
+
observe,
|
|
541
|
+
request,
|
|
542
|
+
event: HttpEventType.ResponseHeader,
|
|
543
|
+
response: response2
|
|
544
|
+
});
|
|
516
545
|
}
|
|
517
546
|
let body;
|
|
518
547
|
if (fetchResponse.body) {
|
|
519
|
-
if (JSON_CONTENT_TYPE_PATTERN.test(
|
|
548
|
+
if (JSON_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || "")) {
|
|
520
549
|
body = await fetchResponse.json();
|
|
521
550
|
if (typeof body === "string")
|
|
522
551
|
body = JSON.parse(body);
|
|
523
|
-
} else if (TEXT_CONTENT_TYPE_PATTERN.test(
|
|
552
|
+
} else if (TEXT_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
|
|
524
553
|
body = await fetchResponse.text();
|
|
525
|
-
else if (FORMDATA_CONTENT_TYPE_PATTERN.test(
|
|
554
|
+
else if (FORMDATA_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
|
|
526
555
|
body = await fetchResponse.formData();
|
|
527
556
|
else {
|
|
528
557
|
const buf = await fetchResponse.arrayBuffer();
|
|
@@ -530,7 +559,7 @@ var OpraHttpClient = class {
|
|
|
530
559
|
body = buf;
|
|
531
560
|
}
|
|
532
561
|
}
|
|
533
|
-
if (observe ===
|
|
562
|
+
if (observe === HttpObserveType.Body && fetchResponse.status >= 400 && fetchResponse.status < 600) {
|
|
534
563
|
subscriber.error(new ClientError({
|
|
535
564
|
message: fetchResponse.status + " " + fetchResponse.statusText,
|
|
536
565
|
status: fetchResponse.status,
|
|
@@ -546,8 +575,8 @@ var OpraHttpClient = class {
|
|
|
546
575
|
statusText: fetchResponse.statusText,
|
|
547
576
|
body
|
|
548
577
|
};
|
|
549
|
-
if (fetchResponse.headers.has(HttpHeaderCodes.
|
|
550
|
-
responseInit.
|
|
578
|
+
if (fetchResponse.headers.has(HttpHeaderCodes.X_Total_Count))
|
|
579
|
+
responseInit.totalCount = parseInt(fetchResponse.headers.get(HttpHeaderCodes.X_Total_Count), 10);
|
|
551
580
|
const response = this._createResponse(responseInit);
|
|
552
581
|
if (ctx) {
|
|
553
582
|
const responseInterceptors = [
|
|
@@ -558,11 +587,16 @@ var OpraHttpClient = class {
|
|
|
558
587
|
await interceptor(ctx, observe, request);
|
|
559
588
|
}
|
|
560
589
|
}
|
|
561
|
-
if (observe ===
|
|
590
|
+
if (observe === HttpObserveType.Body) {
|
|
562
591
|
subscriber.next(body);
|
|
563
592
|
} else {
|
|
564
|
-
if (observe ===
|
|
565
|
-
subscriber.next({
|
|
593
|
+
if (observe === HttpObserveType.Events)
|
|
594
|
+
subscriber.next({
|
|
595
|
+
observe,
|
|
596
|
+
request,
|
|
597
|
+
event: HttpEventType.Response,
|
|
598
|
+
response
|
|
599
|
+
});
|
|
566
600
|
else
|
|
567
601
|
subscriber.next(response);
|
|
568
602
|
}
|
|
@@ -571,7 +605,7 @@ var OpraHttpClient = class {
|
|
|
571
605
|
};
|
|
572
606
|
OpraHttpClient.kAssets = kAssets;
|
|
573
607
|
|
|
574
|
-
// ../../build/client/esm/http
|
|
608
|
+
// ../../build/client/esm/http-service-base.js
|
|
575
609
|
var HttpServiceBase = class {
|
|
576
610
|
static {
|
|
577
611
|
__name(this, "HttpServiceBase");
|
|
@@ -583,6 +617,8 @@ var HttpServiceBase = class {
|
|
|
583
617
|
export {
|
|
584
618
|
ClientError,
|
|
585
619
|
HttpCollectionNode,
|
|
620
|
+
HttpEventType,
|
|
621
|
+
HttpObserveType,
|
|
586
622
|
HttpRequest,
|
|
587
623
|
HttpRequestObservable,
|
|
588
624
|
HttpResponse,
|
|
@@ -4,12 +4,13 @@ exports.OpraHttpClient = void 0;
|
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
const isReadableStreamLike_1 = require("rxjs/internal/util/isReadableStreamLike");
|
|
6
6
|
const common_1 = require("@opra/common");
|
|
7
|
-
const client_error_js_1 = require("
|
|
8
|
-
const
|
|
9
|
-
const
|
|
7
|
+
const client_error_js_1 = require("./client-error.js");
|
|
8
|
+
const collection_node_js_1 = require("./collection-node.js");
|
|
9
|
+
const constants_js_1 = require("./constants.js");
|
|
10
10
|
const http_request_js_1 = require("./http-request.js");
|
|
11
11
|
const http_response_js_1 = require("./http-response.js");
|
|
12
|
-
const
|
|
12
|
+
const singleton_node_js_1 = require("./singleton-node.js");
|
|
13
|
+
const types_js_1 = require("./types.js");
|
|
13
14
|
const kAssets = Symbol('kAssets');
|
|
14
15
|
class OpraHttpClient {
|
|
15
16
|
constructor(serviceUrl, options) {
|
|
@@ -24,8 +25,8 @@ class OpraHttpClient {
|
|
|
24
25
|
});
|
|
25
26
|
this.defaults = {
|
|
26
27
|
...options?.defaults,
|
|
27
|
-
headers: options?.defaults?.headers instanceof
|
|
28
|
-
? options?.defaults?.headers : new
|
|
28
|
+
headers: options?.defaults?.headers instanceof Headers
|
|
29
|
+
? options?.defaults?.headers : new Headers(options?.defaults?.headers),
|
|
29
30
|
params: options?.defaults?.params instanceof common_1.HttpParams
|
|
30
31
|
? options?.defaults?.params : new common_1.HttpParams(options?.defaults?.params)
|
|
31
32
|
};
|
|
@@ -40,10 +41,10 @@ class OpraHttpClient {
|
|
|
40
41
|
if (promise) {
|
|
41
42
|
return promise;
|
|
42
43
|
}
|
|
43
|
-
this[kAssets].metadataPromise = promise = (0, rxjs_1.lastValueFrom)(this._sendRequest(
|
|
44
|
+
this[kAssets].metadataPromise = promise = (0, rxjs_1.lastValueFrom)(this._sendRequest(types_js_1.HttpObserveType.Body, new http_request_js_1.HttpRequest({
|
|
44
45
|
method: 'GET',
|
|
45
46
|
url: '$metadata',
|
|
46
|
-
headers: new
|
|
47
|
+
headers: new Headers({ 'accept': 'application/json' })
|
|
47
48
|
})));
|
|
48
49
|
return await promise
|
|
49
50
|
.then(async (body) => {
|
|
@@ -78,7 +79,7 @@ class OpraHttpClient {
|
|
|
78
79
|
// ],
|
|
79
80
|
responseInterceptors: []
|
|
80
81
|
};
|
|
81
|
-
return new
|
|
82
|
+
return new collection_node_js_1.HttpCollectionNode(ctx);
|
|
82
83
|
}
|
|
83
84
|
singleton(resourceName) {
|
|
84
85
|
// If name argument is a class, we extract name from the class
|
|
@@ -97,7 +98,7 @@ class OpraHttpClient {
|
|
|
97
98
|
// ],
|
|
98
99
|
responseInterceptors: []
|
|
99
100
|
};
|
|
100
|
-
return new
|
|
101
|
+
return new singleton_node_js_1.HttpSingletonNode(ctx);
|
|
101
102
|
}
|
|
102
103
|
_sendRequest(observe, request, ctx) {
|
|
103
104
|
return new rxjs_1.Observable(subscriber => {
|
|
@@ -121,13 +122,13 @@ class OpraHttpClient {
|
|
|
121
122
|
else if (Buffer.isBuffer(request.body)) {
|
|
122
123
|
contentType = 'application/octet-stream';
|
|
123
124
|
body = request.body;
|
|
124
|
-
request.headers.set('Content-Size', request.body.length);
|
|
125
|
+
request.headers.set('Content-Size', String(request.body.length));
|
|
125
126
|
delete request.duplex;
|
|
126
127
|
}
|
|
127
128
|
else if ((0, common_1.isBlob)(request.body)) {
|
|
128
129
|
contentType = request.body.type || 'application/octet-stream';
|
|
129
130
|
body = request.body;
|
|
130
|
-
request.headers.set('Content-Size', request.body.length);
|
|
131
|
+
request.headers.set('Content-Size', String(request.body.length));
|
|
131
132
|
delete request.duplex;
|
|
132
133
|
}
|
|
133
134
|
else {
|
|
@@ -149,9 +150,13 @@ class OpraHttpClient {
|
|
|
149
150
|
await interceptor(ctx, request);
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
|
-
if (observe ===
|
|
153
|
-
subscriber.next({
|
|
154
|
-
|
|
153
|
+
if (observe === types_js_1.HttpObserveType.Events)
|
|
154
|
+
subscriber.next({
|
|
155
|
+
observe,
|
|
156
|
+
request,
|
|
157
|
+
event: types_js_1.HttpEventType.Sent,
|
|
158
|
+
});
|
|
159
|
+
const response = await this._fetch(url, request);
|
|
155
160
|
await this._handleResponse(observe, subscriber, request, response);
|
|
156
161
|
})().catch(error => subscriber.error(error));
|
|
157
162
|
});
|
|
@@ -163,8 +168,8 @@ class OpraHttpClient {
|
|
|
163
168
|
return new http_response_js_1.HttpResponse(init);
|
|
164
169
|
}
|
|
165
170
|
async _handleResponse(observe, subscriber, request, fetchResponse, ctx) {
|
|
166
|
-
const headers =
|
|
167
|
-
if (observe ===
|
|
171
|
+
const headers = fetchResponse.headers;
|
|
172
|
+
if (observe === types_js_1.HttpObserveType.Events) {
|
|
168
173
|
const response = this._createResponse({
|
|
169
174
|
url: fetchResponse.url,
|
|
170
175
|
headers,
|
|
@@ -172,18 +177,23 @@ class OpraHttpClient {
|
|
|
172
177
|
statusText: fetchResponse.statusText,
|
|
173
178
|
hasBody: !!fetchResponse.body
|
|
174
179
|
});
|
|
175
|
-
subscriber.next({
|
|
180
|
+
subscriber.next({
|
|
181
|
+
observe,
|
|
182
|
+
request,
|
|
183
|
+
event: types_js_1.HttpEventType.ResponseHeader,
|
|
184
|
+
response
|
|
185
|
+
});
|
|
176
186
|
}
|
|
177
187
|
let body;
|
|
178
188
|
if (fetchResponse.body) {
|
|
179
|
-
if (constants_js_1.JSON_CONTENT_TYPE_PATTERN.test(
|
|
189
|
+
if (constants_js_1.JSON_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || '')) {
|
|
180
190
|
body = await fetchResponse.json();
|
|
181
191
|
if (typeof body === 'string')
|
|
182
192
|
body = JSON.parse(body);
|
|
183
193
|
}
|
|
184
|
-
else if (constants_js_1.TEXT_CONTENT_TYPE_PATTERN.test(
|
|
194
|
+
else if (constants_js_1.TEXT_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || ''))
|
|
185
195
|
body = await fetchResponse.text();
|
|
186
|
-
else if (constants_js_1.FORMDATA_CONTENT_TYPE_PATTERN.test(
|
|
196
|
+
else if (constants_js_1.FORMDATA_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || ''))
|
|
187
197
|
body = await fetchResponse.formData();
|
|
188
198
|
else {
|
|
189
199
|
const buf = await fetchResponse.arrayBuffer();
|
|
@@ -191,7 +201,7 @@ class OpraHttpClient {
|
|
|
191
201
|
body = buf;
|
|
192
202
|
}
|
|
193
203
|
}
|
|
194
|
-
if (observe ===
|
|
204
|
+
if (observe === types_js_1.HttpObserveType.Body && fetchResponse.status >= 400 && fetchResponse.status < 600) {
|
|
195
205
|
subscriber.error(new client_error_js_1.ClientError({
|
|
196
206
|
message: fetchResponse.status + ' ' + fetchResponse.statusText,
|
|
197
207
|
status: fetchResponse.status,
|
|
@@ -207,8 +217,8 @@ class OpraHttpClient {
|
|
|
207
217
|
statusText: fetchResponse.statusText,
|
|
208
218
|
body
|
|
209
219
|
};
|
|
210
|
-
if (fetchResponse.headers.has(common_1.HttpHeaderCodes.
|
|
211
|
-
responseInit.
|
|
220
|
+
if (fetchResponse.headers.has(common_1.HttpHeaderCodes.X_Total_Count))
|
|
221
|
+
responseInit.totalCount = parseInt(fetchResponse.headers.get(common_1.HttpHeaderCodes.X_Total_Count), 10);
|
|
212
222
|
const response = this._createResponse(responseInit);
|
|
213
223
|
if (ctx) {
|
|
214
224
|
const responseInterceptors = [
|
|
@@ -219,12 +229,17 @@ class OpraHttpClient {
|
|
|
219
229
|
await interceptor(ctx, observe, request);
|
|
220
230
|
}
|
|
221
231
|
}
|
|
222
|
-
if (observe ===
|
|
232
|
+
if (observe === types_js_1.HttpObserveType.Body) {
|
|
223
233
|
subscriber.next(body);
|
|
224
234
|
}
|
|
225
235
|
else {
|
|
226
|
-
if (observe ===
|
|
227
|
-
subscriber.next({
|
|
236
|
+
if (observe === types_js_1.HttpObserveType.Events)
|
|
237
|
+
subscriber.next({
|
|
238
|
+
observe,
|
|
239
|
+
request,
|
|
240
|
+
event: types_js_1.HttpEventType.Response,
|
|
241
|
+
response
|
|
242
|
+
});
|
|
228
243
|
else
|
|
229
244
|
subscriber.next(response);
|
|
230
245
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpCollectionNode = void 0;
|
|
4
|
-
const constants_js_1 = require("
|
|
4
|
+
const constants_js_1 = require("./constants.js");
|
|
5
5
|
const http_request_observable_js_1 = require("./http-request-observable.js");
|
|
6
6
|
class HttpCollectionNode {
|
|
7
7
|
constructor(context) {
|
|
@@ -3,20 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.HttpRequestObservable = void 0;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
const common_1 = require("@opra/common");
|
|
6
|
-
const constants_js_1 = require("
|
|
6
|
+
const constants_js_1 = require("./constants.js");
|
|
7
7
|
const http_request_js_1 = require("./http-request.js");
|
|
8
|
+
const types_js_1 = require("./types.js");
|
|
8
9
|
const kRequest = Symbol('kRequest');
|
|
9
10
|
class HttpRequestObservable extends rxjs_1.Observable {
|
|
10
11
|
constructor(context, options) {
|
|
11
12
|
super((subscriber) => {
|
|
12
|
-
context.send(options?.observe ||
|
|
13
|
+
context.send(options?.observe || types_js_1.HttpObserveType.Body, this[kRequest]).subscribe((subscriber));
|
|
13
14
|
});
|
|
14
15
|
this[constants_js_1.kHttpClientContext] = context;
|
|
15
16
|
this[kRequest] = new http_request_js_1.HttpRequest(options?.http);
|
|
16
17
|
this.contentId = (0, common_1.uid)(6);
|
|
17
18
|
}
|
|
18
19
|
header(name, value) {
|
|
19
|
-
this[kRequest].headers
|
|
20
|
+
const headers = this[kRequest].headers;
|
|
21
|
+
if (Array.isArray(value))
|
|
22
|
+
value.forEach(v => headers.append(name, String(v)));
|
|
23
|
+
else
|
|
24
|
+
headers.append(name, value);
|
|
20
25
|
return this;
|
|
21
26
|
}
|
|
22
27
|
param(name, value) {
|
|
@@ -24,7 +29,7 @@ class HttpRequestObservable extends rxjs_1.Observable {
|
|
|
24
29
|
return this;
|
|
25
30
|
}
|
|
26
31
|
async fetch(observe) {
|
|
27
|
-
return (0, rxjs_1.lastValueFrom)(this[constants_js_1.kHttpClientContext].send(observe ||
|
|
32
|
+
return (0, rxjs_1.lastValueFrom)(this[constants_js_1.kHttpClientContext].send(observe || types_js_1.HttpObserveType.Body, this[kRequest]));
|
|
28
33
|
}
|
|
29
34
|
with(cb) {
|
|
30
35
|
cb(this);
|
|
@@ -10,7 +10,7 @@ class HttpRequest {
|
|
|
10
10
|
this.cache = init?.cache || 'default';
|
|
11
11
|
this.credentials = init?.credentials || 'same-origin';
|
|
12
12
|
this.destination = init?.destination || '';
|
|
13
|
-
this.headers = new
|
|
13
|
+
this.headers = init?.headers instanceof Headers ? init.headers : new Headers(init?.headers);
|
|
14
14
|
this.integrity = init?.integrity || '';
|
|
15
15
|
this.keepalive = init?.keepalive ?? false;
|
|
16
16
|
this.method = (init?.method || 'GET').toUpperCase();
|
|
@@ -54,9 +54,9 @@ class HttpRequest {
|
|
|
54
54
|
this[k] = update[k];
|
|
55
55
|
});
|
|
56
56
|
if (update.headers) {
|
|
57
|
-
const h = update.headers instanceof
|
|
57
|
+
const h = update.headers instanceof Headers
|
|
58
58
|
? update.headers
|
|
59
|
-
: new
|
|
59
|
+
: new Headers(update.headers);
|
|
60
60
|
h.forEach((v, k) => {
|
|
61
61
|
if (k.toLowerCase() === 'set-cookie') {
|
|
62
62
|
this.headers.append(k, v);
|
|
@@ -72,9 +72,9 @@ class HttpRequest {
|
|
|
72
72
|
this[k] = src[k];
|
|
73
73
|
});
|
|
74
74
|
if (src.headers) {
|
|
75
|
-
const h = src.headers instanceof
|
|
75
|
+
const h = src.headers instanceof Headers
|
|
76
76
|
? src.headers
|
|
77
|
-
: new
|
|
77
|
+
: new Headers(src.headers);
|
|
78
78
|
h.forEach((v, k) => {
|
|
79
79
|
if (k.toLowerCase() === 'set-cookie') {
|
|
80
80
|
this.headers.append(k, v);
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpResponse = void 0;
|
|
4
|
-
const common_1 = require("@opra/common");
|
|
5
4
|
class HttpResponse {
|
|
6
5
|
constructor(init) {
|
|
7
6
|
/**
|
|
8
7
|
* Returns true if response has body to be received
|
|
9
8
|
*/
|
|
10
9
|
this.hasBody = false;
|
|
11
|
-
this.headers = init?.headers instanceof
|
|
12
|
-
: new
|
|
10
|
+
this.headers = init?.headers instanceof Headers ? init?.headers
|
|
11
|
+
: new Headers(init?.headers);
|
|
13
12
|
this.status = init?.status || 200;
|
|
14
13
|
this.statusText = init?.statusText || 'OK';
|
|
15
14
|
this.url = init?.url || null;
|
|
16
15
|
this.ok = this.status >= 200 && this.status < 300;
|
|
17
16
|
this.body = init?.body;
|
|
18
17
|
this.hasBody = init?.body != null || !!init?.hasBody;
|
|
19
|
-
this.
|
|
18
|
+
this.totalCount = init?.totalCount;
|
|
20
19
|
}
|
|
21
20
|
clone(update) {
|
|
22
21
|
return new HttpResponse({ ...this, ...update });
|
package/cjs/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./client.js"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./client-error.js"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./
|
|
6
|
-
tslib_1.__exportStar(require("./http
|
|
7
|
-
tslib_1.__exportStar(require("./http
|
|
8
|
-
tslib_1.__exportStar(require("./http
|
|
9
|
-
tslib_1.__exportStar(require("./http
|
|
10
|
-
tslib_1.__exportStar(require("./
|
|
11
|
-
tslib_1.__exportStar(require("./
|
|
12
|
-
tslib_1.__exportStar(require("./http/http-types.js"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./collection-node.js"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./http-request.js"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./http-request-observable.js"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./http-response.js"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./http-service-base.js"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./singleton-node.js"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./types.js"), exports);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpSingletonNode = void 0;
|
|
4
|
-
const constants_js_1 = require("
|
|
4
|
+
const constants_js_1 = require("./constants.js");
|
|
5
5
|
const http_request_observable_js_1 = require("./http-request-observable.js");
|
|
6
6
|
class HttpSingletonNode {
|
|
7
7
|
constructor(context) {
|