From cfc486cefcbd416ec5748c282dd9a089975d4eef Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Thu, 16 Nov 2023 20:31:52 +0000 Subject: [PATCH 01/49] chore: Updating npm dev dependencies --- package-lock.json | 1070 ++++++++++++++++++++------------------------- package.json | 14 +- 2 files changed, 489 insertions(+), 595 deletions(-) diff --git a/package-lock.json b/package-lock.json index d1876c1b..8a8b6d0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cadt", - "version": "1.6.15", + "version": "1.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cadt", - "version": "1.6.15", + "version": "1.7", "dependencies": { "@babel/eslint-parser": "^7.22.15", "async-mutex": "^0.4.0", @@ -40,22 +40,22 @@ }, "devDependencies": { "@babel/cli": "^7.23.0", - "@babel/core": "^7.23.2", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/preset-env": "^7.23.2", + "@babel/core": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/preset-env": "^7.23.3", "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.0.0", - "@commitlint/config-conventional": "^18.0.0", + "@commitlint/cli": "^18.4.2", + "@commitlint/config-conventional": "^18.4.2", "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.52.0", + "eslint": "^8.53.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", "mocha": "^10.2.0", "semver": "^7.5.4", - "sinon": "^17.0.0", + "sinon": "^17.0.1", "socket.io-client": "^4.7.2", "standard-version": "^9.5.0", "supertest": "^6.3.3" @@ -126,28 +126,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/generator": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", + "@babel/parser": "^7.23.3", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -171,9 +171,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", - "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", + "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -196,11 +196,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.23.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -385,9 +385,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -556,9 +556,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -567,9 +567,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -582,14 +582,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/plugin-transform-optional-chaining": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -598,6 +598,22 @@ "@babel/core": "^7.13.0" } }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -674,9 +690,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -689,9 +705,9 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -846,9 +862,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -861,9 +877,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", + "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -879,14 +895,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -896,9 +912,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -911,9 +927,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", + "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -926,12 +942,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -942,12 +958,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", + "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -959,18 +975,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", + "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -982,13 +998,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -998,9 +1014,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1013,12 +1029,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1029,9 +1045,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1044,9 +1060,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", + "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1060,12 +1076,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1076,9 +1092,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", + "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1092,9 +1108,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1107,13 +1123,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1124,9 +1140,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", + "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1140,9 +1156,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1155,9 +1171,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", + "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1171,9 +1187,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1186,12 +1202,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1202,12 +1218,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1219,13 +1235,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20" }, @@ -1237,12 +1253,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1269,9 +1285,9 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1284,9 +1300,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", + "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1300,9 +1316,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", + "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1316,16 +1332,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", + "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", + "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1335,13 +1351,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1351,9 +1367,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", + "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1367,9 +1383,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", + "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1384,9 +1400,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1399,12 +1415,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1415,13 +1431,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", + "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1433,9 +1449,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1448,9 +1464,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1464,9 +1480,9 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1479,9 +1495,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1494,9 +1510,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1510,9 +1526,9 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1525,9 +1541,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1540,9 +1556,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1555,9 +1571,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1570,12 +1586,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1586,12 +1602,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1602,12 +1618,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1618,25 +1634,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", + "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.2", + "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1648,56 +1665,55 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", - "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.3", + "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.3", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", + "@babel/plugin-transform-numeric-separator": "^7.23.3", + "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.3", + "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", "babel-plugin-polyfill-corejs2": "^0.4.6", "babel-plugin-polyfill-corejs3": "^0.8.5", "babel-plugin-polyfill-regenerator": "^0.5.3", @@ -1791,18 +1807,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "dependencies": { "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", + "@babel/generator": "^7.23.3", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1811,9 +1827,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.20", @@ -1832,16 +1848,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.0.0.tgz", - "integrity": "sha512-0HuJB7VfxSqia0r+mZ9VLgTc5gPaRDiQtloLfwCBp63PvpFn2sZsidiZBbym3jDC6+P47HSuIdRRg3/JsCcBwA==", + "version": "18.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.2.tgz", + "integrity": "sha512-dDfb2+wzeQe6ogdHNHOy0J0nraok+La0BoxamNMhBOng9/5GoESPDmKUJ1Lt1oivh5MfIgZh0Vm6f0rxkB8CoA==", "dev": true, "dependencies": { - "@commitlint/format": "^18.0.0", - "@commitlint/lint": "^18.0.0", - "@commitlint/load": "^18.0.0", - "@commitlint/read": "^18.0.0", - "@commitlint/types": "^18.0.0", + "@commitlint/format": "^18.4.0", + "@commitlint/lint": "^18.4.2", + "@commitlint/load": "^18.4.2", + "@commitlint/read": "^18.4.0", + "@commitlint/types": "^18.4.0", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -1856,9 +1872,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.0.0.tgz", - "integrity": "sha512-XZW3MDwhMWwr7pf+jO5F18ohBwrJ8mt+1OPhkVyO8bYrY0dKPE5tPpdXlDt+JCFurl4VnUDPmu6xZ4/cKCH7cA==", + "version": "18.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.2.tgz", + "integrity": "sha512-qFjIqgKGV89lzUGHxanq2WJDXk5wZIxoZmZvf0I4i4CirL06Xj8qRh1shPsXNyI15d8Rj2HExww6cGJSFU9DdA==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -1868,12 +1884,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.0.0.tgz", - "integrity": "sha512-PlXy5QZzQeMgQM7jb0odIhxsI6GWcbGgfy+Hkz5ap31KES/oJgtEvgD8pjg0Z9Ri296bT6zK3ts6brS0MAcMgg==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.0.tgz", + "integrity": "sha512-1y6qHMU3o4cYQSK+Y9EnmH6H1GRiwQGjnLIUOIKlekrmfc8MrMk1ByNmb8od4vK3qHJAaL/77/5n+1uyyIF5dA==", "dev": true, "dependencies": { - "@commitlint/types": "^18.0.0", + "@commitlint/types": "^18.4.0", "ajv": "^8.11.0" }, "engines": { @@ -1881,12 +1897,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.0.0.tgz", - "integrity": "sha512-AhzK4ybWGVmO7lwC33dGujS0k2IZDNFiew80M1H2R5Ou7Qkqq7sbuMZoof+yjOQcqltYP4IHLd0YECZoGermvQ==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.0.tgz", + "integrity": "sha512-N5cJo/n61ULSwz3W5Iz/IZJ0I9H/PaHc+OMcF2XcRVbLa6B3YwzEW66XGCRKVULlsBNSrIH6tk5un9ayXAXIdw==", "dev": true, "dependencies": { - "@commitlint/types": "^18.0.0", + "@commitlint/types": "^18.4.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -1898,21 +1914,21 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.0.0.tgz", - "integrity": "sha512-eNUSaHajb+g3sgZeIrfc6cXNnKIkYN2SXtDVXuiE+hOa055T0bLdZK29gSd945JCztxPVwdOkPLDeLg3NfDubg==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.0.tgz", + "integrity": "sha512-g013SWki6ZWhURBLOSXTaVQGWHdA0QlPJGiW4a+YpThezmJOemvc4LiKVpn13AjSKQ40QnmBqpBrxujOaSo+3A==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.0.0.tgz", - "integrity": "sha512-etvUmOufihecdNm0r5+rCetrO2Yj7fSkJ4f0k8xOzqrrNdID9G/6iK14i/ufISBLSSy0XzsiiV+Rn9TX/cg46Q==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.0.tgz", + "integrity": "sha512-MiAe4D5/ahty38CzULdQbpRa3ReKZtx0kyigOWcntq+N5uqez+Ac4/MO7H+3j1kC4G7nfJVfBu6TqcXeyNvhCQ==", "dev": true, "dependencies": { - "@commitlint/types": "^18.0.0", + "@commitlint/types": "^18.4.0", "chalk": "^4.1.0" }, "engines": { @@ -1990,12 +2006,12 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.0.0.tgz", - "integrity": "sha512-fAUOF4GlKTmreE5hxhLlVUcXd1aIexxn+edocbMSwOa4dcm8OoHbsLcDB/rhwXIK+jzK4DybCMCx1VaTeRC4SQ==", + "version": "18.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.2.tgz", + "integrity": "sha512-uujjyJlrXsMsQrv0r8HDGigAwJELPAMtA1Vxi2WUB54HbyAWa0Ue6ujMRZNKov2YeA96r6o72gLDnugb6yu8IA==", "dev": true, "dependencies": { - "@commitlint/types": "^18.0.0", + "@commitlint/types": "^18.4.0", "semver": "7.5.4" }, "engines": { @@ -2003,40 +2019,38 @@ } }, "node_modules/@commitlint/lint": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.0.0.tgz", - "integrity": "sha512-Vqg6sIPm7nELu/U4lEzKMdLYaELgwSySGZzKc2YjJxdJWyiQo0b1hfCpxXsWGdNBOt0+CM4eBAGoX/Kjq5AYNA==", + "version": "18.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.2.tgz", + "integrity": "sha512-ljGOIH7w9SnjvZFoKjf30iWFxDnezfRtOc50+rNLdDP0TpLspaYYLPhDO/TeVdmii1/AJiDgBIuBboQlaIy7Bw==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.0.0", - "@commitlint/parse": "^18.0.0", - "@commitlint/rules": "^18.0.0", - "@commitlint/types": "^18.0.0" + "@commitlint/is-ignored": "^18.4.2", + "@commitlint/parse": "^18.4.0", + "@commitlint/rules": "^18.4.0", + "@commitlint/types": "^18.4.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.0.0.tgz", - "integrity": "sha512-ocvMSkzNZCJ4yV673xjd4Y7sFVG/mg7S6yvL5ioM0OIG2XTbcCdzpmq+BeJcIwsRYU9g/b688yh7RDzGlbai6w==", + "version": "18.4.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.2.tgz", + "integrity": "sha512-CKmzXdF9XwZJoVijAqpUlV9qzZOkyiYni4KuSCtTZVAAVudi9H84cJ4FqZxSwEP9G21vmoJiNrW8G042AsduVg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.0.0", - "@commitlint/execute-rule": "^18.0.0", - "@commitlint/resolve-extends": "^18.0.0", - "@commitlint/types": "^18.0.0", + "@commitlint/config-validator": "^18.4.0", + "@commitlint/execute-rule": "^18.4.0", + "@commitlint/resolve-extends": "^18.4.0", + "@commitlint/types": "^18.4.0", "@types/node": "^18.11.9", "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", + "cosmiconfig": "^8.3.6", + "cosmiconfig-typescript-loader": "^5.0.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^5.2.2" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=v18" @@ -2113,21 +2127,21 @@ } }, "node_modules/@commitlint/message": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.0.0.tgz", - "integrity": "sha512-FJmEBn81RMEZrG1E1BxmjNoe/Rz918IeIGJRe5YXxM7IXboFhKS69rHPttNjKwSS038t6GUsRUJrAWqZnA6nCw==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.0.tgz", + "integrity": "sha512-3kg6NQO6pJ+VdBTWi51KInT8ngkxPJaW+iI7URtUALjKcO9K4XY3gf80ZPmS1hDessrjb7qCr1lau8eWMINAQw==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.0.0.tgz", - "integrity": "sha512-qbZYOCpIZzfFzV35s5ei3JkBG/8KUOyGYluAeaYIcYC9z0uKXEVK6O2F2P/KLvbTkgZ4Q9OOLDrrtoWzPb2pjg==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.0.tgz", + "integrity": "sha512-SxTCSUZH8CJNYWOlFg18YUQ2RLz8ubXKbpHUIiSNwCbiQx7UDCydp1JnhoB4sOYOxgV8d3nuDwYluRU5KnEY4A==", "dev": true, "dependencies": { - "@commitlint/types": "^18.0.0", + "@commitlint/types": "^18.4.0", "conventional-changelog-angular": "^6.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -2136,13 +2150,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.0.0.tgz", - "integrity": "sha512-VclRvG+ZvHOjYP4rmKPfNwS7eSI5m68D/CPtT2do/D4EBljmLBwqCYVL1I/3y2E6Fbub1GfYoXiRHThd1cVlag==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.0.tgz", + "integrity": "sha512-IpnABCbDeOw5npZ09SZZGLfd3T7cFtsxUYm6wT3aGmIB2fXKE3fMeuj3jxXjMibiGIyA3Z5voCMuOcKWpkNySA==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.0.0", - "@commitlint/types": "^18.0.0", + "@commitlint/top-level": "^18.4.0", + "@commitlint/types": "^18.4.0", "fs-extra": "^11.0.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" @@ -2152,13 +2166,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.0.0.tgz", - "integrity": "sha512-MD9+6GSiWvqgdJtfos+1gqz+zmy2vV7TbUVz2ETZzpfECgmUZSZSYzyivivBAQK6feS71KxmMLL8+YFF9+FFRQ==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.0.tgz", + "integrity": "sha512-qhgU6ach+S6sJMD9NjCYiEycOObGhxzWQLQzqlScJCv9zkPs15Bg0ffLXTQ3z7ipXv46XEKYMnSJzjLRw2Tlkg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.0.0", - "@commitlint/types": "^18.0.0", + "@commitlint/config-validator": "^18.4.0", + "@commitlint/types": "^18.4.0", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -2169,15 +2183,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.0.0.tgz", - "integrity": "sha512-J7xjMKC4H1hfZR8fmPPuV35wS8Vgy3YX9xIpfPJhsDnRk2BL/dyZjNEXPdvlbpvkNgkfIWi0A0IDtW1dDoViag==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.0.tgz", + "integrity": "sha512-T3ChRxQZ6g0iNCpVLc6KeQId0/86TnyQA8PFkng+dWElO2DAA5km/yirgKZV1Xlc+gF7Rf6d+a0ottxdKpOY+w==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.0.0", - "@commitlint/message": "^18.0.0", - "@commitlint/to-lines": "^18.0.0", - "@commitlint/types": "^18.0.0", + "@commitlint/ensure": "^18.4.0", + "@commitlint/message": "^18.4.0", + "@commitlint/to-lines": "^18.4.0", + "@commitlint/types": "^18.4.0", "execa": "^5.0.0" }, "engines": { @@ -2185,18 +2199,18 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.0.0.tgz", - "integrity": "sha512-HwwBvzXX+3x7XYvBrEKy69S9w/clUEL0gMwkXTtg5awUpvEvzmTz1FBE/5WIiUICyOGdH1NhV1WgKb7UwOnI4A==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.0.tgz", + "integrity": "sha512-bZXuCtfBPjNgtEnG3gwJrveIgfKK2UdhIhFvKpMTrQl/gAwoto/3mzmE7qGAHwmuP4eZ2U8X7iwMnqIlWmv2Tw==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.0.0.tgz", - "integrity": "sha512-6+jjZhe9pF7ioD9IR2HChteTh95KPXa7GUUV52e0YhEsFArkCnyhzSL72ko1c2Xad0sWNBL0e76mifi20wD/Bg==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.0.tgz", + "integrity": "sha512-TfulcA8UHF7MZ6tm4Ci3aqZgMBZa1OoCg4prccWHvwG/hsHujZ7+0FKbeKqDbcSli/YWm4NJwEjl4uh5itIJeA==", "dev": true, "dependencies": { "find-up": "^5.0.0" @@ -2206,9 +2220,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.0.0.tgz", - "integrity": "sha512-FDzAdSm7kIir0NW0bZLENdrEgf/9Ihs1AAqE9DK9R+dRFby4ookkxPMaz7elZmG+e5rBl7hGrWJzJINqG9cDDg==", + "version": "18.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.0.tgz", + "integrity": "sha512-MKeaFxt0I9fhqUb2E+YIzX/gZtmkuodJET/XKiZIMvXUff8Ee4Ih86eLg+yAm2jf1pwGBmU02uNOp0y094w2Uw==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -2287,28 +2301,6 @@ "node": ">=8" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", @@ -2345,17 +2337,17 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2420,9 +2412,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -2728,34 +2720,10 @@ "node": ">= 6" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, "node_modules/@types/chai": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", - "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==", "dev": true }, "node_modules/@types/cookie": { @@ -2764,47 +2732,50 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-LZ8SD3LpNmLMDLkG2oCBjZg+ETnx6XdCjydUE0HwojDmnDfDUnhMKKbtth1TZh+hzcqb03azrYWoXLS8sMXdqg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-b698BLJ6kPVd6uhHsY7wlebZdrWPXYied883PDSzpJZYOP97EOn/oGdLCH3jJf157srkFReIZY5v0H1s8Dozrg==", "dev": true }, "node_modules/@types/cors": { - "version": "2.8.15", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", - "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.16.tgz", + "integrity": "sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/debug": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz", - "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/minimist": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.4.tgz", - "integrity": "sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, "node_modules/@types/ms": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.33.tgz", - "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==" + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.18.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", - "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==" + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz", - "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, "node_modules/@types/superagent": { @@ -2818,9 +2789,9 @@ } }, "node_modules/@types/triple-beam": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.4.tgz", - "integrity": "sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "node_modules/@types/uuid": { "version": "8.3.4", @@ -2828,9 +2799,9 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/validator": { - "version": "13.11.5", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.5.tgz", - "integrity": "sha512-xW4qsT4UIYILu+7ZrBnfQdBYniZrMLYYK3wN9M/NdeIHgBN5pZI2/8Q7UfdWIcr5RLJv/OGENsx91JIpUUoC7Q==" + "version": "13.11.6", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.6.tgz", + "integrity": "sha512-HUgHujPhKuNzgNXBRZKYexwoG+gHKU+tnfPqjWXFghZAnn73JElicMkuSKJyLGr9JgyA8IgK7fj88IyA9rwYeQ==" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -2855,9 +2826,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { "acorn": "bin/acorn" }, @@ -2873,15 +2844,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -3030,12 +2992,6 @@ "node": ">= 6" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3084,9 +3040,9 @@ } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/async-mutex": { "version": "0.4.0", @@ -3469,9 +3425,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001553", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001553.tgz", - "integrity": "sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==", + "version": "1.0.30001562", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", + "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", "funding": [ { "type": "opencollective", @@ -4794,9 +4750,9 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.1.tgz", - "integrity": "sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", + "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", "dev": true, "dependencies": { "browserslist": "^4.22.1" @@ -4850,26 +4806,22 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", - "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", + "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", "dev": true, + "dependencies": { + "jiti": "^1.19.1" + }, "engines": { - "node": ">=v14.21.3" + "node": ">=v16" }, "peerDependencies": { "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", + "cosmiconfig": ">=8.2", "typescript": ">=4" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5210,9 +5162,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.565", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.565.tgz", - "integrity": "sha512-XbMoT6yIvg2xzcbs5hCADi0dXBh4//En3oFXmtPX+jiyyiCTiM9DGFT2SLottjpEs9Z8Mh8SqahbR96MaHfuSg==" + "version": "1.4.586", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.586.tgz", + "integrity": "sha512-qMa+E6yf1fNQbg3G66pHLXeJUP5CCCzNat1VPczOZOqgI2w4u+8y9sQnswMdGs5m4C1rOePq37EVBr/nsPQY7w==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5254,9 +5206,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", - "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -5274,9 +5226,9 @@ } }, "node_modules/engine.io-client": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.2.tgz", - "integrity": "sha512-CQZqbrpEYnrpGqC07a9dJDz4gePZUgTPMU3NKJPSeQOyw27Tst4Pl3FemKoFGAlHzgZmKjoRmiJvbWfhCXUlIg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -5348,14 +5300,14 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -6038,16 +5990,16 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -7076,9 +7028,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "engines": { "node": ">= 4" } @@ -7366,6 +7318,15 @@ "node": ">=0.10.0" } }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/joi": { "version": "17.11.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", @@ -7838,12 +7799,6 @@ "semver": "bin/semver" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, "node_modules/make-fetch-happen": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", @@ -9195,9 +9150,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -9809,9 +9764,9 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { - "version": "6.33.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.33.0.tgz", - "integrity": "sha512-GkeCbqgaIcpyZ1EyXrDNIwktbfMldHAGOVXHGM4x8bxGSRAOql5htDWofPvwpfL/FoZ59CaFmfO3Mosv1lDbQw==", + "version": "6.35.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.0.tgz", + "integrity": "sha512-cnxnmjUfphGfSKCwTtNZ3YD/F35fqMTNPw/Qe9xsMij49t6LkW2G57sNQkuKac8fkQgSX+M8OZOQsxCS6dnUwQ==", "funding": [ { "type": "opencollective", @@ -9987,9 +9942,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sinon": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.0.tgz", - "integrity": "sha512-p4lJiYKBoOEVUxxVIC9H1MM2znG1/c8gud++I2BauJA5hsz7hHsst35eurNWXTusBsIq66FzOQbZ/uMdpvbPIQ==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", + "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", @@ -10743,58 +10698,6 @@ "node": ">= 14.0.0" } }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -10853,6 +10756,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10874,6 +10778,11 @@ "node": ">=0.8.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -10933,9 +10842,9 @@ } }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -11016,12 +10925,6 @@ "uuid": "8.3.2" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11343,15 +11246,6 @@ "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index a56ee4e2..257364bc 100644 --- a/package.json +++ b/package.json @@ -60,22 +60,22 @@ }, "devDependencies": { "@babel/cli": "^7.23.0", - "@babel/core": "^7.23.2", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/preset-env": "^7.23.2", + "@babel/core": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/preset-env": "^7.23.3", "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.0.0", - "@commitlint/config-conventional": "^18.0.0", + "@commitlint/cli": "^18.4.2", + "@commitlint/config-conventional": "^18.4.2", "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.52.0", + "eslint": "^8.53.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", "mocha": "^10.2.0", "semver": "^7.5.4", - "sinon": "^17.0.0", + "sinon": "^17.0.1", "socket.io-client": "^4.7.2", "standard-version": "^9.5.0", "supertest": "^6.3.3" From fd441654c6bf724b111baae9b85b5ad383c33e5e Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Tue, 28 Nov 2023 14:28:41 -0500 Subject: [PATCH 02/49] fix: clean up old sync code --- src/datalayer/syncService.js | 172 +----------------- src/tasks/index.js | 4 +- src/tasks/sync-datalayer.js | 57 ------ ...sync-audit-table.js => sync-registries.js} | 4 +- 4 files changed, 6 insertions(+), 231 deletions(-) delete mode 100644 src/tasks/sync-datalayer.js rename src/tasks/{sync-audit-table.js => sync-registries.js} (99%) diff --git a/src/datalayer/syncService.js b/src/datalayer/syncService.js index 9cb5a267..a0312943 100644 --- a/src/datalayer/syncService.js +++ b/src/datalayer/syncService.js @@ -1,7 +1,7 @@ import _ from 'lodash'; -import { decodeHex, decodeDataLayerResponse } from '../utils/datalayer-utils'; -import { Organization, Staging, ModelKeys, Simulator } from '../models'; +import { decodeDataLayerResponse } from '../utils/datalayer-utils'; +import { Simulator } from '../models'; import { getConfig } from '../utils/config-loader'; import { logger } from '../config/logger.cjs'; @@ -11,171 +11,6 @@ import * as simulator from './simulator'; const { USE_SIMULATOR } = getConfig().APP; const POLLING_INTERVAL = 5000; -const frames = ['-', '\\', '|', '/']; - -const startDataLayerUpdatePolling = async () => { - logger.info('Start Datalayer Update Polling'); - const updateStoreInfo = await dataLayerWasUpdated(); - if (updateStoreInfo.length) { - await Promise.all( - updateStoreInfo.map(async (store) => { - logger.info( - `Updates found syncing storeId: ${store.storeId} ${ - frames[Math.floor(Math.random() * 3)] - }`, - ); - await syncDataLayerStoreToClimateWarehouse( - store.storeId, - store.rootHash, - ); - - console.log('UPDATE STORE', store.storeId, store.rootHash); - await Organization.update( - { registryHash: store.rootHash }, - { where: { registryId: store.storeId } }, - ); - }), - ); - } -}; - -const syncDataLayerStoreToClimateWarehouse = async (storeId, rootHash) => { - let storeData; - - if (USE_SIMULATOR) { - storeData = await simulator.getStoreData(storeId, rootHash); - } else { - storeData = await dataLayer.getStoreData(storeId, rootHash); - } - - if (!_.get(storeData, 'keys_values', []).length) { - return; - } - - const organizationToTruncate = await Organization.findOne({ - attributes: ['orgUid'], - where: { registryId: storeId }, - raw: true, - }); - - try { - if (_.get(organizationToTruncate, 'orgUid')) { - const truncateOrganizationPromises = Object.keys(ModelKeys).map((key) => - ModelKeys[key].destroy({ - where: { orgUid: organizationToTruncate.orgUid }, - }), - ); - - await Promise.all(truncateOrganizationPromises); - - await Promise.all( - storeData.keys_values.map(async (kv) => { - const key = decodeHex(kv.key.replace(`${storeId}_`, '')); - const modelKey = key.split('|')[0]; - let value; - - try { - value = JSON.parse(decodeHex(kv.value)); - } catch (err) { - console.trace(err); - logger.error(`Cant parse json value: ${decodeHex(kv.value)}`); - } - - if (ModelKeys[modelKey]) { - await ModelKeys[modelKey].upsert(value); - - const stagingUuid = - modelKey === 'unit' - ? value.warehouseUnitId - : modelKey === 'project' - ? value.warehouseProjectId - : undefined; - - if (stagingUuid) { - await Staging.destroy({ - where: { uuid: stagingUuid }, - }); - } - } - }), - ); - - // clean up any staging records than involved delete commands, - // since we cant track that they came in through the uuid, - // we can infer this because diff.original is null instead of empty object. - await Staging.cleanUpCommitedAndInvalidRecords(); - } - } catch (error) { - console.trace('ERROR DURING SYNC TRANSACTION', error); - } -}; - -const dataLayerWasUpdated = async () => { - const organizations = await Organization.findAll({ - attributes: ['registryId', 'registryHash'], - where: { subscribed: true }, - raw: true, - }); - - // exit early if there are no subscribed organizations - if (!organizations.length) { - return []; - } - - const subscribedOrgIds = organizations.map((org) => org.registryId); - - if (!subscribedOrgIds.length) { - return []; - } - - let rootResponse; - if (USE_SIMULATOR) { - rootResponse = await simulator.getRoots(subscribedOrgIds); - } else { - rootResponse = await dataLayer.getRoots(subscribedOrgIds); - } - - if (!rootResponse.success) { - return []; - } - - const updatedStores = rootResponse.root_hashes.filter((rootHash) => { - const org = organizations.find( - (org) => org.registryId == rootHash.id.replace('0x', ''), - ); - - if (org) { - // When a transfer is made, the climate warehouse is locked from making updates - // while waiting for the transfer to either be completed or rejected. - // This means that we know the transfer completed when the root hash changed - // and we can remove it from the pending staging table. - if (org.isHome == 1 && org.registryHash != rootHash.hash) { - Staging.destroy({ where: { isTransfer: true } }); - } - - // store has been updated if its confirmed and the hash has changed - return rootHash.confirmed && org.registryHash != rootHash.hash; - } - - return false; - }); - - if (!updatedStores.length) { - return []; - } - - const updateStoreInfo = await Promise.all( - updatedStores.map(async (rootHash) => { - const storeId = rootHash.id.replace('0x', ''); - return { - storeId, - rootHash: rootHash.hash, - }; - }), - ); - - return updateStoreInfo; -}; const unsubscribeFromDataLayerStore = async (storeId) => { if (!USE_SIMULATOR) { @@ -399,9 +234,6 @@ export const waitForAllTransactionsToConfirm = async () => { }; export default { - startDataLayerUpdatePolling, - syncDataLayerStoreToClimateWarehouse, - dataLayerWasUpdated, subscribeToStoreOnDataLayer, getSubscribedStoreData, getRootHistory, diff --git a/src/tasks/index.js b/src/tasks/index.js index 29e1a530..7c72f303 100644 --- a/src/tasks/index.js +++ b/src/tasks/index.js @@ -2,7 +2,7 @@ import { ToadScheduler } from 'toad-scheduler'; import syncDefaultOrganizations from './sync-default-organizations'; import syncPickLists from './sync-picklists'; -import syncAudit from './sync-audit-table'; +import syncRegistries from './sync-registries'; import syncOrganizationMeta from './sync-organization-meta'; import syncGovernanceBody from './sync-governance-body'; @@ -21,7 +21,7 @@ const start = () => { syncGovernanceBody, syncDefaultOrganizations, syncPickLists, - syncAudit, + syncRegistries, syncOrganizationMeta, ]; defaultJobs.forEach((defaultJob) => { diff --git a/src/tasks/sync-datalayer.js b/src/tasks/sync-datalayer.js deleted file mode 100644 index 4e8090a5..00000000 --- a/src/tasks/sync-datalayer.js +++ /dev/null @@ -1,57 +0,0 @@ -import { SimpleIntervalJob, Task } from 'toad-scheduler'; -import datalayer from '../datalayer'; -import dotenv from 'dotenv'; -import cliSpinner from 'cli-spinner'; -import { - assertDataLayerAvailable, - assertWalletIsSynced, -} from '../utils/data-assertions'; -import { logger } from '../config/logger.cjs'; - -const Spinner = cliSpinner.Spinner; -dotenv.config(); -import { getConfig } from '../utils/config-loader'; -const CONFIG = getConfig().APP; - -const spinner = new Spinner('Waiting for Updates %s'); -spinner.setSpinnerString('|/-\\'); -spinner.setSpinnerDelay(500); - -let taskIsRunning = false; - -const task = new Task('sync-datalayer', async () => { - try { - if (!taskIsRunning) { - taskIsRunning = true; - logger.info('Syncing datalayer data'); - await assertDataLayerAvailable(); - await assertWalletIsSynced(); - - spinner.stop(); - spinner.start(); - datalayer.startDataLayerUpdatePolling(); - } - } catch (error) { - logger.error( - `Retrying in ${ - CONFIG?.TASKS?.DATAMODEL_SYNC_TASK_INTERVAL || 60 - } seconds`, - error, - ); - } finally { - taskIsRunning = false; - } -}); - -let seconds = 5; -if (process.env.NODE_ENV !== 'test') { - seconds = CONFIG?.TASKS?.DATAMODEL_SYNC_TASK_INTERVAL || 60; -} - -const job = new SimpleIntervalJob( - { seconds, runImmediately: true }, - task, - 'sync-datalayer', -); - -export default job; diff --git a/src/tasks/sync-audit-table.js b/src/tasks/sync-registries.js similarity index 99% rename from src/tasks/sync-audit-table.js rename to src/tasks/sync-registries.js index 21b5a45b..bcdd3356 100644 --- a/src/tasks/sync-audit-table.js +++ b/src/tasks/sync-registries.js @@ -20,7 +20,7 @@ dotenv.config(); const mutex = new Mutex(); const CONFIG = getConfig().APP; -const task = new Task('sync-audit', async () => { +const task = new Task('sync-registries', async () => { if (!mutex.isLocked()) { const releaseMutex = await mutex.acquire(); try { @@ -99,7 +99,7 @@ const job = new SimpleIntervalJob( runImmediately: true, }, task, - { id: 'sync-audit', preventOverrun: true }, + { id: 'sync-registries', preventOverrun: true }, ); const processJob = async () => { From e280c9a7760f1f00980dfd26547276e6d595d0e2 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 30 Nov 2023 10:19:23 -0500 Subject: [PATCH 03/49] fix: clear pending root if detected on push --- src/datalayer/persistance.js | 110 +++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 36 deletions(-) diff --git a/src/datalayer/persistance.js b/src/datalayer/persistance.js index 6d5c3776..bd254874 100644 --- a/src/datalayer/persistance.js +++ b/src/datalayer/persistance.js @@ -62,6 +62,32 @@ const getMirrors = async (storeId) => { } }; +const clearPendingRoots = async (storeId) => { + const url = `${CONFIG.DATALAYER_URL}/clear_pending_roots`; + const { cert, key, timeout } = getBaseOptions(); + + try { + const response = await superagent + .post(url) + .key(key) + .cert(cert) + .timeout(timeout) + .send({ id: storeId }); + + const data = response.body; + + if (data.success) { + return data.mirrors; + } + + logger.error(`FAILED GETTING MIRRORS FOR ${storeId}`); + return []; + } catch (error) { + logger.error(error); + return []; + } +}; + const addMirror = async (storeId, url, forceAddMirror = false) => { await wallet.waitForAllTransactionsToConfirm(); const homeOrg = await Organization.getHomeOrg(); @@ -373,51 +399,62 @@ const getRoots = async (storeIds) => { }; const pushChangeListToDataLayer = async (storeId, changelist) => { - try { - await wallet.waitForAllTransactionsToConfirm(); + let attempts = 0; + const maxAttempts = 5; - const url = `${CONFIG.DATALAYER_URL}/batch_update`; - const { cert, key, timeout } = getBaseOptions(); + while (attempts < maxAttempts) { + try { + await wallet.waitForAllTransactionsToConfirm(); - const response = await superagent - .post(url) - .key(key) - .cert(cert) - .timeout(timeout) - .send({ - changelist, - id: storeId, - fee: _.get(CONFIG, 'DEFAULT_FEE', 300000000), - }); + const url = `${CONFIG.DATALAYER_URL}/batch_update`; + const { cert, key, timeout } = getBaseOptions(); - const data = response.body; + const response = await superagent + .post(url) + .key(key) + .cert(cert) + .timeout(timeout) + .send({ + changelist, + id: storeId, + fee: _.get(CONFIG, 'DEFAULT_FEE', 300000000), + }); - console.log(data); + const data = response.body; + console.log(data); - if (data.success) { - logger.info( - `Success!, Changes were submitted to the datalayer for storeId: ${storeId}`, - ); - return true; - } + if (data.success) { + logger.info( + `Success!, Changes were submitted to the datalayer for storeId: ${storeId}`, + ); + return true; + } - if (data.error.includes('Key already present')) { - logger.info( - `The datalayer key was already present, its possible your data was pushed to the datalayer but never broadcasted to the blockchain. This can create a mismatched state in your node.`, + if (data.error.includes('Key already present')) { + logger.info('Pending root detected, waiting 5 seconds and retrying'); + await clearPendingRoots(storeId); + attempts++; + await new Promise((resolve) => setTimeout(resolve, 5000)); + continue; // Retry + } + + logger.error( + `There was an error pushing your changes to the datalayer, ${JSON.stringify( + data, + )}`, ); - return true; + return false; + } catch (error) { + logger.error(error.message); + logger.info('There was an error pushing your changes to the datalayer'); + return false; } - - logger.error( - `There was an error pushing your changes to the datalayer, ${JSON.stringify( - data, - )}`, - ); - return false; - } catch (error) { - logger.error(error.message); - logger.info('There was an error pushing your changes to the datalayer'); } + + logger.error( + 'Maximum attempts reached. Unable to push changes to the datalayer.', + ); + return false; }; const createDataLayerStore = async () => { @@ -663,4 +700,5 @@ export { cancelOffer, verifyOffer, takeOffer, + clearPendingRoots, }; From fd12c153d69b83b645a18bca892254b273d5adec Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 30 Nov 2023 10:32:08 -0500 Subject: [PATCH 04/49] fix: clear pending root if detected on push --- src/datalayer/persistance.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/datalayer/persistance.js b/src/datalayer/persistance.js index bd254874..c586f71c 100644 --- a/src/datalayer/persistance.js +++ b/src/datalayer/persistance.js @@ -77,14 +77,14 @@ const clearPendingRoots = async (storeId) => { const data = response.body; if (data.success) { - return data.mirrors; + return true; } - logger.error(`FAILED GETTING MIRRORS FOR ${storeId}`); - return []; + logger.error(`Unable to clear pending root for ${storeId}`); + return false; } catch (error) { logger.error(error); - return []; + return false; } }; @@ -432,10 +432,13 @@ const pushChangeListToDataLayer = async (storeId, changelist) => { if (data.error.includes('Key already present')) { logger.info('Pending root detected, waiting 5 seconds and retrying'); - await clearPendingRoots(storeId); - attempts++; - await new Promise((resolve) => setTimeout(resolve, 5000)); - continue; // Retry + const rootsCleared = await clearPendingRoots(storeId); + + if (rootsCleared) { + attempts++; + await new Promise((resolve) => setTimeout(resolve, 5000)); + continue; // Retry + } } logger.error( From d8b1c22998ca06797eb0ac3ab57ffda93d17c146 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 30 Nov 2023 10:33:52 -0500 Subject: [PATCH 05/49] fix: clear pending root if detected on push --- src/datalayer/persistance.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datalayer/persistance.js b/src/datalayer/persistance.js index c586f71c..fb462534 100644 --- a/src/datalayer/persistance.js +++ b/src/datalayer/persistance.js @@ -72,7 +72,7 @@ const clearPendingRoots = async (storeId) => { .key(key) .cert(cert) .timeout(timeout) - .send({ id: storeId }); + .send({ store_id: storeId }); const data = response.body; From afb56cfd985bba292c02c26f05e73f53f39e90db Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Thu, 30 Nov 2023 21:12:08 +0000 Subject: [PATCH 06/49] chore: Updating npm dev dependencies --- package-lock.json | 509 +++++++++++++++++++++++----------------------- package.json | 12 +- 2 files changed, 262 insertions(+), 259 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a8b6d0c..253b7090 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,17 +39,17 @@ "cadt": "build/server.js" }, "devDependencies": { - "@babel/cli": "^7.23.0", - "@babel/core": "^7.23.3", + "@babel/cli": "^7.23.4", + "@babel/core": "^7.23.5", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.3", + "@babel/preset-env": "^7.23.5", "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.4.2", - "@commitlint/config-conventional": "^18.4.2", + "@commitlint/cli": "^18.4.3", + "@commitlint/config-conventional": "^18.4.3", "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.53.0", + "eslint": "^8.54.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", @@ -85,9 +85,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.0.tgz", - "integrity": "sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.4.tgz", + "integrity": "sha512-j3luA9xGKCXVyCa5R7lJvOMM+Kc2JEnAEIgz2ggtjQ/j5YUVgfsg/WsG95bbsgq7YLHuiCOzMnoSasuY16qiCw==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -114,11 +114,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -126,28 +126,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", - "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -196,11 +196,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", "dependencies": { - "@babel/types": "^7.23.3", + "@babel/types": "^7.23.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -257,17 +257,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", + "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -492,9 +492,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } @@ -508,9 +508,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "engines": { "node": ">=6.9.0" } @@ -530,22 +530,22 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -556,9 +556,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -877,9 +877,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", - "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -927,9 +927,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", - "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -958,9 +958,9 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", - "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -975,9 +975,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", - "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -1060,9 +1060,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", - "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1092,9 +1092,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", - "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1140,9 +1140,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", - "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1171,9 +1171,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", - "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1300,9 +1300,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", - "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1316,9 +1316,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", - "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1332,9 +1332,9 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", - "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.3", @@ -1367,9 +1367,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", - "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1383,9 +1383,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", - "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1431,9 +1431,9 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", - "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -1634,15 +1634,15 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", - "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", + "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.3", + "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", @@ -1666,25 +1666,25 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.3", - "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", "@babel/plugin-transform-for-of": "^7.23.3", "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -1692,15 +1692,15 @@ "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", - "@babel/plugin-transform-numeric-separator": "^7.23.3", - "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.3", - "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", @@ -1776,9 +1776,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1807,18 +1807,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1827,11 +1827,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -1848,16 +1848,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.2.tgz", - "integrity": "sha512-dDfb2+wzeQe6ogdHNHOy0J0nraok+La0BoxamNMhBOng9/5GoESPDmKUJ1Lt1oivh5MfIgZh0Vm6f0rxkB8CoA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.3.tgz", + "integrity": "sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==", "dev": true, "dependencies": { - "@commitlint/format": "^18.4.0", - "@commitlint/lint": "^18.4.2", - "@commitlint/load": "^18.4.2", - "@commitlint/read": "^18.4.0", - "@commitlint/types": "^18.4.0", + "@commitlint/format": "^18.4.3", + "@commitlint/lint": "^18.4.3", + "@commitlint/load": "^18.4.3", + "@commitlint/read": "^18.4.3", + "@commitlint/types": "^18.4.3", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -1872,9 +1872,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.2.tgz", - "integrity": "sha512-qFjIqgKGV89lzUGHxanq2WJDXk5wZIxoZmZvf0I4i4CirL06Xj8qRh1shPsXNyI15d8Rj2HExww6cGJSFU9DdA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", + "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -1884,12 +1884,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.0.tgz", - "integrity": "sha512-1y6qHMU3o4cYQSK+Y9EnmH6H1GRiwQGjnLIUOIKlekrmfc8MrMk1ByNmb8od4vK3qHJAaL/77/5n+1uyyIF5dA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.3.tgz", + "integrity": "sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.0", + "@commitlint/types": "^18.4.3", "ajv": "^8.11.0" }, "engines": { @@ -1897,12 +1897,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.0.tgz", - "integrity": "sha512-N5cJo/n61ULSwz3W5Iz/IZJ0I9H/PaHc+OMcF2XcRVbLa6B3YwzEW66XGCRKVULlsBNSrIH6tk5un9ayXAXIdw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.3.tgz", + "integrity": "sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.0", + "@commitlint/types": "^18.4.3", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -1914,21 +1914,21 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.0.tgz", - "integrity": "sha512-g013SWki6ZWhURBLOSXTaVQGWHdA0QlPJGiW4a+YpThezmJOemvc4LiKVpn13AjSKQ40QnmBqpBrxujOaSo+3A==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.3.tgz", + "integrity": "sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.0.tgz", - "integrity": "sha512-MiAe4D5/ahty38CzULdQbpRa3ReKZtx0kyigOWcntq+N5uqez+Ac4/MO7H+3j1kC4G7nfJVfBu6TqcXeyNvhCQ==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.3.tgz", + "integrity": "sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.0", + "@commitlint/types": "^18.4.3", "chalk": "^4.1.0" }, "engines": { @@ -2006,12 +2006,12 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.2.tgz", - "integrity": "sha512-uujjyJlrXsMsQrv0r8HDGigAwJELPAMtA1Vxi2WUB54HbyAWa0Ue6ujMRZNKov2YeA96r6o72gLDnugb6yu8IA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.3.tgz", + "integrity": "sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.0", + "@commitlint/types": "^18.4.3", "semver": "7.5.4" }, "engines": { @@ -2019,30 +2019,30 @@ } }, "node_modules/@commitlint/lint": { - "version": "18.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.2.tgz", - "integrity": "sha512-ljGOIH7w9SnjvZFoKjf30iWFxDnezfRtOc50+rNLdDP0TpLspaYYLPhDO/TeVdmii1/AJiDgBIuBboQlaIy7Bw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.3.tgz", + "integrity": "sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.4.2", - "@commitlint/parse": "^18.4.0", - "@commitlint/rules": "^18.4.0", - "@commitlint/types": "^18.4.0" + "@commitlint/is-ignored": "^18.4.3", + "@commitlint/parse": "^18.4.3", + "@commitlint/rules": "^18.4.3", + "@commitlint/types": "^18.4.3" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.4.2", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.2.tgz", - "integrity": "sha512-CKmzXdF9XwZJoVijAqpUlV9qzZOkyiYni4KuSCtTZVAAVudi9H84cJ4FqZxSwEP9G21vmoJiNrW8G042AsduVg==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.3.tgz", + "integrity": "sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.0", - "@commitlint/execute-rule": "^18.4.0", - "@commitlint/resolve-extends": "^18.4.0", - "@commitlint/types": "^18.4.0", + "@commitlint/config-validator": "^18.4.3", + "@commitlint/execute-rule": "^18.4.3", + "@commitlint/resolve-extends": "^18.4.3", + "@commitlint/types": "^18.4.3", "@types/node": "^18.11.9", "chalk": "^4.1.0", "cosmiconfig": "^8.3.6", @@ -2127,22 +2127,22 @@ } }, "node_modules/@commitlint/message": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.0.tgz", - "integrity": "sha512-3kg6NQO6pJ+VdBTWi51KInT8ngkxPJaW+iI7URtUALjKcO9K4XY3gf80ZPmS1hDessrjb7qCr1lau8eWMINAQw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.3.tgz", + "integrity": "sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.0.tgz", - "integrity": "sha512-SxTCSUZH8CJNYWOlFg18YUQ2RLz8ubXKbpHUIiSNwCbiQx7UDCydp1JnhoB4sOYOxgV8d3nuDwYluRU5KnEY4A==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.3.tgz", + "integrity": "sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.0", - "conventional-changelog-angular": "^6.0.0", + "@commitlint/types": "^18.4.3", + "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, "engines": { @@ -2150,13 +2150,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.0.tgz", - "integrity": "sha512-IpnABCbDeOw5npZ09SZZGLfd3T7cFtsxUYm6wT3aGmIB2fXKE3fMeuj3jxXjMibiGIyA3Z5voCMuOcKWpkNySA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.3.tgz", + "integrity": "sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.4.0", - "@commitlint/types": "^18.4.0", + "@commitlint/top-level": "^18.4.3", + "@commitlint/types": "^18.4.3", "fs-extra": "^11.0.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" @@ -2166,13 +2166,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.0.tgz", - "integrity": "sha512-qhgU6ach+S6sJMD9NjCYiEycOObGhxzWQLQzqlScJCv9zkPs15Bg0ffLXTQ3z7ipXv46XEKYMnSJzjLRw2Tlkg==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.3.tgz", + "integrity": "sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.0", - "@commitlint/types": "^18.4.0", + "@commitlint/config-validator": "^18.4.3", + "@commitlint/types": "^18.4.3", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -2183,15 +2183,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.0.tgz", - "integrity": "sha512-T3ChRxQZ6g0iNCpVLc6KeQId0/86TnyQA8PFkng+dWElO2DAA5km/yirgKZV1Xlc+gF7Rf6d+a0ottxdKpOY+w==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.3.tgz", + "integrity": "sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.4.0", - "@commitlint/message": "^18.4.0", - "@commitlint/to-lines": "^18.4.0", - "@commitlint/types": "^18.4.0", + "@commitlint/ensure": "^18.4.3", + "@commitlint/message": "^18.4.3", + "@commitlint/to-lines": "^18.4.3", + "@commitlint/types": "^18.4.3", "execa": "^5.0.0" }, "engines": { @@ -2199,18 +2199,18 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.0.tgz", - "integrity": "sha512-bZXuCtfBPjNgtEnG3gwJrveIgfKK2UdhIhFvKpMTrQl/gAwoto/3mzmE7qGAHwmuP4eZ2U8X7iwMnqIlWmv2Tw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.3.tgz", + "integrity": "sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.0.tgz", - "integrity": "sha512-TfulcA8UHF7MZ6tm4Ci3aqZgMBZa1OoCg4prccWHvwG/hsHujZ7+0FKbeKqDbcSli/YWm4NJwEjl4uh5itIJeA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.3.tgz", + "integrity": "sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==", "dev": true, "dependencies": { "find-up": "^5.0.0" @@ -2220,9 +2220,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.4.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.0.tgz", - "integrity": "sha512-MKeaFxt0I9fhqUb2E+YIzX/gZtmkuodJET/XKiZIMvXUff8Ee4Ih86eLg+yAm2jf1pwGBmU02uNOp0y094w2Uw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.3.tgz", + "integrity": "sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -2412,9 +2412,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -2721,9 +2721,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-of+ICnbqjmFCiixUnqRulbylyXQrPqIGf/B3Jax1wIF3DvSheysQxAWvqHhZiW3IQrycvokcLcFQlveGp+vyNg==", + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", "dev": true }, "node_modules/@types/cookie": { @@ -2732,15 +2732,15 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-b698BLJ6kPVd6uhHsY7wlebZdrWPXYied883PDSzpJZYOP97EOn/oGdLCH3jJf157srkFReIZY5v0H1s8Dozrg==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", "dev": true }, "node_modules/@types/cors": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.16.tgz", - "integrity": "sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dependencies": { "@types/node": "*" } @@ -2765,9 +2765,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.18.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", - "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "version": "18.19.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.0.tgz", + "integrity": "sha512-667KNhaD7U29mT5wf+TZUnrzPrlL2GNQ5N0BMjO2oNULhBxX0/FKCkm6JMu0Jh7Z+1LwUlR21ekd7KhIboNFNw==", "dependencies": { "undici-types": "~5.26.4" } @@ -2799,9 +2799,9 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/validator": { - "version": "13.11.6", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.6.tgz", - "integrity": "sha512-HUgHujPhKuNzgNXBRZKYexwoG+gHKU+tnfPqjWXFghZAnn73JElicMkuSKJyLGr9JgyA8IgK7fj88IyA9rwYeQ==" + "version": "13.11.7", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.7.tgz", + "integrity": "sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -3425,9 +3425,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001562", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", - "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", + "version": "1.0.30001565", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", + "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", "funding": [ { "type": "opencollective", @@ -3755,9 +3755,12 @@ } }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -3825,15 +3828,15 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, "dependencies": { "compare-func": "^2.0.0" }, "engines": { - "node": ">=14" + "node": ">=16" } }, "node_modules/conventional-changelog-atom": { @@ -4750,9 +4753,9 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { - "version": "3.33.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", - "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", + "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", "dev": true, "dependencies": { "browserslist": "^4.22.1" @@ -5162,9 +5165,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.586", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.586.tgz", - "integrity": "sha512-qMa+E6yf1fNQbg3G66pHLXeJUP5CCCzNat1VPczOZOqgI2w4u+8y9sQnswMdGs5m4C1rOePq37EVBr/nsPQY7w==" + "version": "1.4.598", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.598.tgz", + "integrity": "sha512-0JnipX0scPUlwsptQVCZggoCpREv+IrVD3h0ZG+sldmK9L27tSV3QjV8+QdaA4qQTzDf3PluNS45YYJky1oASw==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5300,14 +5303,14 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -6056,9 +6059,9 @@ } }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -9764,9 +9767,9 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { - "version": "6.35.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.0.tgz", - "integrity": "sha512-cnxnmjUfphGfSKCwTtNZ3YD/F35fqMTNPw/Qe9xsMij49t6LkW2G57sNQkuKac8fkQgSX+M8OZOQsxCS6dnUwQ==", + "version": "6.35.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.1.tgz", + "integrity": "sha512-UlP5k33nJsN11wCDLaWZXw9bB8w4ESKc5QmG6D04qMimwBwKVNeqRJiaaBlEJdtg8cRK+OJh95dliP+uEi+g9Q==", "funding": [ { "type": "opencollective", @@ -10752,9 +10755,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", "dev": true, "peer": true, "bin": { diff --git a/package.json b/package.json index 257364bc..908704c3 100644 --- a/package.json +++ b/package.json @@ -59,17 +59,17 @@ "winston-daily-rotate-file": "^4.7.1" }, "devDependencies": { - "@babel/cli": "^7.23.0", - "@babel/core": "^7.23.3", + "@babel/cli": "^7.23.4", + "@babel/core": "^7.23.5", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.3", + "@babel/preset-env": "^7.23.5", "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.4.2", - "@commitlint/config-conventional": "^18.4.2", + "@commitlint/cli": "^18.4.3", + "@commitlint/config-conventional": "^18.4.3", "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.53.0", + "eslint": "^8.54.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", From 617ed5174915d62deae840784c23455fca0ebc4e Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Tue, 5 Dec 2023 09:44:25 -0500 Subject: [PATCH 07/49] fix: timer setting for organization sync --- src/tasks/sync-default-organizations.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tasks/sync-default-organizations.js b/src/tasks/sync-default-organizations.js index f4bc4ddd..b595f4f2 100644 --- a/src/tasks/sync-default-organizations.js +++ b/src/tasks/sync-default-organizations.js @@ -21,7 +21,7 @@ const task = new Task('sync-default-organizations', async () => { } catch (error) { logger.error( `Retrying in ${ - CONFIG?.TASK?.GOVERNANCE_SYNC_TASK_INTERVAL || 30 + CONFIG?.TASKS?.GOVERNANCE_SYNC_TASK_INTERVAL || 30 } seconds`, error, ); @@ -30,7 +30,7 @@ const task = new Task('sync-default-organizations', async () => { const job = new SimpleIntervalJob( { - seconds: CONFIG?.TASK?.GOVERNANCE_SYNC_TASK_INTERVAL || 30, + seconds: CONFIG?.TASKS?.GOVERNANCE_SYNC_TASK_INTERVAL || 30, runImmediately: true, }, task, From 69b7d011c305e00ca6a1c8133386904501258bed Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Wed, 6 Dec 2023 10:05:52 -0500 Subject: [PATCH 08/49] feat: add mirror check task --- src/datalayer/writeService.js | 19 +++--- .../organizations/organizations.model.js | 4 +- src/tasks/index.js | 2 + src/tasks/mirror-check.js | 62 +++++++++++++++++++ src/utils/datalayer-utils.js | 13 ++++ src/utils/defaultConfig.js | 2 + 6 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 src/tasks/mirror-check.js diff --git a/src/datalayer/writeService.js b/src/datalayer/writeService.js index 9f825a90..fa4573f6 100644 --- a/src/datalayer/writeService.js +++ b/src/datalayer/writeService.js @@ -2,15 +2,13 @@ import _ from 'lodash'; import * as dataLayer from './persistance'; import wallet from './wallet'; -import fullNode from './fullNode'; import * as simulator from './simulator'; -import { encodeHex } from '../utils/datalayer-utils'; +import { encodeHex, getMirrorUrl } from '../utils/datalayer-utils'; import { getConfig } from '../utils/config-loader'; import { logger } from '../config/logger.cjs'; import { Organization } from '../models'; -import { publicIpv4 } from '../utils/ip-tools'; -const { USE_SIMULATOR, DATALAYER_FILE_SERVER_URL } = getConfig().APP; +const { USE_SIMULATOR, AUTO_MIRROR_EXTERNAL_STORES } = getConfig().APP; const createDataLayerStore = async () => { await wallet.waitForAllTransactionsToConfirm(); @@ -27,14 +25,13 @@ const createDataLayerStore = async () => { await waitForStoreToBeConfirmed(storeId); await wallet.waitForAllTransactionsToConfirm(); - const chiaConfig = fullNode.getChiaConfig(); + // Default AUTO_MIRROR_EXTERNAL_STORES to true if it is null or undefined + const shouldMirror = AUTO_MIRROR_EXTERNAL_STORES ?? true; - await dataLayer.addMirror( - storeId, - DATALAYER_FILE_SERVER_URL || - `http://${await publicIpv4()}:${chiaConfig.data_layer.host_port}`, - true, - ); + if (shouldMirror) { + const mirrorUrl = await getMirrorUrl(); + await dataLayer.addMirror(storeId, mirrorUrl, true); + } } return storeId; diff --git a/src/models/organizations/organizations.model.js b/src/models/organizations/organizations.model.js index df33dea8..b66e6c46 100644 --- a/src/models/organizations/organizations.model.js +++ b/src/models/organizations/organizations.model.js @@ -219,8 +219,8 @@ class Organization extends Model { return registryVersionId; } - static async addMirror(storeId, coinId) { - await datalayer.addMirror(storeId, coinId); + static async addMirror(storeId, url) { + await datalayer.addMirror(storeId, url); } static async importHomeOrg(orgUid) { diff --git a/src/tasks/index.js b/src/tasks/index.js index 7c72f303..4ce68209 100644 --- a/src/tasks/index.js +++ b/src/tasks/index.js @@ -5,6 +5,7 @@ import syncPickLists from './sync-picklists'; import syncRegistries from './sync-registries'; import syncOrganizationMeta from './sync-organization-meta'; import syncGovernanceBody from './sync-governance-body'; +import mirrorCheck from './mirror-check'; const scheduler = new ToadScheduler(); @@ -23,6 +24,7 @@ const start = () => { syncPickLists, syncRegistries, syncOrganizationMeta, + mirrorCheck, ]; defaultJobs.forEach((defaultJob) => { jobRegistry[defaultJob.id] = defaultJob; diff --git a/src/tasks/mirror-check.js b/src/tasks/mirror-check.js new file mode 100644 index 00000000..b101e5a6 --- /dev/null +++ b/src/tasks/mirror-check.js @@ -0,0 +1,62 @@ +import { SimpleIntervalJob, Task } from 'toad-scheduler'; +import { Organization } from '../models'; +import { + assertDataLayerAvailable, + assertWalletIsSynced, +} from '../utils/data-assertions'; +import { logger } from '../config/logger.cjs'; +import { getConfig } from '../utils/config-loader'; +import { getMirrorUrl } from '../utils/datalayer-utils'; +import dotenv from 'dotenv'; + +const CONFIG = getConfig().APP; +dotenv.config(); + +// This task checks if there are any mirrors that have not been properly mirrored and then mirrors them if not + +const task = new Task('mirror-check', async () => { + try { + await assertDataLayerAvailable(); + await assertWalletIsSynced(); + + // Default AUTO_MIRROR_EXTERNAL_STORES to true if it is null or undefined + const shouldMirror = CONFIG?.AUTO_MIRROR_EXTERNAL_STORES ?? true; + + if (!CONFIG.USE_SIMULATOR && shouldMirror) { + runMirrorCheck(); + } + } catch (error) { + logger.error( + `Retrying in ${CONFIG?.TASKS?.MIRROR_CHECK_TASK_INTERVAL || 300} seconds`, + error, + ); + } +}); + +const job = new SimpleIntervalJob( + { + seconds: CONFIG?.TASKS?.MIRROR_CHECK_TASK_INTERVAL || 300, + runImmediately: true, + }, + task, + { id: 'mirror-check', preventOverrun: true }, +); + +const runMirrorCheck = async () => { + const homeOrg = Organization.getHomeOrg(); + + if (homeOrg) { + const organizations = Organization.getOrgsMap(); + const orgs = Object.keys(organizations); + for (const org of orgs) { + const orgData = organizations[org]; + const mirrorUrl = await getMirrorUrl(); + + // There is logic within the addMirror function to check if the mirror already exists + await Organization.addMirror(orgData.orgUid, mirrorUrl); + await Organization.addMirror(orgData.registryId, mirrorUrl); + } + } +}; + +export default job; diff --git a/src/utils/datalayer-utils.js b/src/utils/datalayer-utils.js index 6c53c090..b904d8ce 100644 --- a/src/utils/datalayer-utils.js +++ b/src/utils/datalayer-utils.js @@ -1,3 +1,7 @@ +import { getConfig } from './config-loader'; +import fullNode from '../datalayer/fullNode'; +import { publicIpv4 } from './ip-tools'; + export const encodeHex = (str) => { return Buffer.from(str).toString('hex'); }; @@ -71,3 +75,12 @@ export const deserializeMaker = (maker) => { return changes; }; + +export const getMirrorUrl = async () => { + const { DATALAYER_FILE_SERVER_URL } = getConfig().APP; + const chiaConfig = fullNode.getChiaConfig(); + return ( + DATALAYER_FILE_SERVER_URL || + `http://${await publicIpv4()}:${chiaConfig.data_layer.host_port}` + ); +}; diff --git a/src/utils/defaultConfig.js b/src/utils/defaultConfig.js index ca93057e..90a75f6e 100644 --- a/src/utils/defaultConfig.js +++ b/src/utils/defaultConfig.js @@ -21,10 +21,12 @@ export const defaultConfig = { CERTIFICATE_FOLDER_PATH: null, DATALAYER_FILE_SERVER_URL: null, AUTO_SUBSCRIBE_FILESTORE: false, + AUTO_MIRROR_EXTERNAL_STORES: true, TASKS: { GOVERNANCE_SYNC_TASK_INTERVAL: 86400, ORGANIZATION_META_SYNC_TASK_INTERVAL: 300, PICKLIST_SYNC_TASK_INTERVAL: 30, + MIRROR_CHECK_TASK_INTERVAL: 300, }, }, GOVERNANCE: { From 5629a6cab562c0fe4953c87eb29de0cca74c2b3f Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Wed, 6 Dec 2023 10:08:23 -0500 Subject: [PATCH 09/49] feat: add mirror check task --- src/datalayer/writeService.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/datalayer/writeService.js b/src/datalayer/writeService.js index fa4573f6..a6033e62 100644 --- a/src/datalayer/writeService.js +++ b/src/datalayer/writeService.js @@ -26,6 +26,7 @@ const createDataLayerStore = async () => { await wallet.waitForAllTransactionsToConfirm(); // Default AUTO_MIRROR_EXTERNAL_STORES to true if it is null or undefined + // This make sure this runs by default even if the config param is missing const shouldMirror = AUTO_MIRROR_EXTERNAL_STORES ?? true; if (shouldMirror) { From 3184c65e1ff5383012c32c33f80715e33c759195 Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Wed, 6 Dec 2023 21:15:19 +0000 Subject: [PATCH 10/49] chore: Updating npm dev dependencies --- package-lock.json | 78 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index 253b7090..411df3ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cadt", - "version": "1.7", + "version": "1.7.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cadt", - "version": "1.7", + "version": "1.7.2", "dependencies": { "@babel/eslint-parser": "^7.22.15", "async-mutex": "^0.4.0", @@ -49,7 +49,7 @@ "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.54.0", + "eslint": "^8.55.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", @@ -2345,9 +2345,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2412,9 +2412,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -2765,9 +2765,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.0.tgz", - "integrity": "sha512-667KNhaD7U29mT5wf+TZUnrzPrlL2GNQ5N0BMjO2oNULhBxX0/FKCkm6JMu0Jh7Z+1LwUlR21ekd7KhIboNFNw==", + "version": "18.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.2.tgz", + "integrity": "sha512-6wzfBdbWpe8QykUkXBjtmO3zITA0A3FIjoy+in0Y2K4KrCiRhNYJIdwAPDffZ3G6GnaKaSLSEa9ZuORLfEoiwg==", "dependencies": { "undici-types": "~5.26.4" } @@ -3252,9 +3252,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "funding": [ { "type": "opencollective", @@ -3270,9 +3270,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -3425,9 +3425,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001565", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", - "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", "funding": [ { "type": "opencollective", @@ -4753,12 +4753,12 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { - "version": "3.33.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", - "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", "dev": true, "dependencies": { - "browserslist": "^4.22.1" + "browserslist": "^4.22.2" }, "funding": { "type": "opencollective", @@ -5165,9 +5165,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.598", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.598.tgz", - "integrity": "sha512-0JnipX0scPUlwsptQVCZggoCpREv+IrVD3h0ZG+sldmK9L27tSV3QjV8+QdaA4qQTzDf3PluNS45YYJky1oASw==" + "version": "1.4.606", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.606.tgz", + "integrity": "sha512-Zdv0XuhfyWZUsQ5Uq59d43ZmZOdoGZNWjeN4WCxxlQaP8crAWdnWcTxfHKcaJl6PW2SWpHx6DsxSx7v6KcGCuw==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5303,14 +5303,14 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -8620,9 +8620,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/node-xlsx": { "version": "0.23.0", @@ -10755,9 +10755,9 @@ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, "node_modules/typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "peer": true, "bin": { diff --git a/package.json b/package.json index b8b7dfba..24bec79a 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "babel-plugin-module-resolver": "^5.0.0", "chai": "^4.3.10", "chai-http": "^4.4.0", - "eslint": "^8.54.0", + "eslint": "^8.55.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", From d2ac1a614557300adbe345ffad16a13befe35e28 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 7 Dec 2023 12:55:05 -0500 Subject: [PATCH 11/49] fix: index based sync --- ...0231207142225-AddGenerationIndexToAudit.js | 22 ++ src/database/migrations/index.js | 5 + src/models/audit/audit.modeltypes.cjs | 3 + src/tasks/sync-registries.js | 271 +++++++----------- src/utils/datalayer-utils.js | 36 +++ src/utils/sync-migration-utils.js | 110 +++++++ 6 files changed, 276 insertions(+), 171 deletions(-) create mode 100644 src/database/migrations/20231207142225-AddGenerationIndexToAudit.js create mode 100644 src/utils/sync-migration-utils.js diff --git a/src/database/migrations/20231207142225-AddGenerationIndexToAudit.js b/src/database/migrations/20231207142225-AddGenerationIndexToAudit.js new file mode 100644 index 00000000..8011fc5d --- /dev/null +++ b/src/database/migrations/20231207142225-AddGenerationIndexToAudit.js @@ -0,0 +1,22 @@ +'use strict'; + +export default { + async up(queryInterface, Sequelize) { + await Promise.all( + ['audit'].map((table) => { + queryInterface.addColumn(table, 'generation', { + type: Sequelize.INTEGER, + allowNull: true, + }); + }), + ); + }, + + async down(queryInterface) { + await Promise.all( + ['audit'].map((table) => { + queryInterface.removeColumn(table, 'generation'); + }), + ); + }, +}; diff --git a/src/database/migrations/index.js b/src/database/migrations/index.js index 1ff83fb2..ab0495b1 100644 --- a/src/database/migrations/index.js +++ b/src/database/migrations/index.js @@ -32,6 +32,7 @@ import AddIsTransferColumn from './20220825124702-add-isTransfer-column'; import AddOrgMetadata from './20220831023546-add-org-metadata'; import OrgSyncStatus from './20231020201652-OrgSyncStatus'; import OrgSyncRemaining from './20231020214357-OrgSyncRemainingCount'; +import AddGenerationIndexToAudit from './20231207142225-AddGenerationIndexToAudit'; export const migrations = [ { @@ -174,4 +175,8 @@ export const migrations = [ migration: OrgSyncRemaining, name: '20231020214357-OrgSyncRemainingCount', }, + { + migration: AddGenerationIndexToAudit, + name: '20231207142225-AddGenerationIndexToAudit', + }, ]; diff --git a/src/models/audit/audit.modeltypes.cjs b/src/models/audit/audit.modeltypes.cjs index fbd0518d..5afa682b 100644 --- a/src/models/audit/audit.modeltypes.cjs +++ b/src/models/audit/audit.modeltypes.cjs @@ -55,4 +55,7 @@ module.exports = { type: Sequelize.DATE, defaultValue: Sequelize.NOW, }, + generation: { + type: Sequelize.INTEGER, + } }; diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index bcdd3356..9381313f 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -1,11 +1,14 @@ import _ from 'lodash'; -import { Sequelize } from 'sequelize'; import { SimpleIntervalJob, Task } from 'toad-scheduler'; import { Mutex } from 'async-mutex'; import { Organization, Audit, ModelKeys, Staging, Meta } from '../models'; import datalayer from '../datalayer'; -import { decodeHex, encodeHex } from '../utils/datalayer-utils'; +import { + decodeHex, + encodeHex, + optimizeAndSortKvDiff, +} from '../utils/datalayer-utils'; import dotenv from 'dotenv'; import { logger } from '../config/logger.cjs'; import { sequelize, sequelizeMirror } from '../database'; @@ -15,6 +18,10 @@ import { assertWalletIsSynced, } from '../utils/data-assertions'; import { mirrorDBEnabled } from '../database'; +import { + migrateToNewSync, + generateGenerationIndex, +} from '../utils/sync-migration-utils'; dotenv.config(); const mutex = new Mutex(); @@ -28,59 +35,24 @@ const task = new Task('sync-registries', async () => { where: { metaKey: 'migratedToNewSync' }, }); - if (hasMigratedToNewSyncMethod || CONFIG.USE_SIMULATOR) { - await processJob(); - } else { - logger.info( - 'Initiating migration to the new synchronization method. This will require a complete resynchronization of all data and may take some time.', - ); + const hasMigratedToGenerationIndexSync = await Meta.findOne({ + where: { metaKey: 'migratedToIndexBasedSync' }, + }); - for (const modelKey of Object.keys(ModelKeys)) { - logger.info(`Resetting ${modelKey}`); - await ModelKeys[modelKey].destroy({ - where: { - id: { - [Sequelize.Op.ne]: null, - }, - }, - truncate: true, - }); + if (hasMigratedToNewSyncMethod || CONFIG.USE_SIMULATOR) { + if (hasMigratedToGenerationIndexSync) { + await processJob(); + } else { + await generateGenerationIndex(); } - - logger.info(`Resetting Audit Table`); - await Audit.destroy({ - where: { - id: { - [Sequelize.Op.ne]: null, - }, - }, - truncate: true, - }); - - await Meta.upsert({ - metaKey: 'migratedToNewSync', - metaValue: 'true', - }); - - await Organization.update( - { - synced: false, - sync_remaining: 0, - }, - { - where: { - id: { - [Sequelize.Op.ne]: null, - }, - }, - }, - ); - - logger.info(`Migration Complete`); + } else { + await migrateToNewSync(); } } catch (error) { logger.error(`Error during datasync: ${error.message}`); + console.trace(error); + // Log additional information if present in the error object if (error.response && error.response.body) { logger.error( @@ -116,42 +88,6 @@ const processJob = async () => { } }; -/** - * Optimizes and sorts an array of key-value differences. - * NOTE: The only reason this function works is because we treat INSERTS as UPSERTS - * If that ever changes, this function will need to be removed. - * - * @param {Array} kvDiff - An array of objects with { key, type } structure. - * @returns {Array} - An optimized and sorted array. - */ -function optimizeAndSortKvDiff(kvDiff) { - const deleteKeys = new Set(); - const insertKeys = new Set(); - - // Populate the Sets for quicker lookup - for (const diff of kvDiff) { - if (diff.type === 'DELETE') { - deleteKeys.add(diff.key); - } else if (diff.type === 'INSERT') { - insertKeys.add(diff.key); - } - } - - // Remove DELETE keys that also exist in INSERT keys - for (const insertKey of insertKeys) { - deleteKeys.delete(insertKey); - } - - // Filter and sort the array based on the optimized DELETE keys - const filteredArray = kvDiff.filter((diff) => { - return diff.type !== 'DELETE' || deleteKeys.has(diff.key); - }); - - return filteredArray.sort((a, b) => { - return a.type === b.type ? 0 : a.type === 'DELETE' ? -1 : 1; - }); -} - async function createTransaction(callback, afterCommitCallbacks) { let result = null; @@ -217,7 +153,7 @@ const syncOrganizationAudit = async (organization) => { } else { lastRootSaved = await Audit.findOne({ where: { registryId: organization.registryId }, - order: [['onchainConfirmationTimeStamp', 'DESC']], + order: [['generation', 'DESC']], raw: true, }); @@ -235,14 +171,16 @@ const syncOrganizationAudit = async (organization) => { if (!lastRootSaved) { logger.info(`Syncing new registry ${organization.name}`); + await Audit.create({ orgUid: organization.orgUid, registryId: organization.registryId, rootHash: generation.root_hash, type: 'CREATE REGISTRY', + generation: 0, change: null, table: null, - onchainConfirmationTimeStamp: generation.timestamp, + onchainConfirmationTimeStamp: generation.timestamp.toString(), }); // Destroy existing records for this singleton @@ -264,20 +202,16 @@ const syncOrganizationAudit = async (organization) => { generation = lastRootSaved; } - let isSynced = - rootHistory[rootHistory.length - 1].root_hash === generation.root_hash; - - const historyIndex = rootHistory.findIndex( - (root) => root.timestamp === generation.timestamp, - ); + const historyIndex = generation.generation + 1; - if (historyIndex === -1) { + if (historyIndex > rootHistory.length) { logger.error( `Could not find root history for ${organization.name} with timestamp ${generation.timestamp}, something is wrong and the sync for this organization will be paused until this is resolved.`, ); } - const syncRemaining = rootHistory.length - historyIndex - 1; + const syncRemaining = rootHistory.length - generation.generation; + const isSynced = syncRemaining === 0; await Organization.update( { @@ -293,7 +227,7 @@ const syncOrganizationAudit = async (organization) => { // Organization not synced, sync it logger.info(' '); - logger.info(`Syncing Registry: ${_.get(organization, 'name')}`); + logger.info(`Syncing ${organization.name} generation ${historyIndex}`); logger.info( `${organization.name} is ${ syncRemaining + 1 @@ -353,90 +287,85 @@ const syncOrganizationAudit = async (organization) => { const optimizedKvDiff = optimizeAndSortKvDiff(kvDiff); const updateTransaction = async (transaction, mirrorTransaction) => { + logger.info(`Syncing ${organization.name} generation ${historyIndex}`); for (const diff of optimizedKvDiff) { const key = decodeHex(diff.key); const modelKey = key.split('|')[0]; - if (!['comment', 'author'].includes(key)) { - const auditData = { - orgUid: organization.orgUid, - registryId: organization.registryId, - rootHash: root2.root_hash, - type: diff.type, - table: modelKey, - change: decodeHex(diff.value), - onchainConfirmationTimeStamp: root2.timestamp, - comment: _.get( - JSON.parse( - decodeHex(_.get(comment, '[0].value', encodeHex('{}'))), - ), - 'comment', - '', - ), - author: _.get( - JSON.parse( - decodeHex(_.get(author, '[0].value', encodeHex('{}'))), - ), - 'author', - '', - ), - }; - - if (modelKey) { - const record = JSON.parse(decodeHex(diff.value)); - const primaryKeyValue = - record[ModelKeys[modelKey].primaryKeyAttributes[0]]; - - if (diff.type === 'INSERT') { - logger.info(`UPSERTING: ${modelKey} - ${primaryKeyValue}`); - await ModelKeys[modelKey].upsert(record, { - transaction, - mirrorTransaction, - }); - } else if (diff.type === 'DELETE') { - logger.info(`DELETING: ${modelKey} - ${primaryKeyValue}`); - await ModelKeys[modelKey].destroy({ - where: { - [ModelKeys[modelKey].primaryKeyAttributes[0]]: - primaryKeyValue, - }, - transaction, - mirrorTransaction, - }); - } + const auditData = { + orgUid: organization.orgUid, + registryId: organization.registryId, + rootHash: root2.root_hash, + type: diff.type, + table: modelKey, + change: decodeHex(diff.value), + onchainConfirmationTimeStamp: root2.timestamp, + generation: historyIndex, + comment: _.get( + JSON.parse(decodeHex(_.get(comment, '[0].value', encodeHex('{}')))), + 'comment', + '', + ), + author: _.get( + JSON.parse(decodeHex(_.get(author, '[0].value', encodeHex('{}')))), + 'author', + '', + ), + }; + + if (modelKey) { + const record = JSON.parse(decodeHex(diff.value)); + const primaryKeyValue = + record[ModelKeys[modelKey].primaryKeyAttributes[0]]; + + if (diff.type === 'INSERT') { + logger.info(`UPSERTING: ${modelKey} - ${primaryKeyValue}`); + await ModelKeys[modelKey].upsert(record, { + transaction, + mirrorTransaction, + }); + } else if (diff.type === 'DELETE') { + logger.info(`DELETING: ${modelKey} - ${primaryKeyValue}`); + await ModelKeys[modelKey].destroy({ + where: { + [ModelKeys[modelKey].primaryKeyAttributes[0]]: primaryKeyValue, + }, + transaction, + mirrorTransaction, + }); + } - if (organization.orgUid === homeOrg?.orgUid) { - const stagingUuid = [ - 'unit', - 'project', - 'units', - 'projects', - ].includes(modelKey) - ? primaryKeyValue - : undefined; - - if (stagingUuid) { - afterCommitCallbacks.push(async () => { - logger.info(`DELETING STAGING: ${stagingUuid}`); - await Staging.destroy({ - where: { uuid: stagingUuid }, - }); + if (organization.orgUid === homeOrg?.orgUid) { + const stagingUuid = [ + 'unit', + 'project', + 'units', + 'projects', + ].includes(modelKey) + ? primaryKeyValue + : undefined; + + if (stagingUuid) { + afterCommitCallbacks.push(async () => { + logger.info(`DELETING STAGING: ${stagingUuid}`); + await Staging.destroy({ + where: { uuid: stagingUuid }, }); - } + }); } } - - // Create the Audit record - await Audit.create(auditData, { transaction, mirrorTransaction }); - await Organization.update( - { registryHash: root2.root_hash }, - { - where: { orgUid: organization.orgUid }, - transaction, - mirrorTransaction, - }, - ); } + + // Create the Audit record + await Audit.create(auditData, { transaction, mirrorTransaction }); + await Organization.update( + { registryHash: root2.root_hash }, + { + where: { orgUid: organization.orgUid }, + transaction, + mirrorTransaction, + }, + ); } }; diff --git a/src/utils/datalayer-utils.js b/src/utils/datalayer-utils.js index 6c53c090..9052cb00 100644 --- a/src/utils/datalayer-utils.js +++ b/src/utils/datalayer-utils.js @@ -71,3 +71,39 @@ export const deserializeMaker = (maker) => { return changes; }; + +/** + * Optimizes and sorts an array of key-value differences. + * NOTE: The only reason this function works is because we treat INSERTS as UPSERTS + * If that ever changes, this function will need to be removed. + * + * @param {Array} kvDiff - An array of objects with { key, type } structure. + * @returns {Array} - An optimized and sorted array. + */ +export const optimizeAndSortKvDiff = (kvDiff) => { + const deleteKeys = new Set(); + const insertKeys = new Set(); + + // Populate the Sets for quicker lookup + for (const diff of kvDiff) { + if (diff.type === 'DELETE') { + deleteKeys.add(diff.key); + } else if (diff.type === 'INSERT') { + insertKeys.add(diff.key); + } + } + + // Remove DELETE keys that also exist in INSERT keys + for (const insertKey of insertKeys) { + deleteKeys.delete(insertKey); + } + + // Filter and sort the array based on the optimized DELETE keys + const filteredArray = kvDiff.filter((diff) => { + return diff.type !== 'DELETE' || deleteKeys.has(diff.key); + }); + + return filteredArray.sort((a, b) => { + return a.type === b.type ? 0 : a.type === 'DELETE' ? -1 : 1; + }); +}; diff --git a/src/utils/sync-migration-utils.js b/src/utils/sync-migration-utils.js new file mode 100644 index 00000000..c5f08511 --- /dev/null +++ b/src/utils/sync-migration-utils.js @@ -0,0 +1,110 @@ +import { Sequelize } from 'sequelize'; +import { Organization, Audit, ModelKeys, Meta } from '../models'; +import { logger } from '../config/logger.cjs'; +import datalayer from '../datalayer'; +import { sequelize } from '../database'; + +export const migrateToNewSync = async () => { + logger.info( + 'Initiating migration to the new synchronization method. This will require a complete resynchronization of all data and may take some time.', + ); + + for (const modelKey of Object.keys(ModelKeys)) { + logger.info(`Resetting ${modelKey}`); + await ModelKeys[modelKey].destroy({ + where: { + id: { + [Sequelize.Op.ne]: null, + }, + }, + truncate: true, + }); + } + + logger.info(`Resetting Audit Table`); + await Audit.destroy({ + where: { + id: { + [Sequelize.Op.ne]: null, + }, + }, + truncate: true, + }); + + await Meta.upsert({ + metaKey: 'migratedToNewSync', + metaValue: 'true', + }); + + await Organization.update( + { + synced: false, + sync_remaining: 0, + }, + { + where: { + id: { + [Sequelize.Op.ne]: null, + }, + }, + }, + ); + + logger.info(`Migration Complete`); +}; + +export const generateGenerationIndex = async () => { + const organizations = await Organization.findAll({ + where: { subscribed: true }, + raw: true, + }); + + for (const organization of organizations) { + const rootHistory = await datalayer.getRootHistory(organization.registryId); + + for (let i = 0; i < rootHistory.length; i++) { + // Find the oldest timestamp with a null value + const oldestNullGenerations = await Audit.findAll({ + where: { + registryId: organization.registryId, + generation: null, + }, + group: 'onChainConfirmationTimeStamp', + order: [ + [ + sequelize.fn('MIN', sequelize.col('onChainConfirmationTimeStamp')), + 'ASC', + ], + ], + limit: 1, + raw: true, + }); + + const oldestNullGeneration = oldestNullGenerations[0]; + + if (!oldestNullGeneration) { + continue; + } + + logger.info(`Syncing ${organization.name} generation ${i}`); + + await Audit.update( + { + generation: i, + }, + { + where: { + registryId: organization.registryId, + onchainConfirmationTimeStamp: + oldestNullGeneration.onchainConfirmationTimeStamp, + }, + }, + ); + } + } + + await Meta.upsert({ + metaKey: 'migratedToIndexBasedSync', + metaValue: 'true', + }); +}; From 86e073a37a2db70208f8d30f8637d5c4a88dd9c4 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Mon, 11 Dec 2023 09:52:15 -0500 Subject: [PATCH 12/49] feat: require pagination --- src/validations/projects.validations.js | 42 ++++++++++++-------- src/validations/units.validations.js | 51 +++++++++++++++---------- 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/src/validations/projects.validations.js b/src/validations/projects.validations.js index d894fef2..9d835c80 100644 --- a/src/validations/projects.validations.js +++ b/src/validations/projects.validations.js @@ -60,22 +60,32 @@ export const baseSchema = { timeStaged: Joi.date().timestamp().allow(null).optional(), }; -export const projectsGetQuerySchema = Joi.object() - .keys({ - page: Joi.number(), - limit: Joi.number(), - search: Joi.string(), - columns: Joi.array().items(Joi.string()).single(), - orgUid: Joi.string(), - warehouseProjectId: Joi.string(), - xls: Joi.boolean(), - projectIds: Joi.array().items(Joi.string()).single(), - order: Joi.string().regex(genericSortColumnRegex), - filter: Joi.string().regex(genericFilterRegex), - onlyMarketplaceProjects: Joi.boolean(), - }) - .with('page', 'limit') - .with('limit', 'page'); +export const projectsGetQuerySchema = Joi.object({ + page: Joi.number(), + limit: Joi.number(), + search: Joi.string(), + columns: Joi.array().items(Joi.string()).single(), + orgUid: Joi.string(), + warehouseProjectId: Joi.string(), + xls: Joi.boolean(), + projectIds: Joi.array().items(Joi.string()).single(), + order: Joi.string().regex(genericSortColumnRegex), + filter: Joi.string().regex(genericFilterRegex), + onlyMarketplaceProjects: Joi.boolean(), +}) + .when( + Joi.object({ + warehouseProjectId: Joi.string().min(1), + }).or('warehouseProjectId'), + { + then: Joi.object(), + otherwise: Joi.object({ + page: Joi.number().required(), + limit: Joi.number().required(), + }), + }, + ) + .and('page', 'limit'); export const projectsPostSchema = Joi.object({ ...baseSchema, diff --git a/src/validations/units.validations.js b/src/validations/units.validations.js index f78c0c6f..eae4c519 100644 --- a/src/validations/units.validations.js +++ b/src/validations/units.validations.js @@ -53,27 +53,36 @@ export const unitsPostSchema = Joi.object({ ...unitsBaseSchema, }); -export const unitsGetQuerySchema = Joi.object() - .keys({ - page: Joi.number(), - limit: Joi.number(), - search: Joi.string(), - warehouseUnitId: Joi.string(), - columns: Joi.array().items(Joi.string()).single(), - orgUid: Joi.string(), - order: Joi.alternatives().try( - // backwards compatibility for old order usage - Joi.string().valid('SERIALNUMBER', 'ASC', 'DESC'), - // new order usage - Joi.string().regex(genericSortColumnRegex), - ), - xls: Joi.boolean(), - marketplaceIdentifiers: Joi.array().items(Joi.string()).single(), - hasMarketplaceIdentifier: Joi.boolean(), - includeProjectInfoInSearch: Joi.boolean(), - filter: Joi.string().regex(genericFilterRegex), - }) - .with('page', 'limit'); +export const unitsGetQuerySchema = Joi.object({ + page: Joi.number(), + limit: Joi.number(), + search: Joi.string(), + warehouseUnitId: Joi.string(), + columns: Joi.array().items(Joi.string()).single(), + orgUid: Joi.string(), + order: Joi.alternatives().try( + Joi.string().valid('SERIALNUMBER', 'ASC', 'DESC'), + Joi.string().regex(genericSortColumnRegex), + ), + xls: Joi.boolean(), + marketplaceIdentifiers: Joi.array().items(Joi.string()).single(), + hasMarketplaceIdentifier: Joi.boolean(), + includeProjectInfoInSearch: Joi.boolean(), + filter: Joi.string().regex(genericFilterRegex), +}) + .when( + Joi.object({ + warehouseUnitId: Joi.string().min(1), + }).or('warehouseUnitId'), + { + then: Joi.object(), + otherwise: Joi.object({ + page: Joi.number().required(), + limit: Joi.number().required(), + }), + }, + ) + .and('page', 'limit'); export const unitsUpdateSchema = Joi.object({ warehouseUnitId: Joi.string().required(), From 9a996c2a82d9ec2ab2f02b6e4f0a969e5efaa4d9 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Mon, 11 Dec 2023 10:31:21 -0500 Subject: [PATCH 13/49] test: address tests --- tests/resources/projects.spec.js | 17 ++++++++++++++--- tests/resources/units.spec.js | 27 ++++++++++++++++++++------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index bcb87e76..ee26a3ee 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -43,7 +43,9 @@ describe('Project Resource CRUD', function () { describe('error states', function () { it('errors if there if there is no connection to the datalayer', async function () { sinon.stub(datalayer, 'dataLayerAvailable').resolves(false); - const response = await supertest(app).get('/v1/projects'); + const response = await supertest(app) + .get('/v1/projects') + .query({ page: 1, limit: 100 }); expect(response.statusCode).to.equal(400); expect(response.body.error).to.equal( @@ -55,7 +57,10 @@ describe('Project Resource CRUD', function () { describe('success states', function () { it('gets all the projects available', async function () { // no query params - const projects = await testFixtures.getProjectByQuery(); + const projects = await testFixtures.getProjectByQuery({ + page: 1, + limit: 100, + }); expect(projects.length).to.equal(12); }).timeout(TEST_WAIT_TIME * 10); @@ -63,6 +68,8 @@ describe('Project Resource CRUD', function () { // ?orgUid=XXXX const projects = await testFixtures.getProjectByQuery({ orgUid: 'a807e453-6524-49df-a32d-785e56cf560e', + page: 1, + limit: 100, }); expect(projects.length).to.equal(3); }).timeout(TEST_WAIT_TIME * 10); @@ -71,6 +78,8 @@ describe('Project Resource CRUD', function () { // ?search=XXXX const projects = await testFixtures.getProjectByQuery({ search: 'City of Arcata', + page: 1, + limit: 100, }); expect(projects.length).to.equal(1); }).timeout(TEST_WAIT_TIME * 10); @@ -80,6 +89,8 @@ describe('Project Resource CRUD', function () { const projects = await testFixtures.getProjectByQuery({ orgUid: 'a807e453-6524-49df-a32d-785e56cf560e', search: 'City of Arcata', + page: 1, + limit: 100, }); expect(projects.length).to.equal(1); @@ -222,7 +233,7 @@ describe('Project Resource CRUD', function () { describe('error states', function () { it('errors if no home organization exists', async function () { const responseCreate = await supertest(app) - .get('/v1/projects') + .post('/v1/projects') .send({ ...newProject, }); diff --git a/tests/resources/units.spec.js b/tests/resources/units.spec.js index 0f677335..83e88b6b 100644 --- a/tests/resources/units.spec.js +++ b/tests/resources/units.spec.js @@ -31,7 +31,9 @@ describe('Units Resource CRUD', function () { await testFixtures.createNewUnit(); await testFixtures.commitStagingRecords(); await testFixtures.waitForDataLayerSync(); - const result = await supertest(app).get('/v1/units'); + const result = await supertest(app) + .get('/v1/units') + .query({ page: 1, limit: 100 }); response = result.body[0]; }); @@ -44,7 +46,9 @@ describe('Units Resource CRUD', function () { it('gets all the units available', async function () { // no query params - const result = await supertest(app).get('/v1/units').query({}); + const result = await supertest(app) + .get('/v1/units') + .query({ page: 1, limit: 100 }); expect(result.body.length).to.not.equal(0); }).timeout(TEST_WAIT_TIME * 10); @@ -52,7 +56,7 @@ describe('Units Resource CRUD', function () { it('gets all the units filtered by orgUid', async function () { const result = await supertest(app) .get('/v1/units') - .query({ orgUid: response.orgUid }); + .query({ orgUid: response.orgUid, page: 1, limit: 100 }); expect(result.body.length).to.not.equal(1); // ?orgUid=XXXX @@ -73,7 +77,7 @@ describe('Units Resource CRUD', function () { const result = await supertest(app) .get('/v1/units') - .query({ order: 'SERIALNUMBER' }); + .query({ order: 'SERIALNUMBER', page: 1, limit: 100 }); expect(result.body[0].serialNumberBlock).to.equal('AAAAA1-AAAAA2'); expect(result.body[1].serialNumberBlock).to.equal('AAAAA11-AAAAA21'); @@ -86,7 +90,7 @@ describe('Units Resource CRUD', function () { // ?search=XXXX const result = await supertest(app) .get('/v1/units') - .query({ search: 'Certification' }); + .query({ search: 'Certification', page: 1, limit: 100 }); expect(result.body.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); @@ -94,7 +98,12 @@ describe('Units Resource CRUD', function () { // ?orgUid=XXXX&search=XXXX const result = await supertest(app) .get('/v1/units') - .query({ orgUid: response.orgUid, search: 'Certification' }); + .query({ + orgUid: response.orgUid, + search: 'Certification', + page: 1, + limit: 100, + }); expect(result.body.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); @@ -110,7 +119,11 @@ describe('Units Resource CRUD', function () { // ?warehouseUnitId=XXXX const result = await supertest(app) .get('/v1/units') - .query({ warehouseUnitId: response.warehouseUnitId, limit: 1 }); + .query({ + warehouseUnitId: response.warehouseUnitId, + page: 1, + limit: 100, + }); expect(result.body.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); From f706fa5631d3ea35ea23b84ae2c74058891ecef0 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Mon, 11 Dec 2023 14:15:31 -0500 Subject: [PATCH 14/49] test: more tests fixes --- tests/integration/unit.spec.js | 4 +++- tests/test-fixtures/project-fixtures.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/integration/unit.spec.js b/tests/integration/unit.spec.js index 99081e76..3147a7bf 100644 --- a/tests/integration/unit.spec.js +++ b/tests/integration/unit.spec.js @@ -164,7 +164,9 @@ describe('Unit Resource Integration Tests', function () { await testFixtures.waitForDataLayerSync(); // Get a unit to split - const allUnitsResult = await supertest(app).get('/v1/units'); + const allUnitsResult = await supertest(app) + .get('/v1/units') + .query({ page: 1, limit: 100 }); const unitRecord = _.head(allUnitsResult.body); diff --git a/tests/test-fixtures/project-fixtures.js b/tests/test-fixtures/project-fixtures.js index 19ab4446..835064e7 100644 --- a/tests/test-fixtures/project-fixtures.js +++ b/tests/test-fixtures/project-fixtures.js @@ -68,7 +68,9 @@ export const getProject = async (warehouseProjectId) => { }; export const getProjectByQuery = async (query = {}) => { - const result = await supertest(app).get('/v1/projects').query(query); + const result = await supertest(app) + .get('/v1/projects') + .query({ page: 1, limit: 100, ...query }); // expect(result.body).to.be.an('array'); expect(result.statusCode).to.equal(200); From 6a2ac8cf4c20dc8cb602411b0aaf0ad559237491 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Tue, 12 Dec 2023 09:38:28 -0500 Subject: [PATCH 15/49] test: fix test --- src/tasks/sync-registries.js | 17 +++++++++-------- tests/integration/project.spec.js | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index 152f0130..727eb5ab 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -158,6 +158,7 @@ const syncOrganizationAudit = async (organization) => { console.log('USING MOCK ROOT HISTORY'); lastRootSaved = rootHistory[0]; lastRootSaved.rootHash = lastRootSaved.root_hash; + lastRootSaved.generation = 0; } else { lastRootSaved = await Audit.findOne({ where: { registryId: organization.registryId }, @@ -175,7 +176,7 @@ const syncOrganizationAudit = async (organization) => { } } - let generation = _.get(rootHistory, '[0]'); + let currentGeneration = _.get(rootHistory, '[0]'); if (!lastRootSaved) { logger.info(`Syncing new registry ${organization.name}`); @@ -183,12 +184,12 @@ const syncOrganizationAudit = async (organization) => { await Audit.create({ orgUid: organization.orgUid, registryId: organization.registryId, - rootHash: generation.root_hash, + rootHash: currentGeneration.root_hash, type: 'CREATE REGISTRY', - generation: 0, + currentGeneration: 0, change: null, table: null, - onchainConfirmationTimeStamp: generation.timestamp.toString(), + onchainConfirmationTimeStamp: currentGeneration.timestamp.toString(), }); // Destroy existing records for this singleton @@ -207,18 +208,18 @@ const syncOrganizationAudit = async (organization) => { return; } else { - generation = lastRootSaved; + currentGeneration = lastRootSaved; } - const historyIndex = generation.generation + 1; + const historyIndex = currentGeneration.generation; if (historyIndex > rootHistory.length) { logger.error( - `Could not find root history for ${organization.name} with timestamp ${generation.timestamp}, something is wrong and the sync for this organization will be paused until this is resolved.`, + `Could not find root history for ${organization.name} with timestamp ${currentGeneration.timestamp}, something is wrong and the sync for this organization will be paused until this is resolved.`, ); } - const syncRemaining = rootHistory.length - generation.generation; + const syncRemaining = rootHistory.length - currentGeneration.generation; const isSynced = syncRemaining === 0; await Organization.update( diff --git a/tests/integration/project.spec.js b/tests/integration/project.spec.js index ad12769d..9c6f7429 100644 --- a/tests/integration/project.spec.js +++ b/tests/integration/project.spec.js @@ -23,7 +23,7 @@ describe('Project Resource Integration Tests', function () { homeOrgUid = await testFixtures.getHomeOrgId(); }); - it('deletes a project end-to-end (with simulator)', async function () { + it.only('deletes a project end-to-end (with simulator)', async function () { /* Basic Idea for this test is that we are going to create a project and verify that the new project propagates through the data layer and into our db. Then we are going From c5ae620ce62abf68f6ecd977c83aae6082b14d61 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 12 Dec 2023 09:48:11 -0800 Subject: [PATCH 16/49] docs: add terms and conditions --- README.md | 2 ++ ...CAD_Trust_Registry_Terms_and_Conditions.pdf | Bin 0 -> 201084 bytes docs/CAD_Trust_User_Terms_and_Conditions.pdf | Bin 0 -> 168617 bytes 3 files changed, 2 insertions(+) create mode 100644 docs/CAD_Trust_Registry_Terms_and_Conditions.pdf create mode 100644 docs/CAD_Trust_User_Terms_and_Conditions.pdf diff --git a/README.md b/README.md index dea85d6e..fae178e0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Climate Action Data Trust +**Please review the [CAD Trust Terms and Conditions](docs/CAD_Trust_Registry_Terms_and_Conditions.pdf) and [CAD Trust User Terms and Conditions](docs/CAD_Trust_User_Terms_and_Conditions.pdf).** + ​This project provides the Climate Action Data Trust (CADT) API that integrates with the [Chia Blockchain](https://github.com/Chia-Network/chia-blockchain). For a user interface, see the [CADT UI project](https://github.com/Chia-Network/climate-warehouse-ui) which will connect to the CADT API. This project was formerly known as the Climate Warehouse and you may see this term used interchangeably with CADT. diff --git a/docs/CAD_Trust_Registry_Terms_and_Conditions.pdf b/docs/CAD_Trust_Registry_Terms_and_Conditions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..246a7f811ebb78f6f57cfa18998421c9247a01f6 GIT binary patch literal 201084 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

!YIcTH>%~>ZC&p61;Xd3DV0>gb5bna!yQ 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 Z(;HtZNZZqwfZxs-&IQyroPQbqzX0|}P~QLm literal 0 HcmV?d00001 diff --git a/docs/CAD_Trust_User_Terms_and_Conditions.pdf b/docs/CAD_Trust_User_Terms_and_Conditions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b095e6983ff2ed0287e9760056832e03fc239ca3 GIT binary patch literal 168617 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%0A9~J;a<6wDM7AWl> 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�HU7&dA;Gu)n8Z6D`@b znix=)V-xsdb2z}l-S%6!U0Cv!t%M~Sc&y6rEsdze!oXDhY>t_7nib~z zolS5cMumr6g^B_eshKY1fX^jUH-MWrm^Nho?0fe_0MXMP4jkh)X5n#;MI>Y-@g=21 z^x2o~dkwY1KMp|c_}neLe;(xa1VnIqK4q)&2D8eIQsi) zTf(b2I6j$$D!Cpcmk4bfYxtJ28$!Uze8of5WU< zePC(dTS!;s>zZ^*Bci>8yk#V50EtGmpW>bhKQ%GW=On|{q~Af_0f`8w++#=Gv) zk&EBK|K3jwa=v#KBVaANJ}p8~nw6w$)J^G}{^Txfef~DAeA^V0WoxgJkpUAHJy~vcuW5}R zrR)_+vVJppQ)EjE)Mp0$i>otG-Zba=byxp`YjTCoF_15<@5Em3(Kj7|$U}flG^24{rG8wkQ4>?OC1MBB#RuP%juu~{aF9ptc+mNp1VgnWf+-{}Lsmi^9(Mn+ zd=l|c7OR5q#zG7FT17ZJfI4Hkpqm$uhfQSJ2`i_9GVKP|RFH)I0U_xoauzSA9fBfv z3VEw!#w5GIn6yVYLd9NqH5t{7!aG$fGZFa*gx&X=+w|+1Qb&fUw$W4j)L*mVNz@9M z9nvQ^oLRGIJu?Cd1U#0uJ5LYXVxG&VFGALBbMjDe zMs@e!trmB;wRpoODle%Bv(IW$@tZUykN9C@W_9HK zi$*%y#QEXSjGeOw2x!3EUs#ontT8p$h2uZ3g2uzq-jDqPw=aIvCA~o1NbZ56E|Cf@ z+WKaDA?T`w&dLg(48rBMjB^ZJd|B}Lm>LR{>7o9ZBOyuYpMOurml3t|@z8Nxx1Q0- zf^1yv<6lO3Z;j}*q<3U}FdGQmJeZWt;T8Z?MDg~VFWd+Rsz2x3Dqx|EtPLF;?Tz%T{wmt&o5MmeGBXk|5d2lt zBw)}aU}t5}CLmzeBw%9a_$aVy5-_u}60oweeN-4f=!~3<1kB9Lf6||p5Bdk=UoC&~ zKk0+_f0h2p|3@2}CIK58`(KHjiHYD(`m4^!NWlIf@lXAO`-78(UGp#593K|^#rZ+~ z;QXMlewh4k{r(~24~6qTrL!?IezdT0{6orLmNGE>hqeD|J<}hZABpvY{wM#V@xOku zKREnF|NB#a@cyykPuoZO(8S36p`4xhkAaNrAH{z`j)Um~IwmG<0&RkS^#;>_dgG5d z41dG_QTp@x7x@3G|Ka%~^iTe;=Kohy|7-nk{(ngQbNpX8;4h7TB>floKidBX=>J9L z2kd|K{af3ASo8lM`2VKwZ@vHD<$w9~U;W1Xq41xh=nuC4uIZm{|CiSP&hvMVKfHgJ z|AFg2j(-sT@X|kr#K)KNpIZKb?H}r&q4LLz|J@r51e`1^|04Bo`G5TIr~kj^fAs%p z`;-3G@h9it;QWvFf9PcXX!+Cg?;d~3e{A?`K>ho-`j7JeMCadWtbfyZc<4pVEFF#P z=|wH|9F2sH3~UUI=%tOUO&m=>h6)=WA1u`0r!Uu3?Z__k9tN0zb8jfzWg)wj9$7+$ zW;lB_)#TGpIGRH+Ayz2+kqs3m0dQoM0&nkfFY!EeHf1i5J8?dT3|$+oq^UiE;8_De zw=Am4@!T@%h9pOn=uPW1WZ5!&pF)dBcC>wA>JuHS13UU1a&?k@u?4RTuCo@>e%;hb z@F3Z{s|o;0S7BH`+q_2#0y$YNp?TsNFnfJ2Wb7cQ54uDZ0h zGL`3K$}}jK(=;$3SH$u-|NCou3h8mxypG3d+x(ixsh0--r_Uh9BvfD7X4#!v<2#6TrRaYwOW&w2hCq!lFYkyQyBQ4Uy-y(un`+b3^U7D(SEL~L6l!N`%XRsI8wjpn_4?}_mJ+7FPPiWoN>vjB`iDzTwjwf-3M_aocLVYdp`AW z;MVku4gBDbzp4ZsY#Tk?KKkOA-&uma3CT87u&MdWm|5%QRHJ|M-AKO7H*P&27r-|9 zt{OoK_g<6fj-c{NjD1U=xsQFSB5)3v2->$8E$owFa7 zyyK+4Yd?p7bh>CD)PrAn)b=V=1#sh2k>3F3+yANV|54~a8Q!5Y-=irb50?-*yr3L<2p9fd0j6L&Dnu$NO1%0B+nsK7}$*u z2`ld!G5OUW9#TgB!66G1>Rl)i(jUT4{l|~h_2!F_FwLlA^036pCeg^Z?XvN&(eRP` z!jToiIyeHU=s&&_iJRaBZyEPO=eSaDO%RKp;^u#4TEr2!YH#&cS`UDpuW0#knmoH- zp|R+(7Mw1Be`T~!r(Nx;km(>W@KQflvtKvCTVgbRqRyOxjeT^yvy_bac68WYY!-*Q zyT&9})RNmMPL-+=nXx~N>W~_KLaCl4DB8RlZ!9BIl_)bLA?nMgQ1B7!OqoY4GiU+T zL&#*BinQ%x{eQ10a7P~II()*3`Uhfa_Tr`!L~xEuu!bT*o`{6iDGo>zRi&Q(JGWG;2j!f{dKmS&0d8Fdx+98UJ4HWY2C(9f|7Dui$pYEm$6E>C2iBvi%YQohS^Eg<@gpRFi$ppY#g}r8i(?rXe^c zu^2tkxK_x5OHkY_5WZ9)ZU?YZl3N7y2R6u*f3`%6Q6y3{LkmS3O0RQvxC-gP8tfd9hqQt#ZXh@)|<-Cz?2he+*%Ac-FlEgPJWklJ8f_QEl^ewDs?4dNKMB zHOQ(E^AMWV0YLcxpOS+}RVSbsTbaFI!(C;OwSiL4>yfF(taub#?!+sS~ znO6p}<*;`3f9u3lcVSUR(wZ-l5*ABzm$s!WiXM7|nS(_~ud8)oWBr)O1~os)xm~Eu z5o|AY?3cU%Bs<}w64sw#(zP@TIq_M;fOHmyV_>hkGR3Mh(Gff878ll;TBKov=-D&| z0&(C1S_1l?6GGr(Fz^^Kx{s56;GAC|kMNhND8`mQ2U9Lc<=3EQpW!&3vo z=_AX7ylVN* zr$z_ka}sZh>sxEgp<_1P&SV$K*t| z8WMLOhMaby_HU+m{@-H+U!Wv%+&f!`r?_oOx`%&3q^ydH-`{Fzz zD{WEO5A9*qdE)p zpf@!ds7jUg_XwZzr~4hjngbhy#!(I_BAiIJud6-8QH!Ds=BQ@Oh@0PnoCIbxLRiT( zt}!;IVbzSlz<+|P$$lTvP$$RcAP$VmEf$#J38?4#>;c;=?)T|taePK77x0Z7`Z=lK zuF!~ILs9$P4^B*WjEuAUjR;xS)*c)h&FPF4?Fp}8|N)-ov?!^^(PfI~MLbs6mykzjwv~bB3Jpza^ zf2H3V$~+KZK|F^xJuaGqp53@8q$vJkmwF25^?RI)QmiBI;n8u{aw7($7{6hWdnrJ%_P* zB4iAUB0~D*>D|)Q{5= zlG{^HdRXd`Phr=I9%d^|q=F1W^N3C$7vC#?u@>c<7@|;G2$m?^7u+!{vma(Y$GHKo zS_C4Yb)zM|UN`mq(hHC|-R>_7J>)30(?c=NcRMCYAqBHFjIB&(RChxs@{QpOfnXN= zDQu|v&}e1>Sk5KFaw|VWEX~q9HE9*5G?vhzF&6X};Nh6+e)%Fp&)-|%wi^U?Dd;Vv{jKd{SE1$ zFK8r95e9jdD3602tnWidM$!vb$1|Qgf%zH>l*8a1KVTG%U~=~Z!ee?x0DD5)M-B)@ z-#ZVML)-ffjzhy4+1gyeD{rx-=3drrGB2Rn_Bv=UfSDL{<>M5%v6XNw8%n zOzVD|txEqt9Z0q?hJnpEWh4K2ApGQkx{2Fs5X3`5JSJKyq7~p;AsH)jd&!Tq+j{|N z{m@HI4wug1Er_c3a`8aD4KWZAQ8G76TCBx!qL*7ifG5mTZa)M*+eIGE-^CcMWun3f ztcrQtqbWx&i;2P$-l<#`)=)9KkJ{mh)*>%NQd9SJBsMXqcM)RC#;!uUwCpts!g7T; zWbCy&vv%WqAMaw(+{5k=uwUFY>o!U#=y<{!UVr9`W<8E9Z3h{8w3zn0p0{pg$T`pc zZn5W95?QMDJGX#c`QUK1mXFv=Xekf&a9j#u`j}^B%$A%8B1t@?uy=K6weJ)J)P=Vp zt>u$j;_|Q+DCpOfv`SRO0>2xbUR{DWIEB8|K(>~y!PO8eK2RP`5Ba!{_mFH7Mz*EiXFN>lhj^q#N7n@eTLWjrfUrT2yPR3+RfVuV{h^FijGfY&vho*Ws$tJ2gh1eN}KTdG8@b!AD0%APln!b z3Wt~UKY^9r6Bg8@pw+o#dwmY8c3~hLQ%&e^%0VSn& zCvJ;?ElR!?gx3Emo?z|PLH zkwZfZ2b(S&?O4Qev%7ClP;POMc~XhY9ub`gnh_KjP$)LzlQBx}a5y^HN}($rKdBb= zMZp`+z8H|w`m0HX$VTMRV}~FOlM`hZVn{3$Ur6>eA~J$uj;S3T-08RLLcnkH$?e}z zuBIP%827JS%bP;b-j#)e_ZXXy0s0KwVk>feZ9Pi)L5xN!D$+?woLMM-iA=1-RJX@U z+0ms^!oP_PD^{9ONd=uKW=WBry1dy8l~8v%2rw+QJ4L}gM54mK;*BM5#qcA5v5oTY zHhV$`2C2vrb^xSkl{*%%$jGVPbIynK>iod3YCV(`J+D^J6xUZ>5X}a(%@4~{zE6R= z6z6i=?2$e$5=ETvrMQ}n$hfTZ9yXt@cAV|uuJ#)`dV8*qS|*(H2Z(2nuc0UUe<@pj*LE@wPLQqiS;cP~sD(r6W&@crq zj$*D9#^1&C<$_Kq+iPpbYfYH$&Rp}tmej>AHx`u zBU~YIc2emIg%3owO2WaI9}JVh#K%2SEcZ+^oV@m+)R$I20+yLQ>01Y-==mz5clOgb zzqj1Gm4sdHGbD!=7%^B}s`laOT447V!EV3e$sS*{sJS*&PO{sBxJ>?f5;X=8@Mm0! z!7ng*%6W;~e$3ZsP#>ti7fKkp9}g7v79G4g#g&%=ZDhE*2*qsQA;<4pGrdl;Iz?P#VeT$@8BOyhr+eY%9+I_`xNX>aD|ljmV&qe` zBAJTgD5kCq$qBNtBEe>Fs&23(nsN%7*QcK+kX_wbX7NDo&_^~~6Q*L1YLyXAG_F(C zC_`0|YGPfqV2xFG!Yj$28Ez?)*T;ROT4dDV8s6O{N8KSumy{4uv=2{=r6!XblC?J^ z_g%`}dtr{gdEnxc8ZzX`i;)`u7k0e1y^0Jp=G7dI3-Fbe< z=sJ&Pb)UR`+A%Mj`|{A&e16IOBk*i|XWd7SABgO$l}Hmwlfz5cW6HW1il$r))~CED9f9tQT|uv6^!>5QJy`TZc~hb(a6=J>(r45Y;iMyD@RS z|K#uj_m0xB(ePa69m2m@ac%L^ivQwiQPSW`5szkiSg5M__3H69Sk)YJ3-?qqX(szX z1KkAu%TFLS%i=-&cq1YrDX+f($ z5$fYxv38MvdP+Um4{ehx&kkjPd@8KrD?U8t?z@2Tl7H?{(8ps>T>{rf4o|*$b+Bq@ z+-pxv(^oaOgOp>(AaJDBTs}U0Pcc^zJf$6uo$C`I6)Lq+NFPu%I@TwZC>2}BCYlrj z&@FvKCn`30=XL&>BkXH+((g}Oztl@J6FcwyeM`}irwC&m-u@p(YpdJZ}# z#1r*Izl;b9M1Uu14}ZYgDhZ+|ZujHxaRsp>-+~QVM(hdFM5qv232nr%L(~VULaqX> zLcOHvMeF4ZiVMp7xO~v>B@)Kf|D3I%gZadBV|EZTc{y1%37m|Y49vP03=}#Kfb)Mt zaOb{JIk=q^KlpagHwm4!FErtw4#|s(1@}sIGcvh0`OQ@BpnbA@a(wb`@;1vVt1Qd* z03u5!%R*@0?@0(-NHw7RD=mDTzlKna;B8j!B&N$~2hQjBbnBV<=?;q=9T2j}Yyj6<#2Zm-eXQI<@ zV?>Ft&>LEJnl|%2bdB^&=A2+%z5oz&hV0G4JCO$vJVM=^)o_~|0Q8+bA&j0J_Yb(I zl3yvd^$pz<8#<=H#tL3^s@XAl2c5d87C>4Ay6UqIY-G})Rl8`^d<-o5Dar!t7M_U~ zK%X-qz&B)P_~A}%BlaLC?Y$iH`uVr>BLLtx=jg8p9ns}m_1CYH5D7iJ7Z9CtfJVKO zqK*#tcd(VOE*muE{-=%kArF|I)cC1t%K)$l{nqr}1+CB$d;anPURz?jE^S*}EdiJd zV%OAIul@C&;@XnPF^=R-v0%iK| zlkbBPArYT7h;0g-ypvb@e)S8a-#`dOWFP8{OM$8&;tRC%fJyItz!iYzejz6;h}cOn z=t9$+j)I zBE?8feDTbe<>rA77v)e}UT%D^*o8;f$UMa?qBMI%;` z#o0=@GeLqgQHHZboYhx%zbJ)dQb?UsQqoT)#2$nUE2G9SC{x{PC@Myu+#$ik*AW|8 zzZAW`rVtw$Lsvbne9cFk4qCLpqGW!3wcN+3}AuHrtDZ#(y$ zhU8MEWQ$7_d}_r}d-B~kVDBt>bVmyiMLd!GqbbVMOR&eq zOIzeEHhzz)bWqO4!%JVv!`yl?wxl4|&@H84Z+6s_&KYeN-OzmQ?P0(mP}$|x$^VF6 zm)8#&Oz^rnpgo65FR)tTD7Iu|+9=IP#l3kxPi}bMLA&Xm9ZP%T(*4Y)v=Xv4L9QWT zIc8|(>dJBq$fEhhrs})VR~^0iMICW3!lzRllp<{oI6jdhQ`Lq1dJyuOm=NS*l zFPyKn)~4u)_df_=D-kvkHNIhD1$cU3tc z?aV_(9@*N)x#|oplPU&trxORB*g{uLRgM$S;*$jpvS};)ZX%6#%%{r7XA3xwQ`*}b zvdHGGFI=PTQu{VHeamVnQls$6(nBrSGAcI3%V&G54I_88sYQ#6N{>YiLyP%fV`u$flhM60@iRC& zx$o+NfsCkq#n~2M?9lk4h~^fgFk<}*LzbU(g+VIjW$W_qO);z%;GOkc*4wdOKO$CH zu|A1*EI=(kndenkFWsBI3`;${1e>jiS0eSAJxZh|#;7XDvg;J4PNa zqZH7uyBNZlvK0>(7nkI9hREanfSRhu9!A6MQnYwn<`p3t5fBm=P>Tc?^6z2 zy(CP`OJpR?QqEeFW>T`*YUE0Bz2Me&8Xw9zFlWVqLZkBweV^iU{KVB*) zckMnfx5Ie~9=EFWvI)Z%W|OE{=+-f%w6LVb^>JY<1D7^nP|0zWGQ{VWzMM}h*Q;F% zRU^ym4ZTQ!Zf;mW8#D1TO13HNb&1dJ5qhrFCoR*g0Ej?Bbd4>pSJ1k~b zd{($ac`GU_q=T0Z9DOb1A|l%~n3m~D1| zhQj7O3f}a_&fzfOR8sY0hL#Y0h%gBl(D(d0mWzC%9mXI!xtDyw_KwXxy|4A<1xXgA zj0LaNO+SkBRE+^E@ZM&XdxCDZelXYY?jt&aqFI-#!tG*H-0WK)S_EJ_Op|R0-I*rH zPahIi#O&2bD#YYzhlMEIb(uqK+&RSE;(OQdM0d{acJBF40Pky85H%+q3-~0%0}lqd*R@ zvIWRd%)24ZcCBM0vMJ6L0yE-GGv<{pu&w{Zll)@(Lpq})FeSCpbTU=crAt^gMcjOD zNFuCaLy|R#udi&p)U`7vQeI_!BiTd1=@~Xe3Y+0^AB`KGE^V1C))g20HpAGhx{kCN z`OBH7z`m?nR|1;G{z|R>?WsfPPzPoC=opLE^(!^K%&^_A+M#;lz{CdEtlUrNCBqyz zai$DQ0#u%Sl+^7UXGRkjgEQYPgink55oFB@r+T<{vzl;*P5hi{cVuZ)t8b1vmc<xJ5w|xvKNknGD9chPQ9rhDbZJry&L>T>{|H{|oQKVdi3;yN&E9F$Ncy>JE$Du24{ zx9@P~qDUk%WP^=UE?0JfX}+Th2j{yQrJFxbldt{VD*-9Sw zfh<=4=88`RA|6uauP{$uqKC)8y1c7Uvw^`)Ql*S}SlfT8ecH%Ho>ztLFpYE#kued}k8)7rE%;&W} z8QK1}q^Rq9Rf#Bgc)N*?CftgvxgB457Ev&1T#qlupWP2~S2EKGr=?~bi~qXOb*e~$ zZS{pr$?caW4c+*X^2QszCqx`jK+Q9-)yTTSqxa){IU%SUFK=;)OMBfM5uXItA{MT{ ztH6%CRg{Dn0qRA4$r9sj@XVnUq&myTI$}CVh2v4iFrBGz+|Q@Ok*{n4ljLszphF2A z{C!EBjWt_)M3cSWn_$hTEOsAxz}e{N()F9LeD!@K$)>q4ws&hw*uk2z!077teiK#b zAeyHx-%si#7(Py^nB?R*R-@q=GluQO(kI7);c2ayec7o5UW*%!%sG!*n04wKMGg(o z3qq^>^G-yr9El2k_wy}ijhT&Q&WI88ftgAM^ zjA6Olri`qNW^v*e`C}ls2|JVcI z`h@%mTqT|>({&z7H{$MSFYRxd-ncI>jx{bWT(oRogI`eM5R?buxs8hcrmGE&p-q?tn)x^@8M+Pwz;&GQ`!Ma?6)$yzT1uXpM(IYa64nVl zTQRN&>*>N=DQ*jm*8m%!zVUE-DcH(iCSu~vsnZ(Z=-Ij-p|gB@*zvY4M%Fx{>SXh= zB=3Pa!+e2jMnmt><@qyqnx@qIW|dWYz?9V;y$1eb>(xe}?#oe{P@Hm2h2^7~%e2qC z-64bx?a{%Z+K?`XFR4z=cY}$u7bZ+3d74hD)t%`9gQ72DtooA z!b*X07`14!!t*gBbvbZJRfZ0WzK9bUo`d@~`L*eqmn?EL+QWl%?YSCjJ>b(ooye!_ zbM?UbQp%*Z<;5!V!U8kr8{pcJetG^{V4be@{cM7DOh-z~`I<<{lj`^UeY*TJ0P8Nl z5n7E9{lI%3`bf4%Ea>~_M*zGRmyz{dsrHv^nmMD#D>*gUeW~`H|Mq?vp{#Fyj<0b@ z@R{;_d@tqkSifp;Na%*RCe^+AfBAk}N4b1%7|W-70yU7mR(OpFi>qX`GeT1(ytX>B zC>>@J@It1p@=Sg*o-Eky^Cu2?dOy1sr@1#*BjD8 z^FrY*Bbio&#AGqSKHiJ+A6dvJ(P8zwyi_CI|0!FSnCpC29A8%RgRS8Rsg{`GrRiEZ zkg38L#yIm=|4Qs(YxDU&dGa0ONy&6TJrY-#`^y8v5*YTEm)uXu5h9l{+wh=VzcOGO z;UGD}GYmF}1v;;t^nZpNIO1X5Sol*XIO=b4`Em9%S|eO-J=_7CVV}5?aBRm{EIT5n8NB!67rnP)h2VWt zC`SOr&p)Ksw;8Fz%gWwCwc~SYGO@W%S@7rHL`No72FAwQS=$Cki9I*dWYr zEt{KR**ZC+T1k4{841TSJL%nE^$a^Uc!DpRIO6KjrE7{SC#7P&CCd!~P^yfV)3k-k zOW$2Nb}$IejB>Puyl>!)f2iUi5mGulZ{D1tMaMVeqB2EP(anWc>&B90g*ZN2AX$Wi zlKpaOv=sGo)bF%K$O(RzxZ%YAzz-_+I!WMTir7NJHxcOTO4w2_IBa|bCdFt~uDF-5 ztVVwrQLx#VW>|6h$QMI{QzTd4Zl8yfOf_zbof`_{u&-QA=`LTTV`__2>OSd`OFmh$ zvLhG7+RK~L(VY;}ypWFHjgNGQ_1?x#*7?OFML1I4D`m=l_OIS2 z4DI!Yg+)B^CY*2UjFEVza3i{}s@&iuncJ>TXXxGHc=RSd8#bQiwj1_ z+0TsZ3BrI3W}U_P%};nkdVUetWHf!Z zph_TO!a%>jFf+=5wv9^Me$aoFf>K0GI0BB6b}*4_muxpFTaR935mGyFs>LV3G#bHy z+%#T;QnE^_I}93Y04zbVTFBk+yZfH|Z^VqN@x}|#a1o7Bm=ARLUxpip`gvW9X|9W_m zzbbxerpIWJO5|uhkiduG10gbK6PJrO&r9TD7zJE8_}xSFhULPy%RQ|7Q2ZdI7|xvx4jrHB-}c#}%#tJCr8FD*O6L+B+vmqj z6dBtErb)fWLuwfHp^#%uSr zn@P+JKGIcGoKEkTh(;%eTO6Y~OvnSD0QWnI;lM5amw3k{9&tvO3cWj!OrvljFMV&I zXD~&AGYc7y{G)*M1htY!RxYo2vwS_1-a?*HsN~lP+<6mQ&OV9&*&{nyV{yc+knetq z_R-vm!Ur6Zk7>PpgwBixU{Fvtif>%9@hCu-!k`O;2E7iJ;jIk1_s#U^;a~O!GOOg4 zy7mpOY_%;7A_3dLp@Vck4+5+Rk?k&F5-#A*T|`*Zc2pFwH5V4OS`bB zOXh1SZMi7uBStLo43`)+DB`3)_b(3$q_c`a?TX?_k zo_CCU@1N5H2CJ*9YSvS0t~G1Y-SuE~zyihO_$(4VDR~?D$j*SVVtDQV(%GWZ|j27O&>f$Ove&Qao7RIn?h>4-KOJoH}lr_*suBKAT=pn&5UT>ATq z-V1OMS2v0~^u{fQflmpdM0Iqud`aKjm->L$0&qax3+-fQmGqB+YnV_AFa%Mxb&^At z45NW4pk2%;GKj*{#qXgpC=VVHVb)1y?RRFbiQkRGo{xPN=|9Y%i5AuIoMi3slarvC zC#aT+gaPD{VznZJDf4k3RM1(s_Ph2bg!;z@pT)PhlSj6eK4opsibLlKAS1#-bv?{P z&rC&I3&B!wr1HZM;vkrzh{Q#u|F*O6-9Ui%z3&iRs7jrfilICufgsvrN(a|>vX6(U z9gfQGnh=p=Mg`Lwyc*=>d}8(HdG-7Jjv8vLb`CCS8B(0~fapM%FM88TXiwTVBPFOJ zQA83SysTHEml+>fwt!eMw@N3GF0EjNc6`e$Fcf9&eC?+YK^I`~)#Q1GfsyUk%aO-+ zvPp&LDseiQaXX3-HyQgOy4t)s&t-XAklD$Xji)(- zXcj^Z-%yawk&)5JkO%zS!LLTeX{RwB6vqLk-*xP?VCL&`e&C-a89;cK|A;M{gGz^( z;4KcBOfQdY(}X$mJfi*-ot1Q)a#(iMsv-7fu;2m z%1~fIEJtgk+t+sv+XWM=UrpcVu|rXW(2~E2Ah#ix-}2K`Ab#G)g(};2hy4LbIGVHq zZSpilxV(rsY7N8lu2OWNUgdcZ_1 z>)ChFBQbdlBpgP6d{ejR#F5^!*T7(Y(;?hzJMT1d_W_!Yi`&TaA5dnDJmQqsjVdEj z^af7OG0uAvGde?jyzJBAT1c#~3ATVpZ(pz}V!oiD)0q*y>-_Lj>~n+XkAquC10r_P zpM;}`tq)-;*M~c~e4y5#6m5M#D{9#PG?)lGs%?lajKy$~($6U{ATa?FkR~ zA_Q{2yC@?BZ=jrHdYgb|He|1R^ZZD2sQFUtwZMB1_mapSqSwC zZ|xbDYchRK6L9~W|AOhW4_*j|lBJ}oT1G8*vgoU9ONoSUNngUkD~&qz`|sllGj^*f zc?DlP=6-q3#0t@1R-kBEJ@rObQ!~I@^NqUR-X&>ER(lCYGc1dssjzPAC*g7Fvw_*d zY(^2eKUrzr z5m5b1f3d9fF>%V1Oz6+-E!aV$u#nLA=IZG(lt$!TTYE6})2EJ67;oC1P7RVj@f(L` zu6-W6GlE<0+NZt{v|FZcSyHMwOvb$Z4IZ4_$NAxHX;aJbR6e#=&iZ)s-jj{Iino)t z-^a9zso2v3r4uu_La#;JDvY(l*XiCMMg6=Vj904HQ&IKyo2Jbp9AmL$i3+L_bN9Ke zguTg*R(N>ORYkLtR-Nd$@LM;cbFNm@a@L?-3o$?60aUuZc4foa#+lvmDxhs$x{t!L z(d3(8kOq;)@-^EOmBy>02o_^4U)jbt_yGE0^27Ba>@w-u@-nUu!P32qX80kSTl>+_ zzWVi;!2=SpxlKEe^~0m`K%vDYy}`gLjMWmEN#jRNf@yO?w%fa}NC&!C8{1xH<* z43X`s4;)i3`l@T*@Jy?qx~Eq6Bcq9(xAtn~_*rCeo|;yiddYFEMfuj?StF~{QoWi) z;_*}Kidp#|RQqExyl*P1A6-k5L-?~j8%C;#?cIPT1yfY}NB1MvT`U?>%z_n4;|0;@ z#1>;LgX>d+$*l59OD@P>54!AMKO8RhA@nv;cCpUFXVN}@7{j@l;T)axiHFL;NyN4V zXXTk&);!K3{*{ChfZs&lpu|AGimg(;y!>RG%=$-RzvU{d!m4%Laf<{?n2>#&z&Pib zK>x?80G612!rH&^KToJ3VSmZ2rpgtU!6mhyd58{{DZ;5B`TpVxJV z9N&*4KfOPpU6T>TE+4nJAnyC7)%9*+QbRc71Z8G*yxL-mcU1e}s$^h@SCyULxOu-3 zi6=O{-6POq_faawwettrg{CC`G=7wc&DPDSpewoBYoxA4ZrwSq-a5p;LP%cQ#Gt)f zNHiNXxyxD}4)I%k0bDlYdkzDUnpjxUc{g9nX)Cp)gr1L*4J}oCGGZMd+!y%Nw*0Q$ zVPO)Iy5cZVIO3R^E`oghw6ksKIlTV`@yo1OJv)UJ8ViaKTJ#+f$bt!spG79J*1xESg|fI!)0r9;XPnV8RvUv`DhjgZUndQ~x}00z(_=QWEMOGB zBk9Z)DX$SbFcT3Va4M~;i9A%@W7SVDVOs8-3eJ9W%IibEdK7YHy5FRkLmC;=8`*g* zM|Pm81AmeTV_bwWpC&G%F0DM-UyQCt^U(RsMZvSTND0M5nJtt?)#&l^T?xp3AJDJV zC-gay@n9G?B!NWvI=4C`xJP_fVsZ6T1!!1q=vwSE{=xjFeui_gEU9Q?spTQS(&@d+ zrgTj)=(*Du@3h#1YT9fv`!p7u&~XeXGhxWwQZ|^?yqJC>IwxAIb8<1uo#MeX!#ar> zydY_F`)L=l$MS%*T4F%80K-p{f~O7B)JcwB!?E0l+Oc5lJ>r3~Q#~{xqCIwKyJLjc zD%n0oC{Z1gVTGtA&7|%@c(rt{&X|URKUM|K>HAziDFMN*4vC#`@=)2ODr7Q?Jv{6a ztEZm$0{c~QlUXL`IwkK{0hX>htSfOQ>SQK_WXp$y%Ur8+6Hw8UHg9s{{><68weu%7 zvrOA>qMXvcU}K~=N|)tEj?GG(_@u#$5(F@>L5xcY8Wi<=wsNXFOhv8qQDg&|mkIT1 z=L847Z!dg24UXzv(kv&DUyNt#26**O@>GI3!cTHfo|aq9eQ*3`GYPBQEx)@RJc+BB zd1AcX@#)36)AqprvX1RXLzlRzikP?W=GdEB)U+Bc+|x(3pk}AYm|Aw)MBy6a8sne6 z$IPsO{01`?Go3hEQ=hiCqAT$fq!hHTBaUgdh&H8)qRP!}eN^U+t{V-IK1Z{KGA|Pf zV16H)Bs)Rbb~xWW(YHV)b&foq)XeLs5lL~W;+v{)`f2-fdvZJm*I56$1uIQ{oSN-R z{CkHZ!xHr$K~~}L!>y`5*2Hh9=#RtegFzIo&;)#tzDt^c_IrH@G|9Wwee9Ix#G>o- zBV2yfgT7c{W43r*rn-Llgu0&b@@uUfrfct$SF7&Zm9dVr1beSzxn6q7Xcc(JPwI}y zD|!Y@4k&pBO^)XWN+r|>pCRd9%T(nMSoIXNCFj`Y54tdnF$PvA?ud|Ood+u}{LDG> z`7UcHnBxaFkNHQgNbw(L*r@3x`tKgR z%_pzTb?&ZKK7U+Up>~>A(8l+3Z^ZGF(v|Hf-`F($eX z-JW_aQwpPB^+9O&_ik?ssveoOLdV<#nV-%HCj}RtKUk^jG*rd58LbSh;y1?dc%pk3MUMKKbHE$hf#Avsdv*py<8=lVLa$c${GT zb^jz+rGKSwVZ^AA%DLAzQ{`}F$>?1LmbJn_pQ6{`BCSe{w91XlSNwZ;M@6E{I?gtu z>#su63!7n#6YYo}tBJM^0@XEFE-&Nb;lgxnZ?EH3b+M+xrf>|Xx>&V!^xIDb`b*mP zpyR&5T=TBjF56stDO{xuTp`ES8B3MiBgvK6)@5gt^olL3S`$55^V*o#x|rIU{MzbD zsOKgAm*XOA&Skac8_m`;iJN8{4|q1_Wu2SVU9D4X$;Nb1&&K>3ouhmBI!(!zt8hGY zQ1!;V)hE~a=8HNekM~MEKI!7ZJ@)i)wKkWIgEs+rSE`pa9&l$t6HVN6ji&qfE>+}Z zPJ-Jcn^bwn9b-*Z`i|EJ-DUEAlZ8j|`rF*~Trek+I-bek z{UmOYtG*CeUq*F}{8t|Tm6gnuykx4ml>x4F%l5{p3ztKMWD)RTi2#8@O~$$FAH|EWjal55g5c;l+^^CpO8HvJ%ucU+IObzP7ut4YZ|^+e5YIB zc|8zOg!pvFm+)ek5@rL~%XBF)Vvaz4oaX?%rom(#Sg);KSyge?dfcHMNUEJ~EBJJB zxG1CWSi4AFdqKZwuS70nAVnu-%;u4MPwti6-kh8#w_w9M$idrjxDf8{KCHkkB9sCh zU9r&q+A*~;NeQbevQ?;v2;20wm73JE;s4=MyIr4Mg3UdJ0-c18xzx>!=uPM`bWAZs zR>M?CGESC8UeCIGnt^`0Jlr;)8mJr?gyUOTHd$PQDl6DrnuGWsNbzs1*ZOOr$>oNJkADVO0sxByet`KTsNISoT-k|gk zsnwYNRlX?T<*<9L%Cbc2Dj(ZmCw{`ox>w#|LqC6Nxo&As@d2wV;mI^>YYFRwwtB|q zlJ0!drsDW_RycILpx6oV43oFE*>!xNZU^E&uoJfPb|!6ScBg1Y0U~xab6y(-p_z3_ z-x8X^K6P!Hy;S2ddIdY)Np}?!nu$MmBb%kugZmL$dz9r?&ynmwr}_%$ zciVsVd=@`z7lu?4bt>akN~YgX@(t#T`@IzwuhoO^+7H(|R%)EbgPhF{ zEzIU5Yz@Q6D=FZmo2M*SjtPfLB_9$NlbZarT4jZ8Ca!%cj^M86##i1@0e(1@!?pB? z`sM0nMvKoVuJkGRtc?DchV?}K#6J$YfP6`IiJPsqL9sD6LxCq4Gknq%FE4$~bU92! zGuN40eZ378he5^tp?h4EpQn))ZJXt6;~d(3T@8ACJE>7mmJ>u)%qanTpDdzsBA`N; zJD+CpeysWqwl~+E<(H=U>EnEEiEXhW<}6b-YXMRkr<>4EJQ8TKGbvgW@G9iRoqO8< zP53qace1UA`&egri?kQu@at^&>#DDMh9!fw+eIhjeLVx;Dp5%{_XRu}>+9-C1~QUE zPl}euC1_m9gsgF5|6Qd0`CH$r%V3iM!Bb^8Mj*b!l@4clQG8 zr5A;g@e{dp_Y$T)h~FAIn#c0RWAZDp;WbOfQ*b%Ft3LLq&L01c-P_D_zqu|$_`-eR zh6VbnGkPvDsBA1lpl{>HNdNQzQGzh5I^L7-re6niVxPR2?W4NJ1DSmU*Kt8Vyv;Tj z(Oo=z-4I3Ez}M)y6S`Z#>~+QICG*tz?uvlsz3cp4ASYfbgUJNCWSjuwrJ&?7mmIxg zGh?U|3-1@RyN#gISnoY28AVmm$83R-IxE^vk#U@G9?F{a5!-f)dsUxaE$nusXdb?L z2^DRwk2l7qYoGyLS~AnW>Mr@|WQWtVVm`}P6)&F$*cfx>OAVr{rdSz+P3xU#!^_uI ziOFV}t#)>ozOp)s$DO)))e85|#c>@T&oysu-hXSV(Z(gbOZ!B+PHeD4YQG}EOSyyb z_zATQE|NCDhorruDXQa5ACe_gS5H!c!BkFD_j0%!|ohZyr}q zX%CrSJylLK?qKMuS$f>>d9B1B^}4TtCtIjshJNO3ZzSpcn4uAQ;ZZqwB$xZ{mp2|aoPKS6&JR>&y4dP`2?^w7pMGCwa zrB-AvJ2hr5yk&(cE-y*@`Qt7ah#7_Lp;}vxDvgb(CbDF#lytcjs-pFmPH0qi3#HS+ z`GwbxX4uS2d(nr_2M?%43SlaoSGINsAD$Go4k+()hwT*=y$^nOk><*cLO$J^gBP7V zuo^qWAg$Np%#yD@r1Y6-rKs64jMm|?2J5EAdz7m=yvNLbUIfPdJjNvEA)A?Zl#1aH z45%0E-RknlCh36Btj^{ugS4}rr_~S=J{p_G050Mac2u8D$xjaQ@TAsK-=6SIi8^dc zU9(qRx;8oSA1G$SeuUT1R#5fo8-zSyg&sdKOM&2j}olWJFaxFlbg|M*Xs7>e7Q#lswUid6)Fr1JK(=YzmE+j`(r(NE=1D$}v9X zi}nXf!o%ZlIU7V=QVx1_oW$#N`%cqqi@UpWBZo+ZIo?t)2ntl-A8MuqTZ~!GICZ8E zITEZ(%w;x+otgq*9LrLG*de+7M){onvbcF=s8^C#nHu~Yu=tn5t1n7o&%T6#a6_wOX`NlFY(H@VRd3pAlC0mWf{%QN4-OlU-t%b41;dX$$A* zv}4t>X2WD9oSiq6QxfP7LFz+e^4nao)*dUJoy7y|`(t0~;KPXj;5RC@(yVV`iL3z> zb%>hKvp)&XQ*V`QdJ0SWo-RJGvFdro?zg;t2ES1(#><`%}Ir zOb$Qezt@E9TyCx@=LoWyd|QTt`|GXyWCk0gi0N0(KYK5i!PC4JQYlOWrya|0 ze-LGE>Jep%6vKv`WInDZQ4XwEDUX3#Ie;x3u?Lrj&0C;$`VdtcA@fcxnRo)^KI>1V*1vVn%K>}SV-~0(2a2X9M zRI)k5B~L!|zlu~2Ql{Z`3ZpMk4eACK(6qnoE}@pilzw5^+?p;XF=Erqryh~CR-~Ge zv{{1%jpZN5T+eE!=W<@8G~g**onAWdhA$shBqkif2+d{Ux|UgDeY!VK!+3^h&wOL^ zPd|j9(P{Yg(^doht1>Nt+-sVhTp)|qjNOkLt?|1|1PNzPY+_e6FD_?If~SE)T(V<( zkGkGjt0@)tOVV}dc%DvxsiuOe!#a30@x@AGU9l zub5~9XYI{#B`6MTo++({m}9xexSf$Nf2m=<2+}Q(Z$%>NQ6*@$&5sp`rW+;tJb3XY zOoiW~vG?UYTJ?uyL0+`(#yH(MGUj|=`vdhiPW3~-bVE0Y0iWX2P80VgDra(58|fB7 zo&A=i%0PS{8S?_2lX$Otspp@mP~!+#fDI$yhy>zAFPWwqU>6ODL;9hqw?D@TMl!i# z9upGcU44B5Ny4AcgLjkkV}oO{9^0-Kz^|9% zC_Agjzp#s5WPo+sbaA{D!_*D`Qq)MsD-C6JXQJ_Na@V!WQ(pBV&xH$T?DEA@??`9_ z8HsXVjaXXZL)G?GkbV)Jf)?aN#2jadAq&|dE&A0*?lv>NM`YPx&Ui56Dk%=R(khpuv0 z(MEpF^_r6fEXGluQq{A*wW}#z9xGs_x{ei$TGv;JvslOVy>5KRR6k44;>rgkK<$QG zsyewFI@*$a>5&TFJY{$Z&s=;(uBbgfCVJ>C^FvpF?ZGHkq?SqRtlkZAjzLsF6@?kb zDdlKM{;mK>^wFGw)oj=ML&w4FlK4UMe1X}o&(clf-dy8YhKl4dGNlnj(0A0=sBd&? zF%a51qT&I~Ivo3>m7hsZVX|h=s62{2ZGL!4@>*I!UVik=BQeS3uxIAS&azmm)Z|Om z;)t(!Vr5G7K1-wrylx+Xu~WnbMIhe#jf=N=+w7t8GvzO|C>-vEW}wj_alvVQ^>@9*Ge z@tA+oH>}`n$AT&I9ewTvF0z>jDXnWbtw(Q~v&-_WpRC0yl{6JlZ*O(weaYmJ$sNukgVUDh~IShFY zGHp*$SZ9wUWhYXjmgkxsban%;j}jT|z^>xL?nN2NZ7ICP)Ue!*6NW{R6o)s0T9}=%h8xbNiCf^ z`K^K^fMJ{;Yk4#X7RBKxhCgsWpxsABd)X99c3^^{>$SB>PVY;DA_l4^FbRUZg*U>im?3KPN zRegn`=%Ib{atn7QgCwfCgAEO{$IBPH>jFC8$7Kbj7{F(}q`b#*CYLpUVAG9Q-ab{V zmwhUvsSnf#zPp7-(k;0LeNqR$=;k~{4j1}JR4n~SXvS+lz62RQ}m6n-o_a?)IS>+mv)`QpA0H-3yN zw@#Lr%k)y(RljyS4_b!Kd!qAWPv(fok#i?!zTza$>GPOK(6*jrRnAV%+AxhTJPA7~ z>|}jT2j%E^#8usCm$!hZfJ|=Lt~~Fka9RUvk1w)Ukh3i-@aI{toMEolkl8v&R+per zmqRTK??Zfcc8Mq2`4MTnDWX@`_!IDu1L6+sk`L)yR_9G`le-0Y4QW8kUZfD*uAk)Z+Ea%OPv{1MKWxI3rIl~ODz4|~;V}8I8TOBM8z~#MAM!u? zr&y@_U(^@AUTXTh3}e zTG;D+fZy{XYDO0Cj8~68#wXhPDHl{)+4{x$qKi;Q?!lHdWpVrzsDcng|KeA7>y`1esF#; zWH5g4{ovx@RA%yErM;G$iJQEe=@;&cffpVoCd=!cyVU12`ik5UndA9s#c1kS1aYmh zM#09sF#f_+j6C#R)0w+k&*Sot)(e$p`p(P<1`CgiUakVjjo&NG` zkJ1s_+@8dP9Ofjp)t(=HUUd41kI}I!e9jl}3v$j8=r*oa6#7~Im{>+kld)0}bCZ=b zvyA+%53?NPQL4sE$U|L?+Gh{GX`*a)y+-OIetI_PW8b0ja+!B^2C>Ecpbv@Dj@4RA z$n8)M_SGgPAtib9LdEqUYO}D&kaMgme~=-=;rp|QC>9fj-Vq*cib3LYj3PO{mrc7T zQXWi8ELw@>?JDal4DDOVgC6Y`(E!5nr*M>?(n?>#&(*%UvU$N;T!p=aBO4YGT_AU> z{8drw$>C`eJsg)B%P5*7r1IK^b7{rE|bThXqAggf)0fR%R?ei0TV>*)DN``aJ;{$uPs zeO1%%ROWM~vg}YkCv>Bf*Ol1JcfbKe1$FR39!5!HrsADtu<3h!wBjsRvGcWtYypp^ zO^-9D0kfr#FwW)con5qnc2S4cCx&lIs{wt}PhsW@a15ip@ImOEZT*Z(>+xf97xW1a z0}@}`qq3gnD-;{NQVfc^yPqCSm>Fn$Z84VO`n^IbJSnqouDV-@RMpo}eD54>!o`5! z>l4w0yg_BNi~GAsqTZRbd~LS8=J0f>_o2K!QTpusbq(9(b`*K7;j2{rlGB8M+K%bh z#b*y|S3MtRQDk{OeY!g21sR|zFkYu$_g{RAASNZ&`ON2hLJQgBf8)M^n|Z}BG8cSi zu1F|y>6D)*+VH#p#&A4)-x+^|P1IX>giS;j3(;&d4du8;rU5lfT6vfoLxE+ri%Bsm z$b)JG_xUB`NR;ShvhuFF6&J>jIJ0{rz)aSFTG9>F%rxZVCB=c05s^bqUg10Dq`V4# zhYxs#@2{fUr=9Rl+f+z?2cA$TFZJe{XNg(ZZQ0@q-@5>L0t9g{kmnBtba+yF-{pTk z6t4vKgbz^9hJ9&|8lajDg3|~KfpbGsUCfm>g_|(VKIfMgWq-RmZ0K}qgPxyc8~1yE zma?eelF6Q=5qCAOT6;*gXlU%4gA|S=iyE}?ox1Qn0Zlcab33uq_K~9}S&f{O9T+~k zbY#t)-j_I<#nZsA8l^USNBeu2`>gEzC6ilJAWYd!Aqd9dCXBNCv)i-sKr_b+>UnRA zr<-Cp2Z&$XtfKqdXWwI#F;tDJ;B_OyjS3QHzQ-kT`5lZks0iwa*>E?C z#jO1a%|JeI_4(4}SPJ2e?HI%Z3p6e5zvf^b#n0@{DELr!De^^8cI*-CVw5y}zmgQD z2^q&3U7D&SZKqv1oyJM0UvMJyl37r>lg+M*dyOQVVTv^hx>U(f14jxLGRzjcXaCA-(7&ymq6TY(x z{_6Rte%Bvn;^sp*i_5tCjb~2?a&OlkeO7G#^1(q9Ndr4_1G~Vfn#Yp{c8w|HHw1<0k(cOHXFFSA8a4*W& zXJl0!c{T%OJ}-i>;31qyX=7ouImI_UZ~!#F>Rr#OC{F0B&)K~ed(5ayP%cm}q$sKG ztB(xDhC9!9^|Ftl5EtYL`Fpg`4{JTq|LL2(knHzk$fHBxM834VWe3wG(#V|2#pP}t z!4}j2hU)2S1XJ09qHonP18>CQ;n<76x^4+1Em`GOW+}szzVaX(;l*yViB^};FS?0ot$fp^kKpU znKL%;ry8-F)&t#f#(l6HwVi0eZTC}j5hG0_q;hVi11rs8Qq&q*ggWItrbtBP;^J-fp3`t)$RZ@Xr2=OBI6(@K)? zA@2Ja_X5-ONyfN^^2G@u;_7f`Oz?wh#3u=%`9;sxN{3TVfGSw(I^X$#;E9GUpYqU@ zC;v_V>R;{2|BG#ao9mCR{=5hR03h&2FZ^Gv#Q)GmbOu*-w>M>zGldwM7(xu$RGf_< zzXTd`FaOyf9LUZK`fG=90bw_LLt|@G2&Iv!xuu;T^=@4gHKnDAAhkM|9J`#on5l*3 z3lB$A6%Tn;V-IU%kO{T0kboPXo2|VqVi-y{TN^tkJ~u&XLldx(DIenamza&3@(&e= zwIDT+6~My74xkpo5O6dx<5L!w{D%?ZnIN?V1Y*y}#^&nk%IXSa1v{Fv0YD%S8#@OZ z2L}s6gT=|+4r1uWV&_EjPY>dzPR5Rw_7F?39px{NhDKm#h#)mJiQF{L`#(S*_r>`3`9A%b{; zOW>FBe;Ej{{Tlc$f&2s9UnIANW@7v=#P-gPHhGd_hov0Y#L~?Df5-AKn*YwIM~?v*Ljr| z7jkyCG~p8kh;WJk0OBm->^zbzoFXFJEFxSyJS^Oz2+-o3Vj@5w;18I8xBUeaA(6Io zf*9HvoBmI{{l)ec@Ra`-9vJ@@#-RMqApcgD|C6r&r0d_xz`v#ZpV{@Fbp2Zy__vh* zGrRu1bp5&PBZ_ZCrTDMvUFg56e+1_l;@hT(+Wx=UkbwTO$q=`6vbQmGN0c|JmJl0L zN{FMg>90Kn!p9%`5Co~tU$p<&l4vNKnz5-^dYDrFV%$+j5TsFZQX+OTY|3CT1o4EO zQkhNK&J0Wm{I&Bz9E)oU0K`QQ1(PU%M^cE=K+4`0&I`KLW2ds}YnglZXnh|(qC$_QLRO~2ei@BJ6pgNF zfP$&ff`S>14KfJU>Gb!q_r=puyc1Z8CNUpml<)s2-&gsWzhiy?asF$od}Q1ae?sDn zhsg%$$t|c*wC9)=q9he!s1Q*?h#2mXD8VO-`c1~ciI||j$+&LnaRNAR z_~QfuZusNmLa_P$=8uz`9kJ8?`xuTi0S zK+YR6a{{?RzsJnU$&Sdi0^@o?N2mlMSEyB-2O0^5ywkGO^2lp*Nm ze!o6A5gd>=WC&`y8#2yYWL&q%5TD$>VT<6Lydk^gT1Cvi8+u%~;6PjpH}!78!F3A` zu3K;*a(~m`EjYMt!NGM44z62pAm+i1F%a|grtB6R+_&K1z6A&3+PdlQ7977gKz~0U z+_&K1z6A%*EjV~?!NGG24xU?Z@Z5p}F~@Jj$8!q~o?CGIB4_*^8_z8`cyGahxQE@a zMciL*%5K4dxL@7Wy9EdDEjV~@!NGeAj$hP}zhgt(OK!?;!2!Aj2j~_Ypj&W&Zoz?A zdv1<<3l7jNI6yaX01zwm@BRSnH*o;iZ{h&3-^2l6zlj6DeiH|P{U#0o`%N4G#M*r` zzFTkrZo%=3=JU7n1_0cG18@rtz%4is^~Ozqx8Ok3J~#Dl!GT!gZ|HH{f`j8090)?x zo3^*$K-4rh^=`qzaT5n(h5OBx8}Ww5?`tY1@ zNQnFRZ!#Vrf@t-38PD%E7XZl1{(B9AkO2_$;5S=dPQ*F?yNnxvs0MDz5ZC^1dYrt! z*E9%A5MrMGOAq2`XlY~Wh>d}G6XzfMB*6di&C#FRA45mTpXE5Bu;%3A#KxeblTeVv s#`tHA&W?@o|0Fs#MMqN?%0Gi*`?Y~of!HFR{>s~pz Date: Tue, 12 Dec 2023 10:45:49 -0800 Subject: [PATCH 17/49] chore: version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 03af9d2a..41710f95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cadt", - "version": "1.7.5", + "version": "1.7.6", "_comment": "DONT CHANGE MAJOR UNLESS DATAMODEL CHANGES: The major version corresponds to the datamodel version your using, so 2.0.0 means it'll use datamodel v2", "private": true, "bin": "build/server.js", From f882276d970045b31c494f1681dec9ddc185c86c Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Tue, 12 Dec 2023 18:59:52 +0000 Subject: [PATCH 18/49] chore: Updating npm dev dependencies --- package-lock.json | 179 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 92 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index 411df3ef..a21c2133 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cadt", - "version": "1.7.2", + "version": "1.7.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cadt", - "version": "1.7.2", + "version": "1.7.6", "dependencies": { "@babel/eslint-parser": "^7.22.15", "async-mutex": "^0.4.0", @@ -40,9 +40,9 @@ }, "devDependencies": { "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.5", + "@babel/core": "^7.23.6", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.5", + "@babel/preset-env": "^7.23.6", "@babel/register": "^7.22.15", "@commitlint/cli": "^18.4.3", "@commitlint/config-conventional": "^18.4.3", @@ -134,20 +134,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", - "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", + "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", + "@babel/helpers": "^7.23.6", + "@babel/parser": "^7.23.6", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -196,11 +196,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dependencies": { - "@babel/types": "^7.23.5", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -234,13 +234,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -257,9 +257,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", - "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -315,9 +315,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -530,13 +530,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", - "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" @@ -556,9 +556,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1108,12 +1108,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", - "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1634,13 +1635,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", - "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", + "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", @@ -1680,7 +1681,7 @@ "@babel/plugin-transform-dynamic-import": "^7.23.4", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-for-of": "^7.23.6", "@babel/plugin-transform-function-name": "^7.23.3", "@babel/plugin-transform-json-strings": "^7.23.4", "@babel/plugin-transform-literals": "^7.23.3", @@ -1776,9 +1777,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", - "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", + "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1807,19 +1808,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", - "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", - "debug": "^4.1.0", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1827,9 +1828,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2382,9 +2383,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -2765,9 +2766,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.19.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.2.tgz", - "integrity": "sha512-6wzfBdbWpe8QykUkXBjtmO3zITA0A3FIjoy+in0Y2K4KrCiRhNYJIdwAPDffZ3G6GnaKaSLSEa9ZuORLfEoiwg==", + "version": "18.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", + "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", "dependencies": { "undici-types": "~5.26.4" } @@ -3114,13 +3115,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -3137,12 +3138,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", - "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "core-js-compat": "^3.33.1" }, "peerDependencies": { @@ -3150,12 +3151,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.4.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3425,9 +3426,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001568", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", + "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", "funding": [ { "type": "opencollective", @@ -5165,9 +5166,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.606", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.606.tgz", - "integrity": "sha512-Zdv0XuhfyWZUsQ5Uq59d43ZmZOdoGZNWjeN4WCxxlQaP8crAWdnWcTxfHKcaJl6PW2SWpHx6DsxSx7v6KcGCuw==" + "version": "1.4.610", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", + "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5570,9 +5571,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -9767,9 +9768,9 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { - "version": "6.35.1", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.1.tgz", - "integrity": "sha512-UlP5k33nJsN11wCDLaWZXw9bB8w4ESKc5QmG6D04qMimwBwKVNeqRJiaaBlEJdtg8cRK+OJh95dliP+uEi+g9Q==", + "version": "6.35.2", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.2.tgz", + "integrity": "sha512-EdzLaw2kK4/aOnWQ7ed/qh3B6/g+1DvmeXr66RwbcqSm/+QRS9X0LDI5INBibsy4eNJHWIRPo3+QK0zL+IPBHg==", "funding": [ { "type": "opencollective", diff --git a/package.json b/package.json index 41710f95..e77d4ed9 100644 --- a/package.json +++ b/package.json @@ -60,9 +60,9 @@ }, "devDependencies": { "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.5", + "@babel/core": "^7.23.6", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.5", + "@babel/preset-env": "^7.23.6", "@babel/register": "^7.22.15", "@commitlint/cli": "^18.4.3", "@commitlint/config-conventional": "^18.4.3", From b4877a0186b08e85037627f2574b7e606a05d39f Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 12 Dec 2023 12:14:43 -0800 Subject: [PATCH 19/49] build: add auto-restart functionality to systemd --- build-scripts/deb/cadt@.service | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build-scripts/deb/cadt@.service b/build-scripts/deb/cadt@.service index 5d3764ac..897b8440 100644 --- a/build-scripts/deb/cadt@.service +++ b/build-scripts/deb/cadt@.service @@ -16,6 +16,10 @@ [Unit] Description=CADT +# Stop automatically restarting if 10 failures in 5 minutes +StartLimitIntervalSec=300 +StartLimitBurst=10 + [Service] # Set Chia directory as an environment variable Environment=CHIA_ROOT=/home/%i/.chia/mainnet @@ -27,5 +31,9 @@ ExecStart=/opt/cadt/cadt User=%i Group=%i +# Auto-restart if process stopped outside of systemd +Restart=on-failure +RestartSec=10s + [Install] WantedBy=multi-user.target From 9cf94e0731fe28e4ea348c141569748c48edb254 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Wed, 13 Dec 2023 09:07:03 -0500 Subject: [PATCH 20/49] feat: fix counter for sync remaining --- src/tasks/sync-registries.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index 727eb5ab..2b1d4216 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -219,7 +219,8 @@ const syncOrganizationAudit = async (organization) => { ); } - const syncRemaining = rootHistory.length - currentGeneration.generation; + const syncRemaining = + rootHistory.length - (currentGeneration.generation + 1); const isSynced = syncRemaining === 0; await Organization.update( From 4e50833cc7c367ad29760e2e1833c5d437135ec8 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Wed, 13 Dec 2023 13:04:30 -0500 Subject: [PATCH 21/49] feat: enable wal mode --- src/database/index.js | 15 ++++++++++++++- src/tasks/sync-registries.js | 15 ++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/database/index.js b/src/database/index.js index 102c1409..34bc3ab5 100644 --- a/src/database/index.js +++ b/src/database/index.js @@ -1,5 +1,5 @@ import _ from 'lodash'; -import { Sequelize } from 'sequelize'; +import { Sequelize, QueryTypes } from 'sequelize'; import config from '../config/config.js'; import { logger } from '../config/logger.cjs'; import mysql from 'mysql2/promise'; @@ -158,3 +158,16 @@ export const prepareDb = async () => { await checkForMigrations(sequelize); }; + +// Function to set WAL mode +async function setWALMode() { + try { + await sequelize.authenticate(); + await sequelize.query('PRAGMA journal_mode=WAL;', { type: QueryTypes.RAW }); + console.log('WAL mode set successfully.'); + } catch (error) { + console.error('Unable to set WAL mode:', error); + } +} + +setWALMode(); diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index 2b1d4216..a3b49a19 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -186,7 +186,7 @@ const syncOrganizationAudit = async (organization) => { registryId: organization.registryId, rootHash: currentGeneration.root_hash, type: 'CREATE REGISTRY', - currentGeneration: 0, + generation: 0, change: null, table: null, onchainConfirmationTimeStamp: currentGeneration.timestamp.toString(), @@ -219,8 +219,8 @@ const syncOrganizationAudit = async (organization) => { ); } - const syncRemaining = - rootHistory.length - (currentGeneration.generation + 1); + const rootHistoryCount = rootHistory.length - 1; + const syncRemaining = rootHistoryCount - historyIndex; const isSynced = syncRemaining === 0; await Organization.update( @@ -249,6 +249,9 @@ const syncOrganizationAudit = async (organization) => { const root1 = _.get(rootHistory, `[${historyIndex}]`); const root2 = _.get(rootHistory, `[${historyIndex + 1}]`); + logger.info(`ROOT 1 ${JSON.stringify(root1)}`); + logger.info(`ROOT 2', ${JSON.stringify(root2)}`); + if (!_.get(root2, 'confirmed')) { logger.info( `Waiting for the latest root for ${organization.name} to confirm`, @@ -295,7 +298,9 @@ const syncOrganizationAudit = async (organization) => { const optimizedKvDiff = optimizeAndSortKvDiff(kvDiff); const updateTransaction = async (transaction, mirrorTransaction) => { - logger.info(`Syncing ${organization.name} generation ${historyIndex}`); + logger.info( + `Syncing ${organization.name} generation ${historyIndex + 1}`, + ); for (const diff of optimizedKvDiff) { const key = decodeHex(diff.key); const modelKey = key.split('|')[0]; @@ -308,7 +313,7 @@ const syncOrganizationAudit = async (organization) => { table: modelKey, change: decodeHex(diff.value), onchainConfirmationTimeStamp: root2.timestamp, - generation: historyIndex, + generation: historyIndex + 1, comment: _.get( tryParseJSON( decodeHex(_.get(comment, '[0].value', encodeHex('{}'))), From 94816ac5eeb2f98a44f44c3dee19692218471f83 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Wed, 13 Dec 2023 14:38:23 -0500 Subject: [PATCH 22/49] fix: maximum file size limit --- src/validations/units.validations.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/validations/units.validations.js b/src/validations/units.validations.js index eae4c519..b3eeb321 100644 --- a/src/validations/units.validations.js +++ b/src/validations/units.validations.js @@ -54,8 +54,8 @@ export const unitsPostSchema = Joi.object({ }); export const unitsGetQuerySchema = Joi.object({ - page: Joi.number(), - limit: Joi.number(), + page: Joi.number().min(1), + limit: Joi.number().max(100).min(1), search: Joi.string(), warehouseUnitId: Joi.string(), columns: Joi.array().items(Joi.string()).single(), @@ -77,8 +77,8 @@ export const unitsGetQuerySchema = Joi.object({ { then: Joi.object(), otherwise: Joi.object({ - page: Joi.number().required(), - limit: Joi.number().required(), + page: Joi.number().min(1).required(), + limit: Joi.number().max(100).min(1).required(), }), }, ) From 482a20e2885014dfbc63d6b46ecf2794a5b3fb76 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 11:54:04 -0500 Subject: [PATCH 23/49] fix: tests for paginated data --- tests/integration/unit.spec.js | 2 +- tests/resources/units.spec.js | 50 ++++++++++++++++------------------ 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/tests/integration/unit.spec.js b/tests/integration/unit.spec.js index 3147a7bf..a2a90919 100644 --- a/tests/integration/unit.spec.js +++ b/tests/integration/unit.spec.js @@ -168,7 +168,7 @@ describe('Unit Resource Integration Tests', function () { .get('/v1/units') .query({ page: 1, limit: 100 }); - const unitRecord = _.head(allUnitsResult.body); + const unitRecord = _.head(allUnitsResult.body.data); const warehouseUnitIdToSplit = unitRecord.warehouseUnitId; const newUnitOwner = '35f92331-c8d7-4e9e-a8d2-cd0a86cbb2cf'; diff --git a/tests/resources/units.spec.js b/tests/resources/units.spec.js index 83e88b6b..65d5e9ee 100644 --- a/tests/resources/units.spec.js +++ b/tests/resources/units.spec.js @@ -34,7 +34,7 @@ describe('Units Resource CRUD', function () { const result = await supertest(app) .get('/v1/units') .query({ page: 1, limit: 100 }); - response = result.body[0]; + response = result.body.data[0]; }); afterEach(async function () { @@ -50,7 +50,7 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ page: 1, limit: 100 }); - expect(result.body.length).to.not.equal(0); + expect(result.body.data.length).to.not.equal(0); }).timeout(TEST_WAIT_TIME * 10); it('gets all the units filtered by orgUid', async function () { @@ -58,7 +58,7 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ orgUid: response.orgUid, page: 1, limit: 100 }); - expect(result.body.length).to.not.equal(1); + expect(result.body.data.length).to.not.equal(1); // ?orgUid=XXXX }).timeout(TEST_WAIT_TIME * 10); @@ -79,9 +79,11 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ order: 'SERIALNUMBER', page: 1, limit: 100 }); - expect(result.body[0].serialNumberBlock).to.equal('AAAAA1-AAAAA2'); - expect(result.body[1].serialNumberBlock).to.equal('AAAAA11-AAAAA21'); - expect(result.body[2].serialNumberBlock).to.equal( + expect(result.body.data[0].serialNumberBlock).to.equal('AAAAA1-AAAAA2'); + expect(result.body.data[1].serialNumberBlock).to.equal( + 'AAAAA11-AAAAA21', + ); + expect(result.body.data[2].serialNumberBlock).to.equal( 'AXJJFSLGHSHEJ1000-AXJJFSLGHSHEJ1010', ); }).timeout(TEST_WAIT_TIME * 10); @@ -92,20 +94,18 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ search: 'Certification', page: 1, limit: 100 }); - expect(result.body.length).to.not.equal(1); + expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('gets all the units for a search term filtered by orgUid', async function () { // ?orgUid=XXXX&search=XXXX - const result = await supertest(app) - .get('/v1/units') - .query({ - orgUid: response.orgUid, - search: 'Certification', - page: 1, - limit: 100, - }); - - expect(result.body.length).to.not.equal(1); + const result = await supertest(app).get('/v1/units').query({ + orgUid: response.orgUid, + search: 'Certification', + page: 1, + limit: 100, + }); + + expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('gets optional paginated results', async function () { // ?page=X&limit=10 @@ -113,19 +113,17 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ page: 1, limit: 1 }); - expect(result.body.length).to.not.equal(1); + expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('finds a single result by warehouseUnitId', async function () { // ?warehouseUnitId=XXXX - const result = await supertest(app) - .get('/v1/units') - .query({ - warehouseUnitId: response.warehouseUnitId, - page: 1, - limit: 100, - }); + const result = await supertest(app).get('/v1/units').query({ + warehouseUnitId: response.warehouseUnitId, + page: 1, + limit: 100, + }); - expect(result.body.length).to.not.equal(1); + expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); }); }); From 7b0bd3b701931913752c2ed9544477c231db1155 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 12:33:21 -0500 Subject: [PATCH 24/49] feat: dont upload to web2 gateway if md5 matches --- tests/test-fixtures/project-fixtures.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-fixtures/project-fixtures.js b/tests/test-fixtures/project-fixtures.js index 835064e7..cc814414 100644 --- a/tests/test-fixtures/project-fixtures.js +++ b/tests/test-fixtures/project-fixtures.js @@ -75,7 +75,7 @@ export const getProjectByQuery = async (query = {}) => { // expect(result.body).to.be.an('array'); expect(result.statusCode).to.equal(200); - return result.body; + return result.body.data; }; export const checkProjectRecordExists = async (warehouseProjectId) => { From 0f051bfeb3bc11896b81d9e2f175ad393769e95a Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 13:03:30 -0500 Subject: [PATCH 25/49] feat: dont upload to web2 gateway if md5 matches --- tests/resources/projects.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index ee26a3ee..f9d8ed3b 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -102,21 +102,21 @@ describe('Project Resource CRUD', function () { page: 1, limit: 3, }); - expect(projectsPage1.data.length).to.equal(3); + expect(projectsPage1.length).to.equal(3); const projectsPage2 = await testFixtures.getProjectByQuery({ page: 2, limit: 3, }); - expect(projectsPage2.data.length).to.equal(3); - expect(projectsPage1.data).to.not.deep.equal(projectsPage2.data); + expect(projectsPage2.length).to.equal(3); + expect(projectsPage1).to.not.deep.equal(projectsPage2); const projectsLimit2 = await testFixtures.getProjectByQuery({ page: 1, limit: 2, }); - expect(projectsLimit2.data.length).to.equal(2); + expect(projectsLimit2.length).to.equal(2); }).timeout(TEST_WAIT_TIME * 10); it('finds a single result by warehouseProjectId', async function () { From b96a97f328114ddc8b299f636092403bdfd04fff Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 15:15:29 -0500 Subject: [PATCH 26/49] fix: tests --- tests/resources/projects.spec.js | 16 ++++++++-------- tests/test-fixtures/project-fixtures.js | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index f9d8ed3b..50cde4bf 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -61,7 +61,7 @@ describe('Project Resource CRUD', function () { page: 1, limit: 100, }); - expect(projects.length).to.equal(12); + expect(projects.data.length).to.equal(12); }).timeout(TEST_WAIT_TIME * 10); it('gets all the projects filtered by orgUid', async function () { @@ -71,7 +71,7 @@ describe('Project Resource CRUD', function () { page: 1, limit: 100, }); - expect(projects.length).to.equal(3); + expect(projects.data.length).to.equal(3); }).timeout(TEST_WAIT_TIME * 10); it('gets all the projects for a search term', async function () { @@ -81,7 +81,7 @@ describe('Project Resource CRUD', function () { page: 1, limit: 100, }); - expect(projects.length).to.equal(1); + expect(projects.data.length).to.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('gets all the projects for a search term filtered by orgUid', async function () { @@ -93,7 +93,7 @@ describe('Project Resource CRUD', function () { limit: 100, }); - expect(projects.length).to.equal(1); + expect(projects.data.length).to.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('gets optional paginated results', async function () { @@ -102,24 +102,24 @@ describe('Project Resource CRUD', function () { page: 1, limit: 3, }); - expect(projectsPage1.length).to.equal(3); + expect(projectsPage1.data.length).to.equal(3); const projectsPage2 = await testFixtures.getProjectByQuery({ page: 2, limit: 3, }); - expect(projectsPage2.length).to.equal(3); + expect(projectsPage2.data.length).to.equal(3); expect(projectsPage1).to.not.deep.equal(projectsPage2); const projectsLimit2 = await testFixtures.getProjectByQuery({ page: 1, limit: 2, }); - expect(projectsLimit2.length).to.equal(2); + expect(projectsLimit2.data.length).to.equal(2); }).timeout(TEST_WAIT_TIME * 10); - it('finds a single result by warehouseProjectId', async function () { + it.only('finds a single result by warehouseProjectId', async function () { // ?warehouseProjectId=XXXX const projects = await testFixtures.getProjectByQuery({ warehouseProjectId: '7f3a656e-d21c-409f-ae38-f97c89f0ae66', diff --git a/tests/test-fixtures/project-fixtures.js b/tests/test-fixtures/project-fixtures.js index cc814414..835064e7 100644 --- a/tests/test-fixtures/project-fixtures.js +++ b/tests/test-fixtures/project-fixtures.js @@ -75,7 +75,7 @@ export const getProjectByQuery = async (query = {}) => { // expect(result.body).to.be.an('array'); expect(result.statusCode).to.equal(200); - return result.body.data; + return result.body; }; export const checkProjectRecordExists = async (warehouseProjectId) => { From a23ecbccc36e6b18e59d8e24d5536a5db3ebe6f2 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 15:32:43 -0500 Subject: [PATCH 27/49] fix: tests --- tests/resources/projects.spec.js | 2 +- tests/resources/units.spec.js | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index 50cde4bf..4d95ab01 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -238,7 +238,7 @@ describe('Project Resource CRUD', function () { ...newProject, }); - const warehouseProjectId = _.head(responseCreate.body); + const warehouseProjectId = responseCreate.body.uuid; await Organization.destroy({ where: {}, diff --git a/tests/resources/units.spec.js b/tests/resources/units.spec.js index 65d5e9ee..85e84522 100644 --- a/tests/resources/units.spec.js +++ b/tests/resources/units.spec.js @@ -115,15 +115,20 @@ describe('Units Resource CRUD', function () { expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); - it('finds a single result by warehouseUnitId', async function () { + it.only('finds a single result by warehouseUnitId', async function () { // ?warehouseUnitId=XXXX const result = await supertest(app).get('/v1/units').query({ warehouseUnitId: response.warehouseUnitId, - page: 1, - limit: 100, }); - expect(result.body.data.length).to.not.equal(1); + // Check if data is an object + expect(result.body).to.be.an('object'); + + // Additionally, ensure it's not an array + expect(Array.isArray(result?.body?.data)).to.be.false; + + // Your existing assertion + expect(result.body?.data).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); }); }); From 927e24215cb28dfb592696d389215e77d8e31d66 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 14 Dec 2023 16:42:47 -0500 Subject: [PATCH 28/49] fix: tests --- tests/resources/projects.spec.js | 2 +- tests/resources/units.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index 4d95ab01..2bfb3a7a 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -119,7 +119,7 @@ describe('Project Resource CRUD', function () { expect(projectsLimit2.data.length).to.equal(2); }).timeout(TEST_WAIT_TIME * 10); - it.only('finds a single result by warehouseProjectId', async function () { + it('finds a single result by warehouseProjectId', async function () { // ?warehouseProjectId=XXXX const projects = await testFixtures.getProjectByQuery({ warehouseProjectId: '7f3a656e-d21c-409f-ae38-f97c89f0ae66', diff --git a/tests/resources/units.spec.js b/tests/resources/units.spec.js index 85e84522..076309ef 100644 --- a/tests/resources/units.spec.js +++ b/tests/resources/units.spec.js @@ -115,7 +115,7 @@ describe('Units Resource CRUD', function () { expect(result.body.data.length).to.not.equal(1); }).timeout(TEST_WAIT_TIME * 10); - it.only('finds a single result by warehouseUnitId', async function () { + it('finds a single result by warehouseUnitId', async function () { // ?warehouseUnitId=XXXX const result = await supertest(app).get('/v1/units').query({ warehouseUnitId: response.warehouseUnitId, From a19be018b8b9c9bd5945542184ae6c8a568f38f8 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Fri, 15 Dec 2023 09:38:39 -0500 Subject: [PATCH 29/49] fix: tests --- tests/resources/units.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/resources/units.spec.js b/tests/resources/units.spec.js index 076309ef..6aaeb250 100644 --- a/tests/resources/units.spec.js +++ b/tests/resources/units.spec.js @@ -113,7 +113,7 @@ describe('Units Resource CRUD', function () { .get('/v1/units') .query({ page: 1, limit: 1 }); - expect(result.body.data.length).to.not.equal(1); + expect(result.body.data.length).to.equal(1); }).timeout(TEST_WAIT_TIME * 10); it('finds a single result by warehouseUnitId', async function () { // ?warehouseUnitId=XXXX From 7da1c6ed1c3e35a131ce40cf02b522ec350eb683 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Fri, 12 Jan 2024 14:08:56 -0500 Subject: [PATCH 30/49] fix: optimize retry logic of subscribe --- src/datalayer/syncService.js | 45 ++----------------- .../organizations/organizations.model.js | 23 +++++----- 2 files changed, 15 insertions(+), 53 deletions(-) diff --git a/src/datalayer/syncService.js b/src/datalayer/syncService.js index a0312943..2db1e52e 100644 --- a/src/datalayer/syncService.js +++ b/src/datalayer/syncService.js @@ -26,15 +26,7 @@ const subscribeToStoreOnDataLayer = async (storeId) => { } }; -const getSubscribedStoreData = async (storeId, retry = 0) => { - if (retry >= 60) { - throw new Error( - `Max retrys exceeded while trying to subscribe to ${storeId}, Can not subscribe to organization`, - ); - } - - const timeoutInterval = 30000; - +const getSubscribedStoreData = async (storeId) => { const subscriptions = await dataLayer.getSubscriptions(storeId); const alreadySubscribed = subscriptions.includes(storeId); @@ -43,20 +35,7 @@ const getSubscribedStoreData = async (storeId, retry = 0) => { const response = await subscribeToStoreOnDataLayer(storeId); if (!response || !response.success) { - if (!response) { - logger.info( - `Response from subscribe RPC came back undefined, is your datalayer running?`, - ); - } - logger.info( - `Retrying subscribe to ${storeId}, subscribe failed`, - retry + 1, - ); - logger.info('...'); - await new Promise((resolve) => - setTimeout(() => resolve(), timeoutInterval), - ); - return getSubscribedStoreData(storeId, retry + 1); + throw new Error(`Failed to subscribe to ${storeId}`); } } @@ -67,15 +46,7 @@ const getSubscribedStoreData = async (storeId, retry = 0) => { const storeExistAndIsConfirmed = await dataLayer.getRoot(storeId, true); logger.info(`Store found in DataLayer: ${storeId}.`); if (!storeExistAndIsConfirmed) { - logger.info( - `Retrying subscribe to ${storeId}, store not yet confirmed.`, - retry + 1, - ); - logger.info('...'); - await new Promise((resolve) => - setTimeout(() => resolve(), timeoutInterval), - ); - return getSubscribedStoreData(storeId, retry + 1); + throw new Error(`Store not found in DataLayer: ${storeId}.`); } else { logger.debug(`Store is confirmed, proceeding to get data ${storeId}`); } @@ -89,15 +60,7 @@ const getSubscribedStoreData = async (storeId, retry = 0) => { } if (_.isEmpty(encodedData?.keys_values)) { - logger.info( - `Retrying subscribe to ${storeId}, No data detected in store.`, - retry + 1, - ); - logger.info('...'); - await new Promise((resolve) => - setTimeout(() => resolve(), timeoutInterval), - ); - return getSubscribedStoreData(storeId, retry + 1); + throw new Error(`No data found for store ${storeId}`); } const decodedData = decodeDataLayerResponse(encodedData); diff --git a/src/models/organizations/organizations.model.js b/src/models/organizations/organizations.model.js index 3da9d064..e8207528 100644 --- a/src/models/organizations/organizations.model.js +++ b/src/models/organizations/organizations.model.js @@ -273,7 +273,7 @@ class Organization extends Model { const orgData = await datalayer.getSubscribedStoreData(orgUid); if (!orgData.registryId) { - throw new Error( + logger.error( 'Currupted organization, no registryId on the datalayer, can not import', ); } @@ -419,17 +419,16 @@ class Organization extends Model { ); } - await Promise.all( - defaultOrgs.map(async (org) => { - const exists = await Organization.findOne({ - where: { orgUid: org.orgUid }, - }); - - if (!exists) { - Organization.importOrganization(org.orgUid); - } - }), - ); + for (let i = 0; i < defaultOrgs.length; i++) { + const org = defaultOrgs[i]; + const exists = await Organization.findOne({ + where: { orgUid: org.orgUid }, + }); + + if (!exists) { + await Organization.importOrganization(org.orgUid); + } + } } catch (error) { logger.info(error); } From ce72e0a49a01a5a6812494c08c9446362f999900 Mon Sep 17 00:00:00 2001 From: Chia Automation Date: Sat, 13 Jan 2024 20:06:18 +0000 Subject: [PATCH 31/49] chore: Updating npm dev dependencies --- package-lock.json | 1074 +++++++++++++++++++++++++-------------------- package.json | 16 +- 2 files changed, 608 insertions(+), 482 deletions(-) diff --git a/package-lock.json b/package-lock.json index a21c2133..9e08a5e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,23 +40,23 @@ }, "devDependencies": { "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.6", + "@babel/core": "^7.23.7", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.6", - "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.4.3", - "@commitlint/config-conventional": "^18.4.3", + "@babel/preset-env": "^7.23.8", + "@babel/register": "^7.23.7", + "@commitlint/cli": "^18.4.4", + "@commitlint/config-conventional": "^18.4.4", "babel-plugin-module-resolver": "^5.0.0", - "chai": "^4.3.10", + "chai": "^5.0.0", "chai-http": "^4.4.0", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", "mocha": "^10.2.0", "semver": "^7.5.4", "sinon": "^17.0.1", - "socket.io-client": "^4.7.2", + "socket.io-client": "^4.7.4", "standard-version": "^9.5.0", "supertest": "^6.3.3" }, @@ -134,19 +134,19 @@ } }, "node_modules/@babel/core": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", - "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.6", + "@babel/helpers": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", + "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -257,9 +257,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -530,12 +530,12 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", - "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.6", + "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" }, "engines": { @@ -599,9 +599,9 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -877,9 +877,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", - "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", + "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -975,16 +975,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", @@ -1635,9 +1634,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", - "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", + "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", @@ -1646,7 +1645,7 @@ "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1667,13 +1666,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-generator-functions": "^7.23.7", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", "@babel/plugin-transform-block-scoping": "^7.23.4", "@babel/plugin-transform-class-properties": "^7.23.3", "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-classes": "^7.23.8", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", @@ -1715,9 +1714,9 @@ "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1752,15 +1751,15 @@ } }, "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", - "pirates": "^4.0.5", + "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "engines": { @@ -1777,9 +1776,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", - "integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1789,9 +1788,9 @@ } }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true }, "node_modules/@babel/template": { @@ -1808,9 +1807,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -1849,16 +1848,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.3.tgz", - "integrity": "sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.4.tgz", + "integrity": "sha512-Ro3wIo//fV3XiV1EkdpHog6huaEyNcUAVrSmtgKqYM5g982wOWmP4FXvEDFwRMVgz878CNBvvCc33dMZ5AQJ/g==", "dev": true, "dependencies": { - "@commitlint/format": "^18.4.3", - "@commitlint/lint": "^18.4.3", - "@commitlint/load": "^18.4.3", - "@commitlint/read": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/format": "^18.4.4", + "@commitlint/lint": "^18.4.4", + "@commitlint/load": "^18.4.4", + "@commitlint/read": "^18.4.4", + "@commitlint/types": "^18.4.4", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -1873,9 +1872,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", - "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.4.tgz", + "integrity": "sha512-Bz3sPQSboBN+Et/KyZrR+OJ3z9PrHDw7Bls0/hv94PmuHBtMq1dCGxS9XzTGzxeMNlytCC4kxF083tbhPljl3Q==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -1885,12 +1884,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.3.tgz", - "integrity": "sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.4.tgz", + "integrity": "sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.4.4", "ajv": "^8.11.0" }, "engines": { @@ -1898,12 +1897,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.3.tgz", - "integrity": "sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.4.tgz", + "integrity": "sha512-KjD19p6julB5WrQL+Cd8p+AePwpl1XzGAjB0jnuFMKWtji9L7ucCZUKDstGjlkBZGGzH/nvdB8K+bh5K27EVUg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.4.4", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -1915,21 +1914,21 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.3.tgz", - "integrity": "sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", + "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.3.tgz", - "integrity": "sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.4.tgz", + "integrity": "sha512-2v3V5hVlv0R3pe7p66IX5F7cjeVvGM5JqITRIbBCFvGHPJ/CG74rjTkAu0RBEiIhlk3eOaLjVGq3d5falPkLBA==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.4.4", "chalk": "^4.1.0" }, "engines": { @@ -2007,12 +2006,12 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.3.tgz", - "integrity": "sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.4.tgz", + "integrity": "sha512-rXWes9owKBTjfTr6Od7YlflRg4N+ngkOH+dUZhk0qL/XQb26mHz0EgVgdixMVBac1OsohRwJaLmVHX+5F6vfmg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.4.4", "semver": "7.5.4" }, "engines": { @@ -2020,31 +2019,30 @@ } }, "node_modules/@commitlint/lint": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.3.tgz", - "integrity": "sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.4.tgz", + "integrity": "sha512-SoyQstVxMY5Z4GnFRtRzy+NWYb+yVseXgir+7BxnpB59oH05C9XztRrhDw6OnkNeXhjINTpi1HLnuY7So+CaAQ==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.4.3", - "@commitlint/parse": "^18.4.3", - "@commitlint/rules": "^18.4.3", - "@commitlint/types": "^18.4.3" + "@commitlint/is-ignored": "^18.4.4", + "@commitlint/parse": "^18.4.4", + "@commitlint/rules": "^18.4.4", + "@commitlint/types": "^18.4.4" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.3.tgz", - "integrity": "sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.4.tgz", + "integrity": "sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/execute-rule": "^18.4.3", - "@commitlint/resolve-extends": "^18.4.3", - "@commitlint/types": "^18.4.3", - "@types/node": "^18.11.9", + "@commitlint/config-validator": "^18.4.4", + "@commitlint/execute-rule": "^18.4.4", + "@commitlint/resolve-extends": "^18.4.4", + "@commitlint/types": "^18.4.4", "chalk": "^4.1.0", "cosmiconfig": "^8.3.6", "cosmiconfig-typescript-loader": "^5.0.0", @@ -2128,21 +2126,21 @@ } }, "node_modules/@commitlint/message": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.3.tgz", - "integrity": "sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.4.tgz", + "integrity": "sha512-lHF95mMDYgAI1LBXveJUyg4eLaMXyOqJccCK3v55ZOEUsMPrDi8upqDjd/NmzWmESYihaOMBTAnxm+6oD1WoDQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.3.tgz", - "integrity": "sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.4.tgz", + "integrity": "sha512-99G7dyn/OoyNWXJni0Ki0K3aJd01pEb/Im/Id6y4X7PN+kGOahjz2z/cXYYHn7xDdooqFVdiVrVLeChfgpWZ2g==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.4.4", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -2151,14 +2149,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.3.tgz", - "integrity": "sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.4.tgz", + "integrity": "sha512-r58JbWky4gAFPea/CZmvlqP9Ehbs+8gSEUqhIJOojKzTc3xlxFnZUDVPcEnnaqzQEEoV6C69VW7xuzdcBlu/FQ==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.4.3", - "@commitlint/types": "^18.4.3", - "fs-extra": "^11.0.0", + "@commitlint/top-level": "^18.4.4", + "@commitlint/types": "^18.4.4", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" }, @@ -2167,13 +2164,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.3.tgz", - "integrity": "sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.4.tgz", + "integrity": "sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/config-validator": "^18.4.4", + "@commitlint/types": "^18.4.4", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -2184,15 +2181,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.3.tgz", - "integrity": "sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.4.tgz", + "integrity": "sha512-6Uzlsnl/GljEI+80NWjf4ThOfR8NIsbm18IfXYuCEchlwMHSxiuYG4rHSK5DNmG/+MIo8eR5VdQ0gQyt7kWzAA==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.4.3", - "@commitlint/message": "^18.4.3", - "@commitlint/to-lines": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/ensure": "^18.4.4", + "@commitlint/message": "^18.4.4", + "@commitlint/to-lines": "^18.4.4", + "@commitlint/types": "^18.4.4", "execa": "^5.0.0" }, "engines": { @@ -2200,18 +2197,18 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.3.tgz", - "integrity": "sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.4.tgz", + "integrity": "sha512-mwe2Roa59NCz/krniAdCygFabg7+fQCkIhXqBHw00XQ8Y7lw4poZLLxeGI3p3bLpcEOXdqIDrEGLwHmG5lBdwQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.3.tgz", - "integrity": "sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.4.tgz", + "integrity": "sha512-PBwW1drgeavl9CadB7IPRUk6rkUP/O8jEkxjlC+ofuh3pw0bzJdAT+Kw7M1Yc9KtTb9xTaqUB8uvRtaybHa/tQ==", "dev": true, "dependencies": { "find-up": "^5.0.0" @@ -2221,9 +2218,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.3.tgz", - "integrity": "sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.4.tgz", + "integrity": "sha512-/FykLtodD8gKs3+VNkAUwofu4LBHankclj+I8fB2jTRvG6PV7k/OUt4P+VbM7ip853qS4F0g7Z6hLNa6JeMcAQ==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -2413,9 +2410,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -2440,12 +2437,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2465,9 +2462,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -2513,55 +2510,14 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -2766,9 +2722,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", + "version": "20.11.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", + "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -2800,9 +2756,9 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/validator": { - "version": "13.11.7", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.7.tgz", - "integrity": "sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==" + "version": "13.11.8", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.8.tgz", + "integrity": "sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -2812,7 +2768,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true }, "node_modules/accepts": { "version": "1.3.8", @@ -2827,9 +2784,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -2855,6 +2812,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, "dependencies": { "debug": "4" }, @@ -2966,24 +2924,27 @@ "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true }, "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -3024,12 +2985,12 @@ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/astral-regex": { @@ -3167,6 +3128,25 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -3184,6 +3164,37 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -3283,6 +3294,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3426,9 +3460,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", - "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "funding": [ { "type": "opencollective", @@ -3445,21 +3479,19 @@ ] }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.0.0.tgz", + "integrity": "sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.0.0", + "deep-eql": "^5.0.1", + "loupe": "^3.0.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chai-http": { @@ -3519,15 +3551,12 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.0.0.tgz", + "integrity": "sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -3706,6 +3735,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, "bin": { "color-support": "bin.js" } @@ -3785,7 +3815,8 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -4754,9 +4785,9 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", + "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", "dev": true, "dependencies": { "browserslist": "^4.22.2" @@ -4935,18 +4966,37 @@ "node": ">=0.10.0" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { - "type-detect": "^4.0.0" + "mimic-response": "^3.1.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.1.tgz", + "integrity": "sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==", + "dev": true, "engines": { "node": ">=6" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -4976,7 +5026,8 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true }, "node_modules/denque": { "version": "2.1.0", @@ -5166,9 +5217,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.610", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", - "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==" + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5209,6 +5260,14 @@ "node": ">=0.10.0" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", @@ -5304,14 +5363,14 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -5731,6 +5790,14 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -5854,9 +5921,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dependencies": { "reusify": "^1.0.4" } @@ -5900,6 +5967,11 @@ "moment": "^2.29.1" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6059,19 +6131,10 @@ "node": ">= 0.6" } }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-minipass": { "version": "2.1.0", @@ -6118,22 +6181,22 @@ } }, "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", + "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "wide-align": "^1.1.5" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/generate-function": { @@ -6733,6 +6796,11 @@ "ini": "^1.3.2" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6880,7 +6948,8 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true }, "node_modules/hasown": { "version": "2.0.0", @@ -6979,6 +7048,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -7031,6 +7101,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -7110,8 +7199,7 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/ip": { "version": "2.0.0", @@ -7415,18 +7503,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -7453,9 +7529,9 @@ } }, "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true }, "node_modules/keyv": { @@ -7765,9 +7841,9 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.0.tgz", + "integrity": "sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==", "dev": true, "dependencies": { "get-func-name": "^2.0.1" @@ -7937,6 +8013,17 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -8097,6 +8184,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", @@ -8321,17 +8413,17 @@ } }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } }, "node_modules/moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "version": "0.5.44", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz", + "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==", "dependencies": { "moment": "^2.29.4" }, @@ -8437,6 +8529,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8457,84 +8554,40 @@ "dev": true }, "node_modules/nise": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz", - "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", + "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", "dev": true, "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" } }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/node-abi": { + "version": "3.54.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", + "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", "dependencies": { - "whatwg-url": "^5.0.0" + "semver": "^7.3.5" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=10" } }, + "node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==" + }, "node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -8559,67 +8612,6 @@ "node": ">= 10.12.0" } }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/node-gyp/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -8643,6 +8635,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, "dependencies": { "abbrev": "1" }, @@ -8690,14 +8683,18 @@ } }, "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, "dependencies": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/object-assign": { @@ -8915,12 +8912,12 @@ } }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/pg-connection-string": { @@ -9109,6 +9106,31 @@ "node": ">=4" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9153,6 +9175,15 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -9250,6 +9281,28 @@ "node": ">= 0.8" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -9862,7 +9915,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true }, "node_modules/set-function-length": { "version": "1.1.1", @@ -9932,6 +9986,49 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -10059,9 +10156,9 @@ } }, "node_modules/socket.io": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", - "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", + "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -10084,9 +10181,9 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz", - "integrity": "sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", + "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -10211,13 +10308,14 @@ } }, "node_modules/sqlite3": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz", - "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", "hasInstallScript": true, "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^4.2.0", + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", "tar": "^6.1.11" }, "optionalDependencies": { @@ -10567,6 +10665,50 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -10680,11 +10822,6 @@ "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -10707,6 +10844,17 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -10845,15 +10993,6 @@ "imurmurhash": "^0.1.4" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -10955,20 +11094,6 @@ "node": ">= 0.8" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -10987,6 +11112,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } diff --git a/package.json b/package.json index e77d4ed9..85083aee 100644 --- a/package.json +++ b/package.json @@ -60,23 +60,23 @@ }, "devDependencies": { "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.6", + "@babel/core": "^7.23.7", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.6", - "@babel/register": "^7.22.15", - "@commitlint/cli": "^18.4.3", - "@commitlint/config-conventional": "^18.4.3", + "@babel/preset-env": "^7.23.8", + "@babel/register": "^7.23.7", + "@commitlint/cli": "^18.4.4", + "@commitlint/config-conventional": "^18.4.4", "babel-plugin-module-resolver": "^5.0.0", - "chai": "^4.3.10", + "chai": "^5.0.0", "chai-http": "^4.4.0", - "eslint": "^8.55.0", + "eslint": "^8.56.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", "mocha": "^10.2.0", "semver": "^7.5.4", "sinon": "^17.0.1", - "socket.io-client": "^4.7.2", + "socket.io-client": "^4.7.4", "standard-version": "^9.5.0", "supertest": "^6.3.3" }, From cc3a11bedff4717d337ab2c45f0ce677978e7c85 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 31 Jan 2024 12:31:04 -0800 Subject: [PATCH 32/49] docs: 2024 license update --- LICENSE | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/LICENSE b/LICENSE index acc8f76e..0250a6bf 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2022 Chia Network Inc. +Copyright 2024 Chia Network Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9,9 +9,9 @@ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - - - + + + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -200,7 +200,7 @@ See the License for the specific language governing permissions and limitations same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2023 Chia Network Inc. + Copyright 2024 Chia Network Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From 1244dbca3182e1deacdd65de3fda40e7b51adf8a Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 31 Jan 2024 12:40:38 -0800 Subject: [PATCH 33/49] ci: fix path to new sqlite3 executable --- .github/workflows/build.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index eb107a3a..45a8b43c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -26,15 +26,15 @@ jobs: - runs-on: ubuntu-latest artifact-name: cadt-linux-x64 build-command: npm run create-linux-x64-dist - sqlite-path: ./node_modules/sqlite3/lib/binding/napi-v6-linux-glibc-x64/ + sqlite-path: ./node_modules/sqlite3/build/Release/ - runs-on: macos-latest artifact-name: cadt-macos-x64 build-command: npm run create-mac-x64-dist - sqlite-path: ./node_modules/sqlite3/lib/binding/napi-v6-darwin-unknown-x64/ + sqlite-path: ./node_modules/sqlite3/build/Release/ - runs-on: windows-2019 artifact-name: cadt-windows-x64 build-command: npm run create-win-x64-dist - sqlite-path: .\node_modules\sqlite3\lib\binding\napi-v6-win32-unknown-x64\ + sqlite-path: .\node_modules\sqlite3\build\Release\ steps: - name: Clean workspace From 19b25e050dc18eb61c2dd7fbde803e96b29823a2 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 15:03:57 -0800 Subject: [PATCH 34/49] docs: remove redundant blurb in license file --- LICENSE | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/LICENSE b/LICENSE index 0250a6bf..449f268d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,17 +1,3 @@ -Copyright 2024 Chia Network Inc. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. - -You may obtain a copy of the License at -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and limitations under the License. - - - Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ From b50ba525e6e26be5395efd5cc16186998d6bbf2d Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 15:04:54 -0800 Subject: [PATCH 35/49] build: specify node 18 in pkg command --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index b6283c47..caf331f7 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "build": "babel src --keep-file-extension --out-dir build --copy-files && cp package.json ./build", "build-migrations": "babel migrations --keep-file-extension --out-dir dist/migrations --copy-files", "prepare-binary": "rm -rf dist && mkdir dist", - "create-win-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node16-win-x64 --out-path dist", - "create-mac-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node16-macos-x64 --out-path dist", - "create-linux-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node16-linux-x64 --out-path dist", - "create-linux-arm64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node16-linux-arm64 --out-path dist" + "create-win-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node18-win-x64 --out-path dist", + "create-mac-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node18-macos-x64 --out-path dist", + "create-linux-x64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node18-linux-x64 --out-path dist", + "create-linux-arm64-dist": "npm run build && npm run prepare-binary && pkg package.json -t node18-linux-arm64 --out-path dist" }, "pkg": { "scripts": "package.json", From 1abc1dfd5c327dfd9054a2f8e4bc484cbe1760f7 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 15:44:21 -0800 Subject: [PATCH 36/49] ci: fix ARM sqlite path --- .github/workflows/build.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 45a8b43c..71020b28 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -184,8 +184,7 @@ jobs: - name: Copy sqlite3 run: | - ls ./node_modules/sqlite3/lib/binding/ - sudo cp ./node_modules/sqlite3/lib/binding/napi-v6-linux-glibc-arm64/node_sqlite3.node ./dist/ + sudo cp ./node_modules/sqlite3/build/Release/node_sqlite3.node ./dist/ - name: Upload artifacts uses: actions/upload-artifact@v3 From db20c2f42f688de268abe2de6ff9c7142c1c2d8d Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 15:54:56 -0800 Subject: [PATCH 37/49] tests: fix chai import in tests --- tests/test-fixtures/project-fixtures.js | 3 +-- tests/test-fixtures/staging-fixtures.js | 3 +-- tests/test-fixtures/unit-fixtures.js | 4 +--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/test-fixtures/project-fixtures.js b/tests/test-fixtures/project-fixtures.js index 835064e7..5aaf7977 100644 --- a/tests/test-fixtures/project-fixtures.js +++ b/tests/test-fixtures/project-fixtures.js @@ -1,8 +1,7 @@ import _ from 'lodash'; import supertest from 'supertest'; -import chai from 'chai'; -const { expect } = chai; +import { expect } from 'chai'; import app from '../../src/server'; import newProject from '../test-data/new-project.js'; diff --git a/tests/test-fixtures/staging-fixtures.js b/tests/test-fixtures/staging-fixtures.js index a7979932..33fb6652 100644 --- a/tests/test-fixtures/staging-fixtures.js +++ b/tests/test-fixtures/staging-fixtures.js @@ -1,7 +1,6 @@ import _ from 'lodash'; -import chai from 'chai'; -const { expect } = chai; +import { expect } from 'chai'; import supertest from 'supertest'; import app from '../../src/server'; diff --git a/tests/test-fixtures/unit-fixtures.js b/tests/test-fixtures/unit-fixtures.js index b5415581..c421235c 100644 --- a/tests/test-fixtures/unit-fixtures.js +++ b/tests/test-fixtures/unit-fixtures.js @@ -1,9 +1,7 @@ import _ from 'lodash'; import supertest from 'supertest'; -import chai from 'chai'; -const { expect } = chai; - +import { expect } from 'chai'; import app from '../../src/server'; import newUnit from '../test-data/new-unit.js'; import updateUnitJson from '../test-data/update-unit.js'; From 4239711cf32fec1275a05e86c544398267977e67 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 16:01:25 -0800 Subject: [PATCH 38/49] tests: fix chai import in tests --- tests/test-fixtures/common-fixtures.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test-fixtures/common-fixtures.js b/tests/test-fixtures/common-fixtures.js index 3f93b4db..2d7871f5 100644 --- a/tests/test-fixtures/common-fixtures.js +++ b/tests/test-fixtures/common-fixtures.js @@ -1,5 +1,4 @@ -import chai from 'chai'; -const { expect } = chai; +import { expect } from 'chai'; import { RelatedProject, From af06028d95b39aa850018645130b38e9ebb0b8d4 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Tue, 6 Feb 2024 16:30:19 -0800 Subject: [PATCH 39/49] tests: fix chai import in tests --- tests/integration/project.spec.js | 5 ++--- tests/integration/unit.spec.js | 5 ++--- tests/resources/projects.spec.js | 3 +-- tests/utils/request-utils.js | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/integration/project.spec.js b/tests/integration/project.spec.js index 9c6f7429..df1296ff 100644 --- a/tests/integration/project.spec.js +++ b/tests/integration/project.spec.js @@ -1,7 +1,6 @@ import _ from 'lodash'; -import chai from 'chai'; -const { expect } = chai; +import { expect } from 'chai'; import * as testFixtures from '../test-fixtures'; import { pullPickListValues } from '../../src/utils/data-loaders'; @@ -27,7 +26,7 @@ describe('Project Resource Integration Tests', function () { /* Basic Idea for this test is that we are going to create a project and verify that the new project propagates through the data layer and into our db. Then we are going - to delete the same project and make sure the delete command propagates through the datalayer + to delete the same project and make sure the delete command propagates through the datalayer then gets removed from our db. */ // create and commit the project to be deleted diff --git a/tests/integration/unit.spec.js b/tests/integration/unit.spec.js index a2a90919..3c1d3c11 100644 --- a/tests/integration/unit.spec.js +++ b/tests/integration/unit.spec.js @@ -1,8 +1,7 @@ import _ from 'lodash'; -import chai from 'chai'; +import { expect } from 'chai'; import supertest from 'supertest'; -const { expect } = chai; import app from '../../src/server'; import { UnitMirror } from '../../src/models'; @@ -37,7 +36,7 @@ describe('Unit Resource Integration Tests', function () { /* Basic Idea for this test is that we are going to create a unit and verify that the new unit propagates through the data layer and into our db. Then we are going - to delete the same unit and make sure the delete command propagates through the datalayer + to delete the same unit and make sure the delete command propagates through the datalayer then gets removed from our db. */ // create and commit the unit to be deleted diff --git a/tests/resources/projects.spec.js b/tests/resources/projects.spec.js index 14ad4327..398285a0 100644 --- a/tests/resources/projects.spec.js +++ b/tests/resources/projects.spec.js @@ -1,9 +1,8 @@ -import chai from 'chai'; +import { expect } from 'chai'; import _ from 'lodash'; import * as testFixtures from '../test-fixtures'; import sinon from 'sinon'; import datalayer from '../../src/datalayer'; -const { expect } = chai; import newProject from '../test-data/new-project.js'; import supertest from 'supertest'; import app from '../../src/server'; diff --git a/tests/utils/request-utils.js b/tests/utils/request-utils.js index 05e6bd25..9c8ee18c 100644 --- a/tests/utils/request-utils.js +++ b/tests/utils/request-utils.js @@ -15,7 +15,7 @@ export const get = (url) => { } resolve(res); - + }); }); }; From 0fc4d98fb22d7d92915e6c6a93b33e136f49b4b1 Mon Sep 17 00:00:00 2001 From: Zachary Brown Date: Wed, 7 Feb 2024 13:11:13 -0800 Subject: [PATCH 40/49] chore: version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index caf331f7..25d385e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cadt", - "version": "1.7.7", + "version": "1.7.8", "_comment": "DONT CHANGE MAJOR UNLESS DATAMODEL CHANGES: The major version corresponds to the datamodel version your using, so 2.0.0 means it'll use datamodel v2", "private": true, "bin": "build/server.js", From 8728f57530323e703784576b57beec66c828e246 Mon Sep 17 00:00:00 2001 From: Roy Natian Date: Thu, 8 Feb 2024 13:03:55 -0500 Subject: [PATCH 41/49] Grammar and typos README.md update --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index fae178e0..2b96d41e 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ **Please review the [CAD Trust Terms and Conditions](docs/CAD_Trust_Registry_Terms_and_Conditions.pdf) and [CAD Trust User Terms and Conditions](docs/CAD_Trust_User_Terms_and_Conditions.pdf).** -​This project provides the Climate Action Data Trust (CADT) API that integrates with the [Chia Blockchain](https://github.com/Chia-Network/chia-blockchain). For a user interface, see the [CADT UI project](https://github.com/Chia-Network/climate-warehouse-ui) which will connect to the CADT API. +​This project provides the Climate Action Data Trust (CADT) API that integrates with the [Chia Blockchain](https://github.com/Chia-Network/chia-blockchain). For a user interface, see the [CADT UI project](https://github.com/Chia-Network/climate-warehouse-ui), which will connect to the CADT API. -This project was formerly known as the Climate Warehouse and you may see this term used interchangeably with CADT. +This project was formerly known as the Climate Warehouse, and you may see this term used interchangeably with CADT. *Pagination is now strongly recommended on the units, projects, and issuances [API endpoints](docs/cadt_rpc_api.md) and will be mandatory in the future. Please adjust your API calls accordingly.* @@ -12,7 +12,7 @@ This project was formerly known as the Climate Warehouse and you may see this te The CADT application is designed to run 24/7, much like any other API. While it is possible to run it on-demand only when API requests need to be made, this guide assumes a permanently running solution. -The simplest way to run the CADT application is to use the same machine the Chia Wallet, Datalayer, and Datalayer HTTP services. CADT communicates with the Chia services over an RPC interface. The RPC interface uses certificates to authenticate, which will work automatically when the CADT application is run as the same user on the same machine as the Chia services. To run CADT on a separate machine from Chia, a public certificate from the Chia node most be used to authenticate (not yet documented). +The simplest way to run the CADT application is to use the same machine the Chia Wallet, Datalayer, and Datalayer HTTP services reside on. CADT communicates with the Chia services over an RPC interface. The RPC interface uses certificates to authenticate, which will work automatically when the CADT application is run as the same user on the same machine as the Chia services. To run CADT on a separate machine from Chia, a public certificate from the Chia node must be used to authenticate (not yet documented). ### How to use the API @@ -20,11 +20,11 @@ Please see the [CADT RPC API Guide](docs/cadt_rpc_api.md). ## Installation -[Releases are tagged in Github](https://github.com/Chia-Network/climate-warehouse/tags) and binaries are built for Windows, MacOS, and Linux. ARM binaries are available for Debian versions of Linux only. +[Releases are tagged in Github](https://github.com/Chia-Network/climate-warehouse/tags), and binaries are built for Windows, macOS, and Linux. ARM binaries are available for Debian versions of Linux only. ### Linux -A binary file that can run on all Linux distributions on x86 hardware can be found for each tagged release with the name `cadt-linux-x64-.zip`. This zip file will extract to the `cadt-linux-64` directory by default, where the `cadt` file can be executed to run the API. +A binary file that can run on all Linux distributions on x86 hardware can be found for each tagged release named `cadt-linux-x64-.zip`. This zip file will extract to the `cadt-linux-64` directory by default, where the `cadt` file can be executed to run the API. #### Debian-based Linux Distros (Ubuntu, Mint, etc) @@ -43,7 +43,7 @@ sudo apt-get install ca-certificates curl gnupg curl -sL https://repo.chia.net/FD39E6D3.pubkey.asc | sudo gpg --dearmor -o /usr/share/keyrings/chia.gpg ``` -3. Use the following command to setup the repository. +3. Use the following command to set up the repository. ``` echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/chia.gpg] https://repo.chia.net/cadt/debian/ stable main" | sudo tee /etc/apt/sources.list.d/cadt.list > /dev/null @@ -74,7 +74,7 @@ sudo systemctl enable cadt@ You'll need: ​ - Git -- [nvm](https://github.com/nvm-sh/nvm) - This app uses `nvm` to align node versions across development, CI and production. If you're working on Windows you should consider [nvm-windows](https://github.com/coreybutler/nvm-windows) +- [nvm](https://github.com/nvm-sh/nvm) - This app uses `nvm` to align node versions across development, CI and production. If you're working on Windows, you should consider [nvm-windows](https://github.com/coreybutler/nvm-windows) To install from source: @@ -88,11 +88,11 @@ npm run start ### Ports, Networking, and Security -By default, the CADT API will listen on localhost only on port 31310. If running a node with `READ_ONLY` set to `false`, it is highly recommended that CADT is run on a private network or with access limited by IP address. To allow remote connections to CADT, set the `BIND_ADDRESS` (see the [Configuration](#configuration) section below) to the IP to listen on, or `0.0.0.0` to listen on all interfaces. The port for the CADT API can be set with the parameter `CW_PORT`. The default port is 31310. In many cases, users will need to access the API from their workstations for either the [CADT UI](https://github.com/Chia-Network/climate-warehouse-ui) or to integrate with existing tools and scripts. To add authentication to the API, use the `CADT_API_KEY` parameter. Alternatively, the API can be served behind an authentication proxy to restrict access and the `CADT_API_KEY` can be left blank. If running an observer node with `READ_ONLY` set to `true`, the CADT API will only share data from the public blockchain, and running without authentication is usually safe. If `READ_ONLY` is set to `false`, authentication must be used to prevent unauthorized writes to the blockchain. +By default, the CADT API will listen on localhost only on port 31310. If running a node with `READ_ONLY` set to `false`, it is highly recommended that CADT is run on a private network or with access limited by IP address. To allow remote connections to CADT, set the `BIND_ADDRESS` (see the [Configuration](#configuration) section below) to the IP to listen on, or `0.0.0.0` to listen on all interfaces. The port for the CADT API can be set with the parameter `CW_PORT`. The default port is 31310. In many cases, users will need to access the API from their workstations for either the [CADT UI](https://github.com/Chia-Network/climate-warehouse-ui) or to integrate with existing tools and scripts. To add authentication to the API, use the `CADT_API_KEY` parameter. Alternatively, the API can be served behind an authentication proxy to restrict access and the `CADT_API_KEY` can be left blank. If running an observer node with `READ_ONLY` set to `true`, the CADT API will only share data from the public blockchain, and running without authentication is usually safe. If `READ_ONLY` is set to `false`, authentication must be used to prevent unauthorized writes to the blockchain. ### Adding Encryption to the CADT API -The CADT API uses HTTP and is unencrypted. To add encryption, use a reverse proxy like [Nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) with an SSL certificate. In this scenario, the CADT application can be set to listen only on localhost and Nginx (on the same server) would proxy incoming requests to port 31310. +The CADT API uses HTTP and is unencrypted. To add encryption, use a reverse proxy like [Nginx](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/) with an SSL certificate. In this scenario, the CADT application can be set to listen only on localhost, and Nginx (on the same server) will proxy incoming requests to port 31310. ### Configuration @@ -106,18 +106,18 @@ In the `CHIA_ROOT` directory (usually `~/.chia/mainnet` on Linux), CADT will add * **APP**: This section is for configuring the CADT application. * **CW_PORT**: CADT port where the API will be available. 31310 by default. * **BIND_ADDRESS**: By default, CADT listens on localhost only. To enable remote connections to CADT, change this to `0.0.0.0` to listen on all network interfaces, or to an IP address to listen on a specific network interface. - * **DATALAYER_URL**: URL and port to connect to the [Chia DataLayer RPC](https://docs.chia.net/datalayer-rpc). If Chia is installed locally with default settings, https://localhost:8562 will work. - * **WALLET_URL**: URL and port to conned to the [Chia Wallet RPC](https://docs.chia.net/wallet-rpc). If Chia is installed on the same machine as CADT with default settings, https://localhost:9256 will work. - * **USE_SIMULATOR**: Developer setting to populate CADT from a governance file and enables some extra APIs. Should always be "false" under normal usage. - * **READ_ONLY**: When hosting an Observer node, set to "true" to prevent any data being written using the CADT APIs. This makes the application safe to run with public endpoints as it is just displaying publicly available data. When running a governance node, or a participant node, set to "false" to allow data to be written to the CADT APIs. When "false", additional authentication or access restrictions must be applied to prevent unauthorized alteration of the data. - * **CADT_API_KEY**: This key is used by the [CADT UI](https://github.com/Chia-Network/climate-warehouse-ui) to authenticate with the CADT API endpoints. This allows the API to power the UI only without allowing requests missing the API key in the header to access the API. This can be left blank to allow open access to the API, or if access is restricted by other means. The CADT_API_KEY can be set to any value, but we recommend at least a 32 character random string. The CADT_API_KEY can be passed in a request using the `x-api-key` header. See the [RPC documentation](docs/climate_warehouse_rpc_api.md) for examples. - * **CHIA_NETWORK**: CADT can run on Chia mainnet or any testnet. Set to "mainnet" for production instances, or "testnet" if using the main Chia testnet. - * **USE_DEVELOPMENT_MODE**: Should be false in most use cases. If a developer writing code for the app, this can be changed to "true" which will bypass the need for a governance node. + * **DATALAYER_URL**: URL and port to connect to the [Chia DataLayer RPC](https://docs.chia.net/datalayer-rpc). If Chia is installed locally with default settings, https://localhost:8562 will work. + * **WALLET_URL**: URL and port to connect to the [Chia Wallet RPC](https://docs.chia.net/wallet-rpc). If Chia is installed on the same machine as CADT with default settings, https://localhost:9256 will work. + * **USE_SIMULATOR**: Developer setting to populate CADT from a governance file and enable some extra APIs. Should always be "false" under normal usage. + * **READ_ONLY**: When hosting an Observer node, set it to "true" to prevent any data from being written using the CADT APIs. This makes the application safe to run with public endpoints as it is just displaying publicly available data. When running a governance node, or a participant node, set to "false" to allow data to be written to the CADT APIs. When "false", additional authentication or access restrictions must be applied to prevent unauthorized alteration of the data. + * **CADT_API_KEY**: This key is used by the [CADT UI](https://github.com/Chia-Network/climate-warehouse-ui) to authenticate with the CADT API endpoints. This allows the API to power the UI only without allowing requests missing the API key in the header to access the API. This can be left blank to allow open access to the API or if access is restricted by other means. The CADT_API_KEY can be set to any value, but we recommend at least a 32-character random string. The CADT_API_KEY can be passed in a request using the `x-api-key` header. See the [RPC documentation](docs/climate_warehouse_rpc_api.md) for examples. + * **CHIA_NETWORK**: CADT can run on Chia mainnet or any testnet. Set to "mainnet" for production instances or "testnet" if using the main Chia testnet. + * **USE_DEVELOPMENT_MODE**: Should be false in most use cases. If a developer is writing code for the app, this can be changed to "true," which will bypass the need for a governance node. * **IS_GOVERNANCE_BODY**: "True" or "false" toggle to enable/disable mode for this instance being a governing body. - * **DEFAULT_FEE**: [Fee](https://docs.chia.net/mempool/) for each transaction on the Chia blockchain in mojos. The default is 300000000 mojos (0.0003 XCH) and can be set higher or lower depending on how [busy](https://dashboard.chia.net/d/46EAA05E/mempool-transactions-and-fees?orgId=1) the Chia network is. If a fee is set very low, it may cause a delay in transaction processing. - * **DEFAULT_COIN_AMOUNT**: Units are mojo. Each DataLayer transaction needs a coin amount and the default is 300000000 mojo. + * **DEFAULT_FEE**: [Fee](https://docs.chia.net/mempool/) for each transaction on the Chia blockchain in mojos. The default is 300000000 mojos (0.0003 XCH) and can be set higher or lower depending on how [busy](https://dashboard.chia.net/d/46EAA05E/mempool-transactions-and-fees?orgId=1) the Chia network is. If a fee is set very low, it may cause a delay in transaction processing. + * **DEFAULT_COIN_AMOUNT**: Units are mojo. Each DataLayer transaction needs a coin amount, and the default is 300000000 mojo. * **CERTIFICATE_FOLDER_PATH**: If using a custom path for the Chia Blockchain certificates folder, enter the path here to allow CADT to find the certificates and authenticate to the Chia RPC. CADT assumes the folder structure within the directory specified matches the default Chia SSL directory of `$CHIA_ROOT/config/ssl/`. - * **DATALAYER_FILE_SERVER_URL**: Publicly available Chia DataLayer HTTP URL and port, including schema (http:// or https://). If serving DataLayer files from S3, this would be the public URL of the S3 bucket. Port can be omitted if using standard ports for http or https requests. + * **DATALAYER_FILE_SERVER_URL**: Publicly available Chia DataLayer HTTP URL and port, including schema (http:// or https://). If serving DataLayer files from S3, this would be the public URL of the S3 bucket. Port can be omitted if using standard ports for http or https requests. * **AUTO_SUBSCRIBE_FILESTORE**: Subscribing to the filestore for any organization is optional. To automatically subscribe and sync the filestore to every organization you subscribe to, set this to `true`. * **TASKS**: Section for configuring sync intervals * **AUDIT_SYNC_TASK_INTERVAL**: Default 30 @@ -133,11 +133,11 @@ Note that the CADT application will need to be restarted after any changes to th ## Developer Guide -A development environment for CADT assumes a synced Chia wallet running locally. [Node version manager (nvm)](https://github.com/nvm-sh/nvm) is used to quickly switch node environments. The repo contains a `.nvmrc` file that specifies the node version the CADT is expected to use and developers can do `nvm use` to switch to the version in the `.nvmrc`. +A development environment for CADT assumes a synced Chia wallet running locally. [Node version manager (nvm)](https://github.com/nvm-sh/nvm) is used to switch node environments quickly. The repo contains a `.nvmrc` file that specifies the node version the CADT is expected to use and developers can do `nvm use` to switch to the version in the `.nvmrc`. ### Contributing -All branches should be created from the `develop` branch and not from `main`. All pull requests should be made against the `develop` branch, unless it is a new release. The `develop` branch will be merged into the `main` branch to create a release. Automation in the CI will create the [release](https://github.com/Chia-Network/cadt/releases) and attach the installation files to it automatically whenever code is merged to `main`. Additionally, the changelog will automatically be updated in the `main` branch. Therefore, the `main` branch should always be a representation of the latest released code. +All branches should be created from the `develop` branch and not from `main`. All pull requests should be made against the `develop` branch unless it is a new release. The `develop` branch will be merged into the `main` branch to create a release. Automation in the CI will create the [release](https://github.com/Chia-Network/cadt/releases) and attach the installation files to it automatically whenever code is merged to `main`. Additionally, the changelog will automatically be updated in the `main` branch. Therefore, the `main` branch should always be a representation of the latest released code. ​This repo uses a [commit convention](https://www.conventionalcommits.org/en/v1.0.0/). A typical commit message might read: ​ @@ -145,36 +145,36 @@ All branches should be created from the `develop` branch and not from `main`. A fix: correct home screen layout ``` ​ -The first part of this is the commit "type". The most common types are "feat" for new features, and "fix" for bugfixes. Using these commit types helps us correctly manage our version numbers and changelogs. Since our release process calculates new version numbers from our commits it is very important to get this right. +The first part of this is the commit "type". The most common types are "feat" for new features and "fix" for bugfixes. Using these commit types helps us correctly manage our version numbers and changelogs. Since our release process calculates new version numbers from our commits, getting this right is very important. ​ - `feat` is for introducing a new feature - `fix` is for bug fixes - `docs` for documentation only changes - `style` is for code formatting only -- `refactor` is for changes to code which should not be detectable by users or testers +- `refactor` is for changes to code that should not be detectable by users or testers - `perf` is for a code change that improves performance -- `test` is for changes which only touch test files or related tooling -- `build` is for changes which only touch our develop/release tools +- `test` is for changes that only touch test files or related tooling +- `build` is for changes that only touch our develop/release tools - `ci` is for changes to the continuous integration files and scripts - `chore` is for changes that don't modify code, like a version bump - `revert` is for reverting a previous commit ​ - After the type and scope there should be a colon. + After the type and scope, there should be a colon (`:`). ​ The "subject" of the commit follows. It should be a short indication of the change. The commit convention prefers that this is written in the present-imperative tense. ### Versioning -This project mostly adheres to semantic versioning. The version specified in `package.json` will be used by the ci to create the new release in Github so it is important to set that correctly. The major version (version 1.0, 2.0, etc) should only be changed when the data model changes and the API goes from v1 to v2. Minor version changes (version 1.2 to 1.3, etc) are for breaking or substantial changes, usually requiring some action on the user's part. +This project mostly adheres to semantic versioning. The version specified in `package.json` will be used by the ci to create the new release in Github, so it is important to set that correctly. The major version (version 1.0, 2.0, etc) should only be changed when the data model changes and the API goes from v1 to v2. Minor version changes (version 1.2 to 1.3, etc.) are for breaking or substantial changes, usually requiring some action on the user's part. ​ ### Commit linting ​ -Each time you commit the message will be checked against these standards in a pre-commit hook. Additionally all the commits in a PR branch will be linted before it can be merged to master. +Each time you commit the message will be checked against these standards in a pre-commit hook. Additionally, all the commits in a PR branch will be linted before it can be merged to master. -To setup the pre-commit hooks on your local, run the following: +To set up the pre-commit hooks on your local, run the following: ​ ``` npm install -g @babel/cli husky prettier lint-staged cross-env @@ -219,7 +219,7 @@ Migrations run automatically when you run the software. There is no manual tool #### Making changes to Migrations without rolling back ​ -If you want to alter, drop or add a column or add a foriegn key or anything with the table. Use the following command to create a barebone migration script +If you want to alter, drop, or add a column or add a foreign key or anything with the table. Use the following command to create a barebones migration script ​ npx sequelize-cli migration:generate --name ​ @@ -227,7 +227,7 @@ npx sequelize-cli migration:generate --name #### Running Full Text Search Queries ​ -To run a FTS query on a supported table, you can use the `MATCH` operator. A virtual column `rank` is also available for sorting purposes. +To run an FTS query on a supported table, you can use the `MATCH` operator. A virtual column `rank` is also available for sorting purposes. ​ Example: ​ From 72ae0c35ab8be44f018cda17ce95fd972c9a5c43 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 8 Feb 2024 15:52:00 -0500 Subject: [PATCH 42/49] chore: update deps --- package-lock.json | 707 +++++++++++++++++++++++++--------------------- package.json | 34 +-- 2 files changed, 403 insertions(+), 338 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9e08a5e3..3f65e03a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,23 @@ { "name": "cadt", - "version": "1.7.6", + "version": "1.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cadt", - "version": "1.7.6", + "version": "1.7.7", "dependencies": { - "@babel/eslint-parser": "^7.22.15", - "async-mutex": "^0.4.0", + "@babel/eslint-parser": "^7.23.10", + "async-mutex": "^0.4.1", "body-parser": "^1.20.2", "cli-spinner": "^0.2.10", "cors": "^2.8.5", "csvtojson": "^2.0.10", - "dotenv": "^16.3.1", + "dotenv": "^16.4.1", "express": "^4.18.2", "express-joi-validation": "^5.0.1", - "joi": "^17.11.0", + "joi": "^17.12.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "log-update": "^4.0.0", @@ -26,11 +26,11 @@ "node-xlsx": "^0.23.0", "regenerator-runtime": "^0.13.11", "rxjs": "^7.8.1", - "sequelize": "^6.33.0", - "socket.io": "^4.7.2", - "sqlite3": "^5.1.6", + "sequelize": "^6.36.0", + "socket.io": "^4.7.4", + "sqlite3": "^5.1.7", "superagent": "^8.1.2", - "toad-scheduler": "^3.0.0", + "toad-scheduler": "^3.0.1", "uuidv4": "^6.2.13", "winston": "^3.11.0", "winston-daily-rotate-file": "^4.7.1" @@ -39,26 +39,26 @@ "cadt": "build/server.js" }, "devDependencies": { - "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.7", + "@babel/cli": "^7.23.9", + "@babel/core": "^7.23.9", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.8", + "@babel/preset-env": "^7.23.9", "@babel/register": "^7.23.7", - "@commitlint/cli": "^18.4.4", - "@commitlint/config-conventional": "^18.4.4", + "@commitlint/cli": "^18.6.0", + "@commitlint/config-conventional": "^18.6.0", "babel-plugin-module-resolver": "^5.0.0", - "chai": "^5.0.0", + "chai": "^5.0.3", "chai-http": "^4.4.0", "eslint": "^8.56.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", - "mocha": "^10.2.0", - "semver": "^7.5.4", + "mocha": "^10.3.0", + "semver": "^7.6.0", "sinon": "^17.0.1", "socket.io-client": "^4.7.4", "standard-version": "^9.5.0", - "supertest": "^6.3.3" + "supertest": "^6.3.4" }, "engines": { "node": ">=16.13" @@ -85,9 +85,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.4.tgz", - "integrity": "sha512-j3luA9xGKCXVyCa5R7lJvOMM+Kc2JEnAEIgz2ggtjQ/j5YUVgfsg/WsG95bbsgq7YLHuiCOzMnoSasuY16qiCw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.9.tgz", + "integrity": "sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", @@ -134,20 +134,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -171,9 +171,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz", - "integrity": "sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz", + "integrity": "sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -257,9 +257,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", - "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -315,9 +315,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -530,13 +530,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -556,9 +556,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -877,9 +877,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", - "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -1235,9 +1235,9 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", @@ -1634,9 +1634,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", - "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", @@ -1666,7 +1666,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.7", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", "@babel/plugin-transform-block-scoping": "^7.23.4", @@ -1688,7 +1688,7 @@ "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", @@ -1714,9 +1714,9 @@ "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.7", - "babel-plugin-polyfill-corejs3": "^0.8.7", - "babel-plugin-polyfill-regenerator": "^0.5.4", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1776,9 +1776,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1794,22 +1794,22 @@ "dev": true }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -1817,8 +1817,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1827,9 +1827,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -1848,16 +1848,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.4.tgz", - "integrity": "sha512-Ro3wIo//fV3XiV1EkdpHog6huaEyNcUAVrSmtgKqYM5g982wOWmP4FXvEDFwRMVgz878CNBvvCc33dMZ5AQJ/g==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.6.0.tgz", + "integrity": "sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w==", "dev": true, "dependencies": { - "@commitlint/format": "^18.4.4", - "@commitlint/lint": "^18.4.4", - "@commitlint/load": "^18.4.4", - "@commitlint/read": "^18.4.4", - "@commitlint/types": "^18.4.4", + "@commitlint/format": "^18.6.0", + "@commitlint/lint": "^18.6.0", + "@commitlint/load": "^18.6.0", + "@commitlint/read": "^18.6.0", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -1872,9 +1872,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.4.tgz", - "integrity": "sha512-Bz3sPQSboBN+Et/KyZrR+OJ3z9PrHDw7Bls0/hv94PmuHBtMq1dCGxS9XzTGzxeMNlytCC4kxF083tbhPljl3Q==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.6.0.tgz", + "integrity": "sha512-CDCOf2eJz9D/TL44IBks0stM9TmdLCNE2B48owIU3YCadwzts/bobXPScagIgPQF6hhKYMEdj5zpUDlmbwuqwQ==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -1884,12 +1884,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.4.tgz", - "integrity": "sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.6.0.tgz", + "integrity": "sha512-Ptfa865arNozlkjxrYG3qt6wT9AlhNUHeuDyKEZiTL/l0ftncFhK/KN0t/EAMV2tec+0Mwxo0FmhbESj/bI+1g==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "ajv": "^8.11.0" }, "engines": { @@ -1897,12 +1897,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.4.tgz", - "integrity": "sha512-KjD19p6julB5WrQL+Cd8p+AePwpl1XzGAjB0jnuFMKWtji9L7ucCZUKDstGjlkBZGGzH/nvdB8K+bh5K27EVUg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.6.0.tgz", + "integrity": "sha512-xY07NmOBJ7JuhX3tic021PaeLepZARIQyqpAQoNQZoml1keBFfB6MbA7XlWZv0ebbarUFE4yhKxOPw+WFv7/qw==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -1923,12 +1923,12 @@ } }, "node_modules/@commitlint/format": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.4.tgz", - "integrity": "sha512-2v3V5hVlv0R3pe7p66IX5F7cjeVvGM5JqITRIbBCFvGHPJ/CG74rjTkAu0RBEiIhlk3eOaLjVGq3d5falPkLBA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.6.0.tgz", + "integrity": "sha512-8UNWfs2slPPSQiiVpLGJTnPHv7Jkd5KYxfbNXbmLL583bjom4RrylvyrCVnmZReA8nNad7pPXq6mDH4FNVj6xg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0" }, "engines": { @@ -2006,43 +2006,76 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.4.tgz", - "integrity": "sha512-rXWes9owKBTjfTr6Od7YlflRg4N+ngkOH+dUZhk0qL/XQb26mHz0EgVgdixMVBac1OsohRwJaLmVHX+5F6vfmg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.6.0.tgz", + "integrity": "sha512-Xjx/ZyyJ4FdLuz0FcOvqiqSFgiO2yYj3QN9XlvyrxqbXTxPVC7QFEXJYBVPulUSN/gR7WXH1Udw+HYYfD17xog==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "semver": "7.5.4" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@commitlint/lint": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.4.tgz", - "integrity": "sha512-SoyQstVxMY5Z4GnFRtRzy+NWYb+yVseXgir+7BxnpB59oH05C9XztRrhDw6OnkNeXhjINTpi1HLnuY7So+CaAQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.6.0.tgz", + "integrity": "sha512-ycbuDWfyykPmslgiHzhz8dL6F0BJYltXLVfc+M49z0c+FNITM0v+r0Vd2+Tdtq06VTc894p2+YSmZhulY8Jn3Q==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.4.4", - "@commitlint/parse": "^18.4.4", - "@commitlint/rules": "^18.4.4", - "@commitlint/types": "^18.4.4" + "@commitlint/is-ignored": "^18.6.0", + "@commitlint/parse": "^18.6.0", + "@commitlint/rules": "^18.6.0", + "@commitlint/types": "^18.6.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.4.tgz", - "integrity": "sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.6.0.tgz", + "integrity": "sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.4", + "@commitlint/config-validator": "^18.6.0", "@commitlint/execute-rule": "^18.4.4", - "@commitlint/resolve-extends": "^18.4.4", - "@commitlint/types": "^18.4.4", + "@commitlint/resolve-extends": "^18.6.0", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0", "cosmiconfig": "^8.3.6", "cosmiconfig-typescript-loader": "^5.0.0", @@ -2135,12 +2168,12 @@ } }, "node_modules/@commitlint/parse": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.4.tgz", - "integrity": "sha512-99G7dyn/OoyNWXJni0Ki0K3aJd01pEb/Im/Id6y4X7PN+kGOahjz2z/cXYYHn7xDdooqFVdiVrVLeChfgpWZ2g==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.6.0.tgz", + "integrity": "sha512-Y/G++GJpATFw54O0jikc/h2ibyGHgghtPnwsOk3O/aU092ydJ5XEHYcd7xGNQYuLweLzQis2uEwRNk9AVIPbQQ==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -2149,13 +2182,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.4.tgz", - "integrity": "sha512-r58JbWky4gAFPea/CZmvlqP9Ehbs+8gSEUqhIJOojKzTc3xlxFnZUDVPcEnnaqzQEEoV6C69VW7xuzdcBlu/FQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.6.0.tgz", + "integrity": "sha512-w39ji8VfWhPKRquPhRHB3Yd8XIHwaNHgOh28YI1QEmZ59qVpuVUQo6h/NsVb+uoC6LbXZiofTZv2iFR084jKEA==", "dev": true, "dependencies": { "@commitlint/top-level": "^18.4.4", - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" }, @@ -2164,13 +2197,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.4.tgz", - "integrity": "sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.6.0.tgz", + "integrity": "sha512-k2Xp+Fxeggki2i90vGrbiLDMefPius3zGSTFFlRAPKce/SWLbZtI+uqE9Mne23mHO5lmcSV8z5m6ziiJwGpOcg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.4", - "@commitlint/types": "^18.4.4", + "@commitlint/config-validator": "^18.6.0", + "@commitlint/types": "^18.6.0", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -2181,15 +2214,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.4.tgz", - "integrity": "sha512-6Uzlsnl/GljEI+80NWjf4ThOfR8NIsbm18IfXYuCEchlwMHSxiuYG4rHSK5DNmG/+MIo8eR5VdQ0gQyt7kWzAA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.6.0.tgz", + "integrity": "sha512-pTalvCEvuCWrBWZA/YqO/3B3nZnY3Ncc+TmQsRajBdC1tkQIm5Iovdo4Ec7f2Dw1tVvpYMUUNAgcWqsY0WckWg==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.4.4", + "@commitlint/ensure": "^18.6.0", "@commitlint/message": "^18.4.4", "@commitlint/to-lines": "^18.4.4", - "@commitlint/types": "^18.4.4", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0" }, "engines": { @@ -2218,9 +2251,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.4.tgz", - "integrity": "sha512-/FykLtodD8gKs3+VNkAUwofu4LBHankclj+I8fB2jTRvG6PV7k/OUt4P+VbM7ip853qS4F0g7Z6hLNa6JeMcAQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.6.0.tgz", + "integrity": "sha512-oavoKLML/eJa2rJeyYSbyGAYzTxQ6voG5oeX3OrxpfrkRWhJfm4ACnhoRf5tgiybx2MZ+EVFqC1Lw3W8/uwpZA==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -2510,9 +2543,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", - "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2602,9 +2635,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -2620,9 +2653,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -2722,9 +2755,9 @@ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.0.tgz", - "integrity": "sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==", + "version": "20.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", + "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", "dependencies": { "undici-types": "~5.26.4" } @@ -2756,9 +2789,9 @@ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/validator": { - "version": "13.11.8", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.8.tgz", - "integrity": "sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==" + "version": "13.11.9", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.9.tgz", + "integrity": "sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw==" }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", @@ -3007,9 +3040,9 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/async-mutex": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", - "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", + "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", "dependencies": { "tslib": "^2.4.0" } @@ -3076,13 +3109,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", + "@babel/helper-define-polyfill-provider": "^0.5.0", "semver": "^6.3.1" }, "peerDependencies": { @@ -3099,25 +3132,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", - "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4" + "@babel/helper-define-polyfill-provider": "^0.5.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3264,9 +3297,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "funding": [ { "type": "opencollective", @@ -3282,8 +3315,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3401,13 +3434,17 @@ "optional": true }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3460,9 +3497,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "version": "1.0.30001585", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", + "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", "funding": [ { "type": "opencollective", @@ -3479,15 +3516,15 @@ ] }, "node_modules/chai": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.0.0.tgz", - "integrity": "sha512-HO5p0oEKd5M6HEcwOkNAThAE3j960vIZvVcc0t2tI06Dd0ATu69cEnMB2wOhC5/ZyQ6m67w3ePjU/HzXsSsdBA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.0.3.tgz", + "integrity": "sha512-wKGCtYv2kVY5WEjKqQ3fSIZWtTFveZCtzinhTZbx3/trVkxefiwovhpU9kRVCwxvKKCEjTWXPdM1/T7zPoDgow==", "dev": true, "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.0.0", "deep-eql": "^5.0.1", - "loupe": "^3.0.0", + "loupe": "^3.1.0", "pathval": "^2.0.0" }, "engines": { @@ -3560,16 +3597,11 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "optional": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3582,6 +3614,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -4785,9 +4820,9 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, "node_modules/core-js-compat": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", - "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", "dev": true, "dependencies": { "browserslist": "^4.22.2" @@ -4857,6 +4892,14 @@ "typescript": ">=4" } }, + "node_modules/croner": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/croner/-/croner-7.0.5.tgz", + "integrity": "sha512-15HLCD7iXnMe5km54yc4LN5BH+Cg9uCQvbkJ0acHxFffE29w3Uvgb9s/l310UCVUgMwGSBNw9BAHsEb5uMgj1g==", + "engines": { + "node": ">=6.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5003,13 +5046,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", "dependencies": { - "get-intrinsic": "^1.2.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5122,9 +5166,9 @@ } }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", "engines": { "node": ">=12" }, @@ -5217,9 +5261,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.630", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", - "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==" + "version": "1.4.662", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.662.tgz", + "integrity": "sha512-gfl1XVWTQmPHhqEG0kN77SpUxaqPpMb9r83PT4gvKhg7P3irSxru3lW85RxvK1uI1j2CAcTWPjG/HbE0IP/Rtg==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -5302,9 +5346,9 @@ } }, "node_modules/engine.io-parser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", - "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", "engines": { "node": ">=10.0.0" } @@ -5341,10 +5385,18 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -5921,9 +5973,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } @@ -6234,15 +6286,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7121,9 +7177,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "engines": { "node": ">= 4" } @@ -7420,13 +7476,13 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "17.12.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz", + "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==", "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -8190,9 +8246,9 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -8202,13 +8258,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -8223,10 +8278,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-styles": { @@ -8244,6 +8295,42 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -8286,37 +8373,24 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8338,15 +8412,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -8421,9 +8486,9 @@ } }, "node_modules/moment-timezone": { - "version": "0.5.44", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz", - "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==", + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", "dependencies": { "moment": "^2.29.4" }, @@ -8517,18 +8582,6 @@ "node": ">=12" } }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -8554,9 +8607,9 @@ "dev": true }, "node_modules/nise": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", - "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", @@ -8584,9 +8637,12 @@ } }, "node_modules/node-addon-api": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", - "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==" + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "engines": { + "node": "^16 || ^18 || >= 20" + } }, "node_modules/node-gyp": { "version": "8.4.1", @@ -9745,9 +9801,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -9821,9 +9877,9 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/sequelize": { - "version": "6.35.2", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.35.2.tgz", - "integrity": "sha512-EdzLaw2kK4/aOnWQ7ed/qh3B6/g+1DvmeXr66RwbcqSm/+QRS9X0LDI5INBibsy4eNJHWIRPo3+QK0zL+IPBHg==", + "version": "6.36.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.36.0.tgz", + "integrity": "sha512-PqOa11EHwA/zLmGDU4aynbsavbHJUlgRvFuC/2cA4LhOuV6NHKcQ0IXB+hNdFrGT3rULmvc4kdIwnfCNsrECMQ==", "funding": [ { "type": "opencollective", @@ -9919,14 +9975,16 @@ "optional": true }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9969,13 +10027,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10265,9 +10327,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -10614,13 +10676,13 @@ } }, "node_modules/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^8.0.5" + "superagent": "^8.1.2" }, "engines": { "node": ">=6.4.0" @@ -10805,9 +10867,12 @@ } }, "node_modules/toad-scheduler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toad-scheduler/-/toad-scheduler-3.0.0.tgz", - "integrity": "sha512-BYmrORvaGmjziir/ra8qD3qAKczJveqK5ZOO/wn7oS5qLI4iibOza3DBGgu+EwNp9zdlBTKSeZPmxZxzGy1dxw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/toad-scheduler/-/toad-scheduler-3.0.1.tgz", + "integrity": "sha512-UunrUeXWHXNauNMP47OHKfFeJlHxt89f29fdwey+EQLnVGbGPcFk7ArTuTk7SCcrSeVDTlhr5ayFHal0Z1LhJg==", + "dependencies": { + "croner": "^7.0.5" + } }, "node_modules/toidentifier": { "version": "1.0.1", @@ -11156,9 +11221,9 @@ } }, "node_modules/winston-transport": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", - "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", diff --git a/package.json b/package.json index b6283c47..10c32afc 100644 --- a/package.json +++ b/package.json @@ -31,16 +31,16 @@ "assets": "package.json" }, "dependencies": { - "@babel/eslint-parser": "^7.22.15", - "async-mutex": "^0.4.0", + "@babel/eslint-parser": "^7.23.10", + "async-mutex": "^0.4.1", "body-parser": "^1.20.2", "cli-spinner": "^0.2.10", "cors": "^2.8.5", "csvtojson": "^2.0.10", - "dotenv": "^16.3.1", + "dotenv": "^16.4.1", "express": "^4.18.2", "express-joi-validation": "^5.0.1", - "joi": "^17.11.0", + "joi": "^17.12.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "log-update": "^4.0.0", @@ -49,36 +49,36 @@ "node-xlsx": "^0.23.0", "regenerator-runtime": "^0.13.11", "rxjs": "^7.8.1", - "sequelize": "^6.33.0", - "socket.io": "^4.7.2", - "sqlite3": "^5.1.6", + "sequelize": "^6.36.0", + "socket.io": "^4.7.4", + "sqlite3": "^5.1.7", "superagent": "^8.1.2", - "toad-scheduler": "^3.0.0", + "toad-scheduler": "^3.0.1", "uuidv4": "^6.2.13", "winston": "^3.11.0", "winston-daily-rotate-file": "^4.7.1" }, "devDependencies": { - "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.7", + "@babel/cli": "^7.23.9", + "@babel/core": "^7.23.9", "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/preset-env": "^7.23.8", + "@babel/preset-env": "^7.23.9", "@babel/register": "^7.23.7", - "@commitlint/cli": "^18.4.4", - "@commitlint/config-conventional": "^18.4.4", + "@commitlint/cli": "^18.6.0", + "@commitlint/config-conventional": "^18.6.0", "babel-plugin-module-resolver": "^5.0.0", - "chai": "^5.0.0", + "chai": "^5.0.3", "chai-http": "^4.4.0", "eslint": "^8.56.0", "eslint-plugin-es": "^4.1.0", "eslint-plugin-mocha": "^10.2.0", "husky": "^8.0.3", - "mocha": "^10.2.0", - "semver": "^7.5.4", + "mocha": "^10.3.0", + "semver": "^7.6.0", "sinon": "^17.0.1", "socket.io-client": "^4.7.4", "standard-version": "^9.5.0", - "supertest": "^6.3.3" + "supertest": "^6.3.4" }, "standard-version": { "skip": { From fc4ccb58b9fc408edfaef5a33589f3c345f8d31d Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Fri, 9 Feb 2024 13:34:08 -0500 Subject: [PATCH 43/49] fix: sync remaining bug --- src/tasks/sync-registries.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index a3b49a19..c01d3011 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -219,7 +219,7 @@ const syncOrganizationAudit = async (organization) => { ); } - const rootHistoryCount = rootHistory.length - 1; + const rootHistoryCount = rootHistory.length; const syncRemaining = rootHistoryCount - historyIndex; const isSynced = syncRemaining === 0; From 192a9e5447c3213bfd6309374bda04218523e689 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Fri, 9 Feb 2024 14:35:59 -0500 Subject: [PATCH 44/49] fix: sync remaining bug --- src/tasks/sync-registries.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index c01d3011..8b7d6683 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -221,7 +221,7 @@ const syncOrganizationAudit = async (organization) => { const rootHistoryCount = rootHistory.length; const syncRemaining = rootHistoryCount - historyIndex; - const isSynced = syncRemaining === 0; + const isSynced = Boolean(rootHistory?.[historyIndex + 1]) === false; await Organization.update( { From 64dacdf7ea376c6ec45fb13a0aee72bd2a004842 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Mon, 12 Feb 2024 17:14:42 -0500 Subject: [PATCH 45/49] fix: sync remaining bug --- src/tasks/sync-registries.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index 8b7d6683..f077e7cb 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -219,9 +219,9 @@ const syncOrganizationAudit = async (organization) => { ); } - const rootHistoryCount = rootHistory.length; - const syncRemaining = rootHistoryCount - historyIndex; - const isSynced = Boolean(rootHistory?.[historyIndex + 1]) === false; + const rootHistoryZeroBasedCount = rootHistory.length - 1; + const syncRemaining = rootHistoryZeroBasedCount - historyIndex; + const isSynced = syncRemaining === 0; await Organization.update( { @@ -235,9 +235,13 @@ const syncOrganizationAudit = async (organization) => { return; } + const toBeProcessedIndex = historyIndex + 1; + // Organization not synced, sync it logger.info(' '); - logger.info(`Syncing ${organization.name} generation ${historyIndex}`); + logger.info( + `Syncing ${organization.name} generation ${toBeProcessedIndex}`, + ); logger.info( `${organization.name} is ${syncRemaining} DataLayer generations away from being fully synced.`, ); @@ -247,7 +251,7 @@ const syncOrganizationAudit = async (organization) => { } const root1 = _.get(rootHistory, `[${historyIndex}]`); - const root2 = _.get(rootHistory, `[${historyIndex + 1}]`); + const root2 = _.get(rootHistory, `[${toBeProcessedIndex}]`); logger.info(`ROOT 1 ${JSON.stringify(root1)}`); logger.info(`ROOT 2', ${JSON.stringify(root2)}`); @@ -299,7 +303,7 @@ const syncOrganizationAudit = async (organization) => { const updateTransaction = async (transaction, mirrorTransaction) => { logger.info( - `Syncing ${organization.name} generation ${historyIndex + 1}`, + `Syncing ${organization.name} generation ${toBeProcessedIndex}`, ); for (const diff of optimizedKvDiff) { const key = decodeHex(diff.key); @@ -313,7 +317,7 @@ const syncOrganizationAudit = async (organization) => { table: modelKey, change: decodeHex(diff.value), onchainConfirmationTimeStamp: root2.timestamp, - generation: historyIndex + 1, + generation: toBeProcessedIndex, comment: _.get( tryParseJSON( decodeHex(_.get(comment, '[0].value', encodeHex('{}'))), From dd4c289f33e789a9556d40478d5a03d34acf0828 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Mon, 12 Feb 2024 17:20:09 -0500 Subject: [PATCH 46/49] fix: sync remaining bug --- src/models/governance/governance.model.js | 5 ++--- src/tasks/sync-registries.js | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/models/governance/governance.model.js b/src/models/governance/governance.model.js index afc2a592..e70cabd8 100644 --- a/src/models/governance/governance.model.js +++ b/src/models/governance/governance.model.js @@ -126,9 +126,8 @@ class Governance extends Model { return; } - const governanceData = await datalayer.getSubscribedStoreData( - GOVERNANCE_BODY_ID, - ); + const governanceData = + await datalayer.getSubscribedStoreData(GOVERNANCE_BODY_ID); // Check if there is v1, v2, v3 ..... and if not, then we assume this is a legacy governance table that isnt versioned const shouldSyncLegacy = !Object.keys(governanceData).some((key) => diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index f077e7cb..2d1bcb6f 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -211,16 +211,16 @@ const syncOrganizationAudit = async (organization) => { currentGeneration = lastRootSaved; } - const historyIndex = currentGeneration.generation; + const lastProcessedIndex = currentGeneration.generation; - if (historyIndex > rootHistory.length) { + if (lastProcessedIndex > rootHistory.length) { logger.error( `Could not find root history for ${organization.name} with timestamp ${currentGeneration.timestamp}, something is wrong and the sync for this organization will be paused until this is resolved.`, ); } const rootHistoryZeroBasedCount = rootHistory.length - 1; - const syncRemaining = rootHistoryZeroBasedCount - historyIndex; + const syncRemaining = rootHistoryZeroBasedCount - lastProcessedIndex; const isSynced = syncRemaining === 0; await Organization.update( @@ -235,7 +235,7 @@ const syncOrganizationAudit = async (organization) => { return; } - const toBeProcessedIndex = historyIndex + 1; + const toBeProcessedIndex = lastProcessedIndex + 1; // Organization not synced, sync it logger.info(' '); @@ -250,7 +250,7 @@ const syncOrganizationAudit = async (organization) => { await new Promise((resolve) => setTimeout(resolve, 30000)); } - const root1 = _.get(rootHistory, `[${historyIndex}]`); + const root1 = _.get(rootHistory, `[${lastProcessedIndex}]`); const root2 = _.get(rootHistory, `[${toBeProcessedIndex}]`); logger.info(`ROOT 1 ${JSON.stringify(root1)}`); From 21167dff05f086326ceaf3b355c99049d7aa3448 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Tue, 13 Feb 2024 12:08:32 -0500 Subject: [PATCH 47/49] fix: regex validation vulnerability --- src/validations/projects.validations.js | 4 ++-- src/validations/units.validations.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/validations/projects.validations.js b/src/validations/projects.validations.js index 9d835c80..b3f8ee50 100644 --- a/src/validations/projects.validations.js +++ b/src/validations/projects.validations.js @@ -69,8 +69,8 @@ export const projectsGetQuerySchema = Joi.object({ warehouseProjectId: Joi.string(), xls: Joi.boolean(), projectIds: Joi.array().items(Joi.string()).single(), - order: Joi.string().regex(genericSortColumnRegex), - filter: Joi.string().regex(genericFilterRegex), + order: Joi.string().regex(genericSortColumnRegex).max(100).min(1), + filter: Joi.string().regex(genericFilterRegex).max(100).min(1), onlyMarketplaceProjects: Joi.boolean(), }) .when( diff --git a/src/validations/units.validations.js b/src/validations/units.validations.js index b3eeb321..31833090 100644 --- a/src/validations/units.validations.js +++ b/src/validations/units.validations.js @@ -62,13 +62,13 @@ export const unitsGetQuerySchema = Joi.object({ orgUid: Joi.string(), order: Joi.alternatives().try( Joi.string().valid('SERIALNUMBER', 'ASC', 'DESC'), - Joi.string().regex(genericSortColumnRegex), + Joi.string().regex(genericSortColumnRegex).min(1).max(100), ), xls: Joi.boolean(), marketplaceIdentifiers: Joi.array().items(Joi.string()).single(), hasMarketplaceIdentifier: Joi.boolean(), includeProjectInfoInSearch: Joi.boolean(), - filter: Joi.string().regex(genericFilterRegex), + filter: Joi.string().regex(genericFilterRegex).min(1).max(100), }) .when( Joi.object({ From 8528fb3d43d20de2b0f82df730506fa533ee86fa Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 15 Feb 2024 12:21:32 -0500 Subject: [PATCH 48/49] test: add logging to sync --- src/tasks/sync-registries.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index 2d1bcb6f..f017dda3 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -212,6 +212,7 @@ const syncOrganizationAudit = async (organization) => { } const lastProcessedIndex = currentGeneration.generation; + logger.debug(`1 Last processed index: ${lastProcessedIndex}`); if (lastProcessedIndex > rootHistory.length) { logger.error( @@ -232,10 +233,13 @@ const syncOrganizationAudit = async (organization) => { ); if (process.env.NODE_ENV !== 'test' && isSynced) { + logger.debug(`3 Last processed index: ${lastProcessedIndex}`); return; } const toBeProcessedIndex = lastProcessedIndex + 1; + logger.debug(`3 Last processed index: ${lastProcessedIndex}`); + logger.debug(`4 To be processed index: ${toBeProcessedIndex}`); // Organization not synced, sync it logger.info(' '); @@ -250,7 +254,9 @@ const syncOrganizationAudit = async (organization) => { await new Promise((resolve) => setTimeout(resolve, 30000)); } + logger.debug(`5 Last processed index: ${lastProcessedIndex}`); const root1 = _.get(rootHistory, `[${lastProcessedIndex}]`); + logger.debug(`6 To be processed index: ${toBeProcessedIndex}`); const root2 = _.get(rootHistory, `[${toBeProcessedIndex}]`); logger.info(`ROOT 1 ${JSON.stringify(root1)}`); @@ -263,6 +269,9 @@ const syncOrganizationAudit = async (organization) => { return; } + logger.debug(`7 Last processed index: ${lastProcessedIndex}`); + logger.debug(`8 To be processed index: ${toBeProcessedIndex}`); + const kvDiff = await datalayer.getRootDiff( organization.registryId, root1.root_hash, From 3f16e10673467d6a3eed821e2fb517f7f742970a Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Thu, 15 Feb 2024 13:04:55 -0500 Subject: [PATCH 49/49] test: add logging to sync --- src/tasks/sync-registries.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/tasks/sync-registries.js b/src/tasks/sync-registries.js index f017dda3..c67af761 100644 --- a/src/tasks/sync-registries.js +++ b/src/tasks/sync-registries.js @@ -143,9 +143,7 @@ const syncOrganizationAudit = async (organization) => { let afterCommitCallbacks = []; const homeOrg = await Organization.getHomeOrg(); - const rootHistory = ( - await datalayer.getRootHistory(organization.registryId) - ).sort((a, b) => a.timestamp - b.timestamp); + const rootHistory = await datalayer.getRootHistory(organization.registryId); if (!rootHistory.length) { logger.info(`No root history found for ${organization.name}`);