diff --git a/package-lock.json b/package-lock.json index 3d7228de..0e874555 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,8 @@ "version": "2.4.2", "license": "AGPL-3.0", "dependencies": { + "@debionetwork/nestjs-gcloud-secret-manager": "0.0.3", + "@debionetwork/nestjs-gcloud-storage": "0.0.2", "@debionetwork/polkadot-provider": "0.0.18", "@elastic/elasticsearch": "^7.14.0", "@nestjs-modules/mailer": "^1.8.1", @@ -39,9 +41,7 @@ "handlebars": "^4.7.7", "helmet": "^4.6.0", "jest-when": "^3.4.2", - "minio": "^7.1.3", "nestjs-ethers": "^0.3.1", - "nestjs-minio": "^2.1.17", "node-mocks-http": "^1.11.0", "nodemailer": "^6.6.3", "pg": "^8.6.0", @@ -1918,6 +1918,32 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@debionetwork/nestjs-gcloud-secret-manager": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@debionetwork/nestjs-gcloud-secret-manager/-/nestjs-gcloud-secret-manager-0.0.3.tgz", + "integrity": "sha512-biOSpzGSNCq2b/Ig5X34vQ9pPUBfwn+qgGIaANVWJ8hP8RS9Fx5P3h4HfkDi3qJByKFbGDYRoQAqDb8FHGFUgg==", + "dependencies": { + "@google-cloud/secret-manager": "^4.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.6", + "@nestjs/core": "^8.0.0", + "@nestjs/platform-express": "^8.0.0" + } + }, + "node_modules/@debionetwork/nestjs-gcloud-storage": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@debionetwork/nestjs-gcloud-storage/-/nestjs-gcloud-storage-0.0.2.tgz", + "integrity": "sha512-tA4yTj4aTiLRVLyCJEsX7uy9fvpoFzxS/yAsmq3ubuHmF3dByYBCIHA+Tu8eisQOLXwFAcbALp13+RLq9Kc6bA==", + "dependencies": { + "@google-cloud/storage": "^4.7.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.6", + "@nestjs/core": "^8.0.0", + "@nestjs/platform-express": "^8.0.0" + } + }, "node_modules/@debionetwork/polkadot-provider": { "version": "0.0.18", "resolved": "https://registry.npmjs.org/@debionetwork/polkadot-provider/-/polkadot-provider-0.0.18.tgz", @@ -2689,6 +2715,192 @@ "@ethersproject/strings": "^5.6.1" } }, + "node_modules/@google-cloud/common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz", + "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==", + "dependencies": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^6.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", + "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", + "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==", + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", + "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==", + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@google-cloud/secret-manager": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-4.0.0.tgz", + "integrity": "sha512-wHlMAldXuQ+D7P2A3HHn/2u6aAPH+S3h8G9sH+O6cQPKRgqt3clCN7k9jZy7lJsuS09LaXgi05CEupnbmtNDhw==", + "dependencies": { + "google-gax": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/storage": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz", + "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==", + "dependencies": { + "@google-cloud/common": "^2.1.1", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "compressible": "^2.0.12", + "concat-stream": "^2.0.0", + "date-and-time": "^0.14.2", + "duplexify": "^3.5.0", + "extend": "^3.0.2", + "gaxios": "^3.0.0", + "gcs-resumable-upload": "^2.2.4", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "onetime": "^5.1.0", + "p-limit": "^2.2.0", + "pumpify": "^2.0.0", + "readable-stream": "^3.4.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "through2": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.8.17", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.17.tgz", + "integrity": "sha512-DGuSbtMFbaRsyffMf+VEkVu8HkSXEUfO3UyGJNtqxW9ABdtTIA+2UXAJpwbJS+xfQxuwqLUeELmL6FuZkOqPxw==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.7.tgz", + "integrity": "sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/protobufjs": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@grpc/proto-loader/node_modules/protobufjs/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -3376,6 +3588,17 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v12.0.0" + } + }, "node_modules/@near-wallet-selector/core": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@near-wallet-selector/core/-/core-7.7.0.tgz", @@ -5112,6 +5335,60 @@ "node": ">=14.0.0" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@react-icons/all-files": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz", @@ -5494,6 +5771,15 @@ "@types/range-parser": "*" } }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -5553,17 +5839,46 @@ "@types/node": "*" } }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "node_modules/@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "node_modules/@types/multer": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", @@ -5638,6 +5953,15 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, "node_modules/@types/serve-static": { "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", @@ -6056,12 +6380,6 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -6072,6 +6390,17 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6128,7 +6457,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -6289,6 +6617,14 @@ "node": ">=8" } }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -6334,20 +6670,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -6632,6 +6954,14 @@ "url": "https://opencollective.com/bigjs" } }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -6675,13 +7005,10 @@ "ieee754": "^1.1.13" } }, - "node_modules/block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "dependencies": { - "readable-stream": "^3.4.0" - } + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { "version": "5.2.1", @@ -6764,11 +7091,6 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "node_modules/browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" - }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -6853,14 +7175,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -6932,18 +7246,12 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6994,6 +7302,17 @@ "resolved": "https://registry.npmjs.org/capability/-/capability-0.2.5.tgz", "integrity": "sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==" }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7385,11 +7704,36 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -7399,6 +7743,22 @@ "proto-list": "~1.2.1" } }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -7560,6 +7920,14 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, "node_modules/css-rules": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rules/-/css-rules-1.1.0.tgz", @@ -7645,6 +8013,11 @@ "node": ">=10" } }, + "node_modules/date-and-time": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz", + "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA==" + }, "node_modules/dayjs": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", @@ -7676,14 +8049,6 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -7711,22 +8076,6 @@ "clone": "^1.0.2" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -8022,14 +8371,58 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "engines": { "node": ">=10" } }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -8167,7 +8560,6 @@ "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==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -8197,6 +8589,11 @@ "node": ">=8.6" } }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, "node_modules/entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -8226,25 +8623,6 @@ "u3": "^0.1.1" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -8866,6 +9244,14 @@ "@ethersproject/wordlists": "5.6.1" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -9023,6 +9409,11 @@ "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -9090,26 +9481,10 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, - "node_modules/fast-xml-parser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz", - "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, "node_modules/fastq": { "version": "1.13.0", @@ -9204,14 +9579,6 @@ "node": ">=8" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -9297,14 +9664,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "7.2.11", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.11.tgz", @@ -9569,12 +9928,9 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -9582,6 +9938,82 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gaxios": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", + "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gcp-metadata": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", + "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "dependencies": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/gcp-metadata/node_modules/gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/gcs-resumable-upload": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz", + "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==", + "dependencies": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "gaxios": "^2.0.0", + "google-auth-library": "^5.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + }, + "bin": { + "gcs-upload": "build/src/cli.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/gcs-resumable-upload/node_modules/gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9599,18 +10031,13 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "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" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9744,145 +10171,657 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/google-auth-library": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", + "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==", "dependencies": { - "get-intrinsic": "^1.1.3" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.4.0", + "gtoken": "^4.1.0", + "jws": "^4.0.0", + "lru-cache": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/google-auth-library/node_modules/gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/google-auth-library/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "yallist": "^3.0.2" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/google-auth-library/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/google-gax": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.0.tgz", + "integrity": "sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==", + "dependencies": { + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.3", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + }, + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" + }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/google-gax/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "es-define-property": "^1.0.0" + "color-convert": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/google-gax/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==", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/google-gax/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "has-symbols": "^1.0.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hasown": { + "node_modules/google-gax/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "function-bind": "^1.1.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" + "node": ">=7.0.0" } }, - "node_modules/helmet": { + "node_modules/google-gax/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/google-gax/node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/google-gax/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/google-gax/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/google-gax/node_modules/espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/google-gax/node_modules/gaxios": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.0.tgz", + "integrity": "sha512-VD/yc5ln6XU8Ch1hyYY6kRMBE0Yc2np3fPyeJeYHhrPs1i8rgnsApPMWyrugkl7LLoSqpOJVBWlQIa87OAvt8Q==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/gcp-metadata": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", + "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/google-gax/node_modules/google-auth-library": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.0.tgz", + "integrity": "sha512-J/fNXEnqLgbr3kmeUshZCtHQia6ZiNbbrebVzpt/+LTeY6Ka9CtbQvloTjVGVO7nyYbs0KYeuIwgUC/t2Gp1Jw==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/google-p12-pem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.0.tgz", + "integrity": "sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/google-gax/node_modules/gtoken": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.0.tgz", + "integrity": "sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ==", + "dependencies": { + "gaxios": "^4.0.0", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/google-gax/node_modules/gtoken/node_modules/gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/google-gax/node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/google-gax/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/google-gax/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/google-gax/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax/node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/google-gax/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/google-gax/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/google-gax/node_modules/protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/google-gax/node_modules/protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" + } + }, + "node_modules/google-gax/node_modules/protobufjs-cli/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/google-gax/node_modules/retry-request": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.1.tgz", + "integrity": "sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-gax/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/google-gax/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/google-gax/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/google-gax/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/google-p12-pem": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz", + "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==", + "dependencies": { + "node-forge": "^0.10.0" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gtoken": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", + "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", + "dependencies": { + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^4.0.0", + "mime": "^2.2.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/gtoken/node_modules/gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "dependencies": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/helmet": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz", "integrity": "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==", @@ -10389,21 +11328,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -10442,17 +11366,6 @@ "node": ">=4" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -10522,20 +11435,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -10564,6 +11463,14 @@ "node": ">=0.12.0" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -10600,19 +11507,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, "node_modules/is-typedarray": { "version": "1.0.0", @@ -12501,6 +13399,61 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdoc/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -12575,6 +13528,14 @@ "node": ">=4" } }, + "node_modules/json-bigint": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", + "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12592,11 +13553,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" - }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -12714,6 +13670,33 @@ "node": ">= 6" } }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -12943,6 +13926,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -13058,6 +14046,11 @@ "node": ">=8" } }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13185,6 +14178,62 @@ "tmpl": "1.0.5" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/markdown-it/node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/mathjs": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz", @@ -13207,6 +14256,11 @@ "node": ">= 12" } }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -13343,51 +14397,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "node_modules/minio": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.1.3.tgz", - "integrity": "sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==", - "dependencies": { - "async": "^3.2.4", - "block-stream2": "^2.1.0", - "browser-or-node": "^2.1.1", - "buffer-crc32": "^0.2.13", - "fast-xml-parser": "^4.2.2", - "ipaddr.js": "^2.0.1", - "json-stream": "^1.0.0", - "lodash": "^4.17.21", - "mime-types": "^2.1.35", - "query-string": "^7.1.3", - "through2": "^4.0.2", - "web-encoding": "^1.1.5", - "xml": "^1.0.1", - "xml2js": "^0.5.0" - }, - "engines": { - "node": "^16 || ^18 || >=20" - } - }, - "node_modules/minio/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "node_modules/minio/node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/minio/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dependencies": { - "readable-stream": "3" - } - }, "node_modules/mjml": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.13.0.tgz", @@ -14198,18 +15207,6 @@ "node": "^12.22 || >=14.17 || >=16.4" } }, - "node_modules/nestjs-minio": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/nestjs-minio/-/nestjs-minio-2.1.17.tgz", - "integrity": "sha512-gaNTbr+Gf/yiaWervabrkpO+s3pHEtHYSP+mKkxZGxEjKcYYazLtlvy9fmQXS8XfCEdMQbu6RJIAvrYycaePAw==", - "dependencies": { - "minio": "^7.0.28" - }, - "peerDependencies": { - "@nestjs/common": ">7.0.0", - "@nestjs/core": ">7.0.0" - } - }, "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -14292,6 +15289,14 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/node-gyp-build": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", @@ -14974,14 +15979,6 @@ "node": ">=4" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postgres": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/postgres/-/postgres-1.0.2.tgz", @@ -15147,6 +16144,42 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" }, + "node_modules/proto3-json-serializer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.0.2.tgz", + "integrity": "sha512-wHxf8jYZ/LUP3M7XmULDKnbxBn+Bvk6SM+tDCPVTp9vraIzUi9hHsOBb1n2Y0VV0ukx4zBN/2vzMQYs4KWwRpg==", + "dependencies": { + "protobufjs": "^6.11.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -15321,12 +16354,32 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/pumpify/node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -15349,23 +16402,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "dependencies": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -15667,6 +16703,14 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dependencies": { + "lodash": "^4.17.21" + } + }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -15731,6 +16775,18 @@ "node": ">=0.12" } }, + "node_modules/retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -15805,11 +16861,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -15974,22 +17025,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-function-length": { - "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.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.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -16146,6 +17181,11 @@ "npm": ">= 3.0.0" } }, + "node_modules/snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=" + }, "node_modules/socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -16216,14 +17256,6 @@ "specificity": "bin/specificity" } }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "engines": { - "node": ">=6" - } - }, "node_modules/split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -16264,6 +17296,19 @@ "node": ">= 0.8" } }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -16272,14 +17317,6 @@ "node": ">=10.0.0" } }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -16370,10 +17407,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "node_modules/style-data": { "version": "2.0.0", @@ -16560,6 +17597,26 @@ "node": ">=6" } }, + "node_modules/teeny-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.3.tgz", + "integrity": "sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==", + "dependencies": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^7.0.0" + } + }, + "node_modules/teeny-request/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -16687,6 +17744,15 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -17531,6 +18597,11 @@ "node": ">=0.8.0" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "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", @@ -17571,6 +18642,17 @@ "node": ">=4" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -17623,18 +18705,6 @@ "node": ">=6.14.2" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17777,17 +18847,6 @@ "defaults": "^1.0.3" } }, - "node_modules/web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dependencies": { - "util": "^0.12.3" - }, - "optionalDependencies": { - "@zxing/text-encoding": "0.9.0" - } - }, "node_modules/web-resource-inliner": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-5.0.0.tgz", @@ -18033,24 +19092,6 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", - "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -18222,41 +19263,29 @@ } } }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, "node_modules/xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", @@ -19621,6 +20650,22 @@ } } }, + "@debionetwork/nestjs-gcloud-secret-manager": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@debionetwork/nestjs-gcloud-secret-manager/-/nestjs-gcloud-secret-manager-0.0.3.tgz", + "integrity": "sha512-biOSpzGSNCq2b/Ig5X34vQ9pPUBfwn+qgGIaANVWJ8hP8RS9Fx5P3h4HfkDi3qJByKFbGDYRoQAqDb8FHGFUgg==", + "requires": { + "@google-cloud/secret-manager": "^4.0.0" + } + }, + "@debionetwork/nestjs-gcloud-storage": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@debionetwork/nestjs-gcloud-storage/-/nestjs-gcloud-storage-0.0.2.tgz", + "integrity": "sha512-tA4yTj4aTiLRVLyCJEsX7uy9fvpoFzxS/yAsmq3ubuHmF3dByYBCIHA+Tu8eisQOLXwFAcbALp13+RLq9Kc6bA==", + "requires": { + "@google-cloud/storage": "^4.7.0" + } + }, "@debionetwork/polkadot-provider": { "version": "0.0.18", "resolved": "https://registry.npmjs.org/@debionetwork/polkadot-provider/-/polkadot-provider-0.0.18.tgz", @@ -20069,6 +21114,156 @@ "@ethersproject/strings": "^5.6.1" } }, + "@google-cloud/common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz", + "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==", + "requires": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^6.0.0" + } + }, + "@google-cloud/paginator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", + "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", + "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==" + }, + "@google-cloud/promisify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", + "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==" + }, + "@google-cloud/secret-manager": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/secret-manager/-/secret-manager-4.0.0.tgz", + "integrity": "sha512-wHlMAldXuQ+D7P2A3HHn/2u6aAPH+S3h8G9sH+O6cQPKRgqt3clCN7k9jZy7lJsuS09LaXgi05CEupnbmtNDhw==", + "requires": { + "google-gax": "^3.0.1" + } + }, + "@google-cloud/storage": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.2.tgz", + "integrity": "sha512-nlXYhJyC6ErFQX34tMLruknJ9fljN3JepgXEC9MZlQ64/2h9Ee8MJ7FCowdBnTiZ863IkbvctWtNZRrSxfyqSQ==", + "requires": { + "@google-cloud/common": "^2.1.1", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "compressible": "^2.0.12", + "concat-stream": "^2.0.0", + "date-and-time": "^0.14.2", + "duplexify": "^3.5.0", + "extend": "^3.0.2", + "gaxios": "^3.0.0", + "gcs-resumable-upload": "^2.2.4", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "onetime": "^5.1.0", + "p-limit": "^2.2.0", + "pumpify": "^2.0.0", + "readable-stream": "^3.4.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "through2": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "@grpc/grpc-js": { + "version": "1.8.17", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.17.tgz", + "integrity": "sha512-DGuSbtMFbaRsyffMf+VEkVu8HkSXEUfO3UyGJNtqxW9ABdtTIA+2UXAJpwbJS+xfQxuwqLUeELmL6FuZkOqPxw==", + "requires": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + } + }, + "@grpc/proto-loader": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.7.tgz", + "integrity": "sha512-1TIeXOi8TuSCQprPItwoMymZXxWT0CPxUhkrkeCUH+D8U7QDwQ6b7SUz2MaLuWM2llT+J/TVFLmQI5KtML3BhQ==", + "requires": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^17.7.2" + }, + "dependencies": { + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "protobufjs": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", + "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "dependencies": { + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + } + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -20586,6 +21781,14 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "@jsdoc/salty": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", + "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "requires": { + "lodash": "^4.17.21" + } + }, "@near-wallet-selector/core": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@near-wallet-selector/core/-/core-7.7.0.tgz", @@ -21793,6 +22996,60 @@ "websocket": "^1.0.34" } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "@react-icons/all-files": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz", @@ -22143,6 +23400,15 @@ "@types/range-parser": "*" } }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "requires": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -22202,17 +23468,46 @@ "@types/node": "*" } }, + "@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + }, "@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==" }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, "@types/multer": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz", @@ -22286,6 +23581,15 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "@types/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, "@types/serve-static": { "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", @@ -22615,12 +23919,6 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, "abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -22631,6 +23929,14 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -22672,7 +23978,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, "acorn-walk": { @@ -22789,6 +24094,11 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -22828,14 +24138,6 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, "axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", @@ -23044,6 +24346,11 @@ "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==" }, + "bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -23072,13 +24379,10 @@ } } }, - "block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "requires": { - "readable-stream": "^3.4.0" - } + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { "version": "5.2.1", @@ -23156,11 +24460,6 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" - }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", @@ -23212,11 +24511,6 @@ "ieee754": "^1.2.1" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" - }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -23272,15 +24566,12 @@ } }, "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, "callsites": { @@ -23312,6 +24603,14 @@ "resolved": "https://registry.npmjs.org/capability/-/capability-0.2.5.tgz", "integrity": "sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==" }, + "catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "requires": { + "lodash": "^4.17.15" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -23600,11 +24899,30 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, "config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -23614,6 +24932,19 @@ "proto-list": "~1.2.1" } }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, "consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -23740,6 +25071,11 @@ "which": "^2.0.1" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, "css-rules": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/css-rules/-/css-rules-1.1.0.tgz", @@ -23809,6 +25145,11 @@ "whatwg-url": "^8.0.0" } }, + "date-and-time": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.14.2.tgz", + "integrity": "sha512-EFTCh9zRSEpGPmJaexg7HTuzZHh6cnJj1ui7IGCFNXzd2QdpsNh05Db5TF3xzJm30YN+A8/6xHSuRcQqoc3kFA==" + }, "dayjs": { "version": "1.11.5", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", @@ -23834,11 +25175,6 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -23863,16 +25199,6 @@ "clone": "^1.0.2" } }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -24084,11 +25410,54 @@ "domhandler": "^5.0.1" } }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, "dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -24206,7 +25575,6 @@ "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==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -24230,6 +25598,11 @@ "ansi-colors": "^4.1.1" } }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" + }, "entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -24253,19 +25626,6 @@ "u3": "^0.1.1" } }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -24713,6 +26073,11 @@ "@ethersproject/wordlists": "5.6.1" } }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -24839,6 +26204,11 @@ } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -24900,13 +26270,10 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, - "fast-xml-parser": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz", - "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==", - "requires": { - "strnum": "^1.0.5" - } + "fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, "fastq": { "version": "1.13.0", @@ -24985,11 +26352,6 @@ "to-regex-range": "^5.0.1" } }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" - }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -25054,14 +26416,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, "fork-ts-checker-webpack-plugin": { "version": "7.2.11", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.11.tgz", @@ -25253,9 +26607,9 @@ } }, "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -25263,6 +26617,68 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gaxios": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.2.0.tgz", + "integrity": "sha512-+6WPeVzPvOshftpxJwRi2Ozez80tn/hdtOUag7+gajDHRJvAblKxTFSSMPtr2hmnLy7p0mvYz0rMXLBl8pSO7Q==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + }, + "gcp-metadata": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", + "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "requires": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + } + } + }, + "gcs-resumable-upload": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz", + "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==", + "requires": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "gaxios": "^2.0.0", + "google-auth-library": "^5.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + } + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -25274,15 +26690,13 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } }, "get-package-type": { @@ -25379,12 +26793,384 @@ "slash": "^3.0.0" } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "google-auth-library": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", + "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.4.0", + "gtoken": "^4.1.0", + "jws": "^4.0.0", + "lru-cache": "^5.0.0" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "google-gax": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.6.0.tgz", + "integrity": "sha512-2fyb61vWxUonHiArRNJQmE4tx5oY1ni8VPo08fzII409vDSCWG7apDX4qNOQ2GXXT82gLBn3d3P1Dydh7pWjyw==", + "requires": { + "@grpc/grpc-js": "~1.8.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "@types/rimraf": "^3.0.2", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.2.3", + "protobufjs-cli": "1.1.1", + "retry-request": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" + }, + "espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "gaxios": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.0.tgz", + "integrity": "sha512-VD/yc5ln6XU8Ch1hyYY6kRMBE0Yc2np3fPyeJeYHhrPs1i8rgnsApPMWyrugkl7LLoSqpOJVBWlQIa87OAvt8Q==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + }, + "gcp-metadata": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.0.tgz", + "integrity": "sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==", + "requires": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "google-auth-library": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.1.0.tgz", + "integrity": "sha512-J/fNXEnqLgbr3kmeUshZCtHQia6ZiNbbrebVzpt/+LTeY6Ka9CtbQvloTjVGVO7nyYbs0KYeuIwgUC/t2Gp1Jw==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.0.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + } + }, + "google-p12-pem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.0.tgz", + "integrity": "sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "gtoken": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.0.tgz", + "integrity": "sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ==", + "requires": { + "gaxios": "^4.0.0", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "dependencies": { + "gaxios": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", + "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + }, + "protobufjs-cli": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.1.1.tgz", + "integrity": "sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==", + "requires": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^4.0.0", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "retry-request": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.1.tgz", + "integrity": "sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig==", + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + } + }, + "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==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "google-p12-pem": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.5.tgz", + "integrity": "sha512-7RLkxwSsMsYh9wQ5Vb2zRtkAHvqPvfoMGag+nugl1noYO7gf0844Yr9TIFA5NEBMAeVt2Z+Imu7CQMp3oNatzQ==", "requires": { - "get-intrinsic": "^1.1.3" + "node-forge": "^0.10.0" } }, "graceful-fs": { @@ -25392,6 +27178,31 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "gtoken": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", + "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", + "requires": { + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^4.0.0", + "mime": "^2.2.0" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + } + } + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -25425,31 +27236,32 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "requires": { - "es-define-property": "^1.0.0" + "get-intrinsic": "^1.1.1" } }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.2" } }, + "hash-stream-validation": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.4.tgz", + "integrity": "sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==" + }, "hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -25459,14 +27271,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "requires": { - "function-bind": "^1.1.2" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -25842,15 +27646,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -25869,11 +27664,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -25918,14 +27708,6 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -25945,6 +27727,11 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, "is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -25969,13 +27756,10 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "requires": { - "which-typed-array": "^1.1.14" - } + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, "is-typedarray": { "version": "1.0.0", @@ -27357,6 +29141,48 @@ "esprima": "^4.0.0" } }, + "js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "requires": { + "xmlcreate": "^2.0.4" + } + }, + "jsdoc": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz", + "integrity": "sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==", + "requires": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -27413,6 +29239,14 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-bigint": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.1.tgz", + "integrity": "sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -27430,11 +29264,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg==" - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -27529,6 +29358,33 @@ } } }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "requires": { + "graceful-fs": "^4.1.9" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -27710,6 +29566,11 @@ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -27800,6 +29661,11 @@ } } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -27905,6 +29771,49 @@ "tmpl": "1.0.5" } }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "requires": { + "uc.micro": "^1.0.1" + } + } + } + }, + "markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "requires": {} + }, + "marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==" + }, "mathjs": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz", @@ -27921,6 +29830,11 @@ "typed-function": "^2.0.0" } }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -28024,47 +29938,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, - "minio": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.1.3.tgz", - "integrity": "sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==", - "requires": { - "async": "^3.2.4", - "block-stream2": "^2.1.0", - "browser-or-node": "^2.1.1", - "buffer-crc32": "^0.2.13", - "fast-xml-parser": "^4.2.2", - "ipaddr.js": "^2.0.1", - "json-stream": "^1.0.0", - "lodash": "^4.17.21", - "mime-types": "^2.1.35", - "query-string": "^7.1.3", - "through2": "^4.0.2", - "web-encoding": "^1.1.5", - "xml": "^1.0.1", - "xml2js": "^0.5.0" - }, - "dependencies": { - "async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - } - } - }, "mjml": { "version": "4.13.0", "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.13.0.tgz", @@ -28775,14 +30648,6 @@ "ethers": "^5.4.4" } }, - "nestjs-minio": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/nestjs-minio/-/nestjs-minio-2.1.17.tgz", - "integrity": "sha512-gaNTbr+Gf/yiaWervabrkpO+s3pHEtHYSP+mKkxZGxEjKcYYazLtlvy9fmQXS8XfCEdMQbu6RJIAvrYycaePAw==", - "requires": { - "minio": "^7.0.28" - } - }, "netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -28850,6 +30715,11 @@ } } }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, "node-gyp-build": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", @@ -29350,11 +31220,6 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, - "possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" - }, "postgres": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/postgres/-/postgres-1.0.2.tgz", @@ -29473,6 +31338,34 @@ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" }, + "proto3-json-serializer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.0.2.tgz", + "integrity": "sha512-wHxf8jYZ/LUP3M7XmULDKnbxBn+Bvk6SM+tDCPVTp9vraIzUi9hHsOBb1n2Y0VV0ukx4zBN/2vzMQYs4KWwRpg==", + "requires": { + "protobufjs": "^6.11.3" + } + }, + "protobufjs": { + "version": "6.11.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", + "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -29643,12 +31536,34 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + }, + "dependencies": { + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + } + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -29662,17 +31577,6 @@ "side-channel": "^1.0.4" } }, - "query-string": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", - "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", - "requires": { - "decode-uri-component": "^0.2.2", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -29901,6 +31805,14 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "requires": { + "lodash": "^4.17.21" + } + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -29944,6 +31856,15 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "retry-request": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.2.2.tgz", + "integrity": "sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==", + "requires": { + "debug": "^4.1.1", + "extend": "^3.0.2" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -29991,11 +31912,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -30132,19 +32048,6 @@ "send": "0.18.0" } }, - "set-function-length": { - "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==", - "requires": { - "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.1" - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -30260,6 +32163,11 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, + "snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=" + }, "socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", @@ -30318,11 +32226,6 @@ "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==" }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" - }, "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", @@ -30353,16 +32256,24 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, "streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -30420,10 +32331,10 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, - "strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=" }, "style-data": { "version": "2.0.0", @@ -30562,6 +32473,25 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "teeny-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.3.tgz", + "integrity": "sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==", + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^7.0.0" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + } + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -30652,6 +32582,15 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -31192,6 +33131,11 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.0.tgz", "integrity": "sha512-FEikl6bR30n0T3amyBh3LoiBdqHRy/f4H80+My34HOesOKyHfOsxAPAxOoqC0JUnC1amnO0IwkYC3sko51caSw==" }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, "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", @@ -31220,6 +33164,14 @@ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -31262,18 +33214,6 @@ "node-gyp-build": "^4.3.0" } }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -31385,15 +33325,6 @@ "defaults": "^1.0.3" } }, - "web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "requires": { - "@zxing/text-encoding": "0.9.0", - "util": "^0.12.3" - } - }, "web-resource-inliner": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-5.0.0.tgz", @@ -31581,18 +33512,6 @@ "isexe": "^2.0.0" } }, - "which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", - "requires": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" - } - }, "windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -31712,35 +33631,26 @@ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "requires": {} }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + }, "xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", diff --git a/package.json b/package.json index 7a052c55..33cf600d 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,8 @@ "test:e2e:watch": "jest --config ./test/e2e/jest-e2e-endpoint.json --watch" }, "dependencies": { + "@debionetwork/nestjs-gcloud-secret-manager": "0.0.3", + "@debionetwork/nestjs-gcloud-storage": "0.0.2", "@debionetwork/polkadot-provider": "0.0.18", "@elastic/elasticsearch": "^7.14.0", "@nestjs-modules/mailer": "^1.8.1", @@ -60,9 +62,7 @@ "handlebars": "^4.7.7", "helmet": "^4.6.0", "jest-when": "^3.4.2", - "minio": "^7.1.3", "nestjs-ethers": "^0.3.1", - "nestjs-minio": "^2.1.17", "node-mocks-http": "^1.11.0", "nodemailer": "^6.6.3", "pg": "^8.6.0", diff --git a/src/app.module.ts b/src/app.module.ts index 12810907..0cf10ec0 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -28,17 +28,22 @@ import { TransactionModule } from './endpoints/transaction/transaction.module'; import { SpecializationModule } from './endpoints/category/specialization/specialization.module'; import { NotificationEndpointModule } from './endpoints/notification-endpoint/notification-endpoint.module'; import { DnaCollectionModule } from './endpoints/category/dna-collection/dna-collection.module'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList, SecretKeyList } from './common/secrets'; import { ConversionModule } from './endpoints/conversion/conversion.module'; import { PinataModule } from './endpoints/pinata/pinata.module'; import { MyriadModule } from './endpoints/myriad/myriad.module'; import { SecondOpinionModule } from './endpoints/second-opinion/second-opinion.module'; -import { config } from './config'; require('dotenv').config(); // eslint-disable-line @Module({ imports: [ ScheduleModule.forRoot(), + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), TypeOrmModule.forRootAsync({ imports: [ ProcessEnvModule.setDefault({ @@ -47,15 +52,23 @@ require('dotenv').config(); // eslint-disable-line DB_POSTGRES: 'DB_POSTGRES', DB_LOCATIONS: 'DB_LOCATIONS', }), + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), ], - inject: [ProcessEnvProxy], - useFactory: async (processEnvProxy: ProcessEnvProxy) => { + inject: [ProcessEnvProxy, GCloudSecretManagerService], + useFactory: async ( + processEnvProxy: ProcessEnvProxy, + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { type: 'postgres', host: processEnvProxy.env.HOST_POSTGRES, port: 5432, - username: config.POSTGRES_USERNAME.toString(), - password: config.POSTGRES_PASSWORD.toString(), + username: gCloudSecretManagerService + .getSecret('POSTGRES_USERNAME') + .toString(), + password: gCloudSecretManagerService + .getSecret('POSTGRES_PASSWORD') + .toString(), database: processEnvProxy.env.DB_POSTGRES, entities: [LabRating, TransactionRequest], autoLoadEntities: true, @@ -71,15 +84,23 @@ require('dotenv').config(); // eslint-disable-line DB_POSTGRES: 'DB_POSTGRES', DB_LOCATIONS: 'DB_LOCATIONS', }), + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), ], - inject: [ProcessEnvProxy], - useFactory: async (processEnvProxy: ProcessEnvProxy) => { + inject: [ProcessEnvProxy, GCloudSecretManagerService], + useFactory: async ( + processEnvProxy: ProcessEnvProxy, + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { type: 'postgres', host: processEnvProxy.env.HOST_POSTGRES, port: 5432, - username: config.POSTGRES_USERNAME.toString(), - password: config.POSTGRES_PASSWORD.toString(), + username: gCloudSecretManagerService + .getSecret('POSTGRES_USERNAME') + .toString(), + password: gCloudSecretManagerService + .getSecret('POSTGRES_PASSWORD') + .toString(), database: processEnvProxy.env.DB_LOCATIONS, entities: [...LocationEntities], autoLoadEntities: true, diff --git a/src/common/modules/caches/index.ts b/src/common/modules/caches/index.ts index fed0f44f..0d416687 100644 --- a/src/common/modules/caches/index.ts +++ b/src/common/modules/caches/index.ts @@ -1,18 +1,23 @@ import { CacheModule, Module } from '@nestjs/common'; import { CachesService } from './caches.service'; import * as redisStore from 'cache-manager-redis-store'; -import { config } from '../../../config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../secrets'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST.toString(), - port: config.REDIS_PORT.toString(), - auth_pass: config.REDIS_PASSWORD.toString(), + host: gCloudSecretManagerService.getSecret('REDIS_HOST').toString(), + port: gCloudSecretManagerService.getSecret('REDIS_PORT').toString(), + auth_pass: gCloudSecretManagerService + .getSecret('REDIS_PASSWORD') + .toString(), }; }, }), diff --git a/src/common/modules/debio-conversion/debio-conversion.module.ts b/src/common/modules/debio-conversion/debio-conversion.module.ts index 0a08eb48..b925b9ac 100644 --- a/src/common/modules/debio-conversion/debio-conversion.module.ts +++ b/src/common/modules/debio-conversion/debio-conversion.module.ts @@ -1,18 +1,23 @@ import { DebioConversionService } from './debio-conversion.service'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { CacheModule, Module } from '@nestjs/common'; import * as redisStore from 'cache-manager-redis-store'; -import { config } from '../../../config'; +import { keyList } from '../../../common/secrets'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST.toString(), - port: config.REDIS_PORT.toString(), - auth_pass: config.REDIS_PASSWORD.toString(), + host: gCloudSecretManagerService.getSecret('REDIS_HOST').toString(), + port: gCloudSecretManagerService.getSecret('REDIS_PORT').toString(), + auth_pass: gCloudSecretManagerService + .getSecret('REDIS_PASSWORD') + .toString(), ttl: 2 * 60 * 60, }; }, diff --git a/src/common/modules/debio-conversion/debio-conversion.service.ts b/src/common/modules/debio-conversion/debio-conversion.service.ts index 3695720e..ded1645e 100644 --- a/src/common/modules/debio-conversion/debio-conversion.service.ts +++ b/src/common/modules/debio-conversion/debio-conversion.service.ts @@ -1,3 +1,5 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../secrets'; import axios from 'axios'; import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common'; import { Cache } from 'cache-manager'; @@ -8,11 +10,13 @@ import { estimateSwap, getExpectedOutputFromSwapTodos, } from '@ref-finance/ref-sdk'; -import { config } from '../../../config'; @Injectable() export class DebioConversionService { - constructor(@Inject(CACHE_MANAGER) private readonly cacheManager: Cache) {} + constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + @Inject(CACHE_MANAGER) private readonly cacheManager: Cache, + ) {} async getCacheExchange() { return this.cacheManager.get('exchange'); @@ -23,8 +27,10 @@ export class DebioConversionService { } async setCacheExchangeFromTo(from: string, to: string) { - const listApiKey: string[] = - config.COINMARKETCAP_API_KEY.toString().split(','); + const listApiKey: string[] = this.gCloudSecretManagerService + .getSecret('COINMARKETCAP_API_KEY') + .toString() + .split(','); const indexCurrentApiKey: number = await this.cacheManager.get( 'index_api_key', ); @@ -62,8 +68,10 @@ export class DebioConversionService { async setCacheExchange() { const sodaki = await this.getSodakiExchange(); - const listApiKey: string[] = - config.COINMARKETCAP_API_KEY.toString().split(','); + const listApiKey: string[] = this.gCloudSecretManagerService + .getSecret('COINMARKETCAP_API_KEY') + .toString() + .split(','); const indexCurrentApiKey: number = await this.cacheManager.get( 'index_api_key', ); @@ -141,7 +149,9 @@ export class DebioConversionService { async convertDaiToUsd(apiKey: string, daiAmount: number): Promise { const response = await axios.get( - `${config.COINMARKETCAP_HOST.toString()}/tools/price-conversion`, + `${this.gCloudSecretManagerService + .getSecret('COINMARKETCAP_HOST') + .toString()}/tools/price-conversion`, { headers: { 'X-CMC_PRO_API_KEY': apiKey, @@ -164,7 +174,9 @@ export class DebioConversionService { to: string, ): Promise { const response = await axios.get( - `${config.COINMARKETCAP_HOST.toString()}/tools/price-conversion`, + `${this.gCloudSecretManagerService + .getSecret('COINMARKETCAP_HOST') + .toString()}/tools/price-conversion`, { headers: { 'X-CMC_PRO_API_KEY': apiKey, diff --git a/src/common/modules/escrow/escrow.service.ts b/src/common/modules/escrow/escrow.service.ts index 42a748e4..7fc5f72d 100644 --- a/src/common/modules/escrow/escrow.service.ts +++ b/src/common/modules/escrow/escrow.service.ts @@ -4,7 +4,8 @@ import { EthereumService, SubstrateService } from '../..'; import { setOrderPaid } from '@debionetwork/polkadot-provider'; import { ethers } from 'ethers'; import AsyncLock from 'async-lock'; -import { config } from '../../../config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../secrets'; const lock = new AsyncLock(); const ESCROW_WALLET_LOCK_KEY = 'escrow-wallet-lock'; @@ -13,6 +14,7 @@ let nonce = 0; @Injectable() export class EscrowService { constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, private readonly substrateService: SubstrateService, private readonly ethereumService: EthereumService, ) {} @@ -22,7 +24,9 @@ export class EscrowService { async onModuleInit(): Promise { this.provider = await this.ethereumService.getEthersProvider(); this.escrowWallet = await new ethers.Wallet( - config.DEBIO_ESCROW_PRIVATE_KEY.toString(), + this.gCloudSecretManagerService + .getSecret('DEBIO_ESCROW_PRIVATE_KEY') + .toString(), this.provider, ); } @@ -134,7 +138,9 @@ export class EscrowService { const tokenAmount = ethers.utils.parseUnits(String(amount), 18); const tokenContract = this.ethereumService.getContract(); const wallet: WalletSigner = await this.ethereumService.createWallet( - config.DEBIO_ESCROW_PRIVATE_KEY.toString(), + this.gCloudSecretManagerService + .getSecret('DEBIO_ESCROW_PRIVATE_KEY') + .toString(), ); const tokenContractWithSigner = tokenContract.connect(wallet); const options = { diff --git a/src/common/modules/ethereum/ethereum.service.ts b/src/common/modules/ethereum/ethereum.service.ts index c563c076..c5b757e3 100644 --- a/src/common/modules/ethereum/ethereum.service.ts +++ b/src/common/modules/ethereum/ethereum.service.ts @@ -9,11 +9,13 @@ import ABI from './utils/ABI.json'; import escrowContract from './utils/Escrow.json'; import { ethers } from 'ethers'; import { CachesService } from '../caches'; -import { config } from '../../../config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../secrets'; @Injectable() export class EthereumService { constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, private readonly ethersContract: EthersContract, private readonly ethersSigner: EthersSigner, private readonly cachesService: CachesService, @@ -36,7 +38,7 @@ export class EthereumService { getEthersProvider(): ethers.providers.JsonRpcProvider { const provider = new ethers.providers.JsonRpcProvider( - config.WEB3_RPC_HTTPS.toString(), + this.gCloudSecretManagerService.getSecret('WEB3_RPC_HTTPS').toString(), ); return provider; } @@ -44,7 +46,9 @@ export class EthereumService { getContract(): SmartContract { try { const contract: SmartContract = this.ethersContract.create( - config.ESCROW_CONTRACT_ADDRESS.toString(), + this.gCloudSecretManagerService + .getSecret('ESCROW_CONTRACT_ADDRESS') + .toString(), ABI, ); @@ -58,7 +62,9 @@ export class EthereumService { try { const provider = this.getEthersProvider(); const contract = new ethers.Contract( - config.ESCROW_CONTRACT_ADDRESS.toString(), + this.gCloudSecretManagerService + .getSecret('ESCROW_CONTRACT_ADDRESS') + .toString(), escrowContract.abi, provider, ); diff --git a/src/common/modules/health-indicators/elasticsearch.health/index.ts b/src/common/modules/health-indicators/elasticsearch.health/index.ts index bd5f1b99..e111c360 100644 --- a/src/common/modules/health-indicators/elasticsearch.health/index.ts +++ b/src/common/modules/health-indicators/elasticsearch.health/index.ts @@ -1,20 +1,29 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { Module } from '@nestjs/common'; import { ElasticsearchModule } from '@nestjs/elasticsearch'; import { TerminusModule } from '@nestjs/terminus'; import { ElasticsearchHealthIndicator } from './elasticsearch.health.indicator'; -import { config } from '../../../../config'; +import { keyList } from '../../../secrets'; @Module({ imports: [ TerminusModule, ElasticsearchModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { - node: config.ELASTICSEARCH_NODE.toString(), + node: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_NODE') + .toString(), auth: { - username: config.ELASTICSEARCH_USERNAME.toString(), - password: config.ELASTICSEARCH_PASSWORD.toString(), + username: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_USERNAME') + .toString(), + password: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_PASSWORD') + .toString(), }, }; }, diff --git a/src/common/modules/mailer/mailer.manager.ts b/src/common/modules/mailer/mailer.manager.ts index e4ee85a9..c3d3bd7a 100644 --- a/src/common/modules/mailer/mailer.manager.ts +++ b/src/common/modules/mailer/mailer.manager.ts @@ -1,3 +1,4 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { MailerService } from '@nestjs-modules/mailer'; import { Injectable, Logger } from '@nestjs/common'; import { @@ -5,19 +6,27 @@ import { GeneticAnalystRegister, LabRegister, } from './models'; +import { keyList } from '../../secrets'; import { HealthProfessionalRegister } from './models/health-professional.model'; -import { config } from '../../../config'; @Injectable() export class MailerManager { private readonly _logger: Logger = new Logger(MailerManager.name); - constructor(private readonly mailerService: MailerService) {} + constructor( + private readonly mailerService: MailerService, + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + ) {} async sendCustomerStakingRequestServiceEmail( to: string | string[], context: CustomerStakingRequestService, ) { - const subject = `New Service Request - ${context.service_name} - ${context.city}, ${context.state}, ${context.country}`; + let subject = `New Service Request - ${context.service_name} - ${context.city}, ${context.state}, ${context.country}`; + if ( + this.gCloudSecretManagerService.getSecret('POSTGRES_HOST') == 'localhost' + ) { + subject = `Testing New Service Request Email`; + } this.mailerService.sendMail({ to: to, subject: subject, @@ -31,7 +40,9 @@ export class MailerManager { context: GeneticAnalystRegister, ) { let subject = `New Genetic Analyst Register – ${context.genetic_analyst_name}`; - if (config.POSTGRES_HOST == 'localhost') { + if ( + this.gCloudSecretManagerService.getSecret('POSTGRES_HOST') == 'localhost' + ) { subject = `Testing New Genetic Analyst Register Email`; } const files: any[] = []; @@ -67,7 +78,12 @@ export class MailerManager { } async sendLabRegistrationEmail(to: string | string[], context: LabRegister) { - const subject = `New Lab Register – ${context.lab_name} - ${context.city}, ${context.state}, ${context.country}`; + let subject = `New Lab Register – ${context.lab_name} - ${context.city}, ${context.state}, ${context.country}`; + if ( + this.gCloudSecretManagerService.getSecret('POSTGRES_HOST') == 'localhost' + ) { + subject = `Testing New Lab Register Email`; + } const files: any[] = []; context.certifications.forEach((val, idx) => { files.push({ @@ -112,7 +128,9 @@ export class MailerManager { context: HealthProfessionalRegister, ) { let subject = `New Health Professinal Register – ${context.health_professional_name}`; - if (config.POSTGRES_HOST == 'localhost') { + if ( + this.gCloudSecretManagerService.getSecret('POSTGRES_HOST') == 'localhost' + ) { subject = `Testing New Lab Register Email`; } const files: any[] = []; diff --git a/src/common/modules/mailer/mailer.module.ts b/src/common/modules/mailer/mailer.module.ts index 2c7bf739..90bce1d1 100644 --- a/src/common/modules/mailer/mailer.module.ts +++ b/src/common/modules/mailer/mailer.module.ts @@ -1,22 +1,27 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { MailerModule } from '@nestjs-modules/mailer'; import { HandlebarsAdapter } from '@nestjs-modules/mailer/dist/adapters/handlebars.adapter'; import { Module } from '@nestjs/common'; import { join } from 'path'; import { MailerManager } from './mailer.manager'; -import { config } from '../../../config'; +import { keyList } from '../../secrets'; @Module({ imports: [ MailerModule.forRootAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { transport: { host: 'smtp.gmail.com', secure: false, auth: { - user: config.EMAIL.toString(), - pass: config.PASS_EMAIL.toString(), + user: gCloudSecretManagerService.getSecret('EMAIL').toString(), + pass: gCloudSecretManagerService + .getSecret('PASS_EMAIL') + .toString(), }, }, template: { diff --git a/src/common/modules/substrate/substrate.service.ts b/src/common/modules/substrate/substrate.service.ts index 97e80610..b3f4e1ec 100644 --- a/src/common/modules/substrate/substrate.service.ts +++ b/src/common/modules/substrate/substrate.service.ts @@ -1,7 +1,8 @@ import { ApiPromise, Keyring, WsProvider } from '@polkadot/api'; import { Injectable, OnModuleInit, Logger } from '@nestjs/common'; import { waitReady } from '@polkadot/wasm-crypto'; -import { config } from '../../../config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../secrets'; @Injectable() export class SubstrateService implements OnModuleInit { @@ -11,6 +12,10 @@ export class SubstrateService implements OnModuleInit { private _listenStatus: boolean; private readonly _logger: Logger = new Logger(SubstrateService.name); + constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + ) {} + get api(): ApiPromise { return this._api; } @@ -20,13 +25,17 @@ export class SubstrateService implements OnModuleInit { } async onModuleInit() { - this._wsProvider = new WsProvider(config.SUBSTRATE_URL.toString()); + this._wsProvider = new WsProvider( + this.gCloudSecretManagerService.getSecret('SUBSTRATE_URL').toString(), + ); const keyring = new Keyring({ type: 'sr25519' }); await waitReady(); this._pair = await keyring.addFromUri( - config.ADMIN_SUBSTRATE_MNEMONIC.toString(), + this.gCloudSecretManagerService + .getSecret('ADMIN_SUBSTRATE_MNEMONIC') + .toString(), ); await this.startListen(); diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index f478f660..00000000 --- a/src/config.ts +++ /dev/null @@ -1,40 +0,0 @@ -import dotenv from 'dotenv'; -dotenv.config(); - -export const config = { - DEBIO_API_KEY: process.env.DEBIO_API_KEY ?? '', - RECAPTCHA_SECRET_KEY: process.env.RECAPTCHA_SECRET_KEY ?? '', - REDIS_HOST: process.env.HOST_REDIS ?? 'localhost', - REDIS_PORT: process.env.PORT_REDIS ?? '6379', - REDIS_PASSWORD: process.env.REDIS_PASSWORD ?? 'root', - COINMARKETCAP_API_KEY: process.env.API_KEY_COINMARKETCAP ?? '', - COINMARKETCAP_HOST: - process.env.COINMARKETCAP_HOST ?? 'https://pro-api.coinmarketcap.com/v2', - DEBIO_ESCROW_PRIVATE_KEY: process.env.DEBIO_ESCROW_PRIVATE_KEY ?? 'PRIVKEY', - WEB3_RPC_HTTPS: process.env.WEB3_RPC_HTTPS ?? '', - ESCROW_CONTRACT_ADDRESS: process.env.ESCROW_CONTRACT_ADDRESS ?? 'ADDR', - ELASTICSEARCH_NODE: process.env.ELASTICSEARCH_NODE ?? '', - ELASTICSEARCH_USERNAME: process.env.ELASTICSEARCH_USERNAME ?? '', - ELASTICSEARCH_PASSWORD: process.env.ELASTICSEARCH_PASSWORD ?? '', - POSTGRES_HOST: process.env.HOST_POSTGRES ?? 'localhost', - POSTGRES_USERNAME: process.env.USERNAME_POSTGRES ?? '', - POSTGRES_PASSWORD: process.env.PASSWORD_POSTGRES ?? '', - EMAIL: process.env.EMAIL ?? '', - PASS_EMAIL: process.env.PASS_EMAIL ?? '', - EMAILS: process.env.EMAILS ?? '', - SUBSTRATE_URL: process.env.SUBSTRATE_URL ?? 'URL', - ADMIN_SUBSTRATE_MNEMONIC: process.env.ADMIN_SUBSTRATE_MNEMONIC ?? '', - STORAGE_BASE_URI: process.env.STORAGE_BASE_URI ?? '', - MYRIAD_API_URL: process.env.MYRIAD_API_URL ?? '', - MYRIAD_ADMIN_USERNAME: process.env.MYRIAD_ADMIN_USERNAME ?? '', - MYRIAD_PHYSICAL_HEALTH_TIMELINE_ID: - process.env.PHYSICAL_HEALTH_EXPERIENCE_ID ?? '', - MYRIAD_MENTAL_HEALTH_TIMELINE_ID: - process.env.MENTAL_HEALTH_EXPERIENCE_ID ?? '', - PINATA_JWT: process.env.PINATA_SECRET_KEY ?? '', - BUCKET_NAME: process.env.BUCKET_NAME ?? '', - MINIO_ENDPOINT: process.env.MINIO_ENDPOINT ?? 'play.min.io', - MINIO_PORT: process.env.MINIO_PORT ?? 9000, - MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY ?? '', - MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY ?? '', -}; diff --git a/src/endpoints/bounty/bounty.controller.ts b/src/endpoints/bounty/bounty.controller.ts index 169e6245..e7686fc3 100644 --- a/src/endpoints/bounty/bounty.controller.ts +++ b/src/endpoints/bounty/bounty.controller.ts @@ -5,7 +5,6 @@ import { Post, Query, UseInterceptors, - Inject, } from '@nestjs/common'; import { ApiBody } from '@nestjs/swagger'; import { Repository } from 'typeorm'; @@ -14,11 +13,9 @@ import { DataStakingDto } from './dto/data-staking.dto'; import { DataStakingEvents } from './models/data-staking-events.entity'; import { DateTimeProxy } from '../../common'; import { DataTokenToDatasetMapping } from './models/data-token-to-dataset-mapping.entity'; +import { GCloudStorageService } from '@debionetwork/nestjs-gcloud-storage'; import { DataTokenToDatasetMappingDto } from './dto/data-token-to-dataset-mapping.dto'; import { SentryInterceptor } from '../../common'; -import { Client } from 'minio'; -import { MINIO_CONNECTION } from 'nestjs-minio'; -import { config } from '../../config'; @UseInterceptors(SentryInterceptor) @Controller('bounty') @@ -28,7 +25,7 @@ export class BountyController { private readonly dataStakingEventsRepository: Repository, @InjectRepository(DataTokenToDatasetMapping) private readonly dataTokenToDatasetMapping: Repository, - @Inject(MINIO_CONNECTION) private readonly cloudStorageService: Client, + private readonly cloudStorageService: GCloudStorageService, private readonly dateTimeProxy: DateTimeProxy, ) {} @@ -53,16 +50,13 @@ export class BountyController { const res: DataTokenToDatasetMappingDto[] = []; for (const x of mappings) { const URL_VALID_DURATION = 100000; - let url: string; - await this.cloudStorageService.presignedUrl( - 'GET', - config.BUCKET_NAME, - x.filename, - URL_VALID_DURATION, - (err, res) => { - url = res; - }, - ); + const [url] = await this.cloudStorageService.bucket + .file(x.filename) + .getSignedUrl({ + version: 'v4', + action: 'read', + expires: this.dateTimeProxy.nowAndAdd(URL_VALID_DURATION), + }); const dataTokenToDatasetMappingDto = new DataTokenToDatasetMappingDto(x); dataTokenToDatasetMappingDto.file_url = url; diff --git a/src/endpoints/bounty/bounty.module.ts b/src/endpoints/bounty/bounty.module.ts index 8cf4d1d7..0426bd45 100644 --- a/src/endpoints/bounty/bounty.module.ts +++ b/src/endpoints/bounty/bounty.module.ts @@ -4,17 +4,25 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { DataStakingEvents } from './models/data-staking-events.entity'; import { DateTimeModule } from '../../common'; import { DataTokenToDatasetMapping } from './models/data-token-to-dataset-mapping.entity'; -import { config } from '../../config'; -import { NestMinioModule } from 'nestjs-minio'; +import { GCloudStorageModule } from '@debionetwork/nestjs-gcloud-storage'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; @Module({ imports: [ - NestMinioModule.register({ - endPoint: 'play.min.io', - port: 9000, - useSSL: true, - accessKey: 'Q3AM3UQ867SPQQA43P2F', - secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG', + GCloudStorageModule.withConfigAsync({ + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => ({ + defaultBucketname: gCloudSecretManagerService + .getSecret('BUCKET_NAME') + .toString(), + storageBaseUri: gCloudSecretManagerService + .getSecret('STORAGE_BASE_URI') + .toString(), + predefinedAcl: 'private', + }), }), TypeOrmModule.forFeature([DataStakingEvents, DataTokenToDatasetMapping]), DateTimeModule, diff --git a/src/endpoints/cloud-storage/cloud-storage.controller.ts b/src/endpoints/cloud-storage/cloud-storage.controller.ts index 303470de..4adb5bd3 100644 --- a/src/endpoints/cloud-storage/cloud-storage.controller.ts +++ b/src/endpoints/cloud-storage/cloud-storage.controller.ts @@ -1,22 +1,14 @@ -import { - Controller, - Get, - Query, - UseInterceptors, - Inject, -} from '@nestjs/common'; +import { Controller, Get, Query, UseInterceptors } from '@nestjs/common'; +import { GCloudStorageService } from '@debionetwork/nestjs-gcloud-storage'; import { DateTimeProxy, SentryInterceptor } from '../../common'; import { ApiResponse } from '@nestjs/swagger'; -import { Client } from 'minio'; -import { MINIO_CONNECTION } from 'nestjs-minio'; -import { config } from '../../config'; @UseInterceptors(SentryInterceptor) @Controller('gcs') export class CloudStorageController { constructor( private readonly dateTime: DateTimeProxy, - @Inject(MINIO_CONNECTION) private readonly cloudStorageService: Client, + private readonly cloudStorageService: GCloudStorageService, ) {} @Get('/signed-url') @@ -34,32 +26,28 @@ export class CloudStorageController { @Query('action') action: 'read' | 'write', ) { const URL_VALID_DURATION = 100000; - let url: string; if (action === 'read') { - await this.cloudStorageService.presignedUrl( - 'GET', - filename, - filename, - URL_VALID_DURATION, - (err, res) => { - url = res; - }, - ); + const [url] = await this.cloudStorageService.bucket + .file(filename) + .getSignedUrl({ + version: 'v4', + action: action, + expires: this.dateTime.nowAndAdd(URL_VALID_DURATION), + }); return { signedUrl: url, }; } - await this.cloudStorageService.presignedUrl( - 'GET', - config.BUCKET_NAME, - filename, - URL_VALID_DURATION, - (err, res) => { - url = res; - }, - ); + const [url] = await this.cloudStorageService.bucket + .file(filename) + .getSignedUrl({ + version: 'v4', + action: action, + expires: this.dateTime.nowAndAdd(URL_VALID_DURATION), + contentType: 'application/x-www-form-urlencoded', + }); return { signedUrl: url, diff --git a/src/endpoints/cloud-storage/cloud-storage.module.ts b/src/endpoints/cloud-storage/cloud-storage.module.ts index 41f8af45..0accbf27 100644 --- a/src/endpoints/cloud-storage/cloud-storage.module.ts +++ b/src/endpoints/cloud-storage/cloud-storage.module.ts @@ -1,17 +1,27 @@ import { Module } from '@nestjs/common'; +import { GCloudStorageModule } from '@debionetwork/nestjs-gcloud-storage'; import { CloudStorageController } from './cloud-storage.controller'; import { DateTimeModule } from '../../common'; -import { config } from '../../config'; -import { NestMinioModule } from 'nestjs-minio'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; @Module({ imports: [ - NestMinioModule.register({ - endPoint: config.MINIO_ENDPOINT, - port: config.MINIO_PORT as number, - useSSL: true, - accessKey: config.MINIO_ACCESS_KEY, - secretKey: config.MINIO_SECRET_KEY, + GCloudStorageModule.withConfigAsync({ + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { + return { + defaultBucketname: gCloudSecretManagerService + .getSecret('BUCKET_NAME') + .toString(), + storageBaseUri: gCloudSecretManagerService + .getSecret('STORAGE_BASE_URI') + .toString(), + predefinedAcl: 'private', + }; + }, }), DateTimeModule, ], diff --git a/src/endpoints/conversion/conversion.module.ts b/src/endpoints/conversion/conversion.module.ts index 437da348..4efa9152 100644 --- a/src/endpoints/conversion/conversion.module.ts +++ b/src/endpoints/conversion/conversion.module.ts @@ -1,20 +1,23 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { HttpModule } from '@nestjs/axios'; import { CacheModule, Module } from '@nestjs/common'; import * as redisStore from 'cache-manager-redis-store'; import { DebioConversionModule } from 'src/common'; +import { keyList } from '../../common/secrets'; import { CacheController } from './conversion.controller'; -import { config } from '../../config'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST, - port: config.REDIS_PORT, - auth_pass: config.REDIS_PASSWORD, + host: gCloudSecretManagerService.getSecret('REDIS_HOST'), + port: gCloudSecretManagerService.getSecret('REDIS_PORT'), + auth_pass: gCloudSecretManagerService.getSecret('REDIS_PASSWORD'), ttl: 2 * 60 * 60, }; }, diff --git a/src/endpoints/email/email.controller.ts b/src/endpoints/email/email.controller.ts index c0adef8c..4636dde7 100644 --- a/src/endpoints/email/email.controller.ts +++ b/src/endpoints/email/email.controller.ts @@ -17,12 +17,14 @@ import { queryGeneticAnalystByAccountId, queryLabById, } from '@debionetwork/polkadot-provider'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; import { queryHealthProfessionalById } from '@common/modules/polkadot-provider/query/health-professional'; -import { config } from '../../config'; @Controller('email') export class EmailEndpointController { constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, private readonly mailerManager: MailerManager, private readonly substrateService: SubstrateService, private readonly emailNotificationService: EmailNotificationService, @@ -60,7 +62,10 @@ export class EmailEndpointController { ); const sentEMail = await this.mailerManager.sendLabRegistrationEmail( - config.EMAILS.toString().split(','), + this.gCloudSecretManagerService + .getSecret('EMAILS') + .toString() + .split(','), labRegister, ); @@ -114,7 +119,10 @@ export class EmailEndpointController { const sentEMail = await this.mailerManager.sendGeneticAnalystRegistrationEmail( - config.EMAILS.toString().split(','), + this.gCloudSecretManagerService + .getSecret('EMAILS') + .toString() + .split(','), geneticAnalystRegister, ); @@ -167,7 +175,10 @@ export class EmailEndpointController { ); const sentEMail = await this.mailerManager.sendHealthProfessionalEmail( - config.EMAILS.toString().split(','), + this.gCloudSecretManagerService + .getSecret('EMAILS') + .toString() + .split(','), healthProfessionalRegister, ); diff --git a/src/endpoints/myriad/myriad.module.ts b/src/endpoints/myriad/myriad.module.ts index 4064d31b..52a7f096 100644 --- a/src/endpoints/myriad/myriad.module.ts +++ b/src/endpoints/myriad/myriad.module.ts @@ -1,21 +1,24 @@ +import { keyList } from '@common/secrets'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { CacheModule, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { MyriadAccount } from './models/myriad-account.entity'; import { MyriadController } from './myriad.controller'; import { MyriadService } from './myriad.service'; import * as redisStore from 'cache-manager-redis-store'; -import { config } from '../../config'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST, - port: config.REDIS_PORT, - auth_pass: config.REDIS_PASSWORD, + host: gCloudSecretManagerService.getSecret('REDIS_HOST'), + port: gCloudSecretManagerService.getSecret('REDIS_PORT'), + auth_pass: gCloudSecretManagerService.getSecret('REDIS_PASSWORD'), ttl: 2 * 60 * 60, }; }, diff --git a/src/endpoints/myriad/myriad.service.ts b/src/endpoints/myriad/myriad.service.ts index eefedd6b..23e1b7e9 100644 --- a/src/endpoints/myriad/myriad.service.ts +++ b/src/endpoints/myriad/myriad.service.ts @@ -1,3 +1,5 @@ +import { keyList } from '@common/secrets'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { CACHE_MANAGER, Inject, @@ -21,7 +23,6 @@ import { UserMyriadInterface } from './interface/user'; import { UsernameCheckInterface } from './interface/username-check'; import { MyriadAccount } from './models/myriad-account.entity'; import { Cache } from 'cache-manager'; -import { config } from '../../config'; @Injectable() export class MyriadService { @@ -31,9 +32,12 @@ export class MyriadService { constructor( @InjectRepository(MyriadAccount) private readonly myriadAccountRepository: Repository, + private readonly gCloudSecretManagerService: GCloudSecretManagerService, @Inject(CACHE_MANAGER) private readonly cacheManager: Cache, ) { - this.myriadEndPoints = config.MYRIAD_API_URL.toString(); + this.myriadEndPoints = this.gCloudSecretManagerService + .getSecret('MYRIAD_API_URL') + .toString(); } public async checkUsernameMyriad(username: string): Promise { @@ -64,7 +68,9 @@ export class MyriadService { const user = await this.myriadAccountRepository.findOne({ select: ['username', 'jwt_token'], where: { - username: config.MYRIAD_ADMIN_USERNAME.toString(), + username: this.gCloudSecretManagerService + .getSecret('MYRIAD_ADMIN_USERNAME') + .toString(), }, }); @@ -514,6 +520,7 @@ export class MyriadService { rawText, selectedUserIds, jwt, + postType, timelineId, }: { createdBy: string; @@ -576,7 +583,9 @@ export class MyriadService { const user = await this.myriadAccountRepository.findOne({ select: ['username', 'jwt_token'], where: { - username: config.MYRIAD_ADMIN_USERNAME.toString(), + username: this.gCloudSecretManagerService + .getSecret('MYRIAD_ADMIN_USERNAME') + .toString(), }, }); @@ -607,9 +616,13 @@ export class MyriadService { private getExperienceIdAdmin(type: string): string { if (type === E_PostType.PHYSICAL_HEALTH) { - return config.MYRIAD_PHYSICAL_HEALTH_TIMELINE_ID.toString(); + return this.gCloudSecretManagerService + .getSecret('MYRIAD_PHYSICAL_HEALTH_TIMELINE_ID') + .toString(); } else if (type === E_PostType.MENTAL_HEALTH) { - return config.MYRIAD_MENTAL_HEALTH_TIMELINE_ID.toString(); + return this.gCloudSecretManagerService + .getSecret('MYRIAD_MENTAL_HEALTH_TIMELINE_ID') + .toString(); } else { throw new HttpException( { diff --git a/src/endpoints/pinata/pinata.service.ts b/src/endpoints/pinata/pinata.service.ts index 7dbd5664..9b3fd19d 100644 --- a/src/endpoints/pinata/pinata.service.ts +++ b/src/endpoints/pinata/pinata.service.ts @@ -1,11 +1,15 @@ import { Injectable } from '@nestjs/common'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; import axios from 'axios'; import { AxiosRequestConfig } from 'axios'; import FormData from 'form-data'; -import { config } from '../../config'; @Injectable() export class PinataService { + constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + ) {} async uploadToPinata(file: Express.Multer.File) { const options = { pinataMetadata: { @@ -26,17 +30,19 @@ export class PinataService { data.append('pinataMetadata', JSON.stringify(options.pinataMetadata)); data.append('pinataOptions', JSON.stringify(options.pinataOptions)); - const configuration: AxiosRequestConfig = { + const config: AxiosRequestConfig = { method: 'POST', url: 'https://api.pinata.cloud/pinning/pinFileToIPFS', headers: { - Authorization: config.PINATA_JWT.toString(), + Authorization: this.gCloudSecretManagerService + .getSecret('PINATA_JWT') + .toString(), ...data.getHeaders(), }, data: data, }; - const res = await axios(configuration); + const res = await axios(config); return res; } diff --git a/src/endpoints/recaptcha/recaptcha.controller.ts b/src/endpoints/recaptcha/recaptcha.controller.ts index 8d1f7527..188a54da 100644 --- a/src/endpoints/recaptcha/recaptcha.controller.ts +++ b/src/endpoints/recaptcha/recaptcha.controller.ts @@ -1,18 +1,25 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { Body, Controller, Post, Res, UseInterceptors } from '@nestjs/common'; import axios from 'axios'; import { Response } from 'express'; +import { keyList } from '../../common/secrets'; import { SentryInterceptor } from '../../common/interceptors'; -import { config } from '../../config'; @UseInterceptors(SentryInterceptor) @Controller('recaptcha') export class RecaptchaController { + constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + ) {} + @Post() async recaptcha(@Body() payload: any, @Res() response: Response) { const result = await axios.post( 'https://www.google.com/recaptcha/api/siteverify' + '?secret=' + - config.RECAPTCHA_SECRET_KEY.toString() + + this.gCloudSecretManagerService + .getSecret('RECAPTCHA_SECRET_KEY') + .toString() + '&response=' + payload.response, ); diff --git a/src/endpoints/second-opinion/second-opinion.module.ts b/src/endpoints/second-opinion/second-opinion.module.ts index 306308a4..820ad15a 100644 --- a/src/endpoints/second-opinion/second-opinion.module.ts +++ b/src/endpoints/second-opinion/second-opinion.module.ts @@ -1,3 +1,5 @@ +import { keyList } from '@common/secrets'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { CacheModule, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { HealthProfessionalRole } from './models/health-professional-role.entity'; @@ -5,18 +7,19 @@ import { HealthProfessionalSpecialization } from './models/health-professional-s import { SecondOpinionController } from './second-opinion.controller'; import { SecondOpinionService } from './second-opinion.service'; import * as redisStore from 'cache-manager-redis-store'; -import { config } from '../../config'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST, - port: config.REDIS_PORT, - auth_pass: config.REDIS_PASSWORD, + host: gCloudSecretManagerService.getSecret('REDIS_HOST'), + port: gCloudSecretManagerService.getSecret('REDIS_PORT'), + auth_pass: gCloudSecretManagerService.getSecret('REDIS_PASSWORD'), ttl: 2 * 60 * 60, }; }, diff --git a/src/endpoints/substrate-endpoint/substrate-endpoint.controller.ts b/src/endpoints/substrate-endpoint/substrate-endpoint.controller.ts index 316722b8..6a1f8d31 100644 --- a/src/endpoints/substrate-endpoint/substrate-endpoint.controller.ts +++ b/src/endpoints/substrate-endpoint/substrate-endpoint.controller.ts @@ -39,8 +39,9 @@ import { geneticAnalysisByTrakingIdResponse, geneticAnalysisOrderByGA, } from './models/response'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; import { MenstrualSubscriptionService } from './services/menstrual-subscription.service'; -import { config } from '../../config'; @Controller('substrate') @UseInterceptors(SentryInterceptor) @@ -50,6 +51,7 @@ export class SubstrateController { private readonly labService: LabService, private readonly serviceService: ServiceService, private readonly orderService: OrderService, + private readonly gCloudSecretManagerService: GCloudSecretManagerService, private readonly serviceRequestService: ServiceRequestService, private readonly geneticAnalysisService: GeneticAnalysisService, private readonly geneticAnalysisOrderService: GeneticAnalysisOrderService, @@ -403,7 +405,10 @@ export class SubstrateController { @Body() payload: WalletBindingDTO, @Res() response: Response, ) { - if (debioApiKey !== config.DEBIO_API_KEY.toString()) { + if ( + debioApiKey !== + this.gCloudSecretManagerService.getSecret('DEBIO_API_KEY').toString() + ) { return response.status(401).send('debio-api-key header is required'); } const { accountId, ethAddress } = payload; @@ -437,7 +442,10 @@ export class SubstrateController { ) { const { genetic_analysis_order_id } = geneticOrderId; - if (debioApiKey != config.DEBIO_API_KEY.toString()) { + if ( + debioApiKey != + this.gCloudSecretManagerService.getSecret('DEBIO_API_KEY').toString() + ) { return response.status(401).send('debio-api-key header is required'); } diff --git a/src/endpoints/substrate-endpoint/substrate-endpoint.module.ts b/src/endpoints/substrate-endpoint/substrate-endpoint.module.ts index aaffd03d..295e5695 100644 --- a/src/endpoints/substrate-endpoint/substrate-endpoint.module.ts +++ b/src/endpoints/substrate-endpoint/substrate-endpoint.module.ts @@ -14,22 +14,31 @@ import { ServiceRequestService } from './services/service-request.service'; import { LocationModule } from '../location/location.module'; import { GeneticAnalysisService } from './services/genetic-analysis.service'; import { GeneticAnalysisOrderService } from './services/genetic-analysis-order.service'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../common/secrets'; import { MenstrualCalendarService } from './services/menstrual-calendar.service'; import { MenstrualSubscriptionService } from './services/menstrual-subscription.service'; -import { config } from '../../config'; @Module({ imports: [ LocationModule, DebioConversionModule, ElasticsearchModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { - node: config.ELASTICSEARCH_NODE.toString(), + node: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_NODE') + .toString(), auth: { - username: config.ELASTICSEARCH_USERNAME.toString(), - password: config.ELASTICSEARCH_PASSWORD.toString(), + username: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_USERNAME') + .toString(), + password: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_PASSWORD') + .toString(), }, }; }, diff --git a/src/endpoints/transaction/transaction.module.ts b/src/endpoints/transaction/transaction.module.ts index ca8ba1ec..a29bf408 100644 --- a/src/endpoints/transaction/transaction.module.ts +++ b/src/endpoints/transaction/transaction.module.ts @@ -1,21 +1,30 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { Module } from '@nestjs/common'; import { ElasticsearchModule } from '@nestjs/elasticsearch'; +import { keyList } from '../../common/secrets'; import { TransactionLoggingModule } from '../../common'; import { TransactionController } from './transaction.controller'; import { TransactionService } from './transaction.service'; -import { config } from '../../config'; @Module({ imports: [ TransactionLoggingModule, ElasticsearchModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { - node: config.ELASTICSEARCH_NODE.toString(), + node: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_NODE') + .toString(), auth: { - username: config.ELASTICSEARCH_USERNAME.toString(), - password: config.ELASTICSEARCH_PASSWORD.toString(), + username: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_USERNAME') + .toString(), + password: gCloudSecretManagerService + .getSecret('ELASTICSEARCH_PASSWORD') + .toString(), }, }; }, diff --git a/src/endpoints/verification/verification.controller.ts b/src/endpoints/verification/verification.controller.ts index 31b96dc1..50fbe5dc 100644 --- a/src/endpoints/verification/verification.controller.ts +++ b/src/endpoints/verification/verification.controller.ts @@ -1,3 +1,4 @@ +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { Body, Controller, @@ -10,16 +11,19 @@ import { } from '@nestjs/common'; import { ApiBody, ApiOperation, ApiQuery } from '@nestjs/swagger'; import { Response } from 'express'; +import { keyList } from '../../common/secrets'; import { SentryInterceptor } from '../../common'; import { VerificationService } from './verification.service'; import { VerificationStatus } from '@debionetwork/polkadot-provider/lib/primitives'; import { HealthProfessionalRegisterDTO } from './dto/health-professional.dto'; -import { config } from '../../config'; @UseInterceptors(SentryInterceptor) @Controller('verification') export class VerificationController { - constructor(private readonly verificationService: VerificationService) {} + constructor( + private readonly gCloudSecretManagerService: GCloudSecretManagerService, + private readonly verificationService: VerificationService, + ) {} @Post('/lab') @ApiQuery({ name: 'account_id' }) @@ -35,7 +39,10 @@ export class VerificationController { @Query('verification_status') verification_status: string, ) { try { - if (debioApiKey != config.DEBIO_API_KEY.toString()) { + if ( + debioApiKey != + this.gCloudSecretManagerService.getSecret('DEBIO_API_KEY').toString() + ) { return response.status(401).send('debio-api-key header is required'); } await this.verificationService.verificationLab( @@ -68,7 +75,10 @@ export class VerificationController { @Query('verification_status') verification_status: string, ) { try { - if (debioApiKey != config.DEBIO_API_KEY.toString()) { + if ( + debioApiKey != + this.gCloudSecretManagerService.getSecret('DEBIO_API_KEY').toString() + ) { return response.status(401).send('debio-api-key header is required'); } await this.verificationService.verificationGeneticAnalyst( @@ -92,7 +102,10 @@ export class VerificationController { @Res() response: Response, @Body() data: HealthProfessionalRegisterDTO, ) { - if (debioApiKey != config.DEBIO_API_KEY.toString()) { + if ( + debioApiKey != + this.gCloudSecretManagerService.getSecret('DEBIO_API_KEY').toString() + ) { throw new HttpException( { status: 401, diff --git a/src/endpoints/verification/verification.module.ts b/src/endpoints/verification/verification.module.ts index d92c9cc2..538c52a4 100644 --- a/src/endpoints/verification/verification.module.ts +++ b/src/endpoints/verification/verification.module.ts @@ -7,19 +7,22 @@ import { VerificationService } from './verification.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { MyriadAccount } from '@endpoints/myriad/models/myriad-account.entity'; import * as redisStore from 'cache-manager-redis-store'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '@common/secrets'; import { MyriadModule } from '@endpoints/myriad/myriad.module'; -import { config } from '../../config'; @Module({ imports: [ CacheModule.registerAsync({ - inject: [], - useFactory: async () => { + inject: [GCloudSecretManagerService], + useFactory: async ( + gCloudSecretManagerService: GCloudSecretManagerService, + ) => { return { store: redisStore, - host: config.REDIS_HOST, - port: config.REDIS_PORT, - auth_pass: config.REDIS_PASSWORD, + host: gCloudSecretManagerService.getSecret('REDIS_HOST'), + port: gCloudSecretManagerService.getSecret('REDIS_PORT'), + auth_pass: gCloudSecretManagerService.getSecret('REDIS_PASSWORD'), ttl: 2 * 60 * 60, }; }, diff --git a/test/e2e/endpoints/bounty.spec.ts b/test/e2e/endpoints/bounty.spec.ts index 7a4abfc9..eb9afe70 100644 --- a/test/e2e/endpoints/bounty.spec.ts +++ b/test/e2e/endpoints/bounty.spec.ts @@ -10,6 +10,11 @@ import { dummyCredentials } from '../config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DataStakingDto } from '../../../src/endpoints/bounty/dto/data-staking.dto'; import { DataTokenToDatasetMappingDto } from '../../../src/endpoints/bounty/dto/data-token-to-dataset-mapping.dto'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { SecretKeyList } from '../../../src/common/secrets'; require('dotenv').config(); // eslint-disable-line @@ -23,9 +28,27 @@ describe('Bounty Controller (e2e)', () => { filename: 'FILE', }; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['BUCKET_NAME', process.env.BUCKET_NAME], + ['STORAGE_BASE_URI', process.env.STORAGE_BASE_URI], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), BountyModule, DateTimeModule, TypeOrmModule.forRoot({ @@ -35,7 +58,10 @@ describe('Bounty Controller (e2e)', () => { autoLoadEntities: true, }), ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); app = module.createNestApplication(); server = app.getHttpServer(); diff --git a/test/e2e/endpoints/cloud-storage.spec.ts b/test/e2e/endpoints/cloud-storage.spec.ts index a27cbfc6..66ae6b27 100644 --- a/test/e2e/endpoints/cloud-storage.spec.ts +++ b/test/e2e/endpoints/cloud-storage.spec.ts @@ -3,7 +3,12 @@ import { INestApplication } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; import { Server } from 'http'; import { CloudStorageModule } from '../../../src/endpoints/cloud-storage/cloud-storage.module'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { SecretKeyList } from '../../../src/common/secrets'; require('dotenv').config(); // eslint-disable-line @@ -11,10 +16,33 @@ describe('Cloud Controller (e2e)', () => { let server: Server; let app: INestApplication; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['BUCKET_NAME', process.env.BUCKET_NAME], + ['STORAGE_BASE_URI', process.env.STORAGE_BASE_URI], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ - imports: [CloudStorageModule], - }).compile(); + imports: [ + CloudStorageModule, + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), + ], + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); await cryptoWaitReady(); app = module.createNestApplication(); diff --git a/test/e2e/endpoints/email.spec.ts b/test/e2e/endpoints/email.spec.ts index 69bfefc6..e90186a5 100644 --- a/test/e2e/endpoints/email.spec.ts +++ b/test/e2e/endpoints/email.spec.ts @@ -13,6 +13,11 @@ import request from 'supertest'; import { TypeOrmModule } from '@nestjs/typeorm'; import { dummyCredentials } from '../config'; import { EmailEndpointModule } from '../../../src/endpoints/email/email.module'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { SecretKeyList } from '../../../src/common/secrets'; require('dotenv').config(); // eslint-disable-line @@ -22,6 +27,30 @@ describe('Email Controller (e2e)', () => { let substrateService: SubstrateService; let mailerManager: MailerManager; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ELASTICSEARCH_NODE', process.env.ELASTICSEARCH_NODE], + ['ELASTICSEARCH_USERNAME', process.env.ELASTICSEARCH_USERNAME], + ['ELASTICSEARCH_PASSWORD', process.env.ELASTICSEARCH_PASSWORD], + ['ADMIN_SUBSTRATE_MNEMONIC', process.env.ADMIN_SUBSTRATE_MNEMONIC], + ['SUBSTRATE_URL', process.env.SUBSTRATE_URL], + ['EMAIL', process.env.EMAIL], + ['EMAILS', process.env.EMAILS], + ['PASS_EMAIL', process.env.PASS_EMAIL], + ['POSTGRES_HOST', 'localhost'], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + global.console = { ...console, log: jest.fn(), @@ -34,6 +63,7 @@ describe('Email Controller (e2e)', () => { beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), TypeOrmModule.forRoot({ name: 'default', ...dummyCredentials, @@ -46,7 +76,10 @@ describe('Email Controller (e2e)', () => { EmailNotificationModule, EmailEndpointModule, ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); substrateService = module.get(SubstrateService); mailerManager = module.get(MailerManager); diff --git a/test/e2e/endpoints/health.spec.ts b/test/e2e/endpoints/health.spec.ts index 6392b99b..5b96408b 100644 --- a/test/e2e/endpoints/health.spec.ts +++ b/test/e2e/endpoints/health.spec.ts @@ -14,12 +14,39 @@ import { LocationEntities } from '../../../src/endpoints/location/models'; import { LabRating } from '../../../src/endpoints/rating/models/rating.entity'; import { TransactionRequest } from '../../../src/common/modules/transaction-logging/models/transaction-request.entity'; import { SubstrateService } from '../../../src/common/modules/substrate/substrate.service'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { SecretKeyList } from '../../../src/common/secrets'; describe('Health Controller (e2e)', () => { let server: Server; let app: INestApplication; let api: SubstrateService; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ELASTICSEARCH_NODE', process.env.ELASTICSEARCH_NODE], + ['ELASTICSEARCH_USERNAME', process.env.ELASTICSEARCH_USERNAME], + ['ELASTICSEARCH_PASSWORD', process.env.ELASTICSEARCH_PASSWORD], + ['ADMIN_SUBSTRATE_MNEMONIC', process.env.ADMIN_SUBSTRATE_MNEMONIC], + ['SUBSTRATE_URL', process.env.SUBSTRATE_URL], + ['EMAIL', process.env.EMAIL], + ['PASS_EMAIL', process.env.PASS_EMAIL], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + global.console = { ...console, log: jest.fn(), @@ -32,6 +59,7 @@ describe('Health Controller (e2e)', () => { beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), TypeOrmModule.forRoot({ name: 'default', ...dummyCredentials, @@ -56,7 +84,10 @@ describe('Health Controller (e2e)', () => { SubstrateHealthModule, HealthModule, ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); api = module.get(SubstrateService); app = module.createNestApplication(); diff --git a/test/e2e/endpoints/recaptcha.spec.ts b/test/e2e/endpoints/recaptcha.spec.ts index b44479e3..221ec5e9 100644 --- a/test/e2e/endpoints/recaptcha.spec.ts +++ b/test/e2e/endpoints/recaptcha.spec.ts @@ -6,6 +6,7 @@ import { Response } from 'express'; import { INestApplication } from '@nestjs/common'; import { TestingModule, Test } from '@nestjs/testing'; import { RecaptchaController } from '../../../src/endpoints/recaptcha/recaptcha.controller'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; describe('Recaptcha Controller (e2e)', () => { const axiosMock = new MockAdapter(axios); @@ -13,11 +14,31 @@ describe('Recaptcha Controller (e2e)', () => { let app: INestApplication; const RECAPTCHA_SECRET_KEY = 'KEY'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['RECAPTCHA_SECRET_KEY', RECAPTCHA_SECRET_KEY], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [RecaptchaController], - providers: [], + providers: [ + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, + ], }).compile(); axiosMock.reset(); diff --git a/test/e2e/endpoints/substrate-endpoint.spec.ts b/test/e2e/endpoints/substrate-endpoint.spec.ts index 54492fc8..19f3e422 100644 --- a/test/e2e/endpoints/substrate-endpoint.spec.ts +++ b/test/e2e/endpoints/substrate-endpoint.spec.ts @@ -28,6 +28,11 @@ import { } from '@debionetwork/polkadot-provider'; import { GeneticAnalysisOrderPaidDto } from '../../../src/endpoints/substrate-endpoint/dto/genetic-analysis-order-paid.dto'; import { NotificationEndpointModule } from '../../../src/endpoints/notification-endpoint/notification-endpoint.module'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { SecretKeyList } from '../../../src/common/secrets'; require('dotenv').config(); // eslint-disable-line describe('Substrate Endpoint Controller (e2e)', () => { @@ -46,9 +51,34 @@ describe('Substrate Endpoint Controller (e2e)', () => { error: jest.fn(), }; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ELASTICSEARCH_NODE', process.env.ELASTICSEARCH_NODE], + ['ELASTICSEARCH_USERNAME', process.env.ELASTICSEARCH_USERNAME], + ['ELASTICSEARCH_PASSWORD', process.env.ELASTICSEARCH_PASSWORD], + ['ADMIN_SUBSTRATE_MNEMONIC', process.env.ADMIN_SUBSTRATE_MNEMONIC], + ['DEBIO_API_KEY', process.env.DEBIO_API_KEY], + ['SUBSTRATE_URL', process.env.SUBSTRATE_URL], + ['SODAKI_HOST', process.env.SODAKI_HOST], + ['COINMARKETCAP_HOST', process.env.COINMARKETCAP_HOST], + ['API_KEY_COINMARKETCAP', process.env.API_KEY_COINMARKETCAP], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), SubstrateEndpointModule, TypeOrmModule.forRoot({ ...dummyCredentials, @@ -70,7 +100,10 @@ describe('Substrate Endpoint Controller (e2e)', () => { DateTimeModule, NotificationEndpointModule, ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); app = module.createNestApplication(); server = app.getHttpServer(); diff --git a/test/e2e/endpoints/transaction.spec.ts b/test/e2e/endpoints/transaction.spec.ts index a41da93b..a4d58aaf 100644 --- a/test/e2e/endpoints/transaction.spec.ts +++ b/test/e2e/endpoints/transaction.spec.ts @@ -8,6 +8,11 @@ import { TransactionHashDto } from '../../../src/endpoints/transaction/dto/trans import { TypeOrmModule } from '@nestjs/typeorm'; import { TransactionRequest } from '../../../src/common/modules/transaction-logging/models/transaction-request.entity'; import { dummyCredentials } from '../config'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { SecretKeyList } from '../../../src/common/secrets'; describe('Transaction Controller (e2e)', () => { let server: Server; @@ -25,9 +30,30 @@ describe('Transaction Controller (e2e)', () => { order_id: '5FjqD9WgAS3DvxuZYNT7LX8jpPca3yfQXMWMtkmvN8kvFaSs', }; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ELASTICSEARCH_NODE', process.env.ELASTICSEARCH_NODE], + ['ELASTICSEARCH_USERNAME', process.env.ELASTICSEARCH_USERNAME], + ['ELASTICSEARCH_PASSWORD', process.env.ELASTICSEARCH_PASSWORD], + ['ADMIN_SUBSTRATE_MNEMONIC', process.env.ADMIN_SUBSTRATE_MNEMONIC], + ['DEBIO_API_KEY', process.env.DEBIO_API_KEY], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), TransactionLoggingModule, TransactionModule, TypeOrmModule.forRoot({ @@ -37,7 +63,10 @@ describe('Transaction Controller (e2e)', () => { autoLoadEntities: true, }), ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); app = module.createNestApplication(); server = app.getHttpServer(); diff --git a/test/e2e/endpoints/verification.spec.ts b/test/e2e/endpoints/verification.spec.ts index db799042..ae0406d8 100644 --- a/test/e2e/endpoints/verification.spec.ts +++ b/test/e2e/endpoints/verification.spec.ts @@ -12,16 +12,42 @@ import { VerificationModule } from '../../../src/endpoints/verification/verifica import { TypeOrmModule } from '@nestjs/typeorm'; import { TransactionRequest } from '../../../src/common/modules/transaction-logging/models/transaction-request.entity'; import { dummyCredentials } from '../config'; +import { + GCloudSecretManagerModule, + GCloudSecretManagerService, +} from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList, SecretKeyList } from '../../../src/common/secrets'; import { MyriadAccount } from '../../../src/endpoints/myriad/models/myriad-account.entity'; -import { config } from '../../../src/config'; describe('Verification Controller (e2e)', () => { let server: Server; let app: INestApplication; let api: SubstrateService; + let gcloudSecretManagerService: GCloudSecretManagerService; const apiKey = 'DEBIO_API_KEY'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ELASTICSEARCH_NODE', process.env.ELASTICSEARCH_NODE], + ['ELASTICSEARCH_USERNAME', process.env.ELASTICSEARCH_USERNAME], + ['ELASTICSEARCH_PASSWORD', process.env.ELASTICSEARCH_PASSWORD], + ['ADMIN_SUBSTRATE_MNEMONIC', process.env.ADMIN_SUBSTRATE_MNEMONIC], + ['DEBIO_API_KEY', apiKey], + ['SUBSTRATE_URL', process.env.SUBSTRATE_URL], + ['REDIS_HOST', process.env.HOST_REDIS], + ['REDIS_PORT', process.env.PORT_REDIS], + ['REDIS_PASSWORD', process.env.REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + global.console = { ...console, log: jest.fn(), @@ -34,6 +60,7 @@ describe('Verification Controller (e2e)', () => { beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ imports: [ + GCloudSecretManagerModule.withConfig(process.env.PARENT, SecretKeyList), TypeOrmModule.forRoot({ ...dummyCredentials, database: 'db_postgres', @@ -45,9 +72,13 @@ describe('Verification Controller (e2e)', () => { TransactionLoggingModule, DateTimeModule, ], - }).compile(); + }) + .overrideProvider(GCloudSecretManagerService) + .useClass(GoogleSecretManagerServiceMock) + .compile(); api = module.get(SubstrateService); + gcloudSecretManagerService = module.get(GCloudSecretManagerService); app = module.createNestApplication(); server = app.getHttpServer(); @@ -70,7 +101,10 @@ describe('Verification Controller (e2e)', () => { .post( `/verification/lab?account_id=${ACCOUNT_ID}&verification_status=${VERIFICATION_STATUS}`, ) - .set('debio-api-key', config.DEBIO_API_KEY.toString()) + .set( + 'debio-api-key', + gcloudSecretManagerService.getSecret('DEBIO_API_KEY').toString(), + ) .send(); // Assert @@ -90,7 +124,10 @@ describe('Verification Controller (e2e)', () => { .post( `/verification/genetic-analysts?account_id=${ACCOUNT_ID}&verification_status=${VERIFICATION_STATUS}`, ) - .set('debio-api-key', config.DEBIO_API_KEY.toString()) + .set( + 'debio-api-key', + gcloudSecretManagerService.getSecret('DEBIO_API_KEY').toString(), + ) .send(); // Assert diff --git a/test/unit/common/modules/debio-conversion/debio-conversion.service.spec.ts b/test/unit/common/modules/debio-conversion/debio-conversion.service.spec.ts index 3c893863..3e140573 100644 --- a/test/unit/common/modules/debio-conversion/debio-conversion.service.spec.ts +++ b/test/unit/common/modules/debio-conversion/debio-conversion.service.spec.ts @@ -2,10 +2,10 @@ import { Test, TestingModule } from '@nestjs/testing'; import { DebioConversionService } from '../../../../../src/common'; import axios from 'axios'; import MockAdapter from 'axios-mock-adapter'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; import { CACHE_MANAGER } from '@nestjs/common'; import { Cache } from 'cache-manager'; import { when } from 'jest-when'; -import { config } from '../../../../../src/config'; jest.mock('axios'); describe('Debio Conversion Service Unit Tests', () => { @@ -13,13 +13,39 @@ describe('Debio Conversion Service Unit Tests', () => { let cacheManager: Cache; const axiosMock = new MockAdapter(axios); - const COINMARKETCAP_HOST = config.COINMARKETCAP_HOST; + const API_KEY_COINMARKETCAP = 'API_KEY_COINMARKETCAP'; + const SODAKI_HOST = 'SODAKI_HOST'; + const COINMARKETCAP_HOST = 'COINMARKETCAP_HOST'; + const REDIS_HOST = 'REDIS_HOST'; + const REDIS_PORT = 'REDIS_PORT'; + const REDIS_PASSWORD = 'REDIS_PASSWORD'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['API_KEY_COINMARKETCAP', API_KEY_COINMARKETCAP], + ['SODAKI_HOST', SODAKI_HOST], + ['COINMARKETCAP_HOST', COINMARKETCAP_HOST], + ['REDIS_HOST', REDIS_HOST], + ['REDIS_PORT', REDIS_PORT], + ['REDIS_PASSWORD', REDIS_PASSWORD], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } // Arrange before each iteration beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ DebioConversionService, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, { provide: CACHE_MANAGER, useValue: { @@ -76,7 +102,7 @@ describe('Debio Conversion Service Unit Tests', () => { // Arrange const httpGetSpy = jest.spyOn(axios, 'get'); const RESULT = 1; - const API_KEY = config.COINMARKETCAP_API_KEY; + const API_KEY = 'KEY'; const BALANCE_AMOUNT = 1; const FROM = 'USN'; const TO = 'USDT'; diff --git a/test/unit/common/modules/escrow/escrow.service.spec.ts b/test/unit/common/modules/escrow/escrow.service.spec.ts index 1bf7d04f..076716d7 100644 --- a/test/unit/common/modules/escrow/escrow.service.spec.ts +++ b/test/unit/common/modules/escrow/escrow.service.spec.ts @@ -8,13 +8,13 @@ import { import { EscrowService } from '../../../../../src/common/modules/escrow/escrow.service'; import { ethers } from 'ethers'; import { setOrderPaid } from '@debionetwork/polkadot-provider'; -import { config } from '../../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; jest.mock('@debionetwork/polkadot-provider', () => ({ setOrderPaid: jest.fn(), })); -const WALLET_ADDRESS = config.ESCROW_CONTRACT_ADDRESS; +const WALLET_ADDRESS = 'ADDR'; const ETHERS_PARSE_UNITS_MOCK = { tokenAmount: 'AMOUNT', }; @@ -39,7 +39,19 @@ describe('Escrow Service Unit Tests', () => { let substrateServiceMock: MockType; let ethereumServiceMock: MockType; - const DEBIO_ESCROW_PRIVATE_KEY = config.DEBIO_ESCROW_PRIVATE_KEY; + const DEBIO_ESCROW_PRIVATE_KEY = 'PRIVKEY'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['DEBIO_ESCROW_PRIVATE_KEY', DEBIO_ESCROW_PRIVATE_KEY], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -47,6 +59,10 @@ describe('Escrow Service Unit Tests', () => { EscrowService, { provide: SubstrateService, useFactory: substrateServiceMockFactory }, { provide: EthereumService, useFactory: ethereumServiceMockFactory }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); diff --git a/test/unit/common/modules/ethereum/ethereum.service.spec.ts b/test/unit/common/modules/ethereum/ethereum.service.spec.ts index 0d315b8e..54111a58 100644 --- a/test/unit/common/modules/ethereum/ethereum.service.spec.ts +++ b/test/unit/common/modules/ethereum/ethereum.service.spec.ts @@ -5,7 +5,7 @@ import { EthersContract, EthersSigner } from 'nestjs-ethers'; import ABI from '../../../../../src/common/modules/ethereum/utils/ABI.json'; import escrowContract from '../../../../../src/common/modules/ethereum/utils/Escrow.json'; import { ethers } from 'ethers'; -import { config } from '../../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; const PROVIDER_RESULT = 1; jest.mock('ethers', () => ({ @@ -42,8 +42,22 @@ describe.only('EthereumService', () => { createWallet: jest.fn(), })); - const WEB3_RPC_HTTPS = config.WEB3_RPC_HTTPS; - const ESCROW_CONTRACT_ADDRESS = config.ESCROW_CONTRACT_ADDRESS; + const WEB3_RPC_HTTPS = 'RPC'; + const ESCROW_CONTRACT_ADDRESS = 'ADDR'; + + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['WEB3_RPC_HTTPS', WEB3_RPC_HTTPS], + ['ESCROW_CONTRACT_ADDRESS', ESCROW_CONTRACT_ADDRESS], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } beforeAll(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -52,6 +66,10 @@ describe.only('EthereumService', () => { { provide: CachesService, useFactory: cachesServiceMockFactory }, { provide: EthersContract, useFactory: ethersContractMockFactory }, { provide: EthersSigner, useFactory: ethersSignerMockFactory }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); diff --git a/test/unit/common/modules/mailer/mailer.manager.spec.ts b/test/unit/common/modules/mailer/mailer.manager.spec.ts index af7fa73f..bf0fd35a 100644 --- a/test/unit/common/modules/mailer/mailer.manager.spec.ts +++ b/test/unit/common/modules/mailer/mailer.manager.spec.ts @@ -3,17 +3,33 @@ import { mailerServiceMockFactory, MockType } from '../../../mock'; import { MailerService } from '@nestjs-modules/mailer'; import { MailerManager } from '../../../../../src/common'; import { customerStakingRequestService, labRegister } from './mailer.mock.data'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; describe('Mailer Manager Unit Tests', () => { let mailerManager: MailerManager; let mailerServiceMock: MockType; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([['POSTGRES_HOST', '']]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + // Arrange before each iteration beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ MailerManager, { provide: MailerService, useFactory: mailerServiceMockFactory }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); diff --git a/test/unit/common/modules/substrate/substrate.service.spec.ts b/test/unit/common/modules/substrate/substrate.service.spec.ts index a3edb049..53e06aef 100644 --- a/test/unit/common/modules/substrate/substrate.service.spec.ts +++ b/test/unit/common/modules/substrate/substrate.service.spec.ts @@ -2,7 +2,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { mockFunction } from '../../../mock'; import { ProcessEnvProxy, SubstrateService } from '../../../../../src/common'; import { ApiPromise, Keyring } from '@polkadot/api'; -import { config } from '../../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; jest.mock('../../../mock', () => ({ mockFunction: jest.fn(), @@ -14,8 +14,21 @@ const keyringSpy = jest.spyOn(Keyring.prototype, 'addFromUri'); describe.only('Substrate Service Unit Test', () => { let substrateService: SubstrateService; - const SUBSTRATE_URL = config.SUBSTRATE_URL; - const ADMIN_SUBSTRATE_MNEMONIC = config.ADMIN_SUBSTRATE_MNEMONIC; + const SUBSTRATE_URL = 'URL'; + const ADMIN_SUBSTRATE_MNEMONIC = 'ADDR'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['ADMIN_SUBSTRATE_MNEMONIC', ADMIN_SUBSTRATE_MNEMONIC], + ['SUBSTRATE_URL', SUBSTRATE_URL], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } class ProcessEnvProxyMock { env = { @@ -28,6 +41,10 @@ describe.only('Substrate Service Unit Test', () => { providers: [ SubstrateService, { provide: ProcessEnvProxy, useClass: ProcessEnvProxyMock }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); diff --git a/test/unit/endpoints/bounty/bounty.controller.spec.ts b/test/unit/endpoints/bounty/bounty.controller.spec.ts index cf65a6cb..a5341c97 100644 --- a/test/unit/endpoints/bounty/bounty.controller.spec.ts +++ b/test/unit/endpoints/bounty/bounty.controller.spec.ts @@ -4,6 +4,8 @@ import { DataStakingEvents } from '../../../../src/endpoints/bounty/models/data- import { DataStakingDto } from '../../../../src/endpoints/bounty/dto/data-staking.dto'; import { dateTimeProxyMockFactory, + fileMockFactory, + GCloudStorageServiceMock, MockType, repositoryMockFactory, } from '../../mock'; @@ -12,15 +14,19 @@ import { getRepositoryToken } from '@nestjs/typeorm'; import { when } from 'jest-when'; import { DateTimeProxy } from '../../../../src/common'; import { DataTokenToDatasetMapping } from '../../../../src/endpoints/bounty/models/data-token-to-dataset-mapping.entity'; +import { GCloudStorageService } from '@debionetwork/nestjs-gcloud-storage'; import { DataTokenToDatasetMappingDto } from '../../../../src/endpoints/bounty/dto/data-token-to-dataset-mapping.dto'; describe('Bounty Controller Unit Tests', () => { + const fileMock = fileMockFactory(); + let bountyController: BountyController; let dateTimeProxyMock: MockType; let dataStakingEventsRepositoryMock: MockType>; let dataTokenToDatasetMappingRepositoryMock: MockType< Repository >; + let cloudStorageServiceMock: GCloudStorageServiceMock; // Arrange before each iteration beforeEach(async () => { @@ -36,11 +42,16 @@ describe('Bounty Controller Unit Tests', () => { useFactory: repositoryMockFactory, }, { provide: DateTimeProxy, useFactory: dateTimeProxyMockFactory }, + { + provide: GCloudStorageService, + useClass: GCloudStorageServiceMock, + }, ], }).compile(); bountyController = module.get(BountyController); dateTimeProxyMock = module.get(DateTimeProxy); + cloudStorageServiceMock = module.get(GCloudStorageService); dataTokenToDatasetMappingRepositoryMock = module.get( getRepositoryToken(DataTokenToDatasetMapping), ); @@ -49,10 +60,10 @@ describe('Bounty Controller Unit Tests', () => { ); }); - // it('should be defined', () => { - // // Assert - // expect(bountyController).toBeDefined(); - // }); + it('should be defined', () => { + // Assert + expect(bountyController).toBeDefined(); + }); it('should find all categories', () => { // Arrange @@ -82,35 +93,35 @@ describe('Bounty Controller Unit Tests', () => { expect(dataStakingEventsRepositoryMock.save).toHaveBeenCalled(); }); - // it('should stake files', () => { - // // Arrange - // const EXPIRES = 0; - // const MAPPING_ID = 'MAPPING_ID'; - // const TOKEN_ID = 'TOKEN_ID'; - // const FILENAME = 'FILENAME'; + it('should stake files', () => { + // Arrange + const EXPIRES = 0; + const MAPPING_ID = 'MAPPING_ID'; + const TOKEN_ID = 'TOKEN_ID'; + const FILENAME = 'FILENAME'; - // const REPOSITORY_RESULT: DataTokenToDatasetMapping = { - // mapping_id: MAPPING_ID, - // token_id: TOKEN_ID, - // filename: FILENAME, - // created_at: new Date(EXPIRES), - // updated_at: new Date(EXPIRES), - // }; + const REPOSITORY_RESULT: DataTokenToDatasetMapping = { + mapping_id: MAPPING_ID, + token_id: TOKEN_ID, + filename: FILENAME, + created_at: new Date(EXPIRES), + updated_at: new Date(EXPIRES), + }; - // dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); - // dataTokenToDatasetMappingRepositoryMock.find.mockReturnValue([ - // REPOSITORY_RESULT, - // ]); + dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); + dataTokenToDatasetMappingRepositoryMock.find.mockReturnValue([ + REPOSITORY_RESULT, + ]); - // const READ_SIGNED_URL = ['readurl']; - // fileMock.getSignedUrl.mockReturnValue(READ_SIGNED_URL); - // cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); + const READ_SIGNED_URL = ['readurl']; + fileMock.getSignedUrl.mockReturnValue(READ_SIGNED_URL); + cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); - // const RESULT: DataTokenToDatasetMappingDto = - // new DataTokenToDatasetMappingDto(REPOSITORY_RESULT); - // RESULT.file_url = READ_SIGNED_URL[0]; + const RESULT: DataTokenToDatasetMappingDto = + new DataTokenToDatasetMappingDto(REPOSITORY_RESULT); + RESULT.file_url = READ_SIGNED_URL[0]; - // // Assert - // expect(bountyController.StakedFiles(TOKEN_ID)).resolves.toEqual([RESULT]); - // }); + // Assert + expect(bountyController.StakedFiles(TOKEN_ID)).resolves.toEqual([RESULT]); + }); }); diff --git a/test/unit/endpoints/cloud-storage/cloud-storage.controller.spec.ts b/test/unit/endpoints/cloud-storage/cloud-storage.controller.spec.ts index 73706b45..ce1f6386 100644 --- a/test/unit/endpoints/cloud-storage/cloud-storage.controller.spec.ts +++ b/test/unit/endpoints/cloud-storage/cloud-storage.controller.spec.ts @@ -1,11 +1,20 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { GCloudStorageService } from '@debionetwork/nestjs-gcloud-storage'; import { CloudStorageController } from '../../../../src/endpoints/cloud-storage/cloud-storage.controller'; -import { dateTimeProxyMockFactory, MockType } from '../../mock'; +import { + dateTimeProxyMockFactory, + fileMockFactory, + GCloudStorageServiceMock, + MockType, +} from '../../mock'; import { when } from 'jest-when'; import { DateTimeProxy } from '../../../../src/common'; describe('Cloud Storage Controller Unit Tests', () => { + const fileMock = fileMockFactory(); + let dateTimeProxyMock: MockType; + let cloudStorageServiceMock: GCloudStorageServiceMock; let cloudStorageController: CloudStorageController; // Arrange before each iteration @@ -13,6 +22,10 @@ describe('Cloud Storage Controller Unit Tests', () => { const module: TestingModule = await Test.createTestingModule({ providers: [ CloudStorageController, + { + provide: GCloudStorageService, + useClass: GCloudStorageServiceMock, + }, { provide: DateTimeProxy, useFactory: dateTimeProxyMockFactory, @@ -20,72 +33,73 @@ describe('Cloud Storage Controller Unit Tests', () => { ], }).compile(); dateTimeProxyMock = module.get(DateTimeProxy); + cloudStorageServiceMock = module.get(GCloudStorageService); cloudStorageController = module.get(CloudStorageController); }); - // it('should be defined', () => { - // // Assert - // expect(cloudStorageController).toBeDefined(); - // }); + it('should be defined', () => { + // Assert + expect(cloudStorageController).toBeDefined(); + }); - // it('should get READ signed url', () => { - // // Arrange - // const EXPIRES = 0; - // const READ = 'read'; - // const FILENAME = 'filename'; - // const READ_SIGNED_URL = ['readurl']; - // const READ_CONDITIONS = { - // action: READ, - // expires: EXPIRES, - // version: 'v4', - // }; + it('should get READ signed url', () => { + // Arrange + const EXPIRES = 0; + const READ = 'read'; + const FILENAME = 'filename'; + const READ_SIGNED_URL = ['readurl']; + const READ_CONDITIONS = { + action: READ, + expires: EXPIRES, + version: 'v4', + }; - // dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); - // when(fileMock.getSignedUrl) - // .calledWith(READ_CONDITIONS) - // .mockReturnValue(READ_SIGNED_URL); - // cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); + dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); + when(fileMock.getSignedUrl) + .calledWith(READ_CONDITIONS) + .mockReturnValue(READ_SIGNED_URL); + cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); - // // Assert - // expect( - // cloudStorageController.GetSignedUrl(FILENAME, READ), - // ).resolves.toEqual({ - // signedUrl: READ_SIGNED_URL[0], - // }); - // expect(dateTimeProxyMock.nowAndAdd).toHaveBeenCalled(); - // expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalled(); - // expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalledWith(FILENAME); - // expect(fileMock.getSignedUrl).toHaveBeenCalledWith(READ_CONDITIONS); - // }); + // Assert + expect( + cloudStorageController.GetSignedUrl(FILENAME, READ), + ).resolves.toEqual({ + signedUrl: READ_SIGNED_URL[0], + }); + expect(dateTimeProxyMock.nowAndAdd).toHaveBeenCalled(); + expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalled(); + expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalledWith(FILENAME); + expect(fileMock.getSignedUrl).toHaveBeenCalledWith(READ_CONDITIONS); + }); - // it('should get WRITE signed url', () => { - // // Arrange - // const EXPIRES = 0; - // const WRITE = 'write'; - // const FILENAME = 'filename'; - // const WRITE_SIGNED_URL = ['writeurl']; - // const WRITE_CONDITIONS = { - // action: WRITE, - // contentType: 'application/x-www-form-urlencoded', - // expires: EXPIRES, - // version: 'v4', - // }; + it('should get WRITE signed url', () => { + // Arrange + const EXPIRES = 0; + const WRITE = 'write'; + const FILENAME = 'filename'; + const WRITE_SIGNED_URL = ['writeurl']; + const WRITE_CONDITIONS = { + action: WRITE, + contentType: 'application/x-www-form-urlencoded', + expires: EXPIRES, + version: 'v4', + }; - // dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); - // when(fileMock.getSignedUrl) - // .calledWith(WRITE_CONDITIONS) - // .mockReturnValue(WRITE_SIGNED_URL); - // cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); + dateTimeProxyMock.nowAndAdd.mockReturnValue(EXPIRES); + when(fileMock.getSignedUrl) + .calledWith(WRITE_CONDITIONS) + .mockReturnValue(WRITE_SIGNED_URL); + cloudStorageServiceMock.bucket.file.mockReturnValue(fileMock); - // // Assert - // expect( - // cloudStorageController.GetSignedUrl(FILENAME, WRITE), - // ).resolves.toEqual({ - // signedUrl: WRITE_SIGNED_URL[0], - // }); - // expect(dateTimeProxyMock.nowAndAdd).toHaveBeenCalled(); - // expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalled(); - // expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalledWith(FILENAME); - // expect(fileMock.getSignedUrl).toHaveBeenCalledWith(WRITE_CONDITIONS); - // }); + // Assert + expect( + cloudStorageController.GetSignedUrl(FILENAME, WRITE), + ).resolves.toEqual({ + signedUrl: WRITE_SIGNED_URL[0], + }); + expect(dateTimeProxyMock.nowAndAdd).toHaveBeenCalled(); + expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalled(); + expect(cloudStorageServiceMock.bucket.file).toHaveBeenCalledWith(FILENAME); + expect(fileMock.getSignedUrl).toHaveBeenCalledWith(WRITE_CONDITIONS); + }); }); diff --git a/test/unit/endpoints/email/email.controller.spec.ts b/test/unit/endpoints/email/email.controller.spec.ts index cc869285..4e30e830 100644 --- a/test/unit/endpoints/email/email.controller.spec.ts +++ b/test/unit/endpoints/email/email.controller.spec.ts @@ -6,6 +6,7 @@ import { } from '../../../../src/common'; import { emailNotificationServiceMockFactory, + googleSecretManagerServiceMockFactory, mailerManagerMockFactory, MockType, substrateServiceMockFactory, @@ -15,6 +16,7 @@ import { Response } from 'express'; import { Test, TestingModule } from '@nestjs/testing'; import * as labQuery from '@debionetwork/polkadot-provider/lib/query/labs'; import { when } from 'jest-when'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; describe('Email Controller', () => { let emailEndpointControllerMock: EmailEndpointController; @@ -47,6 +49,10 @@ describe('Email Controller', () => { provide: EmailNotificationService, useFactory: emailNotificationServiceMockFactory, }, + { + provide: GCloudSecretManagerService, + useFactory: googleSecretManagerServiceMockFactory, + }, ], }).compile(); diff --git a/test/unit/endpoints/recaptcha/recaptcha.controller.spec.ts b/test/unit/endpoints/recaptcha/recaptcha.controller.spec.ts index c4655f4c..14500c5d 100644 --- a/test/unit/endpoints/recaptcha/recaptcha.controller.spec.ts +++ b/test/unit/endpoints/recaptcha/recaptcha.controller.spec.ts @@ -3,18 +3,35 @@ import { Response } from 'express'; import MockAdapter from 'axios-mock-adapter'; import { TestingModule, Test } from '@nestjs/testing'; import { RecaptchaController } from '../../../../src/endpoints/recaptcha/recaptcha.controller'; -import { config } from '../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; describe('Recaptcha Controller Unit Tests', () => { let recaptchaController: RecaptchaController; const axiosMock = new MockAdapter(axios); - const RECAPTCHA_SECRET_KEY = config.RECAPTCHA_SECRET_KEY; + const RECAPTCHA_SECRET_KEY = 'KEY'; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['RECAPTCHA_SECRET_KEY', RECAPTCHA_SECRET_KEY], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [RecaptchaController], - providers: [], + providers: [ + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, + ], }).compile(); recaptchaController = module.get(RecaptchaController); diff --git a/test/unit/endpoints/substrate-endpoint/substrate-endpoint.controller.spec.ts b/test/unit/endpoints/substrate-endpoint/substrate-endpoint.controller.spec.ts index cb77f914..01f2def7 100644 --- a/test/unit/endpoints/substrate-endpoint/substrate-endpoint.controller.spec.ts +++ b/test/unit/endpoints/substrate-endpoint/substrate-endpoint.controller.spec.ts @@ -29,7 +29,7 @@ import { setGeneticAnalysisOrderPaid, adminSetEthAddress, } from '@debionetwork/polkadot-provider'; -import { config } from '../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; jest.mock('@debionetwork/polkadot-provider', () => ({ queryAccountIdByEthAddress: jest.fn(), @@ -54,7 +54,7 @@ describe('Substrate Endpoint Controller Unit Tests', () => { let geneticAnalysisMock: MockType; let geneticAnalysisOrderMock: MockType; - const DEBIO_API_KEY = config.DEBIO_API_KEY.toString(); + const DEBIO_API_KEY = 'KEY'; const labServiceMockFactory: () => MockType = jest.fn(() => ({ getByCountryCityCategory: jest.fn(), @@ -108,6 +108,17 @@ describe('Substrate Endpoint Controller Unit Tests', () => { getGeneticAnalysisOrderById: jest.fn(), })); + class GoogleSecretManagerServiceMock { + _secretsList = new Map([['DEBIO_API_KEY', DEBIO_API_KEY]]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + class SubstrateServiceMock { api = 'API'; pair = 'PAIR'; @@ -151,6 +162,10 @@ describe('Substrate Endpoint Controller Unit Tests', () => { useFactory: geneticAnalysisOrderMockfactory, }, { provide: DateTimeProxy, useFactory: dateTimeProxyMockFactory }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); diff --git a/test/unit/endpoints/verification/verification.controller.spec.ts b/test/unit/endpoints/verification/verification.controller.spec.ts index 2697e1a1..a5d17d7e 100644 --- a/test/unit/endpoints/verification/verification.controller.spec.ts +++ b/test/unit/endpoints/verification/verification.controller.spec.ts @@ -3,7 +3,7 @@ import { MockType } from '../../mock'; import { VerificationService } from '../../../../src/endpoints/verification/verification.service'; import { VerificationController } from '../../../../src/endpoints/verification/verification.controller'; import httpMocks = require('node-mocks-http'); -import { config } from '../../../../src/config'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; describe('Verification Controller Unit Tests', () => { let verificationController: VerificationController; @@ -15,6 +15,19 @@ describe('Verification Controller Unit Tests', () => { })); let verificationServiceMock: MockType; + class GoogleSecretManagerServiceMock { + _secretsList = new Map([ + ['DEBIO_API_KEY', 'DEBIO_API_KEY'], + ]); + loadSecrets() { + return null; + } + + getSecret(key) { + return this._secretsList.get(key); + } + } + // Arrange before each iteration beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -24,6 +37,10 @@ describe('Verification Controller Unit Tests', () => { provide: VerificationService, useFactory: verificationServiceMockFactory, }, + { + provide: GCloudSecretManagerService, + useClass: GoogleSecretManagerServiceMock, + }, ], }).compile(); @@ -63,7 +80,7 @@ describe('Verification Controller Unit Tests', () => { // Arrange const EXPECTED_STATUS = 500; const EXPECTED_RESULT = "I just don't feel like it"; - const API_KEY = config.DEBIO_API_KEY; + const API_KEY = 'DEBIO_API_KEY'; const ACCOUNT_ID = 'ACCOUT_ID'; const VERIFICATION_STATUS = 'VERIFICATION_STATUS'; verificationServiceMock.verificationLab.mockImplementation(() => @@ -89,7 +106,7 @@ describe('Verification Controller Unit Tests', () => { // Arrange const EXPECTED_STATUS = 500; const EXPECTED_RESULT = "I just don't feel like it"; - const API_KEY = config.DEBIO_API_KEY; + const API_KEY = 'DEBIO_API_KEY'; const ACCOUNT_ID = 'ACCOUT_ID'; const VERIFICATION_STATUS = 'VERIFICATION_STATUS'; verificationServiceMock.verificationGeneticAnalyst.mockImplementation(() => @@ -115,7 +132,7 @@ describe('Verification Controller Unit Tests', () => { // Arrange const EXPECTED_STATUS = 200; const EXPECTED_RESULT = 'Verified, and Got Reward 2 DBIO'; - const API_KEY = config.DEBIO_API_KEY; + const API_KEY = 'DEBIO_API_KEY'; const ACCOUNT_ID = 'ACCOUT_ID'; const VERIFICATION_STATUS = 'Verified'; @@ -138,7 +155,7 @@ describe('Verification Controller Unit Tests', () => { // Arrange const EXPECTED_STATUS = 200; const EXPECTED_RESULT = 'Verified'; - const API_KEY = config.DEBIO_API_KEY; + const API_KEY = 'DEBIO_API_KEY'; const ACCOUNT_ID = 'ACCOUT_ID'; const VERIFICATION_STATUS = 'Verified'; diff --git a/test/unit/mock.ts b/test/unit/mock.ts index bd15e763..9f5385c2 100644 --- a/test/unit/mock.ts +++ b/test/unit/mock.ts @@ -15,6 +15,7 @@ import { } from '@debionetwork/polkadot-provider'; import { Repository } from 'typeorm'; import { Cache as CacheManager } from 'cache-manager'; +import { File, Bucket } from '@google-cloud/storage'; import { ElasticsearchService } from '@nestjs/elasticsearch'; import { MailerService } from '@nestjs-modules/mailer'; import { EscrowService } from '../../src/common/modules/escrow/escrow.service'; @@ -22,6 +23,8 @@ import { CountryService } from '../../src/endpoints/location/country.service'; import { StateService } from '../../src/endpoints/location/state.service'; import { SchedulerRegistry } from '@nestjs/schedule'; import { NotificationService } from '../../src/common/modules/notification/notification.service'; +import { GCloudSecretManagerService } from '@debionetwork/nestjs-gcloud-secret-manager'; +import { keyList } from '../../src/common/secrets'; export function mockFunction(args) {} // eslint-disable-line @@ -48,6 +51,17 @@ export const dateTimeProxyMockFactory: () => MockType = jest.fn( }), ); +export const fileMockFactory: () => MockType = jest.fn(() => ({ + getSignedUrl: jest.fn((entity) => entity), +})); + +export const bucketMockFactory: () => MockType = jest.fn(() => ({ + file: jest.fn((entity) => entity), +})); +export class GCloudStorageServiceMock { + bucket = bucketMockFactory(); +} + export const elasticsearchServiceMockFactory: () => MockType = jest.fn(() => ({ delete: jest.fn((entity) => entity), @@ -359,3 +373,10 @@ export const schedulerRegistryMockFactory: () => MockType = jest.fn(() => ({ addInterval: jest.fn(), })); + +export const googleSecretManagerServiceMockFactory: () => MockType< + GCloudSecretManagerService +> = jest.fn(() => ({ + loadSecrets: jest.fn((entity) => entity), + getSecret: jest.fn((entity) => entity), +}));