typedrest 0.4.0 → 0.5.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.
Files changed (67) hide show
  1. package/README.md +2 -0
  2. package/endpoints/Endpoint.js +14 -27
  3. package/endpoints/Endpoint.ts +5 -5
  4. package/endpoints/EntryEndpoint.js +3 -14
  5. package/endpoints/generic/ETagEndpointBase.js +27 -42
  6. package/endpoints/generic/ElementEndpoint.js +39 -60
  7. package/endpoints/generic/GenericCollectionEndpoint.js +70 -44
  8. package/endpoints/generic/GenericCollectionEndpoint.test.ts +123 -0
  9. package/endpoints/generic/GenericCollectionEndpoint.ts +54 -1
  10. package/endpoints/generic/PartialResponse.js +33 -0
  11. package/endpoints/generic/PartialResponse.ts +28 -0
  12. package/endpoints/generic/index.js +2 -1
  13. package/endpoints/generic/index.ts +1 -0
  14. package/endpoints/index.js +3 -2
  15. package/endpoints/index.ts +1 -0
  16. package/endpoints/raw/BlobEndpoint.js +10 -27
  17. package/endpoints/raw/UploadEndpoint.js +11 -23
  18. package/endpoints/raw/UploadEndpoint.test.ts +1 -4
  19. package/endpoints/raw/UploadEndpoint.ts +1 -2
  20. package/endpoints/reactive/Delay.js +27 -0
  21. package/endpoints/reactive/Delay.ts +26 -0
  22. package/endpoints/reactive/GenericStreamingCollectionEndpoint.js +79 -0
  23. package/endpoints/reactive/GenericStreamingCollectionEndpoint.ts +73 -0
  24. package/endpoints/reactive/PollingEndpoint.js +67 -0
  25. package/endpoints/reactive/PollingEndpoint.test.ts +84 -0
  26. package/endpoints/reactive/PollingEndpoint.ts +66 -0
  27. package/endpoints/reactive/SseStreamingEndpoint.js +120 -0
  28. package/endpoints/reactive/SseStreamingEndpoint.test.ts +169 -0
  29. package/endpoints/reactive/SseStreamingEndpoint.ts +115 -0
  30. package/endpoints/reactive/StreamingCollectionEndpoint.js +23 -0
  31. package/endpoints/reactive/StreamingCollectionEndpoint.test.ts +110 -0
  32. package/endpoints/reactive/StreamingCollectionEndpoint.ts +20 -0
  33. package/endpoints/reactive/StreamingEndpoint.js +56 -0
  34. package/endpoints/reactive/StreamingEndpoint.test.ts +130 -0
  35. package/endpoints/reactive/StreamingEndpoint.ts +50 -0
  36. package/endpoints/reactive/index.js +22 -0
  37. package/endpoints/reactive/index.ts +5 -0
  38. package/endpoints/rpc/ActionEndpoint.js +3 -14
  39. package/endpoints/rpc/ConsumerEndpoint.js +5 -16
  40. package/endpoints/rpc/FunctionEndpoint.js +6 -17
  41. package/endpoints/rpc/ProducerEndpoint.js +4 -15
  42. package/endpoints/rpc/RpcEndpointBase.js +3 -14
  43. package/errors/DefaultErrorHandler.js +20 -22
  44. package/errors/DefaultErrorHandler.ts +12 -4
  45. package/errors/Errors.js +8 -2
  46. package/errors/Errors.ts +5 -0
  47. package/http/EntityStream.js +42 -0
  48. package/http/EntityStream.ts +40 -0
  49. package/http/HttpContentRange.js +39 -0
  50. package/http/HttpContentRange.ts +41 -0
  51. package/http/HttpHeader.js +6 -1
  52. package/http/HttpHeader.ts +6 -1
  53. package/http/HttpStatusCode.js +4 -1
  54. package/http/HttpStatusCode.ts +4 -1
  55. package/http/ResponseCache.js +4 -15
  56. package/http/RetryAfter.js +24 -0
  57. package/http/RetryAfter.ts +19 -0
  58. package/http/ServerSentEvents.js +140 -0
  59. package/http/ServerSentEvents.ts +145 -0
  60. package/http/index.js +5 -1
  61. package/http/index.ts +4 -0
  62. package/jest.config.js +1 -1
  63. package/links/AggregateLinkExtractor.js +7 -18
  64. package/links/HalLinkExtractor.js +9 -20
  65. package/links/HeaderLinkExtractor.js +5 -16
  66. package/links/HeaderLinkExtractor.ts +1 -1
  67. package/package.json +9 -9
