├── .env.example ├── .gitignore ├── README.md ├── package-lock.json ├── package.json └── src ├── config.js ├── controllers └── EmailController.js ├── index.js ├── queue └── MailQueue.js ├── routes └── email.js └── services └── EmailService.js /.env.example: -------------------------------------------------------------------------------- 1 | AWS_ACCESS_KEY= 2 | AWS_SECRET_ACCESS_KEY= 3 | AWS_REGION= 4 | AWS_API_VERSION= 5 | REDIS_HOST= 6 | REDIS_PORT= 7 | EMAIL_FROM= -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # redis-dba 2 | 3 | Projeto final da cadeira de Banco de dados Avançado realizada no curso de Ciência da Computação na Universidade Federal de Pelotas. Buscamos realizar um estudo de caso com o banco NoSQL Redis, utilizando o mesmo como message broker em um sistema de disparo de e-mails em lote. 4 | 5 | 6 | ## Tecnologias utilizadas 7 | 8 | - [Redis](https://redis.io/) 9 | - [NodeJs](https://nodejs.org/) 10 | - [Bull](https://github.com/OptimalBits/bull) 11 | - [AWS.SES](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SES.html#constructor-property) 12 | 13 | ## Como executar 14 | 15 | 1. Clone o repositório e entre na pasta 16 | 2. Instale os pacotes utilizando o comando `npm install` 17 | 3. Crie um arquivo `.env` na raiz do projeto e insira suas credencias. Utilize o arquivo `.env.example` como base. 18 | 4. Rode o projeto com o comando `npm start` 19 | 20 | ## Contribuicoes 21 | 22 | - Esse projeto possui uma estrutura front-end que integra com nosso servico. A aplicacao pode ser encontrada no seguinte [link](https://github.com/Fernanda-Kipper/membership-frontend). 23 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "banco-dados-avancado", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "banco-dados-avancado", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@fastify/cors": "^8.2.1", 13 | "@fastify/formbody": "^7.4.0", 14 | "aws-sdk": "^2.1360.0", 15 | "bull": "^4.10.4", 16 | "dotenv": "^16.0.3", 17 | "fastify": "^4.17.0" 18 | } 19 | }, 20 | "node_modules/@fastify/ajv-compiler": { 21 | "version": "3.5.0", 22 | "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", 23 | "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", 24 | "dependencies": { 25 | "ajv": "^8.11.0", 26 | "ajv-formats": "^2.1.1", 27 | "fast-uri": "^2.0.0" 28 | } 29 | }, 30 | "node_modules/@fastify/cors": { 31 | "version": "8.2.1", 32 | "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-8.2.1.tgz", 33 | "integrity": "sha512-2H2MrDD3ea7g707g1CNNLWb9/tYbmw7HS+MK2SDcgjxwzbOFR93JortelTIO8DBFsZqFtEpKNxiZfSyrGgYcbw==", 34 | "dependencies": { 35 | "fastify-plugin": "^4.0.0", 36 | "mnemonist": "0.39.5" 37 | } 38 | }, 39 | "node_modules/@fastify/deepmerge": { 40 | "version": "1.3.0", 41 | "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", 42 | "integrity": "sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==" 43 | }, 44 | "node_modules/@fastify/error": { 45 | "version": "3.2.0", 46 | "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.2.0.tgz", 47 | "integrity": "sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ==" 48 | }, 49 | "node_modules/@fastify/fast-json-stringify-compiler": { 50 | "version": "4.3.0", 51 | "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", 52 | "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", 53 | "dependencies": { 54 | "fast-json-stringify": "^5.7.0" 55 | } 56 | }, 57 | "node_modules/@fastify/formbody": { 58 | "version": "7.4.0", 59 | "resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-7.4.0.tgz", 60 | "integrity": "sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==", 61 | "dependencies": { 62 | "fast-querystring": "^1.0.0", 63 | "fastify-plugin": "^4.0.0" 64 | } 65 | }, 66 | "node_modules/@ioredis/commands": { 67 | "version": "1.2.0", 68 | "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", 69 | "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" 70 | }, 71 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { 72 | "version": "3.0.2", 73 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", 74 | "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", 75 | "cpu": [ 76 | "x64" 77 | ], 78 | "optional": true, 79 | "os": [ 80 | "linux" 81 | ] 82 | }, 83 | "node_modules/abort-controller": { 84 | "version": "3.0.0", 85 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 86 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 87 | "dependencies": { 88 | "event-target-shim": "^5.0.0" 89 | }, 90 | "engines": { 91 | "node": ">=6.5" 92 | } 93 | }, 94 | "node_modules/abstract-logging": { 95 | "version": "2.0.1", 96 | "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", 97 | "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" 98 | }, 99 | "node_modules/ajv": { 100 | "version": "8.12.0", 101 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", 102 | "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", 103 | "dependencies": { 104 | "fast-deep-equal": "^3.1.1", 105 | "json-schema-traverse": "^1.0.0", 106 | "require-from-string": "^2.0.2", 107 | "uri-js": "^4.2.2" 108 | }, 109 | "funding": { 110 | "type": "github", 111 | "url": "https://github.com/sponsors/epoberezkin" 112 | } 113 | }, 114 | "node_modules/ajv-formats": { 115 | "version": "2.1.1", 116 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 117 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 118 | "dependencies": { 119 | "ajv": "^8.0.0" 120 | }, 121 | "peerDependencies": { 122 | "ajv": "^8.0.0" 123 | }, 124 | "peerDependenciesMeta": { 125 | "ajv": { 126 | "optional": true 127 | } 128 | } 129 | }, 130 | "node_modules/archy": { 131 | "version": "1.0.0", 132 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 133 | "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" 134 | }, 135 | "node_modules/atomic-sleep": { 136 | "version": "1.0.0", 137 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 138 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 139 | "engines": { 140 | "node": ">=8.0.0" 141 | } 142 | }, 143 | "node_modules/available-typed-arrays": { 144 | "version": "1.0.5", 145 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 146 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 147 | "engines": { 148 | "node": ">= 0.4" 149 | }, 150 | "funding": { 151 | "url": "https://github.com/sponsors/ljharb" 152 | } 153 | }, 154 | "node_modules/avvio": { 155 | "version": "8.2.1", 156 | "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.1.tgz", 157 | "integrity": "sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==", 158 | "dependencies": { 159 | "archy": "^1.0.0", 160 | "debug": "^4.0.0", 161 | "fastq": "^1.6.1" 162 | } 163 | }, 164 | "node_modules/aws-sdk": { 165 | "version": "2.1360.0", 166 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1360.0.tgz", 167 | "integrity": "sha512-wW1CviH1s6bl5+wO+KM7aSc3yy6cQPJT85Fd4rQgrn0uwfjg9fx7KJ0FRhv+eU4DabkRjcSMlKo1IGhARmT6Tw==", 168 | "dependencies": { 169 | "buffer": "4.9.2", 170 | "events": "1.1.1", 171 | "ieee754": "1.1.13", 172 | "jmespath": "0.16.0", 173 | "querystring": "0.2.0", 174 | "sax": "1.2.1", 175 | "url": "0.10.3", 176 | "util": "^0.12.4", 177 | "uuid": "8.0.0", 178 | "xml2js": "0.5.0" 179 | }, 180 | "engines": { 181 | "node": ">= 10.0.0" 182 | } 183 | }, 184 | "node_modules/aws-sdk/node_modules/uuid": { 185 | "version": "8.0.0", 186 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", 187 | "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", 188 | "bin": { 189 | "uuid": "dist/bin/uuid" 190 | } 191 | }, 192 | "node_modules/base64-js": { 193 | "version": "1.5.1", 194 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 195 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 196 | "funding": [ 197 | { 198 | "type": "github", 199 | "url": "https://github.com/sponsors/feross" 200 | }, 201 | { 202 | "type": "patreon", 203 | "url": "https://www.patreon.com/feross" 204 | }, 205 | { 206 | "type": "consulting", 207 | "url": "https://feross.org/support" 208 | } 209 | ] 210 | }, 211 | "node_modules/buffer": { 212 | "version": "4.9.2", 213 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 214 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 215 | "dependencies": { 216 | "base64-js": "^1.0.2", 217 | "ieee754": "^1.1.4", 218 | "isarray": "^1.0.0" 219 | } 220 | }, 221 | "node_modules/bull": { 222 | "version": "4.10.4", 223 | "resolved": "https://registry.npmjs.org/bull/-/bull-4.10.4.tgz", 224 | "integrity": "sha512-o9m/7HjS/Or3vqRd59evBlWCXd9Lp+ALppKseoSKHaykK46SmRjAilX98PgmOz1yeVaurt8D5UtvEt4bUjM3eA==", 225 | "dependencies": { 226 | "cron-parser": "^4.2.1", 227 | "debuglog": "^1.0.0", 228 | "get-port": "^5.1.1", 229 | "ioredis": "^5.0.0", 230 | "lodash": "^4.17.21", 231 | "msgpackr": "^1.5.2", 232 | "semver": "^7.3.2", 233 | "uuid": "^8.3.0" 234 | }, 235 | "engines": { 236 | "node": ">=12" 237 | } 238 | }, 239 | "node_modules/call-bind": { 240 | "version": "1.0.2", 241 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 242 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 243 | "dependencies": { 244 | "function-bind": "^1.1.1", 245 | "get-intrinsic": "^1.0.2" 246 | }, 247 | "funding": { 248 | "url": "https://github.com/sponsors/ljharb" 249 | } 250 | }, 251 | "node_modules/cluster-key-slot": { 252 | "version": "1.1.2", 253 | "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", 254 | "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", 255 | "engines": { 256 | "node": ">=0.10.0" 257 | } 258 | }, 259 | "node_modules/cookie": { 260 | "version": "0.5.0", 261 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 262 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 263 | "engines": { 264 | "node": ">= 0.6" 265 | } 266 | }, 267 | "node_modules/cron-parser": { 268 | "version": "4.8.1", 269 | "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.8.1.tgz", 270 | "integrity": "sha512-jbokKWGcyU4gl6jAfX97E1gDpY12DJ1cLJZmoDzaAln/shZ+S3KBFBuA2Q6WeUN4gJf/8klnV1EfvhA2lK5IRQ==", 271 | "dependencies": { 272 | "luxon": "^3.2.1" 273 | }, 274 | "engines": { 275 | "node": ">=12.0.0" 276 | } 277 | }, 278 | "node_modules/debug": { 279 | "version": "4.3.4", 280 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 281 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 282 | "dependencies": { 283 | "ms": "2.1.2" 284 | }, 285 | "engines": { 286 | "node": ">=6.0" 287 | }, 288 | "peerDependenciesMeta": { 289 | "supports-color": { 290 | "optional": true 291 | } 292 | } 293 | }, 294 | "node_modules/debuglog": { 295 | "version": "1.0.1", 296 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 297 | "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", 298 | "engines": { 299 | "node": "*" 300 | } 301 | }, 302 | "node_modules/denque": { 303 | "version": "2.1.0", 304 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", 305 | "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", 306 | "engines": { 307 | "node": ">=0.10" 308 | } 309 | }, 310 | "node_modules/dotenv": { 311 | "version": "16.0.3", 312 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 313 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 314 | "engines": { 315 | "node": ">=12" 316 | } 317 | }, 318 | "node_modules/event-target-shim": { 319 | "version": "5.0.1", 320 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 321 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 322 | "engines": { 323 | "node": ">=6" 324 | } 325 | }, 326 | "node_modules/events": { 327 | "version": "1.1.1", 328 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 329 | "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", 330 | "engines": { 331 | "node": ">=0.4.x" 332 | } 333 | }, 334 | "node_modules/fast-content-type-parse": { 335 | "version": "1.0.0", 336 | "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.0.0.tgz", 337 | "integrity": "sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==" 338 | }, 339 | "node_modules/fast-decode-uri-component": { 340 | "version": "1.0.1", 341 | "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", 342 | "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" 343 | }, 344 | "node_modules/fast-deep-equal": { 345 | "version": "3.1.3", 346 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 347 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 348 | }, 349 | "node_modules/fast-json-stringify": { 350 | "version": "5.7.0", 351 | "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz", 352 | "integrity": "sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==", 353 | "dependencies": { 354 | "@fastify/deepmerge": "^1.0.0", 355 | "ajv": "^8.10.0", 356 | "ajv-formats": "^2.1.1", 357 | "fast-deep-equal": "^3.1.3", 358 | "fast-uri": "^2.1.0", 359 | "rfdc": "^1.2.0" 360 | } 361 | }, 362 | "node_modules/fast-querystring": { 363 | "version": "1.1.1", 364 | "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz", 365 | "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==", 366 | "dependencies": { 367 | "fast-decode-uri-component": "^1.0.1" 368 | } 369 | }, 370 | "node_modules/fast-redact": { 371 | "version": "3.1.2", 372 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", 373 | "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==", 374 | "engines": { 375 | "node": ">=6" 376 | } 377 | }, 378 | "node_modules/fast-uri": { 379 | "version": "2.2.0", 380 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.2.0.tgz", 381 | "integrity": "sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==" 382 | }, 383 | "node_modules/fastify": { 384 | "version": "4.17.0", 385 | "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.17.0.tgz", 386 | "integrity": "sha512-tzuY1tgWJo2Y6qEKwmLhFvACUmr68Io2pqP/sDKU71KRM6A6R3DrCDqLGqANbeLZcKUfdfY58ut35CGqemcTgg==", 387 | "dependencies": { 388 | "@fastify/ajv-compiler": "^3.5.0", 389 | "@fastify/error": "^3.0.0", 390 | "@fastify/fast-json-stringify-compiler": "^4.3.0", 391 | "abstract-logging": "^2.0.1", 392 | "avvio": "^8.2.0", 393 | "fast-content-type-parse": "^1.0.0", 394 | "fast-json-stringify": "^5.7.0", 395 | "find-my-way": "^7.6.0", 396 | "light-my-request": "^5.6.1", 397 | "pino": "^8.5.0", 398 | "process-warning": "^2.0.0", 399 | "proxy-addr": "^2.0.7", 400 | "rfdc": "^1.3.0", 401 | "secure-json-parse": "^2.5.0", 402 | "semver": "^7.3.7", 403 | "tiny-lru": "^11.0.1" 404 | } 405 | }, 406 | "node_modules/fastify-plugin": { 407 | "version": "4.5.0", 408 | "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.0.tgz", 409 | "integrity": "sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==" 410 | }, 411 | "node_modules/fastq": { 412 | "version": "1.15.0", 413 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 414 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 415 | "dependencies": { 416 | "reusify": "^1.0.4" 417 | } 418 | }, 419 | "node_modules/find-my-way": { 420 | "version": "7.6.0", 421 | "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.6.0.tgz", 422 | "integrity": "sha512-H7berWdHJ+5CNVr4ilLWPai4ml7Y2qAsxjw3pfeBxPigZmaDTzF0wjJLj90xRCmGcWYcyt050yN+34OZDJm1eQ==", 423 | "dependencies": { 424 | "fast-deep-equal": "^3.1.3", 425 | "fast-querystring": "^1.0.0", 426 | "safe-regex2": "^2.0.0" 427 | }, 428 | "engines": { 429 | "node": ">=14" 430 | } 431 | }, 432 | "node_modules/for-each": { 433 | "version": "0.3.3", 434 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 435 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 436 | "dependencies": { 437 | "is-callable": "^1.1.3" 438 | } 439 | }, 440 | "node_modules/forwarded": { 441 | "version": "0.2.0", 442 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 443 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 444 | "engines": { 445 | "node": ">= 0.6" 446 | } 447 | }, 448 | "node_modules/function-bind": { 449 | "version": "1.1.1", 450 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 451 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 452 | }, 453 | "node_modules/get-intrinsic": { 454 | "version": "1.2.0", 455 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 456 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 457 | "dependencies": { 458 | "function-bind": "^1.1.1", 459 | "has": "^1.0.3", 460 | "has-symbols": "^1.0.3" 461 | }, 462 | "funding": { 463 | "url": "https://github.com/sponsors/ljharb" 464 | } 465 | }, 466 | "node_modules/get-port": { 467 | "version": "5.1.1", 468 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", 469 | "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", 470 | "engines": { 471 | "node": ">=8" 472 | }, 473 | "funding": { 474 | "url": "https://github.com/sponsors/sindresorhus" 475 | } 476 | }, 477 | "node_modules/gopd": { 478 | "version": "1.0.1", 479 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 480 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 481 | "dependencies": { 482 | "get-intrinsic": "^1.1.3" 483 | }, 484 | "funding": { 485 | "url": "https://github.com/sponsors/ljharb" 486 | } 487 | }, 488 | "node_modules/has": { 489 | "version": "1.0.3", 490 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 491 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 492 | "dependencies": { 493 | "function-bind": "^1.1.1" 494 | }, 495 | "engines": { 496 | "node": ">= 0.4.0" 497 | } 498 | }, 499 | "node_modules/has-symbols": { 500 | "version": "1.0.3", 501 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 502 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 503 | "engines": { 504 | "node": ">= 0.4" 505 | }, 506 | "funding": { 507 | "url": "https://github.com/sponsors/ljharb" 508 | } 509 | }, 510 | "node_modules/has-tostringtag": { 511 | "version": "1.0.0", 512 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 513 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 514 | "dependencies": { 515 | "has-symbols": "^1.0.2" 516 | }, 517 | "engines": { 518 | "node": ">= 0.4" 519 | }, 520 | "funding": { 521 | "url": "https://github.com/sponsors/ljharb" 522 | } 523 | }, 524 | "node_modules/ieee754": { 525 | "version": "1.1.13", 526 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 527 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 528 | }, 529 | "node_modules/inherits": { 530 | "version": "2.0.4", 531 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 532 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 533 | }, 534 | "node_modules/ioredis": { 535 | "version": "5.3.1", 536 | "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.1.tgz", 537 | "integrity": "sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg==", 538 | "dependencies": { 539 | "@ioredis/commands": "^1.1.1", 540 | "cluster-key-slot": "^1.1.0", 541 | "debug": "^4.3.4", 542 | "denque": "^2.1.0", 543 | "lodash.defaults": "^4.2.0", 544 | "lodash.isarguments": "^3.1.0", 545 | "redis-errors": "^1.2.0", 546 | "redis-parser": "^3.0.0", 547 | "standard-as-callback": "^2.1.0" 548 | }, 549 | "engines": { 550 | "node": ">=12.22.0" 551 | }, 552 | "funding": { 553 | "type": "opencollective", 554 | "url": "https://opencollective.com/ioredis" 555 | } 556 | }, 557 | "node_modules/ipaddr.js": { 558 | "version": "1.9.1", 559 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 560 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 561 | "engines": { 562 | "node": ">= 0.10" 563 | } 564 | }, 565 | "node_modules/is-arguments": { 566 | "version": "1.1.1", 567 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 568 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 569 | "dependencies": { 570 | "call-bind": "^1.0.2", 571 | "has-tostringtag": "^1.0.0" 572 | }, 573 | "engines": { 574 | "node": ">= 0.4" 575 | }, 576 | "funding": { 577 | "url": "https://github.com/sponsors/ljharb" 578 | } 579 | }, 580 | "node_modules/is-callable": { 581 | "version": "1.2.7", 582 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 583 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 584 | "engines": { 585 | "node": ">= 0.4" 586 | }, 587 | "funding": { 588 | "url": "https://github.com/sponsors/ljharb" 589 | } 590 | }, 591 | "node_modules/is-generator-function": { 592 | "version": "1.0.10", 593 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", 594 | "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", 595 | "dependencies": { 596 | "has-tostringtag": "^1.0.0" 597 | }, 598 | "engines": { 599 | "node": ">= 0.4" 600 | }, 601 | "funding": { 602 | "url": "https://github.com/sponsors/ljharb" 603 | } 604 | }, 605 | "node_modules/is-typed-array": { 606 | "version": "1.1.10", 607 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 608 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 609 | "dependencies": { 610 | "available-typed-arrays": "^1.0.5", 611 | "call-bind": "^1.0.2", 612 | "for-each": "^0.3.3", 613 | "gopd": "^1.0.1", 614 | "has-tostringtag": "^1.0.0" 615 | }, 616 | "engines": { 617 | "node": ">= 0.4" 618 | }, 619 | "funding": { 620 | "url": "https://github.com/sponsors/ljharb" 621 | } 622 | }, 623 | "node_modules/isarray": { 624 | "version": "1.0.0", 625 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 626 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 627 | }, 628 | "node_modules/jmespath": { 629 | "version": "0.16.0", 630 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", 631 | "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", 632 | "engines": { 633 | "node": ">= 0.6.0" 634 | } 635 | }, 636 | "node_modules/json-schema-traverse": { 637 | "version": "1.0.0", 638 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 639 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 640 | }, 641 | "node_modules/light-my-request": { 642 | "version": "5.9.1", 643 | "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.9.1.tgz", 644 | "integrity": "sha512-UT7pUk8jNCR1wR7w3iWfIjx32DiB2f3hFdQSOwy3/EPQ3n3VocyipUxcyRZR0ahoev+fky69uA+GejPa9KuHKg==", 645 | "dependencies": { 646 | "cookie": "^0.5.0", 647 | "process-warning": "^2.0.0", 648 | "set-cookie-parser": "^2.4.1" 649 | } 650 | }, 651 | "node_modules/lodash": { 652 | "version": "4.17.21", 653 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 654 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 655 | }, 656 | "node_modules/lodash.defaults": { 657 | "version": "4.2.0", 658 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 659 | "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" 660 | }, 661 | "node_modules/lodash.isarguments": { 662 | "version": "3.1.0", 663 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 664 | "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" 665 | }, 666 | "node_modules/lru-cache": { 667 | "version": "6.0.0", 668 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 669 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 670 | "dependencies": { 671 | "yallist": "^4.0.0" 672 | }, 673 | "engines": { 674 | "node": ">=10" 675 | } 676 | }, 677 | "node_modules/luxon": { 678 | "version": "3.3.0", 679 | "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", 680 | "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==", 681 | "engines": { 682 | "node": ">=12" 683 | } 684 | }, 685 | "node_modules/mnemonist": { 686 | "version": "0.39.5", 687 | "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.5.tgz", 688 | "integrity": "sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==", 689 | "dependencies": { 690 | "obliterator": "^2.0.1" 691 | } 692 | }, 693 | "node_modules/ms": { 694 | "version": "2.1.2", 695 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 696 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 697 | }, 698 | "node_modules/msgpackr": { 699 | "version": "1.8.5", 700 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", 701 | "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", 702 | "optionalDependencies": { 703 | "msgpackr-extract": "^3.0.1" 704 | } 705 | }, 706 | "node_modules/msgpackr-extract": { 707 | "version": "3.0.2", 708 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", 709 | "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", 710 | "hasInstallScript": true, 711 | "optional": true, 712 | "dependencies": { 713 | "node-gyp-build-optional-packages": "5.0.7" 714 | }, 715 | "bin": { 716 | "download-msgpackr-prebuilds": "bin/download-prebuilds.js" 717 | }, 718 | "optionalDependencies": { 719 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", 720 | "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", 721 | "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", 722 | "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", 723 | "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", 724 | "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" 725 | } 726 | }, 727 | "node_modules/node-gyp-build-optional-packages": { 728 | "version": "5.0.7", 729 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", 730 | "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", 731 | "optional": true, 732 | "bin": { 733 | "node-gyp-build-optional-packages": "bin.js", 734 | "node-gyp-build-optional-packages-optional": "optional.js", 735 | "node-gyp-build-optional-packages-test": "build-test.js" 736 | } 737 | }, 738 | "node_modules/obliterator": { 739 | "version": "2.0.4", 740 | "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", 741 | "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" 742 | }, 743 | "node_modules/on-exit-leak-free": { 744 | "version": "2.1.0", 745 | "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", 746 | "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" 747 | }, 748 | "node_modules/pino": { 749 | "version": "8.11.0", 750 | "resolved": "https://registry.npmjs.org/pino/-/pino-8.11.0.tgz", 751 | "integrity": "sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg==", 752 | "dependencies": { 753 | "atomic-sleep": "^1.0.0", 754 | "fast-redact": "^3.1.1", 755 | "on-exit-leak-free": "^2.1.0", 756 | "pino-abstract-transport": "v1.0.0", 757 | "pino-std-serializers": "^6.0.0", 758 | "process-warning": "^2.0.0", 759 | "quick-format-unescaped": "^4.0.3", 760 | "real-require": "^0.2.0", 761 | "safe-stable-stringify": "^2.3.1", 762 | "sonic-boom": "^3.1.0", 763 | "thread-stream": "^2.0.0" 764 | }, 765 | "bin": { 766 | "pino": "bin.js" 767 | } 768 | }, 769 | "node_modules/pino-abstract-transport": { 770 | "version": "1.0.0", 771 | "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", 772 | "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", 773 | "dependencies": { 774 | "readable-stream": "^4.0.0", 775 | "split2": "^4.0.0" 776 | } 777 | }, 778 | "node_modules/pino-abstract-transport/node_modules/buffer": { 779 | "version": "6.0.3", 780 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 781 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 782 | "funding": [ 783 | { 784 | "type": "github", 785 | "url": "https://github.com/sponsors/feross" 786 | }, 787 | { 788 | "type": "patreon", 789 | "url": "https://www.patreon.com/feross" 790 | }, 791 | { 792 | "type": "consulting", 793 | "url": "https://feross.org/support" 794 | } 795 | ], 796 | "dependencies": { 797 | "base64-js": "^1.3.1", 798 | "ieee754": "^1.2.1" 799 | } 800 | }, 801 | "node_modules/pino-abstract-transport/node_modules/events": { 802 | "version": "3.3.0", 803 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 804 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", 805 | "engines": { 806 | "node": ">=0.8.x" 807 | } 808 | }, 809 | "node_modules/pino-abstract-transport/node_modules/ieee754": { 810 | "version": "1.2.1", 811 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 812 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 813 | "funding": [ 814 | { 815 | "type": "github", 816 | "url": "https://github.com/sponsors/feross" 817 | }, 818 | { 819 | "type": "patreon", 820 | "url": "https://www.patreon.com/feross" 821 | }, 822 | { 823 | "type": "consulting", 824 | "url": "https://feross.org/support" 825 | } 826 | ] 827 | }, 828 | "node_modules/pino-abstract-transport/node_modules/readable-stream": { 829 | "version": "4.3.0", 830 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.3.0.tgz", 831 | "integrity": "sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==", 832 | "dependencies": { 833 | "abort-controller": "^3.0.0", 834 | "buffer": "^6.0.3", 835 | "events": "^3.3.0", 836 | "process": "^0.11.10" 837 | }, 838 | "engines": { 839 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 840 | } 841 | }, 842 | "node_modules/pino-std-serializers": { 843 | "version": "6.2.0", 844 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.0.tgz", 845 | "integrity": "sha512-IWgSzUL8X1w4BIWTwErRgtV8PyOGOOi60uqv0oKuS/fOA8Nco/OeI6lBuc4dyP8MMfdFwyHqTMcBIA7nDiqEqA==" 846 | }, 847 | "node_modules/process": { 848 | "version": "0.11.10", 849 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 850 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 851 | "engines": { 852 | "node": ">= 0.6.0" 853 | } 854 | }, 855 | "node_modules/process-warning": { 856 | "version": "2.2.0", 857 | "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", 858 | "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" 859 | }, 860 | "node_modules/proxy-addr": { 861 | "version": "2.0.7", 862 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 863 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 864 | "dependencies": { 865 | "forwarded": "0.2.0", 866 | "ipaddr.js": "1.9.1" 867 | }, 868 | "engines": { 869 | "node": ">= 0.10" 870 | } 871 | }, 872 | "node_modules/punycode": { 873 | "version": "1.3.2", 874 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 875 | "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" 876 | }, 877 | "node_modules/querystring": { 878 | "version": "0.2.0", 879 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 880 | "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", 881 | "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", 882 | "engines": { 883 | "node": ">=0.4.x" 884 | } 885 | }, 886 | "node_modules/quick-format-unescaped": { 887 | "version": "4.0.4", 888 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 889 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" 890 | }, 891 | "node_modules/real-require": { 892 | "version": "0.2.0", 893 | "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 894 | "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", 895 | "engines": { 896 | "node": ">= 12.13.0" 897 | } 898 | }, 899 | "node_modules/redis-errors": { 900 | "version": "1.2.0", 901 | "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", 902 | "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", 903 | "engines": { 904 | "node": ">=4" 905 | } 906 | }, 907 | "node_modules/redis-parser": { 908 | "version": "3.0.0", 909 | "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", 910 | "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", 911 | "dependencies": { 912 | "redis-errors": "^1.0.0" 913 | }, 914 | "engines": { 915 | "node": ">=4" 916 | } 917 | }, 918 | "node_modules/require-from-string": { 919 | "version": "2.0.2", 920 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 921 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 922 | "engines": { 923 | "node": ">=0.10.0" 924 | } 925 | }, 926 | "node_modules/ret": { 927 | "version": "0.2.2", 928 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", 929 | "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", 930 | "engines": { 931 | "node": ">=4" 932 | } 933 | }, 934 | "node_modules/reusify": { 935 | "version": "1.0.4", 936 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 937 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 938 | "engines": { 939 | "iojs": ">=1.0.0", 940 | "node": ">=0.10.0" 941 | } 942 | }, 943 | "node_modules/rfdc": { 944 | "version": "1.3.0", 945 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 946 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" 947 | }, 948 | "node_modules/safe-regex2": { 949 | "version": "2.0.0", 950 | "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", 951 | "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", 952 | "dependencies": { 953 | "ret": "~0.2.0" 954 | } 955 | }, 956 | "node_modules/safe-stable-stringify": { 957 | "version": "2.4.3", 958 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", 959 | "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", 960 | "engines": { 961 | "node": ">=10" 962 | } 963 | }, 964 | "node_modules/sax": { 965 | "version": "1.2.1", 966 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 967 | "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" 968 | }, 969 | "node_modules/secure-json-parse": { 970 | "version": "2.7.0", 971 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", 972 | "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" 973 | }, 974 | "node_modules/semver": { 975 | "version": "7.3.8", 976 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 977 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 978 | "dependencies": { 979 | "lru-cache": "^6.0.0" 980 | }, 981 | "bin": { 982 | "semver": "bin/semver.js" 983 | }, 984 | "engines": { 985 | "node": ">=10" 986 | } 987 | }, 988 | "node_modules/set-cookie-parser": { 989 | "version": "2.6.0", 990 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 991 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" 992 | }, 993 | "node_modules/sonic-boom": { 994 | "version": "3.3.0", 995 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", 996 | "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", 997 | "dependencies": { 998 | "atomic-sleep": "^1.0.0" 999 | } 1000 | }, 1001 | "node_modules/split2": { 1002 | "version": "4.2.0", 1003 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 1004 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", 1005 | "engines": { 1006 | "node": ">= 10.x" 1007 | } 1008 | }, 1009 | "node_modules/standard-as-callback": { 1010 | "version": "2.1.0", 1011 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", 1012 | "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" 1013 | }, 1014 | "node_modules/thread-stream": { 1015 | "version": "2.3.0", 1016 | "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", 1017 | "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", 1018 | "dependencies": { 1019 | "real-require": "^0.2.0" 1020 | } 1021 | }, 1022 | "node_modules/tiny-lru": { 1023 | "version": "11.0.1", 1024 | "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.0.1.tgz", 1025 | "integrity": "sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==", 1026 | "engines": { 1027 | "node": ">=12" 1028 | } 1029 | }, 1030 | "node_modules/uri-js": { 1031 | "version": "4.4.1", 1032 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1033 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1034 | "dependencies": { 1035 | "punycode": "^2.1.0" 1036 | } 1037 | }, 1038 | "node_modules/uri-js/node_modules/punycode": { 1039 | "version": "2.3.0", 1040 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1041 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1042 | "engines": { 1043 | "node": ">=6" 1044 | } 1045 | }, 1046 | "node_modules/url": { 1047 | "version": "0.10.3", 1048 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 1049 | "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", 1050 | "dependencies": { 1051 | "punycode": "1.3.2", 1052 | "querystring": "0.2.0" 1053 | } 1054 | }, 1055 | "node_modules/util": { 1056 | "version": "0.12.5", 1057 | "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", 1058 | "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", 1059 | "dependencies": { 1060 | "inherits": "^2.0.3", 1061 | "is-arguments": "^1.0.4", 1062 | "is-generator-function": "^1.0.7", 1063 | "is-typed-array": "^1.1.3", 1064 | "which-typed-array": "^1.1.2" 1065 | } 1066 | }, 1067 | "node_modules/uuid": { 1068 | "version": "8.3.2", 1069 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1070 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1071 | "bin": { 1072 | "uuid": "dist/bin/uuid" 1073 | } 1074 | }, 1075 | "node_modules/which-typed-array": { 1076 | "version": "1.1.9", 1077 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 1078 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 1079 | "dependencies": { 1080 | "available-typed-arrays": "^1.0.5", 1081 | "call-bind": "^1.0.2", 1082 | "for-each": "^0.3.3", 1083 | "gopd": "^1.0.1", 1084 | "has-tostringtag": "^1.0.0", 1085 | "is-typed-array": "^1.1.10" 1086 | }, 1087 | "engines": { 1088 | "node": ">= 0.4" 1089 | }, 1090 | "funding": { 1091 | "url": "https://github.com/sponsors/ljharb" 1092 | } 1093 | }, 1094 | "node_modules/xml2js": { 1095 | "version": "0.5.0", 1096 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", 1097 | "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", 1098 | "dependencies": { 1099 | "sax": ">=0.6.0", 1100 | "xmlbuilder": "~11.0.0" 1101 | }, 1102 | "engines": { 1103 | "node": ">=4.0.0" 1104 | } 1105 | }, 1106 | "node_modules/xmlbuilder": { 1107 | "version": "11.0.1", 1108 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1109 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 1110 | "engines": { 1111 | "node": ">=4.0" 1112 | } 1113 | }, 1114 | "node_modules/yallist": { 1115 | "version": "4.0.0", 1116 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1117 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1118 | } 1119 | }, 1120 | "dependencies": { 1121 | "@fastify/ajv-compiler": { 1122 | "version": "3.5.0", 1123 | "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", 1124 | "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", 1125 | "requires": { 1126 | "ajv": "^8.11.0", 1127 | "ajv-formats": "^2.1.1", 1128 | "fast-uri": "^2.0.0" 1129 | } 1130 | }, 1131 | "@fastify/cors": { 1132 | "version": "8.2.1", 1133 | "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-8.2.1.tgz", 1134 | "integrity": "sha512-2H2MrDD3ea7g707g1CNNLWb9/tYbmw7HS+MK2SDcgjxwzbOFR93JortelTIO8DBFsZqFtEpKNxiZfSyrGgYcbw==", 1135 | "requires": { 1136 | "fastify-plugin": "^4.0.0", 1137 | "mnemonist": "0.39.5" 1138 | } 1139 | }, 1140 | "@fastify/deepmerge": { 1141 | "version": "1.3.0", 1142 | "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", 1143 | "integrity": "sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==" 1144 | }, 1145 | "@fastify/error": { 1146 | "version": "3.2.0", 1147 | "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.2.0.tgz", 1148 | "integrity": "sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ==" 1149 | }, 1150 | "@fastify/fast-json-stringify-compiler": { 1151 | "version": "4.3.0", 1152 | "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", 1153 | "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", 1154 | "requires": { 1155 | "fast-json-stringify": "^5.7.0" 1156 | } 1157 | }, 1158 | "@fastify/formbody": { 1159 | "version": "7.4.0", 1160 | "resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-7.4.0.tgz", 1161 | "integrity": "sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==", 1162 | "requires": { 1163 | "fast-querystring": "^1.0.0", 1164 | "fastify-plugin": "^4.0.0" 1165 | } 1166 | }, 1167 | "@ioredis/commands": { 1168 | "version": "1.2.0", 1169 | "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", 1170 | "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" 1171 | }, 1172 | "@msgpackr-extract/msgpackr-extract-linux-x64": { 1173 | "version": "3.0.2", 1174 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", 1175 | "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", 1176 | "optional": true 1177 | }, 1178 | "abort-controller": { 1179 | "version": "3.0.0", 1180 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 1181 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 1182 | "requires": { 1183 | "event-target-shim": "^5.0.0" 1184 | } 1185 | }, 1186 | "abstract-logging": { 1187 | "version": "2.0.1", 1188 | "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", 1189 | "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" 1190 | }, 1191 | "ajv": { 1192 | "version": "8.12.0", 1193 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", 1194 | "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", 1195 | "requires": { 1196 | "fast-deep-equal": "^3.1.1", 1197 | "json-schema-traverse": "^1.0.0", 1198 | "require-from-string": "^2.0.2", 1199 | "uri-js": "^4.2.2" 1200 | } 1201 | }, 1202 | "ajv-formats": { 1203 | "version": "2.1.1", 1204 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", 1205 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", 1206 | "requires": { 1207 | "ajv": "^8.0.0" 1208 | } 1209 | }, 1210 | "archy": { 1211 | "version": "1.0.0", 1212 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 1213 | "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" 1214 | }, 1215 | "atomic-sleep": { 1216 | "version": "1.0.0", 1217 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 1218 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" 1219 | }, 1220 | "available-typed-arrays": { 1221 | "version": "1.0.5", 1222 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 1223 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" 1224 | }, 1225 | "avvio": { 1226 | "version": "8.2.1", 1227 | "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.1.tgz", 1228 | "integrity": "sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==", 1229 | "requires": { 1230 | "archy": "^1.0.0", 1231 | "debug": "^4.0.0", 1232 | "fastq": "^1.6.1" 1233 | } 1234 | }, 1235 | "aws-sdk": { 1236 | "version": "2.1360.0", 1237 | "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1360.0.tgz", 1238 | "integrity": "sha512-wW1CviH1s6bl5+wO+KM7aSc3yy6cQPJT85Fd4rQgrn0uwfjg9fx7KJ0FRhv+eU4DabkRjcSMlKo1IGhARmT6Tw==", 1239 | "requires": { 1240 | "buffer": "4.9.2", 1241 | "events": "1.1.1", 1242 | "ieee754": "1.1.13", 1243 | "jmespath": "0.16.0", 1244 | "querystring": "0.2.0", 1245 | "sax": "1.2.1", 1246 | "url": "0.10.3", 1247 | "util": "^0.12.4", 1248 | "uuid": "8.0.0", 1249 | "xml2js": "0.5.0" 1250 | }, 1251 | "dependencies": { 1252 | "uuid": { 1253 | "version": "8.0.0", 1254 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", 1255 | "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==" 1256 | } 1257 | } 1258 | }, 1259 | "base64-js": { 1260 | "version": "1.5.1", 1261 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1262 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1263 | }, 1264 | "buffer": { 1265 | "version": "4.9.2", 1266 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", 1267 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", 1268 | "requires": { 1269 | "base64-js": "^1.0.2", 1270 | "ieee754": "^1.1.4", 1271 | "isarray": "^1.0.0" 1272 | } 1273 | }, 1274 | "bull": { 1275 | "version": "4.10.4", 1276 | "resolved": "https://registry.npmjs.org/bull/-/bull-4.10.4.tgz", 1277 | "integrity": "sha512-o9m/7HjS/Or3vqRd59evBlWCXd9Lp+ALppKseoSKHaykK46SmRjAilX98PgmOz1yeVaurt8D5UtvEt4bUjM3eA==", 1278 | "requires": { 1279 | "cron-parser": "^4.2.1", 1280 | "debuglog": "^1.0.0", 1281 | "get-port": "^5.1.1", 1282 | "ioredis": "^5.0.0", 1283 | "lodash": "^4.17.21", 1284 | "msgpackr": "^1.5.2", 1285 | "semver": "^7.3.2", 1286 | "uuid": "^8.3.0" 1287 | } 1288 | }, 1289 | "call-bind": { 1290 | "version": "1.0.2", 1291 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1292 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1293 | "requires": { 1294 | "function-bind": "^1.1.1", 1295 | "get-intrinsic": "^1.0.2" 1296 | } 1297 | }, 1298 | "cluster-key-slot": { 1299 | "version": "1.1.2", 1300 | "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", 1301 | "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==" 1302 | }, 1303 | "cookie": { 1304 | "version": "0.5.0", 1305 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 1306 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 1307 | }, 1308 | "cron-parser": { 1309 | "version": "4.8.1", 1310 | "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.8.1.tgz", 1311 | "integrity": "sha512-jbokKWGcyU4gl6jAfX97E1gDpY12DJ1cLJZmoDzaAln/shZ+S3KBFBuA2Q6WeUN4gJf/8klnV1EfvhA2lK5IRQ==", 1312 | "requires": { 1313 | "luxon": "^3.2.1" 1314 | } 1315 | }, 1316 | "debug": { 1317 | "version": "4.3.4", 1318 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1319 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1320 | "requires": { 1321 | "ms": "2.1.2" 1322 | } 1323 | }, 1324 | "debuglog": { 1325 | "version": "1.0.1", 1326 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 1327 | "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==" 1328 | }, 1329 | "denque": { 1330 | "version": "2.1.0", 1331 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", 1332 | "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" 1333 | }, 1334 | "dotenv": { 1335 | "version": "16.0.3", 1336 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 1337 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" 1338 | }, 1339 | "event-target-shim": { 1340 | "version": "5.0.1", 1341 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1342 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 1343 | }, 1344 | "events": { 1345 | "version": "1.1.1", 1346 | "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", 1347 | "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==" 1348 | }, 1349 | "fast-content-type-parse": { 1350 | "version": "1.0.0", 1351 | "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.0.0.tgz", 1352 | "integrity": "sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA==" 1353 | }, 1354 | "fast-decode-uri-component": { 1355 | "version": "1.0.1", 1356 | "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", 1357 | "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" 1358 | }, 1359 | "fast-deep-equal": { 1360 | "version": "3.1.3", 1361 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1362 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1363 | }, 1364 | "fast-json-stringify": { 1365 | "version": "5.7.0", 1366 | "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz", 1367 | "integrity": "sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ==", 1368 | "requires": { 1369 | "@fastify/deepmerge": "^1.0.0", 1370 | "ajv": "^8.10.0", 1371 | "ajv-formats": "^2.1.1", 1372 | "fast-deep-equal": "^3.1.3", 1373 | "fast-uri": "^2.1.0", 1374 | "rfdc": "^1.2.0" 1375 | } 1376 | }, 1377 | "fast-querystring": { 1378 | "version": "1.1.1", 1379 | "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz", 1380 | "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==", 1381 | "requires": { 1382 | "fast-decode-uri-component": "^1.0.1" 1383 | } 1384 | }, 1385 | "fast-redact": { 1386 | "version": "3.1.2", 1387 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz", 1388 | "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==" 1389 | }, 1390 | "fast-uri": { 1391 | "version": "2.2.0", 1392 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.2.0.tgz", 1393 | "integrity": "sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg==" 1394 | }, 1395 | "fastify": { 1396 | "version": "4.17.0", 1397 | "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.17.0.tgz", 1398 | "integrity": "sha512-tzuY1tgWJo2Y6qEKwmLhFvACUmr68Io2pqP/sDKU71KRM6A6R3DrCDqLGqANbeLZcKUfdfY58ut35CGqemcTgg==", 1399 | "requires": { 1400 | "@fastify/ajv-compiler": "^3.5.0", 1401 | "@fastify/error": "^3.0.0", 1402 | "@fastify/fast-json-stringify-compiler": "^4.3.0", 1403 | "abstract-logging": "^2.0.1", 1404 | "avvio": "^8.2.0", 1405 | "fast-content-type-parse": "^1.0.0", 1406 | "fast-json-stringify": "^5.7.0", 1407 | "find-my-way": "^7.6.0", 1408 | "light-my-request": "^5.6.1", 1409 | "pino": "^8.5.0", 1410 | "process-warning": "^2.0.0", 1411 | "proxy-addr": "^2.0.7", 1412 | "rfdc": "^1.3.0", 1413 | "secure-json-parse": "^2.5.0", 1414 | "semver": "^7.3.7", 1415 | "tiny-lru": "^11.0.1" 1416 | } 1417 | }, 1418 | "fastify-plugin": { 1419 | "version": "4.5.0", 1420 | "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.0.tgz", 1421 | "integrity": "sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg==" 1422 | }, 1423 | "fastq": { 1424 | "version": "1.15.0", 1425 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1426 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1427 | "requires": { 1428 | "reusify": "^1.0.4" 1429 | } 1430 | }, 1431 | "find-my-way": { 1432 | "version": "7.6.0", 1433 | "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-7.6.0.tgz", 1434 | "integrity": "sha512-H7berWdHJ+5CNVr4ilLWPai4ml7Y2qAsxjw3pfeBxPigZmaDTzF0wjJLj90xRCmGcWYcyt050yN+34OZDJm1eQ==", 1435 | "requires": { 1436 | "fast-deep-equal": "^3.1.3", 1437 | "fast-querystring": "^1.0.0", 1438 | "safe-regex2": "^2.0.0" 1439 | } 1440 | }, 1441 | "for-each": { 1442 | "version": "0.3.3", 1443 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1444 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1445 | "requires": { 1446 | "is-callable": "^1.1.3" 1447 | } 1448 | }, 1449 | "forwarded": { 1450 | "version": "0.2.0", 1451 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1452 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 1453 | }, 1454 | "function-bind": { 1455 | "version": "1.1.1", 1456 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1457 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1458 | }, 1459 | "get-intrinsic": { 1460 | "version": "1.2.0", 1461 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 1462 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 1463 | "requires": { 1464 | "function-bind": "^1.1.1", 1465 | "has": "^1.0.3", 1466 | "has-symbols": "^1.0.3" 1467 | } 1468 | }, 1469 | "get-port": { 1470 | "version": "5.1.1", 1471 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", 1472 | "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" 1473 | }, 1474 | "gopd": { 1475 | "version": "1.0.1", 1476 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1477 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1478 | "requires": { 1479 | "get-intrinsic": "^1.1.3" 1480 | } 1481 | }, 1482 | "has": { 1483 | "version": "1.0.3", 1484 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1485 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1486 | "requires": { 1487 | "function-bind": "^1.1.1" 1488 | } 1489 | }, 1490 | "has-symbols": { 1491 | "version": "1.0.3", 1492 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1493 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 1494 | }, 1495 | "has-tostringtag": { 1496 | "version": "1.0.0", 1497 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1498 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1499 | "requires": { 1500 | "has-symbols": "^1.0.2" 1501 | } 1502 | }, 1503 | "ieee754": { 1504 | "version": "1.1.13", 1505 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1506 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" 1507 | }, 1508 | "inherits": { 1509 | "version": "2.0.4", 1510 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1511 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1512 | }, 1513 | "ioredis": { 1514 | "version": "5.3.1", 1515 | "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.1.tgz", 1516 | "integrity": "sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg==", 1517 | "requires": { 1518 | "@ioredis/commands": "^1.1.1", 1519 | "cluster-key-slot": "^1.1.0", 1520 | "debug": "^4.3.4", 1521 | "denque": "^2.1.0", 1522 | "lodash.defaults": "^4.2.0", 1523 | "lodash.isarguments": "^3.1.0", 1524 | "redis-errors": "^1.2.0", 1525 | "redis-parser": "^3.0.0", 1526 | "standard-as-callback": "^2.1.0" 1527 | } 1528 | }, 1529 | "ipaddr.js": { 1530 | "version": "1.9.1", 1531 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1532 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 1533 | }, 1534 | "is-arguments": { 1535 | "version": "1.1.1", 1536 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", 1537 | "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", 1538 | "requires": { 1539 | "call-bind": "^1.0.2", 1540 | "has-tostringtag": "^1.0.0" 1541 | } 1542 | }, 1543 | "is-callable": { 1544 | "version": "1.2.7", 1545 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1546 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" 1547 | }, 1548 | "is-generator-function": { 1549 | "version": "1.0.10", 1550 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", 1551 | "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", 1552 | "requires": { 1553 | "has-tostringtag": "^1.0.0" 1554 | } 1555 | }, 1556 | "is-typed-array": { 1557 | "version": "1.1.10", 1558 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 1559 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 1560 | "requires": { 1561 | "available-typed-arrays": "^1.0.5", 1562 | "call-bind": "^1.0.2", 1563 | "for-each": "^0.3.3", 1564 | "gopd": "^1.0.1", 1565 | "has-tostringtag": "^1.0.0" 1566 | } 1567 | }, 1568 | "isarray": { 1569 | "version": "1.0.0", 1570 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1571 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 1572 | }, 1573 | "jmespath": { 1574 | "version": "0.16.0", 1575 | "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", 1576 | "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==" 1577 | }, 1578 | "json-schema-traverse": { 1579 | "version": "1.0.0", 1580 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1581 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 1582 | }, 1583 | "light-my-request": { 1584 | "version": "5.9.1", 1585 | "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.9.1.tgz", 1586 | "integrity": "sha512-UT7pUk8jNCR1wR7w3iWfIjx32DiB2f3hFdQSOwy3/EPQ3n3VocyipUxcyRZR0ahoev+fky69uA+GejPa9KuHKg==", 1587 | "requires": { 1588 | "cookie": "^0.5.0", 1589 | "process-warning": "^2.0.0", 1590 | "set-cookie-parser": "^2.4.1" 1591 | } 1592 | }, 1593 | "lodash": { 1594 | "version": "4.17.21", 1595 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1596 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1597 | }, 1598 | "lodash.defaults": { 1599 | "version": "4.2.0", 1600 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 1601 | "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" 1602 | }, 1603 | "lodash.isarguments": { 1604 | "version": "3.1.0", 1605 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1606 | "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" 1607 | }, 1608 | "lru-cache": { 1609 | "version": "6.0.0", 1610 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1611 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1612 | "requires": { 1613 | "yallist": "^4.0.0" 1614 | } 1615 | }, 1616 | "luxon": { 1617 | "version": "3.3.0", 1618 | "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", 1619 | "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==" 1620 | }, 1621 | "mnemonist": { 1622 | "version": "0.39.5", 1623 | "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.5.tgz", 1624 | "integrity": "sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==", 1625 | "requires": { 1626 | "obliterator": "^2.0.1" 1627 | } 1628 | }, 1629 | "ms": { 1630 | "version": "2.1.2", 1631 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1632 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1633 | }, 1634 | "msgpackr": { 1635 | "version": "1.8.5", 1636 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", 1637 | "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", 1638 | "requires": { 1639 | "msgpackr-extract": "^3.0.1" 1640 | } 1641 | }, 1642 | "msgpackr-extract": { 1643 | "version": "3.0.2", 1644 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", 1645 | "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", 1646 | "optional": true, 1647 | "requires": { 1648 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", 1649 | "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", 1650 | "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", 1651 | "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", 1652 | "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", 1653 | "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2", 1654 | "node-gyp-build-optional-packages": "5.0.7" 1655 | } 1656 | }, 1657 | "node-gyp-build-optional-packages": { 1658 | "version": "5.0.7", 1659 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", 1660 | "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", 1661 | "optional": true 1662 | }, 1663 | "obliterator": { 1664 | "version": "2.0.4", 1665 | "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", 1666 | "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" 1667 | }, 1668 | "on-exit-leak-free": { 1669 | "version": "2.1.0", 1670 | "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", 1671 | "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" 1672 | }, 1673 | "pino": { 1674 | "version": "8.11.0", 1675 | "resolved": "https://registry.npmjs.org/pino/-/pino-8.11.0.tgz", 1676 | "integrity": "sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg==", 1677 | "requires": { 1678 | "atomic-sleep": "^1.0.0", 1679 | "fast-redact": "^3.1.1", 1680 | "on-exit-leak-free": "^2.1.0", 1681 | "pino-abstract-transport": "v1.0.0", 1682 | "pino-std-serializers": "^6.0.0", 1683 | "process-warning": "^2.0.0", 1684 | "quick-format-unescaped": "^4.0.3", 1685 | "real-require": "^0.2.0", 1686 | "safe-stable-stringify": "^2.3.1", 1687 | "sonic-boom": "^3.1.0", 1688 | "thread-stream": "^2.0.0" 1689 | } 1690 | }, 1691 | "pino-abstract-transport": { 1692 | "version": "1.0.0", 1693 | "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz", 1694 | "integrity": "sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==", 1695 | "requires": { 1696 | "readable-stream": "^4.0.0", 1697 | "split2": "^4.0.0" 1698 | }, 1699 | "dependencies": { 1700 | "buffer": { 1701 | "version": "6.0.3", 1702 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", 1703 | "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 1704 | "requires": { 1705 | "base64-js": "^1.3.1", 1706 | "ieee754": "^1.2.1" 1707 | } 1708 | }, 1709 | "events": { 1710 | "version": "3.3.0", 1711 | "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", 1712 | "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" 1713 | }, 1714 | "ieee754": { 1715 | "version": "1.2.1", 1716 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1717 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 1718 | }, 1719 | "readable-stream": { 1720 | "version": "4.3.0", 1721 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.3.0.tgz", 1722 | "integrity": "sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ==", 1723 | "requires": { 1724 | "abort-controller": "^3.0.0", 1725 | "buffer": "^6.0.3", 1726 | "events": "^3.3.0", 1727 | "process": "^0.11.10" 1728 | } 1729 | } 1730 | } 1731 | }, 1732 | "pino-std-serializers": { 1733 | "version": "6.2.0", 1734 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.0.tgz", 1735 | "integrity": "sha512-IWgSzUL8X1w4BIWTwErRgtV8PyOGOOi60uqv0oKuS/fOA8Nco/OeI6lBuc4dyP8MMfdFwyHqTMcBIA7nDiqEqA==" 1736 | }, 1737 | "process": { 1738 | "version": "0.11.10", 1739 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1740 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" 1741 | }, 1742 | "process-warning": { 1743 | "version": "2.2.0", 1744 | "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.2.0.tgz", 1745 | "integrity": "sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==" 1746 | }, 1747 | "proxy-addr": { 1748 | "version": "2.0.7", 1749 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1750 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1751 | "requires": { 1752 | "forwarded": "0.2.0", 1753 | "ipaddr.js": "1.9.1" 1754 | } 1755 | }, 1756 | "punycode": { 1757 | "version": "1.3.2", 1758 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 1759 | "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" 1760 | }, 1761 | "querystring": { 1762 | "version": "0.2.0", 1763 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 1764 | "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" 1765 | }, 1766 | "quick-format-unescaped": { 1767 | "version": "4.0.4", 1768 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 1769 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" 1770 | }, 1771 | "real-require": { 1772 | "version": "0.2.0", 1773 | "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", 1774 | "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" 1775 | }, 1776 | "redis-errors": { 1777 | "version": "1.2.0", 1778 | "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", 1779 | "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==" 1780 | }, 1781 | "redis-parser": { 1782 | "version": "3.0.0", 1783 | "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", 1784 | "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", 1785 | "requires": { 1786 | "redis-errors": "^1.0.0" 1787 | } 1788 | }, 1789 | "require-from-string": { 1790 | "version": "2.0.2", 1791 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1792 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 1793 | }, 1794 | "ret": { 1795 | "version": "0.2.2", 1796 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", 1797 | "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" 1798 | }, 1799 | "reusify": { 1800 | "version": "1.0.4", 1801 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1802 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 1803 | }, 1804 | "rfdc": { 1805 | "version": "1.3.0", 1806 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 1807 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" 1808 | }, 1809 | "safe-regex2": { 1810 | "version": "2.0.0", 1811 | "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", 1812 | "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", 1813 | "requires": { 1814 | "ret": "~0.2.0" 1815 | } 1816 | }, 1817 | "safe-stable-stringify": { 1818 | "version": "2.4.3", 1819 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", 1820 | "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" 1821 | }, 1822 | "sax": { 1823 | "version": "1.2.1", 1824 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", 1825 | "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" 1826 | }, 1827 | "secure-json-parse": { 1828 | "version": "2.7.0", 1829 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", 1830 | "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" 1831 | }, 1832 | "semver": { 1833 | "version": "7.3.8", 1834 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", 1835 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", 1836 | "requires": { 1837 | "lru-cache": "^6.0.0" 1838 | } 1839 | }, 1840 | "set-cookie-parser": { 1841 | "version": "2.6.0", 1842 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 1843 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" 1844 | }, 1845 | "sonic-boom": { 1846 | "version": "3.3.0", 1847 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", 1848 | "integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==", 1849 | "requires": { 1850 | "atomic-sleep": "^1.0.0" 1851 | } 1852 | }, 1853 | "split2": { 1854 | "version": "4.2.0", 1855 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", 1856 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" 1857 | }, 1858 | "standard-as-callback": { 1859 | "version": "2.1.0", 1860 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", 1861 | "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" 1862 | }, 1863 | "thread-stream": { 1864 | "version": "2.3.0", 1865 | "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", 1866 | "integrity": "sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA==", 1867 | "requires": { 1868 | "real-require": "^0.2.0" 1869 | } 1870 | }, 1871 | "tiny-lru": { 1872 | "version": "11.0.1", 1873 | "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.0.1.tgz", 1874 | "integrity": "sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg==" 1875 | }, 1876 | "uri-js": { 1877 | "version": "4.4.1", 1878 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1879 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1880 | "requires": { 1881 | "punycode": "^2.1.0" 1882 | }, 1883 | "dependencies": { 1884 | "punycode": { 1885 | "version": "2.3.0", 1886 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1887 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" 1888 | } 1889 | } 1890 | }, 1891 | "url": { 1892 | "version": "0.10.3", 1893 | "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", 1894 | "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", 1895 | "requires": { 1896 | "punycode": "1.3.2", 1897 | "querystring": "0.2.0" 1898 | } 1899 | }, 1900 | "util": { 1901 | "version": "0.12.5", 1902 | "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", 1903 | "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", 1904 | "requires": { 1905 | "inherits": "^2.0.3", 1906 | "is-arguments": "^1.0.4", 1907 | "is-generator-function": "^1.0.7", 1908 | "is-typed-array": "^1.1.3", 1909 | "which-typed-array": "^1.1.2" 1910 | } 1911 | }, 1912 | "uuid": { 1913 | "version": "8.3.2", 1914 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1915 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1916 | }, 1917 | "which-typed-array": { 1918 | "version": "1.1.9", 1919 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 1920 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 1921 | "requires": { 1922 | "available-typed-arrays": "^1.0.5", 1923 | "call-bind": "^1.0.2", 1924 | "for-each": "^0.3.3", 1925 | "gopd": "^1.0.1", 1926 | "has-tostringtag": "^1.0.0", 1927 | "is-typed-array": "^1.1.10" 1928 | } 1929 | }, 1930 | "xml2js": { 1931 | "version": "0.5.0", 1932 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", 1933 | "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", 1934 | "requires": { 1935 | "sax": ">=0.6.0", 1936 | "xmlbuilder": "~11.0.0" 1937 | } 1938 | }, 1939 | "xmlbuilder": { 1940 | "version": "11.0.1", 1941 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1942 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 1943 | }, 1944 | "yallist": { 1945 | "version": "4.0.0", 1946 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1947 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1948 | } 1949 | } 1950 | } 1951 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "banco-dados-avancado", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node src/index.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/guivahl/banco-dados-avancado.git" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC", 16 | "bugs": { 17 | "url": "https://github.com/guivahl/banco-dados-avancado/issues" 18 | }, 19 | "homepage": "https://github.com/guivahl/banco-dados-avancado#readme", 20 | "dependencies": { 21 | "@fastify/cors": "^8.2.1", 22 | "@fastify/formbody": "^7.4.0", 23 | "aws-sdk": "^2.1360.0", 24 | "bull": "^4.10.4", 25 | "dotenv": "^16.0.3", 26 | "fastify": "^4.17.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | const dotenv = require('dotenv'); 2 | const path = require('path'); 3 | 4 | const envPath = path.resolve(__dirname, '../.env'); 5 | 6 | dotenv.config({ 7 | path: envPath, 8 | }); 9 | 10 | module.exports = { 11 | AWS_ACCESS_KEY: process.env.AWS_ACCESS_KEY, 12 | AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY, 13 | AWS_REGION: process.env.AWS_REGION, 14 | AWS_API_VERSION: process.env.AWS_API_VERSION, 15 | REDIS_HOST: process.env.REDIS_HOST, 16 | REDIS_PORT: process.env.REDIS_PORT, 17 | EMAIL_FROM: process.env.EMAIL_FROM 18 | }; 19 | -------------------------------------------------------------------------------- /src/controllers/EmailController.js: -------------------------------------------------------------------------------- 1 | const MailQueue = require("../queue/MailQueue"); 2 | 3 | async function sendEmail(request, reply){ 4 | const { 5 | email, 6 | firstName, 7 | lastName 8 | } = request.body 9 | 10 | const template = ` 11 | Olá ${firstName} ${lastName}, sua assinatura foi confirmada! 12 | Para acessar seus recursos exclusivos você precisa basta clicar aqui. 13 | ` 14 | 15 | try { 16 | await MailQueue.add({ 17 | to: email, 18 | from: process.env.EMAIL_FROM, 19 | subject: "Assinatura Confirmada", 20 | text: template 21 | }) 22 | return reply.code(200).send(); 23 | } catch { 24 | return reply.code(500).send("Internal Server Error"); 25 | } 26 | } 27 | 28 | module.exports = { 29 | sendEmail 30 | } -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const fastify = require("fastify"); 2 | const EmailRoutes = require("./routes/email"); 3 | const cors = require("@fastify/cors"); 4 | const formBody = require("@fastify/formbody"); 5 | 6 | const server = fastify(); 7 | 8 | const corsOptions = { 9 | credentials: true, 10 | origin: /localhost\:5173/, 11 | } 12 | server.register(cors, corsOptions); 13 | server.register(formBody); 14 | 15 | server.register(EmailRoutes); 16 | 17 | server.listen({ 18 | port: process.env.PORT || 3200 19 | }) -------------------------------------------------------------------------------- /src/queue/MailQueue.js: -------------------------------------------------------------------------------- 1 | const Queue = require("bull"); 2 | const EmailService = require("../services/EmailService"); 3 | 4 | const { 5 | REDIS_HOST, 6 | REDIS_PORT 7 | } = require("../config"); 8 | 9 | class MailQueue { 10 | constructor() { 11 | this.queue = new Queue("mailer", { 12 | redis: { 13 | host: REDIS_HOST, 14 | port: REDIS_PORT, 15 | }, 16 | }); 17 | 18 | this.queue.process((job) => EmailService.send(job.data)); 19 | } 20 | 21 | async add(job) { 22 | await this.queue.add(job); 23 | } 24 | 25 | } 26 | 27 | module.exports = new MailQueue(); 28 | -------------------------------------------------------------------------------- /src/routes/email.js: -------------------------------------------------------------------------------- 1 | const emailController = require("../controllers/EmailController"); 2 | 3 | async function EmailRoutes(server){ 4 | server.post("/send", emailController.sendEmail) 5 | } 6 | 7 | module.exports = EmailRoutes; -------------------------------------------------------------------------------- /src/services/EmailService.js: -------------------------------------------------------------------------------- 1 | const AWS = require("aws-sdk"); 2 | 3 | /* 4 | A linha abaixo é necessária para remover mensagem do pacote da AWS sugerindo a 5 | migração da versão do pacote 'aws-sdk' para v3. 6 | */ 7 | require('aws-sdk/lib/maintenance_mode_message').suppress = true; 8 | 9 | const { 10 | AWS_ACCESS_KEY, 11 | AWS_SECRET_ACCESS_KEY, 12 | AWS_REGION, 13 | AWS_API_VERSION, 14 | } = require("../config"); 15 | 16 | class EmailService { 17 | constructor() { 18 | this.service = new AWS.SES({ 19 | region: AWS_REGION, 20 | accessKeyId: AWS_ACCESS_KEY, 21 | secretAccessKey: AWS_SECRET_ACCESS_KEY, 22 | apiVersion: AWS_API_VERSION, 23 | }); 24 | } 25 | 26 | async send({ from, to, subject, text }) { 27 | const params = { 28 | Source: from, 29 | Destination: { 30 | ToAddresses: [to], 31 | }, 32 | Message: { 33 | Body: { 34 | Text: { 35 | Charset: "UTF-8", 36 | Data: text, 37 | }, 38 | }, 39 | Subject: { 40 | Charset: "UTF-8", 41 | Data: subject, 42 | }, 43 | }, 44 | }; 45 | 46 | await this.service 47 | .sendEmail(params) 48 | .promise() 49 | .then(() => { 50 | console.log("E-mail enviado com sucesso!"); 51 | }) 52 | .catch(() => { 53 | console.error("Falha no envio de e-mail!"); 54 | }); 55 | } 56 | } 57 | 58 | module.exports = new EmailService(); 59 | --------------------------------------------------------------------------------