@rdfc/http-utils-processor-ts 0.0.1-alpha.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Jens Pots
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # http-utils-processor-ts
2
+
3
+ [![Build and test with Bun](https://github.com/jenspots/http-utils-processor-ts/actions/workflows/build-test.yml/badge.svg)](https://github.com/jenspots/http-utils-processor-ts/actions/workflows/build-test.yml) [![Coverage Status](https://coveralls.io/repos/github/jenspots/http-utils-processor-ts/badge.svg?branch=main)](https://coveralls.io/github/jenspots/http-utils-processor-ts?branch=main) [![npm](https://img.shields.io/npm/v/@rdfc/http-utils-processor-ts.svg?style=popout)](https://npmjs.com/package/@rdfc/http-utils-processor-ts)
4
+
5
+ Connector Architecture Typescript processors for handling HTTP operations.
6
+
7
+ ## Functions
8
+
9
+ ### [`httpFetch`](./src/index.ts)
10
+
11
+ Build and execute an HTTP request. Writes the body of the response into a user specified channel.
12
+
13
+ - `url`: endpoints against which requests are made. Can be a single string or an array of strings. At the time of writing, the order is not respected and results are pushed down the stream randomly.
14
+ - `writer`: channel into which the resulting data is written.
15
+ - `options`: an optional parameter which may include:
16
+ - `method` the HTTP method to use. (default: `GET`)
17
+ - `headers`: an array of strings to be used as headers in the outgoing request. (default: `[]`)
18
+ - `acceptStatusCodes`: an array of strings which lists all the status codes deemed "successful". These strings contain either integer literals such as `"200"`, or ranges such as `"200-300"`. Note that range "`a-b`" is inclusive `a`, exclusive `b`. (default: `["200-300"]`)
19
+ - `closeOnEnd`: whether to close the writer stream on end. (default: `true`)
20
+ - `timeOutMilliseconds`: maximum time spend waiting for a response before throwing a `HttpFetchError.timeOutError` error. (default: `null`)
21
+ - `auth`: object describing which authentication flow to use, as well as its parameters. See below for more info. (default: `null`)
22
+ - `cron`: specify the interval at which the function should run as a crontab expression. If `null`, the function only executes once before returning. (default: `null`)
23
+ - `errorsAreFatal`: whether to exit when an error occurs in the fetch phase. Note that when an invalid configuration is provided, an error is still thrown since the function cannot execute at all. (default: `true`)
24
+
25
+ #### Authentication
26
+
27
+ This package supports some forms of authentication such as HTTP Basic Authentication and the OAuth 2.0 Password Grant. Additional methods may be implemented by extending the abstract [`Auth`](./src/auth/index.ts) class, after which you must define an additional [`AuthConfig`](./src/auth/index.ts) type and extend the [`Auth.from`](./src/auth/index.ts) static method.
28
+
29
+ ##### HTTP Basic Authentication
30
+
31
+ A simple flow which includes the base64 encoded username and password in each request.
32
+
33
+ - `type`: must be set to`basic`.
34
+ - `username`: your username as string.
35
+ - `password`: your plaintext password.
36
+
37
+ ##### OAuth 2.0 Password Grant
38
+
39
+ Before executing your request, a POST request is sent to the OAuth server in order to obtain a token. The result of which is embedded as a header inside the original request.
40
+
41
+ - `type`: must be set to `oauth2`
42
+ - `endpoint`: the URL of the OAuth 2.0 server.
43
+ - `username`: your username as string.
44
+ - `password`: your plaintext password.
45
+
46
+ Note that your credentials are not send to the server you specified in the `url` option of `httpFetch`, but only to the `endpoint` you specified above.
47
+
48
+ ## Errors
49
+
50
+ All errors thrown in `httpFetch` are of the `HttpFetchError` type, as defined in [`./src/error.ts`](./src/error.ts). This class contains a `HttpUtilsErrorType` enum value which reflects the nature of the error.
51
+
52
+ ## Tests
53
+
54
+ At the time of writing, tests should be executed using the Node.js runtime.
55
+
56
+ ```sh
57
+ $ npm run build
58
+ $ npm test
59
+ ```
60
+
61
+ Some tests interact with real online servers, and may therefore require credentials. These can be supplied inside a `.env` file at the root of the repository.
62
+
63
+ ```shell
64
+ # Requires OAuth 2.0 Password Grant
65
+ RINF_USERNAME=
66
+ RINF_PASSWORD=
67
+
68
+ # Requires HTTP Basic Auth
69
+ WoRMS_USERNAME=
70
+ WoRMS_PASSWORD=
71
+
72
+ # Needs to be `true` in order to execute
73
+ BLUE_BIKE=true
74
+ ```
75
+
76
+ Additional information can be found [here](./tests/README.md).
@@ -0,0 +1,28 @@
1
+ import { HttpUtilsError } from "../error.js";
2
+ export class HttpBasicAuth {
3
+ username;
4
+ password;
5
+ constructor(username, password) {
6
+ this.username = username;
7
+ this.password = password;
8
+ }
9
+ encode() {
10
+ return ("Basic " +
11
+ Buffer.from(`${this.username}:${this.password}`).toString("base64"));
12
+ }
13
+ async authorize(req) {
14
+ req.headers.set("Authorization", this.encode());
15
+ }
16
+ check(req) {
17
+ return req.headers.get("Authorization") == this.encode();
18
+ }
19
+ static from(config) {
20
+ if (!config.username) {
21
+ throw HttpUtilsError.illegalParameters("Username is required for HTTP Basic Auth.");
22
+ }
23
+ if (!config.password) {
24
+ throw HttpUtilsError.illegalParameters("Password is required for HTTP Basic Auth.");
25
+ }
26
+ return new HttpBasicAuth(config.username, config.password);
27
+ }
28
+ }
@@ -0,0 +1,14 @@
1
+ import { HttpUtilsError } from "../error.js";
2
+ import { HttpBasicAuth } from "./basic.js";
3
+ import { OAuth2PasswordAuth } from "./oauth/password.js";
4
+ export class Auth {
5
+ static from(config) {
6
+ if (config.type == "basic") {
7
+ return HttpBasicAuth.from(config);
8
+ }
9
+ if (config.type === "oauth2") {
10
+ return OAuth2PasswordAuth.from(config);
11
+ }
12
+ throw HttpUtilsError.illegalParameters(`Unknown auth type: '${config.type}'`);
13
+ }
14
+ }
@@ -0,0 +1,49 @@
1
+ import { HttpUtilsError } from "../../error.js";
2
+ export class OAuth2PasswordAuth {
3
+ username;
4
+ password;
5
+ endpoint;
6
+ constructor(username, password, endpoint) {
7
+ this.username = username;
8
+ this.password = password;
9
+ this.endpoint = endpoint;
10
+ }
11
+ async authorize(req) {
12
+ const authRequest = new Request(this.endpoint, {
13
+ body: new URLSearchParams({
14
+ grant_type: "password",
15
+ username: this.username,
16
+ password: this.password,
17
+ }),
18
+ method: "POST",
19
+ headers: {
20
+ "Content-Type": "application/x-www-form-urlencoded",
21
+ },
22
+ });
23
+ const authResponse = await fetch(authRequest);
24
+ if (!authResponse.ok) {
25
+ throw HttpUtilsError.oAuth2TokenError(authResponse.status);
26
+ }
27
+ const authData = (await authResponse.json());
28
+ const token = authData["access_token"];
29
+ if (!token) {
30
+ throw HttpUtilsError.unauthorizedError();
31
+ }
32
+ req.headers.set("Authorization", `Bearer ${authData.access_token}`);
33
+ }
34
+ check() {
35
+ throw new Error("Method not implemented.");
36
+ }
37
+ static from(auth) {
38
+ if (!auth.username) {
39
+ throw HttpUtilsError.illegalParameters("Username is required for OAuth2.0 Password Grant.");
40
+ }
41
+ if (!auth.password) {
42
+ throw HttpUtilsError.illegalParameters("Password is required for OAuth2.0 Password Grant.");
43
+ }
44
+ if (!auth.endpoint) {
45
+ throw HttpUtilsError.illegalParameters("Endpoint is required for OAuth2.0 Password Grant.");
46
+ }
47
+ return new OAuth2PasswordAuth(auth.username, auth.password, auth.endpoint);
48
+ }
49
+ }
package/lib/error.js ADDED
@@ -0,0 +1,59 @@
1
+ var HttpUtilsErrorType;
2
+ (function (HttpUtilsErrorType) {
3
+ HttpUtilsErrorType[HttpUtilsErrorType["StatusCodeNotAccepted"] = 0] = "StatusCodeNotAccepted";
4
+ HttpUtilsErrorType[HttpUtilsErrorType["NoBodyInResponse"] = 1] = "NoBodyInResponse";
5
+ HttpUtilsErrorType[HttpUtilsErrorType["InvalidStatusCodeRange"] = 2] = "InvalidStatusCodeRange";
6
+ HttpUtilsErrorType[HttpUtilsErrorType["InvalidHeaders"] = 3] = "InvalidHeaders";
7
+ HttpUtilsErrorType[HttpUtilsErrorType["GenericFetchError"] = 4] = "GenericFetchError";
8
+ HttpUtilsErrorType[HttpUtilsErrorType["IllegalParameters"] = 5] = "IllegalParameters";
9
+ HttpUtilsErrorType[HttpUtilsErrorType["ConnectionError"] = 6] = "ConnectionError";
10
+ HttpUtilsErrorType[HttpUtilsErrorType["TimeOutError"] = 7] = "TimeOutError";
11
+ HttpUtilsErrorType[HttpUtilsErrorType["UnauthorizedError"] = 8] = "UnauthorizedError";
12
+ HttpUtilsErrorType[HttpUtilsErrorType["CredentialIssue"] = 9] = "CredentialIssue";
13
+ HttpUtilsErrorType[HttpUtilsErrorType["OAuth2TokenError"] = 10] = "OAuth2TokenError";
14
+ HttpUtilsErrorType[HttpUtilsErrorType["InvalidCronExpression"] = 11] = "InvalidCronExpression";
15
+ })(HttpUtilsErrorType || (HttpUtilsErrorType = {}));
16
+ export class HttpUtilsError extends Error {
17
+ type;
18
+ constructor(message, type) {
19
+ super(message);
20
+ this.name = "HttpUtilsError";
21
+ this.type = type;
22
+ }
23
+ static statusCodeNotAccepted(statusCode) {
24
+ return new HttpUtilsError(`Status code ${statusCode} not accepted`, HttpUtilsErrorType.StatusCodeNotAccepted);
25
+ }
26
+ static noBodyInResponse() {
27
+ return new HttpUtilsError("No body in response", HttpUtilsErrorType.NoBodyInResponse);
28
+ }
29
+ static invalidStatusCodeRange() {
30
+ return new HttpUtilsError("Invalid status code range", HttpUtilsErrorType.InvalidStatusCodeRange);
31
+ }
32
+ static invalidHeaders() {
33
+ return new HttpUtilsError("Invalid headers", HttpUtilsErrorType.InvalidHeaders);
34
+ }
35
+ static genericFetchError(error) {
36
+ return new HttpUtilsError(`Generic fetch error: ${error.message}`, HttpUtilsErrorType.GenericFetchError);
37
+ }
38
+ static illegalParameters(info = null) {
39
+ return new HttpUtilsError(info ?? "Illegal parameters", HttpUtilsErrorType.IllegalParameters);
40
+ }
41
+ static connectionError() {
42
+ return new HttpUtilsError("Connection error", HttpUtilsErrorType.ConnectionError);
43
+ }
44
+ static timeOutError(ms) {
45
+ return new HttpUtilsError(`Request exceeded time limit of ${ms} ms`, HttpUtilsErrorType.TimeOutError);
46
+ }
47
+ static unauthorizedError() {
48
+ return new HttpUtilsError("Unauthorized", HttpUtilsErrorType.UnauthorizedError);
49
+ }
50
+ static credentialIssue() {
51
+ return new HttpUtilsError("Credentials are invalid or have insufficient access", HttpUtilsErrorType.CredentialIssue);
52
+ }
53
+ static oAuth2TokenError(code) {
54
+ return new HttpUtilsError(`An issue occurred while retrieving the OAuth2 token. Response with status code ${code}.`, HttpUtilsErrorType.OAuth2TokenError);
55
+ }
56
+ static invalidCronExpression() {
57
+ return new HttpUtilsError("The provided cron job expression is invalid", HttpUtilsErrorType.InvalidCronExpression);
58
+ }
59
+ }
package/lib/index.js ADDED
@@ -0,0 +1,98 @@
1
+ import { HttpUtilsError } from "./error.js";
2
+ import { timeout } from "./util/timeout.js";
3
+ import { statusCodeAccepted } from "./util/status.js";
4
+ import { parseHeaders } from "./util/headers.js";
5
+ import { Auth } from "./auth/index.js";
6
+ import { cronify } from "./util/cron.js";
7
+ class HttpFetchArgs {
8
+ method = "GET";
9
+ headers = [];
10
+ acceptStatusCodes = ["200-300"];
11
+ closeOnEnd = true;
12
+ bodyCanBeEmpty = false;
13
+ timeOutMilliseconds = null;
14
+ auth = null;
15
+ cron = null;
16
+ errorsAreFatal = true;
17
+ constructor(partial) {
18
+ Object.assign(this, partial);
19
+ }
20
+ getAuth() {
21
+ return this.auth ? Auth.from(this.auth) : null;
22
+ }
23
+ }
24
+ export async function httpFetch(url, writer, options = {}) {
25
+ url = (Array.isArray(url) ? url : [url]);
26
+ const args = new HttpFetchArgs(options);
27
+ const auth = args.getAuth();
28
+ if (!args.bodyCanBeEmpty && args.method == "HEAD") {
29
+ throw HttpUtilsError.illegalParameters("Cannot use HEAD method with bodyCanBeEmpty set to false");
30
+ }
31
+ if (args.closeOnEnd && args.cron !== null) {
32
+ throw HttpUtilsError.illegalParameters("Cannot close stream when using cron.");
33
+ }
34
+ statusCodeAccepted(0, args.acceptStatusCodes);
35
+ const headers = parseHeaders(args.headers);
36
+ const requests = url.map((x) => {
37
+ return new Request(x, {
38
+ method: options.method,
39
+ headers,
40
+ });
41
+ });
42
+ const executeRequest = async (req) => {
43
+ if (auth) {
44
+ await auth.authorize(req);
45
+ }
46
+ const fetchPromise = fetch(req).catch((err) => {
47
+ throw HttpUtilsError.genericFetchError(err);
48
+ });
49
+ const res = await timeout(args.timeOutMilliseconds, fetchPromise).catch((err) => {
50
+ if (err === "timeout") {
51
+ throw HttpUtilsError.timeOutError(args.timeOutMilliseconds);
52
+ }
53
+ else {
54
+ throw err;
55
+ }
56
+ });
57
+ if (!statusCodeAccepted(res.status, args.acceptStatusCodes)) {
58
+ if (res.status === 401 && auth) {
59
+ throw HttpUtilsError.credentialIssue();
60
+ }
61
+ else if (res.status === 401) {
62
+ throw HttpUtilsError.unauthorizedError();
63
+ }
64
+ else {
65
+ throw HttpUtilsError.statusCodeNotAccepted(res.status);
66
+ }
67
+ }
68
+ if (!res.body) {
69
+ if (!args.bodyCanBeEmpty) {
70
+ throw HttpUtilsError.noBodyInResponse();
71
+ }
72
+ if (args.closeOnEnd) {
73
+ await writer.end();
74
+ }
75
+ return;
76
+ }
77
+ const body = await res.text();
78
+ await writer.push(body);
79
+ };
80
+ let executeAllRequests = async () => {
81
+ const promises = requests.map(executeRequest).map((promise) => promise.catch((err) => {
82
+ if (args.errorsAreFatal) {
83
+ throw err;
84
+ }
85
+ else {
86
+ console.error(err);
87
+ }
88
+ }));
89
+ await Promise.all(promises);
90
+ if (args.closeOnEnd) {
91
+ await writer.end();
92
+ }
93
+ };
94
+ if (args.cron != null) {
95
+ executeAllRequests = cronify(executeAllRequests, args.cron);
96
+ }
97
+ return executeAllRequests;
98
+ }
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.object.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/error.ts","../node_modules/@treecg/connector-types/lib/types.d.ts","../node_modules/@treecg/connector-types/index.d.ts","../src/util/timeout.ts","../src/util/status.ts","../src/util/headers.ts","../src/auth/basic.ts","../src/auth/oauth/password.ts","../src/auth/index.ts","../node_modules/@types/luxon/src/zone.d.ts","../node_modules/@types/luxon/src/settings.d.ts","../node_modules/@types/luxon/src/_util.d.ts","../node_modules/@types/luxon/src/misc.d.ts","../node_modules/@types/luxon/src/duration.d.ts","../node_modules/@types/luxon/src/interval.d.ts","../node_modules/@types/luxon/src/datetime.d.ts","../node_modules/@types/luxon/src/info.d.ts","../node_modules/@types/luxon/src/luxon.d.ts","../node_modules/@types/luxon/index.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/cron/dist/constants.d.ts","../node_modules/cron/dist/types/utils.d.ts","../node_modules/cron/dist/types/cron.types.d.ts","../node_modules/cron/dist/time.d.ts","../node_modules/cron/dist/job.d.ts","../node_modules/cron/dist/index.d.ts","../src/util/cron.ts","../src/index.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/bun-types/fetch.d.ts","../node_modules/bun-types/globals.d.ts","../node_modules/bun-types/bun.d.ts","../node_modules/bun-types/overrides.d.ts","../node_modules/bun-types/ffi.d.ts","../node_modules/bun-types/test.d.ts","../node_modules/bun-types/html-rewriter.d.ts","../node_modules/bun-types/jsc.d.ts","../node_modules/bun-types/sqlite.d.ts","../node_modules/bun-types/wasm.d.ts","../node_modules/bun-types/deprecated.d.ts","../node_modules/bun-types/index.d.ts","../node_modules/@types/bun/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/parse5/dist/common/html.d.ts","../node_modules/parse5/dist/common/token.d.ts","../node_modules/parse5/dist/common/error-codes.d.ts","../node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../node_modules/parse5/dist/tokenizer/index.d.ts","../node_modules/parse5/dist/tree-adapters/interface.d.ts","../node_modules/parse5/dist/parser/open-element-stack.d.ts","../node_modules/parse5/dist/parser/formatting-element-list.d.ts","../node_modules/parse5/dist/parser/index.d.ts","../node_modules/parse5/dist/tree-adapters/default.d.ts","../node_modules/parse5/dist/serializer/index.d.ts","../node_modules/parse5/dist/common/foreign-content.d.ts","../node_modules/parse5/dist/index.d.ts","../node_modules/@types/tough-cookie/index.d.ts","../node_modules/@types/jsdom/base.d.ts","../node_modules/@types/jsdom/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/semver/classes/semver.d.ts","../node_modules/@types/semver/functions/parse.d.ts","../node_modules/@types/semver/functions/valid.d.ts","../node_modules/@types/semver/functions/clean.d.ts","../node_modules/@types/semver/functions/inc.d.ts","../node_modules/@types/semver/functions/diff.d.ts","../node_modules/@types/semver/functions/major.d.ts","../node_modules/@types/semver/functions/minor.d.ts","../node_modules/@types/semver/functions/patch.d.ts","../node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/@types/semver/functions/compare.d.ts","../node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/@types/semver/functions/sort.d.ts","../node_modules/@types/semver/functions/rsort.d.ts","../node_modules/@types/semver/functions/gt.d.ts","../node_modules/@types/semver/functions/lt.d.ts","../node_modules/@types/semver/functions/eq.d.ts","../node_modules/@types/semver/functions/neq.d.ts","../node_modules/@types/semver/functions/gte.d.ts","../node_modules/@types/semver/functions/lte.d.ts","../node_modules/@types/semver/functions/cmp.d.ts","../node_modules/@types/semver/functions/coerce.d.ts","../node_modules/@types/semver/classes/comparator.d.ts","../node_modules/@types/semver/classes/range.d.ts","../node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/@types/semver/ranges/valid.d.ts","../node_modules/@types/semver/ranges/outside.d.ts","../node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/@types/semver/ranges/subset.d.ts","../node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/@types/semver/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/types.d.ts","../node_modules/@types/supertest/lib/agent.d.ts","../node_modules/@types/supertest/lib/test.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","886e50ef125efb7878f744e86908884c0133e7a6d9d80013f421b0cd8fb2af94",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"6fa80f2a47643a4d538fa1a38ef090ffbb0dcdb02c16c1d5c166a1258e8deb69","865848faf322c62702a1be9487b84ad0c932dc7bc2729107b73785a3dbd57501","7d816381c8eaa3adc22b4fd0b4d0356c68a98c40fd7d246e0b3f7c42cd4a4840","95aef1d24d03cfd2e41780920995d237a4e31173e6b678a0958aa8da968fade7","592e3ac8c3e695bab8313992e5882a3a61f87bbc073eb1fbd8a2482635ee8d0e","a97ace907766db083bc0af21f8027ee6f0b159c7e11789b8b762bf3456cb9bf4","90c8f254b38eddf5953779d9f3d33759f91c5cd80e38e0f32c503ebccbc1f148","7653d859d469954b92d52e0f9f206f3452cb8745c0add0f74d83240034ea2d5d","20a91b038a6a0e355072e0107d6ee2edf77541836942950156633e7a38ee887d","5339f84dfcb7b04aa1c2b4d7713d6128039381447f07abc2e48d36685e2eef44","fb35a61a39c933d31b5b2549d906b2c932a1486622958586f662dbd4b2fe72e6","24e2728268be1ad2407bab004549d2753a49b2acb0f117a04c4e28ffb3ecdd4f","aff159b14eba59afe98a88fe6f57881ba02895fb9763512dda9083497bdcd0e6","6eb0f0a3e3774e1bde7e234eb8f4df875d1588de267ed91dce7aff84c4e5cf1e","1a83b9666a25134feb225c42a615f47518c073546e5338e8a1b49fd982c4c7d6","865c35f7d1a47be9b9cc3f807b01996bbd357d54f04179fb6b2517a47c6aee4e","dbca55391ae7dc370e10e2b5367af19a376267d8e7abf9eddcadb19293711396","46afbf46c3d62eac2afead3a2011d506637bf4f2c05e1fd64bbf7e2bb2947b7c","02f634f868780eaaff5e2d3fb4570dac8e7f018a8650bb9a0ac1deb4915df8d1","efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"a1d2988ad9d2aef7b9915a22b5e52c165c83a878f2851c35621409046bbe3c05","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"674168aa3db414ea0a19b2a31d901b2d49705c7a495e43ffdc96928543010f8c","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7424817d5eb498771e6d1808d726ec38f75d2eaf3fa359edd5c0c540c52725c1","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","37dc027f781c75f0f546e329cfac7cf92a6b289f42458f47a9adc25e516b6839",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","969fd293bffa578aee94f17b5ab015189eb2bd5a44db31c271d43d5dc52135a1","0f17f5f14a5f53e5709404b5b59fe816eaad15a469412b73330e6f69834234e0","de87f1a68f2aac235ed6462845c4ab3dd513c1e0c7693925a2684675498691a6","713bdf614b26168376e48d387dce2d468fcafced8692a5a8e149e882c4e7617c","a8774a5d2515df058567b6e76ecc48ad86ec36834fae0b40a1a2c3aa1993670c","99b404de29efde207e00eeea06941c1cc1ba10096745834e5667c927acaa085d","1b5290396beaf2f025127d29091ed33686b4f561f4c63690e5c8bb8798742844","5f30a40184ffc1dbde62d6fdbf8aedf1b0b51aa34073ee61a89919323569c738","4489c6a9fde8934733aa7df6f7911461ee6e9e4ad092736bd416f6b2cc20b2c6","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","8041cfce439ff29d339742389de04c136e3029d6b1817f07b2d7fcbfb7534990","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9d38964b57191567a14b396422c87488cecd48f405c642daa734159875ee81d9","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","f7163a5d37d21f636f6a5cd1c064ce95fada21917859a64b6cc49a8b6fd5c1a8","2ad734419abf786a4f588613fcbc275d189bf1e9187bc47e4fe3e9b41db36960",{"version":"c69bf2d411012f625d786d807fa30d28cffa2cebd7de71c726c09d9cefbba132","affectsGlobalScope":true},{"version":"9763f8f6b6dd2d6691cc5093554327909c6a2a24ff10dc9f0de919f374e369f6","affectsGlobalScope":true},{"version":"0c9b84afaa8b1884d8410b9fe96bbf540873f61a34f08765b3148f2bdf08bf5c","affectsGlobalScope":true},"e0e5f668821e1f52df76d3b7daabea94c923cbd9bc9f5ceffafbdcb99a15b4f8",{"version":"6ecf0b89c8bda9c50724e141d05c273838b69d0aaaaa3040708b9035b03944aa","affectsGlobalScope":true},{"version":"9455036a6508a52bf89bf5f1c6336d78e59c38c611935527def064be133beb44","affectsGlobalScope":true},"ebe7a18702f49144d9b2ce3dc72befd119bcab42464cd65a69d9a7d51c4ec363","8ea350a230c141588239d32035b660a19f8754fc78271eb502b884c0a4cba987",{"version":"4a963520a92f371d785164e36053b6b77020ff9fc5be3221a4aa3dc37b7fc9dc","affectsGlobalScope":true},{"version":"254f4f32a7e75ca8e0ce9e9f8cea5a152cdab660569d40fe319b86df3116bec2","affectsGlobalScope":true},"b52c121cd491cfdbea04c3a77d23e193c23cb411e7598a04ba13a4592842fe2f","37be812b06e518320ba82e2aff3ac2ca37370a9df917db708f081b9043fa3315","0dc6940ff35d845686a118ee7384713a84024d60ef26f25a2f87992ec7ddbd64","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec",{"version":"5ab630d466ac55baa6d32820378098404fc18ba9da6f7bc5df30c5dbb1cffae8","affectsGlobalScope":true},"3411c785dbe8fd42f7d644d1e05a7e72b624774a08a9356479754999419c3c5a","8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","33f3795a4617f98b1bb8dac36312119d02f31897ae75436a1e109ce042b48ee8","2850c9c5dc28d34ad5f354117d0419f325fc8932d2a62eadc4dc52c018cd569b","c753948f7e0febe7aa1a5b71a714001a127a68861309b2c4127775aa9b6d4f24","3e7a40e023e1d4a9eef1a6f08a3ded8edacb67ae5fce072014205d730f717ba5","a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","382100b010774614310d994bbf16cc9cd291c14f0d417126c7a7cfad1dc1d3f8","91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","4fdf56315340bd1770eb52e1601c3a98e45b1d207202831357e99ce29c35b55c","927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","be6fd74528b32986fbf0cd2cfa9192a5ed7f369060b32a7adcb0c8d055708e61","03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","318c82cc1e13da55e8c60d7e1bdc422a0679d675ad048b6d5022a47f57d23e3f",{"version":"af11413ffc8c34a2a2475cb9d2982b4cc87a9317bf474474eedaacc4aaab4582","affectsGlobalScope":true},"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","b0f9ef6423d6b29dde29fd60d83d215796b2c1b76bfca28ac374ae18702cfb8e","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","6dd20f5b39d29f0dabf7798cdbf772c03c5d6721e60a09e7706afddf5599fad9","2f0bdc82a81caabe88fb5d1f450c2999d29314faa0cb451d10db47cf15a8ef69","da318e126ac39362c899829547cc8ee24fa3e8328b52cdd27e34173cf19c7941","24bd01a91f187b22456c7171c07dbf44f3ad57ebd50735aab5c13fa23d7114b4","4738eefeaaba4d4288a08c1c226a76086095a4d5bcc7826d2564e7c29da47671","dbec715e9e82df297e49e3ed0029f6151aa40517ebfd6fcdba277a8a2e1d3a1b","b41acc03ca470ecdedc6bf211bc8fdc6cafe2f6ab68b75949aad8eaf9df71912","8f75e211a2e83ff216eb66330790fb6412dcda2feb60c4f165c903cf375633ee","5adcc724bcfdac3c86ace088e93e1ee605cbe986be5e63ddf04d05b4afdeee71","a9155c6deffc2f6a69e69dc12f0950ba1b4db03b3d26ab7a523efc89149ce979","c99faf0d7cb755b0424a743ea0cbf195606bf6cd023b5d10082dba8d3714673c","21942c5a654cc18ffc2e1e063c8328aca3b127bbf259c4e97906d4696e3fa915","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"root":[70,[73,78],182,183],"options":{"allowSyntheticDefaultImports":true,"downlevelIteration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":7,"outDir":"./","preserveConstEnums":true,"removeComments":true,"skipLibCheck":true,"strict":true,"strictFunctionTypes":false,"strictPropertyInitialization":false,"target":9},"fileIdsList":[[184,193,201],[193,201],[193,201,211],[71,193,201],[184,185,186,187,188,193,201],[184,186,193,201],[193,201,202],[139,175,193,201],[193,201,206],[193,201,207],[193,201,213,216],[138,170,175,193,201,230,231,233],[193,201,232],[87,193,201],[80,193,201],[79,81,83,84,88,193,201],[81,82,85,193,201],[79,82,193,201],[81,83,85,193,201],[79,80,82,83,84,85,86,193,201],[79,85,193,201],[81,193,201],[89,193,201],[125,193,201],[126,131,159,193,201],[127,138,139,146,156,167,193,201],[127,128,138,146,193,201],[129,168,193,201],[130,131,139,147,193,201],[131,156,164,193,201],[132,134,138,146,193,201],[125,133,193,201],[134,135,193,201],[138,193,201],[136,138,193,201],[125,138,193,201],[138,139,140,156,167,193,201],[138,139,140,153,156,159,193,194,201],[123,126,172,193,201],[134,138,141,146,156,167,193,201],[138,139,141,142,146,156,164,167,193,201],[141,143,156,164,167,193,201],[89,90,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,193,201],[138,144,193,201],[145,167,172,193,201],[134,138,146,156,193,201],[147,193,201],[148,193,201],[125,149,193,201],[150,166,172,193,201],[151,193,201],[152,193,201],[138,153,154,193,201],[153,155,168,170,193,201],[126,138,156,157,158,159,193,201],[126,156,158,193,201],[156,157,193,201],[159,193,201],[160,193,201],[125,156,193,201],[138,162,163,193,201],[162,163,193,201],[131,146,156,164,193,194,201],[165,193,201],[146,166,193,201],[126,141,152,167,193,201],[131,168,193,201],[156,169,193,201],[145,170,193,201],[171,193,201],[126,131,138,140,149,156,167,170,172,193,201],[156,173,193,201],[193,201,236,275],[193,201,236,260,275],[193,201,275],[193,201,236],[193,201,236,261,275],[193,201,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274],[193,201,261,275],[193,201,283],[193,201,204,235,277,279,284],[142,146,156,164,175,193,194,201],[126,139,141,142,143,146,156,193,201,235,278,279,280,281,282],[141,156,193,201,283],[126,139,193,201,278,279],[167,193,201,278],[193,201,284,285,286,287],[193,201,284,285,288],[193,201,284,285],[141,142,146,193,201,235,284],[138,141,143,156,164,167,173,175,193,194,201],[193,201,289],[131,168,201],[193],[123,193,201],[123,131,149,156,159,168,172,190,191,193,201],[175,190,191,192,193,194,195,196,197,198,199,200,201],[140,164,193,201],[193,196,201],[88,178,179,180,193,201],[88,178,179,193,201],[88,178,193,201],[88,127,175,176,177,180,193,201],[193,201,209,215],[193,201,213],[193,201,210,214],[193,201,219],[193,201,218,219],[193,201,218],[193,201,218,219,220,222,223,226,227,228,229],[193,201,219,223],[193,201,218,219,220,222,223,224,225],[193,201,218,223],[193,201,223,227],[193,201,219,220,221],[193,201,220],[193,201,218,219,223],[193,201,212],[100,104,167,193,201],[100,156,167,193,201],[95,193,201],[97,100,164,167,193,194,201],[146,164,193,194,201],[175,193,201],[95,175,193,201],[97,100,146,167,193,201],[92,93,96,99,126,138,156,167,193,201],[92,98,193,201],[96,100,126,159,167,175,193,201],[126,175,193,201],[116,126,175,193,201],[94,95,175,193,201],[100,193,201],[94,95,96,97,98,99,100,101,102,104,105,106,107,108,109,110,111,112,113,114,115,117,118,119,120,121,122,193,201],[100,107,108,193,201],[98,100,108,109,193,201],[99,193,201],[92,95,100,193,201],[100,104,108,109,193,201],[104,193,201],[98,100,103,167,193,201],[92,97,98,100,104,107,193,201],[126,156,193,201],[95,100,116,126,172,175,193,201],[70,78,193,201],[70,76,77,193,201],[70,72,73,74,75,78,182,193,201],[70,181,193,201],[70,193,201]],"referencedMap":[[186,1],[184,2],[209,2],[212,3],[211,2],[72,4],[71,2],[189,5],[185,1],[187,6],[188,1],[203,7],[204,2],[205,8],[206,2],[207,9],[208,10],[217,11],[232,12],[233,13],[234,2],[88,14],[81,15],[85,16],[83,17],[86,18],[84,19],[87,20],[82,2],[80,21],[79,22],[235,2],[89,23],[90,23],[125,24],[126,25],[127,26],[128,27],[129,28],[130,29],[131,30],[132,31],[133,32],[134,33],[135,33],[137,34],[136,35],[138,36],[139,37],[140,38],[124,39],[174,2],[141,40],[142,41],[143,42],[175,43],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,53],[155,54],[156,55],[158,56],[157,57],[159,58],[160,59],[161,60],[162,61],[163,62],[164,63],[165,64],[166,65],[167,66],[168,67],[169,68],[170,69],[171,70],[172,71],[173,72],[260,73],[261,74],[236,75],[239,75],[258,73],[259,73],[249,73],[248,76],[246,73],[241,73],[254,73],[252,73],[256,73],[240,73],[253,73],[257,73],[242,73],[243,73],[255,73],[237,73],[244,73],[245,73],[247,73],[251,73],[262,77],[250,73],[238,73],[275,78],[274,2],[269,77],[271,79],[270,77],[263,77],[264,77],[266,77],[268,77],[272,79],[273,79],[265,79],[267,79],[276,2],[284,80],[277,2],[280,81],[282,82],[283,83],[278,84],[281,85],[279,86],[288,87],[286,88],[287,89],[285,90],[231,2],[190,91],[289,2],[290,92],[91,2],[193,93],[201,94],[191,95],[195,2],[192,96],[197,2],[202,97],[198,2],[194,98],[199,2],[196,99],[200,2],[210,2],[176,2],[181,100],[180,101],[179,102],[178,103],[177,2],[216,104],[214,105],[215,106],[220,107],[229,108],[218,2],[219,109],[230,110],[225,111],[226,112],[224,113],[228,114],[222,115],[221,116],[227,117],[223,108],[213,118],[68,2],[69,2],[12,2],[13,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[4,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[5,2],[33,2],[34,2],[35,2],[36,2],[6,2],[40,2],[37,2],[38,2],[39,2],[41,2],[7,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[8,2],[52,2],[49,2],[50,2],[51,2],[53,2],[9,2],[54,2],[55,2],[56,2],[59,2],[57,2],[58,2],[60,2],[61,2],[10,2],[1,2],[62,2],[11,2],[66,2],[64,2],[63,2],[67,2],[65,2],[107,119],[114,120],[106,119],[121,121],[98,122],[97,123],[120,124],[115,125],[118,126],[100,127],[99,128],[95,129],[94,130],[117,131],[96,132],[101,133],[102,2],[105,133],[92,2],[123,134],[122,133],[109,135],[110,136],[112,137],[108,138],[111,139],[116,124],[103,140],[104,141],[113,142],[93,143],[119,144],[76,145],[78,146],[77,145],[70,2],[183,147],[182,148],[75,149],[74,149],[73,2]],"exportedModulesMap":[[186,1],[184,2],[209,2],[212,3],[211,2],[72,4],[71,2],[189,5],[185,1],[187,6],[188,1],[203,7],[204,2],[205,8],[206,2],[207,9],[208,10],[217,11],[232,12],[233,13],[234,2],[88,14],[81,15],[85,16],[83,17],[86,18],[84,19],[87,20],[82,2],[80,21],[79,22],[235,2],[89,23],[90,23],[125,24],[126,25],[127,26],[128,27],[129,28],[130,29],[131,30],[132,31],[133,32],[134,33],[135,33],[137,34],[136,35],[138,36],[139,37],[140,38],[124,39],[174,2],[141,40],[142,41],[143,42],[175,43],[144,44],[145,45],[146,46],[147,47],[148,48],[149,49],[150,50],[151,51],[152,52],[153,53],[154,53],[155,54],[156,55],[158,56],[157,57],[159,58],[160,59],[161,60],[162,61],[163,62],[164,63],[165,64],[166,65],[167,66],[168,67],[169,68],[170,69],[171,70],[172,71],[173,72],[260,73],[261,74],[236,75],[239,75],[258,73],[259,73],[249,73],[248,76],[246,73],[241,73],[254,73],[252,73],[256,73],[240,73],[253,73],[257,73],[242,73],[243,73],[255,73],[237,73],[244,73],[245,73],[247,73],[251,73],[262,77],[250,73],[238,73],[275,78],[274,2],[269,77],[271,79],[270,77],[263,77],[264,77],[266,77],[268,77],[272,79],[273,79],[265,79],[267,79],[276,2],[284,80],[277,2],[280,81],[282,82],[283,83],[278,84],[281,85],[279,86],[288,87],[286,88],[287,89],[285,90],[231,2],[190,91],[289,2],[290,92],[91,2],[193,93],[201,94],[191,95],[195,2],[192,96],[197,2],[202,97],[198,2],[194,98],[199,2],[196,99],[200,2],[210,2],[176,2],[181,100],[180,101],[179,102],[178,103],[177,2],[216,104],[214,105],[215,106],[220,107],[229,108],[218,2],[219,109],[230,110],[225,111],[226,112],[224,113],[228,114],[222,115],[221,116],[227,117],[223,108],[213,118],[68,2],[69,2],[12,2],[13,2],[15,2],[14,2],[2,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[3,2],[24,2],[4,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[5,2],[33,2],[34,2],[35,2],[36,2],[6,2],[40,2],[37,2],[38,2],[39,2],[41,2],[7,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[8,2],[52,2],[49,2],[50,2],[51,2],[53,2],[9,2],[54,2],[55,2],[56,2],[59,2],[57,2],[58,2],[60,2],[61,2],[10,2],[1,2],[62,2],[11,2],[66,2],[64,2],[63,2],[67,2],[65,2],[107,119],[114,120],[106,119],[121,121],[98,122],[97,123],[120,124],[115,125],[118,126],[100,127],[99,128],[95,129],[94,130],[117,131],[96,132],[101,133],[102,2],[105,133],[92,2],[123,134],[122,133],[109,135],[110,136],[112,137],[108,138],[111,139],[116,124],[103,140],[104,141],[113,142],[93,143],[119,144],[76,145],[78,146],[77,145],[70,2],[183,147],[182,148],[75,149],[74,149],[73,2]],"semanticDiagnosticsPerFile":[186,184,209,212,211,72,71,189,185,187,188,203,204,205,206,207,208,217,232,233,234,88,81,85,83,86,84,87,82,80,79,235,89,90,125,126,127,128,129,130,131,132,133,134,135,137,136,138,139,140,124,174,141,142,143,175,144,145,146,147,148,149,150,151,152,153,154,155,156,158,157,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,260,261,236,239,258,259,249,248,246,241,254,252,256,240,253,257,242,243,255,237,244,245,247,251,262,250,238,275,274,269,271,270,263,264,266,268,272,273,265,267,276,284,277,280,282,283,278,281,279,288,286,287,285,231,190,289,290,91,193,201,191,195,192,197,202,198,194,199,196,200,210,176,181,180,179,178,177,216,214,215,220,229,218,219,230,225,226,224,228,222,221,227,223,213,68,69,12,13,15,14,2,16,17,18,19,20,21,22,23,3,24,4,25,29,26,27,28,30,31,32,5,33,34,35,36,6,40,37,38,39,41,7,42,47,48,43,44,45,46,8,52,49,50,51,53,9,54,55,56,59,57,58,60,61,10,1,62,11,66,64,63,67,65,107,114,106,121,98,97,120,115,118,100,99,95,94,117,96,101,102,105,92,123,122,109,110,112,108,111,116,103,104,113,93,119,76,78,77,70,183,182,75,74,73]},"version":"5.4.2"}
@@ -0,0 +1,17 @@
1
+ import { CronJob } from "cron.js";
2
+ import { HttpUtilsError } from "../error.js";
3
+ export function cronify(func, cronExpression) {
4
+ return async () => {
5
+ try {
6
+ CronJob.from({
7
+ cronTime: cronExpression,
8
+ onTick: func,
9
+ start: true,
10
+ timeZone: null,
11
+ });
12
+ }
13
+ catch (e) {
14
+ throw HttpUtilsError.invalidCronExpression();
15
+ }
16
+ };
17
+ }
@@ -0,0 +1,12 @@
1
+ import { HttpUtilsError } from "../error.js";
2
+ export function parseHeaders(headers) {
3
+ const result = new Headers();
4
+ headers.forEach((header) => {
5
+ const [key, value] = header.split(":");
6
+ if (!key || !value) {
7
+ throw HttpUtilsError.invalidHeaders();
8
+ }
9
+ result.append(key.trim(), value.trim());
10
+ });
11
+ return result;
12
+ }
@@ -0,0 +1,19 @@
1
+ import { HttpUtilsError } from "../error.js";
2
+ export function statusCodeAccepted(statusCode, acceptStatusCodes) {
3
+ return acceptStatusCodes
4
+ .map((it) => {
5
+ if (it.includes("-")) {
6
+ const [start, end] = it.split("-").map(Number);
7
+ if ([start, end].some(isNaN)) {
8
+ throw HttpUtilsError.invalidStatusCodeRange();
9
+ }
10
+ return start <= statusCode && statusCode < end;
11
+ }
12
+ const status = Number(it);
13
+ if (isNaN(status)) {
14
+ throw HttpUtilsError.invalidStatusCodeRange();
15
+ }
16
+ return statusCode === status;
17
+ })
18
+ .includes(true);
19
+ }
@@ -0,0 +1,14 @@
1
+ export async function timeout(ms, promise) {
2
+ if (ms === null) {
3
+ return promise;
4
+ }
5
+ let timeoutHandle;
6
+ const timeoutPromise = new Promise((_, reject) => {
7
+ timeoutHandle = setTimeout(() => reject(), ms);
8
+ }).catch(() => {
9
+ throw "timeout";
10
+ });
11
+ return Promise.race([promise, timeoutPromise]).finally(() => {
12
+ clearTimeout(timeoutHandle);
13
+ });
14
+ }
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@rdfc/http-utils-processor-ts",
3
+ "version": "0.0.1-alpha.2",
4
+ "description": "HTTP util functions to be used within the Connector Architecture",
5
+ "type": "module",
6
+ "scripts": {
7
+ "build": "tsc && tsc-alias",
8
+ "test": "jest --coverage",
9
+ "pretest": "tsc && tsc-alias",
10
+ "prepare": "husky",
11
+ "prepublishOnly": "npm run build"
12
+ },
13
+ "files": [
14
+ "lib/**/*",
15
+ "./processors.ttl"
16
+ ],
17
+ "keywords": [
18
+ "HTTP",
19
+ "Connector Architecture"
20
+ ],
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/rdf-connect/http-utils-processor-ts.git"
24
+ },
25
+ "author": "Jens Pots",
26
+ "devDependencies": {
27
+ "@ajuvercr/js-runner": "^0.1.14",
28
+ "@jest/globals": "^29.7.0",
29
+ "@types/bun": "^1.0.5",
30
+ "@types/jest": "^29.5.12",
31
+ "@types/jsdom": "^21.1.6",
32
+ "@types/supertest": "^6.0.2",
33
+ "@typescript-eslint/eslint-plugin": "^7.0.1",
34
+ "@typescript-eslint/parser": "^7.3.1",
35
+ "eslint": "^8.56.0",
36
+ "eslint-config-prettier": "^9.1.0",
37
+ "jsdom": "^24.0.0",
38
+ "prettier": "3.2.5",
39
+ "supertest": "^6.3.4",
40
+ "ts-jest": "^29.1.2",
41
+ "tsc-alias": "^1.8.8"
42
+ },
43
+ "peerDependencies": {
44
+ "typescript": "^5.0.0"
45
+ },
46
+ "dependencies": {
47
+ "@node-oauth/express-oauth-server": "^4.0.0",
48
+ "@node-oauth/oauth2-server": "^5.1.0",
49
+ "@treecg/connector-types": "^1.2.1",
50
+ "cron": "^3.1.6",
51
+ "dotenv": "^16.4.5",
52
+ "husky": "^9.0.11",
53
+ "jest": "^29.7.0",
54
+ "lint-staged": "^15.2.2",
55
+ "ts-node": "^10.9.2"
56
+ }
57
+ }
package/processors.ttl ADDED
@@ -0,0 +1,102 @@
1
+ @prefix js: <https://w3id.org/conn/js#> .
2
+ @prefix fno: <https://w3id.org/function/ontology#> .
3
+ @prefix fnom: <https://w3id.org/function/vocabulary/mapping#> .
4
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
5
+ @prefix : <https://w3id.org/conn#> .
6
+ @prefix sh: <http://www.w3.org/ns/shacl#> .
7
+ @prefix owl: <http://www.w3.org/2002/07/owl#> .
8
+ @prefix dc: <http://purl.org/dc/terms/> .
9
+
10
+ js:HttpFetch a js:JsProcess;
11
+ js:file <./lib/index.js>;
12
+ js:function "httpFetch";
13
+ js:location <./>;
14
+ js:mapping [
15
+ a fno:Mapping;
16
+ fno:parameterMapping [
17
+ a fnom:PositionParameterMapping ;
18
+ fnom:functionParameter "url";
19
+ fnom:implementationParameterPosition "0"^^xsd:integer
20
+ ], [
21
+ a fnom:PositionParameterMapping ;
22
+ fnom:functionParameter "writer";
23
+ fnom:implementationParameterPosition "1"^^xsd:integer
24
+ ], [
25
+ a fnom:PositionParameterMapping ;
26
+ fnom:functionParameter "options";
27
+ fnom:implementationParameterPosition "2"^^xsd:integer
28
+ ]
29
+ ].
30
+
31
+ [] a sh:NodeShape;
32
+ sh:targetClass js:HttpFetchAuth;
33
+ sh:property [
34
+ sh:path js:type;
35
+ sh:name "type";
36
+ sh:datatype xsd:string;
37
+ sh:minCount 1;
38
+ sh:maxCount 1
39
+ ].
40
+
41
+ [] a sh:NodeShape;
42
+ sh:targetClass js:HttpFetchOptions;
43
+ sh:property [
44
+ sh:path js:method;
45
+ sh:name "method";
46
+ sh:datatype xsd:string;
47
+ sh:maxCount 1
48
+ ], [
49
+ sh:path js:headers;
50
+ sh:name "headers";
51
+ sh:datatype xsd:string
52
+ ], [
53
+ sh:path js:acceptStatusCodes;
54
+ sh:name "acceptStatusCodes";
55
+ sh:datatype xsd:string
56
+ ], [
57
+ sh:path js:closeOnEnd;
58
+ sh:name "closeOnEnd";
59
+ sh:datatype xsd:boolean;
60
+ sh:maxCount 1
61
+ ], [
62
+ sh:path js:timeOutMilliseconds;
63
+ sh:name "timeOutMilliseconds";
64
+ sh:datatype xsd:integer;
65
+ sh:maxCount 1
66
+ ], [
67
+ sh:path js:HttpFetchAuth;
68
+ sh:class js:HttpFetchAuth;
69
+ sh:name "auth";
70
+ sh:maxCount 1
71
+ ], [
72
+ sh:path js:cron;
73
+ sh:name "cron";
74
+ sh:datatype xsd:string;
75
+ sh:maxCount 1
76
+ ], [
77
+ sh:path js:errorsAreFatal;
78
+ sh:name "errorsAreFatal";
79
+ sh:class xsd:boolean;
80
+ sh:maxCount 1;
81
+ sh:minCount 0;
82
+ ].
83
+
84
+ [] a sh:NodeShape;
85
+ sh:targetClass js:HttpFetch;
86
+ sh:property [
87
+ sh:path js:url;
88
+ sh:name "url";
89
+ sh:datatype xsd:string;
90
+ sh:minCount 1
91
+ ], [
92
+ sh:path js:writer;
93
+ sh:name "writer";
94
+ sh:class :WriterChannel;
95
+ sh:maxCount 1;
96
+ sh:minCount 1
97
+ ], [
98
+ sh:path js:HttpFetchOptions;
99
+ sh:name "options";
100
+ sh:class js:HttpFetchOptions;
101
+ sh:maxCount 1
102
+ ].