@discordeno/rest 21.0.1-next.f6ea699 → 22.0.1-next.269a5bf

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 (43) hide show
  1. package/dist/index.d.ts.map +1 -0
  2. package/dist/index.js +8 -0
  3. package/dist/invalidBucket.d.ts.map +1 -0
  4. package/dist/invalidBucket.js +82 -0
  5. package/dist/manager.d.ts.map +1 -0
  6. package/dist/manager.js +1623 -0
  7. package/dist/queue.d.ts.map +1 -0
  8. package/dist/queue.js +154 -0
  9. package/dist/routes.d.ts.map +1 -0
  10. package/dist/routes.js +621 -0
  11. package/dist/{types/types.d.ts → types.d.ts} +9 -7
  12. package/dist/types.d.ts.map +1 -0
  13. package/dist/types.js +3 -0
  14. package/dist/{types/typings → typings}/routes.d.ts +3 -3
  15. package/dist/typings/routes.d.ts.map +1 -0
  16. package/dist/typings/routes.js +3 -0
  17. package/package.json +14 -21
  18. package/dist/cjs/index.cjs +0 -25
  19. package/dist/cjs/invalidBucket.cjs +0 -86
  20. package/dist/cjs/manager.cjs +0 -1643
  21. package/dist/cjs/queue.cjs +0 -164
  22. package/dist/cjs/routes.cjs +0 -630
  23. package/dist/cjs/types.cjs +0 -6
  24. package/dist/cjs/typings/routes.cjs +0 -6
  25. package/dist/esm/index.js +0 -8
  26. package/dist/esm/invalidBucket.js +0 -82
  27. package/dist/esm/manager.js +0 -1601
  28. package/dist/esm/queue.js +0 -154
  29. package/dist/esm/routes.js +0 -620
  30. package/dist/esm/types.js +0 -3
  31. package/dist/esm/typings/routes.js +0 -3
  32. package/dist/types/index.d.ts.map +0 -1
  33. package/dist/types/invalidBucket.d.ts.map +0 -1
  34. package/dist/types/manager.d.ts.map +0 -1
  35. package/dist/types/queue.d.ts.map +0 -1
  36. package/dist/types/routes.d.ts.map +0 -1
  37. package/dist/types/types.d.ts.map +0 -1
  38. package/dist/types/typings/routes.d.ts.map +0 -1
  39. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  40. /package/dist/{types/invalidBucket.d.ts → invalidBucket.d.ts} +0 -0
  41. /package/dist/{types/manager.d.ts → manager.d.ts} +0 -0
  42. /package/dist/{types/queue.d.ts → queue.d.ts} +0 -0
  43. /package/dist/{types/routes.d.ts → routes.d.ts} +0 -0
