├── .github └── FUNDING.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── media └── .gitkeep ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── src ├── controllers │ ├── message.ts │ ├── profile.ts │ └── session.ts ├── env.ts ├── errors │ └── index.ts ├── index.ts ├── middlewares │ ├── error.middleware.ts │ ├── key.middleware.ts │ ├── notfound.middleware.ts │ └── validation.middleware.ts └── webhooks │ ├── index.ts │ ├── media.ts │ ├── message.ts │ └── session.ts └── tsconfig.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: mimamch # Replace with a single Buy Me a Coffee username 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: ['https://trakteer.id/mimamch/tip'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | wa_credentials/ 3 | .env 4 | media/* 5 | !media/.gitkeep -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing Guidelines 2 | 3 | Thank you for considering contributing to the `@mimamch/wa-gateway` library! We welcome your contributions and appreciate your support. To ensure a smooth collaboration process, please follow these guidelines when contributing to the project. 4 | 5 | ### Bug Reports and Feature Requests 6 | 7 | If you encounter a bug or have a feature request, please open an issue on the [GitHub issue tracker](https://github.com/mimamch/cmd/issues). When reporting a bug, provide detailed information about the issue, including steps to reproduce it. For feature requests, clearly describe the new functionality you would like to see in the library. 8 | 9 | ### Pull Requests 10 | 11 | We welcome pull requests for bug fixes, enhancements, and new features. Before submitting a pull request, please ensure that: 12 | 13 | 1. You have forked the repository and created a new branch for your changes. 14 | 2. Your code follows the project's coding style and conventions. 15 | 3. You have added appropriate tests to cover your changes. 16 | 4. All existing tests pass successfully. 17 | 5. Your commits are descriptive and include a clear explanation of the changes. 18 | 19 | To submit a pull request, follow these steps: 20 | 21 | 1. Fork the repository on GitHub. 22 | 2. Clone your forked repository to your local machine. 23 | 3. Create a new branch for your changes: `git checkout -b my-feature`. 24 | 4. Make your changes and commit them: `git commit -m "Add new feature"`. 25 | 5. Push your branch to your forked repository: `git push origin my-feature`. 26 | 6. Open a pull request on the official repository's GitHub page. 27 | 28 | ### Development Setup 29 | 30 | To set up the development environment and start working on the library, follow these steps: 31 | 32 | 1. Clone the repository: `git clone https://github.com/mimamch/cmd.git`. 33 | 2. Install the project dependencies: `npm install`. 34 | 3. Run tests to ensure everything is working: `npm test`. 35 | 4. Make your changes and add tests for them. 36 | 5. Run tests again to verify that everything is still working: `npm test`. 37 | 6. Commit your changes and push to your forked repository. 38 | 7. Open a pull request following the guidelines mentioned above. 39 | 40 | ### Code Style and Conventions 41 | 42 | We strive to maintain a clean and consistent codebase. Please adhere to the following guidelines when contributing to the project: 43 | 44 | - Use meaningful and descriptive variable and function names. 45 | - Follow the existing code formatting and indentation style. 46 | - Ensure your code is properly commented and documented. 47 | - Write clear commit messages that explain the purpose of each commit. 48 | 49 | ### License 50 | 51 | By contributing to this project, you agree that your contributions will be licensed under the MIT License. Make sure you understand and agree to the licensing terms before submitting your pull request. 52 | 53 | ### Code of Conduct 54 | 55 | Please note that by participating in this project, you are expected to follow the [Code of Conduct](CODE_OF_CONDUCT.md). Be respectful and considerate towards others, and maintain a positive and inclusive environment for collaboration. 56 | 57 | We appreciate your contributions and look forward to your involvement in improving the `@mimamch/wa-gateway` library! 58 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Headless Multi Session Whatsapp Gateway NodeJS 2 | 3 | Easy Setup Headless multi session Whatsapp Gateway with NodeJS 4 | 5 | - Support Multi device 6 | - Support Multi Session / Multi Phone Number 7 | - Send Text Message 8 | - Send Image 9 | - Send Document 10 | 11 | #### Read also [wa-multi-session](https://github.com/mimamch/wa-multi-session) 12 | 13 | ### ⚠️ This application need to running in NodeJS v18 or later. ⚠️ 14 | 15 | #### Please Read [How to install NodeJS](https://nodejs.org/en/download/package-manager) 16 | 17 | ## Install and Running 18 | 19 | #### 1. Clone the project 20 | 21 | ```bash 22 | git clone https://github.com/mimamch/wa_gateway.git 23 | ``` 24 | 25 | #### 2. Go to the project directory 26 | 27 | ```bash 28 | cd wa_gateway 29 | ``` 30 | 31 | #### 3. Install dependencies 32 | 33 | ```bash 34 | npm install 35 | ``` 36 | 37 | #### 4. Start the server 38 | 39 | ```bash 40 | npm run start 41 | ``` 42 | 43 | #### 5. Open On Browser & Start Scan QR 44 | 45 | ``` 46 | http://localhost:5001/session/start?session=mysession 47 | ``` 48 | 49 | #### 6. Sending first message 50 | 51 | ``` 52 | http://localhost:5001/message/send-text?session=mysession&to=628123456789&text=Hello 53 | ``` 54 | 55 | ## API Reference 56 | 57 | #### Add new session 58 | 59 | ``` 60 | GET /session/start?session=NEW_SESSION_NAME 61 | or 62 | POST /session/start 63 | ``` 64 | 65 | | Parameter | Type | Description | 66 | | :-------- | :------- | :------------------------------------- | 67 | | `session` | `string` | **Required**. Create Your Session Name | 68 | 69 | #### Send Text Message 70 | 71 | ``` 72 | POST /message/send-text 73 | ``` 74 | 75 | | Body | Type | Description | 76 | | :--------- | :-------- | :----------------------------------------------------------------------- | 77 | | `session` | `string` | **Required**. Session Name You Have Created | 78 | | `to` | `string` | **Required**. Receiver Phone Number with Country Code (e.g: 62812345678) | 79 | | `text` | `string` | **Required**. Text Message | 80 | | `is_group` | `boolean` | **Optional**. True if "to" field is group ids | 81 | 82 | #### Send Image 83 | 84 | ``` 85 | POST /message/send-image 86 | ``` 87 | 88 | | Body | Type | Description | 89 | | :---------- | :-------- | :----------------------------------------------------------------------- | 90 | | `session` | `string` | **Required**. Session Name You Have Created | 91 | | `to` | `string` | **Required**. Receiver Phone Number with Country Code (e.g: 62812345678) | 92 | | `text` | `string` | **Required**. Caption Massage | 93 | | `image_url` | `string` | **Required**. URL Image | 94 | | `is_group` | `boolean` | **Optional**. True if "to" field is group ids | 95 | 96 | #### Send Document 97 | 98 | ``` 99 | POST /message/send-document 100 | ``` 101 | 102 | | Body | Type | Description | 103 | | :-------------- | :-------- | :----------------------------------------------------------------------- | 104 | | `session` | `string` | **Required**. Session Name You Have Created | 105 | | `to` | `string` | **Required**. Receiver Phone Number with Country Code (e.g: 62812345678) | 106 | | `text` | `string` | **Required**. Caption Massage | 107 | | `document_url` | `string` | **Required**. Document URL | 108 | | `document_name` | `string` | **Required**. Document Name | 109 | | `is_group` | `boolean` | **Optional**. True if "to" field is group ids | 110 | 111 | #### Delete session 112 | 113 | ``` 114 | GET /session/logout?session=SESSION_NAME 115 | ``` 116 | 117 | | Parameter | Type | Description | 118 | | :-------- | :------- | :------------------------------------- | 119 | | `session` | `string` | **Required**. Create Your Session Name | 120 | 121 | #### Get All Session ID 122 | 123 | ``` 124 | GET /session 125 | ``` 126 | 127 | ## Examples 128 | 129 | ### Using Axios 130 | 131 | ```js 132 | // send text 133 | axios.post("http://localhost:5001/message/send-text", { 134 | session: "mysession", 135 | to: "62812345678", 136 | text: "hello world", 137 | }); 138 | 139 | // send image 140 | axios.post("http://localhost:5001/message/send-image", { 141 | session: "mysession", 142 | to: "62812345678", 143 | text: "hello world", 144 | image_url: "https://placehold.co/600x400", 145 | }); 146 | ``` 147 | 148 | ## Webhook Guide 149 | 150 | Set your webhook URL in the environment variable `WEBHOOK_BASE_URL` or in the `.env` file. 151 | The request method will be `POST` and the body will be in JSON format. 152 | 153 | ``` 154 | WEBHOOK_BASE_URL="http://yourdomain.com/webhook" 155 | ``` 156 | 157 | ### 🪝 Session Webhook 158 | 159 | Request path: 160 | 161 | ``` 162 | POST http://yourdomain.com/webhook/session 163 | ``` 164 | 165 | Example body: 166 | 167 | ```js 168 | { 169 | "session": "mysession", 170 | "status": "connected" // "disconnected" | "connecting" 171 | } 172 | ``` 173 | 174 | ### 🪝 Message Webhook 175 | 176 | Request path: 177 | 178 | ``` 179 | POST http://yourdomain.com/webhook/message 180 | ``` 181 | 182 | Example body: 183 | 184 | ```js 185 | { 186 | "session": "mysession", 187 | "from": "xxx@s.whatsapp.net", 188 | "message": "Hello World", 189 | "media": { 190 | "image": "3A5089C2F2652D46EBC5.jpg", 191 | "video": null, 192 | "document": null, 193 | "audio": null 194 | } 195 | } 196 | ``` 197 | 198 | You can get the media file by using the `media` object in the webhook message. The media file will be saved in the `./media` directory with the name specified in the `media` object. 199 | You can access media files using the following URL format: 200 | 201 | ``` 202 | http://localhost:5001/media/3A5089C2F2652D46EBC5.jpg 203 | ``` 204 | 205 | ## Upgrading 206 | 207 | ``` 208 | npm install wa-multi-session@latest 209 | ``` 210 | 211 | ## Documentation 212 | 213 | For detailed documentation, including guides and API references, please visit the [official documentation](https://github.com/mimamch/wa-gateway). 214 | 215 | ## Contributing 216 | 217 | Contributions are welcome! Please follow the guidelines outlined in the [CONTRIBUTING.md](https://github.com/mimamch/wa-gateway/blob/main/CONTRIBUTING.md) file. 218 | 219 | ## License 220 | 221 | This library is licensed under the [MIT License](https://github.com/mimamch/wa-gateway/blob/main/LICENSE). 222 | -------------------------------------------------------------------------------- /media/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mimamch/wa-gateway/7e3f4b82a3ae63530dab9ddb6dc3cc9ad8bee07f/media/.gitkeep -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wa-gateway", 3 | "version": "4.3.1", 4 | "scripts": { 5 | "dev": "tsx watch src/index.ts", 6 | "start": "tsx src/index.ts" 7 | }, 8 | "author": { 9 | "name": "mimamch", 10 | "email": "mimamch28@gmail.com" 11 | }, 12 | "license": "ISC", 13 | "dependencies": { 14 | "@hono/node-server": "^1.13.7", 15 | "@hono/zod-validator": "^0.4.1", 16 | "axios": "^1.8.2", 17 | "cookie-parser": "~1.4.4", 18 | "cors": "^2.8.5", 19 | "debug": "~2.6.9", 20 | "dotenv": "^16.0.0", 21 | "ejs": "^3.1.8", 22 | "express": "^4.18.2", 23 | "hono": "^4.6.13", 24 | "http-errors": "~1.6.3", 25 | "moment": "^2.29.4", 26 | "morgan": "~1.9.1", 27 | "qrcode": "^1.5.1", 28 | "tsx": "^4.19.2", 29 | "wa-multi-session": "^3.8.0", 30 | "zod": "^3.23.8" 31 | }, 32 | "repository": { 33 | "type": "git", 34 | "url": "git@github.com:mimamch/wa-gateway.git" 35 | }, 36 | "devDependencies": { 37 | "@types/node": "^22.10.1", 38 | "@types/qrcode": "^1.5.5" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@hono/node-server': 12 | specifier: ^1.13.7 13 | version: 1.13.7(hono@4.6.13) 14 | '@hono/zod-validator': 15 | specifier: ^0.4.1 16 | version: 0.4.1(hono@4.6.13)(zod@3.23.8) 17 | axios: 18 | specifier: ^1.8.2 19 | version: 1.8.2(debug@2.6.9) 20 | cookie-parser: 21 | specifier: ~1.4.4 22 | version: 1.4.4 23 | cors: 24 | specifier: ^2.8.5 25 | version: 2.8.5 26 | debug: 27 | specifier: ~2.6.9 28 | version: 2.6.9 29 | dotenv: 30 | specifier: ^16.0.0 31 | version: 16.0.0 32 | ejs: 33 | specifier: ^3.1.8 34 | version: 3.1.8 35 | express: 36 | specifier: ^4.18.2 37 | version: 4.18.2 38 | hono: 39 | specifier: ^4.6.13 40 | version: 4.6.13 41 | http-errors: 42 | specifier: ~1.6.3 43 | version: 1.6.3 44 | moment: 45 | specifier: ^2.29.4 46 | version: 2.29.4 47 | morgan: 48 | specifier: ~1.9.1 49 | version: 1.9.1 50 | qrcode: 51 | specifier: ^1.5.1 52 | version: 1.5.1 53 | tsx: 54 | specifier: ^4.19.2 55 | version: 4.19.2 56 | wa-multi-session: 57 | specifier: ^3.8.0 58 | version: 3.8.0(debug@2.6.9)(eslint@8.57.1)(typescript@5.7.2) 59 | zod: 60 | specifier: ^3.23.8 61 | version: 3.23.8 62 | devDependencies: 63 | '@types/node': 64 | specifier: ^22.10.1 65 | version: 22.10.1 66 | '@types/qrcode': 67 | specifier: ^1.5.5 68 | version: 1.5.5 69 | 70 | packages: 71 | 72 | '@adiwajshing/keyed-db@0.2.4': 73 | resolution: {integrity: sha512-yprSnAtj80/VKuDqRcFFLDYltoNV8tChNwFfIgcf6PGD4sjzWIBgs08pRuTqGH5mk5wgL6PBRSsMCZqtZwzFEw==} 74 | 75 | '@esbuild/aix-ppc64@0.23.1': 76 | resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} 77 | engines: {node: '>=18'} 78 | cpu: [ppc64] 79 | os: [aix] 80 | 81 | '@esbuild/android-arm64@0.23.1': 82 | resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} 83 | engines: {node: '>=18'} 84 | cpu: [arm64] 85 | os: [android] 86 | 87 | '@esbuild/android-arm@0.23.1': 88 | resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} 89 | engines: {node: '>=18'} 90 | cpu: [arm] 91 | os: [android] 92 | 93 | '@esbuild/android-x64@0.23.1': 94 | resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} 95 | engines: {node: '>=18'} 96 | cpu: [x64] 97 | os: [android] 98 | 99 | '@esbuild/darwin-arm64@0.23.1': 100 | resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} 101 | engines: {node: '>=18'} 102 | cpu: [arm64] 103 | os: [darwin] 104 | 105 | '@esbuild/darwin-x64@0.23.1': 106 | resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} 107 | engines: {node: '>=18'} 108 | cpu: [x64] 109 | os: [darwin] 110 | 111 | '@esbuild/freebsd-arm64@0.23.1': 112 | resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} 113 | engines: {node: '>=18'} 114 | cpu: [arm64] 115 | os: [freebsd] 116 | 117 | '@esbuild/freebsd-x64@0.23.1': 118 | resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} 119 | engines: {node: '>=18'} 120 | cpu: [x64] 121 | os: [freebsd] 122 | 123 | '@esbuild/linux-arm64@0.23.1': 124 | resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} 125 | engines: {node: '>=18'} 126 | cpu: [arm64] 127 | os: [linux] 128 | 129 | '@esbuild/linux-arm@0.23.1': 130 | resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} 131 | engines: {node: '>=18'} 132 | cpu: [arm] 133 | os: [linux] 134 | 135 | '@esbuild/linux-ia32@0.23.1': 136 | resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} 137 | engines: {node: '>=18'} 138 | cpu: [ia32] 139 | os: [linux] 140 | 141 | '@esbuild/linux-loong64@0.23.1': 142 | resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} 143 | engines: {node: '>=18'} 144 | cpu: [loong64] 145 | os: [linux] 146 | 147 | '@esbuild/linux-mips64el@0.23.1': 148 | resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} 149 | engines: {node: '>=18'} 150 | cpu: [mips64el] 151 | os: [linux] 152 | 153 | '@esbuild/linux-ppc64@0.23.1': 154 | resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} 155 | engines: {node: '>=18'} 156 | cpu: [ppc64] 157 | os: [linux] 158 | 159 | '@esbuild/linux-riscv64@0.23.1': 160 | resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} 161 | engines: {node: '>=18'} 162 | cpu: [riscv64] 163 | os: [linux] 164 | 165 | '@esbuild/linux-s390x@0.23.1': 166 | resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} 167 | engines: {node: '>=18'} 168 | cpu: [s390x] 169 | os: [linux] 170 | 171 | '@esbuild/linux-x64@0.23.1': 172 | resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} 173 | engines: {node: '>=18'} 174 | cpu: [x64] 175 | os: [linux] 176 | 177 | '@esbuild/netbsd-x64@0.23.1': 178 | resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} 179 | engines: {node: '>=18'} 180 | cpu: [x64] 181 | os: [netbsd] 182 | 183 | '@esbuild/openbsd-arm64@0.23.1': 184 | resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} 185 | engines: {node: '>=18'} 186 | cpu: [arm64] 187 | os: [openbsd] 188 | 189 | '@esbuild/openbsd-x64@0.23.1': 190 | resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} 191 | engines: {node: '>=18'} 192 | cpu: [x64] 193 | os: [openbsd] 194 | 195 | '@esbuild/sunos-x64@0.23.1': 196 | resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} 197 | engines: {node: '>=18'} 198 | cpu: [x64] 199 | os: [sunos] 200 | 201 | '@esbuild/win32-arm64@0.23.1': 202 | resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} 203 | engines: {node: '>=18'} 204 | cpu: [arm64] 205 | os: [win32] 206 | 207 | '@esbuild/win32-ia32@0.23.1': 208 | resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} 209 | engines: {node: '>=18'} 210 | cpu: [ia32] 211 | os: [win32] 212 | 213 | '@esbuild/win32-x64@0.23.1': 214 | resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} 215 | engines: {node: '>=18'} 216 | cpu: [x64] 217 | os: [win32] 218 | 219 | '@eshaz/web-worker@1.2.2': 220 | resolution: {integrity: sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==} 221 | 222 | '@eslint-community/eslint-utils@4.4.1': 223 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 224 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 225 | peerDependencies: 226 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 227 | 228 | '@eslint-community/regexpp@4.12.1': 229 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 230 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 231 | 232 | '@eslint/eslintrc@2.1.4': 233 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 234 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 235 | 236 | '@eslint/js@8.57.1': 237 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 238 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 239 | 240 | '@hapi/boom@10.0.1': 241 | resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} 242 | 243 | '@hapi/boom@9.1.4': 244 | resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==} 245 | 246 | '@hapi/hoek@11.0.2': 247 | resolution: {integrity: sha512-aKmlCO57XFZ26wso4rJsW4oTUnrgTFw2jh3io7CAtO9w4UltBNwRXvXIVzzyfkaaLRo3nluP/19msA8vDUUuKw==} 248 | 249 | '@hapi/hoek@9.3.0': 250 | resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} 251 | 252 | '@hono/node-server@1.13.7': 253 | resolution: {integrity: sha512-kTfUMsoloVKtRA2fLiGSd9qBddmru9KadNyhJCwgKBxTiNkaAJEwkVN9KV/rS4HtmmNRtUh6P+YpmjRMl0d9vQ==} 254 | engines: {node: '>=18.14.1'} 255 | peerDependencies: 256 | hono: ^4 257 | 258 | '@hono/zod-validator@0.4.1': 259 | resolution: {integrity: sha512-I8LyfeJfvVmC5hPjZ2Iij7RjexlgSBT7QJudZ4JvNPLxn0JQ3sqclz2zydlwISAnw21D2n4LQ0nfZdoiv9fQQA==} 260 | peerDependencies: 261 | hono: '>=3.9.0' 262 | zod: ^3.19.1 263 | 264 | '@humanwhocodes/config-array@0.13.0': 265 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 266 | engines: {node: '>=10.10.0'} 267 | deprecated: Use @eslint/config-array instead 268 | 269 | '@humanwhocodes/module-importer@1.0.1': 270 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 271 | engines: {node: '>=12.22'} 272 | 273 | '@humanwhocodes/object-schema@2.0.3': 274 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 275 | deprecated: Use @eslint/object-schema instead 276 | 277 | '@nodelib/fs.scandir@2.1.5': 278 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 279 | engines: {node: '>= 8'} 280 | 281 | '@nodelib/fs.stat@2.0.5': 282 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 283 | engines: {node: '>= 8'} 284 | 285 | '@nodelib/fs.walk@1.2.8': 286 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 287 | engines: {node: '>= 8'} 288 | 289 | '@protobufjs/aspromise@1.1.2': 290 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 291 | 292 | '@protobufjs/base64@1.1.2': 293 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 294 | 295 | '@protobufjs/codegen@2.0.4': 296 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 297 | 298 | '@protobufjs/eventemitter@1.1.0': 299 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 300 | 301 | '@protobufjs/fetch@1.1.0': 302 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 303 | 304 | '@protobufjs/float@1.0.2': 305 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 306 | 307 | '@protobufjs/inquire@1.1.0': 308 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 309 | 310 | '@protobufjs/path@1.1.2': 311 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 312 | 313 | '@protobufjs/pool@1.1.0': 314 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 315 | 316 | '@protobufjs/utf8@1.1.0': 317 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 318 | 319 | '@thi.ng/bitstream@2.2.48': 320 | resolution: {integrity: sha512-54W3wH7dGm6Xsz403CoskQbDCAK+E4doDzOaecjn8rtPFqftmG00q7j7TuRnxPDzVdn7rTxGyeyX51ipWjDAew==} 321 | engines: {node: '>=18'} 322 | 323 | '@thi.ng/errors@2.4.18': 324 | resolution: {integrity: sha512-sGrzZHsE16VWSUzhv53EESO5qLzw2pvzTd/+8xkM5x3BX+RhoK5yPB/tTOulS1OIXBQOgvpyiGuQpx/CxjzfDQ==} 325 | engines: {node: '>=18'} 326 | 327 | '@tokenizer/token@0.3.0': 328 | resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} 329 | 330 | '@types/long@4.0.2': 331 | resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} 332 | 333 | '@types/node@10.17.60': 334 | resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} 335 | 336 | '@types/node@22.10.1': 337 | resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} 338 | 339 | '@types/qrcode@1.5.5': 340 | resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} 341 | 342 | '@typescript-eslint/eslint-plugin@7.18.0': 343 | resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} 344 | engines: {node: ^18.18.0 || >=20.0.0} 345 | peerDependencies: 346 | '@typescript-eslint/parser': ^7.0.0 347 | eslint: ^8.56.0 348 | typescript: '*' 349 | peerDependenciesMeta: 350 | typescript: 351 | optional: true 352 | 353 | '@typescript-eslint/parser@7.18.0': 354 | resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} 355 | engines: {node: ^18.18.0 || >=20.0.0} 356 | peerDependencies: 357 | eslint: ^8.56.0 358 | typescript: '*' 359 | peerDependenciesMeta: 360 | typescript: 361 | optional: true 362 | 363 | '@typescript-eslint/scope-manager@7.18.0': 364 | resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} 365 | engines: {node: ^18.18.0 || >=20.0.0} 366 | 367 | '@typescript-eslint/type-utils@7.18.0': 368 | resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} 369 | engines: {node: ^18.18.0 || >=20.0.0} 370 | peerDependencies: 371 | eslint: ^8.56.0 372 | typescript: '*' 373 | peerDependenciesMeta: 374 | typescript: 375 | optional: true 376 | 377 | '@typescript-eslint/types@7.18.0': 378 | resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} 379 | engines: {node: ^18.18.0 || >=20.0.0} 380 | 381 | '@typescript-eslint/typescript-estree@7.18.0': 382 | resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} 383 | engines: {node: ^18.18.0 || >=20.0.0} 384 | peerDependencies: 385 | typescript: '*' 386 | peerDependenciesMeta: 387 | typescript: 388 | optional: true 389 | 390 | '@typescript-eslint/utils@7.18.0': 391 | resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} 392 | engines: {node: ^18.18.0 || >=20.0.0} 393 | peerDependencies: 394 | eslint: ^8.56.0 395 | 396 | '@typescript-eslint/visitor-keys@7.18.0': 397 | resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} 398 | engines: {node: ^18.18.0 || >=20.0.0} 399 | 400 | '@ungap/structured-clone@1.2.1': 401 | resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} 402 | 403 | '@wasm-audio-decoders/common@9.0.4': 404 | resolution: {integrity: sha512-+XdSt6mMfvir5D+vcW8gLqledJIgzkBAGXOG7ySJtbKdOTHduG2YAHvUNH9/Mb2hkiM8U9EJrGA6HhbsqG/bbg==} 405 | 406 | '@wasm-audio-decoders/common@9.0.5': 407 | resolution: {integrity: sha512-b9JNh9sPAvn8PVIizNh9D60WkfQong/u9ea873H47u7zvVDLctxYIp2aZw9CQqXaQdk7JB3MoU5UHiseO40swg==} 408 | 409 | '@wasm-audio-decoders/flac@0.2.4': 410 | resolution: {integrity: sha512-bsUlwIjd5y+IAEyILCQdi8y0LocKEkZ0enA8ljDL+NVVwN+5Rv5Xkm/HcdUxnB7MtekxN2cNcTsv1zkb2aZyWg==} 411 | 412 | '@wasm-audio-decoders/ogg-vorbis@0.1.15': 413 | resolution: {integrity: sha512-skAN3NIrRzMkVouyfyq3gYT/op/K9iutMZr7kr5/9fnIaCnpYdrdbv69X8PZ6y3K2J5zy5KuGno5kzH8yGLOOg==} 414 | 415 | '@whiskeysockets/baileys@6.7.9': 416 | resolution: {integrity: sha512-+23DOlzgRYvDYPq5qTDRCho6EqyRMaSWL2OadvhY+nE4Ew8HCNTwpDASIaGoFPqGyQgzAJUNgwOFvBsdJlORpA==} 417 | deprecated: The new official package name for the Baileys package is "baileys". Please use that package name going forward. This version may stop receiving updates in the future. 418 | peerDependencies: 419 | jimp: ^0.16.1 420 | link-preview-js: ^3.0.0 421 | qrcode-terminal: ^0.12.0 422 | sharp: ^0.32.6 423 | peerDependenciesMeta: 424 | jimp: 425 | optional: true 426 | link-preview-js: 427 | optional: true 428 | qrcode-terminal: 429 | optional: true 430 | sharp: 431 | optional: true 432 | 433 | '@whiskeysockets/eslint-config@https://codeload.github.com/whiskeysockets/eslint-config/tar.gz/326b55f2842668f4e11f471451c4e39819a0e1bf': 434 | resolution: {tarball: https://codeload.github.com/whiskeysockets/eslint-config/tar.gz/326b55f2842668f4e11f471451c4e39819a0e1bf} 435 | version: 1.0.0 436 | peerDependencies: 437 | eslint: '*' 438 | typescript: '>=4' 439 | 440 | '@whiskeysockets/libsignal-node@https://codeload.github.com/WhiskeySockets/libsignal-node/tar.gz/d13b6622a208d3037a98b6f447bbde70261c39a9': 441 | resolution: {tarball: https://codeload.github.com/WhiskeySockets/libsignal-node/tar.gz/d13b6622a208d3037a98b6f447bbde70261c39a9} 442 | version: 2.0.1 443 | 444 | accepts@1.3.8: 445 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 446 | engines: {node: '>= 0.6'} 447 | 448 | acorn-jsx@5.3.2: 449 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 450 | peerDependencies: 451 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 452 | 453 | acorn@8.14.0: 454 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 455 | engines: {node: '>=0.4.0'} 456 | hasBin: true 457 | 458 | ajv@6.12.6: 459 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 460 | 461 | ansi-regex@5.0.1: 462 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 463 | engines: {node: '>=8'} 464 | 465 | ansi-styles@4.3.0: 466 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 467 | engines: {node: '>=8'} 468 | 469 | argparse@2.0.1: 470 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 471 | 472 | array-flatten@1.1.1: 473 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 474 | 475 | array-union@2.1.0: 476 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 477 | engines: {node: '>=8'} 478 | 479 | async-lock@1.4.1: 480 | resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} 481 | 482 | async@3.2.4: 483 | resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} 484 | 485 | asynckit@0.4.0: 486 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 487 | 488 | atomic-sleep@1.0.0: 489 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 490 | engines: {node: '>=8.0.0'} 491 | 492 | audio-buffer@5.0.0: 493 | resolution: {integrity: sha512-gsDyj1wwUp8u7NBB+eW6yhLb9ICf+0eBmDX8NGaAS00w8/fLqFdxUlL5Ge/U8kB64DlQhdonxYC59dXy1J7H/w==} 494 | 495 | audio-decode@2.2.0: 496 | resolution: {integrity: sha512-3SLGQ4VL57+fuFHV5JBeTNx3frjdztOIm4LJBFqiFhMQGeerrcS3WQbfuPPOqcNmqFGmPeaAAFPCxF75cSK/pQ==} 497 | 498 | audio-type@2.2.1: 499 | resolution: {integrity: sha512-En9AY6EG1qYqEy5L/quryzbA4akBpJrnBZNxeKTqGHC2xT9Qc4aZ8b7CcbOMFTTc/MGdoNyp+SN4zInZNKxMYA==} 500 | engines: {node: '>=14'} 501 | 502 | axios@1.8.2: 503 | resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==} 504 | 505 | balanced-match@1.0.2: 506 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 507 | 508 | basic-auth@2.0.1: 509 | resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} 510 | engines: {node: '>= 0.8'} 511 | 512 | body-parser@1.20.1: 513 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} 514 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 515 | 516 | boolbase@1.0.0: 517 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 518 | 519 | brace-expansion@1.1.11: 520 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 521 | 522 | brace-expansion@2.0.1: 523 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 524 | 525 | braces@3.0.3: 526 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 527 | engines: {node: '>=8'} 528 | 529 | bytes@3.1.2: 530 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 531 | engines: {node: '>= 0.8'} 532 | 533 | cache-manager@5.7.6: 534 | resolution: {integrity: sha512-wBxnBHjDxF1RXpHCBD6HGvKER003Ts7IIm0CHpggliHzN1RZditb7rXoduE1rplc2DEFYKxhLKgFuchXMJje9w==} 535 | engines: {node: '>= 18'} 536 | 537 | call-bind@1.0.2: 538 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 539 | 540 | callsites@3.1.0: 541 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 542 | engines: {node: '>=6'} 543 | 544 | camelcase@5.3.1: 545 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 546 | engines: {node: '>=6'} 547 | 548 | chalk@4.1.2: 549 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 550 | engines: {node: '>=10'} 551 | 552 | cheerio-select@2.1.0: 553 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 554 | 555 | cheerio@1.0.0-rc.11: 556 | resolution: {integrity: sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag==} 557 | engines: {node: '>= 6'} 558 | 559 | cliui@6.0.0: 560 | resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 561 | 562 | clone@2.1.2: 563 | resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 564 | engines: {node: '>=0.8'} 565 | 566 | codec-parser@2.4.3: 567 | resolution: {integrity: sha512-3dAvFtdpxn4YLstqsB2ZiJXXNg7n1j7R5ONeDuk+2kBkb39PwrCRytOFHlSWA8q5jCjW3PumeMv9q37bFHsijg==} 568 | 569 | color-convert@2.0.1: 570 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 571 | engines: {node: '>=7.0.0'} 572 | 573 | color-name@1.1.4: 574 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 575 | 576 | combined-stream@1.0.8: 577 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 578 | engines: {node: '>= 0.8'} 579 | 580 | concat-map@0.0.1: 581 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 582 | 583 | content-disposition@0.5.4: 584 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 585 | engines: {node: '>= 0.6'} 586 | 587 | content-type@1.0.5: 588 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 589 | engines: {node: '>= 0.6'} 590 | 591 | cookie-parser@1.4.4: 592 | resolution: {integrity: sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==} 593 | engines: {node: '>= 0.8.0'} 594 | 595 | cookie-signature@1.0.6: 596 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 597 | 598 | cookie@0.3.1: 599 | resolution: {integrity: sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==} 600 | engines: {node: '>= 0.6'} 601 | 602 | cookie@0.5.0: 603 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 604 | engines: {node: '>= 0.6'} 605 | 606 | cors@2.8.5: 607 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 608 | engines: {node: '>= 0.10'} 609 | 610 | cross-spawn@7.0.6: 611 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 612 | engines: {node: '>= 8'} 613 | 614 | css-select@5.1.0: 615 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 616 | 617 | css-what@6.1.0: 618 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 619 | engines: {node: '>= 6'} 620 | 621 | curve25519-js@0.0.4: 622 | resolution: {integrity: sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==} 623 | 624 | debug@2.6.9: 625 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 626 | peerDependencies: 627 | supports-color: '*' 628 | peerDependenciesMeta: 629 | supports-color: 630 | optional: true 631 | 632 | debug@4.3.4: 633 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 634 | engines: {node: '>=6.0'} 635 | peerDependencies: 636 | supports-color: '*' 637 | peerDependenciesMeta: 638 | supports-color: 639 | optional: true 640 | 641 | decamelize@1.2.0: 642 | resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 643 | engines: {node: '>=0.10.0'} 644 | 645 | deep-is@0.1.4: 646 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 647 | 648 | delayed-stream@1.0.0: 649 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 650 | engines: {node: '>=0.4.0'} 651 | 652 | depd@1.1.2: 653 | resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} 654 | engines: {node: '>= 0.6'} 655 | 656 | depd@2.0.0: 657 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 658 | engines: {node: '>= 0.8'} 659 | 660 | destroy@1.2.0: 661 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 662 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 663 | 664 | dijkstrajs@1.0.3: 665 | resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} 666 | 667 | dir-glob@3.0.1: 668 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 669 | engines: {node: '>=8'} 670 | 671 | doctrine@3.0.0: 672 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 673 | engines: {node: '>=6.0.0'} 674 | 675 | dom-serializer@2.0.0: 676 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 677 | 678 | domelementtype@2.3.0: 679 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 680 | 681 | domhandler@5.0.3: 682 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 683 | engines: {node: '>= 4'} 684 | 685 | domutils@3.2.2: 686 | resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 687 | 688 | dotenv@16.0.0: 689 | resolution: {integrity: sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==} 690 | engines: {node: '>=12'} 691 | 692 | duplexify@4.1.2: 693 | resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} 694 | 695 | ee-first@1.1.1: 696 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 697 | 698 | ejs@3.1.8: 699 | resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} 700 | engines: {node: '>=0.10.0'} 701 | hasBin: true 702 | 703 | emoji-regex@8.0.0: 704 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 705 | 706 | encode-utf8@1.0.3: 707 | resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} 708 | 709 | encodeurl@1.0.2: 710 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 711 | engines: {node: '>= 0.8'} 712 | 713 | end-of-stream@1.4.4: 714 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 715 | 716 | entities@4.5.0: 717 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 718 | engines: {node: '>=0.12'} 719 | 720 | esbuild@0.23.1: 721 | resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} 722 | engines: {node: '>=18'} 723 | hasBin: true 724 | 725 | escape-html@1.0.3: 726 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 727 | 728 | escape-string-regexp@4.0.0: 729 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 730 | engines: {node: '>=10'} 731 | 732 | eslint-plugin-simple-import-sort@12.1.1: 733 | resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} 734 | peerDependencies: 735 | eslint: '>=5.0.0' 736 | 737 | eslint-scope@7.2.2: 738 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 739 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 740 | 741 | eslint-visitor-keys@3.4.3: 742 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 743 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 744 | 745 | eslint@8.57.1: 746 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 747 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 748 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 749 | hasBin: true 750 | 751 | espree@9.6.1: 752 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 753 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 754 | 755 | esquery@1.6.0: 756 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 757 | engines: {node: '>=0.10'} 758 | 759 | esrecurse@4.3.0: 760 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 761 | engines: {node: '>=4.0'} 762 | 763 | estraverse@5.3.0: 764 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 765 | engines: {node: '>=4.0'} 766 | 767 | esutils@2.0.3: 768 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 769 | engines: {node: '>=0.10.0'} 770 | 771 | etag@1.8.1: 772 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 773 | engines: {node: '>= 0.6'} 774 | 775 | eventemitter3@5.0.1: 776 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 777 | 778 | express@4.18.2: 779 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} 780 | engines: {node: '>= 0.10.0'} 781 | 782 | fast-deep-equal@3.1.3: 783 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 784 | 785 | fast-glob@3.3.2: 786 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 787 | engines: {node: '>=8.6.0'} 788 | 789 | fast-json-stable-stringify@2.1.0: 790 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 791 | 792 | fast-levenshtein@2.0.6: 793 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 794 | 795 | fast-redact@3.2.0: 796 | resolution: {integrity: sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==} 797 | engines: {node: '>=6'} 798 | 799 | fastq@1.17.1: 800 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 801 | 802 | file-entry-cache@6.0.1: 803 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 804 | engines: {node: ^10.12.0 || >=12.0.0} 805 | 806 | file-type@16.5.4: 807 | resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} 808 | engines: {node: '>=10'} 809 | 810 | filelist@1.0.4: 811 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 812 | 813 | fill-range@7.1.1: 814 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 815 | engines: {node: '>=8'} 816 | 817 | finalhandler@1.2.0: 818 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} 819 | engines: {node: '>= 0.8'} 820 | 821 | find-up@4.1.0: 822 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 823 | engines: {node: '>=8'} 824 | 825 | find-up@5.0.0: 826 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 827 | engines: {node: '>=10'} 828 | 829 | flat-cache@3.2.0: 830 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 831 | engines: {node: ^10.12.0 || >=12.0.0} 832 | 833 | flatted@3.3.2: 834 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 835 | 836 | follow-redirects@1.15.9: 837 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 838 | engines: {node: '>=4.0'} 839 | peerDependencies: 840 | debug: '*' 841 | peerDependenciesMeta: 842 | debug: 843 | optional: true 844 | 845 | form-data@4.0.0: 846 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 847 | engines: {node: '>= 6'} 848 | 849 | forwarded@0.2.0: 850 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 851 | engines: {node: '>= 0.6'} 852 | 853 | fresh@0.5.2: 854 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 855 | engines: {node: '>= 0.6'} 856 | 857 | fs.realpath@1.0.0: 858 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 859 | 860 | fsevents@2.3.3: 861 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 862 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 863 | os: [darwin] 864 | 865 | function-bind@1.1.1: 866 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 867 | 868 | futoin-hkdf@1.5.2: 869 | resolution: {integrity: sha512-Bnytx8kQJQoEAPGgTZw3kVPy8e/n9CDftPzc0okgaujmbdF1x7w8wg+u2xS0CML233HgruNk6VQW28CzuUFMKw==} 870 | engines: {node: '>=8'} 871 | 872 | get-caller-file@2.0.5: 873 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 874 | engines: {node: 6.* || 8.* || >= 10.*} 875 | 876 | get-intrinsic@1.2.1: 877 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 878 | 879 | get-tsconfig@4.8.1: 880 | resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} 881 | 882 | glob-parent@5.1.2: 883 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 884 | engines: {node: '>= 6'} 885 | 886 | glob-parent@6.0.2: 887 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 888 | engines: {node: '>=10.13.0'} 889 | 890 | glob@7.2.3: 891 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 892 | deprecated: Glob versions prior to v9 are no longer supported 893 | 894 | globals@13.24.0: 895 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 896 | engines: {node: '>=8'} 897 | 898 | globby@11.1.0: 899 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 900 | engines: {node: '>=10'} 901 | 902 | graphemer@1.4.0: 903 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 904 | 905 | has-flag@4.0.0: 906 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 907 | engines: {node: '>=8'} 908 | 909 | has-proto@1.0.1: 910 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 911 | engines: {node: '>= 0.4'} 912 | 913 | has-symbols@1.0.3: 914 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 915 | engines: {node: '>= 0.4'} 916 | 917 | has@1.0.3: 918 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 919 | engines: {node: '>= 0.4.0'} 920 | 921 | hono@4.6.13: 922 | resolution: {integrity: sha512-haV0gaMdSjy9URCRN9hxBPlqHa7fMm/T72kAImIxvw4eQLbNz1rgjN4hHElLJSieDiNuiIAXC//cC6YGz2KCbg==} 923 | engines: {node: '>=16.9.0'} 924 | 925 | htmlparser2@8.0.2: 926 | resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} 927 | 928 | http-errors@1.6.3: 929 | resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} 930 | engines: {node: '>= 0.6'} 931 | 932 | http-errors@2.0.0: 933 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 934 | engines: {node: '>= 0.8'} 935 | 936 | iconv-lite@0.4.24: 937 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 938 | engines: {node: '>=0.10.0'} 939 | 940 | ieee754@1.2.1: 941 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 942 | 943 | ignore@5.3.2: 944 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 945 | engines: {node: '>= 4'} 946 | 947 | import-fresh@3.3.0: 948 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 949 | engines: {node: '>=6'} 950 | 951 | imurmurhash@0.1.4: 952 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 953 | engines: {node: '>=0.8.19'} 954 | 955 | inflight@1.0.6: 956 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 957 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 958 | 959 | inherits@2.0.3: 960 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} 961 | 962 | inherits@2.0.4: 963 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 964 | 965 | ipaddr.js@1.9.1: 966 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 967 | engines: {node: '>= 0.10'} 968 | 969 | is-extglob@2.1.1: 970 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 971 | engines: {node: '>=0.10.0'} 972 | 973 | is-fullwidth-code-point@3.0.0: 974 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 975 | engines: {node: '>=8'} 976 | 977 | is-glob@4.0.3: 978 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 979 | engines: {node: '>=0.10.0'} 980 | 981 | is-number@7.0.0: 982 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 983 | engines: {node: '>=0.12.0'} 984 | 985 | is-path-inside@3.0.3: 986 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 987 | engines: {node: '>=8'} 988 | 989 | isexe@2.0.0: 990 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 991 | 992 | jake@10.8.7: 993 | resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} 994 | engines: {node: '>=10'} 995 | hasBin: true 996 | 997 | js-yaml@4.1.0: 998 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 999 | hasBin: true 1000 | 1001 | json-buffer@3.0.1: 1002 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1003 | 1004 | json-schema-traverse@0.4.1: 1005 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1006 | 1007 | json-stable-stringify-without-jsonify@1.0.1: 1008 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1009 | 1010 | keyv@4.5.4: 1011 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1012 | 1013 | levn@0.4.1: 1014 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1015 | engines: {node: '>= 0.8.0'} 1016 | 1017 | libphonenumber-js@1.10.37: 1018 | resolution: {integrity: sha512-Z10PCaOCiAxbUxLyR31DNeeNugSVP6iv/m7UrSKS5JHziEMApJtgku4e9Q69pzzSC9LnQiM09sqsGf2ticZnMw==} 1019 | 1020 | link-preview-js@3.0.14: 1021 | resolution: {integrity: sha512-BAGZGCogqsWfF3msPt0c6DXr4+4zv7fregAxPioFYZJKoQEbKhJOhmu7VQjZmtKd1VRQ6CbL80Ok2KhpIuWJnQ==} 1022 | engines: {node: '>=18'} 1023 | 1024 | locate-path@5.0.0: 1025 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1026 | engines: {node: '>=8'} 1027 | 1028 | locate-path@6.0.0: 1029 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1030 | engines: {node: '>=10'} 1031 | 1032 | lodash.clonedeep@4.5.0: 1033 | resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} 1034 | 1035 | lodash.merge@4.6.2: 1036 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1037 | 1038 | lodash@4.17.21: 1039 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1040 | 1041 | long@4.0.0: 1042 | resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} 1043 | 1044 | long@5.2.3: 1045 | resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} 1046 | 1047 | lru-cache@10.4.3: 1048 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1049 | 1050 | media-typer@0.3.0: 1051 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 1052 | engines: {node: '>= 0.6'} 1053 | 1054 | media-typer@1.1.0: 1055 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1056 | engines: {node: '>= 0.8'} 1057 | 1058 | merge-descriptors@1.0.1: 1059 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 1060 | 1061 | merge2@1.4.1: 1062 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1063 | engines: {node: '>= 8'} 1064 | 1065 | methods@1.1.2: 1066 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 1067 | engines: {node: '>= 0.6'} 1068 | 1069 | micromatch@4.0.8: 1070 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1071 | engines: {node: '>=8.6'} 1072 | 1073 | mime-db@1.52.0: 1074 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1075 | engines: {node: '>= 0.6'} 1076 | 1077 | mime-types@2.1.35: 1078 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1079 | engines: {node: '>= 0.6'} 1080 | 1081 | mime@1.6.0: 1082 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1083 | engines: {node: '>=4'} 1084 | hasBin: true 1085 | 1086 | mime@3.0.0: 1087 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 1088 | engines: {node: '>=10.0.0'} 1089 | hasBin: true 1090 | 1091 | minimatch@3.1.2: 1092 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1093 | 1094 | minimatch@5.1.6: 1095 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1096 | engines: {node: '>=10'} 1097 | 1098 | minimatch@9.0.5: 1099 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1100 | engines: {node: '>=16 || 14 >=14.17'} 1101 | 1102 | moment@2.29.4: 1103 | resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} 1104 | 1105 | morgan@1.9.1: 1106 | resolution: {integrity: sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==} 1107 | engines: {node: '>= 0.8.0'} 1108 | 1109 | mpg123-decoder@0.4.12: 1110 | resolution: {integrity: sha512-BjeE7+D7FttqNRFtF3IgSSnG2Hn96ID4JDsCCmxhaPy2R1yuJu2gaabhlS9r12JibaRTT2SYDMXTyjD6xqe0fg==} 1111 | 1112 | ms@2.0.0: 1113 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1114 | 1115 | ms@2.1.2: 1116 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1117 | 1118 | ms@2.1.3: 1119 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1120 | 1121 | music-metadata@7.13.4: 1122 | resolution: {integrity: sha512-eRRoEMhhYdth2Ws24FmkvIqrtkIBE9sqjHbrRNpkg2Iux3zc37PQKRv2/r/mTtELb7XlB1uWC2UcKKX7BzNMGA==} 1123 | engines: {node: '>=10'} 1124 | 1125 | natural-compare@1.4.0: 1126 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1127 | 1128 | negotiator@0.6.3: 1129 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 1130 | engines: {node: '>= 0.6'} 1131 | 1132 | node-cache@5.1.2: 1133 | resolution: {integrity: sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==} 1134 | engines: {node: '>= 8.0.0'} 1135 | 1136 | node-wav@0.0.2: 1137 | resolution: {integrity: sha512-M6Rm/bbG6De/gKGxOpeOobx/dnGuP0dz40adqx38boqHhlWssBJZgLCPBNtb9NkrmnKYiV04xELq+R6PFOnoLA==} 1138 | engines: {node: '>=4.4.0'} 1139 | 1140 | nth-check@2.1.1: 1141 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1142 | 1143 | object-assign@4.1.1: 1144 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1145 | engines: {node: '>=0.10.0'} 1146 | 1147 | object-inspect@1.12.3: 1148 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1149 | 1150 | ogg-opus-decoder@1.6.12: 1151 | resolution: {integrity: sha512-6MY/rgFegJABKVE7LS10lmVoy8dFhvLDbIlcymgMnn0qZG0YHqcUU+bW+MkVyhhWN3H0vqtkRlPHGOXU6yR5YQ==} 1152 | 1153 | on-exit-leak-free@0.2.0: 1154 | resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} 1155 | 1156 | on-exit-leak-free@2.1.0: 1157 | resolution: {integrity: sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==} 1158 | 1159 | on-finished@2.3.0: 1160 | resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} 1161 | engines: {node: '>= 0.8'} 1162 | 1163 | on-finished@2.4.1: 1164 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1165 | engines: {node: '>= 0.8'} 1166 | 1167 | on-headers@1.0.2: 1168 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} 1169 | engines: {node: '>= 0.8'} 1170 | 1171 | once@1.4.0: 1172 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1173 | 1174 | optionator@0.9.4: 1175 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1176 | engines: {node: '>= 0.8.0'} 1177 | 1178 | opus-decoder@0.7.6: 1179 | resolution: {integrity: sha512-5QYSl1YQYbSzWL7vM4dJoyrLC804xIvBFjfKTZZ6/z/EgmdFouOTT+8PDM2V18vzgnhRNPDuyB2aTfl/2hvMRA==} 1180 | 1181 | p-limit@2.3.0: 1182 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1183 | engines: {node: '>=6'} 1184 | 1185 | p-limit@3.1.0: 1186 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1187 | engines: {node: '>=10'} 1188 | 1189 | p-locate@4.1.0: 1190 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1191 | engines: {node: '>=8'} 1192 | 1193 | p-locate@5.0.0: 1194 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1195 | engines: {node: '>=10'} 1196 | 1197 | p-try@2.2.0: 1198 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1199 | engines: {node: '>=6'} 1200 | 1201 | parent-module@1.0.1: 1202 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1203 | engines: {node: '>=6'} 1204 | 1205 | parse5-htmlparser2-tree-adapter@7.1.0: 1206 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 1207 | 1208 | parse5@7.2.1: 1209 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 1210 | 1211 | parseurl@1.3.3: 1212 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1213 | engines: {node: '>= 0.8'} 1214 | 1215 | path-exists@4.0.0: 1216 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1217 | engines: {node: '>=8'} 1218 | 1219 | path-is-absolute@1.0.1: 1220 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1221 | engines: {node: '>=0.10.0'} 1222 | 1223 | path-key@3.1.1: 1224 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1225 | engines: {node: '>=8'} 1226 | 1227 | path-to-regexp@0.1.7: 1228 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} 1229 | 1230 | path-type@4.0.0: 1231 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1232 | engines: {node: '>=8'} 1233 | 1234 | peek-readable@4.1.0: 1235 | resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} 1236 | engines: {node: '>=8'} 1237 | 1238 | picomatch@2.3.1: 1239 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1240 | engines: {node: '>=8.6'} 1241 | 1242 | pino-abstract-transport@0.5.0: 1243 | resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} 1244 | 1245 | pino-abstract-transport@2.0.0: 1246 | resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} 1247 | 1248 | pino-std-serializers@4.0.0: 1249 | resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} 1250 | 1251 | pino-std-serializers@7.0.0: 1252 | resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} 1253 | 1254 | pino@7.11.0: 1255 | resolution: {integrity: sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==} 1256 | hasBin: true 1257 | 1258 | pino@9.5.0: 1259 | resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} 1260 | hasBin: true 1261 | 1262 | pngjs@5.0.0: 1263 | resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} 1264 | engines: {node: '>=10.13.0'} 1265 | 1266 | prelude-ls@1.2.1: 1267 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1268 | engines: {node: '>= 0.8.0'} 1269 | 1270 | process-warning@1.0.0: 1271 | resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} 1272 | 1273 | process-warning@4.0.0: 1274 | resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} 1275 | 1276 | promise-coalesce@1.1.2: 1277 | resolution: {integrity: sha512-zLaJ9b8hnC564fnJH6NFSOGZYYdzrAJn2JUUIwzoQb32fG2QAakpDNM+CZo1km6keXkRXRM+hml1BFAPVnPkxg==} 1278 | engines: {node: '>=16'} 1279 | 1280 | protobufjs@6.8.8: 1281 | resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} 1282 | hasBin: true 1283 | 1284 | protobufjs@7.2.6: 1285 | resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} 1286 | engines: {node: '>=12.0.0'} 1287 | 1288 | proxy-addr@2.0.7: 1289 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1290 | engines: {node: '>= 0.10'} 1291 | 1292 | proxy-from-env@1.1.0: 1293 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1294 | 1295 | punycode@1.3.2: 1296 | resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} 1297 | 1298 | punycode@2.3.1: 1299 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1300 | engines: {node: '>=6'} 1301 | 1302 | qoa-format@1.0.1: 1303 | resolution: {integrity: sha512-dMB0Z6XQjdpz/Cw4Rf6RiBpQvUSPCfYlQMWvmuWlWkAT7nDQD29cVZ1SwDUB6DYJSitHENwbt90lqfI+7bvMcw==} 1304 | 1305 | qrcode-terminal@0.12.0: 1306 | resolution: {integrity: sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==} 1307 | hasBin: true 1308 | 1309 | qrcode@1.5.1: 1310 | resolution: {integrity: sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==} 1311 | engines: {node: '>=10.13.0'} 1312 | hasBin: true 1313 | 1314 | qs@6.11.0: 1315 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 1316 | engines: {node: '>=0.6'} 1317 | 1318 | querystring@0.2.0: 1319 | resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} 1320 | engines: {node: '>=0.4.x'} 1321 | deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. 1322 | 1323 | queue-microtask@1.2.3: 1324 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1325 | 1326 | quick-format-unescaped@4.0.4: 1327 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 1328 | 1329 | range-parser@1.2.1: 1330 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1331 | engines: {node: '>= 0.6'} 1332 | 1333 | raw-body@2.5.1: 1334 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} 1335 | engines: {node: '>= 0.8'} 1336 | 1337 | readable-stream@3.6.2: 1338 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1339 | engines: {node: '>= 6'} 1340 | 1341 | readable-web-to-node-stream@3.0.2: 1342 | resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} 1343 | engines: {node: '>=8'} 1344 | 1345 | real-require@0.1.0: 1346 | resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} 1347 | engines: {node: '>= 12.13.0'} 1348 | 1349 | real-require@0.2.0: 1350 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 1351 | engines: {node: '>= 12.13.0'} 1352 | 1353 | require-directory@2.1.1: 1354 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1355 | engines: {node: '>=0.10.0'} 1356 | 1357 | require-main-filename@2.0.0: 1358 | resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 1359 | 1360 | resolve-from@4.0.0: 1361 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1362 | engines: {node: '>=4'} 1363 | 1364 | resolve-pkg-maps@1.0.0: 1365 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1366 | 1367 | reusify@1.0.4: 1368 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1369 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1370 | 1371 | rimraf@3.0.2: 1372 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1373 | deprecated: Rimraf versions prior to v4 are no longer supported 1374 | hasBin: true 1375 | 1376 | run-parallel@1.2.0: 1377 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1378 | 1379 | safe-buffer@5.1.2: 1380 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1381 | 1382 | safe-buffer@5.2.1: 1383 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1384 | 1385 | safe-stable-stringify@2.4.3: 1386 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} 1387 | engines: {node: '>=10'} 1388 | 1389 | safer-buffer@2.1.2: 1390 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1391 | 1392 | semver@7.6.3: 1393 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1394 | engines: {node: '>=10'} 1395 | hasBin: true 1396 | 1397 | send@0.18.0: 1398 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} 1399 | engines: {node: '>= 0.8.0'} 1400 | 1401 | serve-static@1.15.0: 1402 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} 1403 | engines: {node: '>= 0.8.0'} 1404 | 1405 | set-blocking@2.0.0: 1406 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1407 | 1408 | setprototypeof@1.1.0: 1409 | resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} 1410 | 1411 | setprototypeof@1.2.0: 1412 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1413 | 1414 | shebang-command@2.0.0: 1415 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1416 | engines: {node: '>=8'} 1417 | 1418 | shebang-regex@3.0.0: 1419 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1420 | engines: {node: '>=8'} 1421 | 1422 | side-channel@1.0.4: 1423 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1424 | 1425 | simple-yenc@1.0.4: 1426 | resolution: {integrity: sha512-5gvxpSd79e9a3V4QDYUqnqxeD4HGlhCakVpb6gMnDD7lexJggSBJRBO5h52y/iJrdXRilX9UCuDaIJhSWm5OWw==} 1427 | 1428 | slash@3.0.0: 1429 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1430 | engines: {node: '>=8'} 1431 | 1432 | sonic-boom@2.8.0: 1433 | resolution: {integrity: sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==} 1434 | 1435 | sonic-boom@4.2.0: 1436 | resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} 1437 | 1438 | split2@4.2.0: 1439 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1440 | engines: {node: '>= 10.x'} 1441 | 1442 | statuses@1.5.0: 1443 | resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} 1444 | engines: {node: '>= 0.6'} 1445 | 1446 | statuses@2.0.1: 1447 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1448 | engines: {node: '>= 0.8'} 1449 | 1450 | stream-shift@1.0.1: 1451 | resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} 1452 | 1453 | string-width@4.2.3: 1454 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1455 | engines: {node: '>=8'} 1456 | 1457 | string_decoder@1.3.0: 1458 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1459 | 1460 | strip-ansi@6.0.1: 1461 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1462 | engines: {node: '>=8'} 1463 | 1464 | strip-json-comments@3.1.1: 1465 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1466 | engines: {node: '>=8'} 1467 | 1468 | strtok3@6.3.0: 1469 | resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} 1470 | engines: {node: '>=10'} 1471 | 1472 | supports-color@7.2.0: 1473 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1474 | engines: {node: '>=8'} 1475 | 1476 | text-table@0.2.0: 1477 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1478 | 1479 | thread-stream@0.15.2: 1480 | resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} 1481 | 1482 | thread-stream@3.1.0: 1483 | resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 1484 | 1485 | to-regex-range@5.0.1: 1486 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1487 | engines: {node: '>=8.0'} 1488 | 1489 | toidentifier@1.0.1: 1490 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1491 | engines: {node: '>=0.6'} 1492 | 1493 | token-types@4.2.1: 1494 | resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} 1495 | engines: {node: '>=10'} 1496 | 1497 | ts-api-utils@1.4.3: 1498 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1499 | engines: {node: '>=16'} 1500 | peerDependencies: 1501 | typescript: '>=4.2.0' 1502 | 1503 | tslib@2.8.1: 1504 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1505 | 1506 | tsx@4.19.2: 1507 | resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} 1508 | engines: {node: '>=18.0.0'} 1509 | hasBin: true 1510 | 1511 | type-check@0.4.0: 1512 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1513 | engines: {node: '>= 0.8.0'} 1514 | 1515 | type-fest@0.20.2: 1516 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1517 | engines: {node: '>=10'} 1518 | 1519 | type-is@1.6.18: 1520 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1521 | engines: {node: '>= 0.6'} 1522 | 1523 | typescript@5.7.2: 1524 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 1525 | engines: {node: '>=14.17'} 1526 | hasBin: true 1527 | 1528 | undici-types@6.20.0: 1529 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1530 | 1531 | unpipe@1.0.0: 1532 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1533 | engines: {node: '>= 0.8'} 1534 | 1535 | uri-js@4.4.1: 1536 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1537 | 1538 | url@0.11.0: 1539 | resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} 1540 | 1541 | util-deprecate@1.0.2: 1542 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1543 | 1544 | utils-merge@1.0.1: 1545 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 1546 | engines: {node: '>= 0.4.0'} 1547 | 1548 | uuid@10.0.0: 1549 | resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} 1550 | hasBin: true 1551 | 1552 | vary@1.1.2: 1553 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1554 | engines: {node: '>= 0.8'} 1555 | 1556 | wa-multi-session@3.8.0: 1557 | resolution: {integrity: sha512-qcZ+gt2U3LdusFg83rMHwN03b1qdqkoQ28eckrNgKdnfT3P2nSZoWV3JNeRVouei3q9n6aXB9QbIDhea77OJaQ==} 1558 | 1559 | which-module@2.0.1: 1560 | resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} 1561 | 1562 | which@2.0.2: 1563 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1564 | engines: {node: '>= 8'} 1565 | hasBin: true 1566 | 1567 | word-wrap@1.2.5: 1568 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1569 | engines: {node: '>=0.10.0'} 1570 | 1571 | wrap-ansi@6.2.0: 1572 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1573 | engines: {node: '>=8'} 1574 | 1575 | wrappy@1.0.2: 1576 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1577 | 1578 | ws@8.13.0: 1579 | resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} 1580 | engines: {node: '>=10.0.0'} 1581 | peerDependencies: 1582 | bufferutil: ^4.0.1 1583 | utf-8-validate: '>=5.0.2' 1584 | peerDependenciesMeta: 1585 | bufferutil: 1586 | optional: true 1587 | utf-8-validate: 1588 | optional: true 1589 | 1590 | y18n@4.0.3: 1591 | resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 1592 | 1593 | yargs-parser@18.1.3: 1594 | resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 1595 | engines: {node: '>=6'} 1596 | 1597 | yargs@15.4.1: 1598 | resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 1599 | engines: {node: '>=8'} 1600 | 1601 | yocto-queue@0.1.0: 1602 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1603 | engines: {node: '>=10'} 1604 | 1605 | zod@3.23.8: 1606 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1607 | 1608 | snapshots: 1609 | 1610 | '@adiwajshing/keyed-db@0.2.4': {} 1611 | 1612 | '@esbuild/aix-ppc64@0.23.1': 1613 | optional: true 1614 | 1615 | '@esbuild/android-arm64@0.23.1': 1616 | optional: true 1617 | 1618 | '@esbuild/android-arm@0.23.1': 1619 | optional: true 1620 | 1621 | '@esbuild/android-x64@0.23.1': 1622 | optional: true 1623 | 1624 | '@esbuild/darwin-arm64@0.23.1': 1625 | optional: true 1626 | 1627 | '@esbuild/darwin-x64@0.23.1': 1628 | optional: true 1629 | 1630 | '@esbuild/freebsd-arm64@0.23.1': 1631 | optional: true 1632 | 1633 | '@esbuild/freebsd-x64@0.23.1': 1634 | optional: true 1635 | 1636 | '@esbuild/linux-arm64@0.23.1': 1637 | optional: true 1638 | 1639 | '@esbuild/linux-arm@0.23.1': 1640 | optional: true 1641 | 1642 | '@esbuild/linux-ia32@0.23.1': 1643 | optional: true 1644 | 1645 | '@esbuild/linux-loong64@0.23.1': 1646 | optional: true 1647 | 1648 | '@esbuild/linux-mips64el@0.23.1': 1649 | optional: true 1650 | 1651 | '@esbuild/linux-ppc64@0.23.1': 1652 | optional: true 1653 | 1654 | '@esbuild/linux-riscv64@0.23.1': 1655 | optional: true 1656 | 1657 | '@esbuild/linux-s390x@0.23.1': 1658 | optional: true 1659 | 1660 | '@esbuild/linux-x64@0.23.1': 1661 | optional: true 1662 | 1663 | '@esbuild/netbsd-x64@0.23.1': 1664 | optional: true 1665 | 1666 | '@esbuild/openbsd-arm64@0.23.1': 1667 | optional: true 1668 | 1669 | '@esbuild/openbsd-x64@0.23.1': 1670 | optional: true 1671 | 1672 | '@esbuild/sunos-x64@0.23.1': 1673 | optional: true 1674 | 1675 | '@esbuild/win32-arm64@0.23.1': 1676 | optional: true 1677 | 1678 | '@esbuild/win32-ia32@0.23.1': 1679 | optional: true 1680 | 1681 | '@esbuild/win32-x64@0.23.1': 1682 | optional: true 1683 | 1684 | '@eshaz/web-worker@1.2.2': {} 1685 | 1686 | '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': 1687 | dependencies: 1688 | eslint: 8.57.1 1689 | eslint-visitor-keys: 3.4.3 1690 | 1691 | '@eslint-community/regexpp@4.12.1': {} 1692 | 1693 | '@eslint/eslintrc@2.1.4': 1694 | dependencies: 1695 | ajv: 6.12.6 1696 | debug: 4.3.4 1697 | espree: 9.6.1 1698 | globals: 13.24.0 1699 | ignore: 5.3.2 1700 | import-fresh: 3.3.0 1701 | js-yaml: 4.1.0 1702 | minimatch: 3.1.2 1703 | strip-json-comments: 3.1.1 1704 | transitivePeerDependencies: 1705 | - supports-color 1706 | 1707 | '@eslint/js@8.57.1': {} 1708 | 1709 | '@hapi/boom@10.0.1': 1710 | dependencies: 1711 | '@hapi/hoek': 11.0.2 1712 | 1713 | '@hapi/boom@9.1.4': 1714 | dependencies: 1715 | '@hapi/hoek': 9.3.0 1716 | 1717 | '@hapi/hoek@11.0.2': {} 1718 | 1719 | '@hapi/hoek@9.3.0': {} 1720 | 1721 | '@hono/node-server@1.13.7(hono@4.6.13)': 1722 | dependencies: 1723 | hono: 4.6.13 1724 | 1725 | '@hono/zod-validator@0.4.1(hono@4.6.13)(zod@3.23.8)': 1726 | dependencies: 1727 | hono: 4.6.13 1728 | zod: 3.23.8 1729 | 1730 | '@humanwhocodes/config-array@0.13.0': 1731 | dependencies: 1732 | '@humanwhocodes/object-schema': 2.0.3 1733 | debug: 4.3.4 1734 | minimatch: 3.1.2 1735 | transitivePeerDependencies: 1736 | - supports-color 1737 | 1738 | '@humanwhocodes/module-importer@1.0.1': {} 1739 | 1740 | '@humanwhocodes/object-schema@2.0.3': {} 1741 | 1742 | '@nodelib/fs.scandir@2.1.5': 1743 | dependencies: 1744 | '@nodelib/fs.stat': 2.0.5 1745 | run-parallel: 1.2.0 1746 | 1747 | '@nodelib/fs.stat@2.0.5': {} 1748 | 1749 | '@nodelib/fs.walk@1.2.8': 1750 | dependencies: 1751 | '@nodelib/fs.scandir': 2.1.5 1752 | fastq: 1.17.1 1753 | 1754 | '@protobufjs/aspromise@1.1.2': {} 1755 | 1756 | '@protobufjs/base64@1.1.2': {} 1757 | 1758 | '@protobufjs/codegen@2.0.4': {} 1759 | 1760 | '@protobufjs/eventemitter@1.1.0': {} 1761 | 1762 | '@protobufjs/fetch@1.1.0': 1763 | dependencies: 1764 | '@protobufjs/aspromise': 1.1.2 1765 | '@protobufjs/inquire': 1.1.0 1766 | 1767 | '@protobufjs/float@1.0.2': {} 1768 | 1769 | '@protobufjs/inquire@1.1.0': {} 1770 | 1771 | '@protobufjs/path@1.1.2': {} 1772 | 1773 | '@protobufjs/pool@1.1.0': {} 1774 | 1775 | '@protobufjs/utf8@1.1.0': {} 1776 | 1777 | '@thi.ng/bitstream@2.2.48': 1778 | dependencies: 1779 | '@thi.ng/errors': 2.4.18 1780 | 1781 | '@thi.ng/errors@2.4.18': {} 1782 | 1783 | '@tokenizer/token@0.3.0': {} 1784 | 1785 | '@types/long@4.0.2': {} 1786 | 1787 | '@types/node@10.17.60': {} 1788 | 1789 | '@types/node@22.10.1': 1790 | dependencies: 1791 | undici-types: 6.20.0 1792 | 1793 | '@types/qrcode@1.5.5': 1794 | dependencies: 1795 | '@types/node': 22.10.1 1796 | 1797 | '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': 1798 | dependencies: 1799 | '@eslint-community/regexpp': 4.12.1 1800 | '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) 1801 | '@typescript-eslint/scope-manager': 7.18.0 1802 | '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) 1803 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) 1804 | '@typescript-eslint/visitor-keys': 7.18.0 1805 | eslint: 8.57.1 1806 | graphemer: 1.4.0 1807 | ignore: 5.3.2 1808 | natural-compare: 1.4.0 1809 | ts-api-utils: 1.4.3(typescript@5.7.2) 1810 | optionalDependencies: 1811 | typescript: 5.7.2 1812 | transitivePeerDependencies: 1813 | - supports-color 1814 | 1815 | '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2)': 1816 | dependencies: 1817 | '@typescript-eslint/scope-manager': 7.18.0 1818 | '@typescript-eslint/types': 7.18.0 1819 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) 1820 | '@typescript-eslint/visitor-keys': 7.18.0 1821 | debug: 4.3.4 1822 | eslint: 8.57.1 1823 | optionalDependencies: 1824 | typescript: 5.7.2 1825 | transitivePeerDependencies: 1826 | - supports-color 1827 | 1828 | '@typescript-eslint/scope-manager@7.18.0': 1829 | dependencies: 1830 | '@typescript-eslint/types': 7.18.0 1831 | '@typescript-eslint/visitor-keys': 7.18.0 1832 | 1833 | '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': 1834 | dependencies: 1835 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) 1836 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.7.2) 1837 | debug: 4.3.4 1838 | eslint: 8.57.1 1839 | ts-api-utils: 1.4.3(typescript@5.7.2) 1840 | optionalDependencies: 1841 | typescript: 5.7.2 1842 | transitivePeerDependencies: 1843 | - supports-color 1844 | 1845 | '@typescript-eslint/types@7.18.0': {} 1846 | 1847 | '@typescript-eslint/typescript-estree@7.18.0(typescript@5.7.2)': 1848 | dependencies: 1849 | '@typescript-eslint/types': 7.18.0 1850 | '@typescript-eslint/visitor-keys': 7.18.0 1851 | debug: 4.3.4 1852 | globby: 11.1.0 1853 | is-glob: 4.0.3 1854 | minimatch: 9.0.5 1855 | semver: 7.6.3 1856 | ts-api-utils: 1.4.3(typescript@5.7.2) 1857 | optionalDependencies: 1858 | typescript: 5.7.2 1859 | transitivePeerDependencies: 1860 | - supports-color 1861 | 1862 | '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.7.2)': 1863 | dependencies: 1864 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 1865 | '@typescript-eslint/scope-manager': 7.18.0 1866 | '@typescript-eslint/types': 7.18.0 1867 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.7.2) 1868 | eslint: 8.57.1 1869 | transitivePeerDependencies: 1870 | - supports-color 1871 | - typescript 1872 | 1873 | '@typescript-eslint/visitor-keys@7.18.0': 1874 | dependencies: 1875 | '@typescript-eslint/types': 7.18.0 1876 | eslint-visitor-keys: 3.4.3 1877 | 1878 | '@ungap/structured-clone@1.2.1': {} 1879 | 1880 | '@wasm-audio-decoders/common@9.0.4': 1881 | dependencies: 1882 | '@eshaz/web-worker': 1.2.2 1883 | 1884 | '@wasm-audio-decoders/common@9.0.5': 1885 | dependencies: 1886 | '@eshaz/web-worker': 1.2.2 1887 | simple-yenc: 1.0.4 1888 | 1889 | '@wasm-audio-decoders/flac@0.2.4': 1890 | dependencies: 1891 | '@wasm-audio-decoders/common': 9.0.5 1892 | codec-parser: 2.4.3 1893 | 1894 | '@wasm-audio-decoders/ogg-vorbis@0.1.15': 1895 | dependencies: 1896 | '@wasm-audio-decoders/common': 9.0.5 1897 | codec-parser: 2.4.3 1898 | 1899 | '@whiskeysockets/baileys@6.7.9(debug@2.6.9)(eslint@8.57.1)(link-preview-js@3.0.14)(qrcode-terminal@0.12.0)(typescript@5.7.2)': 1900 | dependencies: 1901 | '@adiwajshing/keyed-db': 0.2.4 1902 | '@hapi/boom': 9.1.4 1903 | '@whiskeysockets/eslint-config': https://codeload.github.com/whiskeysockets/eslint-config/tar.gz/326b55f2842668f4e11f471451c4e39819a0e1bf(eslint@8.57.1)(typescript@5.7.2) 1904 | async-lock: 1.4.1 1905 | audio-decode: 2.2.0 1906 | axios: 1.8.2(debug@2.6.9) 1907 | cache-manager: 5.7.6 1908 | futoin-hkdf: 1.5.2 1909 | libphonenumber-js: 1.10.37 1910 | libsignal: '@whiskeysockets/libsignal-node@https://codeload.github.com/WhiskeySockets/libsignal-node/tar.gz/d13b6622a208d3037a98b6f447bbde70261c39a9' 1911 | lodash: 4.17.21 1912 | music-metadata: 7.13.4 1913 | node-cache: 5.1.2 1914 | pino: 7.11.0 1915 | protobufjs: 7.2.6 1916 | uuid: 10.0.0 1917 | ws: 8.13.0 1918 | optionalDependencies: 1919 | link-preview-js: 3.0.14 1920 | qrcode-terminal: 0.12.0 1921 | transitivePeerDependencies: 1922 | - bufferutil 1923 | - debug 1924 | - eslint 1925 | - supports-color 1926 | - typescript 1927 | - utf-8-validate 1928 | 1929 | '@whiskeysockets/eslint-config@https://codeload.github.com/whiskeysockets/eslint-config/tar.gz/326b55f2842668f4e11f471451c4e39819a0e1bf(eslint@8.57.1)(typescript@5.7.2)': 1930 | dependencies: 1931 | '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) 1932 | '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.7.2) 1933 | eslint: 8.57.1 1934 | eslint-plugin-simple-import-sort: 12.1.1(eslint@8.57.1) 1935 | typescript: 5.7.2 1936 | transitivePeerDependencies: 1937 | - supports-color 1938 | 1939 | '@whiskeysockets/libsignal-node@https://codeload.github.com/WhiskeySockets/libsignal-node/tar.gz/d13b6622a208d3037a98b6f447bbde70261c39a9': 1940 | dependencies: 1941 | curve25519-js: 0.0.4 1942 | protobufjs: 6.8.8 1943 | 1944 | accepts@1.3.8: 1945 | dependencies: 1946 | mime-types: 2.1.35 1947 | negotiator: 0.6.3 1948 | 1949 | acorn-jsx@5.3.2(acorn@8.14.0): 1950 | dependencies: 1951 | acorn: 8.14.0 1952 | 1953 | acorn@8.14.0: {} 1954 | 1955 | ajv@6.12.6: 1956 | dependencies: 1957 | fast-deep-equal: 3.1.3 1958 | fast-json-stable-stringify: 2.1.0 1959 | json-schema-traverse: 0.4.1 1960 | uri-js: 4.4.1 1961 | 1962 | ansi-regex@5.0.1: {} 1963 | 1964 | ansi-styles@4.3.0: 1965 | dependencies: 1966 | color-convert: 2.0.1 1967 | 1968 | argparse@2.0.1: {} 1969 | 1970 | array-flatten@1.1.1: {} 1971 | 1972 | array-union@2.1.0: {} 1973 | 1974 | async-lock@1.4.1: {} 1975 | 1976 | async@3.2.4: {} 1977 | 1978 | asynckit@0.4.0: {} 1979 | 1980 | atomic-sleep@1.0.0: {} 1981 | 1982 | audio-buffer@5.0.0: {} 1983 | 1984 | audio-decode@2.2.0: 1985 | dependencies: 1986 | '@wasm-audio-decoders/flac': 0.2.4 1987 | '@wasm-audio-decoders/ogg-vorbis': 0.1.15 1988 | audio-buffer: 5.0.0 1989 | audio-type: 2.2.1 1990 | mpg123-decoder: 0.4.12 1991 | node-wav: 0.0.2 1992 | ogg-opus-decoder: 1.6.12 1993 | qoa-format: 1.0.1 1994 | 1995 | audio-type@2.2.1: {} 1996 | 1997 | axios@1.8.2(debug@2.6.9): 1998 | dependencies: 1999 | follow-redirects: 1.15.9(debug@2.6.9) 2000 | form-data: 4.0.0 2001 | proxy-from-env: 1.1.0 2002 | transitivePeerDependencies: 2003 | - debug 2004 | 2005 | balanced-match@1.0.2: {} 2006 | 2007 | basic-auth@2.0.1: 2008 | dependencies: 2009 | safe-buffer: 5.1.2 2010 | 2011 | body-parser@1.20.1: 2012 | dependencies: 2013 | bytes: 3.1.2 2014 | content-type: 1.0.5 2015 | debug: 2.6.9 2016 | depd: 2.0.0 2017 | destroy: 1.2.0 2018 | http-errors: 2.0.0 2019 | iconv-lite: 0.4.24 2020 | on-finished: 2.4.1 2021 | qs: 6.11.0 2022 | raw-body: 2.5.1 2023 | type-is: 1.6.18 2024 | unpipe: 1.0.0 2025 | transitivePeerDependencies: 2026 | - supports-color 2027 | 2028 | boolbase@1.0.0: {} 2029 | 2030 | brace-expansion@1.1.11: 2031 | dependencies: 2032 | balanced-match: 1.0.2 2033 | concat-map: 0.0.1 2034 | 2035 | brace-expansion@2.0.1: 2036 | dependencies: 2037 | balanced-match: 1.0.2 2038 | 2039 | braces@3.0.3: 2040 | dependencies: 2041 | fill-range: 7.1.1 2042 | 2043 | bytes@3.1.2: {} 2044 | 2045 | cache-manager@5.7.6: 2046 | dependencies: 2047 | eventemitter3: 5.0.1 2048 | lodash.clonedeep: 4.5.0 2049 | lru-cache: 10.4.3 2050 | promise-coalesce: 1.1.2 2051 | 2052 | call-bind@1.0.2: 2053 | dependencies: 2054 | function-bind: 1.1.1 2055 | get-intrinsic: 1.2.1 2056 | 2057 | callsites@3.1.0: {} 2058 | 2059 | camelcase@5.3.1: {} 2060 | 2061 | chalk@4.1.2: 2062 | dependencies: 2063 | ansi-styles: 4.3.0 2064 | supports-color: 7.2.0 2065 | 2066 | cheerio-select@2.1.0: 2067 | dependencies: 2068 | boolbase: 1.0.0 2069 | css-select: 5.1.0 2070 | css-what: 6.1.0 2071 | domelementtype: 2.3.0 2072 | domhandler: 5.0.3 2073 | domutils: 3.2.2 2074 | 2075 | cheerio@1.0.0-rc.11: 2076 | dependencies: 2077 | cheerio-select: 2.1.0 2078 | dom-serializer: 2.0.0 2079 | domhandler: 5.0.3 2080 | domutils: 3.2.2 2081 | htmlparser2: 8.0.2 2082 | parse5: 7.2.1 2083 | parse5-htmlparser2-tree-adapter: 7.1.0 2084 | tslib: 2.8.1 2085 | 2086 | cliui@6.0.0: 2087 | dependencies: 2088 | string-width: 4.2.3 2089 | strip-ansi: 6.0.1 2090 | wrap-ansi: 6.2.0 2091 | 2092 | clone@2.1.2: {} 2093 | 2094 | codec-parser@2.4.3: {} 2095 | 2096 | color-convert@2.0.1: 2097 | dependencies: 2098 | color-name: 1.1.4 2099 | 2100 | color-name@1.1.4: {} 2101 | 2102 | combined-stream@1.0.8: 2103 | dependencies: 2104 | delayed-stream: 1.0.0 2105 | 2106 | concat-map@0.0.1: {} 2107 | 2108 | content-disposition@0.5.4: 2109 | dependencies: 2110 | safe-buffer: 5.2.1 2111 | 2112 | content-type@1.0.5: {} 2113 | 2114 | cookie-parser@1.4.4: 2115 | dependencies: 2116 | cookie: 0.3.1 2117 | cookie-signature: 1.0.6 2118 | 2119 | cookie-signature@1.0.6: {} 2120 | 2121 | cookie@0.3.1: {} 2122 | 2123 | cookie@0.5.0: {} 2124 | 2125 | cors@2.8.5: 2126 | dependencies: 2127 | object-assign: 4.1.1 2128 | vary: 1.1.2 2129 | 2130 | cross-spawn@7.0.6: 2131 | dependencies: 2132 | path-key: 3.1.1 2133 | shebang-command: 2.0.0 2134 | which: 2.0.2 2135 | 2136 | css-select@5.1.0: 2137 | dependencies: 2138 | boolbase: 1.0.0 2139 | css-what: 6.1.0 2140 | domhandler: 5.0.3 2141 | domutils: 3.2.2 2142 | nth-check: 2.1.1 2143 | 2144 | css-what@6.1.0: {} 2145 | 2146 | curve25519-js@0.0.4: {} 2147 | 2148 | debug@2.6.9: 2149 | dependencies: 2150 | ms: 2.0.0 2151 | 2152 | debug@4.3.4: 2153 | dependencies: 2154 | ms: 2.1.2 2155 | 2156 | decamelize@1.2.0: {} 2157 | 2158 | deep-is@0.1.4: {} 2159 | 2160 | delayed-stream@1.0.0: {} 2161 | 2162 | depd@1.1.2: {} 2163 | 2164 | depd@2.0.0: {} 2165 | 2166 | destroy@1.2.0: {} 2167 | 2168 | dijkstrajs@1.0.3: {} 2169 | 2170 | dir-glob@3.0.1: 2171 | dependencies: 2172 | path-type: 4.0.0 2173 | 2174 | doctrine@3.0.0: 2175 | dependencies: 2176 | esutils: 2.0.3 2177 | 2178 | dom-serializer@2.0.0: 2179 | dependencies: 2180 | domelementtype: 2.3.0 2181 | domhandler: 5.0.3 2182 | entities: 4.5.0 2183 | 2184 | domelementtype@2.3.0: {} 2185 | 2186 | domhandler@5.0.3: 2187 | dependencies: 2188 | domelementtype: 2.3.0 2189 | 2190 | domutils@3.2.2: 2191 | dependencies: 2192 | dom-serializer: 2.0.0 2193 | domelementtype: 2.3.0 2194 | domhandler: 5.0.3 2195 | 2196 | dotenv@16.0.0: {} 2197 | 2198 | duplexify@4.1.2: 2199 | dependencies: 2200 | end-of-stream: 1.4.4 2201 | inherits: 2.0.4 2202 | readable-stream: 3.6.2 2203 | stream-shift: 1.0.1 2204 | 2205 | ee-first@1.1.1: {} 2206 | 2207 | ejs@3.1.8: 2208 | dependencies: 2209 | jake: 10.8.7 2210 | 2211 | emoji-regex@8.0.0: {} 2212 | 2213 | encode-utf8@1.0.3: {} 2214 | 2215 | encodeurl@1.0.2: {} 2216 | 2217 | end-of-stream@1.4.4: 2218 | dependencies: 2219 | once: 1.4.0 2220 | 2221 | entities@4.5.0: {} 2222 | 2223 | esbuild@0.23.1: 2224 | optionalDependencies: 2225 | '@esbuild/aix-ppc64': 0.23.1 2226 | '@esbuild/android-arm': 0.23.1 2227 | '@esbuild/android-arm64': 0.23.1 2228 | '@esbuild/android-x64': 0.23.1 2229 | '@esbuild/darwin-arm64': 0.23.1 2230 | '@esbuild/darwin-x64': 0.23.1 2231 | '@esbuild/freebsd-arm64': 0.23.1 2232 | '@esbuild/freebsd-x64': 0.23.1 2233 | '@esbuild/linux-arm': 0.23.1 2234 | '@esbuild/linux-arm64': 0.23.1 2235 | '@esbuild/linux-ia32': 0.23.1 2236 | '@esbuild/linux-loong64': 0.23.1 2237 | '@esbuild/linux-mips64el': 0.23.1 2238 | '@esbuild/linux-ppc64': 0.23.1 2239 | '@esbuild/linux-riscv64': 0.23.1 2240 | '@esbuild/linux-s390x': 0.23.1 2241 | '@esbuild/linux-x64': 0.23.1 2242 | '@esbuild/netbsd-x64': 0.23.1 2243 | '@esbuild/openbsd-arm64': 0.23.1 2244 | '@esbuild/openbsd-x64': 0.23.1 2245 | '@esbuild/sunos-x64': 0.23.1 2246 | '@esbuild/win32-arm64': 0.23.1 2247 | '@esbuild/win32-ia32': 0.23.1 2248 | '@esbuild/win32-x64': 0.23.1 2249 | 2250 | escape-html@1.0.3: {} 2251 | 2252 | escape-string-regexp@4.0.0: {} 2253 | 2254 | eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.1): 2255 | dependencies: 2256 | eslint: 8.57.1 2257 | 2258 | eslint-scope@7.2.2: 2259 | dependencies: 2260 | esrecurse: 4.3.0 2261 | estraverse: 5.3.0 2262 | 2263 | eslint-visitor-keys@3.4.3: {} 2264 | 2265 | eslint@8.57.1: 2266 | dependencies: 2267 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 2268 | '@eslint-community/regexpp': 4.12.1 2269 | '@eslint/eslintrc': 2.1.4 2270 | '@eslint/js': 8.57.1 2271 | '@humanwhocodes/config-array': 0.13.0 2272 | '@humanwhocodes/module-importer': 1.0.1 2273 | '@nodelib/fs.walk': 1.2.8 2274 | '@ungap/structured-clone': 1.2.1 2275 | ajv: 6.12.6 2276 | chalk: 4.1.2 2277 | cross-spawn: 7.0.6 2278 | debug: 4.3.4 2279 | doctrine: 3.0.0 2280 | escape-string-regexp: 4.0.0 2281 | eslint-scope: 7.2.2 2282 | eslint-visitor-keys: 3.4.3 2283 | espree: 9.6.1 2284 | esquery: 1.6.0 2285 | esutils: 2.0.3 2286 | fast-deep-equal: 3.1.3 2287 | file-entry-cache: 6.0.1 2288 | find-up: 5.0.0 2289 | glob-parent: 6.0.2 2290 | globals: 13.24.0 2291 | graphemer: 1.4.0 2292 | ignore: 5.3.2 2293 | imurmurhash: 0.1.4 2294 | is-glob: 4.0.3 2295 | is-path-inside: 3.0.3 2296 | js-yaml: 4.1.0 2297 | json-stable-stringify-without-jsonify: 1.0.1 2298 | levn: 0.4.1 2299 | lodash.merge: 4.6.2 2300 | minimatch: 3.1.2 2301 | natural-compare: 1.4.0 2302 | optionator: 0.9.4 2303 | strip-ansi: 6.0.1 2304 | text-table: 0.2.0 2305 | transitivePeerDependencies: 2306 | - supports-color 2307 | 2308 | espree@9.6.1: 2309 | dependencies: 2310 | acorn: 8.14.0 2311 | acorn-jsx: 5.3.2(acorn@8.14.0) 2312 | eslint-visitor-keys: 3.4.3 2313 | 2314 | esquery@1.6.0: 2315 | dependencies: 2316 | estraverse: 5.3.0 2317 | 2318 | esrecurse@4.3.0: 2319 | dependencies: 2320 | estraverse: 5.3.0 2321 | 2322 | estraverse@5.3.0: {} 2323 | 2324 | esutils@2.0.3: {} 2325 | 2326 | etag@1.8.1: {} 2327 | 2328 | eventemitter3@5.0.1: {} 2329 | 2330 | express@4.18.2: 2331 | dependencies: 2332 | accepts: 1.3.8 2333 | array-flatten: 1.1.1 2334 | body-parser: 1.20.1 2335 | content-disposition: 0.5.4 2336 | content-type: 1.0.5 2337 | cookie: 0.5.0 2338 | cookie-signature: 1.0.6 2339 | debug: 2.6.9 2340 | depd: 2.0.0 2341 | encodeurl: 1.0.2 2342 | escape-html: 1.0.3 2343 | etag: 1.8.1 2344 | finalhandler: 1.2.0 2345 | fresh: 0.5.2 2346 | http-errors: 2.0.0 2347 | merge-descriptors: 1.0.1 2348 | methods: 1.1.2 2349 | on-finished: 2.4.1 2350 | parseurl: 1.3.3 2351 | path-to-regexp: 0.1.7 2352 | proxy-addr: 2.0.7 2353 | qs: 6.11.0 2354 | range-parser: 1.2.1 2355 | safe-buffer: 5.2.1 2356 | send: 0.18.0 2357 | serve-static: 1.15.0 2358 | setprototypeof: 1.2.0 2359 | statuses: 2.0.1 2360 | type-is: 1.6.18 2361 | utils-merge: 1.0.1 2362 | vary: 1.1.2 2363 | transitivePeerDependencies: 2364 | - supports-color 2365 | 2366 | fast-deep-equal@3.1.3: {} 2367 | 2368 | fast-glob@3.3.2: 2369 | dependencies: 2370 | '@nodelib/fs.stat': 2.0.5 2371 | '@nodelib/fs.walk': 1.2.8 2372 | glob-parent: 5.1.2 2373 | merge2: 1.4.1 2374 | micromatch: 4.0.8 2375 | 2376 | fast-json-stable-stringify@2.1.0: {} 2377 | 2378 | fast-levenshtein@2.0.6: {} 2379 | 2380 | fast-redact@3.2.0: {} 2381 | 2382 | fastq@1.17.1: 2383 | dependencies: 2384 | reusify: 1.0.4 2385 | 2386 | file-entry-cache@6.0.1: 2387 | dependencies: 2388 | flat-cache: 3.2.0 2389 | 2390 | file-type@16.5.4: 2391 | dependencies: 2392 | readable-web-to-node-stream: 3.0.2 2393 | strtok3: 6.3.0 2394 | token-types: 4.2.1 2395 | 2396 | filelist@1.0.4: 2397 | dependencies: 2398 | minimatch: 5.1.6 2399 | 2400 | fill-range@7.1.1: 2401 | dependencies: 2402 | to-regex-range: 5.0.1 2403 | 2404 | finalhandler@1.2.0: 2405 | dependencies: 2406 | debug: 2.6.9 2407 | encodeurl: 1.0.2 2408 | escape-html: 1.0.3 2409 | on-finished: 2.4.1 2410 | parseurl: 1.3.3 2411 | statuses: 2.0.1 2412 | unpipe: 1.0.0 2413 | transitivePeerDependencies: 2414 | - supports-color 2415 | 2416 | find-up@4.1.0: 2417 | dependencies: 2418 | locate-path: 5.0.0 2419 | path-exists: 4.0.0 2420 | 2421 | find-up@5.0.0: 2422 | dependencies: 2423 | locate-path: 6.0.0 2424 | path-exists: 4.0.0 2425 | 2426 | flat-cache@3.2.0: 2427 | dependencies: 2428 | flatted: 3.3.2 2429 | keyv: 4.5.4 2430 | rimraf: 3.0.2 2431 | 2432 | flatted@3.3.2: {} 2433 | 2434 | follow-redirects@1.15.9(debug@2.6.9): 2435 | optionalDependencies: 2436 | debug: 2.6.9 2437 | 2438 | form-data@4.0.0: 2439 | dependencies: 2440 | asynckit: 0.4.0 2441 | combined-stream: 1.0.8 2442 | mime-types: 2.1.35 2443 | 2444 | forwarded@0.2.0: {} 2445 | 2446 | fresh@0.5.2: {} 2447 | 2448 | fs.realpath@1.0.0: {} 2449 | 2450 | fsevents@2.3.3: 2451 | optional: true 2452 | 2453 | function-bind@1.1.1: {} 2454 | 2455 | futoin-hkdf@1.5.2: {} 2456 | 2457 | get-caller-file@2.0.5: {} 2458 | 2459 | get-intrinsic@1.2.1: 2460 | dependencies: 2461 | function-bind: 1.1.1 2462 | has: 1.0.3 2463 | has-proto: 1.0.1 2464 | has-symbols: 1.0.3 2465 | 2466 | get-tsconfig@4.8.1: 2467 | dependencies: 2468 | resolve-pkg-maps: 1.0.0 2469 | 2470 | glob-parent@5.1.2: 2471 | dependencies: 2472 | is-glob: 4.0.3 2473 | 2474 | glob-parent@6.0.2: 2475 | dependencies: 2476 | is-glob: 4.0.3 2477 | 2478 | glob@7.2.3: 2479 | dependencies: 2480 | fs.realpath: 1.0.0 2481 | inflight: 1.0.6 2482 | inherits: 2.0.4 2483 | minimatch: 3.1.2 2484 | once: 1.4.0 2485 | path-is-absolute: 1.0.1 2486 | 2487 | globals@13.24.0: 2488 | dependencies: 2489 | type-fest: 0.20.2 2490 | 2491 | globby@11.1.0: 2492 | dependencies: 2493 | array-union: 2.1.0 2494 | dir-glob: 3.0.1 2495 | fast-glob: 3.3.2 2496 | ignore: 5.3.2 2497 | merge2: 1.4.1 2498 | slash: 3.0.0 2499 | 2500 | graphemer@1.4.0: {} 2501 | 2502 | has-flag@4.0.0: {} 2503 | 2504 | has-proto@1.0.1: {} 2505 | 2506 | has-symbols@1.0.3: {} 2507 | 2508 | has@1.0.3: 2509 | dependencies: 2510 | function-bind: 1.1.1 2511 | 2512 | hono@4.6.13: {} 2513 | 2514 | htmlparser2@8.0.2: 2515 | dependencies: 2516 | domelementtype: 2.3.0 2517 | domhandler: 5.0.3 2518 | domutils: 3.2.2 2519 | entities: 4.5.0 2520 | 2521 | http-errors@1.6.3: 2522 | dependencies: 2523 | depd: 1.1.2 2524 | inherits: 2.0.3 2525 | setprototypeof: 1.1.0 2526 | statuses: 1.5.0 2527 | 2528 | http-errors@2.0.0: 2529 | dependencies: 2530 | depd: 2.0.0 2531 | inherits: 2.0.4 2532 | setprototypeof: 1.2.0 2533 | statuses: 2.0.1 2534 | toidentifier: 1.0.1 2535 | 2536 | iconv-lite@0.4.24: 2537 | dependencies: 2538 | safer-buffer: 2.1.2 2539 | 2540 | ieee754@1.2.1: {} 2541 | 2542 | ignore@5.3.2: {} 2543 | 2544 | import-fresh@3.3.0: 2545 | dependencies: 2546 | parent-module: 1.0.1 2547 | resolve-from: 4.0.0 2548 | 2549 | imurmurhash@0.1.4: {} 2550 | 2551 | inflight@1.0.6: 2552 | dependencies: 2553 | once: 1.4.0 2554 | wrappy: 1.0.2 2555 | 2556 | inherits@2.0.3: {} 2557 | 2558 | inherits@2.0.4: {} 2559 | 2560 | ipaddr.js@1.9.1: {} 2561 | 2562 | is-extglob@2.1.1: {} 2563 | 2564 | is-fullwidth-code-point@3.0.0: {} 2565 | 2566 | is-glob@4.0.3: 2567 | dependencies: 2568 | is-extglob: 2.1.1 2569 | 2570 | is-number@7.0.0: {} 2571 | 2572 | is-path-inside@3.0.3: {} 2573 | 2574 | isexe@2.0.0: {} 2575 | 2576 | jake@10.8.7: 2577 | dependencies: 2578 | async: 3.2.4 2579 | chalk: 4.1.2 2580 | filelist: 1.0.4 2581 | minimatch: 3.1.2 2582 | 2583 | js-yaml@4.1.0: 2584 | dependencies: 2585 | argparse: 2.0.1 2586 | 2587 | json-buffer@3.0.1: {} 2588 | 2589 | json-schema-traverse@0.4.1: {} 2590 | 2591 | json-stable-stringify-without-jsonify@1.0.1: {} 2592 | 2593 | keyv@4.5.4: 2594 | dependencies: 2595 | json-buffer: 3.0.1 2596 | 2597 | levn@0.4.1: 2598 | dependencies: 2599 | prelude-ls: 1.2.1 2600 | type-check: 0.4.0 2601 | 2602 | libphonenumber-js@1.10.37: {} 2603 | 2604 | link-preview-js@3.0.14: 2605 | dependencies: 2606 | cheerio: 1.0.0-rc.11 2607 | url: 0.11.0 2608 | 2609 | locate-path@5.0.0: 2610 | dependencies: 2611 | p-locate: 4.1.0 2612 | 2613 | locate-path@6.0.0: 2614 | dependencies: 2615 | p-locate: 5.0.0 2616 | 2617 | lodash.clonedeep@4.5.0: {} 2618 | 2619 | lodash.merge@4.6.2: {} 2620 | 2621 | lodash@4.17.21: {} 2622 | 2623 | long@4.0.0: {} 2624 | 2625 | long@5.2.3: {} 2626 | 2627 | lru-cache@10.4.3: {} 2628 | 2629 | media-typer@0.3.0: {} 2630 | 2631 | media-typer@1.1.0: {} 2632 | 2633 | merge-descriptors@1.0.1: {} 2634 | 2635 | merge2@1.4.1: {} 2636 | 2637 | methods@1.1.2: {} 2638 | 2639 | micromatch@4.0.8: 2640 | dependencies: 2641 | braces: 3.0.3 2642 | picomatch: 2.3.1 2643 | 2644 | mime-db@1.52.0: {} 2645 | 2646 | mime-types@2.1.35: 2647 | dependencies: 2648 | mime-db: 1.52.0 2649 | 2650 | mime@1.6.0: {} 2651 | 2652 | mime@3.0.0: {} 2653 | 2654 | minimatch@3.1.2: 2655 | dependencies: 2656 | brace-expansion: 1.1.11 2657 | 2658 | minimatch@5.1.6: 2659 | dependencies: 2660 | brace-expansion: 2.0.1 2661 | 2662 | minimatch@9.0.5: 2663 | dependencies: 2664 | brace-expansion: 2.0.1 2665 | 2666 | moment@2.29.4: {} 2667 | 2668 | morgan@1.9.1: 2669 | dependencies: 2670 | basic-auth: 2.0.1 2671 | debug: 2.6.9 2672 | depd: 1.1.2 2673 | on-finished: 2.3.0 2674 | on-headers: 1.0.2 2675 | transitivePeerDependencies: 2676 | - supports-color 2677 | 2678 | mpg123-decoder@0.4.12: 2679 | dependencies: 2680 | '@wasm-audio-decoders/common': 9.0.4 2681 | 2682 | ms@2.0.0: {} 2683 | 2684 | ms@2.1.2: {} 2685 | 2686 | ms@2.1.3: {} 2687 | 2688 | music-metadata@7.13.4: 2689 | dependencies: 2690 | '@tokenizer/token': 0.3.0 2691 | content-type: 1.0.5 2692 | debug: 4.3.4 2693 | file-type: 16.5.4 2694 | media-typer: 1.1.0 2695 | strtok3: 6.3.0 2696 | token-types: 4.2.1 2697 | transitivePeerDependencies: 2698 | - supports-color 2699 | 2700 | natural-compare@1.4.0: {} 2701 | 2702 | negotiator@0.6.3: {} 2703 | 2704 | node-cache@5.1.2: 2705 | dependencies: 2706 | clone: 2.1.2 2707 | 2708 | node-wav@0.0.2: {} 2709 | 2710 | nth-check@2.1.1: 2711 | dependencies: 2712 | boolbase: 1.0.0 2713 | 2714 | object-assign@4.1.1: {} 2715 | 2716 | object-inspect@1.12.3: {} 2717 | 2718 | ogg-opus-decoder@1.6.12: 2719 | dependencies: 2720 | '@wasm-audio-decoders/common': 9.0.5 2721 | codec-parser: 2.4.3 2722 | opus-decoder: 0.7.6 2723 | 2724 | on-exit-leak-free@0.2.0: {} 2725 | 2726 | on-exit-leak-free@2.1.0: {} 2727 | 2728 | on-finished@2.3.0: 2729 | dependencies: 2730 | ee-first: 1.1.1 2731 | 2732 | on-finished@2.4.1: 2733 | dependencies: 2734 | ee-first: 1.1.1 2735 | 2736 | on-headers@1.0.2: {} 2737 | 2738 | once@1.4.0: 2739 | dependencies: 2740 | wrappy: 1.0.2 2741 | 2742 | optionator@0.9.4: 2743 | dependencies: 2744 | deep-is: 0.1.4 2745 | fast-levenshtein: 2.0.6 2746 | levn: 0.4.1 2747 | prelude-ls: 1.2.1 2748 | type-check: 0.4.0 2749 | word-wrap: 1.2.5 2750 | 2751 | opus-decoder@0.7.6: 2752 | dependencies: 2753 | '@wasm-audio-decoders/common': 9.0.5 2754 | 2755 | p-limit@2.3.0: 2756 | dependencies: 2757 | p-try: 2.2.0 2758 | 2759 | p-limit@3.1.0: 2760 | dependencies: 2761 | yocto-queue: 0.1.0 2762 | 2763 | p-locate@4.1.0: 2764 | dependencies: 2765 | p-limit: 2.3.0 2766 | 2767 | p-locate@5.0.0: 2768 | dependencies: 2769 | p-limit: 3.1.0 2770 | 2771 | p-try@2.2.0: {} 2772 | 2773 | parent-module@1.0.1: 2774 | dependencies: 2775 | callsites: 3.1.0 2776 | 2777 | parse5-htmlparser2-tree-adapter@7.1.0: 2778 | dependencies: 2779 | domhandler: 5.0.3 2780 | parse5: 7.2.1 2781 | 2782 | parse5@7.2.1: 2783 | dependencies: 2784 | entities: 4.5.0 2785 | 2786 | parseurl@1.3.3: {} 2787 | 2788 | path-exists@4.0.0: {} 2789 | 2790 | path-is-absolute@1.0.1: {} 2791 | 2792 | path-key@3.1.1: {} 2793 | 2794 | path-to-regexp@0.1.7: {} 2795 | 2796 | path-type@4.0.0: {} 2797 | 2798 | peek-readable@4.1.0: {} 2799 | 2800 | picomatch@2.3.1: {} 2801 | 2802 | pino-abstract-transport@0.5.0: 2803 | dependencies: 2804 | duplexify: 4.1.2 2805 | split2: 4.2.0 2806 | 2807 | pino-abstract-transport@2.0.0: 2808 | dependencies: 2809 | split2: 4.2.0 2810 | 2811 | pino-std-serializers@4.0.0: {} 2812 | 2813 | pino-std-serializers@7.0.0: {} 2814 | 2815 | pino@7.11.0: 2816 | dependencies: 2817 | atomic-sleep: 1.0.0 2818 | fast-redact: 3.2.0 2819 | on-exit-leak-free: 0.2.0 2820 | pino-abstract-transport: 0.5.0 2821 | pino-std-serializers: 4.0.0 2822 | process-warning: 1.0.0 2823 | quick-format-unescaped: 4.0.4 2824 | real-require: 0.1.0 2825 | safe-stable-stringify: 2.4.3 2826 | sonic-boom: 2.8.0 2827 | thread-stream: 0.15.2 2828 | 2829 | pino@9.5.0: 2830 | dependencies: 2831 | atomic-sleep: 1.0.0 2832 | fast-redact: 3.2.0 2833 | on-exit-leak-free: 2.1.0 2834 | pino-abstract-transport: 2.0.0 2835 | pino-std-serializers: 7.0.0 2836 | process-warning: 4.0.0 2837 | quick-format-unescaped: 4.0.4 2838 | real-require: 0.2.0 2839 | safe-stable-stringify: 2.4.3 2840 | sonic-boom: 4.2.0 2841 | thread-stream: 3.1.0 2842 | 2843 | pngjs@5.0.0: {} 2844 | 2845 | prelude-ls@1.2.1: {} 2846 | 2847 | process-warning@1.0.0: {} 2848 | 2849 | process-warning@4.0.0: {} 2850 | 2851 | promise-coalesce@1.1.2: {} 2852 | 2853 | protobufjs@6.8.8: 2854 | dependencies: 2855 | '@protobufjs/aspromise': 1.1.2 2856 | '@protobufjs/base64': 1.1.2 2857 | '@protobufjs/codegen': 2.0.4 2858 | '@protobufjs/eventemitter': 1.1.0 2859 | '@protobufjs/fetch': 1.1.0 2860 | '@protobufjs/float': 1.0.2 2861 | '@protobufjs/inquire': 1.1.0 2862 | '@protobufjs/path': 1.1.2 2863 | '@protobufjs/pool': 1.1.0 2864 | '@protobufjs/utf8': 1.1.0 2865 | '@types/long': 4.0.2 2866 | '@types/node': 10.17.60 2867 | long: 4.0.0 2868 | 2869 | protobufjs@7.2.6: 2870 | dependencies: 2871 | '@protobufjs/aspromise': 1.1.2 2872 | '@protobufjs/base64': 1.1.2 2873 | '@protobufjs/codegen': 2.0.4 2874 | '@protobufjs/eventemitter': 1.1.0 2875 | '@protobufjs/fetch': 1.1.0 2876 | '@protobufjs/float': 1.0.2 2877 | '@protobufjs/inquire': 1.1.0 2878 | '@protobufjs/path': 1.1.2 2879 | '@protobufjs/pool': 1.1.0 2880 | '@protobufjs/utf8': 1.1.0 2881 | '@types/node': 22.10.1 2882 | long: 5.2.3 2883 | 2884 | proxy-addr@2.0.7: 2885 | dependencies: 2886 | forwarded: 0.2.0 2887 | ipaddr.js: 1.9.1 2888 | 2889 | proxy-from-env@1.1.0: {} 2890 | 2891 | punycode@1.3.2: {} 2892 | 2893 | punycode@2.3.1: {} 2894 | 2895 | qoa-format@1.0.1: 2896 | dependencies: 2897 | '@thi.ng/bitstream': 2.2.48 2898 | 2899 | qrcode-terminal@0.12.0: {} 2900 | 2901 | qrcode@1.5.1: 2902 | dependencies: 2903 | dijkstrajs: 1.0.3 2904 | encode-utf8: 1.0.3 2905 | pngjs: 5.0.0 2906 | yargs: 15.4.1 2907 | 2908 | qs@6.11.0: 2909 | dependencies: 2910 | side-channel: 1.0.4 2911 | 2912 | querystring@0.2.0: {} 2913 | 2914 | queue-microtask@1.2.3: {} 2915 | 2916 | quick-format-unescaped@4.0.4: {} 2917 | 2918 | range-parser@1.2.1: {} 2919 | 2920 | raw-body@2.5.1: 2921 | dependencies: 2922 | bytes: 3.1.2 2923 | http-errors: 2.0.0 2924 | iconv-lite: 0.4.24 2925 | unpipe: 1.0.0 2926 | 2927 | readable-stream@3.6.2: 2928 | dependencies: 2929 | inherits: 2.0.4 2930 | string_decoder: 1.3.0 2931 | util-deprecate: 1.0.2 2932 | 2933 | readable-web-to-node-stream@3.0.2: 2934 | dependencies: 2935 | readable-stream: 3.6.2 2936 | 2937 | real-require@0.1.0: {} 2938 | 2939 | real-require@0.2.0: {} 2940 | 2941 | require-directory@2.1.1: {} 2942 | 2943 | require-main-filename@2.0.0: {} 2944 | 2945 | resolve-from@4.0.0: {} 2946 | 2947 | resolve-pkg-maps@1.0.0: {} 2948 | 2949 | reusify@1.0.4: {} 2950 | 2951 | rimraf@3.0.2: 2952 | dependencies: 2953 | glob: 7.2.3 2954 | 2955 | run-parallel@1.2.0: 2956 | dependencies: 2957 | queue-microtask: 1.2.3 2958 | 2959 | safe-buffer@5.1.2: {} 2960 | 2961 | safe-buffer@5.2.1: {} 2962 | 2963 | safe-stable-stringify@2.4.3: {} 2964 | 2965 | safer-buffer@2.1.2: {} 2966 | 2967 | semver@7.6.3: {} 2968 | 2969 | send@0.18.0: 2970 | dependencies: 2971 | debug: 2.6.9 2972 | depd: 2.0.0 2973 | destroy: 1.2.0 2974 | encodeurl: 1.0.2 2975 | escape-html: 1.0.3 2976 | etag: 1.8.1 2977 | fresh: 0.5.2 2978 | http-errors: 2.0.0 2979 | mime: 1.6.0 2980 | ms: 2.1.3 2981 | on-finished: 2.4.1 2982 | range-parser: 1.2.1 2983 | statuses: 2.0.1 2984 | transitivePeerDependencies: 2985 | - supports-color 2986 | 2987 | serve-static@1.15.0: 2988 | dependencies: 2989 | encodeurl: 1.0.2 2990 | escape-html: 1.0.3 2991 | parseurl: 1.3.3 2992 | send: 0.18.0 2993 | transitivePeerDependencies: 2994 | - supports-color 2995 | 2996 | set-blocking@2.0.0: {} 2997 | 2998 | setprototypeof@1.1.0: {} 2999 | 3000 | setprototypeof@1.2.0: {} 3001 | 3002 | shebang-command@2.0.0: 3003 | dependencies: 3004 | shebang-regex: 3.0.0 3005 | 3006 | shebang-regex@3.0.0: {} 3007 | 3008 | side-channel@1.0.4: 3009 | dependencies: 3010 | call-bind: 1.0.2 3011 | get-intrinsic: 1.2.1 3012 | object-inspect: 1.12.3 3013 | 3014 | simple-yenc@1.0.4: {} 3015 | 3016 | slash@3.0.0: {} 3017 | 3018 | sonic-boom@2.8.0: 3019 | dependencies: 3020 | atomic-sleep: 1.0.0 3021 | 3022 | sonic-boom@4.2.0: 3023 | dependencies: 3024 | atomic-sleep: 1.0.0 3025 | 3026 | split2@4.2.0: {} 3027 | 3028 | statuses@1.5.0: {} 3029 | 3030 | statuses@2.0.1: {} 3031 | 3032 | stream-shift@1.0.1: {} 3033 | 3034 | string-width@4.2.3: 3035 | dependencies: 3036 | emoji-regex: 8.0.0 3037 | is-fullwidth-code-point: 3.0.0 3038 | strip-ansi: 6.0.1 3039 | 3040 | string_decoder@1.3.0: 3041 | dependencies: 3042 | safe-buffer: 5.2.1 3043 | 3044 | strip-ansi@6.0.1: 3045 | dependencies: 3046 | ansi-regex: 5.0.1 3047 | 3048 | strip-json-comments@3.1.1: {} 3049 | 3050 | strtok3@6.3.0: 3051 | dependencies: 3052 | '@tokenizer/token': 0.3.0 3053 | peek-readable: 4.1.0 3054 | 3055 | supports-color@7.2.0: 3056 | dependencies: 3057 | has-flag: 4.0.0 3058 | 3059 | text-table@0.2.0: {} 3060 | 3061 | thread-stream@0.15.2: 3062 | dependencies: 3063 | real-require: 0.1.0 3064 | 3065 | thread-stream@3.1.0: 3066 | dependencies: 3067 | real-require: 0.2.0 3068 | 3069 | to-regex-range@5.0.1: 3070 | dependencies: 3071 | is-number: 7.0.0 3072 | 3073 | toidentifier@1.0.1: {} 3074 | 3075 | token-types@4.2.1: 3076 | dependencies: 3077 | '@tokenizer/token': 0.3.0 3078 | ieee754: 1.2.1 3079 | 3080 | ts-api-utils@1.4.3(typescript@5.7.2): 3081 | dependencies: 3082 | typescript: 5.7.2 3083 | 3084 | tslib@2.8.1: {} 3085 | 3086 | tsx@4.19.2: 3087 | dependencies: 3088 | esbuild: 0.23.1 3089 | get-tsconfig: 4.8.1 3090 | optionalDependencies: 3091 | fsevents: 2.3.3 3092 | 3093 | type-check@0.4.0: 3094 | dependencies: 3095 | prelude-ls: 1.2.1 3096 | 3097 | type-fest@0.20.2: {} 3098 | 3099 | type-is@1.6.18: 3100 | dependencies: 3101 | media-typer: 0.3.0 3102 | mime-types: 2.1.35 3103 | 3104 | typescript@5.7.2: {} 3105 | 3106 | undici-types@6.20.0: {} 3107 | 3108 | unpipe@1.0.0: {} 3109 | 3110 | uri-js@4.4.1: 3111 | dependencies: 3112 | punycode: 2.3.1 3113 | 3114 | url@0.11.0: 3115 | dependencies: 3116 | punycode: 1.3.2 3117 | querystring: 0.2.0 3118 | 3119 | util-deprecate@1.0.2: {} 3120 | 3121 | utils-merge@1.0.1: {} 3122 | 3123 | uuid@10.0.0: {} 3124 | 3125 | vary@1.1.2: {} 3126 | 3127 | wa-multi-session@3.8.0(debug@2.6.9)(eslint@8.57.1)(typescript@5.7.2): 3128 | dependencies: 3129 | '@adiwajshing/keyed-db': 0.2.4 3130 | '@hapi/boom': 10.0.1 3131 | '@whiskeysockets/baileys': 6.7.9(debug@2.6.9)(eslint@8.57.1)(link-preview-js@3.0.14)(qrcode-terminal@0.12.0)(typescript@5.7.2) 3132 | link-preview-js: 3.0.14 3133 | mime: 3.0.0 3134 | pino: 9.5.0 3135 | qrcode-terminal: 0.12.0 3136 | transitivePeerDependencies: 3137 | - bufferutil 3138 | - debug 3139 | - eslint 3140 | - jimp 3141 | - sharp 3142 | - supports-color 3143 | - typescript 3144 | - utf-8-validate 3145 | 3146 | which-module@2.0.1: {} 3147 | 3148 | which@2.0.2: 3149 | dependencies: 3150 | isexe: 2.0.0 3151 | 3152 | word-wrap@1.2.5: {} 3153 | 3154 | wrap-ansi@6.2.0: 3155 | dependencies: 3156 | ansi-styles: 4.3.0 3157 | string-width: 4.2.3 3158 | strip-ansi: 6.0.1 3159 | 3160 | wrappy@1.0.2: {} 3161 | 3162 | ws@8.13.0: {} 3163 | 3164 | y18n@4.0.3: {} 3165 | 3166 | yargs-parser@18.1.3: 3167 | dependencies: 3168 | camelcase: 5.3.1 3169 | decamelize: 1.2.0 3170 | 3171 | yargs@15.4.1: 3172 | dependencies: 3173 | cliui: 6.0.0 3174 | decamelize: 1.2.0 3175 | find-up: 4.1.0 3176 | get-caller-file: 2.0.5 3177 | require-directory: 2.1.1 3178 | require-main-filename: 2.0.0 3179 | set-blocking: 2.0.0 3180 | string-width: 4.2.3 3181 | which-module: 2.0.1 3182 | y18n: 4.0.3 3183 | yargs-parser: 18.1.3 3184 | 3185 | yocto-queue@0.1.0: {} 3186 | 3187 | zod@3.23.8: {} 3188 | -------------------------------------------------------------------------------- /src/controllers/message.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from "hono"; 2 | import { createKeyMiddleware } from "../middlewares/key.middleware"; 3 | import { requestValidator } from "../middlewares/validation.middleware"; 4 | import { z } from "zod"; 5 | import * as whatsapp from "wa-multi-session"; 6 | import { HTTPException } from "hono/http-exception"; 7 | 8 | export const createMessageController = () => { 9 | const app = new Hono(); 10 | 11 | const sendMessageSchema = z.object({ 12 | session: z.string(), 13 | to: z.string(), 14 | text: z.string(), 15 | is_group: z.boolean().optional(), 16 | }); 17 | 18 | app.post( 19 | "/send-text", 20 | createKeyMiddleware(), 21 | requestValidator("json", sendMessageSchema), 22 | async (c) => { 23 | const payload = c.req.valid("json"); 24 | const isExist = whatsapp.getSession(payload.session); 25 | if (!isExist) { 26 | throw new HTTPException(400, { 27 | message: "Session does not exist", 28 | }); 29 | } 30 | 31 | await whatsapp.sendTyping({ 32 | sessionId: payload.session, 33 | to: payload.to, 34 | duration: Math.min(5000, payload.text.length * 100), 35 | isGroup: payload.is_group, 36 | }); 37 | 38 | const response = await whatsapp.sendTextMessage({ 39 | sessionId: payload.session, 40 | to: payload.to, 41 | text: payload.text, 42 | isGroup: payload.is_group, 43 | }); 44 | 45 | return c.json({ 46 | data: response, 47 | }); 48 | } 49 | ); 50 | 51 | /** 52 | * @deprecated 53 | * This endpoint is deprecated, use POST /send-text instead 54 | */ 55 | app.get( 56 | "/send-text", 57 | createKeyMiddleware(), 58 | requestValidator("query", sendMessageSchema), 59 | async (c) => { 60 | const payload = c.req.valid("query"); 61 | const isExist = whatsapp.getSession(payload.session); 62 | if (!isExist) { 63 | throw new HTTPException(400, { 64 | message: "Session does not exist", 65 | }); 66 | } 67 | 68 | const response = await whatsapp.sendTextMessage({ 69 | sessionId: payload.session, 70 | to: payload.to, 71 | text: payload.text, 72 | }); 73 | 74 | return c.json({ 75 | data: response, 76 | }); 77 | } 78 | ); 79 | 80 | app.post( 81 | "/send-image", 82 | createKeyMiddleware(), 83 | requestValidator( 84 | "json", 85 | sendMessageSchema.merge( 86 | z.object({ 87 | image_url: z.string(), 88 | }) 89 | ) 90 | ), 91 | async (c) => { 92 | const payload = c.req.valid("json"); 93 | const isExist = whatsapp.getSession(payload.session); 94 | if (!isExist) { 95 | throw new HTTPException(400, { 96 | message: "Session does not exist", 97 | }); 98 | } 99 | 100 | await whatsapp.sendTyping({ 101 | sessionId: payload.session, 102 | to: payload.to, 103 | duration: Math.min(5000, payload.text.length * 100), 104 | isGroup: payload.is_group, 105 | }); 106 | 107 | const response = await whatsapp.sendImage({ 108 | sessionId: payload.session, 109 | to: payload.to, 110 | text: payload.text, 111 | media: payload.image_url, 112 | isGroup: payload.is_group, 113 | }); 114 | 115 | return c.json({ 116 | data: response, 117 | }); 118 | } 119 | ); 120 | app.post( 121 | "/send-document", 122 | createKeyMiddleware(), 123 | requestValidator( 124 | "json", 125 | sendMessageSchema.merge( 126 | z.object({ 127 | document_url: z.string(), 128 | document_name: z.string(), 129 | }) 130 | ) 131 | ), 132 | async (c) => { 133 | const payload = c.req.valid("json"); 134 | const isExist = whatsapp.getSession(payload.session); 135 | if (!isExist) { 136 | throw new HTTPException(400, { 137 | message: "Session does not exist", 138 | }); 139 | } 140 | 141 | await whatsapp.sendTyping({ 142 | sessionId: payload.session, 143 | to: payload.to, 144 | duration: Math.min(5000, payload.text.length * 100), 145 | isGroup: payload.is_group, 146 | }); 147 | 148 | const response = await whatsapp.sendDocument({ 149 | sessionId: payload.session, 150 | to: payload.to, 151 | text: payload.text, 152 | media: payload.document_url, 153 | filename: payload.document_name, 154 | isGroup: payload.is_group, 155 | }); 156 | 157 | return c.json({ 158 | data: response, 159 | }); 160 | } 161 | ); 162 | 163 | app.post( 164 | "/send-sticker", 165 | createKeyMiddleware(), 166 | requestValidator( 167 | "json", 168 | sendMessageSchema.merge( 169 | z.object({ 170 | image_url: z.string(), 171 | }) 172 | ) 173 | ), 174 | async (c) => { 175 | const payload = c.req.valid("json"); 176 | const isExist = whatsapp.getSession(payload.session); 177 | if (!isExist) { 178 | throw new HTTPException(400, { 179 | message: "Session does not exist", 180 | }); 181 | } 182 | 183 | const response = await whatsapp.sendSticker({ 184 | sessionId: payload.session, 185 | to: payload.to, 186 | media: payload.image_url, 187 | isGroup: payload.is_group, 188 | }); 189 | 190 | return c.json({ 191 | data: response, 192 | }); 193 | } 194 | ); 195 | 196 | return app; 197 | }; 198 | -------------------------------------------------------------------------------- /src/controllers/profile.ts: -------------------------------------------------------------------------------- 1 | import * as whatsapp from "wa-multi-session"; 2 | import { Hono } from "hono"; 3 | import { requestValidator } from "../middlewares/validation.middleware"; 4 | import { z } from "zod"; 5 | import { createKeyMiddleware } from "../middlewares/key.middleware"; 6 | import { toDataURL } from "qrcode"; 7 | import { HTTPException } from "hono/http-exception"; 8 | 9 | export const createProfileController = () => { 10 | const app = new Hono(); 11 | 12 | const getProfileSchema = z.object({ 13 | session: z.string(), 14 | target: z 15 | .string() 16 | .refine((v) => v.includes("@s.whatsapp.net") || v.includes("@g.us"), { 17 | message: "target must contain '@s.whatsapp.net' or '@g.us'", 18 | }), 19 | }); 20 | 21 | app.post( 22 | "/", 23 | createKeyMiddleware(), 24 | requestValidator("json", getProfileSchema), 25 | async (c) => { 26 | const payload = c.req.valid("json"); 27 | const isExist = whatsapp.getSession(payload.session); 28 | if (!isExist) { 29 | throw new HTTPException(400, { 30 | message: "Session does not exist", 31 | }); 32 | } 33 | 34 | const isRegistered = await whatsapp.isExist({ 35 | sessionId: payload.session, 36 | to: payload.target, 37 | isGroup: payload.target.includes("@g.us"), 38 | }); 39 | 40 | if (!isRegistered) { 41 | throw new HTTPException(400, { 42 | message: "Target is not registered", 43 | }); 44 | } 45 | 46 | return c.json({ 47 | data: await whatsapp.getProfileInfo({ 48 | sessionId: payload.session, 49 | target: payload.target, 50 | }), 51 | }); 52 | } 53 | ); 54 | 55 | return app; 56 | }; 57 | -------------------------------------------------------------------------------- /src/controllers/session.ts: -------------------------------------------------------------------------------- 1 | import * as whatsapp from "wa-multi-session"; 2 | import { Hono } from "hono"; 3 | import { requestValidator } from "../middlewares/validation.middleware"; 4 | import { z } from "zod"; 5 | import { createKeyMiddleware } from "../middlewares/key.middleware"; 6 | import { toDataURL } from "qrcode"; 7 | import { HTTPException } from "hono/http-exception"; 8 | 9 | export const createSessionController = () => { 10 | const app = new Hono(); 11 | 12 | app.get("/", createKeyMiddleware(), async (c) => { 13 | return c.json({ 14 | data: whatsapp.getAllSession(), 15 | }); 16 | }); 17 | 18 | const startSessionSchema = z.object({ 19 | session: z.string(), 20 | }); 21 | 22 | app.post( 23 | "/start", 24 | createKeyMiddleware(), 25 | requestValidator("json", startSessionSchema), 26 | async (c) => { 27 | const payload = c.req.valid("json"); 28 | 29 | const isExist = whatsapp.getSession(payload.session); 30 | if (isExist) { 31 | throw new HTTPException(400, { 32 | message: "Session already exist", 33 | }); 34 | } 35 | 36 | const qr = await new Promise(async (r) => { 37 | await whatsapp.startSession(payload.session, { 38 | onConnected() { 39 | r(null); 40 | }, 41 | onQRUpdated(qr) { 42 | r(qr); 43 | }, 44 | }); 45 | }); 46 | 47 | if (qr) { 48 | return c.json({ 49 | qr: qr, 50 | }); 51 | } 52 | 53 | return c.json({ 54 | data: { 55 | message: "Connected", 56 | }, 57 | }); 58 | } 59 | ); 60 | app.get( 61 | "/start", 62 | createKeyMiddleware(), 63 | requestValidator("query", startSessionSchema), 64 | async (c) => { 65 | const payload = c.req.valid("query"); 66 | 67 | const isExist = whatsapp.getSession(payload.session); 68 | if (isExist) { 69 | throw new HTTPException(400, { 70 | message: "Session already exist", 71 | }); 72 | } 73 | 74 | const qr = await new Promise(async (r) => { 75 | await whatsapp.startSession(payload.session, { 76 | onConnected() { 77 | r(null); 78 | }, 79 | onQRUpdated(qr) { 80 | r(qr); 81 | }, 82 | }); 83 | }); 84 | 85 | if (qr) { 86 | return c.render(` 87 |
88 | 89 | 95 | `); 96 | } 97 | 98 | return c.json({ 99 | data: { 100 | message: "Connected", 101 | }, 102 | }); 103 | } 104 | ); 105 | 106 | app.all("/logout", createKeyMiddleware(), async (c) => { 107 | await whatsapp.deleteSession( 108 | c.req.query().session || (await c.req.json()).session || "" 109 | ); 110 | return c.json({ 111 | data: "success", 112 | }); 113 | }); 114 | 115 | return app; 116 | }; 117 | -------------------------------------------------------------------------------- /src/env.ts: -------------------------------------------------------------------------------- 1 | import "dotenv/config"; 2 | import { z } from "zod"; 3 | 4 | export const env = z 5 | .object({ 6 | NODE_ENV: z.enum(["DEVELOPMENT", "PRODUCTION"]).default("DEVELOPMENT"), 7 | KEY: z.string().default(""), 8 | PORT: z 9 | .string() 10 | .default("5001") 11 | .transform((e) => Number(e)), 12 | WEBHOOK_BASE_URL: z.string().optional(), 13 | }) 14 | .parse(process.env); 15 | -------------------------------------------------------------------------------- /src/errors/index.ts: -------------------------------------------------------------------------------- 1 | export class ApplicationError extends Error { 2 | baseName = "ApplicationError"; 3 | code = 500; 4 | 5 | constructor(message: string) { 6 | super(message); 7 | this.name = "ApplicationError"; 8 | } 9 | 10 | getResponseMessage = () => { 11 | return { 12 | message: this.message, 13 | }; 14 | }; 15 | 16 | static isApplicationError = (error: any): error is ApplicationError => { 17 | return ( 18 | error instanceof ApplicationError || error.baseName === "ApplicationError" 19 | ); 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from "hono"; 2 | import { logger } from "hono/logger"; 3 | import { cors } from "hono/cors"; 4 | import moment from "moment"; 5 | import { globalErrorMiddleware } from "./middlewares/error.middleware"; 6 | import { notFoundMiddleware } from "./middlewares/notfound.middleware"; 7 | import { serve } from "@hono/node-server"; 8 | import { env } from "./env"; 9 | import { createSessionController } from "./controllers/session"; 10 | import * as whastapp from "wa-multi-session"; 11 | import { createMessageController } from "./controllers/message"; 12 | import { CreateWebhookProps } from "./webhooks"; 13 | import { createWebhookMessage } from "./webhooks/message"; 14 | import { createWebhookSession } from "./webhooks/session"; 15 | import { createProfileController } from "./controllers/profile"; 16 | import { serveStatic } from "@hono/node-server/serve-static"; 17 | 18 | const app = new Hono(); 19 | 20 | app.use( 21 | logger((...params) => { 22 | params.map((e) => console.log(`${moment().toISOString()} | ${e}`)); 23 | }) 24 | ); 25 | app.use(cors()); 26 | 27 | app.onError(globalErrorMiddleware); 28 | app.notFound(notFoundMiddleware); 29 | 30 | /** 31 | * serve media message static files 32 | */ 33 | app.use( 34 | "/media/*", 35 | serveStatic({ 36 | root: "./", 37 | }) 38 | ); 39 | 40 | /** 41 | * session routes 42 | */ 43 | app.route("/session", createSessionController()); 44 | /** 45 | * message routes 46 | */ 47 | app.route("/message", createMessageController()); 48 | /** 49 | * profile routes 50 | */ 51 | app.route("/profile", createProfileController()); 52 | 53 | const port = env.PORT; 54 | 55 | serve( 56 | { 57 | fetch: app.fetch, 58 | port, 59 | }, 60 | (info) => { 61 | console.log(`Server is running on http://localhost:${info.port}`); 62 | } 63 | ); 64 | 65 | whastapp.onConnected((session) => { 66 | console.log(`session: '${session}' connected`); 67 | }); 68 | 69 | // Implement Webhook 70 | if (env.WEBHOOK_BASE_URL) { 71 | const webhookProps: CreateWebhookProps = { 72 | baseUrl: env.WEBHOOK_BASE_URL, 73 | }; 74 | 75 | // message webhook 76 | whastapp.onMessageReceived(createWebhookMessage(webhookProps)); 77 | 78 | // session webhook 79 | const webhookSession = createWebhookSession(webhookProps); 80 | 81 | whastapp.onConnected((session) => { 82 | console.log(`session: '${session}' connected`); 83 | webhookSession({ session, status: "connected" }); 84 | }); 85 | whastapp.onConnecting((session) => { 86 | console.log(`session: '${session}' connecting`); 87 | webhookSession({ session, status: "connecting" }); 88 | }); 89 | whastapp.onDisconnected((session) => { 90 | console.log(`session: '${session}' disconnected`); 91 | webhookSession({ session, status: "disconnected" }); 92 | }); 93 | } 94 | // End Implement Webhook 95 | 96 | whastapp.loadSessionsFromStorage(); 97 | -------------------------------------------------------------------------------- /src/middlewares/error.middleware.ts: -------------------------------------------------------------------------------- 1 | import { ErrorHandler } from "hono"; 2 | import { HTTPException } from "hono/http-exception"; 3 | import { StatusCode } from "hono/utils/http-status"; 4 | import { ApplicationError } from "../errors"; 5 | import { env } from "../env"; 6 | 7 | export const globalErrorMiddleware: ErrorHandler = (err, c) => { 8 | if (err instanceof HTTPException && err.message) { 9 | return c.json( 10 | { 11 | message: err.message, 12 | }, 13 | err.status 14 | ); 15 | } 16 | 17 | if (ApplicationError.isApplicationError(err)) { 18 | return c.json(err.getResponseMessage(), err.code as StatusCode); 19 | } 20 | 21 | console.error("APP ERROR:", err); 22 | if (env.NODE_ENV == "PRODUCTION") 23 | err.message = "Something went wrong, please try again later!"; 24 | return c.json({ message: err.message }, 500); 25 | }; 26 | -------------------------------------------------------------------------------- /src/middlewares/key.middleware.ts: -------------------------------------------------------------------------------- 1 | import { HTTPException } from "hono/http-exception"; 2 | import { createMiddleware } from "hono/factory"; 3 | import { env } from "../env"; 4 | 5 | export const createKeyMiddleware = () => 6 | createMiddleware(async (c, next) => { 7 | const authorization = c.req.query().key || c.req.header().key; 8 | if (env.KEY && (!authorization || authorization != env.KEY)) { 9 | throw new HTTPException(401, { 10 | message: "Unauthorized", 11 | }); 12 | } 13 | 14 | await next(); 15 | }); 16 | -------------------------------------------------------------------------------- /src/middlewares/notfound.middleware.ts: -------------------------------------------------------------------------------- 1 | import { NotFoundHandler } from "hono"; 2 | import { HTTPException } from "hono/http-exception"; 3 | 4 | export const notFoundMiddleware: NotFoundHandler = (c) => { 5 | throw new HTTPException(404, { 6 | message: "Route not found", 7 | }); 8 | }; 9 | -------------------------------------------------------------------------------- /src/middlewares/validation.middleware.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Context, 3 | Env, 4 | Input, 5 | MiddlewareHandler, 6 | TypedResponse, 7 | ValidationTargets, 8 | } from "hono"; 9 | import { HTTPException } from "hono/http-exception"; 10 | import { validator } from "hono/validator"; 11 | import { z, ZodError, ZodSchema } from "zod"; 12 | 13 | type Hook = ( 14 | result: 15 | | { success: true; data: T } 16 | | { success: false; error: ZodError; data: T }, 17 | c: Context 18 | ) => 19 | | Response 20 | | void 21 | | TypedResponse 22 | | Promise>; 23 | 24 | type HasUndefined = undefined extends T ? true : false; 25 | 26 | export const requestValidator = < 27 | T extends ZodSchema, 28 | Target extends keyof ValidationTargets, 29 | E extends Env, 30 | P extends string, 31 | In = z.input, 32 | Out = z.output, 33 | I extends Input = { 34 | in: HasUndefined extends true 35 | ? { 36 | [K in Target]?: K extends "json" 37 | ? In 38 | : HasUndefined extends true 39 | ? { [K2 in keyof In]?: ValidationTargets[K][K2] } 40 | : { [K2 in keyof In]: ValidationTargets[K][K2] }; 41 | } 42 | : { 43 | [K in Target]: K extends "json" 44 | ? In 45 | : HasUndefined extends true 46 | ? { [K2 in keyof In]?: ValidationTargets[K][K2] } 47 | : { [K2 in keyof In]: ValidationTargets[K][K2] }; 48 | }; 49 | out: { [K in Target]: Out }; 50 | }, 51 | V extends I = I 52 | >( 53 | target: Target, 54 | schema: T, 55 | hook?: Hook, E, P> 56 | ): MiddlewareHandler => 57 | // @ts-expect-error not typed well 58 | validator(target, async (value, c) => { 59 | const result = await schema.safeParseAsync(value); 60 | 61 | if (hook) { 62 | const hookResult = await hook({ data: value, ...result }, c); 63 | if (hookResult) { 64 | if (hookResult instanceof Response) { 65 | return hookResult; 66 | } 67 | 68 | if ("response" in hookResult) { 69 | return hookResult.response; 70 | } 71 | } 72 | } 73 | 74 | if (!result.success) { 75 | throw new HTTPException(400, { 76 | message: `${result.error.errors[0]?.message} field '${result.error.errors[0]?.path}' on ${target}`, 77 | }); 78 | } 79 | 80 | return result.data as z.infer; 81 | }); 82 | -------------------------------------------------------------------------------- /src/webhooks/index.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { env } from "../env"; 3 | 4 | export type CreateWebhookProps = { 5 | baseUrl: string; 6 | }; 7 | 8 | export const webhookClient = axios.create({ 9 | headers: { 10 | key: env.KEY, 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /src/webhooks/media.ts: -------------------------------------------------------------------------------- 1 | import { MessageReceived } from "wa-multi-session"; 2 | 3 | const baseMediaPath = "./media/"; 4 | 5 | export const handleWebhookImageMessage = async (message: MessageReceived) => { 6 | if (message.message?.imageMessage) { 7 | const baseMediaName = `${message.key.id}`; 8 | 9 | const fileName = `${baseMediaName}.jpg`; 10 | await message.saveImage(baseMediaPath + fileName); 11 | return fileName; 12 | } 13 | return null; 14 | }; 15 | 16 | export const handleWebhookVideoMessage = async (message: MessageReceived) => { 17 | if (message.message?.videoMessage) { 18 | const baseMediaName = `${message.key.id}`; 19 | 20 | const fileName = `${baseMediaName}.mp4`; 21 | await message.saveVideo(baseMediaPath + fileName); 22 | return fileName; 23 | } 24 | return null; 25 | }; 26 | 27 | export const handleWebhookDocumentMessage = async ( 28 | message: MessageReceived 29 | ) => { 30 | if (message.message?.documentMessage) { 31 | const baseMediaName = `${message.key.id}`; 32 | 33 | const fileName = `${baseMediaName}`; 34 | await message.saveDocument(baseMediaPath + fileName); 35 | return fileName; 36 | } 37 | return null; 38 | }; 39 | 40 | export const handleWebhookAudioMessage = async (message: MessageReceived) => { 41 | if (message.message?.audioMessage) { 42 | const baseMediaName = `${message.key.id}`; 43 | 44 | const fileName = `${baseMediaName}.mp3`; 45 | await message.saveAudio(baseMediaPath + fileName); 46 | return fileName; 47 | } 48 | return null; 49 | }; 50 | -------------------------------------------------------------------------------- /src/webhooks/message.ts: -------------------------------------------------------------------------------- 1 | import { MessageReceived } from "wa-multi-session"; 2 | import { CreateWebhookProps, webhookClient } from "."; 3 | import { 4 | handleWebhookAudioMessage, 5 | handleWebhookDocumentMessage, 6 | handleWebhookImageMessage, 7 | handleWebhookVideoMessage, 8 | } from "./media"; 9 | 10 | type WebhookMessageBody = { 11 | session: string; 12 | from: string | null; 13 | message: string | null; 14 | 15 | media: { 16 | image: string | null; 17 | video: string | null; 18 | document: string | null; 19 | audio: string | null; 20 | }; 21 | }; 22 | 23 | export const createWebhookMessage = 24 | (props: CreateWebhookProps) => async (message: MessageReceived) => { 25 | if (message.key.fromMe || message.key.remoteJid?.includes("broadcast")) 26 | return; 27 | 28 | const endpoint = `${props.baseUrl}/message`; 29 | 30 | const image = await handleWebhookImageMessage(message); 31 | const video = await handleWebhookVideoMessage(message); 32 | const document = await handleWebhookDocumentMessage(message); 33 | const audio = await handleWebhookAudioMessage(message); 34 | 35 | const body = { 36 | session: message.sessionId, 37 | from: message.key.remoteJid ?? null, 38 | message: 39 | message.message?.conversation || 40 | message.message?.extendedTextMessage?.text || 41 | message.message?.imageMessage?.caption || 42 | message.message?.videoMessage?.caption || 43 | message.message?.documentMessage?.caption || 44 | message.message?.contactMessage?.displayName || 45 | message.message?.locationMessage?.comment || 46 | message.message?.liveLocationMessage?.caption || 47 | null, 48 | 49 | /** 50 | * media message 51 | */ 52 | media: { 53 | image, 54 | video, 55 | document, 56 | audio, 57 | }, 58 | } satisfies WebhookMessageBody; 59 | webhookClient.post(endpoint, body).catch(console.error); 60 | }; 61 | -------------------------------------------------------------------------------- /src/webhooks/session.ts: -------------------------------------------------------------------------------- 1 | import { CreateWebhookProps, webhookClient } from "."; 2 | 3 | type SessionStatus = "connected" | "disconnected" | "connecting"; 4 | 5 | type WebhookSessionBody = { 6 | session: string; 7 | status: SessionStatus; 8 | }; 9 | 10 | export const createWebhookSession = 11 | (props: CreateWebhookProps) => async (event: WebhookSessionBody) => { 12 | const endpoint = `${props.baseUrl}/session`; 13 | 14 | const body = { 15 | session: event.session, 16 | status: event.status, 17 | } satisfies WebhookSessionBody; 18 | 19 | webhookClient.post(endpoint, body).catch(console.error); 20 | }; 21 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "declarationMap": true, 5 | "esModuleInterop": true, 6 | "incremental": false, 7 | "isolatedModules": true, 8 | "lib": ["es2022", "DOM", "DOM.Iterable"], 9 | "moduleDetection": "force", 10 | "noUncheckedIndexedAccess": true, 11 | "resolveJsonModule": true, 12 | "target": "ESNext", 13 | "module": "ESNext", 14 | "moduleResolution": "Bundler", 15 | "strict": true, 16 | "skipLibCheck": true, 17 | "types": ["node"], 18 | "jsx": "react-jsx", 19 | "jsxImportSource": "hono/jsx" 20 | } 21 | } 22 | --------------------------------------------------------------------------------