├── .github └── workflows │ ├── main.yml │ ├── publish.yaml │ └── size.yml ├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src └── index.ts └── tsconfig.json /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | jobs: 4 | build: 5 | name: Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} 6 | 7 | runs-on: ${{ matrix.os }} 8 | strategy: 9 | matrix: 10 | node: ["14.x", "16.x"] 11 | os: [ubuntu-latest, windows-latest, macOS-latest] 12 | 13 | steps: 14 | - name: Checkout repo 15 | uses: actions/checkout@v2 16 | 17 | - name: Use Node ${{ matrix.node }} 18 | uses: actions/setup-node@v1 19 | with: 20 | node-version: ${{ matrix.node }} 21 | 22 | - name: Install deps and build (with cache) 23 | uses: bahmutov/npm-install@v1 24 | 25 | - name: Lint 26 | run: yarn lint 27 | 28 | - name: Test 29 | run: yarn test --ci --coverage --maxWorkers=2 30 | 31 | - name: Build 32 | run: yarn build 33 | -------------------------------------------------------------------------------- /.github/workflows/publish.yaml: -------------------------------------------------------------------------------- 1 | name: publish 2 | on: 3 | release: 4 | types: ["published"] 5 | 6 | jobs: 7 | publish: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v1 11 | - uses: actions/setup-node@v1 12 | with: 13 | node-version: 16 14 | registry-url: https://registry.npmjs.org/ 15 | - run: npm ci 16 | - run: npm run build 17 | - run: npm publish --access public 18 | env: 19 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 20 | -------------------------------------------------------------------------------- /.github/workflows/size.yml: -------------------------------------------------------------------------------- 1 | name: size 2 | on: [pull_request] 3 | jobs: 4 | size: 5 | runs-on: ubuntu-latest 6 | env: 7 | CI_JOB_NUMBER: 1 8 | steps: 9 | - uses: actions/checkout@v1 10 | - uses: andresz1/size-limit-action@v1 11 | with: 12 | github_token: ${{ secrets.GITHUB_TOKEN }} 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | \dist 2 | \node_modules 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 JonasHiltl 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fastify Queue 2 | 3 | Plugin to easily intergrate BullMQ into fastify through file based Queue/Worker creation. 4 | 5 | ## Install 6 | 7 | ``` 8 | npm i fastify-queue 9 | npm i bullmq 10 | ``` 11 | 12 | ## Usage 13 | 14 | ```typescript 15 | import fp from 'fastify-plugin'; 16 | import queue, { FastifyQueueOptions } from 'fastify-queue'; 17 | import * as IORedis from 'ioredis'; 18 | 19 | export default fp(async (fastify, opts) => { 20 | const connection = new IORedis({ 21 | maxRetriesPerRequest: null, 22 | enableReadyCheck: false, 23 | }); 24 | 25 | fastify.register(queue, { 26 | bullPath: '*/bull/**/*.js', 27 | connection: connection, 28 | }); 29 | }); 30 | ``` 31 | 32 | #### Specify `bullPath` 33 | 34 | The `bullPath` is a glob path and it specifies in which directory your worker functions and queues can be found. 35 | 36 | For example with the folder structure below, we would create a `Queue` with the name of `user` and `auth`. 37 | 38 | ``` 39 | src 40 | - bull 41 | - user 42 | profile.worker.ts 43 | - auth 44 | auth.worker.ts 45 | ``` 46 | 47 | The name of the file inside the subdiretories is irrelevant. The name of the Queue is based on the subdirectories name. 48 | 49 | If the file inside the subdiretories do not export a default function, it will just create a `Queue` with the name of the subdiretory. If a defualt function export exists it will be used as the `Worker`. 50 | 51 | ## Worker Function 52 | 53 | This is an example for a Worker function that accepts a fastify instance and a `BullMQ` job. Needs to be the default export. 54 | 55 | ```typescript 56 | import { FastifyInstance } from 'fastify'; 57 | import { Job } from 'bullmq'; 58 | 59 | interface AuthData { 60 | id: string; 61 | username?: string; 62 | email?: string; 63 | } 64 | 65 | const authWorker = async ( 66 | fastify: FastifyInstance, 67 | job: Job 68 | ) => { 69 | const { id, email, username } = job.data; 70 | 71 | switch (job.name) { 72 | case 'create': 73 | break; 74 | case 'update': 75 | // handle jobs based on job name 76 | break; 77 | case 'delete': 78 | break; 79 | default: 80 | break; 81 | } 82 | }; 83 | 84 | export default authWorker; 85 | ``` 86 | 87 | ### Queue & Worker Options 88 | 89 | You can export two addittional variables besides your Worker Function named `queueConfig` and `workerConfig`. They are of type [QueueOptions](https://github.com/taskforcesh/bullmq/blob/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369/docs/gitbook/api/bullmq.queueoptions.md) and [WorkerOptions](https://github.com/taskforcesh/bullmq/blob/dd7efc3390e4a9a90f1b3ee0c3e3c74deb1f0369/docs/gitbook/api/bullmq.workeroptions.md) and if exist, can be used to configure addtional options supported by `BullMQ`. 90 | 91 | ```typescript 92 | export const queueConfig: QueueOptions = { 93 | defaultJobOptions: { 94 | removeOnComplete: true, 95 | }, 96 | }; 97 | 98 | export const workerConfig: WorkerOptions = { 99 | autorun: true, 100 | // connection would override default connection defined in plugin options 101 | }; 102 | ``` 103 | 104 | ## Typescript 105 | 106 | In order to have typing for the fastify instance, you should follow the example below: 107 | This is the typing for the folder structure above if each file exports a worker function 108 | 109 | ```typescript 110 | declare module 'fastify' { 111 | export interface FastifyInstance { 112 | queues: { 113 | profile: Queue; 114 | auth: Queue; 115 | }; 116 | workers: { 117 | profile: Queue; 118 | auth: Worker; 119 | }; 120 | } 121 | } 122 | ``` 123 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fastify-queue", 3 | "version": "1.2.7", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "fastify-queue", 9 | "version": "1.2.7", 10 | "license": "MIT", 11 | "dependencies": { 12 | "fast-glob": "^3.2.7", 13 | "fastify-plugin": "^3.0.0" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "^16.11.12", 17 | "fastify": "^3.24.1", 18 | "typescript": "^4.5.2" 19 | }, 20 | "peerDependencies": { 21 | "bullmq": "^1.59.4", 22 | "fastify": ">=3.24.1" 23 | } 24 | }, 25 | "node_modules/@fastify/ajv-compiler": { 26 | "version": "1.1.0", 27 | "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz", 28 | "integrity": "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==", 29 | "dev": true, 30 | "dependencies": { 31 | "ajv": "^6.12.6" 32 | } 33 | }, 34 | "node_modules/@nodelib/fs.scandir": { 35 | "version": "2.1.5", 36 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 37 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 38 | "dependencies": { 39 | "@nodelib/fs.stat": "2.0.5", 40 | "run-parallel": "^1.1.9" 41 | }, 42 | "engines": { 43 | "node": ">= 8" 44 | } 45 | }, 46 | "node_modules/@nodelib/fs.stat": { 47 | "version": "2.0.5", 48 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 49 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 50 | "engines": { 51 | "node": ">= 8" 52 | } 53 | }, 54 | "node_modules/@nodelib/fs.walk": { 55 | "version": "1.2.8", 56 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 57 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 58 | "dependencies": { 59 | "@nodelib/fs.scandir": "2.1.5", 60 | "fastq": "^1.6.0" 61 | }, 62 | "engines": { 63 | "node": ">= 8" 64 | } 65 | }, 66 | "node_modules/@types/node": { 67 | "version": "16.11.12", 68 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", 69 | "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", 70 | "dev": true 71 | }, 72 | "node_modules/abstract-logging": { 73 | "version": "2.0.1", 74 | "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", 75 | "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", 76 | "dev": true 77 | }, 78 | "node_modules/ajv": { 79 | "version": "6.12.6", 80 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 81 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 82 | "dev": true, 83 | "dependencies": { 84 | "fast-deep-equal": "^3.1.1", 85 | "fast-json-stable-stringify": "^2.0.0", 86 | "json-schema-traverse": "^0.4.1", 87 | "uri-js": "^4.2.2" 88 | }, 89 | "funding": { 90 | "type": "github", 91 | "url": "https://github.com/sponsors/epoberezkin" 92 | } 93 | }, 94 | "node_modules/archy": { 95 | "version": "1.0.0", 96 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 97 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", 98 | "dev": true 99 | }, 100 | "node_modules/atomic-sleep": { 101 | "version": "1.0.0", 102 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 103 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 104 | "dev": true, 105 | "engines": { 106 | "node": ">=8.0.0" 107 | } 108 | }, 109 | "node_modules/avvio": { 110 | "version": "7.2.2", 111 | "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", 112 | "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", 113 | "dev": true, 114 | "dependencies": { 115 | "archy": "^1.0.0", 116 | "debug": "^4.0.0", 117 | "fastq": "^1.6.1", 118 | "queue-microtask": "^1.1.2" 119 | } 120 | }, 121 | "node_modules/balanced-match": { 122 | "version": "1.0.2", 123 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 124 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 125 | "peer": true 126 | }, 127 | "node_modules/brace-expansion": { 128 | "version": "1.1.11", 129 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 130 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 131 | "peer": true, 132 | "dependencies": { 133 | "balanced-match": "^1.0.0", 134 | "concat-map": "0.0.1" 135 | } 136 | }, 137 | "node_modules/braces": { 138 | "version": "3.0.2", 139 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 140 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 141 | "dependencies": { 142 | "fill-range": "^7.0.1" 143 | }, 144 | "engines": { 145 | "node": ">=8" 146 | } 147 | }, 148 | "node_modules/bullmq": { 149 | "version": "1.59.4", 150 | "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-1.59.4.tgz", 151 | "integrity": "sha512-QbKCOtHFVJtNSV96BG6aAGBafDD5nElzHif+Cc5Av/X4yltgOuYxGDL1q3SSAwYeetapX5bUABVR9icQGcGWZQ==", 152 | "peer": true, 153 | "dependencies": { 154 | "cron-parser": "^2.18.0", 155 | "get-port": "^5.1.1", 156 | "glob": "^7.2.0", 157 | "ioredis": "^4.28.2", 158 | "lodash": "^4.17.21", 159 | "msgpackr": "^1.4.6", 160 | "semver": "^6.3.0", 161 | "tslib": "^1.14.1", 162 | "uuid": "^8.3.2" 163 | } 164 | }, 165 | "node_modules/call-bind": { 166 | "version": "1.0.2", 167 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 168 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 169 | "peer": true, 170 | "dependencies": { 171 | "function-bind": "^1.1.1", 172 | "get-intrinsic": "^1.0.2" 173 | }, 174 | "funding": { 175 | "url": "https://github.com/sponsors/ljharb" 176 | } 177 | }, 178 | "node_modules/cluster-key-slot": { 179 | "version": "1.1.0", 180 | "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", 181 | "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", 182 | "peer": true, 183 | "engines": { 184 | "node": ">=0.10.0" 185 | } 186 | }, 187 | "node_modules/concat-map": { 188 | "version": "0.0.1", 189 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 190 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 191 | "peer": true 192 | }, 193 | "node_modules/cookie": { 194 | "version": "0.4.1", 195 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 196 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", 197 | "dev": true, 198 | "engines": { 199 | "node": ">= 0.6" 200 | } 201 | }, 202 | "node_modules/cron-parser": { 203 | "version": "2.18.0", 204 | "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz", 205 | "integrity": "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==", 206 | "peer": true, 207 | "dependencies": { 208 | "is-nan": "^1.3.0", 209 | "moment-timezone": "^0.5.31" 210 | }, 211 | "engines": { 212 | "node": ">=0.8" 213 | } 214 | }, 215 | "node_modules/debug": { 216 | "version": "4.3.3", 217 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 218 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 219 | "dependencies": { 220 | "ms": "2.1.2" 221 | }, 222 | "engines": { 223 | "node": ">=6.0" 224 | }, 225 | "peerDependenciesMeta": { 226 | "supports-color": { 227 | "optional": true 228 | } 229 | } 230 | }, 231 | "node_modules/deepmerge": { 232 | "version": "4.2.2", 233 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 234 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 235 | "dev": true, 236 | "engines": { 237 | "node": ">=0.10.0" 238 | } 239 | }, 240 | "node_modules/define-properties": { 241 | "version": "1.1.3", 242 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 243 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 244 | "peer": true, 245 | "dependencies": { 246 | "object-keys": "^1.0.12" 247 | }, 248 | "engines": { 249 | "node": ">= 0.4" 250 | } 251 | }, 252 | "node_modules/denque": { 253 | "version": "1.5.1", 254 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", 255 | "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", 256 | "peer": true, 257 | "engines": { 258 | "node": ">=0.10" 259 | } 260 | }, 261 | "node_modules/fast-decode-uri-component": { 262 | "version": "1.0.1", 263 | "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", 264 | "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", 265 | "dev": true 266 | }, 267 | "node_modules/fast-deep-equal": { 268 | "version": "3.1.3", 269 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 270 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 271 | "dev": true 272 | }, 273 | "node_modules/fast-glob": { 274 | "version": "3.2.7", 275 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 276 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 277 | "dependencies": { 278 | "@nodelib/fs.stat": "^2.0.2", 279 | "@nodelib/fs.walk": "^1.2.3", 280 | "glob-parent": "^5.1.2", 281 | "merge2": "^1.3.0", 282 | "micromatch": "^4.0.4" 283 | }, 284 | "engines": { 285 | "node": ">=8" 286 | } 287 | }, 288 | "node_modules/fast-json-stable-stringify": { 289 | "version": "2.1.0", 290 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 291 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 292 | "dev": true 293 | }, 294 | "node_modules/fast-json-stringify": { 295 | "version": "2.7.12", 296 | "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.12.tgz", 297 | "integrity": "sha512-4hjwZDPmgj/ZUKXhEWovGPciE/5mWtAIQQxN+2VBDFun7DRTk2oOItbu9ZZp6kqj+eZ/u7z+dgBgM74cfGRnBQ==", 298 | "dev": true, 299 | "dependencies": { 300 | "ajv": "^6.11.0", 301 | "deepmerge": "^4.2.2", 302 | "rfdc": "^1.2.0", 303 | "string-similarity": "^4.0.1" 304 | }, 305 | "engines": { 306 | "node": ">= 10.0.0" 307 | } 308 | }, 309 | "node_modules/fast-redact": { 310 | "version": "3.0.2", 311 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", 312 | "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", 313 | "dev": true, 314 | "engines": { 315 | "node": ">=6" 316 | } 317 | }, 318 | "node_modules/fast-safe-stringify": { 319 | "version": "2.1.1", 320 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 321 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 322 | "dev": true 323 | }, 324 | "node_modules/fastify": { 325 | "version": "3.24.1", 326 | "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.24.1.tgz", 327 | "integrity": "sha512-ZL0V6u37d65tAY8lMwVMFtFvnEeJcG80QBNSdChqCm4i4x+is/38OU14gzJuRXhpenTL+pTJzNcu5Kn1ouzM3Q==", 328 | "dev": true, 329 | "dependencies": { 330 | "@fastify/ajv-compiler": "^1.0.0", 331 | "abstract-logging": "^2.0.0", 332 | "avvio": "^7.1.2", 333 | "fast-json-stringify": "^2.5.2", 334 | "fastify-error": "^0.3.0", 335 | "fastify-warning": "^0.2.0", 336 | "find-my-way": "^4.1.0", 337 | "flatstr": "^1.0.12", 338 | "light-my-request": "^4.2.0", 339 | "pino": "^6.13.0", 340 | "proxy-addr": "^2.0.7", 341 | "rfdc": "^1.1.4", 342 | "secure-json-parse": "^2.0.0", 343 | "semver": "^7.3.2", 344 | "tiny-lru": "^7.0.0" 345 | } 346 | }, 347 | "node_modules/fastify-error": { 348 | "version": "0.3.1", 349 | "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz", 350 | "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==", 351 | "dev": true 352 | }, 353 | "node_modules/fastify-plugin": { 354 | "version": "3.0.0", 355 | "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", 356 | "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" 357 | }, 358 | "node_modules/fastify-warning": { 359 | "version": "0.2.0", 360 | "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", 361 | "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==", 362 | "dev": true 363 | }, 364 | "node_modules/fastify/node_modules/semver": { 365 | "version": "7.3.5", 366 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 367 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 368 | "dev": true, 369 | "dependencies": { 370 | "lru-cache": "^6.0.0" 371 | }, 372 | "bin": { 373 | "semver": "bin/semver.js" 374 | }, 375 | "engines": { 376 | "node": ">=10" 377 | } 378 | }, 379 | "node_modules/fastq": { 380 | "version": "1.13.0", 381 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 382 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 383 | "dependencies": { 384 | "reusify": "^1.0.4" 385 | } 386 | }, 387 | "node_modules/fill-range": { 388 | "version": "7.0.1", 389 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 390 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 391 | "dependencies": { 392 | "to-regex-range": "^5.0.1" 393 | }, 394 | "engines": { 395 | "node": ">=8" 396 | } 397 | }, 398 | "node_modules/find-my-way": { 399 | "version": "4.4.0", 400 | "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.4.0.tgz", 401 | "integrity": "sha512-hpntHvK0iOHp3pqWRRUEzioar4tp8euBD8DkPG3VauOriZLgwGZLTNp6yZSrdctJ8RCDS7zhZSR2V+yOaBbNow==", 402 | "dev": true, 403 | "dependencies": { 404 | "fast-decode-uri-component": "^1.0.1", 405 | "fast-deep-equal": "^3.1.3", 406 | "safe-regex2": "^2.0.0", 407 | "semver-store": "^0.3.0" 408 | }, 409 | "engines": { 410 | "node": ">=10" 411 | } 412 | }, 413 | "node_modules/flatstr": { 414 | "version": "1.0.12", 415 | "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", 416 | "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", 417 | "dev": true 418 | }, 419 | "node_modules/forwarded": { 420 | "version": "0.2.0", 421 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 422 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 423 | "dev": true, 424 | "engines": { 425 | "node": ">= 0.6" 426 | } 427 | }, 428 | "node_modules/fs.realpath": { 429 | "version": "1.0.0", 430 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 431 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 432 | "peer": true 433 | }, 434 | "node_modules/function-bind": { 435 | "version": "1.1.1", 436 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 437 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 438 | "peer": true 439 | }, 440 | "node_modules/get-intrinsic": { 441 | "version": "1.1.1", 442 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 443 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 444 | "peer": true, 445 | "dependencies": { 446 | "function-bind": "^1.1.1", 447 | "has": "^1.0.3", 448 | "has-symbols": "^1.0.1" 449 | }, 450 | "funding": { 451 | "url": "https://github.com/sponsors/ljharb" 452 | } 453 | }, 454 | "node_modules/get-port": { 455 | "version": "5.1.1", 456 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", 457 | "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", 458 | "peer": true, 459 | "engines": { 460 | "node": ">=8" 461 | }, 462 | "funding": { 463 | "url": "https://github.com/sponsors/sindresorhus" 464 | } 465 | }, 466 | "node_modules/glob": { 467 | "version": "7.2.0", 468 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 469 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 470 | "peer": true, 471 | "dependencies": { 472 | "fs.realpath": "^1.0.0", 473 | "inflight": "^1.0.4", 474 | "inherits": "2", 475 | "minimatch": "^3.0.4", 476 | "once": "^1.3.0", 477 | "path-is-absolute": "^1.0.0" 478 | }, 479 | "engines": { 480 | "node": "*" 481 | }, 482 | "funding": { 483 | "url": "https://github.com/sponsors/isaacs" 484 | } 485 | }, 486 | "node_modules/glob-parent": { 487 | "version": "5.1.2", 488 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 489 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 490 | "dependencies": { 491 | "is-glob": "^4.0.1" 492 | }, 493 | "engines": { 494 | "node": ">= 6" 495 | } 496 | }, 497 | "node_modules/has": { 498 | "version": "1.0.3", 499 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 500 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 501 | "peer": true, 502 | "dependencies": { 503 | "function-bind": "^1.1.1" 504 | }, 505 | "engines": { 506 | "node": ">= 0.4.0" 507 | } 508 | }, 509 | "node_modules/has-symbols": { 510 | "version": "1.0.2", 511 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 512 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 513 | "peer": true, 514 | "engines": { 515 | "node": ">= 0.4" 516 | }, 517 | "funding": { 518 | "url": "https://github.com/sponsors/ljharb" 519 | } 520 | }, 521 | "node_modules/inflight": { 522 | "version": "1.0.6", 523 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 524 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 525 | "peer": true, 526 | "dependencies": { 527 | "once": "^1.3.0", 528 | "wrappy": "1" 529 | } 530 | }, 531 | "node_modules/inherits": { 532 | "version": "2.0.4", 533 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 534 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 535 | "peer": true 536 | }, 537 | "node_modules/ioredis": { 538 | "version": "4.28.2", 539 | "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.2.tgz", 540 | "integrity": "sha512-kQ+Iv7+c6HsDdPP2XUHaMv8DhnSeAeKEwMbaoqsXYbO+03dItXt7+5jGQDRyjdRUV2rFJbzg7P4Qt1iX2tqkOg==", 541 | "peer": true, 542 | "dependencies": { 543 | "cluster-key-slot": "^1.1.0", 544 | "debug": "^4.3.1", 545 | "denque": "^1.1.0", 546 | "lodash.defaults": "^4.2.0", 547 | "lodash.flatten": "^4.4.0", 548 | "lodash.isarguments": "^3.1.0", 549 | "p-map": "^2.1.0", 550 | "redis-commands": "1.7.0", 551 | "redis-errors": "^1.2.0", 552 | "redis-parser": "^3.0.0", 553 | "standard-as-callback": "^2.1.0" 554 | }, 555 | "engines": { 556 | "node": ">=6" 557 | }, 558 | "funding": { 559 | "type": "opencollective", 560 | "url": "https://opencollective.com/ioredis" 561 | } 562 | }, 563 | "node_modules/ipaddr.js": { 564 | "version": "1.9.1", 565 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 566 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 567 | "dev": true, 568 | "engines": { 569 | "node": ">= 0.10" 570 | } 571 | }, 572 | "node_modules/is-extglob": { 573 | "version": "2.1.1", 574 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 575 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 576 | "engines": { 577 | "node": ">=0.10.0" 578 | } 579 | }, 580 | "node_modules/is-glob": { 581 | "version": "4.0.3", 582 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 583 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 584 | "dependencies": { 585 | "is-extglob": "^2.1.1" 586 | }, 587 | "engines": { 588 | "node": ">=0.10.0" 589 | } 590 | }, 591 | "node_modules/is-nan": { 592 | "version": "1.3.2", 593 | "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", 594 | "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", 595 | "peer": true, 596 | "dependencies": { 597 | "call-bind": "^1.0.0", 598 | "define-properties": "^1.1.3" 599 | }, 600 | "engines": { 601 | "node": ">= 0.4" 602 | }, 603 | "funding": { 604 | "url": "https://github.com/sponsors/ljharb" 605 | } 606 | }, 607 | "node_modules/is-number": { 608 | "version": "7.0.0", 609 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 610 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 611 | "engines": { 612 | "node": ">=0.12.0" 613 | } 614 | }, 615 | "node_modules/json-schema-traverse": { 616 | "version": "0.4.1", 617 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 618 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 619 | "dev": true 620 | }, 621 | "node_modules/light-my-request": { 622 | "version": "4.7.0", 623 | "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.7.0.tgz", 624 | "integrity": "sha512-LTa8YZp3K2AUpqUnwwKajoIHcsKOBnzwJNQSrk7unziPwo6CjOYjyO0F9wfkxFvP+nBsCGe3eMPnedVgIIgdAw==", 625 | "dev": true, 626 | "dependencies": { 627 | "ajv": "^8.1.0", 628 | "cookie": "^0.4.0", 629 | "fastify-warning": "^0.2.0", 630 | "set-cookie-parser": "^2.4.1" 631 | } 632 | }, 633 | "node_modules/light-my-request/node_modules/ajv": { 634 | "version": "8.8.2", 635 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", 636 | "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", 637 | "dev": true, 638 | "dependencies": { 639 | "fast-deep-equal": "^3.1.1", 640 | "json-schema-traverse": "^1.0.0", 641 | "require-from-string": "^2.0.2", 642 | "uri-js": "^4.2.2" 643 | }, 644 | "funding": { 645 | "type": "github", 646 | "url": "https://github.com/sponsors/epoberezkin" 647 | } 648 | }, 649 | "node_modules/light-my-request/node_modules/json-schema-traverse": { 650 | "version": "1.0.0", 651 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 652 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 653 | "dev": true 654 | }, 655 | "node_modules/lodash": { 656 | "version": "4.17.21", 657 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 658 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 659 | "peer": true 660 | }, 661 | "node_modules/lodash.defaults": { 662 | "version": "4.2.0", 663 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 664 | "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", 665 | "peer": true 666 | }, 667 | "node_modules/lodash.flatten": { 668 | "version": "4.4.0", 669 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 670 | "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", 671 | "peer": true 672 | }, 673 | "node_modules/lodash.isarguments": { 674 | "version": "3.1.0", 675 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 676 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 677 | "peer": true 678 | }, 679 | "node_modules/lru-cache": { 680 | "version": "6.0.0", 681 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 682 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 683 | "dev": true, 684 | "dependencies": { 685 | "yallist": "^4.0.0" 686 | }, 687 | "engines": { 688 | "node": ">=10" 689 | } 690 | }, 691 | "node_modules/merge2": { 692 | "version": "1.4.1", 693 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 694 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 695 | "engines": { 696 | "node": ">= 8" 697 | } 698 | }, 699 | "node_modules/micromatch": { 700 | "version": "4.0.4", 701 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 702 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 703 | "dependencies": { 704 | "braces": "^3.0.1", 705 | "picomatch": "^2.2.3" 706 | }, 707 | "engines": { 708 | "node": ">=8.6" 709 | } 710 | }, 711 | "node_modules/minimatch": { 712 | "version": "3.0.4", 713 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 714 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 715 | "peer": true, 716 | "dependencies": { 717 | "brace-expansion": "^1.1.7" 718 | }, 719 | "engines": { 720 | "node": "*" 721 | } 722 | }, 723 | "node_modules/moment": { 724 | "version": "2.29.1", 725 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 726 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", 727 | "peer": true, 728 | "engines": { 729 | "node": "*" 730 | } 731 | }, 732 | "node_modules/moment-timezone": { 733 | "version": "0.5.34", 734 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", 735 | "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", 736 | "peer": true, 737 | "dependencies": { 738 | "moment": ">= 2.9.0" 739 | }, 740 | "engines": { 741 | "node": "*" 742 | } 743 | }, 744 | "node_modules/ms": { 745 | "version": "2.1.2", 746 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 747 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 748 | }, 749 | "node_modules/msgpackr": { 750 | "version": "1.5.2", 751 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.2.tgz", 752 | "integrity": "sha512-OCguCkbG34x1ddO4vAzEm/4J1GTo512k9SoxV8K+EGfI/onFdpemRf0HpsVRFpxadXr4JBFgHsQUitgTlw7ZYQ==", 753 | "peer": true, 754 | "optionalDependencies": { 755 | "msgpackr-extract": "^1.0.14" 756 | } 757 | }, 758 | "node_modules/msgpackr-extract": { 759 | "version": "1.0.16", 760 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-1.0.16.tgz", 761 | "integrity": "sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA==", 762 | "hasInstallScript": true, 763 | "optional": true, 764 | "peer": true, 765 | "dependencies": { 766 | "nan": "^2.14.2", 767 | "node-gyp-build": "^4.2.3" 768 | } 769 | }, 770 | "node_modules/nan": { 771 | "version": "2.15.0", 772 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 773 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", 774 | "optional": true, 775 | "peer": true 776 | }, 777 | "node_modules/node-gyp-build": { 778 | "version": "4.3.0", 779 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", 780 | "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", 781 | "optional": true, 782 | "peer": true, 783 | "bin": { 784 | "node-gyp-build": "bin.js", 785 | "node-gyp-build-optional": "optional.js", 786 | "node-gyp-build-test": "build-test.js" 787 | } 788 | }, 789 | "node_modules/object-keys": { 790 | "version": "1.1.1", 791 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 792 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 793 | "peer": true, 794 | "engines": { 795 | "node": ">= 0.4" 796 | } 797 | }, 798 | "node_modules/once": { 799 | "version": "1.4.0", 800 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 801 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 802 | "peer": true, 803 | "dependencies": { 804 | "wrappy": "1" 805 | } 806 | }, 807 | "node_modules/p-map": { 808 | "version": "2.1.0", 809 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", 810 | "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", 811 | "peer": true, 812 | "engines": { 813 | "node": ">=6" 814 | } 815 | }, 816 | "node_modules/path-is-absolute": { 817 | "version": "1.0.1", 818 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 819 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 820 | "peer": true, 821 | "engines": { 822 | "node": ">=0.10.0" 823 | } 824 | }, 825 | "node_modules/picomatch": { 826 | "version": "2.3.0", 827 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 828 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 829 | "engines": { 830 | "node": ">=8.6" 831 | }, 832 | "funding": { 833 | "url": "https://github.com/sponsors/jonschlinkert" 834 | } 835 | }, 836 | "node_modules/pino": { 837 | "version": "6.13.3", 838 | "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", 839 | "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", 840 | "dev": true, 841 | "dependencies": { 842 | "fast-redact": "^3.0.0", 843 | "fast-safe-stringify": "^2.0.8", 844 | "fastify-warning": "^0.2.0", 845 | "flatstr": "^1.0.12", 846 | "pino-std-serializers": "^3.1.0", 847 | "quick-format-unescaped": "^4.0.3", 848 | "sonic-boom": "^1.0.2" 849 | }, 850 | "bin": { 851 | "pino": "bin.js" 852 | } 853 | }, 854 | "node_modules/pino-std-serializers": { 855 | "version": "3.2.0", 856 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", 857 | "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", 858 | "dev": true 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 | "dev": true, 865 | "dependencies": { 866 | "forwarded": "0.2.0", 867 | "ipaddr.js": "1.9.1" 868 | }, 869 | "engines": { 870 | "node": ">= 0.10" 871 | } 872 | }, 873 | "node_modules/punycode": { 874 | "version": "2.1.1", 875 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 876 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 877 | "dev": true, 878 | "engines": { 879 | "node": ">=6" 880 | } 881 | }, 882 | "node_modules/queue-microtask": { 883 | "version": "1.2.3", 884 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 885 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 886 | "funding": [ 887 | { 888 | "type": "github", 889 | "url": "https://github.com/sponsors/feross" 890 | }, 891 | { 892 | "type": "patreon", 893 | "url": "https://www.patreon.com/feross" 894 | }, 895 | { 896 | "type": "consulting", 897 | "url": "https://feross.org/support" 898 | } 899 | ] 900 | }, 901 | "node_modules/quick-format-unescaped": { 902 | "version": "4.0.4", 903 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 904 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", 905 | "dev": true 906 | }, 907 | "node_modules/redis-commands": { 908 | "version": "1.7.0", 909 | "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", 910 | "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", 911 | "peer": true 912 | }, 913 | "node_modules/redis-errors": { 914 | "version": "1.2.0", 915 | "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", 916 | "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=", 917 | "peer": true, 918 | "engines": { 919 | "node": ">=4" 920 | } 921 | }, 922 | "node_modules/redis-parser": { 923 | "version": "3.0.0", 924 | "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", 925 | "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", 926 | "peer": true, 927 | "dependencies": { 928 | "redis-errors": "^1.0.0" 929 | }, 930 | "engines": { 931 | "node": ">=4" 932 | } 933 | }, 934 | "node_modules/require-from-string": { 935 | "version": "2.0.2", 936 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 937 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 938 | "dev": true, 939 | "engines": { 940 | "node": ">=0.10.0" 941 | } 942 | }, 943 | "node_modules/ret": { 944 | "version": "0.2.2", 945 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", 946 | "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", 947 | "dev": true, 948 | "engines": { 949 | "node": ">=4" 950 | } 951 | }, 952 | "node_modules/reusify": { 953 | "version": "1.0.4", 954 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 955 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 956 | "engines": { 957 | "iojs": ">=1.0.0", 958 | "node": ">=0.10.0" 959 | } 960 | }, 961 | "node_modules/rfdc": { 962 | "version": "1.3.0", 963 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 964 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", 965 | "dev": true 966 | }, 967 | "node_modules/run-parallel": { 968 | "version": "1.2.0", 969 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 970 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 971 | "funding": [ 972 | { 973 | "type": "github", 974 | "url": "https://github.com/sponsors/feross" 975 | }, 976 | { 977 | "type": "patreon", 978 | "url": "https://www.patreon.com/feross" 979 | }, 980 | { 981 | "type": "consulting", 982 | "url": "https://feross.org/support" 983 | } 984 | ], 985 | "dependencies": { 986 | "queue-microtask": "^1.2.2" 987 | } 988 | }, 989 | "node_modules/safe-regex2": { 990 | "version": "2.0.0", 991 | "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", 992 | "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", 993 | "dev": true, 994 | "dependencies": { 995 | "ret": "~0.2.0" 996 | } 997 | }, 998 | "node_modules/secure-json-parse": { 999 | "version": "2.4.0", 1000 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", 1001 | "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==", 1002 | "dev": true 1003 | }, 1004 | "node_modules/semver": { 1005 | "version": "6.3.0", 1006 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1007 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1008 | "peer": true, 1009 | "bin": { 1010 | "semver": "bin/semver.js" 1011 | } 1012 | }, 1013 | "node_modules/semver-store": { 1014 | "version": "0.3.0", 1015 | "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", 1016 | "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==", 1017 | "dev": true 1018 | }, 1019 | "node_modules/set-cookie-parser": { 1020 | "version": "2.4.8", 1021 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", 1022 | "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==", 1023 | "dev": true 1024 | }, 1025 | "node_modules/sonic-boom": { 1026 | "version": "1.4.1", 1027 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", 1028 | "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", 1029 | "dev": true, 1030 | "dependencies": { 1031 | "atomic-sleep": "^1.0.0", 1032 | "flatstr": "^1.0.12" 1033 | } 1034 | }, 1035 | "node_modules/standard-as-callback": { 1036 | "version": "2.1.0", 1037 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", 1038 | "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", 1039 | "peer": true 1040 | }, 1041 | "node_modules/string-similarity": { 1042 | "version": "4.0.4", 1043 | "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", 1044 | "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", 1045 | "dev": true 1046 | }, 1047 | "node_modules/tiny-lru": { 1048 | "version": "7.0.6", 1049 | "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz", 1050 | "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==", 1051 | "dev": true, 1052 | "engines": { 1053 | "node": ">=6" 1054 | } 1055 | }, 1056 | "node_modules/to-regex-range": { 1057 | "version": "5.0.1", 1058 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1059 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1060 | "dependencies": { 1061 | "is-number": "^7.0.0" 1062 | }, 1063 | "engines": { 1064 | "node": ">=8.0" 1065 | } 1066 | }, 1067 | "node_modules/tslib": { 1068 | "version": "1.14.1", 1069 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1070 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1071 | "peer": true 1072 | }, 1073 | "node_modules/typescript": { 1074 | "version": "4.5.2", 1075 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", 1076 | "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", 1077 | "dev": true, 1078 | "bin": { 1079 | "tsc": "bin/tsc", 1080 | "tsserver": "bin/tsserver" 1081 | }, 1082 | "engines": { 1083 | "node": ">=4.2.0" 1084 | } 1085 | }, 1086 | "node_modules/uri-js": { 1087 | "version": "4.4.1", 1088 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1089 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1090 | "dev": true, 1091 | "dependencies": { 1092 | "punycode": "^2.1.0" 1093 | } 1094 | }, 1095 | "node_modules/uuid": { 1096 | "version": "8.3.2", 1097 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1098 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1099 | "peer": true, 1100 | "bin": { 1101 | "uuid": "dist/bin/uuid" 1102 | } 1103 | }, 1104 | "node_modules/wrappy": { 1105 | "version": "1.0.2", 1106 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1107 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1108 | "peer": true 1109 | }, 1110 | "node_modules/yallist": { 1111 | "version": "4.0.0", 1112 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1113 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1114 | "dev": true 1115 | } 1116 | }, 1117 | "dependencies": { 1118 | "@fastify/ajv-compiler": { 1119 | "version": "1.1.0", 1120 | "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz", 1121 | "integrity": "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==", 1122 | "dev": true, 1123 | "requires": { 1124 | "ajv": "^6.12.6" 1125 | } 1126 | }, 1127 | "@nodelib/fs.scandir": { 1128 | "version": "2.1.5", 1129 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1130 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1131 | "requires": { 1132 | "@nodelib/fs.stat": "2.0.5", 1133 | "run-parallel": "^1.1.9" 1134 | } 1135 | }, 1136 | "@nodelib/fs.stat": { 1137 | "version": "2.0.5", 1138 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1139 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 1140 | }, 1141 | "@nodelib/fs.walk": { 1142 | "version": "1.2.8", 1143 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1144 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1145 | "requires": { 1146 | "@nodelib/fs.scandir": "2.1.5", 1147 | "fastq": "^1.6.0" 1148 | } 1149 | }, 1150 | "@types/node": { 1151 | "version": "16.11.12", 1152 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", 1153 | "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", 1154 | "dev": true 1155 | }, 1156 | "abstract-logging": { 1157 | "version": "2.0.1", 1158 | "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", 1159 | "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", 1160 | "dev": true 1161 | }, 1162 | "ajv": { 1163 | "version": "6.12.6", 1164 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1165 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1166 | "dev": true, 1167 | "requires": { 1168 | "fast-deep-equal": "^3.1.1", 1169 | "fast-json-stable-stringify": "^2.0.0", 1170 | "json-schema-traverse": "^0.4.1", 1171 | "uri-js": "^4.2.2" 1172 | } 1173 | }, 1174 | "archy": { 1175 | "version": "1.0.0", 1176 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 1177 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", 1178 | "dev": true 1179 | }, 1180 | "atomic-sleep": { 1181 | "version": "1.0.0", 1182 | "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", 1183 | "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", 1184 | "dev": true 1185 | }, 1186 | "avvio": { 1187 | "version": "7.2.2", 1188 | "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", 1189 | "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", 1190 | "dev": true, 1191 | "requires": { 1192 | "archy": "^1.0.0", 1193 | "debug": "^4.0.0", 1194 | "fastq": "^1.6.1", 1195 | "queue-microtask": "^1.1.2" 1196 | } 1197 | }, 1198 | "balanced-match": { 1199 | "version": "1.0.2", 1200 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1201 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1202 | "peer": true 1203 | }, 1204 | "brace-expansion": { 1205 | "version": "1.1.11", 1206 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1207 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1208 | "peer": true, 1209 | "requires": { 1210 | "balanced-match": "^1.0.0", 1211 | "concat-map": "0.0.1" 1212 | } 1213 | }, 1214 | "braces": { 1215 | "version": "3.0.2", 1216 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1217 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1218 | "requires": { 1219 | "fill-range": "^7.0.1" 1220 | } 1221 | }, 1222 | "bullmq": { 1223 | "version": "1.59.4", 1224 | "resolved": "https://registry.npmjs.org/bullmq/-/bullmq-1.59.4.tgz", 1225 | "integrity": "sha512-QbKCOtHFVJtNSV96BG6aAGBafDD5nElzHif+Cc5Av/X4yltgOuYxGDL1q3SSAwYeetapX5bUABVR9icQGcGWZQ==", 1226 | "peer": true, 1227 | "requires": { 1228 | "cron-parser": "^2.18.0", 1229 | "get-port": "^5.1.1", 1230 | "glob": "^7.2.0", 1231 | "ioredis": "^4.28.2", 1232 | "lodash": "^4.17.21", 1233 | "msgpackr": "^1.4.6", 1234 | "semver": "^6.3.0", 1235 | "tslib": "^1.14.1", 1236 | "uuid": "^8.3.2" 1237 | } 1238 | }, 1239 | "call-bind": { 1240 | "version": "1.0.2", 1241 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1242 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1243 | "peer": true, 1244 | "requires": { 1245 | "function-bind": "^1.1.1", 1246 | "get-intrinsic": "^1.0.2" 1247 | } 1248 | }, 1249 | "cluster-key-slot": { 1250 | "version": "1.1.0", 1251 | "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", 1252 | "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", 1253 | "peer": true 1254 | }, 1255 | "concat-map": { 1256 | "version": "0.0.1", 1257 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1258 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1259 | "peer": true 1260 | }, 1261 | "cookie": { 1262 | "version": "0.4.1", 1263 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 1264 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", 1265 | "dev": true 1266 | }, 1267 | "cron-parser": { 1268 | "version": "2.18.0", 1269 | "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.18.0.tgz", 1270 | "integrity": "sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==", 1271 | "peer": true, 1272 | "requires": { 1273 | "is-nan": "^1.3.0", 1274 | "moment-timezone": "^0.5.31" 1275 | } 1276 | }, 1277 | "debug": { 1278 | "version": "4.3.3", 1279 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1280 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1281 | "requires": { 1282 | "ms": "2.1.2" 1283 | } 1284 | }, 1285 | "deepmerge": { 1286 | "version": "4.2.2", 1287 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1288 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1289 | "dev": true 1290 | }, 1291 | "define-properties": { 1292 | "version": "1.1.3", 1293 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1294 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1295 | "peer": true, 1296 | "requires": { 1297 | "object-keys": "^1.0.12" 1298 | } 1299 | }, 1300 | "denque": { 1301 | "version": "1.5.1", 1302 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", 1303 | "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", 1304 | "peer": true 1305 | }, 1306 | "fast-decode-uri-component": { 1307 | "version": "1.0.1", 1308 | "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", 1309 | "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", 1310 | "dev": true 1311 | }, 1312 | "fast-deep-equal": { 1313 | "version": "3.1.3", 1314 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1315 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1316 | "dev": true 1317 | }, 1318 | "fast-glob": { 1319 | "version": "3.2.7", 1320 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 1321 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 1322 | "requires": { 1323 | "@nodelib/fs.stat": "^2.0.2", 1324 | "@nodelib/fs.walk": "^1.2.3", 1325 | "glob-parent": "^5.1.2", 1326 | "merge2": "^1.3.0", 1327 | "micromatch": "^4.0.4" 1328 | } 1329 | }, 1330 | "fast-json-stable-stringify": { 1331 | "version": "2.1.0", 1332 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1333 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1334 | "dev": true 1335 | }, 1336 | "fast-json-stringify": { 1337 | "version": "2.7.12", 1338 | "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.12.tgz", 1339 | "integrity": "sha512-4hjwZDPmgj/ZUKXhEWovGPciE/5mWtAIQQxN+2VBDFun7DRTk2oOItbu9ZZp6kqj+eZ/u7z+dgBgM74cfGRnBQ==", 1340 | "dev": true, 1341 | "requires": { 1342 | "ajv": "^6.11.0", 1343 | "deepmerge": "^4.2.2", 1344 | "rfdc": "^1.2.0", 1345 | "string-similarity": "^4.0.1" 1346 | } 1347 | }, 1348 | "fast-redact": { 1349 | "version": "3.0.2", 1350 | "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", 1351 | "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", 1352 | "dev": true 1353 | }, 1354 | "fast-safe-stringify": { 1355 | "version": "2.1.1", 1356 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 1357 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 1358 | "dev": true 1359 | }, 1360 | "fastify": { 1361 | "version": "3.24.1", 1362 | "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.24.1.tgz", 1363 | "integrity": "sha512-ZL0V6u37d65tAY8lMwVMFtFvnEeJcG80QBNSdChqCm4i4x+is/38OU14gzJuRXhpenTL+pTJzNcu5Kn1ouzM3Q==", 1364 | "dev": true, 1365 | "requires": { 1366 | "@fastify/ajv-compiler": "^1.0.0", 1367 | "abstract-logging": "^2.0.0", 1368 | "avvio": "^7.1.2", 1369 | "fast-json-stringify": "^2.5.2", 1370 | "fastify-error": "^0.3.0", 1371 | "fastify-warning": "^0.2.0", 1372 | "find-my-way": "^4.1.0", 1373 | "flatstr": "^1.0.12", 1374 | "light-my-request": "^4.2.0", 1375 | "pino": "^6.13.0", 1376 | "proxy-addr": "^2.0.7", 1377 | "rfdc": "^1.1.4", 1378 | "secure-json-parse": "^2.0.0", 1379 | "semver": "^7.3.2", 1380 | "tiny-lru": "^7.0.0" 1381 | }, 1382 | "dependencies": { 1383 | "semver": { 1384 | "version": "7.3.5", 1385 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1386 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1387 | "dev": true, 1388 | "requires": { 1389 | "lru-cache": "^6.0.0" 1390 | } 1391 | } 1392 | } 1393 | }, 1394 | "fastify-error": { 1395 | "version": "0.3.1", 1396 | "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz", 1397 | "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==", 1398 | "dev": true 1399 | }, 1400 | "fastify-plugin": { 1401 | "version": "3.0.0", 1402 | "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", 1403 | "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" 1404 | }, 1405 | "fastify-warning": { 1406 | "version": "0.2.0", 1407 | "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", 1408 | "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==", 1409 | "dev": true 1410 | }, 1411 | "fastq": { 1412 | "version": "1.13.0", 1413 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1414 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1415 | "requires": { 1416 | "reusify": "^1.0.4" 1417 | } 1418 | }, 1419 | "fill-range": { 1420 | "version": "7.0.1", 1421 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1422 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1423 | "requires": { 1424 | "to-regex-range": "^5.0.1" 1425 | } 1426 | }, 1427 | "find-my-way": { 1428 | "version": "4.4.0", 1429 | "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.4.0.tgz", 1430 | "integrity": "sha512-hpntHvK0iOHp3pqWRRUEzioar4tp8euBD8DkPG3VauOriZLgwGZLTNp6yZSrdctJ8RCDS7zhZSR2V+yOaBbNow==", 1431 | "dev": true, 1432 | "requires": { 1433 | "fast-decode-uri-component": "^1.0.1", 1434 | "fast-deep-equal": "^3.1.3", 1435 | "safe-regex2": "^2.0.0", 1436 | "semver-store": "^0.3.0" 1437 | } 1438 | }, 1439 | "flatstr": { 1440 | "version": "1.0.12", 1441 | "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", 1442 | "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", 1443 | "dev": true 1444 | }, 1445 | "forwarded": { 1446 | "version": "0.2.0", 1447 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 1448 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 1449 | "dev": true 1450 | }, 1451 | "fs.realpath": { 1452 | "version": "1.0.0", 1453 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1454 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1455 | "peer": true 1456 | }, 1457 | "function-bind": { 1458 | "version": "1.1.1", 1459 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1460 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1461 | "peer": true 1462 | }, 1463 | "get-intrinsic": { 1464 | "version": "1.1.1", 1465 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1466 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1467 | "peer": true, 1468 | "requires": { 1469 | "function-bind": "^1.1.1", 1470 | "has": "^1.0.3", 1471 | "has-symbols": "^1.0.1" 1472 | } 1473 | }, 1474 | "get-port": { 1475 | "version": "5.1.1", 1476 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", 1477 | "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", 1478 | "peer": true 1479 | }, 1480 | "glob": { 1481 | "version": "7.2.0", 1482 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1483 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1484 | "peer": true, 1485 | "requires": { 1486 | "fs.realpath": "^1.0.0", 1487 | "inflight": "^1.0.4", 1488 | "inherits": "2", 1489 | "minimatch": "^3.0.4", 1490 | "once": "^1.3.0", 1491 | "path-is-absolute": "^1.0.0" 1492 | } 1493 | }, 1494 | "glob-parent": { 1495 | "version": "5.1.2", 1496 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1497 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1498 | "requires": { 1499 | "is-glob": "^4.0.1" 1500 | } 1501 | }, 1502 | "has": { 1503 | "version": "1.0.3", 1504 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1505 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1506 | "peer": true, 1507 | "requires": { 1508 | "function-bind": "^1.1.1" 1509 | } 1510 | }, 1511 | "has-symbols": { 1512 | "version": "1.0.2", 1513 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1514 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 1515 | "peer": true 1516 | }, 1517 | "inflight": { 1518 | "version": "1.0.6", 1519 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1520 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1521 | "peer": true, 1522 | "requires": { 1523 | "once": "^1.3.0", 1524 | "wrappy": "1" 1525 | } 1526 | }, 1527 | "inherits": { 1528 | "version": "2.0.4", 1529 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1530 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1531 | "peer": true 1532 | }, 1533 | "ioredis": { 1534 | "version": "4.28.2", 1535 | "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.2.tgz", 1536 | "integrity": "sha512-kQ+Iv7+c6HsDdPP2XUHaMv8DhnSeAeKEwMbaoqsXYbO+03dItXt7+5jGQDRyjdRUV2rFJbzg7P4Qt1iX2tqkOg==", 1537 | "peer": true, 1538 | "requires": { 1539 | "cluster-key-slot": "^1.1.0", 1540 | "debug": "^4.3.1", 1541 | "denque": "^1.1.0", 1542 | "lodash.defaults": "^4.2.0", 1543 | "lodash.flatten": "^4.4.0", 1544 | "lodash.isarguments": "^3.1.0", 1545 | "p-map": "^2.1.0", 1546 | "redis-commands": "1.7.0", 1547 | "redis-errors": "^1.2.0", 1548 | "redis-parser": "^3.0.0", 1549 | "standard-as-callback": "^2.1.0" 1550 | } 1551 | }, 1552 | "ipaddr.js": { 1553 | "version": "1.9.1", 1554 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1555 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1556 | "dev": true 1557 | }, 1558 | "is-extglob": { 1559 | "version": "2.1.1", 1560 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1561 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 1562 | }, 1563 | "is-glob": { 1564 | "version": "4.0.3", 1565 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1566 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1567 | "requires": { 1568 | "is-extglob": "^2.1.1" 1569 | } 1570 | }, 1571 | "is-nan": { 1572 | "version": "1.3.2", 1573 | "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", 1574 | "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", 1575 | "peer": true, 1576 | "requires": { 1577 | "call-bind": "^1.0.0", 1578 | "define-properties": "^1.1.3" 1579 | } 1580 | }, 1581 | "is-number": { 1582 | "version": "7.0.0", 1583 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1584 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1585 | }, 1586 | "json-schema-traverse": { 1587 | "version": "0.4.1", 1588 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1589 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1590 | "dev": true 1591 | }, 1592 | "light-my-request": { 1593 | "version": "4.7.0", 1594 | "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.7.0.tgz", 1595 | "integrity": "sha512-LTa8YZp3K2AUpqUnwwKajoIHcsKOBnzwJNQSrk7unziPwo6CjOYjyO0F9wfkxFvP+nBsCGe3eMPnedVgIIgdAw==", 1596 | "dev": true, 1597 | "requires": { 1598 | "ajv": "^8.1.0", 1599 | "cookie": "^0.4.0", 1600 | "fastify-warning": "^0.2.0", 1601 | "set-cookie-parser": "^2.4.1" 1602 | }, 1603 | "dependencies": { 1604 | "ajv": { 1605 | "version": "8.8.2", 1606 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", 1607 | "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", 1608 | "dev": true, 1609 | "requires": { 1610 | "fast-deep-equal": "^3.1.1", 1611 | "json-schema-traverse": "^1.0.0", 1612 | "require-from-string": "^2.0.2", 1613 | "uri-js": "^4.2.2" 1614 | } 1615 | }, 1616 | "json-schema-traverse": { 1617 | "version": "1.0.0", 1618 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1619 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1620 | "dev": true 1621 | } 1622 | } 1623 | }, 1624 | "lodash": { 1625 | "version": "4.17.21", 1626 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1627 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1628 | "peer": true 1629 | }, 1630 | "lodash.defaults": { 1631 | "version": "4.2.0", 1632 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", 1633 | "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", 1634 | "peer": true 1635 | }, 1636 | "lodash.flatten": { 1637 | "version": "4.4.0", 1638 | "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", 1639 | "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", 1640 | "peer": true 1641 | }, 1642 | "lodash.isarguments": { 1643 | "version": "3.1.0", 1644 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1645 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 1646 | "peer": true 1647 | }, 1648 | "lru-cache": { 1649 | "version": "6.0.0", 1650 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1651 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1652 | "dev": true, 1653 | "requires": { 1654 | "yallist": "^4.0.0" 1655 | } 1656 | }, 1657 | "merge2": { 1658 | "version": "1.4.1", 1659 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1660 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 1661 | }, 1662 | "micromatch": { 1663 | "version": "4.0.4", 1664 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1665 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1666 | "requires": { 1667 | "braces": "^3.0.1", 1668 | "picomatch": "^2.2.3" 1669 | } 1670 | }, 1671 | "minimatch": { 1672 | "version": "3.0.4", 1673 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1674 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1675 | "peer": true, 1676 | "requires": { 1677 | "brace-expansion": "^1.1.7" 1678 | } 1679 | }, 1680 | "moment": { 1681 | "version": "2.29.1", 1682 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", 1683 | "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", 1684 | "peer": true 1685 | }, 1686 | "moment-timezone": { 1687 | "version": "0.5.34", 1688 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", 1689 | "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", 1690 | "peer": true, 1691 | "requires": { 1692 | "moment": ">= 2.9.0" 1693 | } 1694 | }, 1695 | "ms": { 1696 | "version": "2.1.2", 1697 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1698 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1699 | }, 1700 | "msgpackr": { 1701 | "version": "1.5.2", 1702 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.2.tgz", 1703 | "integrity": "sha512-OCguCkbG34x1ddO4vAzEm/4J1GTo512k9SoxV8K+EGfI/onFdpemRf0HpsVRFpxadXr4JBFgHsQUitgTlw7ZYQ==", 1704 | "peer": true, 1705 | "requires": { 1706 | "msgpackr-extract": "^1.0.14" 1707 | } 1708 | }, 1709 | "msgpackr-extract": { 1710 | "version": "1.0.16", 1711 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-1.0.16.tgz", 1712 | "integrity": "sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA==", 1713 | "optional": true, 1714 | "peer": true, 1715 | "requires": { 1716 | "nan": "^2.14.2", 1717 | "node-gyp-build": "^4.2.3" 1718 | } 1719 | }, 1720 | "nan": { 1721 | "version": "2.15.0", 1722 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", 1723 | "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", 1724 | "optional": true, 1725 | "peer": true 1726 | }, 1727 | "node-gyp-build": { 1728 | "version": "4.3.0", 1729 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", 1730 | "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", 1731 | "optional": true, 1732 | "peer": true 1733 | }, 1734 | "object-keys": { 1735 | "version": "1.1.1", 1736 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1737 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1738 | "peer": true 1739 | }, 1740 | "once": { 1741 | "version": "1.4.0", 1742 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1743 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1744 | "peer": true, 1745 | "requires": { 1746 | "wrappy": "1" 1747 | } 1748 | }, 1749 | "p-map": { 1750 | "version": "2.1.0", 1751 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", 1752 | "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", 1753 | "peer": true 1754 | }, 1755 | "path-is-absolute": { 1756 | "version": "1.0.1", 1757 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1758 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1759 | "peer": true 1760 | }, 1761 | "picomatch": { 1762 | "version": "2.3.0", 1763 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1764 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" 1765 | }, 1766 | "pino": { 1767 | "version": "6.13.3", 1768 | "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", 1769 | "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", 1770 | "dev": true, 1771 | "requires": { 1772 | "fast-redact": "^3.0.0", 1773 | "fast-safe-stringify": "^2.0.8", 1774 | "fastify-warning": "^0.2.0", 1775 | "flatstr": "^1.0.12", 1776 | "pino-std-serializers": "^3.1.0", 1777 | "quick-format-unescaped": "^4.0.3", 1778 | "sonic-boom": "^1.0.2" 1779 | } 1780 | }, 1781 | "pino-std-serializers": { 1782 | "version": "3.2.0", 1783 | "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", 1784 | "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", 1785 | "dev": true 1786 | }, 1787 | "proxy-addr": { 1788 | "version": "2.0.7", 1789 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1790 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1791 | "dev": true, 1792 | "requires": { 1793 | "forwarded": "0.2.0", 1794 | "ipaddr.js": "1.9.1" 1795 | } 1796 | }, 1797 | "punycode": { 1798 | "version": "2.1.1", 1799 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1800 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1801 | "dev": true 1802 | }, 1803 | "queue-microtask": { 1804 | "version": "1.2.3", 1805 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1806 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 1807 | }, 1808 | "quick-format-unescaped": { 1809 | "version": "4.0.4", 1810 | "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", 1811 | "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", 1812 | "dev": true 1813 | }, 1814 | "redis-commands": { 1815 | "version": "1.7.0", 1816 | "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", 1817 | "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==", 1818 | "peer": true 1819 | }, 1820 | "redis-errors": { 1821 | "version": "1.2.0", 1822 | "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", 1823 | "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=", 1824 | "peer": true 1825 | }, 1826 | "redis-parser": { 1827 | "version": "3.0.0", 1828 | "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", 1829 | "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", 1830 | "peer": true, 1831 | "requires": { 1832 | "redis-errors": "^1.0.0" 1833 | } 1834 | }, 1835 | "require-from-string": { 1836 | "version": "2.0.2", 1837 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1838 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1839 | "dev": true 1840 | }, 1841 | "ret": { 1842 | "version": "0.2.2", 1843 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", 1844 | "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", 1845 | "dev": true 1846 | }, 1847 | "reusify": { 1848 | "version": "1.0.4", 1849 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1850 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 1851 | }, 1852 | "rfdc": { 1853 | "version": "1.3.0", 1854 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", 1855 | "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", 1856 | "dev": true 1857 | }, 1858 | "run-parallel": { 1859 | "version": "1.2.0", 1860 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1861 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1862 | "requires": { 1863 | "queue-microtask": "^1.2.2" 1864 | } 1865 | }, 1866 | "safe-regex2": { 1867 | "version": "2.0.0", 1868 | "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", 1869 | "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", 1870 | "dev": true, 1871 | "requires": { 1872 | "ret": "~0.2.0" 1873 | } 1874 | }, 1875 | "secure-json-parse": { 1876 | "version": "2.4.0", 1877 | "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", 1878 | "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==", 1879 | "dev": true 1880 | }, 1881 | "semver": { 1882 | "version": "6.3.0", 1883 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1884 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1885 | "peer": true 1886 | }, 1887 | "semver-store": { 1888 | "version": "0.3.0", 1889 | "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", 1890 | "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==", 1891 | "dev": true 1892 | }, 1893 | "set-cookie-parser": { 1894 | "version": "2.4.8", 1895 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", 1896 | "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==", 1897 | "dev": true 1898 | }, 1899 | "sonic-boom": { 1900 | "version": "1.4.1", 1901 | "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", 1902 | "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", 1903 | "dev": true, 1904 | "requires": { 1905 | "atomic-sleep": "^1.0.0", 1906 | "flatstr": "^1.0.12" 1907 | } 1908 | }, 1909 | "standard-as-callback": { 1910 | "version": "2.1.0", 1911 | "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", 1912 | "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", 1913 | "peer": true 1914 | }, 1915 | "string-similarity": { 1916 | "version": "4.0.4", 1917 | "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", 1918 | "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", 1919 | "dev": true 1920 | }, 1921 | "tiny-lru": { 1922 | "version": "7.0.6", 1923 | "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz", 1924 | "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==", 1925 | "dev": true 1926 | }, 1927 | "to-regex-range": { 1928 | "version": "5.0.1", 1929 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1930 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1931 | "requires": { 1932 | "is-number": "^7.0.0" 1933 | } 1934 | }, 1935 | "tslib": { 1936 | "version": "1.14.1", 1937 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1938 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", 1939 | "peer": true 1940 | }, 1941 | "typescript": { 1942 | "version": "4.5.2", 1943 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", 1944 | "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", 1945 | "dev": true 1946 | }, 1947 | "uri-js": { 1948 | "version": "4.4.1", 1949 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1950 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1951 | "dev": true, 1952 | "requires": { 1953 | "punycode": "^2.1.0" 1954 | } 1955 | }, 1956 | "uuid": { 1957 | "version": "8.3.2", 1958 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 1959 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 1960 | "peer": true 1961 | }, 1962 | "wrappy": { 1963 | "version": "1.0.2", 1964 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1965 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1966 | "peer": true 1967 | }, 1968 | "yallist": { 1969 | "version": "4.0.0", 1970 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1971 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1972 | "dev": true 1973 | } 1974 | } 1975 | } 1976 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fastify-queue", 3 | "version": "1.2.7", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "typings": "dist/index.d.ts", 7 | "files": [ 8 | "dist" 9 | ], 10 | "scripts": { 11 | "build": "tsc", 12 | "prepare": "npm run build" 13 | }, 14 | "keywords": [ 15 | "fastify", 16 | "bull", 17 | "bullmq", 18 | "jobs", 19 | "queues", 20 | "redis" 21 | ], 22 | "prettier": { 23 | "printWidth": 80, 24 | "semi": true, 25 | "singleQuote": true, 26 | "trailingComma": "es5" 27 | }, 28 | "homepage": "https://github.com/JonasHiltl/fastify-queue", 29 | "repository": { 30 | "type": "git", 31 | "url": "https://github.com/JonasHiltl/fastify-queue" 32 | }, 33 | "author": "JonasHiltl", 34 | "license": "MIT", 35 | "peerDependencies": { 36 | "fastify": ">=3.24.1", 37 | "bullmq": "^1.59.4" 38 | }, 39 | "devDependencies": { 40 | "@types/node": "^16.11.12", 41 | "fastify": "^3.24.1", 42 | "typescript": "^4.5.2" 43 | }, 44 | "dependencies": { 45 | "fast-glob": "^3.2.7", 46 | "fastify-plugin": "^3.0.0" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { FastifyInstance } from 'fastify'; 2 | import fp from 'fastify-plugin'; 3 | import { Queue, Worker, ConnectionOptions } from 'bullmq'; 4 | import * as fg from 'fast-glob'; 5 | import path from 'path'; 6 | 7 | export declare type FastifyQueueOptions = { 8 | bullPath: string; 9 | connection: ConnectionOptions; 10 | }; 11 | 12 | /** 13 | * Load every worker function inside a specified directory 14 | * @param {Object} fastify - Fastify instance 15 | * @param {Object} opts - Plugin's options 16 | */ 17 | const fastifyBullMQ = async ( 18 | fastify: FastifyInstance, 19 | opts: FastifyQueueOptions 20 | ) => { 21 | const queues = {}; 22 | const workers = {}; 23 | 24 | const files = fg.sync(opts.bullPath); 25 | 26 | files.forEach(async (filePath) => { 27 | const parts = filePath.split('/'); 28 | // the queue name is defined by the name of the directory in which the files are 29 | const queueName = parts[parts.length - 2]; 30 | 31 | const { 32 | default: worker, 33 | queueConfig, 34 | workerConfig, 35 | } = await import(path.resolve(filePath)); 36 | 37 | (queues as any)[queueName] = new Queue(queueName, { 38 | connection: opts.connection, 39 | ...(queueConfig && queueConfig), 40 | }); 41 | fastify.log.info(`Created the queue ${queueName}`); 42 | 43 | if (!worker) { 44 | fastify.log.warn( 45 | `The queue ${queueName} does not have a worker function` 46 | ); 47 | } else { 48 | (workers as any)[queueName] = new Worker( 49 | queueName, 50 | (job) => worker(fastify, job), 51 | { 52 | connection: opts.connection, 53 | ...(workerConfig && workerConfig), 54 | } 55 | ); 56 | fastify.log.info(`Created a worker for the queue ${queueName}`); 57 | } 58 | }); 59 | 60 | fastify.decorate('queues', queues); 61 | fastify.decorate('workers', workers); 62 | }; 63 | 64 | export default fp(fastifyBullMQ, { 65 | name: 'fastify-queue', 66 | }); 67 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs 3 | "include": ["src"], 4 | "exclude": ["node_modules", "dist"], 5 | "compilerOptions": { 6 | "module": "commonjs", 7 | "lib": ["dom", "esnext"], 8 | "importHelpers": true, 9 | // output .d.ts declaration files for consumers 10 | "declaration": true, 11 | // output .js.map sourcemap files for consumers 12 | "sourceMap": true, 13 | // match output dir to input dir. e.g. dist/index instead of dist/src/index 14 | "rootDir": "src", 15 | "outDir": "dist", 16 | // stricter type-checking for stronger correctness. Recommended by TS 17 | "strict": true, 18 | // linter checks for common issues 19 | "noImplicitReturns": true, 20 | "noFallthroughCasesInSwitch": true, 21 | // noUnused* overlap with @typescript-eslint/no-unused-vars, can disable if duplicative 22 | "noUnusedLocals": true, 23 | "noUnusedParameters": true, 24 | // use Node's module resolution algorithm, instead of the legacy TS one 25 | "moduleResolution": "node", 26 | // interop between ESM and CJS modules. Recommended by TS 27 | "esModuleInterop": true, 28 | // significant perf increase by skipping checking .d.ts files, particularly those in node_modules. Recommended by TS 29 | "skipLibCheck": true, 30 | // error out if import and file system have a casing mismatch. Recommended by TS 31 | "forceConsistentCasingInFileNames": true 32 | } 33 | } 34 | --------------------------------------------------------------------------------