From fc04e4195c93b56823fde123b26aebad7caae0f7 Mon Sep 17 00:00:00 2001 From: opti21 <40129778+opti21@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:24:34 -0500 Subject: [PATCH 1/2] feat!: switch to bun --- README.md | 15 + bun.lockb | Bin 0 -> 123472 bytes index.ts | 1 + package.json | 26 +- pnpm-lock.yaml | 2810 -------------------------------- src/chatbot.ts | 235 +++ src/commands/currentSong.ts | 2 +- src/commands/nextStream.ts | 88 +- src/commands/raffle.ts | 3 +- src/commands/replaceRequest.ts | 2 +- src/commands/saveSong.ts | 2 +- src/commands/songRequest.ts | 13 +- src/commands/wrongSong.ts | 2 +- src/index.ts | 270 +-- src/redis/handlers/PgStatus.ts | 2 +- src/redis/handlers/Queue.ts | 19 +- src/redis/handlers/Request.ts | 4 +- src/redis/handlers/Video.ts | 2 +- src/utils/createRequest.ts | 2 +- src/utils/createVideo.ts | 4 +- src/utils/prisma.ts | 4 +- src/utils/updateRequest.ts | 2 +- tsconfig.json | 33 +- 23 files changed, 423 insertions(+), 3118 deletions(-) create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.ts delete mode 100644 pnpm-lock.yaml create mode 100644 src/chatbot.ts diff --git a/README.md b/README.md new file mode 100644 index 0000000..00bc63f --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# pepega-bot + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run index.js +``` + +This project was created using `bun init` in bun v1.1.24. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d9f79a36d2bbfe59a5dd3997c21c8395f79971b4 GIT binary patch literal 123472 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 literal 0 HcmV?d00001 diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..f67b2c6 --- /dev/null +++ b/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/package.json b/package.json index a1841e8..3a6b4fb 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,17 @@ { - "name": "pepega-bot", - "version": "1.4.2", - "description": "", - "main": "index.js", - "scripts": { - "lint": "eslint . --ext .js,.jsx,.ts,", - "deploy": "prisma migrate deploy", - "build": "tsc", - "clean": "rm -rf dist build", - "dev": "nodemon --config nodemon.json src/index.ts", - "dev:debug": "nodemon --config nodemon.json --inspect-brk src/index.ts", - "start": "node dist/index.js" - }, - "author": "opti21", - "license": "ISC", + "name": "sethdrums-chat-bot", + "module": "index.ts", + "type": "module", "dependencies": { - "@growthbook/growthbook": "^0.17.0", "@libsql/client": "^0.5.6", "@prisma/adapter-libsql": "^5.11.0", "@prisma/client": "^5.11.0", - "@sentry/node": "^6.19.7", - "@sentry/tracing": "^6.19.7", "@types/express": "^4.17.13", "axios": "^0.25.0", "dayjs": "^1.11.5", "dotenv": "^15.0.0", "express": "^4.17.3", + "hono": "^4.6.3", "ioredis": "^4.28.3", "js-video-url-parser": "^0.5.1", "pusher": "^5.0.1", @@ -34,6 +20,7 @@ "tmi.js": "^1.8.5" }, "devDependencies": { + "@types/bun": "^1.1.10", "@types/ioredis": "^4.28.7", "@types/node": "^17.0.17", "@types/tmi.js": "^1.8.1", @@ -45,5 +32,8 @@ "prisma": "^5.11.0", "ts-node": "^10.4.0", "typescript": "^5.4.3" + }, + "peerDependencies": { + "typescript": "^5.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index c3ae94b..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,2810 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@growthbook/growthbook': - specifier: ^0.17.0 - version: 0.17.0 - '@libsql/client': - specifier: ^0.5.6 - version: 0.5.6 - '@prisma/adapter-libsql': - specifier: ^5.11.0 - version: 5.11.0(@libsql/client@0.5.6) - '@prisma/client': - specifier: ^5.11.0 - version: 5.11.0(prisma@5.11.0) - '@sentry/node': - specifier: ^6.19.7 - version: 6.19.7 - '@sentry/tracing': - specifier: ^6.19.7 - version: 6.19.7 - '@types/express': - specifier: ^4.17.13 - version: 4.17.13 - axios: - specifier: ^0.25.0 - version: 0.25.0 - dayjs: - specifier: ^1.11.5 - version: 1.11.5 - dotenv: - specifier: ^15.0.0 - version: 15.0.1 - express: - specifier: ^4.17.3 - version: 4.17.3 - ioredis: - specifier: ^4.28.3 - version: 4.28.5 - js-video-url-parser: - specifier: ^0.5.1 - version: 0.5.1 - pusher: - specifier: ^5.0.1 - version: 5.0.1 - pusher-js: - specifier: ^7.0.6 - version: 7.0.6 - redis-om: - specifier: ^0.2.0 - version: 0.2.1 - tmi.js: - specifier: ^1.8.5 - version: 1.8.5 - -devDependencies: - '@types/ioredis': - specifier: ^4.28.7 - version: 4.28.10 - '@types/node': - specifier: ^17.0.17 - version: 17.0.23 - '@types/tmi.js': - specifier: ^1.8.1 - version: 1.8.1 - '@types/ws': - specifier: ^8.2.2 - version: 8.5.3 - '@typescript-eslint/eslint-plugin': - specifier: ^7.3.1 - version: 7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/parser': - specifier: ^7.3.1 - version: 7.3.1(eslint@8.57.0)(typescript@5.4.3) - eslint: - specifier: ^8.57.0 - version: 8.57.0 - nodemon: - specifier: ^2.0.15 - version: 2.0.15 - prisma: - specifier: ^5.11.0 - version: 5.11.0 - ts-node: - specifier: ^10.4.0 - version: 10.7.0(@types/node@17.0.23)(typescript@5.4.3) - typescript: - specifier: ^5.4.3 - version: 5.4.3 - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@cspotcode/source-map-consumer@0.8.0: - resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==} - engines: {node: '>= 12'} - dev: true - - /@cspotcode/source-map-support@0.7.0: - resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==} - engines: {node: '>=12'} - dependencies: - '@cspotcode/source-map-consumer': 0.8.0 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@growthbook/growthbook@0.17.0: - resolution: {integrity: sha512-CfDKCsemHPS8IwE73nyVnSUjKMrkI/1Kp9F6hxm3TLeQgr3xjspA77J9VPl3Ejv2+2Ka2P7yMRBv3XmrX2qiDA==} - engines: {node: '>=10'} - dev: false - - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true - - /@libsql/client@0.5.6: - resolution: {integrity: sha512-UBjmDoxz75Z2sHdP+ETCROpeLA/77VMesiff8R4UWK1rnaWbh6/YoCLDILMJL3Rh0udQeKxjL8MjXthqohax+g==} - dependencies: - '@libsql/core': 0.5.6 - '@libsql/hrana-client': 0.5.6 - js-base64: 3.7.7 - libsql: 0.3.10 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@libsql/core@0.5.6: - resolution: {integrity: sha512-3vicUAydq6jPth410n4AsHHm1n2psTwvkSf94nfJlSXutGSZsl0updn2N/mJBgqUHkbuFoWZtlMifF0SwBj1xQ==} - dependencies: - js-base64: 3.7.7 - dev: false - - /@libsql/darwin-arm64@0.3.10: - resolution: {integrity: sha512-RaexEFfPAFogd6dJlqkpCkTxdr6K14Z0286lodIJ8Ny77mWuWyBkWKxf70OYWXXAMxMJFUW+6al1F3/Osf/pTg==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@libsql/darwin-x64@0.3.10: - resolution: {integrity: sha512-SNVN6n4qNUdMW1fJMFmx4qn4n5RnXsxjFbczpkzG/V7m/5VeTFt1chhGcrahTHCr3+K6eRJWJUEQHRGqjBwPkw==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@libsql/hrana-client@0.5.6: - resolution: {integrity: sha512-mjQoAmejZ1atG+M3YR2ZW+rg6ceBByH/S/h17ZoYZkqbWrvohFhXyz2LFxj++ARMoY9m6w3RJJIRdJdmnEUlFg==} - dependencies: - '@libsql/isomorphic-fetch': 0.1.12 - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.7 - node-fetch: 3.3.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@libsql/isomorphic-fetch@0.1.12: - resolution: {integrity: sha512-MRo4UcmjAGAa3ac56LoD5OE13m2p0lu0VEtZC2NZMcogM/jc5fU9YtMQ3qbPjFJ+u2BBjFZgMPkQaLS1dlMhpg==} - dependencies: - '@types/node-fetch': 2.6.11 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - - /@libsql/isomorphic-ws@0.1.5: - resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - dependencies: - '@types/ws': 8.5.10 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /@libsql/linux-arm64-gnu@0.3.10: - resolution: {integrity: sha512-2uXpi9d8qtyIOr7pyG4a88j6YXgemyIHEs2Wbp+PPletlCIPsFS+E7IQHbz8VwTohchOzcokGUm1Bc5QC+A7wg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@libsql/linux-arm64-musl@0.3.10: - resolution: {integrity: sha512-72SN1FUavLvzHddCS861ynSpQndcW5oLGKA3U8CyMfgIZIwJAPc7+48Uj1plW00htXBx4GBpcntFp68KKIx3YQ==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@libsql/linux-x64-gnu@0.3.10: - resolution: {integrity: sha512-hXyNqVRi7ONuyWZ1SX6setxL0QaQ7InyS3bHLupsi9s7NpOGD5vcpTaYicJOqmIIm+6kt8vJfmo7ZxlarIHy7Q==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@libsql/linux-x64-musl@0.3.10: - resolution: {integrity: sha512-kNmIRxomVwt9S+cLyYS497F/3gXFF4r8wW12YSBQgxG75JYft07AHVd8J7HINg+oqRkLzT0s+mVX5dM6nk68EQ==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@libsql/win32-x64-msvc@0.3.10: - resolution: {integrity: sha512-c/6rjdtGULKrJkLgfLobFefObfOtxjXGmCfPxv6pr0epPCeUEssfDbDIeEH9fQUgzogIMWEHwT8so52UJ/iT1Q==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@neon-rs/load@0.0.4: - resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - dev: false - - /@node-redis/bloom@1.0.1(@node-redis/client@1.0.5): - resolution: {integrity: sha512-mXEBvEIgF4tUzdIN89LiYsbi6//EdpFA7L8M+DHCvePXg+bfHWi+ct5VI6nHUFQE5+ohm/9wmgihCH3HSkeKsw==} - peerDependencies: - '@node-redis/client': ^1.0.0 - dependencies: - '@node-redis/client': 1.0.5 - dev: false - - /@node-redis/client@1.0.5: - resolution: {integrity: sha512-ESZ3bd1f+od62h4MaBLKum+klVJfA4wAeLHcVQBkoXa1l0viFesOWnakLQqKg+UyrlJhZmXJWtu0Y9v7iTMrig==} - engines: {node: '>=12'} - dependencies: - cluster-key-slot: 1.1.0 - generic-pool: 3.8.2 - redis-parser: 3.0.0 - yallist: 4.0.0 - dev: false - - /@node-redis/graph@1.0.0(@node-redis/client@1.0.5): - resolution: {integrity: sha512-mRSo8jEGC0cf+Rm7q8mWMKKKqkn6EAnA9IA2S3JvUv/gaWW/73vil7GLNwion2ihTptAm05I9LkepzfIXUKX5g==} - peerDependencies: - '@node-redis/client': ^1.0.0 - dependencies: - '@node-redis/client': 1.0.5 - dev: false - - /@node-redis/json@1.0.2(@node-redis/client@1.0.5): - resolution: {integrity: sha512-qVRgn8WfG46QQ08CghSbY4VhHFgaTY71WjpwRBGEuqGPfWwfRcIf3OqSpR7Q/45X+v3xd8mvYjywqh0wqJ8T+g==} - peerDependencies: - '@node-redis/client': ^1.0.0 - dependencies: - '@node-redis/client': 1.0.5 - dev: false - - /@node-redis/search@1.0.5(@node-redis/client@1.0.5): - resolution: {integrity: sha512-MCOL8iCKq4v+3HgEQv8zGlSkZyXSXtERgrAJ4TSryIG/eLFy84b57KmNNa/V7M1Q2Wd2hgn2nPCGNcQtk1R1OQ==} - peerDependencies: - '@node-redis/client': ^1.0.0 - dependencies: - '@node-redis/client': 1.0.5 - dev: false - - /@node-redis/time-series@1.0.2(@node-redis/client@1.0.5): - resolution: {integrity: sha512-HGQ8YooJ8Mx7l28tD7XjtB3ImLEjlUxG1wC1PAjxu6hPJqjPshUZxAICzDqDjtIbhDTf48WXXUcx8TQJB1XTKA==} - peerDependencies: - '@node-redis/client': ^1.0.0 - dependencies: - '@node-redis/client': 1.0.5 - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: true - - /@prisma/adapter-libsql@5.11.0(@libsql/client@0.5.6): - resolution: {integrity: sha512-Q2GxamPew8AviqO/6kQskqvuh4Y0bGj8hbMefjD2+3Q3geNfE/W6XbfH0tHLOK6gQgawoAONrRgbRfoJPzUvQA==} - peerDependencies: - '@libsql/client': ^0.3.5 || ^0.4.0 || ^0.5.0 - dependencies: - '@libsql/client': 0.5.6 - '@prisma/driver-adapter-utils': 5.11.0 - async-mutex: 0.4.1 - dev: false - - /@prisma/client@5.11.0(prisma@5.11.0): - resolution: {integrity: sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==} - engines: {node: '>=16.13'} - requiresBuild: true - peerDependencies: - prisma: '*' - peerDependenciesMeta: - prisma: - optional: true - dependencies: - prisma: 5.11.0 - dev: false - - /@prisma/debug@5.11.0: - resolution: {integrity: sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==} - - /@prisma/driver-adapter-utils@5.11.0: - resolution: {integrity: sha512-C2Qa/HZXZNwDBZCHJxlV4eibqXakbOBLd+mUeNCxSfaM8yi8Qi8zToN8Kb3M60Kr1ymr+tzzw/wVqYIfIfUiXw==} - dependencies: - '@prisma/debug': 5.11.0 - dev: false - - /@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102: - resolution: {integrity: sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==} - - /@prisma/engines@5.11.0: - resolution: {integrity: sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==} - requiresBuild: true - dependencies: - '@prisma/debug': 5.11.0 - '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 - '@prisma/fetch-engine': 5.11.0 - '@prisma/get-platform': 5.11.0 - - /@prisma/fetch-engine@5.11.0: - resolution: {integrity: sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==} - dependencies: - '@prisma/debug': 5.11.0 - '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 - '@prisma/get-platform': 5.11.0 - - /@prisma/get-platform@5.11.0: - resolution: {integrity: sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==} - dependencies: - '@prisma/debug': 5.11.0 - - /@sentry/core@6.19.7: - resolution: {integrity: sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==} - engines: {node: '>=6'} - dependencies: - '@sentry/hub': 6.19.7 - '@sentry/minimal': 6.19.7 - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - tslib: 1.14.1 - dev: false - - /@sentry/hub@6.19.7: - resolution: {integrity: sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==} - engines: {node: '>=6'} - dependencies: - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - tslib: 1.14.1 - dev: false - - /@sentry/minimal@6.19.7: - resolution: {integrity: sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==} - engines: {node: '>=6'} - dependencies: - '@sentry/hub': 6.19.7 - '@sentry/types': 6.19.7 - tslib: 1.14.1 - dev: false - - /@sentry/node@6.19.7: - resolution: {integrity: sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==} - engines: {node: '>=6'} - dependencies: - '@sentry/core': 6.19.7 - '@sentry/hub': 6.19.7 - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - cookie: 0.4.2 - https-proxy-agent: 5.0.1 - lru_map: 0.3.3 - tslib: 1.14.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@sentry/tracing@6.19.7: - resolution: {integrity: sha512-ol4TupNnv9Zd+bZei7B6Ygnr9N3Gp1PUrNI761QSlHtPC25xXC5ssSD3GMhBgyQrcvpuRcCFHVNNM97tN5cZiA==} - engines: {node: '>=6'} - dependencies: - '@sentry/hub': 6.19.7 - '@sentry/minimal': 6.19.7 - '@sentry/types': 6.19.7 - '@sentry/utils': 6.19.7 - tslib: 1.14.1 - dev: false - - /@sentry/types@6.19.7: - resolution: {integrity: sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==} - engines: {node: '>=6'} - dev: false - - /@sentry/utils@6.19.7: - resolution: {integrity: sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==} - engines: {node: '>=6'} - dependencies: - '@sentry/types': 6.19.7 - tslib: 1.14.1 - dev: false - - /@sindresorhus/is@0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - dev: true - - /@szmarczak/http-timer@1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} - dependencies: - defer-to-connect: 1.1.3 - dev: true - - /@tsconfig/node10@1.0.8: - resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} - dev: true - - /@tsconfig/node12@1.0.9: - resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} - dev: true - - /@tsconfig/node14@1.0.1: - resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} - dev: true - - /@tsconfig/node16@1.0.2: - resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} - dev: true - - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 17.0.23 - dev: false - - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 17.0.23 - dev: false - - /@types/express-serve-static-core@4.17.28: - resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} - dependencies: - '@types/node': 17.0.23 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: false - - /@types/express@4.17.13: - resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.28 - '@types/qs': 6.9.7 - '@types/serve-static': 1.13.10 - dev: false - - /@types/ioredis@4.28.10: - resolution: {integrity: sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==} - dependencies: - '@types/node': 17.0.23 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.23 - dev: true - - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: false - - /@types/node-fetch@2.6.11: - resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} - dependencies: - '@types/node': 17.0.23 - form-data: 4.0.0 - dev: false - - /@types/node@17.0.23: - resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} - - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: false - - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: false - - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 17.0.23 - dev: true - - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@types/serve-static@1.13.10: - resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 17.0.23 - dev: false - - /@types/tmi.js@1.8.1: - resolution: {integrity: sha512-rnUKPYZfrNsxXbmNOK7NuHIF6VPRPiCQnrZQwyWnl6UaoOAc0ZmQ5VRpUq4p1JwqBA2+4qDPn9EXVqzzvNUzBA==} - dev: true - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 17.0.23 - dev: false - - /@types/ws@8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 17.0.23 - dev: true - - /@typescript-eslint/eslint-plugin@7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/visitor-keys': 7.3.1 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@7.3.1: - resolution: {integrity: sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 - dev: true - - /@typescript-eslint/type-utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@7.3.1: - resolution: {integrity: sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true - - /@typescript-eslint/typescript-estree@7.3.1(typescript@5.4.3): - resolution: {integrity: sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/visitor-keys': 7.3.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.3) - typescript: 5.4.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): - resolution: {integrity: sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.3.1 - '@typescript-eslint/types': 7.3.1 - '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@7.3.1: - resolution: {integrity: sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==} - engines: {node: ^18.18.0 || >=20.0.0} - dependencies: - '@typescript-eslint/types': 7.3.1 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /acorn@8.7.0: - resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-flatten@1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} - dev: false - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /async-mutex@0.4.1: - resolution: {integrity: sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==} - dependencies: - tslib: 2.6.2 - dev: false - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /axios@0.25.0: - resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} - dependencies: - follow-redirects: 1.14.9 - transitivePeerDependencies: - - debug - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /body-parser@1.19.2: - resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - on-finished: 2.3.0 - qs: 6.9.7 - raw-body: 2.4.3 - type-is: 1.6.18 - transitivePeerDependencies: - - supports-color - dev: false - - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /cacheable-request@6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true - - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - - /clone-response@1.0.2: - resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} - dependencies: - mimic-response: 1.0.1 - dev: true - - /cluster-key-slot@1.1.0: - resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==} - engines: {node: '>=0.10.0'} - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true - - /configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.10 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: true - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type@1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - dev: false - - /cookie-signature@1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} - dev: false - - /cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} - dev: false - - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: false - - /dayjs@1.11.5: - resolution: {integrity: sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==} - dev: false - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - - /debug@3.2.7(supports-color@5.5.0): - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - supports-color: 5.5.0 - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /decompress-response@3.3.0: - resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: true - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /defer-to-connect@1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} - dev: true - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /denque@1.5.1: - resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} - engines: {node: '>=0.10'} - dev: false - - /depd@1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} - dev: false - - /destroy@1.0.4: - resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} - dev: false - - /detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - dev: false - - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: true - - /dotenv@15.0.1: - resolution: {integrity: sha512-4OnbwRfzR+xQThp7uq1xpUS9fmgZ//njexOtPjPSbK3yHGrSHSJnaJRsXderSSm2elfvVj+Y5awDC0I8Oy8rkA==} - engines: {node: '>=12'} - dev: false - - /duplexer3@0.1.4: - resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} - dev: true - - /ee-first@1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /encodeurl@1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} - engines: {node: '>= 0.8'} - dev: false - - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - - /escape-goat@2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} - dev: false - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /etag@1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} - engines: {node: '>= 0.6'} - dev: false - - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false - - /express@4.17.3: - resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.19.2 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.4.2 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.2 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.9.7 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.17.2 - serve-static: 1.14.2 - setprototypeof: 1.2.0 - statuses: 1.5.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} - dependencies: - reusify: 1.0.4 - dev: true - - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - dev: false - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.5 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.5: - resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} - dev: true - - /follow-redirects@1.14.9: - resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: false - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false - - /fresh@0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /generic-pool@3.8.2: - resolution: {integrity: sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==} - engines: {node: '>= 4'} - dev: false - - /get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /global-dirs@3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /got@9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 - dev: true - - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-yarn@2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} - dev: true - - /http-cache-semantics@4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: true - - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 1.5.0 - toidentifier: 1.0.1 - dev: false - - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /ignore-by-default@1.0.1: - resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} - dev: true - - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-lazy@2.1.0: - resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} - engines: {node: '>=4'} - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true - - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true - - /ioredis@4.28.5: - resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} - engines: {node: '>=6'} - dependencies: - cluster-key-slot: 1.1.0 - debug: 4.3.4 - denque: 1.5.1 - lodash.defaults: 4.2.0 - lodash.flatten: 4.4.0 - lodash.isarguments: 3.1.0 - p-map: 2.1.0 - redis-commands: 1.7.0 - redis-errors: 1.2.0 - redis-parser: 3.0.0 - standard-as-callback: 2.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /is-base64@1.1.0: - resolution: {integrity: sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==} - hasBin: true - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - dependencies: - ci-info: 2.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 - dev: true - - /is-npm@5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-typedarray@1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: true - - /is-yarn-global@0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - dev: false - - /js-video-url-parser@0.5.1: - resolution: {integrity: sha512-/vwqT67k0AyIGMHAvSOt+n4JfrZWF7cPKgKswDO35yr27GfW4HtjpQVlTx6JLF45QuPm8mkzFHkZgFVnFm4x/w==} - dev: false - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /json-buffer@3.0.0: - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /keyv@3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - dependencies: - json-buffer: 3.0.0 - dev: true - - /latest-version@5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} - dependencies: - package-json: 6.5.0 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /libsql@0.3.10: - resolution: {integrity: sha512-/8YMTbwWFPmrDWY+YFK3kYqVPFkMgQre0DGmBaOmjogMdSe+7GHm1/q9AZ61AWkEub/vHmi+bA4tqIzVhKnqzg==} - cpu: [x64, arm64, wasm32] - os: [darwin, linux, win32] - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.3.10 - '@libsql/darwin-x64': 0.3.10 - '@libsql/linux-arm64-gnu': 0.3.10 - '@libsql/linux-arm64-musl': 0.3.10 - '@libsql/linux-x64-gnu': 0.3.10 - '@libsql/linux-x64-musl': 0.3.10 - '@libsql/win32-x64-msvc': 0.3.10 - dev: false - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.defaults@4.2.0: - resolution: {integrity: sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=} - dev: false - - /lodash.flatten@4.4.0: - resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} - dev: false - - /lodash.isarguments@3.1.0: - resolution: {integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=} - dev: false - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - dev: true - - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /lru-cache@7.8.0: - resolution: {integrity: sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==} - engines: {node: '>=12'} - dev: true - - /lru_map@0.3.3: - resolution: {integrity: sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=} - dev: false - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /media-typer@0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - dev: false - - /merge-descriptors@1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /methods@1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} - engines: {node: '>= 0.6'} - dev: false - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimist@1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - dev: true - - /ms@2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - /natural-compare@1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} - dev: true - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: false - - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: false - - /nodemon@2.0.15: - resolution: {integrity: sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==} - engines: {node: '>=8.10.0'} - hasBin: true - requiresBuild: true - dependencies: - chokidar: 3.5.3 - debug: 3.2.7(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 5.7.1 - supports-color: 5.5.0 - touch: 3.1.0 - undefsafe: 2.0.5 - update-notifier: 5.1.0 - dev: true - - /nopt@1.0.10: - resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url@4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - dev: true - - /on-finished@2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /once@1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-cancelable@1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: false - - /package-json@6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} - dependencies: - got: 9.6.0 - registry-auth-token: 4.2.1 - registry-url: 5.1.0 - semver: 6.3.0 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-to-regexp@0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prepend-http@2.0.0: - resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} - engines: {node: '>=4'} - dev: true - - /prisma@5.11.0: - resolution: {integrity: sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==} - engines: {node: '>=16.13'} - hasBin: true - requiresBuild: true - dependencies: - '@prisma/engines': 5.11.0 - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - - /pstree.remy@1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true - - /pupa@2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 - dev: true - - /pusher-js@7.0.6: - resolution: {integrity: sha512-I44FTlF2OfGNg/4xcxmFq/JqFzJswoQWtWCPq+DkCh31MFg3Qkm3bNFvTXU+c5KR19TyBZ9SYlYq2rrpJZzbIA==} - dependencies: - tweetnacl: 1.0.3 - dev: false - - /pusher@5.0.1: - resolution: {integrity: sha512-1JK/xdjEdZQ7iJwbDWA0qBdPHGNvVSoUiNXA9O7j1BHYAqenSxyORgzxWQopnYFKjQhHIcCZ8RCKJtcepWHeKw==} - engines: {node: '>= 4.0.0'} - dependencies: - abort-controller: 3.0.0 - is-base64: 1.1.0 - node-fetch: 2.6.7 - tweetnacl: 1.0.3 - tweetnacl-util: 0.15.1 - transitivePeerDependencies: - - encoding - dev: false - - /qs@6.9.7: - resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} - engines: {node: '>=0.6'} - dev: false - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body@2.4.3: - resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.6 - strip-json-comments: 2.0.1 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /redis-commands@1.7.0: - resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} - dev: false - - /redis-errors@1.2.0: - resolution: {integrity: sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=} - engines: {node: '>=4'} - dev: false - - /redis-om@0.2.1: - resolution: {integrity: sha512-TVVUof5cinivZTS3mc2fX/60qE1LAukFM8ZqTks5bfVuNPVxk28GIHrzdRmmIsDhFOaSPD/D5mCp4FNj1sEvGw==} - engines: {node: '>=12'} - dependencies: - redis: 4.0.6 - ulid: 2.3.0 - dev: false - - /redis-parser@3.0.0: - resolution: {integrity: sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=} - engines: {node: '>=4'} - dependencies: - redis-errors: 1.2.0 - dev: false - - /redis@4.0.6: - resolution: {integrity: sha512-IaPAxgF5dV0jx+A9l6yd6R9/PAChZIoAskDVRzUODeLDNhsMlq7OLLTmu0AwAr0xjrJ1bibW5xdpRwqIQ8Q0Xg==} - dependencies: - '@node-redis/bloom': 1.0.1(@node-redis/client@1.0.5) - '@node-redis/client': 1.0.5 - '@node-redis/graph': 1.0.0(@node-redis/client@1.0.5) - '@node-redis/json': 1.0.2(@node-redis/client@1.0.5) - '@node-redis/search': 1.0.5(@node-redis/client@1.0.5) - '@node-redis/time-series': 1.0.2(@node-redis/client@1.0.5) - dev: false - - /registry-auth-token@4.2.1: - resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} - engines: {node: '>=6.0.0'} - dependencies: - rc: 1.2.8 - dev: true - - /registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - dependencies: - rc: 1.2.8 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /responselike@1.0.2: - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} - dependencies: - lowercase-keys: 1.0.1 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.0 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /semver-diff@3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true - - /semver@7.3.6: - resolution: {integrity: sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==} - engines: {node: ^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0} - hasBin: true - dependencies: - lru-cache: 7.8.0 - dev: true - - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /send@0.17.2: - resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.8.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.5.0 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static@1.14.2: - resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.17.2 - transitivePeerDependencies: - - supports-color - dev: false - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /standard-as-callback@2.1.0: - resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} - dev: false - - /statuses@1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} - dev: false - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} - engines: {node: '>=0.10.0'} - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /tmi.js@1.8.5: - resolution: {integrity: sha512-A9qrydfe1e0VWM9MViVhhxVgvLpnk7pFShVUWePsSTtoi+A1X+Zjdoa7OJd7/YsgHXGj3GkNEvnWop/1WwZuew==} - engines: {node: '>=10.0.0'} - dependencies: - node-fetch: 2.6.7 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /to-readable-stream@1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /touch@3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} - hasBin: true - dependencies: - nopt: 1.0.10 - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - dev: false - - /ts-api-utils@1.3.0(typescript@5.4.3): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.4.3 - dev: true - - /ts-node@10.7.0(@types/node@17.0.23)(typescript@5.4.3): - resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.7.0 - '@tsconfig/node10': 1.0.8 - '@tsconfig/node12': 1.0.9 - '@tsconfig/node14': 1.0.1 - '@tsconfig/node16': 1.0.2 - '@types/node': 17.0.23 - acorn: 8.7.0 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.4.3 - v8-compile-cache-lib: 3.0.0 - yn: 3.1.1 - dev: true - - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /tweetnacl-util@0.15.1: - resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} - dev: false - - /tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - dev: false - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - - /typescript@5.4.3: - resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /ulid@2.3.0: - resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} - hasBin: true - dev: false - - /undefsafe@2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - - /unpipe@1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} - dev: false - - /update-notifier@5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} - dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.3.6 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.1.1 - dev: true - - /url-parse-lax@3.0.0: - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 - dev: true - - /utils-merge@1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} - engines: {node: '>= 0.4.0'} - dev: false - - /v8-compile-cache-lib@3.0.0: - resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==} - dev: true - - /vary@1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} - engines: {node: '>= 0.8'} - dev: false - - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: true - - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/src/chatbot.ts b/src/chatbot.ts new file mode 100644 index 0000000..3ee5b49 --- /dev/null +++ b/src/chatbot.ts @@ -0,0 +1,235 @@ +import tmi from "tmi.js"; +import "js-video-url-parser/lib/provider/youtube"; +import { + closeQueue, + getQueue, + openQueue, + pauseQueue, + resumeQueue, + setSubOnly, +} from "./redis/handlers/Queue"; +import express from "express"; +import Pusher from "pusher"; +import handleSongRequest from "./commands/songRequest"; +import handleReplace from "./commands/replaceRequest"; +import handleRemove from "./commands/wrongSong"; +import handleCurrentSong from "./commands/currentSong"; +import handleSaveSong from "./commands/saveSong"; +import handleRaffle from "./commands/raffle"; + +if ( + !process.env.PUSHER_APP_ID || + !process.env.PUSHER_KEY || + !process.env.PUSHER_SECRET || + !process.env.PUSHER_CLUSTER +) { + throw new Error("Missing Pusher environment variables"); +} + +export const pusher = new Pusher({ + appId: process.env.PUSHER_APP_ID, + host: process.env.PUSHER_HOST!, + port: process.env.PUSHER_PORT!, + key: process.env.PUSHER_KEY, + secret: process.env.PUSHER_SECRET, + useTLS: true, +}); + +const botUsername = + process.env.NODE_ENV === "production" ? "pepega_bot21" : "opti_21"; + +const twitch = new tmi.Client({ + options: { debug: true, messagesLogLevel: "info" }, + connection: { + reconnect: true, + secure: true, + }, + identity: { + username: botUsername, + password: process.env.TWITCH_PASS, + }, + channels: [process.env.TWITCH_CHANNEL ? process.env.TWITCH_CHANNEL : ""], +}); + +twitch.connect().catch(console.error); + +twitch.on("message", async (channel, tags, message, self) => { + if (self) return; + if (message.startsWith("!")) { + const args = message.slice(1).split(" "); + const command = args.shift()?.toLowerCase(); + if (!command) return; + + if ( + command === "open" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") === tags.username) + ) { + await openQueue().catch((err) => { + console.error(err); + twitch.say(channel, "Error opening Sugestion List DinkDank @opti_21"); + }); + pusher.trigger( + process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, + "update-queue", + {} + ); + twitch.say(channel, `@${tags.username} Suggestion List is now open βœ…`); + return; + } + + if ( + command === "close" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") == tags.username) + ) { + await closeQueue().catch((err) => { + console.error(err); + twitch.say(channel, "Error opening Suggestion list DinkDank @opti_21"); + }); + pusher.trigger( + process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, + "update-queue", + {} + ); + twitch.say(channel, `@${tags.username} Suggestion list is now closed πŸ›‘`); + return; + } + if ( + command === "pause" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") === tags.username) + ) { + const queue = await getQueue(); + + if (!queue.is_open) { + twitch.say(channel, `@${tags.username} Suggestion list is closed πŸ›‘`); + return; + } + + await pauseQueue().catch((err) => { + console.error(err); + twitch.say(channel, "Error pausing Suggestion List DinkDank @opti_21"); + }); + pusher.trigger( + process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, + "update-queue", + {} + ); + twitch.say(channel, `@${tags.username} Suggestion list is now paused ⏸️`); + return; + } + + if ( + command === "resume" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") === tags.username) + ) { + const queue = await getQueue(); + + if (!queue.is_open) { + twitch.say(channel, `@${tags.username} Suggestion list is closed πŸ›‘`); + return; + } + + await resumeQueue().catch((err) => { + console.error(err); + twitch.say(channel, "Error resuming Suggestion List DinkDank @opti_21"); + }); + pusher.trigger( + process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, + "update-queue", + {} + ); + twitch.say( + channel, + `@${tags.username} Suggestion list has been resumed! Get your suggestions in! ` + ); + return; + } + + if (command === "sr") { + handleSongRequest(args, twitch, channel, tags); + } + + if (command === "replace") { + handleReplace(args, twitch, channel, tags); + } + + if (command === "wrongsong" || command === "remove") { + handleRemove(args, twitch, channel, tags); + } + + if (command === "song" || command === "cs" || command === "currentsong") { + handleCurrentSong(args, twitch, channel, tags); + } + + if (command === "save") { + handleSaveSong(args, twitch, channel, tags); + } + + if ( + command === "marco" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") === tags.username) + ) { + twitch.say( + channel, + `MrDestructoid POLO! - v${process.env.npm_package_version}` + ); + return; + } + + if ( + command === "songraffle" && + (tags.mod || + tags.username === "opti_21" || + // brodacaster + channel.replace("#", "") === tags.username) + ) { + handleRaffle(args, twitch, channel, tags); + } + + if (command.startsWith("subonly")) { + if (tags.mod || channel.replace("#", "") === tags.username) { + const subOnly = command.split(" ")[1] === "on"; + setSubOnly(subOnly); + twitch.say( + channel, + `@${tags.username} Suggestion list is now ${ + subOnly ? " sub only" : " open to everyone" + }` + ); + } + } + + // if (command === "addmods") { + // if (tags.mod || tags.username === "opti_21") { + // prisma.mod.createMany({ + // data: [ + // { + // name: "", + // twitch_id: "", + // }, + // ], + // }); + // } + // } + + // if ( + // (command === "when" || command === "schedule" || command === "next") + // ) { + // handleWhenNextStream(args, twitch, channel, tags); + // } + } +}); diff --git a/src/commands/currentSong.ts b/src/commands/currentSong.ts index 47c161f..dde87a0 100644 --- a/src/commands/currentSong.ts +++ b/src/commands/currentSong.ts @@ -1,5 +1,5 @@ import { getQueue } from "../redis/handlers/Queue"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import { prisma } from "../utils/prisma"; const handleCurrentSong = async ( diff --git a/src/commands/nextStream.ts b/src/commands/nextStream.ts index 06ade5f..6962a13 100644 --- a/src/commands/nextStream.ts +++ b/src/commands/nextStream.ts @@ -1,19 +1,19 @@ -import { TwitchCreds } from "@prisma/client"; +import type { TwitchCreds } from "@prisma/client"; import axios from "axios"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import { prisma } from "../utils/prisma"; import dayjs from "dayjs"; -import utc from "dayjs/plugin/utc" -import timezone from "dayjs/plugin/timezone" -import isBetween from "dayjs/plugin/isBetween" -import relativeTime from "dayjs/plugin/relativeTime" -import advancedFormat from "dayjs/plugin/advancedFormat" - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(isBetween) -dayjs.extend(relativeTime) -dayjs.extend(advancedFormat) +import utc from "dayjs/plugin/utc"; +import timezone from "dayjs/plugin/timezone"; +import isBetween from "dayjs/plugin/isBetween"; +import relativeTime from "dayjs/plugin/relativeTime"; +import advancedFormat from "dayjs/plugin/advancedFormat"; + +dayjs.extend(utc); +dayjs.extend(timezone); +dayjs.extend(isBetween); +dayjs.extend(relativeTime); +dayjs.extend(advancedFormat); const handleWhenNextStream = async ( args: string[], @@ -22,7 +22,7 @@ const handleWhenNextStream = async ( tags: ChatUserstate ) => { try { - let twitchCreds + let twitchCreds; twitchCreds = await prisma.twitchCreds.findFirst(); @@ -30,42 +30,55 @@ const handleWhenNextStream = async ( console.log("no creds"); twitchCreds = await getNewToken(); } - + if (twitchCreds?.expires) { - if (twitchCreds?.expires < Math.floor(Date.now() / 1000)) { - console.log("twitch creds expired") - twitchCreds = await getNewToken() - } + if (twitchCreds?.expires < Math.floor(Date.now() / 1000)) { + console.log("twitch creds expired"); + twitchCreds = await getNewToken(); + } } - const schedule:any = await getSchedule(twitchCreds); + const schedule: any = await getSchedule(twitchCreds); - const removedCanceled = schedule.data.segments.filter((segemnt: any) => segemnt.canceled_until === null) - console.log(removedCanceled) + const removedCanceled = schedule.data.segments.filter( + (segemnt: any) => segemnt.canceled_until === null + ); + console.log(removedCanceled); - const startTime = dayjs(removedCanceled[0].start_time).tz("America/Chicago") + const startTime = dayjs(removedCanceled[0].start_time).tz( + "America/Chicago" + ); // const endTime = dayjs(schedule.data.segments[0].start_time).tz("America/Chicago") // const scheduledLive = dayjs().isBetween(startTime, endTime) - const startDateFormated = startTime.format("ddd[,] MMM Do [at] hA z") - const fromNow = dayjs(startTime).diff(dayjs(), "h") + const startDateFormated = startTime.format("ddd[,] MMM Do [at] hA z"); + const fromNow = dayjs(startTime).diff(dayjs(), "h"); - console.log(fromNow) + console.log(fromNow); if (dayjs().isAfter(startTime)) { - // If the first item in schdule is the currently live stream pull next stream date - if (removedCanceled.length > 1) { - const secondStartTime = dayjs(removedCanceled[1].start_time).tz("America/Chicago") - const secondStartDateFormated = secondStartTime.format("ddd[,] MMM Do [at] hA z") - return twitch.say(channel, `Seth's next stream is scheduled for ${secondStartDateFormated}`) - } - - return twitch.say(channel, `There's currently no streams scheduled`) + // If the first item in schdule is the currently live stream pull next stream date + if (removedCanceled.length > 1) { + const secondStartTime = dayjs(removedCanceled[1].start_time).tz( + "America/Chicago" + ); + const secondStartDateFormated = secondStartTime.format( + "ddd[,] MMM Do [at] hA z" + ); + return twitch.say( + channel, + `Seth's next stream is scheduled for ${secondStartDateFormated}` + ); + } + + return twitch.say(channel, `There's currently no streams scheduled`); } - return twitch.say(channel, `Seth's next stream is scheduled for ${startDateFormated}`) - + return twitch.say( + channel, + `Seth's next stream is scheduled for ${startDateFormated}` + ); } catch (err) { console.error(err); return; @@ -75,13 +88,12 @@ const handleWhenNextStream = async ( export default handleWhenNextStream; const getSchedule = async (twitchCreds: TwitchCreds | null) => { - console.log("Getting schedule"); + console.log("Getting schedule"); return new Promise((resolve, reject) => { if (!twitchCreds) { console.log("NO TWITCH CREDS FOR REQUEST"); return reject(Error("No twitch creds")); } else { - axios .get(`https://api.twitch.tv/helix/schedule?broadcaster_id=147155277`, { headers: { diff --git a/src/commands/raffle.ts b/src/commands/raffle.ts index 41adb1f..7cb2625 100644 --- a/src/commands/raffle.ts +++ b/src/commands/raffle.ts @@ -8,7 +8,7 @@ import { ChatUserstate, Client } from "tmi.js"; import "js-video-url-parser/lib/provider/youtube"; import { prisma } from "../utils/prisma"; import { reorder } from "../utils/utils"; -import { pusher } from "../index"; +import { pusher } from "../chatbot"; let raffleOpen = false; let raffleSecondsLeft: number; @@ -21,7 +21,6 @@ const handleRaffle = async ( channel: string, tags: ChatUserstate ) => { - if (args[0] === "cancel") { raffleOpen = false; clearInterval(raffleInterval); diff --git a/src/commands/replaceRequest.ts b/src/commands/replaceRequest.ts index 5b73274..1fa90fd 100644 --- a/src/commands/replaceRequest.ts +++ b/src/commands/replaceRequest.ts @@ -1,5 +1,5 @@ import { getQueue } from "../redis/handlers/Queue"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import urlParser from "js-video-url-parser/lib/base"; import "js-video-url-parser/lib/provider/youtube"; import { prisma } from "../utils/prisma"; diff --git a/src/commands/saveSong.ts b/src/commands/saveSong.ts index 1f00607..7d01335 100644 --- a/src/commands/saveSong.ts +++ b/src/commands/saveSong.ts @@ -1,4 +1,4 @@ -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import { getQueue } from "../redis/handlers/Queue"; import { Video } from "../redis/handlers/Video"; import { prisma } from "../utils/prisma"; diff --git a/src/commands/songRequest.ts b/src/commands/songRequest.ts index 9d9c3a7..d81d4bd 100644 --- a/src/commands/songRequest.ts +++ b/src/commands/songRequest.ts @@ -1,7 +1,7 @@ import urlParser from "js-video-url-parser/lib/base"; import "js-video-url-parser/lib/provider/youtube"; import { addToQueue, getQueue } from "../redis/handlers/Queue"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import { createRequest } from "../utils/createRequest"; import { createVideo } from "../utils/createVideo"; import { prisma } from "../utils/prisma"; @@ -29,6 +29,17 @@ const handleSongRequest = async ( return; } + // allow mods if sub only + if (!tags.subscriber && queue.is_subOnly) { + if (!tags.mod || channel.replace("#", "") !== tags.username) { + twitch.say( + channel, + `@${tags.username} sorry but the suggestion list is currently subs only` + ); + return; + } + } + // Check if valid youtube link then parse const parsed = urlParser.parse(args[0]); diff --git a/src/commands/wrongSong.ts b/src/commands/wrongSong.ts index 280025b..aa24ef2 100644 --- a/src/commands/wrongSong.ts +++ b/src/commands/wrongSong.ts @@ -1,5 +1,5 @@ import { getQueue, removeFromOrder } from "../redis/handlers/Queue"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import { prisma } from "../utils/prisma"; const handleRemove = async ( diff --git a/src/index.ts b/src/index.ts index a8c1de1..774b6ae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,228 +1,44 @@ -import tmi from "tmi.js"; -import "js-video-url-parser/lib/provider/youtube"; -import { - closeQueue, - getQueue, - openQueue, - pauseQueue, - resumeQueue, -} from "./redis/handlers/Queue"; -import express from "express"; -import Pusher from "pusher"; -import handleSongRequest from "./commands/songRequest"; -import handleReplace from "./commands/replaceRequest"; -import handleRemove from "./commands/wrongSong"; -import handleCurrentSong from "./commands/currentSong"; -import handleSaveSong from "./commands/saveSong"; -import handleRaffle from "./commands/raffle"; - -if ( - !process.env.PUSHER_APP_ID || - !process.env.PUSHER_KEY || - !process.env.PUSHER_SECRET || - !process.env.PUSHER_CLUSTER -) { - throw new Error("Missing Pusher environment variables"); -} - -export const pusher = new Pusher({ - appId: process.env.PUSHER_APP_ID, - host: process.env.PUSHER_HOST!, - port: process.env.PUSHER_PORT!, - key: process.env.PUSHER_KEY, - secret: process.env.PUSHER_SECRET, - useTLS: true, +import { Hono } from "hono"; +import { createBunWebSocket } from "hono/bun"; +import type { ServerWebSocket } from "bun"; + +const app = new Hono(); + +const { upgradeWebSocket, websocket } = createBunWebSocket(); + +const rooms = new Map>(); +const topic = "sethdrums-queue"; + +app.get("/", (c) => c.text("PepegaBot is running!")); + +app.get( + "/ws", + upgradeWebSocket((c) => { + return { + onMessage(event, ws) { + const rawWs = ws.raw as ServerWebSocket; + rawWs.subscribe("pepega"); + console.log( + `WebSocket server opened and subscribed to topic '${topic}'` + ); + ws.send("Hello from server!"); + }, + onClose: (_, ws) => { + const rawWs = ws.raw as ServerWebSocket; + rawWs.unsubscribe(topic); + console.log( + `WebSocket server closed and unsubscribed from topic '${topic}'` + ); + }, + }; + }) +); + +const port = process.env.PORT || 3000; +console.log(`Server is running on http://localhost:${port}`); + +Bun.serve({ + fetch: app.fetch, + port: port, + websocket: websocket, }); - -const botUsername = - process.env.NODE_ENV === "production" ? "pepega_bot21" : "opti_21"; - -const twitch = new tmi.Client({ - options: { debug: true, messagesLogLevel: "info" }, - connection: { - reconnect: true, - secure: true, - }, - identity: { - username: botUsername, - password: process.env.TWITCH_PASS, - }, - channels: [process.env.TWITCH_CHANNEL ? process.env.TWITCH_CHANNEL : ""], -}); - -twitch.connect().catch(console.error); - -twitch.on("message", async (channel, tags, message, self) => { - if (self) return; - if (message.startsWith("!")) { - const args = message.slice(1).split(" "); - const command = args.shift()?.toLowerCase(); - - if ( - command === "open" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") === tags.username) - ) { - await openQueue().catch((err) => { - console.error(err); - twitch.say(channel, "Error opening Sugestion List DinkDank @opti_21"); - }); - pusher.trigger( - process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, - "update-queue", - {} - ); - twitch.say(channel, `@${tags.username} Suggestion List is now open βœ…`); - return; - } - - if ( - command === "close" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") == tags.username) - ) { - await closeQueue().catch((err) => { - console.error(err); - twitch.say(channel, "Error opening Suggestion list DinkDank @opti_21"); - }); - pusher.trigger( - process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, - "update-queue", - {} - ); - twitch.say(channel, `@${tags.username} Suggestion list is now closed πŸ›‘`); - return; - } - if ( - command === "pause" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") === tags.username) - ) { - const queue = await getQueue(); - - if (!queue.is_open) { - twitch.say(channel, `@${tags.username} Suggestion list is closed πŸ›‘`); - return; - } - - await pauseQueue().catch((err) => { - console.error(err); - twitch.say(channel, "Error pausing Suggestion List DinkDank @opti_21"); - }); - pusher.trigger( - process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, - "update-queue", - {} - ); - twitch.say(channel, `@${tags.username} Suggestion list is now paused ⏸️`); - return; - } - - if ( - command === "resume" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") === tags.username) - ) { - const queue = await getQueue(); - - if (!queue.is_open) { - twitch.say(channel, `@${tags.username} Suggestion list is closed πŸ›‘`); - return; - } - - await resumeQueue().catch((err) => { - console.error(err); - twitch.say(channel, "Error resuming Suggestion List DinkDank @opti_21"); - }); - pusher.trigger( - process.env.NEXT_PUBLIC_PUSHER_CHANNEL!, - "update-queue", - {} - ); - twitch.say( - channel, - `@${tags.username} Suggestion list has been resumed! Get your suggestions in! ` - ); - return; - } - - if (command === "sr") { - handleSongRequest(args, twitch, channel, tags); - } - - if (command === "replace") { - handleReplace(args, twitch, channel, tags); - } - - if (command === "wrongsong" || command === "remove") { - handleRemove(args, twitch, channel, tags); - } - - if (command === "song" || command === "cs" || command === "currentsong") { - handleCurrentSong(args, twitch, channel, tags); - } - - if (command === "save") { - handleSaveSong(args, twitch, channel, tags); - } - - if ( - command === "marco" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") === tags.username) - ) { - twitch.say( - channel, - `MrDestructoid POLO! - v${process.env.npm_package_version}` - ); - return; - } - - if ( - command === "songraffle" && - (tags.mod || - tags.username === "opti_21" || - // brodacaster - channel.replace("#", "") === tags.username) - ) { - handleRaffle(args, twitch, channel, tags); - } - - // if (command === "addmods") { - // if (tags.mod || tags.username === "opti_21") { - // prisma.mod.createMany({ - // data: [ - // { - // name: "", - // twitch_id: "", - // }, - // ], - // }); - // } - // } - - // if ( - // (command === "when" || command === "schedule" || command === "next") - // ) { - // handleWhenNextStream(args, twitch, channel, tags); - // } - } -}); - -// HTTP endpoint because render -const app = express(); -const port = process.env.PORT || 3001; - -app.get("/", (req, res) => res.status(200).send("pepega bot is running")); - -app.listen(port, () => console.log(`Listening on port ${port}!`)); diff --git a/src/redis/handlers/PgStatus.ts b/src/redis/handlers/PgStatus.ts index 3acf30a..4f60942 100644 --- a/src/redis/handlers/PgStatus.ts +++ b/src/redis/handlers/PgStatus.ts @@ -1,4 +1,4 @@ -import { Entity, EntityCreationData, Schema } from "redis-om"; +import { Entity, type EntityCreationData, Schema } from "redis-om"; import { client, connect } from "../redis"; interface PgStatus { diff --git a/src/redis/handlers/Queue.ts b/src/redis/handlers/Queue.ts index 4ab9f96..0898e5b 100644 --- a/src/redis/handlers/Queue.ts +++ b/src/redis/handlers/Queue.ts @@ -1,5 +1,5 @@ -import { pusher } from "../../index"; -import { Entity, EntityCreationData, Schema } from "redis-om"; +import { pusher } from "../../chatbot"; +import { Entity, type EntityCreationData, Schema } from "redis-om"; import { client, connect } from "../redis"; const QUEUE_ID = process.env.QUEUE_ID ? process.env.QUEUE_ID : ""; @@ -12,6 +12,7 @@ interface Queue { now_playing?: string; is_open: boolean; currently_processing: string[]; + is_subOnly: boolean; } class Queue extends Entity {} @@ -26,6 +27,7 @@ const queueSchema = new Schema( now_playing: { type: "string" }, is_open: { type: "boolean" }, currently_processing: { type: "string[]" }, + is_subOnly: { type: "boolean" }, }, { dataStructure: "JSON", @@ -327,6 +329,18 @@ async function removePrioFromProcessing(requestID: string) { await repository.save(queue); } +async function setSubOnly(subOnly: boolean) { + await connect(); + + const repository = client.fetchRepository(queueSchema); + + const queue = await repository.fetch(QUEUE_ID); + + queue.is_subOnly = subOnly; + + await repository.save(queue); +} + export { Queue, getQueue, @@ -344,4 +358,5 @@ export { updateNowPlaying, setPrioAsProcessing, removePrioFromProcessing, + setSubOnly, }; diff --git a/src/redis/handlers/Request.ts b/src/redis/handlers/Request.ts index d6070d0..ad119d2 100644 --- a/src/redis/handlers/Request.ts +++ b/src/redis/handlers/Request.ts @@ -1,5 +1,5 @@ -import { Entity, EntityCreationData, Schema } from "redis-om"; -import { AlreadyRequestedResponse } from "../../utils/types"; +import { Entity, type EntityCreationData, Schema } from "redis-om"; +import { type AlreadyRequestedResponse } from "../../utils/types"; import { client, connect } from "../redis"; import { removeFromOrder } from "./Queue"; import { getVideo, Video } from "./Video"; diff --git a/src/redis/handlers/Video.ts b/src/redis/handlers/Video.ts index 49a0066..56827ee 100644 --- a/src/redis/handlers/Video.ts +++ b/src/redis/handlers/Video.ts @@ -1,6 +1,6 @@ import axios from "axios"; import { Entity, Schema } from "redis-om"; -import { YTApiResponse } from "../../utils/types"; +import { type YTApiResponse } from "../../utils/types"; import { client, connect } from "../redis"; import { createPgStatus, Status } from "./PgStatus"; diff --git a/src/utils/createRequest.ts b/src/utils/createRequest.ts index 8644b60..a4c9103 100644 --- a/src/utils/createRequest.ts +++ b/src/utils/createRequest.ts @@ -1,4 +1,4 @@ -import { Request } from "@prisma/client"; +import type { Request } from "@prisma/client"; import { prisma } from "../utils/prisma"; export async function createRequest( diff --git a/src/utils/createVideo.ts b/src/utils/createVideo.ts index 04583d1..8a0c097 100644 --- a/src/utils/createVideo.ts +++ b/src/utils/createVideo.ts @@ -1,6 +1,6 @@ -import { Video } from "@prisma/client"; +import type { Video } from "@prisma/client"; import axios from "axios"; -import { YTApiResponse } from "./types"; +import { type YTApiResponse } from "./types"; import { parseYTDuration } from "./utils"; import { prisma } from "../utils/prisma"; diff --git a/src/utils/prisma.ts b/src/utils/prisma.ts index 12c412b..d6adf4e 100644 --- a/src/utils/prisma.ts +++ b/src/utils/prisma.ts @@ -3,8 +3,8 @@ import { createClient } from "@libsql/client"; import { PrismaClient } from "@prisma/client"; const libsql = createClient({ - url: process.env.TURSO_DATABASE_URL, - authToken: process.env.TURSO_AUTH_TOKEN, + url: process.env.TURSO_DATABASE_URL as string, + authToken: process.env.TURSO_AUTH_TOKEN as string, }); const adapter = new PrismaLibSQL(libsql); diff --git a/src/utils/updateRequest.ts b/src/utils/updateRequest.ts index 35c7e7e..c8f0c79 100644 --- a/src/utils/updateRequest.ts +++ b/src/utils/updateRequest.ts @@ -1,4 +1,4 @@ -import { pusher } from "../index"; +import { pusher } from "../chatbot"; import { prisma } from "./prisma"; export async function updateRequest( diff --git a/tsconfig.json b/tsconfig.json index 13fa3ae..49b5c04 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,32 @@ { "compilerOptions": { - "target": "es6", - "module": "commonjs", - "outDir": "./dist", - "rootDir": "./src", - "esModuleInterop": true, + // Enable latest features + "lib": ["ESNext", "DOM"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "noFallthroughCasesInSwitch": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false, + + "baseUrl": "./src", + "paths": { + "@/*": ["src/*"] + } } } From 53dc01b9e14b6dc700ab0717f8babe332ffe6018 Mon Sep 17 00:00:00 2001 From: opti21 <40129778+opti21@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:32:16 -0500 Subject: [PATCH 2/2] fix: need to init main functions --- .github/workflows/lint.yml | 34 ---------------------------------- package.json | 3 +++ src/chatbot.ts | 23 ++--------------------- src/commands/raffle.ts | 4 ++-- src/index.ts | 22 ++++++++++++++++++++++ src/redis/handlers/Queue.ts | 2 +- src/utils/updateRequest.ts | 2 +- 7 files changed, 31 insertions(+), 59 deletions(-) delete mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 0a598df..0000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,34 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Lint - -# Controls when the workflow will run -on: - push: - branches: [main, development] - pull_request: - branches: [main, development] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-20.04 - strategy: - matrix: - node-version: [16] - steps: - - uses: actions/checkout@v2 - - uses: pnpm/action-setup@v2.0.1 - with: - version: 7.0.0-rc.8 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node-version }} - cache: "pnpm" - - name: Install dependencies - run: pnpm install - - name: Run Lint - run: pnpm run lint diff --git a/package.json b/package.json index 3a6b4fb..806119f 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,9 @@ "name": "sethdrums-chat-bot", "module": "index.ts", "type": "module", + "scripts": { + "start": "bun run src/index.ts" + }, "dependencies": { "@libsql/client": "^0.5.6", "@prisma/adapter-libsql": "^5.11.0", diff --git a/src/chatbot.ts b/src/chatbot.ts index 3ee5b49..4ccf54a 100644 --- a/src/chatbot.ts +++ b/src/chatbot.ts @@ -16,29 +16,12 @@ import handleRemove from "./commands/wrongSong"; import handleCurrentSong from "./commands/currentSong"; import handleSaveSong from "./commands/saveSong"; import handleRaffle from "./commands/raffle"; - -if ( - !process.env.PUSHER_APP_ID || - !process.env.PUSHER_KEY || - !process.env.PUSHER_SECRET || - !process.env.PUSHER_CLUSTER -) { - throw new Error("Missing Pusher environment variables"); -} - -export const pusher = new Pusher({ - appId: process.env.PUSHER_APP_ID, - host: process.env.PUSHER_HOST!, - port: process.env.PUSHER_PORT!, - key: process.env.PUSHER_KEY, - secret: process.env.PUSHER_SECRET, - useTLS: true, -}); +import { pusher } from "index"; const botUsername = process.env.NODE_ENV === "production" ? "pepega_bot21" : "opti_21"; -const twitch = new tmi.Client({ +export const twitch = new tmi.Client({ options: { debug: true, messagesLogLevel: "info" }, connection: { reconnect: true, @@ -51,8 +34,6 @@ const twitch = new tmi.Client({ channels: [process.env.TWITCH_CHANNEL ? process.env.TWITCH_CHANNEL : ""], }); -twitch.connect().catch(console.error); - twitch.on("message", async (channel, tags, message, self) => { if (self) return; if (message.startsWith("!")) { diff --git a/src/commands/raffle.ts b/src/commands/raffle.ts index 7cb2625..444b511 100644 --- a/src/commands/raffle.ts +++ b/src/commands/raffle.ts @@ -4,11 +4,11 @@ import { setPrioAsProcessing, updateOrderIdStrings, } from "../redis/handlers/Queue"; -import { ChatUserstate, Client } from "tmi.js"; +import { type ChatUserstate, Client } from "tmi.js"; import "js-video-url-parser/lib/provider/youtube"; import { prisma } from "../utils/prisma"; import { reorder } from "../utils/utils"; -import { pusher } from "../chatbot"; +import { pusher } from "index"; let raffleOpen = false; let raffleSecondsLeft: number; diff --git a/src/index.ts b/src/index.ts index 774b6ae..d764bb8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,8 @@ import { Hono } from "hono"; import { createBunWebSocket } from "hono/bun"; import type { ServerWebSocket } from "bun"; +import { twitch } from "chatbot"; +import Pusher from "pusher"; const app = new Hono(); @@ -34,6 +36,26 @@ app.get( }) ); +twitch.connect().catch(console.error); + +if ( + !process.env.PUSHER_APP_ID || + !process.env.PUSHER_KEY || + !process.env.PUSHER_SECRET || + !process.env.PUSHER_CLUSTER +) { + throw new Error("Missing Pusher environment variables"); +} + +export const pusher = new Pusher({ + appId: process.env.PUSHER_APP_ID, + host: process.env.PUSHER_HOST!, + port: process.env.PUSHER_PORT!, + key: process.env.PUSHER_KEY, + secret: process.env.PUSHER_SECRET, + useTLS: true, +}); + const port = process.env.PORT || 3000; console.log(`Server is running on http://localhost:${port}`); diff --git a/src/redis/handlers/Queue.ts b/src/redis/handlers/Queue.ts index 0898e5b..871e032 100644 --- a/src/redis/handlers/Queue.ts +++ b/src/redis/handlers/Queue.ts @@ -1,6 +1,6 @@ -import { pusher } from "../../chatbot"; import { Entity, type EntityCreationData, Schema } from "redis-om"; import { client, connect } from "../redis"; +import { pusher } from "index"; const QUEUE_ID = process.env.QUEUE_ID ? process.env.QUEUE_ID : ""; diff --git a/src/utils/updateRequest.ts b/src/utils/updateRequest.ts index c8f0c79..19fe7a6 100644 --- a/src/utils/updateRequest.ts +++ b/src/utils/updateRequest.ts @@ -1,4 +1,4 @@ -import { pusher } from "../chatbot"; +import { pusher } from "index"; import { prisma } from "./prisma"; export async function updateRequest(