package/package.json CHANGED
@@ -1,13 +1,7 @@
1
1
  {
2
2
  "name": "@discordeno/rest",
3
- "version": "21.0.1-next.f6ea699",
4
- "main": "./dist/esm/index.js",
5
- "types": "./dist/types/index.d.ts",
6
- "exports": {
7
- "types": "./dist/types/index.d.ts",
8
- "import": "./dist/esm/index.js",
9
- "require": "./dist/cjs/index.cjs"
10
- },
3
+ "version": "22.0.1-next.269a5bf",
4
+ "exports": "./dist/index.js",
11
5
  "type": "module",
12
6
  "license": "Apache-2.0",
13
7
  "repository": {
@@ -19,33 +13,32 @@
19
13
  "!dist/.tsbuildinfo"
20
14
  ],
21
15
  "scripts": {
22
- "build": "swc src --strip-leading-paths --delete-dir-on-start src --out-dir dist/esm && swc --strip-leading-paths --delete-dir-on-start src --out-dir dist/cjs -C module.type=commonjs && node ../../scripts/fixCjsExtension.js",
23
- "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist/types",
16
+ "build": "swc src --strip-leading-paths --delete-dir-on-start src --out-dir dist",
17
+ "build:type": "tsc --declaration --emitDeclarationOnly --declarationDir dist",
24
18
  "release-build": "yarn build && yarn build:type",
25
- "fmt": "biome format --write",
26
- "lint": "biome lint --write",
19
+ "check": "biome check --write",
27
20
  "test:unit-coverage": "c8 mocha --no-warnings 'tests/unit/**/*.spec.ts'",
28
21
  "test:unit": "c8 --r lcov mocha --no-warnings 'tests/unit/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest",
29
22
  "test:unit:watch": "mocha --no-warnings --watch --parallel 'tests/unit/**/*.spec.ts'",
30
23
  "test:deno-unit": "deno -A ../../node_modules/mocha/bin/mocha.js --config ../../.mocharc.base.cjs 'tests/unit/**/*.spec.ts'",
31
24
  "test:bun-unit": "bun ../../node_modules/mocha/bin/mocha.js --config ../../.mocharc.base.cjs 'tests/unit/**/*.spec.ts'",
32
- "test:e2e": "c8 --r lcov mocha --exit --no-warnings --jobs 1 --t 30000 'tests/e2e/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest",
25
+ "test:e2e": "c8 --r lcov mocha --exit --no-warnings --jobs 1 --t 60000 'tests/e2e/**/*.spec.ts' && node ../../scripts/coveragePathFixing.js rest",
33
26
  "test:type": "tsc --noEmit",
34
27
  "test:test-type": "tsc --project tests/tsconfig.json"
35
28
  },
36
29
  "dependencies": {
37
- "@discordeno/types": "21.0.1-next.f6ea699",
38
- "@discordeno/utils": "21.0.1-next.f6ea699"
30
+ "@discordeno/types": "22.0.1-next.269a5bf",
31
+ "@discordeno/utils": "22.0.1-next.269a5bf"
39
32
  },
40
33
  "devDependencies": {
41
- "@biomejs/biome": "2.1.3",
42
- "@swc/cli": "^0.5.2",
34
+ "@biomejs/biome": "2.1.4",
35
+ "@swc/cli": "^0.7.8",
43
36
  "@swc/core": "^1.13.3",
44
37
  "@types/chai": "^5.2.2",
45
- "@types/chai-as-promised": "^8.0.1",
38
+ "@types/chai-as-promised": "^8.0.2",
46
39
  "@types/mocha": "^10.0.10",
47
- "@types/node": "^24.1.0",
48
- "@types/sinon": "^17.0.3",
40
+ "@types/node": "^24.2.1",
41
+ "@types/sinon": "^17.0.4",
49
42
  "c8": "^10.1.3",
50
43
  "chai": "^5.2.1",
51
44
  "chai-as-promised": "^8.0.1",
@@ -54,6 +47,6 @@
54
47
  "sinon": "^21.0.0",
55
48
  "ts-node": "^10.9.2",
56
49
  "tsconfig": "*",
57
- "typescript": "^5.8.3"
50
+ "typescript": "^5.9.2"
58
51
  }
59
52
  }
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./invalidBucket.cjs"), exports);
6
- _export_star(require("./manager.cjs"), exports);
7
- _export_star(require("./queue.cjs"), exports);
8
- _export_star(require("./routes.cjs"), exports);
9
- _export_star(require("./types.cjs"), exports);
10
- _export_star(require("./typings/routes.cjs"), exports);
11
- function _export_star(from, to) {
12
- Object.keys(from).forEach(function(k) {
13
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
14
- Object.defineProperty(to, k, {
15
- enumerable: true,
16
- get: function() {
17
- return from[k];
18
- }
19
- });
20
- }
21
- });
22
- return from;
23
- }
24
-
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5leHBvcnQgKiBmcm9tICcuL21hbmFnZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3F1ZXVlLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXMuanMnXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLmpzJ1xuZXhwb3J0ICogZnJvbSAnLi90eXBpbmdzL3JvdXRlcy5qcydcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFjO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBO3FCQUNBIn0=
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "createInvalidRequestBucket", {
6
- enumerable: true,
7
- get: function() {
8
- return createInvalidRequestBucket;
9
- }
10
- });
11
- const _utils = require("@discordeno/utils");
12
- function createInvalidRequestBucket(options) {
13
- const bucket = {
14
- invalidRequests: options.current ?? 0,
15
- max: options.max ?? 10000,
16
- interval: options.interval ?? 600_000,
17
- resetAt: options.resetAt,
18
- safety: options.safety ?? 1,
19
- errorStatuses: options.errorStatuses ?? [
20
- 401,
21
- 403,
22
- 429
23
- ],
24
- activeRequests: options.requested ?? 0,
25
- processing: false,
26
- logger: options.logger ?? _utils.logger,
27
- waiting: [],
28
- requestsAllowed: function() {
29
- if (bucket.resetAt !== undefined && Date.now() >= bucket.resetAt) {
30
- bucket.invalidRequests = 0;
31
- bucket.resetAt = Date.now() + bucket.interval;
32
- }
33
- return bucket.max - bucket.invalidRequests - bucket.activeRequests - bucket.safety;
34
- },
35
- isRequestAllowed: function() {
36
- return bucket.requestsAllowed() > 0;
37
- },
38
- waitUntilRequestAvailable: async function() {
39
- return await new Promise(async (resolve)=>{
40
- // If whatever amount of requests is left is more than the safety margin, allow the request
41
- if (bucket.isRequestAllowed()) {
42
- bucket.activeRequests += 1;
43
- resolve();
44
- } else {
45
- bucket.waiting.push(resolve);
46
- await bucket.processWaiting();
47
- }
48
- });
49
- },
50
- processWaiting: async function() {
51
- // If already processing, that loop will handle all waiting requests.
52
- if (bucket.processing) return;
53
- // Mark as processing so other loops don't start
54
- bucket.processing = true;
55
- while(bucket.waiting.length > 0){
56
- bucket.logger.info(`[InvalidBucket] processing waiting queue while loop ran with ${bucket.waiting.length} pending requests to be made. ${JSON.stringify(bucket)}`);
57
- if (!bucket.isRequestAllowed() && bucket.resetAt !== undefined) {
58
- bucket.logger.warn(`[InvalidBucket] processing waiting queue is now paused until more requests are available. ${bucket.waiting.length} pending requests. ${JSON.stringify(bucket)}`);
59
- await (0, _utils.delay)(bucket.resetAt - Date.now());
60
- }
61
- bucket.activeRequests += 1;
62
- // Resolve the next item in the queue
63
- bucket.waiting.shift()?.();
64
- }
65
- // Mark as false so next pending request can be triggered by new loop.
66
- bucket.processing = false;
67
- },
68
- handleCompletedRequest: function(code, sharedScope) {
69
- // Since request is complete, we can remove one from requested.
70
- bucket.activeRequests -= 1;
71
- // Since it is as a valid request, we don't need to do anything
72
- if (!bucket.errorStatuses.includes(code)) return;
73
- // Shared scope is not considered invalid
74
- if (code === 429 && sharedScope) return;
75
- // INVALID REQUEST WAS MADE
76
- if (bucket.resetAt === undefined) {
77
- bucket.resetAt = Date.now() + bucket.interval;
78
- }
79
- bucket.invalidRequests += 1;
80
- bucket.logger.warn(`[InvalidBucket] an invalid request was made. Increasing invalidRequests count to ${bucket.invalidRequests}`);
81
- }
82
- };
83
- return bucket;
84
- }
85
-
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnZhbGlkQnVja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlbGF5LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcblxuLyoqXG4gKiBBIGludmFsaWQgcmVxdWVzdCBidWNrZXQgaXMgdXNlZCBpbiBhIHNpbWlsYXIgbWFubmVyIGFzIGEgbGVha3kgYnVja2V0IGJ1dCBhIGludmFsaWQgcmVxdWVzdCBidWNrZXQgY2FuIGJlIHJlZmlsbGVkIGFzIG5lZWRlZC5cbiAqIEl0J3MgcHVycG9zZSBpcyB0byBtYWtlIHN1cmUgdGhlIGJvdCBkb2VzIG5vdCBoaXQgdGhlIGxpbWl0IHRvIGdldHRpbmcgYSAxIGhyIGJhbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGlzIGJ1Y2tldC5cbiAqIEByZXR1cm5zIFJlZmlsbGluZ0J1Y2tldFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQob3B0aW9uczogSW52YWxpZFJlcXVlc3RCdWNrZXRPcHRpb25zKTogSW52YWxpZFJlcXVlc3RCdWNrZXQge1xuICBjb25zdCBidWNrZXQ6IEludmFsaWRSZXF1ZXN0QnVja2V0ID0ge1xuICAgIGludmFsaWRSZXF1ZXN0czogb3B0aW9ucy5jdXJyZW50ID8/IDAsXG4gICAgbWF4OiBvcHRpb25zLm1heCA/PyAxMDAwMCxcbiAgICBpbnRlcnZhbDogb3B0aW9ucy5pbnRlcnZhbCA/PyA2MDBfMDAwLCAvLyAxMCBtaW51dGVzXG4gICAgcmVzZXRBdDogb3B0aW9ucy5yZXNldEF0LFxuICAgIHNhZmV0eTogb3B0aW9ucy5zYWZldHkgPz8gMSxcbiAgICBlcnJvclN0YXR1c2VzOiBvcHRpb25zLmVycm9yU3RhdHVzZXMgPz8gWzQwMSwgNDAzLCA0MjldLFxuICAgIGFjdGl2ZVJlcXVlc3RzOiBvcHRpb25zLnJlcXVlc3RlZCA/PyAwLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgd2FpdGluZzogW10sXG5cbiAgICByZXF1ZXN0c0FsbG93ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChidWNrZXQucmVzZXRBdCAhPT0gdW5kZWZpbmVkICYmIERhdGUubm93KCkgPj0gYnVja2V0LnJlc2V0QXQpIHtcbiAgICAgICAgYnVja2V0LmludmFsaWRSZXF1ZXN0cyA9IDBcbiAgICAgICAgYnVja2V0LnJlc2V0QXQgPSBEYXRlLm5vdygpICsgYnVja2V0LmludGVydmFsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWNrZXQubWF4IC0gYnVja2V0LmludmFsaWRSZXF1ZXN0cyAtIGJ1Y2tldC5hY3RpdmVSZXF1ZXN0cyAtIGJ1Y2tldC5zYWZldHlcbiAgICB9LFxuXG4gICAgaXNSZXF1ZXN0QWxsb3dlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJ1Y2tldC5yZXF1ZXN0c0FsbG93ZWQoKSA+IDBcbiAgICB9LFxuXG4gICAgd2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZTogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgIC8vIElmIHdoYXRldmVyIGFtb3VudCBvZiByZXF1ZXN0cyBpcyBsZWZ0IGlzIG1vcmUgdGhhbiB0aGUgc2FmZXR5IG1hcmdpbiwgYWxsb3cgdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKGJ1Y2tldC5pc1JlcXVlc3RBbGxvd2VkKCkpIHtcbiAgICAgICAgICBidWNrZXQuYWN0aXZlUmVxdWVzdHMgKz0gMVxuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1Y2tldC53YWl0aW5nLnB1c2gocmVzb2x2ZSlcbiAgICAgICAgICBhd2FpdCBidWNrZXQucHJvY2Vzc1dhaXRpbmcoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcm9jZXNzV2FpdGluZzogYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gSWYgYWxyZWFkeSBwcm9jZXNzaW5nLCB0aGF0IGxvb3Agd2lsbCBoYW5kbGUgYWxsIHdhaXRpbmcgcmVxdWVzdHMuXG4gICAgICBpZiAoYnVja2V0LnByb2Nlc3NpbmcpIHJldHVyblxuXG4gICAgICAvLyBNYXJrIGFzIHByb2Nlc3Npbmcgc28gb3RoZXIgbG9vcHMgZG9uJ3Qgc3RhcnRcbiAgICAgIGJ1Y2tldC5wcm9jZXNzaW5nID0gdHJ1ZVxuXG4gICAgICB3aGlsZSAoYnVja2V0LndhaXRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBidWNrZXQubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFtJbnZhbGlkQnVja2V0XSBwcm9jZXNzaW5nIHdhaXRpbmcgcXVldWUgd2hpbGUgbG9vcCByYW4gd2l0aCAke2J1Y2tldC53YWl0aW5nLmxlbmd0aH0gcGVuZGluZyByZXF1ZXN0cyB0byBiZSBtYWRlLiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYnVja2V0LFxuICAgICAgICAgICl9YCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICghYnVja2V0LmlzUmVxdWVzdEFsbG93ZWQoKSAmJiBidWNrZXQucmVzZXRBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYnVja2V0LmxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYFtJbnZhbGlkQnVja2V0XSBwcm9jZXNzaW5nIHdhaXRpbmcgcXVldWUgaXMgbm93IHBhdXNlZCB1bnRpbCBtb3JlIHJlcXVlc3RzIGFyZSBhdmFpbGFibGUuICR7XG4gICAgICAgICAgICAgIGJ1Y2tldC53YWl0aW5nLmxlbmd0aFxuICAgICAgICAgICAgfSBwZW5kaW5nIHJlcXVlc3RzLiAke0pTT04uc3RyaW5naWZ5KGJ1Y2tldCl9YCxcbiAgICAgICAgICApXG4gICAgICAgICAgYXdhaXQgZGVsYXkoYnVja2V0LnJlc2V0QXQgLSBEYXRlLm5vdygpKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LmFjdGl2ZVJlcXVlc3RzICs9IDFcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgbmV4dCBpdGVtIGluIHRoZSBxdWV1ZVxuICAgICAgICBidWNrZXQud2FpdGluZy5zaGlmdCgpPy4oKVxuICAgICAgfVxuXG4gICAgICAvLyBNYXJrIGFzIGZhbHNlIHNvIG5leHQgcGVuZGluZyByZXF1ZXN0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgbmV3IGxvb3AuXG4gICAgICBidWNrZXQucHJvY2Vzc2luZyA9IGZhbHNlXG4gICAgfSxcblxuICAgIGhhbmRsZUNvbXBsZXRlZFJlcXVlc3Q6IGZ1bmN0aW9uIChjb2RlLCBzaGFyZWRTY29wZSkge1xuICAgICAgLy8gU2luY2UgcmVxdWVzdCBpcyBjb21wbGV0ZSwgd2UgY2FuIHJlbW92ZSBvbmUgZnJvbSByZXF1ZXN0ZWQuXG4gICAgICBidWNrZXQuYWN0aXZlUmVxdWVzdHMgLT0gMVxuICAgICAgLy8gU2luY2UgaXQgaXMgYXMgYSB2YWxpZCByZXF1ZXN0LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nXG4gICAgICBpZiAoIWJ1Y2tldC5lcnJvclN0YXR1c2VzLmluY2x1ZGVzKGNvZGUpKSByZXR1cm5cbiAgICAgIC8vIFNoYXJlZCBzY29wZSBpcyBub3QgY29uc2lkZXJlZCBpbnZhbGlkXG4gICAgICBpZiAoY29kZSA9PT0gNDI5ICYmIHNoYXJlZFNjb3BlKSByZXR1cm5cblxuICAgICAgLy8gSU5WQUxJRCBSRVFVRVNUIFdBUyBNQURFXG4gICAgICBpZiAoYnVja2V0LnJlc2V0QXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBidWNrZXQucmVzZXRBdCA9IERhdGUubm93KCkgKyBidWNrZXQuaW50ZXJ2YWxcbiAgICAgIH1cblxuICAgICAgYnVja2V0LmludmFsaWRSZXF1ZXN0cyArPSAxXG4gICAgICBidWNrZXQubG9nZ2VyLndhcm4oYFtJbnZhbGlkQnVja2V0XSBhbiBpbnZhbGlkIHJlcXVlc3Qgd2FzIG1hZGUuIEluY3JlYXNpbmcgaW52YWxpZFJlcXVlc3RzIGNvdW50IHRvICR7YnVja2V0LmludmFsaWRSZXF1ZXN0c31gKVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gYnVja2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52YWxpZFJlcXVlc3RCdWNrZXRPcHRpb25zIHtcbiAgLyoqIGN1cnJlbnQgaW52YWxpZCBhbW91bnQgKi9cbiAgY3VycmVudD86IG51bWJlclxuICAvKiogbWF4IGludmFsaWQgcmVxdWVzdHMgYWxsb3dlZCB1bnRpbCBiYW4uIERlZmF1bHRzIHRvIDEwLDAwMCAqL1xuICBtYXg/OiBudW1iZXJcbiAgLyoqIFRoZSB0aW1lIHRoYXQgZGlzY29yZCBhbGxvd3MgdG8gbWFrZSB0aGUgbWF4IG51bWJlciBvZiBpbnZhbGlkIHJlcXVlc3RzLiBEZWZhdWx0cyB0byAxMCBtaW51dGVzICovXG4gIGludGVydmFsPzogbnVtYmVyXG4gIC8qKiBXaGVuIHRoZSB0aW1lb3V0IGZvciB0aGUgYnVja2V0IGhhcyBzdGFydGVkIGF0LiAqL1xuICByZXNldEF0PzogbnVtYmVyXG4gIC8qKiBob3cgc2FmZSB0byBiZSBmcm9tIG1heC4gRGVmYXVsdHMgdG8gMSAqL1xuICBzYWZldHk/OiBudW1iZXJcbiAgLyoqIFRoZSByZXF1ZXN0IHN0YXR1c2VzIHRoYXQgY291bnQgYXMgYW4gaW52YWxpZCByZXF1ZXN0LiAqL1xuICBlcnJvclN0YXR1c2VzPzogbnVtYmVyW11cbiAgLyoqIFRoZSBhbW91bnQgb2YgcmVxdWVzdHMgdGhhdCB3ZXJlIHJlcXVlc3RlZCBmcm9tIHRoaXMgYnVja2V0LiAqL1xuICByZXF1ZXN0ZWQ/OiBudW1iZXJcbiAgLyoqIFRoZSBsb2dnZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBidWNrZXQgKi9cbiAgbG9nZ2VyPzogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52YWxpZFJlcXVlc3RCdWNrZXQge1xuICAvKiogY3VycmVudCBpbnZhbGlkIGFtb3VudCAqL1xuICBpbnZhbGlkUmVxdWVzdHM6IG51bWJlclxuICAvKiogbWF4IGludmFsaWQgcmVxdWVzdHMgYWxsb3dlZCB1bnRpbCBiYW4uIERlZmF1bHRzIHRvIDEwLDAwMCAqL1xuICBtYXg6IG51bWJlclxuICAvKiogVGhlIHRpbWUgdGhhdCBkaXNjb3JkIGFsbG93cyB0byBtYWtlIHRoZSBtYXggbnVtYmVyIG9mIGludmFsaWQgcmVxdWVzdHMuIERlZmF1bHRzIHRvIDEwIG1pbnV0ZXMgKi9cbiAgaW50ZXJ2YWw6IG51bWJlclxuICAvKiogV2hlbiB0aGUgdGltZW91dCBmb3IgdGhpcyBidWNrZXQgaGFzIHN0YXJ0ZWQgYXQuICovXG4gIHJlc2V0QXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogaG93IHNhZmUgdG8gYmUgZnJvbSBtYXguIERlZmF1bHRzIHRvIDEgKi9cbiAgc2FmZXR5OiBudW1iZXJcbiAgLyoqIFRoZSByZXF1ZXN0IHN0YXR1c2VzIHRoYXQgY291bnQgYXMgYW4gaW52YWxpZCByZXF1ZXN0LiAqL1xuICBlcnJvclN0YXR1c2VzOiBudW1iZXJbXVxuICAvKiogVGhlIGFtb3VudCBvZiByZXF1ZXN0cyB0aGF0IHdlcmUgcmVxdWVzdGVkIGZyb20gdGhpcyBidWNrZXQuICovXG4gIGFjdGl2ZVJlcXVlc3RzOiBudW1iZXJcbiAgLyoqIFRoZSByZXF1ZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgcGVuZGluZy4gKi9cbiAgd2FpdGluZzogQXJyYXk8KHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ+XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2FpdGluZyBxdWV1ZSBpcyBhbHJlYWR5IHByb2Nlc3NpbmcuICovXG4gIHByb2Nlc3Npbmc6IGJvb2xlYW5cbiAgLyoqIFRoZSBsb2dnZXIgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBidWNrZXQgKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cblxuICAvKiogR2l2ZXMgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb3dlZC4gKi9cbiAgcmVxdWVzdHNBbGxvd2VkOiAoKSA9PiBudW1iZXJcbiAgLyoqIENoZWNrcyBpZiBhIHJlcXVlc3QgaXMgYWxsb3dlZCBhdCB0aGlzIHRpbWUuICovXG4gIGlzUmVxdWVzdEFsbG93ZWQ6ICgpID0+IGJvb2xlYW5cbiAgLyoqIFdhaXRzIHVudGlsIGEgcmVxdWVzdCBpcyBhdmFpbGFibGUgKi9cbiAgd2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZTogKCkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogQmVnaW5zIHByb2Nlc3NpbmcgdGhlIHdhaXRpbmcgcXVldWUgb2YgcmVxdWVzdHMuICovXG4gIHByb2Nlc3NXYWl0aW5nOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBIYW5kbGVyIGZvciB3aGVuZXZlciBhIHJlcXVlc3QgaXMgdmFsaWRhdGVkLiBUaGlzIHNob3VsZCB1cGRhdGUgdGhlIHJlcXVlc3RlZCB2YWx1ZXMgb3IgdHJpZ2dlciBhbnkgb3RoZXIgbmVjZXNzYXJ5IHN0dWZmLiAqL1xuICBoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0OiAoY29kZTogbnVtYmVyLCBzaGFyZWRTY29wZTogYm9vbGVhbikgPT4gdm9pZFxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0Iiwib3B0aW9ucyIsImJ1Y2tldCIsImludmFsaWRSZXF1ZXN0cyIsImN1cnJlbnQiLCJtYXgiLCJpbnRlcnZhbCIsInJlc2V0QXQiLCJzYWZldHkiLCJlcnJvclN0YXR1c2VzIiwiYWN0aXZlUmVxdWVzdHMiLCJyZXF1ZXN0ZWQiLCJwcm9jZXNzaW5nIiwibG9nZ2VyIiwid2FpdGluZyIsInJlcXVlc3RzQWxsb3dlZCIsInVuZGVmaW5lZCIsIkRhdGUiLCJub3ciLCJpc1JlcXVlc3RBbGxvd2VkIiwid2FpdFVudGlsUmVxdWVzdEF2YWlsYWJsZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHVzaCIsInByb2Nlc3NXYWl0aW5nIiwibGVuZ3RoIiwiaW5mbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3YXJuIiwiZGVsYXkiLCJzaGlmdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJjb2RlIiwic2hhcmVkU2NvcGUiLCJpbmNsdWRlcyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFTZ0JBOzs7ZUFBQUE7Ozt1QkFUYztBQVN2QixTQUFTQSwyQkFBMkJDLE9BQW9DO0lBQzdFLE1BQU1DLFNBQStCO1FBQ25DQyxpQkFBaUJGLFFBQVFHLE9BQU8sSUFBSTtRQUNwQ0MsS0FBS0osUUFBUUksR0FBRyxJQUFJO1FBQ3BCQyxVQUFVTCxRQUFRSyxRQUFRLElBQUk7UUFDOUJDLFNBQVNOLFFBQVFNLE9BQU87UUFDeEJDLFFBQVFQLFFBQVFPLE1BQU0sSUFBSTtRQUMxQkMsZUFBZVIsUUFBUVEsYUFBYSxJQUFJO1lBQUM7WUFBSztZQUFLO1NBQUk7UUFDdkRDLGdCQUFnQlQsUUFBUVUsU0FBUyxJQUFJO1FBQ3JDQyxZQUFZO1FBQ1pDLFFBQVFaLFFBQVFZLE1BQU0sSUFBSUEsYUFBTTtRQUVoQ0MsU0FBUyxFQUFFO1FBRVhDLGlCQUFpQjtZQUNmLElBQUliLE9BQU9LLE9BQU8sS0FBS1MsYUFBYUMsS0FBS0MsR0FBRyxNQUFNaEIsT0FBT0ssT0FBTyxFQUFFO2dCQUNoRUwsT0FBT0MsZUFBZSxHQUFHO2dCQUN6QkQsT0FBT0ssT0FBTyxHQUFHVSxLQUFLQyxHQUFHLEtBQUtoQixPQUFPSSxRQUFRO1lBQy9DO1lBRUEsT0FBT0osT0FBT0csR0FBRyxHQUFHSCxPQUFPQyxlQUFlLEdBQUdELE9BQU9RLGNBQWMsR0FBR1IsT0FBT00sTUFBTTtRQUNwRjtRQUVBVyxrQkFBa0I7WUFDaEIsT0FBT2pCLE9BQU9hLGVBQWUsS0FBSztRQUNwQztRQUVBSywyQkFBMkI7WUFDekIsT0FBTyxNQUFNLElBQUlDLFFBQVEsT0FBT0M7Z0JBQzlCLDJGQUEyRjtnQkFDM0YsSUFBSXBCLE9BQU9pQixnQkFBZ0IsSUFBSTtvQkFDN0JqQixPQUFPUSxjQUFjLElBQUk7b0JBQ3pCWTtnQkFDRixPQUFPO29CQUNMcEIsT0FBT1ksT0FBTyxDQUFDUyxJQUFJLENBQUNEO29CQUNwQixNQUFNcEIsT0FBT3NCLGNBQWM7Z0JBQzdCO1lBQ0Y7UUFDRjtRQUVBQSxnQkFBZ0I7WUFDZCxxRUFBcUU7WUFDckUsSUFBSXRCLE9BQU9VLFVBQVUsRUFBRTtZQUV2QixnREFBZ0Q7WUFDaERWLE9BQU9VLFVBQVUsR0FBRztZQUVwQixNQUFPVixPQUFPWSxPQUFPLENBQUNXLE1BQU0sR0FBRyxFQUFHO2dCQUNoQ3ZCLE9BQU9XLE1BQU0sQ0FBQ2EsSUFBSSxDQUNoQixDQUFDLDZEQUE2RCxFQUFFeEIsT0FBT1ksT0FBTyxDQUFDVyxNQUFNLENBQUMsOEJBQThCLEVBQUVFLEtBQUtDLFNBQVMsQ0FDbEkxQixTQUNDO2dCQUdMLElBQUksQ0FBQ0EsT0FBT2lCLGdCQUFnQixNQUFNakIsT0FBT0ssT0FBTyxLQUFLUyxXQUFXO29CQUM5RGQsT0FBT1csTUFBTSxDQUFDZ0IsSUFBSSxDQUNoQixDQUFDLDBGQUEwRixFQUN6RjNCLE9BQU9ZLE9BQU8sQ0FBQ1csTUFBTSxDQUN0QixtQkFBbUIsRUFBRUUsS0FBS0MsU0FBUyxDQUFDMUIsU0FBUztvQkFFaEQsTUFBTTRCLElBQUFBLFlBQUssRUFBQzVCLE9BQU9LLE9BQU8sR0FBR1UsS0FBS0MsR0FBRztnQkFDdkM7Z0JBRUFoQixPQUFPUSxjQUFjLElBQUk7Z0JBQ3pCLHFDQUFxQztnQkFDckNSLE9BQU9ZLE9BQU8sQ0FBQ2lCLEtBQUs7WUFDdEI7WUFFQSxzRUFBc0U7WUFDdEU3QixPQUFPVSxVQUFVLEdBQUc7UUFDdEI7UUFFQW9CLHdCQUF3QixTQUFVQyxJQUFJLEVBQUVDLFdBQVc7WUFDakQsK0RBQStEO1lBQy9EaEMsT0FBT1EsY0FBYyxJQUFJO1lBQ3pCLCtEQUErRDtZQUMvRCxJQUFJLENBQUNSLE9BQU9PLGFBQWEsQ0FBQzBCLFFBQVEsQ0FBQ0YsT0FBTztZQUMxQyx5Q0FBeUM7WUFDekMsSUFBSUEsU0FBUyxPQUFPQyxhQUFhO1lBRWpDLDJCQUEyQjtZQUMzQixJQUFJaEMsT0FBT0ssT0FBTyxLQUFLUyxXQUFXO2dCQUNoQ2QsT0FBT0ssT0FBTyxHQUFHVSxLQUFLQyxHQUFHLEtBQUtoQixPQUFPSSxRQUFRO1lBQy9DO1lBRUFKLE9BQU9DLGVBQWUsSUFBSTtZQUMxQkQsT0FBT1csTUFBTSxDQUFDZ0IsSUFBSSxDQUFDLENBQUMsaUZBQWlGLEVBQUUzQixPQUFPQyxlQUFlLEVBQUU7UUFDakk7SUFDRjtJQUVBLE9BQU9EO0FBQ1QifQ==