@@ -0,0 +1,50 @@
1
+ import { Endpoint } from "../Endpoint";
2
+ import { HttpMethod, entityStream } from "../../http";
3
+
4
+ /**
5
+ * Endpoint for a stream of `TEntity`s using a persistent HTTP connection.
6
+ * @typeParam TEntity The type of individual elements in the stream.
7
+ */
8
+ export class StreamingEndpoint<TEntity> extends Endpoint {
9
+ /**
10
+ * Creates a new streaming endpoint.
11
+ * @param referrer The endpoint used to navigate to this one.
12
+ * @param relativeUri The URI of this endpoint relative to the `referrer`'s. Add a `./` prefix here to imply a trailing slash in the `referrer`'s URI.
13
+ * @param separator The character sequence used to detect that a new element starts in the HTTP stream.
14
+ */
15
+ constructor(referrer: Endpoint, relativeUri: URL | string, private readonly separator: string = "\n") {
16
+ super(referrer, relativeUri);
17
+ }
18
+
19
+ /**
20
+ * Provides a stream of `TEntity`s, keeping the HTTP connection open until the server closes it.
21
+ * @param signal Used to close the connection.
22
+ * @throws {@link errors!AuthenticationError}: {@link http!HttpStatusCode.Unauthorized}
23
+ * @throws {@link errors!AuthorizationError}: {@link http!HttpStatusCode.Forbidden}
24
+ * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
25
+ * @throws {@link errors!HttpError}: Other non-success status code
26
+ */
27
+ async *stream(signal?: AbortSignal): AsyncIterableIterator<TEntity> {
28
+ // NOTE: Abort the request when the consumer stops iterating, not just when the caller's signal fires.
29
+ const controller = new AbortController();
30
+ const onAbort = () => controller.abort();
31
+ signal?.addEventListener("abort", onAbort, { once: true });
32
+ if (signal?.aborted) controller.abort();
33
+
34
+ try {
35
+ const response = await this.send(HttpMethod.Get, controller.signal);
36
+ yield* entityStream<TEntity>(response, this.serializer, this.separator);
37
+ } catch (err) {
38
+ // Aborting is a regular way of ending the stream, not an error
39
+ if (!signal?.aborted) throw err;
40
+ } finally {
41
+ signal?.removeEventListener("abort", onAbort);
42
+ controller.abort();
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Provides a stream of `TEntity`s using {@link stream}.
48
+ */
49
+ [Symbol.asyncIterator]() { return this.stream(); }
50
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./PollingEndpoint"), exports);
18
+ __exportStar(require("./StreamingEndpoint"), exports);
19
+ __exportStar(require("./SseStreamingEndpoint"), exports);
20
+ __exportStar(require("./GenericStreamingCollectionEndpoint"), exports);
21
+ __exportStar(require("./StreamingCollectionEndpoint"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQWtDO0FBQ2xDLHNEQUFvQztBQUNwQyx5REFBdUM7QUFDdkMsdUVBQXFEO0FBQ3JELGdFQUE4QyJ9
@@ -0,0 +1,5 @@
1
+ export * from "./PollingEndpoint";
2
+ export * from "./StreamingEndpoint";
3
+ export * from "./SseStreamingEndpoint";
4
+ export * from "./GenericStreamingCollectionEndpoint";
5
+ export * from "./StreamingCollectionEndpoint";
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.ActionEndpoint = void 0;
13
4
  const RpcEndpointBase_1 = require("./RpcEndpointBase");
@@ -32,11 +23,9 @@ class ActionEndpoint extends RpcEndpointBase_1.RpcEndpointBase {
32
23
  * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
33
24
  * @throws {@link errors!HttpError}: Other non-success status code
34
25
  */
35
- invoke(signal) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- yield this.send(http_1.HttpMethod.Post, signal);
38
- });
26
+ async invoke(signal) {
27
+ await this.send(http_1.HttpMethod.Post, signal);
39
28
  }
40
29
  }
41
30
  exports.ActionEndpoint = ActionEndpoint;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBY3Rpb25FbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx1REFBb0Q7QUFFcEQscUNBQXdDO0FBRXhDOztHQUVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsaUNBQWU7SUFDL0M7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0csTUFBTSxDQUFDLE1BQW9COztZQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQztLQUFBO0NBQ0o7QUFyQkQsd0NBcUJDIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWN0aW9uRW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJBY3Rpb25FbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBb0Q7QUFFcEQscUNBQXdDO0FBRXhDOztHQUVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsaUNBQWU7SUFDL0M7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFvQjtRQUM3QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBckJELHdDQXFCQyJ9
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.ConsumerEndpoint = void 0;
13
4
  const RpcEndpointBase_1 = require("./RpcEndpointBase");
@@ -34,13 +25,11 @@ class ConsumerEndpoint extends RpcEndpointBase_1.RpcEndpointBase {
34
25
  * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
35
26
  * @throws {@link errors!HttpError}: Other non-success status code
36
27
  */
37
- invoke(entity, signal) {
38
- return __awaiter(this, void 0, void 0, function* () {
39
- yield this.send(http_1.HttpMethod.Post, signal, {
40
- [http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
41
- }, this.serializer.serialize(entity));
42
- });
28
+ async invoke(entity, signal) {
29
+ await this.send(http_1.HttpMethod.Post, signal, {
30
+ [http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
31
+ }, this.serializer.serialize(entity));
43
32
  }
44
33
  }
45
34
  exports.ConsumerEndpoint = ConsumerEndpoint;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3VtZXJFbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnN1bWVyRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUFvRDtBQUVwRDs7O0dBR0c7QUFDSCxNQUFhLGdCQUEwQixTQUFRLGlDQUFlO0lBQzFEOzs7O09BSUc7SUFDSCxZQUFZLFFBQWtCLEVBQUUsV0FBeUI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDRyxNQUFNLENBQUMsTUFBZSxFQUFFLE1BQW9COztZQUM5QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNyQyxDQUFDLGlCQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7YUFDbkUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7S0FBQTtDQUNKO0FBeEJELDRDQXdCQyJ9
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3VtZXJFbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnN1bWVyRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUFvRDtBQUVwRDs7O0dBR0c7QUFDSCxNQUFhLGdCQUEwQixTQUFRLGlDQUFlO0lBQzFEOzs7O09BSUc7SUFDSCxZQUFZLFFBQWtCLEVBQUUsV0FBeUI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWUsRUFBRSxNQUFvQjtRQUM5QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3JDLENBQUMsaUJBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUNuRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNKO0FBeEJELDRDQXdCQyJ9
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.FunctionEndpoint = void 0;
13
4
  const RpcEndpointBase_1 = require("./RpcEndpointBase");
@@ -36,14 +27,12 @@ class FunctionEndpoint extends RpcEndpointBase_1.RpcEndpointBase {
36
27
  * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
37
28
  * @throws {@link errors!HttpError}: Other non-success status code
38
29
  */
39
- invoke(entity, signal) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const response = yield this.send(http_1.HttpMethod.Post, signal, {
42
- [http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
43
- }, this.serializer.serialize(entity));
44
- return this.serializer.deserialize(yield response.text());
45
- });
30
+ async invoke(entity, signal) {
31
+ const response = await this.send(http_1.HttpMethod.Post, signal, {
32
+ [http_1.HttpHeader.ContentType]: this.serializer.supportedMediaTypes[0]
33
+ }, this.serializer.serialize(entity));
34
+ return this.serializer.deserialize(await response.text());
46
35
  }
47
36
  }
48
37
  exports.FunctionEndpoint = FunctionEndpoint;
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVuY3Rpb25FbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkZ1bmN0aW9uRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUFvRDtBQUVwRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBbUMsU0FBUSxpQ0FBZTtJQUNuRTs7OztPQUlHO0lBQ0gsWUFBWSxRQUFrQixFQUFFLFdBQXlCO1FBQ3JELEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLE1BQU0sQ0FBQyxNQUFlLEVBQUUsTUFBb0I7O1lBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQ3RELENBQUMsaUJBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQzthQUNuRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFdEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBVSxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7S0FBQTtDQUNKO0FBM0JELDRDQTJCQyJ9
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnVuY3Rpb25FbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkZ1bmN0aW9uRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUFvRDtBQUVwRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBbUMsU0FBUSxpQ0FBZTtJQUNuRTs7OztPQUlHO0lBQ0gsWUFBWSxRQUFrQixFQUFFLFdBQXlCO1FBQ3JELEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBZSxFQUFFLE1BQW9CO1FBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDdEQsQ0FBQyxpQkFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1NBQ25FLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFVLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNKO0FBM0JELDRDQTJCQyJ9
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.ProducerEndpoint = void 0;
13
4
  const RpcEndpointBase_1 = require("./RpcEndpointBase");
@@ -34,12 +25,10 @@ class ProducerEndpoint extends RpcEndpointBase_1.RpcEndpointBase {
34
25
  * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
35
26
  * @throws {@link errors!HttpError}: Other non-success status code
36
27
  */
37
- invoke(signal) {
38
- return __awaiter(this, void 0, void 0, function* () {
39
- const response = yield this.send(http_1.HttpMethod.Post, signal);
40
- return this.serializer.deserialize(yield response.text());
41
- });
28
+ async invoke(signal) {
29
+ const response = await this.send(http_1.HttpMethod.Post, signal);
30
+ return this.serializer.deserialize(await response.text());
42
31
  }
43
32
  }
44
33
  exports.ProducerEndpoint = ProducerEndpoint;
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjZXJFbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlByb2R1Y2VyRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUF3QztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFhLGdCQUEwQixTQUFRLGlDQUFlO0lBQzFEOzs7O09BSUc7SUFDSCxZQUFZLFFBQWtCLEVBQUUsV0FBeUI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDRyxNQUFNLENBQUMsTUFBb0I7O1lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFVLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztLQUFBO0NBQ0o7QUF2QkQsNENBdUJDIn0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjZXJFbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlByb2R1Y2VyRW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQW9EO0FBRXBELHFDQUF3QztBQUV4Qzs7O0dBR0c7QUFDSCxNQUFhLGdCQUEwQixTQUFRLGlDQUFlO0lBQzFEOzs7O09BSUc7SUFDSCxZQUFZLFFBQWtCLEVBQUUsV0FBeUI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQW9CO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFVLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNKO0FBdkJELDRDQXVCQyJ9
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.RpcEndpointBase = void 0;
13
4
  const Endpoint_1 = require("../Endpoint");
@@ -32,10 +23,8 @@ class RpcEndpointBase extends Endpoint_1.Endpoint {
32
23
  * @throws {@link errors!NotFoundError}: {@link http!HttpStatusCode.NotFound} or {@link http!HttpStatusCode.Gone}
33
24
  * @throws {@link errors!HttpError}: Other non-success status code
34
25
  */
35
- probe(signal) {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- yield this.send(http_1.HttpMethod.Options, signal);
38
- });
26
+ async probe(signal) {
27
+ await this.send(http_1.HttpMethod.Options, signal);
39
28
  }
40
29
  /**
41
30
  * Shows whether the server has indicated that the invoke method is currently allowed.
@@ -45,4 +34,4 @@ class RpcEndpointBase extends Endpoint_1.Endpoint {
45
34
  get invokeAllowed() { return this.isMethodAllowed(http_1.HttpMethod.Post); }
46
35
  }
47
36
  exports.RpcEndpointBase = RpcEndpointBase;
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnBjRW5kcG9pbnRCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUnBjRW5kcG9pbnRCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF1QztBQUN2QyxxQ0FBd0M7QUFFeEM7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsbUJBQVE7SUFDekM7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0csS0FBSyxDQUFDLE1BQW9COztZQUM1QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEQsQ0FBQztLQUFBO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN4RTtBQTVCRCwwQ0E0QkMifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnBjRW5kcG9pbnRCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUnBjRW5kcG9pbnRCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBDQUF1QztBQUN2QyxxQ0FBd0M7QUFFeEM7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsbUJBQVE7SUFDekM7Ozs7T0FJRztJQUNILFlBQVksUUFBa0IsRUFBRSxXQUF5QjtRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFvQjtRQUM1QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLGFBQWEsS0FBSyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDeEU7QUE1QkQsMENBNEJDIn0=
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.DefaultErrorHandler = void 0;
13
4
  const Errors_1 = require("./Errors");
@@ -26,20 +17,25 @@ class DefaultErrorHandler {
26
17
  * @throws {@link errors!TimeoutError}: {@link http!HttpStatusCode.RequestTimeout}
27
18
  * @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
28
19
  * @throws {@link errors!ConcurrencyError}: {@link http!HttpStatusCode.PreconditionFailed}
20
+ * @throws {@link errors!RangeNotSatisfiableError}: {@link http!HttpStatusCode.RangeNotSatisfiable}
29
21
  * @throws {@link errors!HttpError}: Other non-success status code
30
22
  */
31
- handle(response) {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- var _a, _b;
34
- if (response.ok)
35
- return;
36
- const contentType = response.headers.get(http_1.HttpHeader.ContentType);
37
- const jsonBody = ((contentType === null || contentType === void 0 ? void 0 : contentType.startsWith("application/json")) || (contentType === null || contentType === void 0 ? void 0 : contentType.includes("+json")))
38
- ? yield response.json()
39
- : undefined;
40
- const errorType = DefaultErrorHandler.errorType(response.status);
41
- throw new errorType((_b = (_a = jsonBody === null || jsonBody === void 0 ? void 0 : jsonBody.message) !== null && _a !== void 0 ? _a : jsonBody === null || jsonBody === void 0 ? void 0 : jsonBody.details) !== null && _b !== void 0 ? _b : `HTTP ${response.status} ${response.statusText}`, response.status, jsonBody);
42
- });
23
+ async handle(response) {
24
+ var _a, _b;
25
+ if (response.ok)
26
+ return;
27
+ const contentType = response.headers.get(http_1.HttpHeader.ContentType);
28
+ let jsonBody;
29
+ if ((contentType === null || contentType === void 0 ? void 0 : contentType.startsWith("application/json")) || (contentType === null || contentType === void 0 ? void 0 : contentType.includes("+json"))) {
30
+ try {
31
+ jsonBody = await response.json();
32
+ }
33
+ catch (_c) {
34
+ jsonBody = undefined;
35
+ }
36
+ }
37
+ const errorType = DefaultErrorHandler.errorType(response.status);
38
+ throw new errorType((_b = (_a = jsonBody === null || jsonBody === void 0 ? void 0 : jsonBody.message) !== null && _a !== void 0 ? _a : jsonBody === null || jsonBody === void 0 ? void 0 : jsonBody.details) !== null && _b !== void 0 ? _b : `HTTP ${response.status} ${response.statusText}`, response.status, jsonBody);
43
39
  }
44
40
  static errorType(status) {
45
41
  switch (status) {
@@ -58,10 +54,12 @@ class DefaultErrorHandler {
58
54
  return Errors_1.ConflictError;
59
55
  case http_1.HttpStatusCode.PreconditionFailed:
60
56
  return Errors_1.ConcurrencyError;
57
+ case http_1.HttpStatusCode.RangeNotSatisfiable:
58
+ return Errors_1.RangeNotSatisfiableError;
61
59
  default:
62
60
  return Errors_1.HttpError;
63
61
  }
64
62
  }
65
63
  }
66
64
  exports.DefaultErrorHandler = DefaultErrorHandler;
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EscUNBQTZKO0FBQzdKLGtDQUFxRDtBQUVyRDs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBQzVCOzs7Ozs7Ozs7OztPQVdHO0lBQ0csTUFBTSxDQUFDLFFBQWtCOzs7WUFDM0IsSUFBSSxRQUFRLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRXhCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUM7Z0JBQzVGLENBQUMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZCLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFaEIsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksU0FBUyxDQUNmLE1BQUEsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsT0FBTyxtQ0FBSSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsT0FBTyxtQ0FBSSxRQUFRLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUMxRixRQUFRLENBQUMsTUFBTSxFQUNmLFFBQVEsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7S0FBQTtJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBc0I7UUFDM0MsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNiLEtBQUsscUJBQWMsQ0FBQyxVQUFVO2dCQUMxQixPQUFPLHdCQUFlLENBQUM7WUFDM0IsS0FBSyxxQkFBYyxDQUFDLFlBQVk7Z0JBQzVCLE9BQU8sNEJBQW1CLENBQUM7WUFDL0IsS0FBSyxxQkFBYyxDQUFDLFNBQVM7Z0JBQ3pCLE9BQU8sMkJBQWtCLENBQUM7WUFDOUIsS0FBSyxxQkFBYyxDQUFDLFFBQVEsQ0FBQztZQUM3QixLQUFLLHFCQUFjLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxzQkFBYSxDQUFDO1lBQ3pCLEtBQUsscUJBQWMsQ0FBQyxjQUFjO2dCQUM5QixPQUFPLHFCQUFZLENBQUM7WUFDeEIsS0FBSyxxQkFBYyxDQUFDLFFBQVE7Z0JBQ3hCLE9BQU8sc0JBQWEsQ0FBQztZQUN6QixLQUFLLHFCQUFjLENBQUMsa0JBQWtCO2dCQUNsQyxPQUFPLHlCQUFnQixDQUFDO1lBQzVCO2dCQUNJLE9BQU8sa0JBQVMsQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBakRELGtEQWlEQyJ9
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRlZmF1bHRFcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUNBQXVMO0FBQ3ZMLGtDQUFxRDtBQUVyRDs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBQzVCOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBa0I7O1FBQzNCLElBQUksUUFBUSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRXhCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakUsSUFBSSxRQUFhLENBQUM7UUFDbEIsSUFBSSxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBSSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUM7Z0JBQ0QsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFBQyxXQUFNLENBQUM7Z0JBQ0wsUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUN6QixDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxJQUFJLFNBQVMsQ0FDZixNQUFBLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU8sbUNBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU8sbUNBQUksUUFBUSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFDMUYsUUFBUSxDQUFDLE1BQU0sRUFDZixRQUFRLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFzQjtRQUMzQyxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2IsS0FBSyxxQkFBYyxDQUFDLFVBQVU7Z0JBQzFCLE9BQU8sd0JBQWUsQ0FBQztZQUMzQixLQUFLLHFCQUFjLENBQUMsWUFBWTtnQkFDNUIsT0FBTyw0QkFBbUIsQ0FBQztZQUMvQixLQUFLLHFCQUFjLENBQUMsU0FBUztnQkFDekIsT0FBTywyQkFBa0IsQ0FBQztZQUM5QixLQUFLLHFCQUFjLENBQUMsUUFBUSxDQUFDO1lBQzdCLEtBQUsscUJBQWMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLHNCQUFhLENBQUM7WUFDekIsS0FBSyxxQkFBYyxDQUFDLGNBQWM7Z0JBQzlCLE9BQU8scUJBQVksQ0FBQztZQUN4QixLQUFLLHFCQUFjLENBQUMsUUFBUTtnQkFDeEIsT0FBTyxzQkFBYSxDQUFDO1lBQ3pCLEtBQUsscUJBQWMsQ0FBQyxrQkFBa0I7Z0JBQ2xDLE9BQU8seUJBQWdCLENBQUM7WUFDNUIsS0FBSyxxQkFBYyxDQUFDLG1CQUFtQjtnQkFDbkMsT0FBTyxpQ0FBd0IsQ0FBQztZQUNwQztnQkFDSSxPQUFPLGtCQUFTLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXpERCxrREF5REMifQ==
@@ -1,5 +1,5 @@
1
1
  import { ErrorHandler } from "./ErrorHandler";
2
- import { HttpError, BadRequestError, AuthenticationError, AuthorizationError, NotFoundError, TimeoutError, ConflictError, ConcurrencyError } from "./Errors";
2
+ import { HttpError, BadRequestError, AuthenticationError, AuthorizationError, NotFoundError, TimeoutError, ConflictError, ConcurrencyError, RangeNotSatisfiableError } from "./Errors";
3
3
  import { HttpStatusCode, HttpHeader } from "../http";
4
4
 
5
5
  /**
@@ -16,15 +16,21 @@ export class DefaultErrorHandler implements ErrorHandler {
16
16
  * @throws {@link errors!TimeoutError}: {@link http!HttpStatusCode.RequestTimeout}
17
17
  * @throws {@link errors!ConflictError}: {@link http!HttpStatusCode.Conflict}
18
18
  * @throws {@link errors!ConcurrencyError}: {@link http!HttpStatusCode.PreconditionFailed}
19
+ * @throws {@link errors!RangeNotSatisfiableError}: {@link http!HttpStatusCode.RangeNotSatisfiable}
19
20
  * @throws {@link errors!HttpError}: Other non-success status code
20
21
  */
21
22
  async handle(response: Response) {
22
23
  if (response.ok) return;
23
24
 
24
25
  const contentType = response.headers.get(HttpHeader.ContentType);
25
- const jsonBody = (contentType?.startsWith("application/json") || contentType?.includes("+json"))
26
- ? await response.json()
27
- : undefined;
26
+ let jsonBody: any;
27
+ if (contentType?.startsWith("application/json") || contentType?.includes("+json")) {
28
+ try {
29
+ jsonBody = await response.json();
30
+ } catch {
31
+ jsonBody = undefined;
32
+ }
33
+ }
28
34
 
29
35
  const errorType = DefaultErrorHandler.errorType(response.status);
30
36
  throw new errorType(
@@ -50,6 +56,8 @@ export class DefaultErrorHandler implements ErrorHandler {
50
56
  return ConflictError;
51
57
  case HttpStatusCode.PreconditionFailed:
52
58
  return ConcurrencyError;
59
+ case HttpStatusCode.RangeNotSatisfiable:
60
+ return RangeNotSatisfiableError;
53
61
  default:
54
62
  return HttpError;
55
63
  }
package/errors/Errors.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConcurrencyError = exports.ConflictError = exports.TimeoutError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.BadRequestError = exports.HttpError = void 0;
3
+ exports.RangeNotSatisfiableError = exports.ConcurrencyError = exports.ConflictError = exports.TimeoutError = exports.NotFoundError = exports.AuthorizationError = exports.AuthenticationError = exports.BadRequestError = exports.HttpError = void 0;
4
4
  /**
5
5
  * Thrown on HTTP response with a non-successful status code (4xx or 5xx).
6
6
  */
@@ -60,4 +60,10 @@ exports.ConflictError = ConflictError;
60
60
  class ConcurrencyError extends HttpError {
61
61
  }
62
62
  exports.ConcurrencyError = ConcurrencyError;
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsS0FBSztJQUNoQzs7Ozs7T0FLRztJQUNILFlBQVksT0FBZSxFQUFTLE1BQXNCLEVBQVMsSUFBVTtRQUN6RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEaUIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFNO0lBRTdFLENBQUM7Q0FDSjtBQVZELDhCQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsU0FBUztDQUFHO0FBQWpELDBDQUFpRDtBQUVqRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsU0FBUztDQUFHO0FBQXJELGtEQUFxRDtBQUVyRDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsU0FBUztDQUFHO0FBQXBELGdEQUFvRDtBQUVwRDs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLFNBQVM7Q0FBRztBQUEvQyxzQ0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxTQUFTO0NBQUc7QUFBOUMsb0NBQThDO0FBRTlDOztHQUVHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsU0FBUztDQUFHO0FBQS9DLHNDQUErQztBQUUvQzs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsU0FBUztDQUFHO0FBQWxELDRDQUFrRCJ9
63
+ /**
64
+ * Thrown on HTTP response for a requested range that the server can not provide (usually {@link http!HttpStatusCode.RangeNotSatisfiable}).
65
+ */
66
+ class RangeNotSatisfiableError extends HttpError {
67
+ }
68
+ exports.RangeNotSatisfiableError = RangeNotSatisfiableError;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsS0FBSztJQUNoQzs7Ozs7T0FLRztJQUNILFlBQVksT0FBZSxFQUFTLE1BQXNCLEVBQVMsSUFBVTtRQUN6RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEaUIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFNO0lBRTdFLENBQUM7Q0FDSjtBQVZELDhCQVVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGVBQWdCLFNBQVEsU0FBUztDQUFHO0FBQWpELDBDQUFpRDtBQUVqRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsU0FBUztDQUFHO0FBQXJELGtEQUFxRDtBQUVyRDs7R0FFRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsU0FBUztDQUFHO0FBQXBELGdEQUFvRDtBQUVwRDs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLFNBQVM7Q0FBRztBQUEvQyxzQ0FBK0M7QUFFL0M7O0dBRUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxTQUFTO0NBQUc7QUFBOUMsb0NBQThDO0FBRTlDOztHQUVHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsU0FBUztDQUFHO0FBQS9DLHNDQUErQztBQUUvQzs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsU0FBUztDQUFHO0FBQWxELDRDQUFrRDtBQUVsRDs7R0FFRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsU0FBUztDQUFHO0FBQTFELDREQUEwRCJ9
package/errors/Errors.ts CHANGED
@@ -49,3 +49,8 @@ export class ConflictError extends HttpError {}
49
49
  * Thrown on HTTP response for a failed precondition or mid-air collision (usually {@link http!HttpStatusCode.PreconditionFailed}).
50
50
  */
51
51
  export class ConcurrencyError extends HttpError {}
52
+
53
+ /**
54
+ * Thrown on HTTP response for a requested range that the server can not provide (usually {@link http!HttpStatusCode.RangeNotSatisfiable}).
55
+ */
56
+ export class RangeNotSatisfiableError extends HttpError {}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.entityStream = entityStream;
4
+ /**
5
+ * Exposes the body of a `Response` as a stream of deserialized entities.
6
+ * @typeParam TEntity The type of entity the stream provides.
7
+ * @param response The response to read the body from.
8
+ * @param serializer Controls the deserialization of the entities in the body.
9
+ * @param separator The character sequence used to detect that a new entity starts in the stream.
10
+ * @returns A stream that ends when the server closes the connection.
11
+ */
12
+ async function* entityStream(response, serializer, separator = "\n") {
13
+ if (!response.body)
14
+ return;
15
+ const reader = response.body.getReader();
16
+ const decoder = new TextDecoder();
17
+ let buffer = "";
18
+ try {
19
+ while (true) {
20
+ const { done, value } = await reader.read();
21
+ if (done)
22
+ break;
23
+ buffer += decoder.decode(value, { stream: true });
24
+ let index;
25
+ while ((index = buffer.indexOf(separator)) !== -1) {
26
+ const entity = buffer.slice(0, index);
27
+ buffer = buffer.slice(index + separator.length);
28
+ if (entity.trim())
29
+ yield serializer.deserialize(entity);
30
+ }
31
+ }
32
+ // Tolerate a missing separator after the last entity
33
+ buffer += decoder.decode();
34
+ if (buffer.trim())
35
+ yield serializer.deserialize(buffer);
36
+ }
37
+ finally {
38
+ // NOTE: Ignore errors here so that a failure that already ended the stream is not masked.
39
+ await reader.cancel().catch(() => { });
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5U3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRW50aXR5U3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsb0NBNkJDO0FBckNEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBVSxRQUFrQixFQUFFLFVBQXNCLEVBQUUsWUFBb0IsSUFBSTtJQUM3RyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBRTNCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFBSSxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxJQUFJO2dCQUFFLE1BQU07WUFFaEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFbEQsSUFBSSxLQUFhLENBQUM7WUFDbEIsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hELElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtvQkFBRSxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQVUsTUFBTSxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNMLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFBRSxNQUFNLFVBQVUsQ0FBQyxXQUFXLENBQVUsTUFBTSxDQUFDLENBQUM7SUFDckUsQ0FBQztZQUFTLENBQUM7UUFDUCwwRkFBMEY7UUFDMUYsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFDTCxDQUFDIn0=
@@ -0,0 +1,40 @@
1
+ import { Serializer } from "../serializers";
2
+
3
+ /**
4
+ * Exposes the body of a `Response` as a stream of deserialized entities.
5
+ * @typeParam TEntity The type of entity the stream provides.
6
+ * @param response The response to read the body from.
7
+ * @param serializer Controls the deserialization of the entities in the body.
8
+ * @param separator The character sequence used to detect that a new entity starts in the stream.
9
+ * @returns A stream that ends when the server closes the connection.
10
+ */
11
+ export async function* entityStream<TEntity>(response: Response, serializer: Serializer, separator: string = "\n"): AsyncIterableIterator<TEntity> {
12
+ if (!response.body) return;
13
+
14
+ const reader = response.body.getReader();
15
+ const decoder = new TextDecoder();
16
+ let buffer = "";
17
+
18
+ try {
19
+ while (true) {
20
+ const { done, value } = await reader.read();
21
+ if (done) break;
22
+
23
+ buffer += decoder.decode(value, { stream: true });
24
+
25
+ let index: number;
26
+ while ((index = buffer.indexOf(separator)) !== -1) {
27
+ const entity = buffer.slice(0, index);
28
+ buffer = buffer.slice(index + separator.length);
29
+ if (entity.trim()) yield serializer.deserialize<TEntity>(entity);
30
+ }
31
+ }
32
+
33
+ // Tolerate a missing separator after the last entity
34
+ buffer += decoder.decode();
35
+ if (buffer.trim()) yield serializer.deserialize<TEntity>(buffer);
36
+ } finally {
37
+ // NOTE: Ignore errors here so that a failure that already ended the stream is not masked.
38
+ await reader.cancel().catch(() => { });
39
+ }
40
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpContentRange = void 0;
4
+ const HttpHeader_1 = require("./HttpHeader");
5
+ /**
6
+ * Describes which subset of a set of elements a response contains.
7
+ */
8
+ class HttpContentRange {
9
+ /**
10
+ * Creates a new content range.
11
+ * @param unit The unit the range is expressed in, e.g. `elements`.
12
+ * @param from The index at which the data starts.
13
+ * @param to The index at which the data stops.
14
+ * @param length The total number of elements available on the server; `undefined` if unknown.
15
+ */
16
+ constructor(unit, from, to, length) {
17
+ this.unit = unit;
18
+ this.from = from;
19
+ this.to = to;
20
+ this.length = length;
21
+ }
22
+ /**
23
+ * Extracts the content range from a `Response`.
24
+ * @returns The content range; `undefined` if the response has no (valid) {@link HttpHeader.ContentRange} header.
25
+ */
26
+ static from(response) {
27
+ const header = response.headers.get(HttpHeader_1.HttpHeader.ContentRange);
28
+ if (!header)
29
+ return undefined;
30
+ const match = HttpContentRange.pattern.exec(header.trim());
31
+ if (!match)
32
+ return undefined;
33
+ const [, unit, from, to, length] = match;
34
+ return new HttpContentRange(unit, from === undefined ? undefined : parseInt(from), to === undefined ? undefined : parseInt(to), length === "*" ? undefined : parseInt(length));
35
+ }
36
+ }
37
+ exports.HttpContentRange = HttpContentRange;
38
+ HttpContentRange.pattern = /^(\w+) (?:(\d+)-(\d+)|\*)\/(\d+|\*)$/;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cENvbnRlbnRSYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkh0dHBDb250ZW50UmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBRTFDOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDekI7Ozs7OztPQU1HO0lBQ0gsWUFDb0IsSUFBWSxFQUNaLElBQWEsRUFDYixFQUFXLEVBQ1gsTUFBZTtRQUhmLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFTO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBUztRQUNYLFdBQU0sR0FBTixNQUFNLENBQVM7SUFDbkMsQ0FBQztJQUlEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBa0I7UUFDMUIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUU3QixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDekMsT0FBTyxJQUFJLGdCQUFnQixDQUN2QixJQUFJLEVBQ0osSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQy9DLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7O0FBbENMLDRDQW1DQztBQXBCMkIsd0JBQU8sR0FBRyxzQ0FBc0MsQ0FBQyJ9
@@ -0,0 +1,41 @@
1
+ import { HttpHeader } from "./HttpHeader";
2
+
3
+ /**
4
+ * Describes which subset of a set of elements a response contains.
5
+ */
6
+ export class HttpContentRange {
7
+ /**
8
+ * Creates a new content range.
9
+ * @param unit The unit the range is expressed in, e.g. `elements`.
10
+ * @param from The index at which the data starts.
11
+ * @param to The index at which the data stops.
12
+ * @param length The total number of elements available on the server; `undefined` if unknown.
13
+ */
14
+ constructor(
15
+ public readonly unit: string,
16
+ public readonly from?: number,
17
+ public readonly to?: number,
18
+ public readonly length?: number) {
19
+ }
20
+
21
+ private static readonly pattern = /^(\w+) (?:(\d+)-(\d+)|\*)\/(\d+|\*)$/;
22
+
23
+ /**
24
+ * Extracts the content range from a `Response`.
25
+ * @returns The content range; `undefined` if the response has no (valid) {@link HttpHeader.ContentRange} header.
26
+ */
27
+ static from(response: Response): HttpContentRange | undefined {
28
+ const header = response.headers.get(HttpHeader.ContentRange);
29
+ if (!header) return undefined;
30
+
31
+ const match = HttpContentRange.pattern.exec(header.trim());
32
+ if (!match) return undefined;
33
+
34
+ const [, unit, from, to, length] = match;
35
+ return new HttpContentRange(
36
+ unit,
37
+ from === undefined ? undefined : parseInt(from),
38
+ to === undefined ? undefined : parseInt(to),
39
+ length === "*" ? undefined : parseInt(length));
40
+ }
41
+ }
@@ -12,5 +12,10 @@ var HttpHeader;
12
12
  HttpHeader["ETag"] = "ETag";
13
13
  HttpHeader["IfMatch"] = "If-Match";
14
14
  HttpHeader["IfNoneMatch"] = "If-None-Match";
15
+ HttpHeader["Range"] = "Range";
16
+ HttpHeader["ContentRange"] = "Content-Range";
17
+ HttpHeader["AcceptRanges"] = "Accept-Ranges";
18
+ HttpHeader["RetryAfter"] = "Retry-After";
19
+ HttpHeader["LastEventId"] = "Last-Event-ID";
15
20
  })(HttpHeader || (exports.HttpHeader = HttpHeader = {}));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkh0dHBIZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxVQVVYO0FBVkQsV0FBWSxVQUFVO0lBQ2xCLDZDQUErQixDQUFBO0lBQy9CLDBDQUE0QixDQUFBO0lBQzVCLCtCQUFpQixDQUFBO0lBQ2pCLDZCQUFlLENBQUE7SUFDZixtQ0FBcUIsQ0FBQTtJQUNyQiwyQkFBYSxDQUFBO0lBQ2IsMkJBQWEsQ0FBQTtJQUNiLGtDQUFvQixDQUFBO0lBQ3BCLDJDQUE2QixDQUFBO0FBQ2pDLENBQUMsRUFWVyxVQUFVLDBCQUFWLFVBQVUsUUFVckIifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkh0dHBIZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxVQWVYO0FBZkQsV0FBWSxVQUFVO0lBQ2xCLDZDQUErQixDQUFBO0lBQy9CLDBDQUE0QixDQUFBO0lBQzVCLCtCQUFpQixDQUFBO0lBQ2pCLDZCQUFlLENBQUE7SUFDZixtQ0FBcUIsQ0FBQTtJQUNyQiwyQkFBYSxDQUFBO0lBQ2IsMkJBQWEsQ0FBQTtJQUNiLGtDQUFvQixDQUFBO0lBQ3BCLDJDQUE2QixDQUFBO0lBQzdCLDZCQUFlLENBQUE7SUFDZiw0Q0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBOEIsQ0FBQTtJQUM5Qix3Q0FBMEIsQ0FBQTtJQUMxQiwyQ0FBNkIsQ0FBQTtBQUNqQyxDQUFDLEVBZlcsVUFBVSwwQkFBVixVQUFVLFFBZXJCIn0=
@@ -7,5 +7,10 @@ export enum HttpHeader {
7
7
  Link = "Link",
8
8
  ETag = "ETag",
9
9
  IfMatch = "If-Match",
10
- IfNoneMatch = "If-None-Match"
10
+ IfNoneMatch = "If-None-Match",
11
+ Range = "Range",
12
+ ContentRange = "Content-Range",
13
+ AcceptRanges = "Accept-Ranges",
14
+ RetryAfter = "Retry-After",
15
+ LastEventId = "Last-Event-ID"
11
16
  }
@@ -6,6 +6,8 @@ var HttpStatusCode;
6
6
  HttpStatusCode[HttpStatusCode["OK"] = 200] = "OK";
7
7
  HttpStatusCode[HttpStatusCode["Created"] = 201] = "Created";
8
8
  HttpStatusCode[HttpStatusCode["Accepted"] = 202] = "Accepted";
9
+ HttpStatusCode[HttpStatusCode["NoContent"] = 204] = "NoContent";
10
+ HttpStatusCode[HttpStatusCode["PartialContent"] = 206] = "PartialContent";
9
11
  HttpStatusCode[HttpStatusCode["NotModified"] = 304] = "NotModified";
10
12
  HttpStatusCode[HttpStatusCode["BadRequest"] = 400] = "BadRequest";
11
13
  HttpStatusCode[HttpStatusCode["Unauthorized"] = 401] = "Unauthorized";
@@ -15,5 +17,6 @@ var HttpStatusCode;
15
17
  HttpStatusCode[HttpStatusCode["Conflict"] = 409] = "Conflict";
16
18
  HttpStatusCode[HttpStatusCode["Gone"] = 410] = "Gone";
17
19
  HttpStatusCode[HttpStatusCode["PreconditionFailed"] = 412] = "PreconditionFailed";
20
+ HttpStatusCode[HttpStatusCode["RangeNotSatisfiable"] = 416] = "RangeNotSatisfiable";
18
21
  })(HttpStatusCode || (exports.HttpStatusCode = HttpStatusCode = {}));
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFN0YXR1c0NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJIdHRwU3RhdHVzQ29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGNBYVg7QUFiRCxXQUFZLGNBQWM7SUFDdEIsaURBQVEsQ0FBQTtJQUNSLDJEQUFhLENBQUE7SUFDYiw2REFBYyxDQUFBO0lBQ2QsbUVBQWlCLENBQUE7SUFDakIsaUVBQWdCLENBQUE7SUFDaEIscUVBQWtCLENBQUE7SUFDbEIsK0RBQWUsQ0FBQTtJQUNmLDZEQUFjLENBQUE7SUFDZCx5RUFBb0IsQ0FBQTtJQUNwQiw2REFBYyxDQUFBO0lBQ2QscURBQVUsQ0FBQTtJQUNWLGlGQUF3QixDQUFBO0FBQzVCLENBQUMsRUFiVyxjQUFjLDhCQUFkLGNBQWMsUUFhekIifQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFN0YXR1c0NvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJIdHRwU3RhdHVzQ29kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGNBZ0JYO0FBaEJELFdBQVksY0FBYztJQUN0QixpREFBUSxDQUFBO0lBQ1IsMkRBQWEsQ0FBQTtJQUNiLDZEQUFjLENBQUE7SUFDZCwrREFBZSxDQUFBO0lBQ2YseUVBQW9CLENBQUE7SUFDcEIsbUVBQWlCLENBQUE7SUFDakIsaUVBQWdCLENBQUE7SUFDaEIscUVBQWtCLENBQUE7SUFDbEIsK0RBQWUsQ0FBQTtJQUNmLDZEQUFjLENBQUE7SUFDZCx5RUFBb0IsQ0FBQTtJQUNwQiw2REFBYyxDQUFBO0lBQ2QscURBQVUsQ0FBQTtJQUNWLGlGQUF3QixDQUFBO0lBQ3hCLG1GQUF5QixDQUFBO0FBQzdCLENBQUMsRUFoQlcsY0FBYyw4QkFBZCxjQUFjLFFBZ0J6QiJ9