From 2399a31aac4466f1547ec50f04bee07658f989f8 Mon Sep 17 00:00:00 2001 From: Anton Voylenko Date: Thu, 28 Nov 2024 21:07:25 +0200 Subject: [PATCH] project push --- .dockerignore | 30 + .env.example | 23 + .eslintrc.js | 16 + .github/workflows/pull_request.yml | 25 + .github/workflows/push.yml | 50 + .gitignore | 20 + CONTRIBUTING.md | 57 + Dockerfile | 33 + LICENSE.md | 19 + README.md | 178 + assets/basic_start.gif | Bin 0 -> 604808 bytes docker-compose.yml | 26 + package-lock.json | 8282 ++++++++++++++++++++++++ package.json | 57 + server.js | 16 + src/app.js | 17 + src/config.js | 37 + src/controllers/chatController.js | 237 + src/controllers/clientController.js | 1314 ++++ src/controllers/contactController.js | 218 + src/controllers/groupChatController.js | 355 + src/controllers/healthController.js | 55 + src/controllers/messageController.js | 376 ++ src/controllers/sessionController.js | 374 ++ src/middleware.js | 188 + src/routes.js | 191 + src/sessions.js | 474 ++ src/utils.js | 46 + swagger.js | 80 + swagger.json | 7643 ++++++++++++++++++++++ tests/api.test.js | 143 + 31 files changed, 20580 insertions(+) create mode 100644 .dockerignore create mode 100644 .env.example create mode 100644 .eslintrc.js create mode 100644 .github/workflows/pull_request.yml create mode 100644 .github/workflows/push.yml create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 Dockerfile create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 assets/basic_start.gif create mode 100644 docker-compose.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 server.js create mode 100644 src/app.js create mode 100644 src/config.js create mode 100644 src/controllers/chatController.js create mode 100644 src/controllers/clientController.js create mode 100644 src/controllers/contactController.js create mode 100644 src/controllers/groupChatController.js create mode 100644 src/controllers/healthController.js create mode 100644 src/controllers/messageController.js create mode 100644 src/controllers/sessionController.js create mode 100644 src/middleware.js create mode 100644 src/routes.js create mode 100644 src/sessions.js create mode 100644 src/utils.js create mode 100644 swagger.js create mode 100644 swagger.json create mode 100644 tests/api.test.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4f2b04a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,30 @@ +# Ignore node_modules +node_modules + +# Ignore dotenv files +.env +.env.example + +# Ignore logs +logs + +# Ignore test files +tests + +# Ignore session files +sessions +sessions_test + +# Ignore git related files +.git +.gitignore + +# Ignore other unnecessary files +README.md +CONTRIBUTING.md +LICENSE.md +Dockerfile +docker-compose.yml +swagger.yml +.github +assets \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8916869 --- /dev/null +++ b/.env.example @@ -0,0 +1,23 @@ +## Application ## +PORT=3000 # OPTIONAL, DEFAULT 3000 +API_KEY=your_global_api_key_here # OPTIONAL, DEFAULT EMPTY +BASE_WEBHOOK_URL=http://localhost:3000/localCallbackExample # MANDATORY +ENABLE_LOCAL_CALLBACK_EXAMPLE=TRUE # OPTIONAL, DISABLE FOR PRODUCTION +RATE_LIMIT_MAX=1000 # OPTIONAL, THE MAXIUM NUMBER OF CONNECTIONS TO ALLOW PER TIME FRAME +RATE_LIMIT_WINDOW_MS=1000 # OPTIONAL, TIME FRAME FOR WHICH REQUESTS ARE CHECKED IN MS + +## Client ## +MAX_ATTACHMENT_SIZE=10000000 # IF REACHED, MEDIA ATTACHMENT BODY WILL BE NULL +SET_MESSAGES_AS_SEEN=TRUE # WILL MARK THE MESSAGES AS READ AUTOMATICALLY +# ALL CALLBACKS: auth_failure|authenticated|call|change_state|disconnected|group_join|group_leave|group_update|loading_screen|media_uploaded|message|message_ack|message_create|message_reaction|message_revoke_everyone|qr|ready|contact_changed|unread_count|message_edit|message_ciphertext +DISABLED_CALLBACKS=message_ack|message_reaction|unread_count|message_edit|message_ciphertext # PREVENT SENDING CERTAIN TYPES OF CALLBACKS BACK TO THE WEBHOOK +WEB_VERSION='2.2328.5' # OPTIONAL, THE VERSION OF WHATSAPP WEB TO USE +WEB_VERSION_CACHE_TYPE=none # OPTIONAL, DETERMINTES WHERE TO GET THE WHATSAPP WEB VERSION(local, remote or none), DEFAULT 'none' +RECOVER_SESSIONS=TRUE # OPTIONAL, SHOULD WE RECOVER THE SESSION IN CASE OF PAGE FAILURES +CHROME_BIN= # OPTIONAL, PATH TO CHROME BINARY +HEADLESS=TRUE # OPTIONAL, RUN CHROME IN HEADLESS MODE + +## Session File Storage ## +SESSIONS_PATH=./sessions # OPTIONAL + +ENABLE_SWAGGER_ENDPOINT=TRUE # OPTIONAL \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..a2de239 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + env: { + browser: true, + es2021: true, + jest: true + }, + extends: 'standard', + overrides: [ + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module' + }, + rules: { + } +} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 0000000..e39fb07 --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,25 @@ +name: CI/CD Pipeline for Pull Requests to Master + +'on': + pull_request: + branches: + - master +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: + - 18.x + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: 'Use Node.js ${{ matrix.node-version }}' + uses: actions/setup-node@v4 + with: + node-version: '${{ matrix.node-version }}' + - name: Install dependencies + run: npm ci + - name: Run tests + run: npm test + timeout-minutes: 1 \ No newline at end of file diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000..d04eae4 --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,50 @@ +name: CI/CD Pipeline for Docker Tag Push + +'on': + push: + tags: + - 'v*' + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: + - 18.x + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: 'Use Node.js ${{ matrix.node-version }}' + uses: actions/setup-node@v4 + with: + node-version: '${{ matrix.node-version }}' + - name: Install dependencies + run: npm ci + - name: Run tests + run: npm test + timeout-minutes: 1 + + docker: + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: '${{ secrets.DOCKER_HUB_USERNAME }}' + password: '${{ secrets.DOCKER_HUB_TOKEN }}' + - name: Build and push with dynamic tag + uses: docker/build-push-action@v5 + with: + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + tags: | + avoylenko/wwebjs-api:${{ github.ref_name }} + avoylenko/wwebjs-api:latest \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e054b2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Ignore node_modules +node_modules + +# Ignore dotenv files +.env + +# Ignore sessions +sessions +sessions_test +.wwebjs_cache + +# Ignore logs +logs + +# Ignore test coverage reports +coverage + +# Ignore other unnecessary files +.DS_Store +.vscode \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7fdaafd --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,57 @@ +# Contributing to WWebJS REST API Wrapper + +Welcome to WWebJS API Wrapper! We appreciate your interest in contributing to this project. Please follow the guidelines below to contribute effectively. + +## Getting Started + +1. Fork the repository. +2. Clone your forked repository to your local machine. +3. Install the necessary dependencies by running `npm install`. +4. Create a new branch for your contribution. + +## Code Style + +- Follow the existing code style and conventions in the project. +- Use meaningful variable and function names. +- Add comments to your code, especially for complex or tricky parts. + +## Pull Requests + +- Create a pull request from your branch to the `master` branch of this repository. +- Provide a clear and descriptive title for your pull request. +- Include a detailed description of the changes you made in the pull request. +- Reference any related issues in your pull request description using the `#` symbol followed by the issue number. + +## Testing + +- Write appropriate unit tests for your code. +- Make sure all existing tests pass. +- Provide instructions for testing your changes, if necessary. + +## Documentation + +- Update the README.md file with any relevant information about your contribution, including installation instructions, usage examples, and API documentation. + +## Code Block Example + +When providing code examples or error messages, please use code blocks. You can create a code block by wrapping your code or message with triple backticks (\```) on separate lines, like this: + +\``` +// Example code block +const hello = "Hello, world!"; +console.log(hello); +\``` + +This will render as: + +``` +// Example code block +const hello = "Hello, world!"; +console.log(hello); +``` + +## Contact Us + +If you have any questions or need further assistance, feel free to contact us by opening an issue or reaching out to us through email or chat. + +Thank you for your contribution! \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..58fc708 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +# Use the official Node.js Alpine image as the base image +FROM node:18-alpine + +# Set the working directory +WORKDIR /usr/src/app + +# Install Chromium +ENV CHROME_BIN="/usr/bin/chromium-browser" \ + PUPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" \ + NODE_ENV="production" +RUN set -x \ + && apk update \ + && apk upgrade \ + && apk add --no-cache \ + udev \ + ttf-freefont \ + chromium \ + ffmpeg + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install the dependencies +RUN npm ci --only=production --ignore-scripts + +# Copy the rest of the source code to the working directory +COPY . . + +# Expose the port the API will run on +EXPOSE 3000 + +# Start the API +CMD ["npm", "start"] \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..7d12262 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,19 @@ +# MIT License + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + +The WhatsApp Web.js REST API Wrapper is licensed under the MIT License, which is a permissive open source license that allows you to use, modify, and distribute the software for both commercial and non-commercial purposes. Please see the full license text below. + +## License + +MIT License + +``` +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4524500 --- /dev/null +++ b/README.md @@ -0,0 +1,178 @@ +# WWebJS REST API + +REST API wrapper for the [whatsapp-web.js](https://github.com/pedroslopez/whatsapp-web.js) library, providing an easy-to-use interface to interact with the WhatsApp Web platform. +It is designed to be used as a docker container, scalable, secure, and easy to integrate with other non-NodeJS projects. + +This project is a fork of [whatsapp-api](https://github.com/chrishubert/whatsapp-api). As the project was abandoned by the original author, all future improvements will be in this repo. + +The project is a work in progress: star it, create issues, features or pull requests ❣️ + +**NOTE**: I can't guarantee you will not be blocked by using this method, although it has worked for me. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe. + +## Table of Contents + +[1. Quick Start with Docker](#quick-start-with-docker) + +[2. Features](#features) + +[3. Run Locally](#run-locally) + +[4. Testing](#testing) + +[5. Documentation](#documentation) + +[6. Deploy to Production](#deploy-to-production) + +[7. Contributing](#contributing) + +[8. License](#license) + +[9. Star History](#star-history) + +## Quick Start with Docker + +[![dockeri.co](https://dockerico.blankenship.io/image/avoylenko/wwebjs-api)](https://hub.docker.com/r/avoylenko/wwebjs-api) + +1. Clone the repository: + +```bash +git clone https://github.com/avoylenko/wwebjs-api.git +cd wwebjs-api +``` + +3. Run the Docker Compose: + +```bash +docker-compose pull && docker-compose up +``` +4. Visit http://localhost:3000/session/start/ABCD + +5. Scan the QR on your console using WhatsApp mobile app -> Linked Device -> Link a Device (it may take time to setup the session) + +6. Visit http://localhost:3000/client/getContacts/ABCD + +7. EXTRA: Look at all the callbacks data in `./session/message_log.txt` + +![Quick Start](./assets/basic_start.gif) + +## Features + +1. API and Callbacks + +| Actions | Status | Sessions | Status | Callbacks | Status | +| ----------------------------| ------| ----------------------------------------| ------| ----------------------------------------------| ------| +| Send Image Message | ✅ | Initiate session | ✅ | Callback QR code | ✅ | +| Send Video Message | ✅ | Terminate session | ✅ | Callback new message | ✅ | +| Send Audio Message | ✅ | Terminate inactive sessions | ✅ | Callback status change | ✅ | +| Send Document Message | ✅ | Terminate all sessions | ✅ | Callback message media attachment | ✅ | +| Send File URL | ✅ | Healthcheck | ✅ | | | +| Send Button Message | ✅ | Local test callback | | | | +| Send Contact Message | ✅ | | | | | +| Send List Message | ✅ | | | | | +| Set Status | ✅ | | | | | +| Send Button With Media | ✅ | | | | | +| Is On Whatsapp? | ✅ | | | | | +| Download Profile Pic | ✅ | | | | | +| User Status | ✅ | | | | | +| Block/Unblock User | ✅ | | | | | +| Update Profile Picture | ✅ | | | | | +| Create Group | ✅ | | | | | +| Leave Group | ✅ | | | | | +| All Groups | ✅ | | | | | +| Invite User | ✅ | | | | | +| Make Admin | ✅ | | | | | +| Demote Admin | ✅ | | | | | +| Group Invite Code | ✅ | | | | | +| Update Group Participants | ✅ | | | | | +| Update Group Setting | ✅ | | | | | +| Update Group Subject | ✅ | | | | | +| Update Group Description | ✅ | | | | | + +3. Handle multiple client sessions (session data saved locally), identified by unique id + +4. All endpoints may be secured by a global API key + +5. On server start, all existing sessions are restored + +6. Set messages automatically as read + +7. Disable any of the callbacks + +## Run Locally + +1. Clone the repository: + +```bash +git clone https://github.com/avoylenko/wwebjs-api.git +cd wwebjs-api +``` + +2. Install the dependencies: + +```bash +npm install +``` + +3. Copy the `.env.example` file to `.env` and update the required environment variables: + +```bash +cp .env.example .env +``` + +4. Run the application: + +```bash +npm run start +``` + +5. Access the API at `http://localhost:3000` + +## Testing + +Run the test suite with the following command: + +```bash +npm run test +``` + +## Documentation + +API documentation can be found in the [`swagger.json`](https://raw.githubusercontent.com/avoylenko/wwebjs-api/master/swagger.json) file. See this file directly into [Swagger Editor](https://editor.swagger.io/?url=https://raw.githubusercontent.com/avoylenko/wwebjs-api/master/swagger.json) or any other OpenAPI-compatible tool to view and interact with the API documentation. + +This documentation is straightforward if you are familiar with whatsapp-web.js library (https://docs.wwebjs.dev/) +If you are still confused - open an issue and I'll improve it. + +Also, there is an option to run the documentation endpoint locally by setting the `ENABLE_SWAGGER_ENDPOINT` environment variable. Restart the service and go to `/api-docs` endpoint to see it. + +By default, all callback events are delivered to the webhook defined with the `BASE_WEBHOOK_URL` environment variable. +This can be overridden by setting the `*_WEBHOOK_URL` environment variable, where `*` is your sessionId. +For example, if you have the sessionId defined as `DEMO`, the environment variable must be `DEMO_WEBHOOK_URL`. + +By setting the `DISABLED_CALLBACKS` environment variable you can specify what events you are **not** willing to receive on your webhook. + +### Scanning QR code + +In order to validate a new WhatsApp Web instance you need to scan the QR code using your mobile phone. Official documentation can be found at (https://faq.whatsapp.com/1079327266110265/?cms_platform=android) page. The service itself delivers the QR code content as a webhook event or you can use the REST endpoints (`/session/qr/:sessionId` or `/session/qr/:sessionId/image` to get the QR code as a png image). + +## Deploy to Production + +- Load the docker image in docker-compose, or your Kubernetes environment +- Disable the `ENABLE_LOCAL_CALLBACK_EXAMPLE` environment variable +- Set the `API_KEY` environment variable to protect the REST endpoints +- Run periodically the `/api/terminateInactiveSessions` endpoint to prevent useless sessions to take up space and resources(only in case you are not in control of the sessions) + +## Contributing + +Please read [CONTRIBUTING.md](./CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. + +## Disclaimer + +This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at https://whatsapp.com. "WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners. + +## License + +This project is licensed under the MIT License - see the [LICENSE.md](./LICENSE.md) file for details. + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=avoylenko/wwebjs-api&type=Date)](https://star-history.com/#avoylenko/wwebjs-api&Date) diff --git a/assets/basic_start.gif b/assets/basic_start.gif new file mode 100644 index 0000000000000000000000000000000000000000..66939337332c85eab18f86fe47429ce7180d6830 GIT binary patch literal 604808 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%0D=x=7oJ5itdw{l+Je7(~22fil*p4Y)Go_ z?OF#CMdw%K`ae8u&!H9@h@zKWUQE3g`!4l>IDoPAMMp)FTfj!gG6>h9dlMk@xg5x~ ziPcZiLp%j2PeHT6seXf6nZg4y?ppVr4Cc=@=CbqONGdFU_?^CJ^i+sYiXoJ+Hr6h$ zN{hn()tgeA?MhqI$R84te_&N7x9YgVEj|FPj~n)P>bE)S8WdM&VZB@^_s2JK&hl3G zs}=^gzx0rdS;zW zQpxHxA$yEr{Xvpi!P4%*vZ=xH&B2OV42_ap{`r|X65zcUHWL&oDa-3I zAWVTyYnsPmI~zhfs4Pe4`2(WxNj1D=KzaMhSXA1S3!NFZ_lB%UR%S4~dB%kQ+Jqm^ zbnJ?=!PxXmplLG-Aks3J9whc1C42~j_qNzVWtKB)>a95BQQs?t!c?f}-gj*Bw*G$I zN`^nl^@JAznD|0ji=nSedM&0L$nR^wZl|Cz}1mFTNo_65Fg~P6uKSe z6ARxndPyLIpS&wib?}?reAy5Ei937BDSLitBWb+}K5rk9XxfbK;PB7!`lvxxQ@l9L zvLPG?foatlDkC8^k4Q8tdSNGB*pHx~8!id{%yGHkt|vGGmf-27%ts`e$#uF&Es)*t zFC?0m6FmVtD$NVJCt~zpm<#EqBlQHL zr~pYxUNO|eF>iAr{<%su*-vkCfjhZU&+=YkqC(h_IoBR=!O=_(3iyKuaH|DKLV-$B z2ISbxfjAUEE^@b)^4YB&IQ)T@9H<;{AeRcBnss3eBS@qyixg16=};M%0 zSt`&;cObN;e$txnK$1bw3Ut9NxB~;YE@Ig6P)#ra4^|))ydnr3=V>dDlRfX`rf_Sd zklmBsOTPHy5em6~?kmwex8?lrswH8qCHNPGcuqia|9nTmGD1f94@T4jhvGXhDrB@c za4P2{zCd%d%uBE+5)%OREY5~v6_7pdQ{R)lmiN6E(fgGtE{4%q=4fB=vtO_)XFwvT_8zP!eN+i zT2_Ht#`>+b;&`-Jw6&OX6U7-F`~zHph6qM6%x7-JA;tu7P=KUc^P+3>I4<6L$yYsA zGcS>3zZNVcZObFF&c|pgz-hxF@z1rS%!l07P#xtG3!#$g0$)Xzf;p<5=+?Pe~#@HjytE1<6e)x4w)7@pNlq79{$hy4F`n{#zKuh;8}|vjfqsMPR-uoSAnJqWn08xI(e|KWX91*cEe|x%fq->Kts-j zzV}s#S8ZMY2*`**p8g0EjQBa1koFeQUL;TXZih?8UY4MnAPzs^z3h*h#$QTwYr*dsz2o8|nacT?TdE zNgPBS>uky<6^=L z(Q}lBgLtA&xSh z3v(@!!6xwx#_7#kEI+$rMBiYhfxfCF$4I>3b8^Z#!C! zZPeJw&Wzk`yf~x{If$x3iN608ohu!keZw-EYUQe#NMoY%KpzdCkIpX=mSN}BByc7Q zNr0$-Bro>RT8#=a=Ncr6ere(?Ts-jFgp0Q?!9Q~-_nITBH^I_YGXXuu;8*W0ckyRW zga-*{!)+NUpd_&MW%{!A+m%w$+dAx(62+^M&rGF>)}>KUnk=#=h0W3hp(1Zn{yXs; z%mfDgMG(gl3)U0Zp?Nx26Hg3AoY-vOBK;?P9y|6AQn%O9e0IVP89$5F>dw< z(=_5jkZ{997#Rku4Eb*imf{E&5-O43c$-Yw7ScY(A0=0Q!JyFW*FRL$6C~tQt z$5)zuchnCC4y@-h5Sll$e`jD3X!j^|Cja{GZqb<`f=ANg9X~i>jEvVJ$cn|#rTb2a zp16IWw^1tInKdopwbB>4kdHcrLKa_Vbr8!o8RzE(cO!vV2dm`VCQvBEJ=S&Ud?v{;O(DODK>(oQyMWuN+Ura3 zsR$ZTtt_C`H%`kM#5Un6>8xjLE_zU$tU5EI;#7^0|yh_{o$Y$#{iO@^D_hc+P1tDW>& zQU1uF%JSyC`%<}#dP%Gj#j*M@|9W{+N}fq@V>`PyH-ChZOv>}Ai_(miOw2H>oWuO5 z=j~wiO0cH=k}~ejC!2=A&2Mi|_jbZFhnKj_Vj6WN_Y#J`@sWb{geYqPjlyGlE(ZJX ziz3(TeeoyRccpx5c-4yJ2P41ej^$)LnR8?&LB0rETdE}aN=)qX{djT+xm$6e5L_~- zRXDG8f(fs(jaoxpghu$V02eYsI{K6(_c;mYR9iJECMpkR{=!`zby>%;(-GrJ-fG8= zvqUGUO=kg%m_lBsF{(;Zu(JQI(w971@y3q3M~?L!v!mG{feJJ)*f_7T=g#>P%_=gY z@Xx8VSpTtnpRjG89JKGlQ2`H2p|xk>X?FiMTZMFcw&FOJW%`*-dI1$HHjO@O?rG0R zyk(TX;_x#|94Xi1gn`DpcflHO<+@SO{VW2>g0Iy+>R_J{y?zm&i3se@etJ~q+X}3p zt_oU~d}t}X1CKT_)y*1@#tD`>RgC73kJ4|{XOq;|dh->2WtBSPZ;qO=G~p}M*Bn`u zP(+zLT;!F{(rVe|lzR8&n_f>1$|Ui}>sRlmN|!G|J|mQ`5V)t)A24S|FgL)z7CKwY zd*q7(yQiB0KTWD~@5r$qI$7!TqZp(4^rh5e#a-6poxPtre;JhYi*4&LbYZnaUWZrV z8%19&92I-}%x{oX5{%B9Kg=I9ExeLn_-egiWSzfoT4T{oH9n6;*U}XGN}_`QG+!@BUpg&kx#Ft#&&!|Los`eorT|a=)Bbi!iN0 zglep#*B2+&*R%Rw-qlbJPfBnc2mXkbK0QX&L^2LnK( z!WGgALpV5c@k3yh_~j)ffErjuXhU6FdpN#?q;yAL|Gx}dfAMPA(N`ReI_pP16|-u&!9V#_|C538 z)0ve!w!ipP9W8*pyp&4qn(8gQ(1VLw%^>@lz^IbI3Vjv|bpW9?JHDQRKfc2F7zgLq zAr%aRiPq1Y)ZI}RSxR2)$kUZG2Ru2=W)-x>9&2FAgAni8&agy_!DRal+i12nHq|!D z5Db&wX|{I@Mbt%nu4>^~v5@x@!ezd@(f8ytFv?|{nqu;?+fCJMv3-))UEbyQfJBRz zu041hXn?S&{XpADF=NTk{UVE-pVs8eDgAaRdD8?M4Hvh<_Wfm-o>57=8ih?3mQd;S zY{Hiu)`@!-@#3UlXjlVJxWc0(y3Hp8t9#}*13}NIRssi~5M{cBvhd12+gD@Hq^y15 zC&N-D!7z=LXr9W8q&(Wov;RpHfSMMWB`29?NVmV2aZ=8(pJ~2TyJB4Pxyc-D4oH!U zkIydhL6?HeN{=9Ig!CN~vYl)Esg~>d( z$>XQ;TvVP_dxf;Uo)aGM$HZ#IiA(c7+`~ig&#zPc3@|SCQeMVbSI83SQqfgdY4gyw z8+1vzV{1p(U~gL0fa>R_Y}c^HtbKgdNjIf{XRq+d*UQ2%3{^9RY(CY3Z6Umj;5o2D zl1Tc3G9iZT{eD0EP1I4>QE~lV^^h-NW==}9?rQRWW!tyfUuSpc-59U$FZv;$?k|lz z_9`ipdEy;{KyeyOCSSTSz*y+Myr2Mnv?-p{;YU7|HG6iQHN(E!{Li!IrBFRI8MU;% zc+R4Ybp?Ot=TI+UQK8gp=!Ag7^B@~H~Au~mqu3q|gK)=*xIo35s*6=V}JrcJA*T1Y#a6#ZjCGmj`KEJNT{12Y~B|9a)?zKi= z4Mpd~A#$u|WEmA)k%;JR!IjiP-8Rn8m~`D+R1B6M}h^?q8`Ggb9uSCrn5k)VfK+>^(f{f zxvy;-&&I9G8uwyyu>B(3)}vU^ptMr6V!3cvtx91dT^M9#bfs zH|j1gucbHo%#R>*^YAvg=Q_GtJl+uP*I-K9spxt0;+_7L`C{Kz#l;85{H>o%KRc-Z zREPAn&HuJ{uYMN8A&%x<4&=kpuB^t>{iGN9N1UhI=$qph!|EK4SVJ#NAl(s}>xqr_ z9MW5O;iyxJWk#$^OhMa778k3hjxW^EW^lIe+84E560bd=%UYLu6L02P($vSS92Uw^ zu8%OdnN+M`g4K}hv0~gv=(%1MkGE^m9RIHL;pO&2n@}2-Z$iY{TNjK8T6HPwWMOsJ zDeYm;zX@_5cPuI>eh@x-(bh5>jQb;HD{5Xc>~?_O{JL!I-pZw3fP6dYv*BF%p}~33 znDkHQ5AQ`zs9v=$$_>sML^d4Mx2C@hqH`@Pj<0DResL@@sC*U5YQg!FpRer)j<#ouz7I;@nnNyL#LHLO(?q>EM96y6K1W zJK#YG3l);O_0FKYm%yskx43_`#{3d-qjTQW`zYC~5baiLXC74^uUqEb2b+XGMz#sp zsJs65HSs+S{o205>sH-O8-3wt(J*2+$Ez7auAcYZdtVM9I7w~rBSq+en5fCkQ=r_* zC&PR9IJBx#!uKk1r*)w9XREh@!8O9z=ZN&v&DVuW>>LXa;rmXHW=Q)Fu?3$!%a_$( zes!K^zH8aXYZ58|`njdOYoB(rXxsLpJgMuVK5FZ{omW3G)67W!W<@Ww_f`1m=h%mG zy{8Ym-+(s*8QDbK_Khi@?zwd@^s9t5e#Ta;oi2d0%fqY^S8J?)6d*~dyJV5B7j8)B zVCIfP*|!~6Za@!D?munG=hi>o{V~8#`87_X*{~$j<>48Yb@Xw;b7>&^{51B}eNM{l z&h*DW-`ZZCzh85{FVxJ>m(yN8NnWnm`NF(J?YA{xZWa8?uSwIpuUNA~Q#VY;L1xGW z=eO_qf_K)C?-xyhQdgfUbaVa2fXsb57=1v!m~RY5;Fg=m;erz0fp{n_UN|jIx2q*W z(?mAkD@4XpIl<&MC8(ayuY5|kaY0Z-)=rzpnq4zU!oqu<(EZ|XyqHwBU zm*Kh95k)?Q#8k;Zt1aDS`9n~E-nEO+{gU8=l9+0u=uu;8i{eJs3Zam z92BVRqPV0U@oYl+Kt0Mc6#Fa3^7@dvSZV7(Rqu^dM0)CF(< z4wfMf=}7UvC<&HNi}5IOKDE?TB#yClPrM9|^TS6)rp7|5L8NdXCjgv)hkEM{G`9ld za--@k#haDJM&hB8u%pfoCp!}hY7%gZqA;}6n!}@>l}5$O`3??8zAH>3wn`@LPWc4_6kNn{08#<4*kB3( zXLnLoTr8)9Zzso%hh4i%4|;odp6VpROE5Xv0mTBS6;|==-RU=4xR!D$ z?1u4(mSmV=`WYDDZH0TN9Y4T`n(UD9AP3)b$ms;97T@IDm!w`$!1iI`6bq>nTCTBj zu+))|my2oLzr%6BY4}!giHAOzj83ht*-WZ``IdeHm_eJ_orfrX9toV)KsI&&K1DnS zJE{-~D)$l4rv>=vTuNY~N~dG7lmTfOF>Ao6>@5j}X%t*K`G(pB9}hDgolCA3EJ@6m z5(dY;h(s)R=xUmK`LNf@4HEjq-Thlh(ZEHKEmOAhK^D^y$)+KAs~Wcr3|53D5CkT0 z7!r4a3r)d=qOBm|mgGoi0zJ6U1DXt@0FXGu?jFW$lp!kPguDey zqe?4Jk3uNYVeyQJdXhZS^eC#^To@yQ+B)s0HG)5ze ztS}WU!V{{=0U;|j7;6Z;DoDI4$q+b8^3}=eWrSrRHLYcL*0m%$2xM#R4`?mZN^J>A z-HC|>MF!Q34(5FG)1^i1RoO(t^sG728i-AekxspZb^VTDJt=98q*uLiM!l?pnWau0 z!ZH1jJ*U|+v;H#nilUaYO-Prhk@l_uB3Q*XR%?M(XRgo~QerkG+u-*;;pGkR6>&Vt z4VX;5B3s@mw9H@BIE)c`9wr$wCYz2FSfnLqJw)WBEcC)+o8Lz5~bVT7X#6vgz z9tW4NIO#4w~6ek zWavvfb`!Np+&OH?WKP-%uXki=b+#Q6JE?wDa&fK2yVaP0i()E|lAzoCG-!h5NFnsD zHM+bs7BfMGsdUG%G&g-X;|QEJIt*tjV?D%8^=$VdOXK!#=Pj>dY^!~+9u*!hD-_Os zD?G}*GKA=<9<1(M$GtbI|PLL$jWLFdL7k@lcFaR3)n>HV_1!PINviP zzKFJ(j}C1!P1u)znHrA~TWQg3NgUGah6@#+D{2`ibkOXL?%z)o>`yfbB14xlMsc#L zi0mefGo}+$rzFdx`Bw_ptLw(6>iXe>3M<&Z+Xuf0XW?K?%>rsrJBqOMD$q|8$weR< zk+@o3kvc-8dN%FHQ62dDu%}s*LCtB~eC&3*v!#l;mA9j$9qIxikkI2e3V}}QC4SGy zc%Qa-f9B=^x#j|s1h?Z7!KL9S()rjnGzpKHLEB=cwVC(BUp#&f;wmo4X?1g*LV1)X zauvR+zl5|36_hcznUBO)+N9Pnw+CvcbY-;ZkK~wxQTEGNbt>snx10WHV!( zw5w093r4ZJo|k#ElJMoQ&S88UZDIy7Pytt8n7{opelp=~y-;IE_-s7;fieGrF^5Po zS){dRd#slQ8&1W7imC$-0D~D=aG6$n?v{G>vHDKiXEnnoYrK~k=r_|nIv9>---~Qk z%sFm65K5f@j}iT1*7?fq`5vSL3c>?iq6O;hTbktstgQp@ND6ZV3tQL+)ocfKnPy5Z z3a6EZ#uQ_+u)fawbe~)9Ol2;7@LB*p%q(Pm!8s%JE1&QY9M;nwPWK!RIZ6&69SJQf z2|X%dAubJ6EKOb=2qPJ(SlU(j)0$0|d(T>h>{ve0+bk17PQu+ntJ3#C%A=T-I@sj9 zpYXr5ZH|Tek142>$90d52$qh^gSxRXd$DIm{Aa$Eb>j%Fpjw$fiB6L&OXCyCeTU?~?I%H-W^9|q*oZ$Ovw4$y7Hre<721y3hxTIokFfNwqQ@9s zUsj^OI^it-Q9KM-`?7A=ZFheVPG0=B^LTLbpqgAQXKjN-Y1$OgX#2D8x!tT~_7PxZ z?-Su^?i-D%kU(VgmM=D){`hkAPVb*VPWrDAZzg6>gQ3|&YKJ?<(389J;|&8s zAs<|kQ{%T25HXy+ywzp<>{;}fcDtAho9xZJlnZkM7~H{+Jf zN+&{om%8s4OA)Cd5y{?%!*(sL9HMP~SWC^ixYA$Rk{=d>OPAhPEoQCZPQ)Pg#xGPS zj%Y?t={+xiV^sy~N5!L4Yxb9t?+EMGI=3=%AouBek)7)SUE|s-XEvaIrIj9!)xpx$ z&7NOf9b@-xSfQO~jXdWupT5?PuU+Gw)P}5mBmQNKzy88|W5;V9YL`P+p7ZDM7e!{z z`O6JDZ+H$FX7 zKAY^PIqA>!+*#2I<(C}ZZTKQLkXf_`#Ni&fc9yjQp%-0O2(3^ z1#9*njmqzGT*VFP{5VYdqxGd}Ab5aeMs>8&~Tm1B}CHdk-;g+FI5!q}pii+i9rr#`|uRL*A) zyHZMzN&S|S&iFBuUM*{X%Kq~Go<};jg?}MrEL*AV?<2O2OCyZ3C&C&PmW{nZ zD{JMy+%CUO+-&pEFSsw+FBCt|X>4oz+lcMQRy>0cOpVvUC;Q@|9r5&OL9QaV`nE3J z$2)$=waU*HH&WB|&#i%f_7kjKY6f4apsw+)2jNLGYz5b|s^VgkS{56z9N7(zJ|PaA z)8z)3*JVY}geGXd8#dxwHMq$=AmbUVa36P>(f+j^#pwy!;d=2nV+)fcY>CB!P(+wY zM60QQux0ah#IZSDjAg0W-G6`q_%s6H;s$v`G4XQp;&M;)IXT0HbX|$Tf=TTbs(!S- z8iw9!X&Uqaj7GdU0ar`f#5tII+Fz`_Z^QO;s$ZJz=EJ0!4ui^mH1<4+w1o#?!!7Y7 zLeuo*hpEcSpG_CXj^hQPb7dAYA(UHH8ADUcS_3db+n0|xi_K-3%0pF%=fj1`Q}mpX zyvx5AVu$BTc61#@=%by!W`}6TOjUfgjeTRlb=b5S%4~1+!QRlmBBXpl7P}e6-$)Q; z7>>ytZA&46hLh`TB@t56tIV`#a1@A<=&d3a2KX&R7y2vNtyG$PxWzK+mR0N$?rC6q z&`-~=RQ&RZ1k_*&NmdvG<^U<6!xGt_1-DA&`Q%8CT#WE3~S1} zb?oj!GJA^eJ)9~u5s&YG6c?uE`KWrzOz44bB?Y6(x+&Akju`^_TCysgG^&NOnAg3kgsQ-G}mjRFlnc4~C z_hQTSzZ_dwipq~9jdZ}~AtjrCJZ5?+zcGjkS|U*Pb0OatOgDiA7o#U|VC(pGX8duq zq-1=IphhppE}@pmK-aI4Z~0xt{pHZw!m8cZjb+|oR+O_6`ymB53WOnha7uzx!GCjO zrl(3=RFaCUW?1G;UQDzK8i0IB(&IPqm7uz!*sF(8Y?7~}trcLx-*ynB- zM?)9(!`?um*cx6$LdwyRaM7};5{S#<_wIv&yU^i~e@nY#1t$s*g@*+A0W%p&D z?65e=73|PIr*2Vtpq^I2-|1NA51>TGZY$Oo5ST|xdpKNW=M=FeTEHM9C+`+Dm1vv? z^}L@Zk4SScZJ>TZs;?y@Py`FPt)^zXWRTFGiA!lKczJRb-m6OTJ=L(Bn9n`5|Bzx_ zf`Wt)|2237DW{r{fQI!vM{7df=`v%zKaaiwEbqAeB|=iHNN^!dl#}%kRmt;NyeNNR zW&nzULv40Or%N?mLtmD8ATV9HsmQf{M1eqCJoD(i_)150N;Q(qT=Hh|*}@iE%GRn8 zxsSm6x8n7&WEokkOL8;uF*X`fU)AP430U42mZ@byf#?R9h>xf88WeeR>u*Asugi~$ zM7}3hxqK^7G_7EU7SK`m$W0o5o{^d&u^lqxcRk>S#|5wXXojF$cbVHmB}GO5n> z`TeOJTw-XCjon{-RssDvi%!?GGF<;G8^b3;snahSW10pVs3GA*68ompz49;k2@8*; zUt=l`SpUc;CP*`SLaYr7y{=77QW-CiPuA+%}PkW2SXQuQI6byLxm?my@G znsq=Z0i^m{xH5GEJjxERjDQ)s6h(C`xopzv@9stl&Q0X!hMASi zeiqP=bHJmuG-yyZ$d_Sr*J6vyC+O;of6R9E-w63ekKxlJ?_?_X!`nD zDT*UQCt4?E{3iu!x_*W?w$Psy#>~|YNA`8vllQ_`nFAerpB%~5cceL`#+2BigLNB; zy$E_`m9K1P++)Fc`GFKaDD>x+W8!3qgI@_0N*x4j0FL=!f23@Ep9{?lp*wdIO;Acr zL~U|a#pR)E)MoCpT9^9LPeggzP(FDsJyI=@fe@oF~)xC&kpPpLEVr70bLXYiI75f~d zCSq;ub+>Y@V$PjQBtJ>SWru~wJ)j12P zI#d>;y&Dbsyykm9M2b{UZpvACsfjG{tFq%CL%v$Zpu4~P6{`(?{e^GB*=X8Xgk+C@ z-Wf#R_=a*1#7Jkf#r5Xn`!^Wjm@(DHnC_T~n{VV(bQNVxI|hBZMXO~~ zj}dtFGay<+iMQ8}{kLHf;nQboX2ob`5N>>8dH`uX_+_xzs~6%g%x!;HJKoT{2VQyo z=5s&ilZ9IN#T5sZ=1Nn4HM}Zz;z$kIG`Apg|K!>DnakX!AuO=fB9NM2lz!2RQP%J6 zU|>jS=)hH=4u4n*PtXO-3N0Yabe4gs-i{*0Pl-R|{i1n}hFt=m`z6FW6vM-4P%DJq z&V?u<-jYDUE!3{W#$os~Em5G=K|pF^gfBWWtkc4hsw5)W9XlZvdMp`?9Vh>xM*d`r ze1g}HA;laP9-;{Hdp8{ZbuYLnA$;1EGcYXjx)?erE4$r@y&L*@+QFVA-d=VtL~}tg z(;b>$VyR4T+SU|tx))I79{piIS|=%bz%6R;Knj5I4rQP1I~wrGJ}E|+V@S1w;r2Td z6h|PB<0oSk!lqcP0kdGU@J?AnztqSl+EM<^T5=_kUCoh=3{jfHuxQJWeXTgR?@npY zocY6;a#fwnoScg}KM1?I@S8EFQoU}Xa_R1+6mWBqCh*dB)00(;E&_RHF$Cr`M~~0B zsP8JsamR4nU=a!=V!v=LHPa9`alME~y4pPf_3HLl0tCO~ZY+>Pcw`k3Jqomk-SMBa`wndVoOg+93x_RYogPju8T19tO)U} zzBVqO^7M}2VQ2I%98PYh4b_2ovz3HqAJ_|Nht7qko}0@!q@{Tzc+Y?4TBH@6XwnaN z#+=#b&(-!x4Dv~l&|eu6IJ@>qdH%6b;^Vh{=!Ic$IKM({i5CBhq*nZFTQv(fWZ|J8hd94+HX598I{`76Qz)+B;Tvn`+n4r4Zw$>fqMx2W>olkU|j|YXd zXgl?J_z_rZ%ZwH=T4Wk67jMNysZ#5Zk5WpbDh0L%>@KEq5r?X#=QW2$J6h(k5~U@A z6V;DOG$2I2t)*LWF_-hyS5I0YY*WUZCc+cJ4pvh84h)7NIt@@&YmSiF8WaFhUXmkG6a!mwf zN*W)JV30;uN{U58N-ljWT*Z^q!L#ZK50h>RT!y>xb82jQw%I}98F67E^b@B*9*1Ws zjHI4fwqAd?Mizl28rcUv@AnS=?j8QzC(0y!i^rhU!{89^b3EXa)d#AMFsO}4-%SxT zJHkDXsquzJz7Z_IYpXGyhuI%jJL(|1M{DqfU~(Bvs?(VSd&1KK{$VQqb0$nj&RMGo zSuZaAcl(SOlN|~G*~CP3)0+ivT0(bjQ}>zDHg!tH%nLKyDkW@M25Z$sa+`{5h&+m$^R+7oe&2R1+f06dy-gPrz?o&^N>qd~Y zvMGkXLC8dn*dMi~^67SiR$GL|^9~bxCEIO(6FJnN(7wEk`6UUy8m0xQ$KtxhmN7Y= z&6OQHsQd{ZAmKv{A&NtddWoTkSNCS_y6wY4y)hU~zuJnV?gwvRqmJ!s|jmkz5*A`RyXS@a9rQ-Ni&kZuRpmA$ zmQ5iObq`&6P^;Ahsy#xIoSM*bR;%~C#bv3g&wjuIi@on!8nHeE7{)i10@ zK4I5p)7H`Gx?~rpFzTij4Cz!}bC*Htg41f@FqdzeT`PM#c6!f_5wKDMQ6aZJQtNhIsNY&}UiD6*X)^w#PdGvuY15syQkOzJvPIS(x;nAM(n%yT%ZG{A7>Nw3 zLf|40_Ia4uF!lHd8l&|F)?3T*t3BjWaMWI7AxhpJGQ~p9$q-fmwV_e zYWht3yj+5bPY9p%ZiKgNoKzaRe-%_%I4%1GE-#H2nZ<8M8`dBoD1SOmH&x9-6dH{P z_Zb^(>#TZ!4J?l}b_D0!jWCaUvSN2nmb~PMD$(&A{)SzcJ24-2U*MXxn)kc1r*XyM zr1ZF?UzMutLbeRd7yEwI!3;|U;We5wuz{4H|hp8kM5dDqg zu(@G7K`pot#j?je@kunhS7D_dep7!=*03(sa3%Fc)9XuG!k4xEhWjX78}fY(p~gMP zQw!1^?l%WoYf}xvJB}KI%_4J{A_o!nb3J7RuAY12i0KEEtd}BL=pf`wEb~m5!VGRR z81FYI3Nf?6IJ3pr7iaxVuzVuIwo=bG!6Uj3O>yrnfwmX9|L%p?ouyQI$! zJdZ0TbqU{e*LHrZ!<`H-UvNJ?GwPgx9=+W(y#3R8^XFnmYzhDD$X+C;#lA16;_G!xX^p`u{NZSKwGW1ViL19tLwD9?X^6`1h zB_gIHjkPsPWJELjn0n*8r^4EQW9+S>;t15P&8BHW;}YB@xVsbFgS)#!a0~A4+PJ&B zyE_DeyGsHD4@nQ_eE+QRwdSU->!NPnU3))|>{h&jFO{Og4&smP3b|1W%pDNdj;_9P zO{O;W*>N+gTxm(q5uFuz2u@53y?^DT^m&+tF0VQPu$L zDHon8FL%!}--g_C50#TNMwS~K;_I)!Ru*>7pg*U+$1eyuUdI`pMJT@B(I0VB&RA+S zmAW^{3LneY%>*Jet5P0US!9MGf4`esH;7*U)z`br|LY`RYc1!e#m;fjEcA_}dhW-{ zT+zBg>G}Mjr=NE9=`%7I0Azm;Z82~;m{VS0$>9G2-t2qZz5Qv!obPM7@VBv$w*iRfhJXT8ZLi^6mUhr#=Fd+Js_R)?Xf$>#Ez^v^m= z5=+gr3)!M(V@sV=6>0$StW{3P_uYjmzDCs2@z!eSk9y<(>DcPj12+&lu&Rb4($JZ$ z6Ju1=H&i@{7jvsIho)LNypEYP>2Z0~wMyN^tJZE>T_Z9iq^ja?%|_y=jF_c6@mn3T znXC*SqdA+JE7YprJGQNtKN>nW%=rFPI+VA5y$tWVw>H&K#TOXu%6?MZ{gR}_#H`Ng zbSzQG5mEPWa}qLx@H~d~fGmFU4@ke2lQb>F&nllRl){ zZ#KWTnUuRc%W5wOOkJ@TjLh9J^5G9iI>&8!8wXosRbwK>W8MaD%YEECvXBSUl%`0P z{M9Wbgt6`HAcoa{T$2SmP*s!SqJsns&NtlnSf8(}7!5q*qWzyJ&|=_*T}lMHF40>;Xh`AKog*!Lsxu$4zS3 z(#1(J(|}Xw1N~V+DE-+GTm;F*syOyD>~LXx2YLuHQP4d)vVRl^K!K*C4pYRsMk`ko zS;e_18s!FwDa#=^kdYLG9GE3NNM?PijoMGuI+hKXi# zU`-j1jJY6(=I|c*I`R$O>b>c+Mt>rtynvA;_2m!w43nFDH^m`VodMr?V(Y{$ujt`s zDJ@KQyi_Qfo4=UOly%?GulbiVQRcG{*_d$z6L+CmI>j)6_!ly4DQgcQLKcIC#Ltc7 zo=vuK0ayT&f`!s+B{E(XglCU+k?C%G+pwVC!E!_AG|Z;&#mbaS_{wrPN$)4`39?#W z_8?Tz|0ZMGM)>9|TS@ToqNd%@0*>8!kJ&iBLMW=cZ0bLeFWIMaWbk$$0yUd2I#cLa z%#zAg3ZhsfIk033IzgKR4)DEAce_L2%~GEIWN9!S!S$>gL;5Lb16`-)Nlri-wO(&r z>FPV6?z7$V*v7Bde{WALJCe@}@bhml=s}DlWP^Xe!tAQaib2ys#z%v5O>1&Kx|vWf2>FGg7T?Ot zuLu!j3cCeZ)F(V=sdy(O{YTXdW$+$L00P{{KXQ2g|>RsWrN za+Nus`B|kJt@gE7SLA+;Gde6nKb0BhXQt%=>T4_BWDX06qK4CP##{Szh(}?ox`lq< zCv|}BBCNVegkmq5P<*837x)hqK>;2ke?PCzt%>Bxnetyxh9rw)qrWK#{%wXwPQB?i z#t!+AVSF54rR)y>i+}~S=j61ZX>4db))A6HB)_EUQm8-h6G{}FtT^Uf*4%v}n_0z7 z*~=YdZKMQSNrkd`kCvF9e&g>MygXl3QjD{k1^@J#oJaC`}FRs^mR?x4>Kma~)()ZlIKQgqL2 z@_T$=6{+k_2^4S?=tPQkOX|ULvj2K!yXd<&3 z*Sk7g>a)JkkAwG_y|$6w_b?e5JJIzg*D;xb5++Dt>kBce-`#?-6-~1%RcwXXizl|u z)XJi?!wG7tGiUA7IL9KbUk=U4UG*|ZOq!682S`5`Z-)pHHfOa~H#2wOBfDrW8kHBx2ARWTrh=Et!Ue_bt+>st8vM1U&NPxwUXESL`&7w ze$4g3^{{UHE}SReim5*9Ci?&g&k}%MM-@(3@BOj81LLl`aWd@63^#hwSc=m17wD#;o^YJ+t7p4c7-6R3&^jD>|V`%o4_fU3RB2EhNxdN8t6FGsou|&&*XrlcB#mD;yA?Auoa8*eNiXeid#93+vz-u5%=!OEj zW`X}lLy_0qS60~R1rVwB+(#<=kX(f`vF4MMBV`9nleQ(gjbp5ktOL2~XEvFT;<1OG z#-v<3Gg768ocozhj6}q4n_U6R$P;HUl z8$W>Ij)5pW#{5t1^UlnVnx?Z?mg8nAVe`~7+3@)5mpLm*x9{78E zuN4jnCby`Ynt#kXDo|rZgy;M|KO+80cwspg*J3Xn;Z5Ol__Rd|r``>(=;UPYinZON zQaX<@w}ZpCEr;zo-F78+f32>I>bUIb$AwS@{gI= z?G6`cr1^Z-mA$i&!&E;`q0yd{l#ad)9GKUBgvrnWTDGCU%^EZ4ZJaPY@mymr2vfIE zU1{cs;q>0UAA$}H885XSq@AS+7spQ>o8|NVDUC60J(Y0|MPY=Z1Jek%!FGL-hk8C1 zH$0Cx_q~i!zg`}sj6$XS`_s_cj{jDB=fZCOUi$7DLlrnN=9=5?I*#KbT;hjpZGg!w zz~N%j0gKr+EYP=X!W=F@W+_OKE?C$g2oPnWwZvEwXD7`J8csnVqJ^4m9qLs*>dU5i z7}I!8!Yh@Rkvg9G=20v4-ua%FI4`dRimfRrr%S8hplh61fI}^i3M~xUEDXajjl(gp z%tc=UMG@~U6i-D_k1*(9yaTxc;k{hV&H~=F!u!*`!?|>LPpx1g!_%m|5hFq3+7aL3 z97c^L5-la=j?kRhaD7d1l|Nakf+DSsaZNp(j&9uRupI3oJcO-7YCQa0Gf?F}giy5G z6k)~kA8YaJC6NwnW+t~^&K8_9PJ#;_odi2#7q#MeCt}T{ zZU2Dck|R+u;QfAPCia@U@CCWh@vwLgyBwTiZAQkQJiGi|4fx|3EkA7K3idfYi=Kf= z4yLw8^iFnFccXE4ODa%hS0nPugs*S)v2{B=oy-HWt|rMe$9{T7OePu{p|ze ztlLE6TUF{a@I+q^$J7|c!9UC)I_X3IJF{z4?@8NZfyP7J(r;eduh1I;u!;SS=gEPW z$RFt!f}d?N?6*M`urrG3qUK*4!FwKIXu0ff_2A#wj(PVZJNkDzUj*a=FN12*?vreI zJJ{)**FG^dqnIXQnLK%rJbMd)8%@SU4+w*)jeu2Ql5-SMcN<@Yi zUCzq_|9hxD7{kEQ5+ET;yNF>?7H0h+%y7a|Y9DGTe46iH8NITeQvoint#EZJBj3=m zZ}s|WIiZZcQH)0!yEqmR`xxPdk?QjdP7aR@1|-M>V#Uw%OV>Sev||<56H=`U(zO$9 ze-uEY%vdrLgbB(#IHS>Ca7%bIN-8t>FN!jLly%bPa(5Ny;1;)ZWUL_=n?lON4q}2u zaYP^yBVMJV+)==+0@d|YcG?1c-3lED1Q*_=HcFnaqC9mf5PLE@b36mbyPQF;eD$;p zSEu}?U4dOL*O9l%O}nznmP!F4aRj=Rq>51l(L24b8Ck3iOYu%$=&G)QR7GEy{n&Se4B! zT*)Qi?VoKN{HF}u(c$~2wkfjM^)6?Rz^y;KuVS#g)2YORyhPqSQi?w^SUFOX-zKWV z>ExyasjH!Rv+I3X*C1bz0Ul7N8~AeIVYu0Su{p3OS~hDNy(`lZRNb*GSM1W&5fam3 zTVYiJaXFFCU^p1~#E5fc2enZu!wK?f1y@%X3pfJwYg8^EosfpV)2-z%5Llfd!C0L& zhM~Z3wHyL{&KEi1)q~%-bEA+-@n(F5-bVBntK<`%%rUA@j1&GKK$?)s_+z`{d>Z2A zT9IRI;ipD=vRjpN#(ovl+>F-DcDXEEjQ!|tKeel^*ytsCDWZ)Tfpm?q(f3WY4`!5( zh5C-3*}9$G(fSp-{iILP)k?`{uP;`u*UX@QrbkS8OA&j>V(u9QY)&#VLabY=qh2dI z?P@*i@+!_hk z8Vv0o_sbrU%$XVAf;K%+bJgk3&KETAj5qI>XO@NO#%Jjfo3(UHXZ3n!)w=8LD){E& zw|2b_Sqe6c$aQOH59`VoRKLwl+04GqAX)s;vD$3@n3X-c-qwrI-rs3B$j7@Xu<%$EL&eO;-oZe@;xYS0OyZ%**7;9Nh`Tx_2RcG{nt460d3e@B zkj)@bgkT!#e64X)8t^i!M^|2ASMfkU8!ZGHUGXUB*L69n$uO+(XR;kq@#H&9wLLs2 zAOck`)U@m&fLKm4U`!KQ5;})b(ue6)tWb1Wu14o+_WrSh0bTL^YkgHO#+SjW>&0q=MIyxsN z*&N$w-m29>)MSRBxgYE$hdM(^*feZ!fdAixsih}Rrsh! zO0l!~rL%QU&Gy{in3{DZv$GC!TAD59q&8dVhuJTXTU)xeuy=N!6{db)opxBRo4lRg z*q=~s&6BvcIdHJsR%b_uFE~{D!=vybd}$AJZBJ7Sny}eKaU3-LIYT$S%Gb4xHh0WK zzsUSYCK`3G5jKcaypwTTAR{}E4$t)ZJcw#c@D`!#e%+M6HdwGWf2^S^H1F!+%^8{S zFmW4t1@?|DCmKjI7_R@!;FtII>iTAl7U=^`^@HoLZlby5=pNNrq65|e_kRHQBqDlV z9r{PxNd=_TjQ;xUnY9Jf6|THP^O;8zq^{1#Qmbp%`1wTq_inoXcozB-XRD@^dA5*$sP$Keb)U}{q=l`S z%#PBzea2H6y)5^>7U7h+wjb7cvag)+XQqs2fji%Cpf|0bw!Wj@i}kjyqk-jv{|iNk zjQU>`+oa@_)Hqy1Ha2!xYz_b*kCmO3jU=CyFuw|yjRX5V56I0Y#BBz&LaVAXA=tR= zxPt)PJitI#d2uPAy>pm-VsV0ybqOFVv$nCmwc540x3#~&b3Ac$vUs+8aJ_bMeSY}! z_Vj-9?&19Svg-HqpEVd{nT4JHZ`bs6`V$R>!x89|ayc^p1Mp_9A`>6}fDg131!E77 zen7*`b8s3&2#?Xkkjau*M_7i}StBH8E-X!qA59@+%wqCU*O;w|TXKTmSfj?ey?+1imOUCoGM~bY zJta0_n@E+l(efcS`Vk_C3*KUKu0Fa2x47%n5UZFG9+ZfYZDC=>(4j4sztnmrm#3Oq zgKt~e&OPa9+OL7k(GT>;ZwlpW0ng4r#MkZZSgjFZ=r({Zagzm5mnaHlN@1aBh$a?SmT6+8sm|r8w=l4 zWa*@LmS&jAWs+xWRh}Q^xUJfp=6XRlWKrU+cD!a?xL5IV3&yFQP7_uiqG*#M=r_va z`BC{Q9AiIp74z*MRsIKKdvQ*gYcGLqG{SlmjGXxVR8UkMzibPEB{;Lxb&-lJGr-{U zv8%3M)!nZ_b)LK|AHlJ^YLweKK%q}7l0h!cz-qBd>Qd#Wb05*6ulyYDI86hYHPmxx zOOdjrE!hXkp0&%6UH>b)7p?7xe~FL@wD(*?e~mcdPcl zXL&h>@VHvPm%wliGo~Xlv_eb1BbcQ%;)>Ht+wI9M*GV*U(DO1mAhNOX)_&!b;}8;G zRcQvgi7Z31i`%w=^goNzi}VtwewA#}ZUMVy9lmDf$$#n$b4>ZY8wij3OP&xbewpTk zsc@ZLo{CCFIkvKBT^gf+MrQsTW+0Qi1j{f6i6rzfh-K8?apH(wJf&=y(KJi5qd-g?h@7sXQT?Unf@J~s!TXm zH61cT875(|MiN&MTagW@AZUR#g#C;CtSYm(8&JS^Ty%EpaX@+I5%Ka1;}rNZal*)07S=AuM*mAMbv7FCy?y zGyl@=7Yw&caD`qKvovB%Tk`+T3L!J6tO>=iRUCrwf{rB>KCmmrPe=4cn@o;%PRTl@ z$nzlY(CKuFyZ>_vUx+OiJdLV(m~2e<`(v>gO{XBd@hj79CV%6Kx8K6h*5S3siuKl- zDa0~54?XVemN6<4kye4FRCl7%@M%)hkt3(&b&bcOwU8$&HHWHpgiktsF45;>>5UtW z4Ananfk0ko)fh+k38RlhGKTDt^Gq=%OS$k)E#U6Y=|71(E82587+j84H8sY! z{bptmvVo4v5U8p5sW;H|CUaXvuMKsvrf$30n_Hc(OzE!5s$J?R`aj|oqL|qX@j_UG zabS_1KG@^@g{+o%AXGVz*bXZ@eD65XsW_LnU(!7kj)16F1AkXd)X-~WRIOABr%6l1 zk*WqL3X8B zW-Md-5<6pFBr`TMaS~lHNnz3!3E^PZjjg9EwqM{C{<`&Hg1e3~j`zBg;nZ%bG$3RR*$MzYL%fL zl<=KHaP56h#0WO*2dh{xUa7$vd-mepoBonF=3mb3ZCsc4z*^1uCe%Ir_08nJdY*@0 zW^dyU?MLejdHT#4w_No!R#d_~r%taoaq72@f$ol_3jYoxeBMq-%FoCdH!@=B&5M6u zGXz>eZo>6^&;C*I4}0_8@=f#YpXK1wVdOdI=;a>rrj3P8GR5W9ot2v}JM<=W|12*O zJh`S85YziNmRj5uaO?lX8YAy{X88AKU^+wJncS+s%|Q)J$l$;Y0c$%oV;xE{uHD5& zR<|Z~J>KSJR#^P?lwNluu2ENZg5!&Tyg^P(DR)jj(|WnM{vq6W_eEHaPPr2_y+s_h z7CUKmy);+TuFZmJzRDwct*Gs?HSO9V0I1$b*t$cB)|p^4x1jx}dF+?#w*>F4i(@I$ zYZ~b8MLWy(g)OghObiKq8$;?wL7fX}M-CIa6~CC<&z{2R0w1o3q7j2gyXI99V|_Ubf&eCC0O@6_=Mr>&D?0|I3k5|yPe;UjYADD&K@+02Uk$cp3axDp4i2a2|<8l2|~wgCEC$SE6)2wtez znu3&vNMwn~mq#R2kSHsLrTPh$*4Rhg6Hzf3F+(Xa1xqn*QA<^4mFNYi*uQq~ya;b8 zD{a`aKnRTwe55z@Apq&rNnk=im^VU9JHq1`;FTHS(-HBGvGsqB2n0v&nMj1Dzo(|w z3g-CHA0%a$t+kGG7|RSwsdT5Cr+`QkC8Cm#?1lnKQ!89k0xi8y z!hO>%=O)~&CcM8_gjbA*BhZG=PB=8sMl^wgTJhq8I?&MoG6$BvJzS1HsUc!R@e?#W ztL+{&75dKY(RZ32tY?nfXSBQE_yeyP0Dhu}7;JPwOf;DjW)L)SS;EQu+0t$;z~W2{ zb|S!oI;pZePPyC-)jJNI&H-aRA@DH)i!2$SgWv~F4h6W({D`lfaQR#oa!;*){=x6= zELxJww&N%s6y_%yp1dcOEP|gXb`C%VuuN%#1*Pf7G!aB1>`lON8JEhn$qsi`z4et6pLZf?Xc+XJ9*;@k}F#N-{u5GwZP5w2V{2bw`geUp$^G*jcmum?kq`&XSpA`~l$B2P~x6U@LAce)3?cd5Gbbh#6*rjn9g;JL76}Ao{Xy%~46hK0f6c z&ah{YMa{U+Je3lfl}`v&nN^iKwgtHtmHCKu9duR2a)stqh5X8}p)&H}Qdm)7{A9N3 zv_(m^RQ#mjsH6{KAyQEW>L@9Tk(npZNJ~ya>Wkd73g61eyi@#?U^-6>!phRf3RFAW z>z9f^-Gn$@KfS?Pw6ofWsJeanIvw3Q8oQ=*dW6fVx>DOJL1kDZlSKKwugy0yIpneu zCZvM&q!)wDKb=WW_YpKrn#BcXwD_b|g$go07Wg90i)WSlc@U)OTN8E<5tvD=Y9W^RBYmiKn~K z1Ui24*;+nPR9E}dUUtm6t^*ziZ|f_s+M&$dPZAx9g(E zZe4k-QToi>Imtkl=);_E)^Bs z?bkgpXqQ3oC)%5@hh1jyNh%LVP@kTr@?KA;_hpcbXox~Tf>U{j+IJ{55m>&=8iP+5 z=gr1~5nxiHnFJ5XhVhP1%|bB4%89DZo77CBgTw=1oL~_Ii zb$;;aEr0awkI)-E9dKA52zYIuMC!m7teEO<9Mu~fkni|bJ#p_eYWOgkNHnR#I7WMg z&Uzt8woyi@TeSUPz+=nD01;yD(mZ+KW9JXxvJEH=EPiPR3HWq|DUbZ&o#v65ZquLc z@SUzYpTMM=?0cKGl%1s3N1#y#+gu3RBf=hN4G?scpB@G+FPnH0n0~4#e+NF!H57mA z8SKiL-r1Vndz(F|k?on$81S7t(~lX_A3{s2q8Xe*Xfbbjty0hy8mbDT4HYGDBM~-1 z?2$w6rzchBtkHXhB3gLVM3PM(_AKmgEg=70KoxS>)SZJ#ox|~4yc8Tm!KkNVuUEs8 zdWw#EMI=N(vZ;V+7<8ft*_UKlL{h zd*N#}acj|0(2r&hS+d+8lkf?AEQaZVhBr%x(T0cPXktZ(Ao1&9359ieGna+fA^{RvPedbiGUcizWoHGY%m z>65X=YUmnjl=Z|i z@3iU%prz~xmrb56soQd!(W~w>yzeydhezm~v!G!%+hV}n0{rbOJzW)Czz9huerT?Sv0{lNEUiSYdeV2V=mB(k1|H!)R z-(_9@@pUEsN7nU!_`1%$?9Kx{F1_vl`-cCYj}K6hY$q8;f`o}r&V}~xve61Rxmw-& zwHl9i*=QkBptcioLjPHd&#Ytj?oEfU;@9Y3&prPm8})Yozr~b^rpN%9)Qr@0MPepK zCK8}$8i0v~O}wl^HnsX)oYIi|AK9oqY$r^%WDzWydHc|R*{u#iQ&ZF|)MX^T?B2_P zE7NQ18=G6(JG=kWD_w^Lp@BfYuy7#QiM!wLB!HpDB2xv49!ADR<6JMCxIqzR2(7ml zjEG1K4zc2U+vY$qRvXzg660WB4W5k}(AA`Jj$QwaR;{W9(-HviltCOJ!~|>u{25#? zwkA2O@}cm5e}?)l0tbea*!YPYlGNwL*q9U;^>5T?xT-x#dY(rb)}wK>W}}GZ+iKRE z-`TCbA&&C^SkPW{P)2q6_Ipe@w?PY99YI5rLO7lpfJN3;L4nmqPpi)i6BiP!g|L|* z`^|Rvc!8&}cl(gP{$@EyjRA7r1c_9loF$ zs>|%GL3RfY>Bqnyyu0+1}#RX-_n#o0V%c`w{hS&;ixYRen@$b@`ZX>f|5>ZnN z!TNkvS55zMjk32%G1Rh}lr4#23Fb=OQU>!5){;i2$kgiPpu ztC`62>ULcGAH&^*gZky5v+A}piWK$0O)#<~oz_|ax0e(dorXp!hE-Y^0ez3y-g7L? zT%vsoPX0qkQn&QGYzw<1x>17!E{4EOMVvN5Lu2mmSgTuuy44|ZbkO}~6i9I%F_OCe1A~(bJ(Mt3!wx!VB`t zv9ov?14;IsGrRgI1{QX%@}R2K44RNS@Vpd2$6Zv(QGo56jlTwcyzV%y6FBJ+KoLNC zO}|s7mircT=JSr4(dV^c$xbYDip(QIHmtSC7+GP!sZNAgnIdGIPJKA2HpG{Eu*e9kg9H~g zLiOM;%G9d~@h!&sM`9Dcf+|q~60nHEZ(va|vHmYI$5GdX+9I);jX>v6l@nkjdayRS zJMn%LO^OVrpIRN|o0*9I%mG3HdJqyi4Ddtj07wEx8gUC61pI&nBw`AbX8X>D=Y$0S z+G~fxwMYVPXphK0n|~DJZ<70LL!pjUnr6;Kg*}J2fSwOX?R~LiP@4`Z7beH<3j%rb zO&v+#mB^}%Fq+Cbqc_~J%2}zano>u?s9H|)X?-};LQT;oQ}yaVNOS^zG#+4M+LH!r z1AqY5eK<0}7YmA%EDT<1B!h`BSMQa=oxx!qhaw1A_$~+gHP(m(fai(AV%Q*}ZS;B< zs~tLmr8E&shlATpkVN55K)Lnxr))E_<60&gZCvc4@lYtfu3B{oRXqLNkBl> zM;RNgd|8+a#epvL1rZNiuQ^t{0dcc6Xd?O?;V^ZjR?`jfY?SIzgjE9>Umh6wQZSP; z60bxOU1KPKVW^1o8s>d7J9j=ZP^5@#&4C`oDuRc+7d9}#gWGpXBN#~g^xbCQ@5-lQ z^d)0l1H7RswQz)PJF&hUm@E%u8+IkUFXqX>F@MHFM5Jl677+wAm8s~IvipH&f*0nW zNYSY0BJ?yjEGU3jcDI7&E!rIWDUA~ul@*cYPi~#l(x}au(kHa5Dn%-mh0B>gW=^=f zUuK=+n{!STPWcle;V_eyk{$N?nIM&5qGNJ~NBvOYb`~3(Ol)$qFp$*d%VMin;PjZ( zxrmc;=mzUq;kTJ{MM{FD0!ImRXtG{`F-}D!V}%NhS<7+h0X~k68=i=EL$5<;GF;IO zIV!m~=Jc02t5_)qM!=`&JXK~dTLO=Y48O>VH*1cnP!BhSTtUK5EYm69)>yj5*cxTK zdE3pw>4IN=x&%Ph&*DRnXCQ1}taVqPW6=vgo~%D(m0H~(oV3k_Ut;~_<3;wN%z$T%K5m5x`U?IC-AJgQ)c7~Y@Zm2`Qm6FXd3g2~3Kacv zSj{gRZ=|h*T0~REQu1Pu_$mWVZF$(Nd)+I6aP0!*bByTE8$#OS4`7!aRGM?+$^mG* zU$Qiiy(MAdo_ZPr&n|FspvC%+K^IaOVl?v-cTKL%=hp4xw~@(@ZQVlK%ip@UPV0nZ z13M8t%e!};P|pzq1Ahgg_1KF&1Y+F3ev%__8>+v_0>_FV=06646_!HLLq$+d^M?B2 z=3nN_$kD=}uweQE;_(nlV2M%qZvOGhYPUZkNuB!w90BrQ2LU=%e6>K{$ z5E~3A)FZhap172OeVK;avPJRu0YQjl9PN;2^qJj4hrhUV)M|$(ups995A>w9 zupqdAE*f9S3Np!x7!*;zw~W|c>-ey8Uj{hev5dHXr*S|Lm;oM)+voV3j+n92sOyRN z8*so>Vhpis+y{IwZyq>^3`nR04ema1TN-2}1wxaB`PYu;*^nrcm?*vwYw6|8cW;&W z6g%pgNbQ}hm>B0(kZe1c%oLi;8Wm22pTen=!o5yIw~WF!iIV7&B0MQT9n=*L`Z6gio&^d|2i=*&Y3RUdy`<>sFrW>{6N0pQhm3v{s&A8tl}Ru{ zO}%-`+$ij#L~UN+MS&T{St#aNHaP8RURmJ1;g1d2F2?3S6?NviG9Gbt8exzix06(A z0rR;S`nyBY^az9FFw-*CHbyq<6v#H-$h@KnlFmxwzRCLQk@-D5Ga6rk#*8ei5>$Q1 zgyk&xxk;jpk_*N;b21GQB#MzAtfN*U`Kge3zbV_BFURpFMsFcFNkrXRTt0S*2ZckT z5{o#E(?R@JuKSZb!3XqK&d*kr@(M|iJWP}YI{C5>m`t$v*Es1a&bmcKY*%!O0}l@6 z>Wm{zgd3G|s$9y|t#Xx`L=X6Kzu9yD+2}rYl9{(MPqXDUlwcvr<)CiB8K=WQCCLh( z7LX;?K$seG-4q~1Yz1-S0ya-M^<(8#54{3c3-$CuEGqo|Bs{frc8~@h>y5JRqq2p& zO5u8z1S_Y41xV1R5F=QbXd?^c&J~8i&uPl95=V0`;grJ!!(sn*OT~awLDb-m zVk@S4EikMC1@M4V;1NcOH1WkX{|pn^aba0DYp82DI~-HktcY5_5-qZ^{PKo((#0lx z*D)=^T;XSYXl9_N!17nCC?3$zwP3cV63pSq@KWZsmc)-H&`20m{w1anzfqPHUHQ$2 zn*fo>NG=CY8BXOKjP(kaOwLnxOeogC(T1(h7(pu@MBAo8`X{Km2hJK=OYh27t~=sh zJw9p@?8?q0qF$ivntQLvJ;1XXtP`&WYLU|$d~j*AC`4~{`7N&R*@QL6TFZj|xeQL_ zLpWY*bgkzAS-C3>Yk4&`S4}ZNeS(vB+ky#AfpMug51@?_;}QL1Sv{(y37EVgQVs## zxjyE_o?sbXQ@Y`AYs0;02tX21C4;hAmWNAK0A&at~l0i^{4&cD!i%MCyt`lcwmRwbTh?}WLkk8Sz()0 zQfi+RBBLSj8CokHiC99u}=UkFvb%3o!fK90j44sLgCZ+YURk?ps}R zv4SM=z#PW~i|FbPp~V<5A509IiheGYSeD|)zw$jVBA+6m47rw=cR5A_J5a8xsRrT8o{cNwL32xms=9>s#^@E z8CMR46f3n3eyxPRlC^!I?j>3tSgq*hUg!;zqVQdGtq#lVU&$ATuR|P?vwX-y8Z7PO zXY-!Izr}Rre(S1^>3YF*^AZ?n6zGQ2?~>FSamt35e}h+>>8JG_l|nDuk%k|$fzvN< z6gdzjJHevM{tP;)=e$&6qyVu_8)yI4wXh!|4H^AG+j3_-o{-3C^9|1J!1Wg;gRCI( zH)Obwo_4t#^DF7`=p03xa7vdN?iixUn1P{W{mFFS$;_NdJY0mJn#nvOqm#$Uq8#ef z9L%Tee&A_W5b~(RRqQ$ZK(63aQx3`dRkLvk))knBcEyrl@E6iLPo@y{+2xd_TDCYn+Fgt0I$XQ7;Gi8!DkcYEySQ*oFCTW!=DxSbMfA9Cy@H{5GEzo6Sx^`D z#3l^UU)jf~#o25gHb%A{y}V6swtO<~!Oaz@H<`Q{@yZjQ0}aLJ!Ir#*{k*T&t1`3m ztJ%GhPSbbBnv$Y@N>zOl+kMqT_)2z6QiX-OumD^P>N<4l=-$eJ;lj7FHN&COkE36I z{o#Y8yXz(COMLvH@K6lH{UdK??jvR$jzVcmOG9~YrLS?N?r$z5Shl9xGOR6z2!c(E z?V<(eiW(v304EGm>F=QgTSdf^^h8T$86QjHT3R=T*C1Rh1Im4n;X)zM8GZGXBnLqu z$DwM?)-~DrY3`q>HAD6q)~n(5D)~)B>p2hZ_~!IE-K{$zxVfttr-m)@1(-)TMzYnh z0X9TNm$73x9qSx6nrj;@M1w}!4iaZy$Tr<-aWEV?k zmw93xqPbd_Ezyw0^-jo5Ly{Q4=amLIg#_vIQ(7kyD{1k}tgIb3_snVq{um-7{bzHg zafH@^#b&w;GMvm`S|2Jza2z;Z36)xfWtMxCl*(b-`<;9q1UQ3iO-m$J35g1&hI2fG zuQkASev$ceV zECf8nTDKr?NCm#HCZ2xNC&A6`xgzaGQS>MFD{5kihYHuJ?6dpcpJ`=P93NR%b{oz!;b zkMB>J+BxFM(b&^Q)%HETjCvY9t`DaT!2_%?Fs7I|lomaE5&xDD=8Ujo;Kcy$wA~H( zu0|L|C|F9ZMv4bI1HUKU5lm#Q-vn;)^M6aR&@hpJbqLv|ckdOU_sXOXs!GUq0^!i< z*|vd0NV}Vd3^-;eQo&q8dOj7%tV+CeT|!c&dGnx>Hkyw z>rYSppER_$VrW$-^kpL9PhEXd2Tg7>^||vGZ5|-o9{u~yFFA(oyTib@o!S5+m_{Hx z91;Q=%0~=bY(jieV#@kwT88&%mxGIkPeACisCfG)S@JLPDoPq^I$8#L*%B63Hg*nQ zon77kH@@BhxRS43`;IxWZQIVowr$(CZQC|>H1Wi?Cbo@9GPA$@pXZ$Sob$cd)wQc@ zb=RuBdaYe`UEO{EF3b+`j71}nNDR6) zs&lezv8o}axZ|>OqsNSdFRAUx+r|22B-FZ6%w;o~Y!UdmRdQHFJ58R zqpGT;^JO}0J765e%~PaS3wwZpQ*vyoPA&|Eg+JNnXq|okDF#aBZmG&L6XwBUx%z`A zm52$aJIDbx2$ToPLn^ny%m@F%xg4}pfuIM`cGJx+HCujj>SoE>uQXyN*VXxOEIAZ3 z`NtH`#*t5MXsToP)8?wP>8^0JEKS|K2ov=lX_)*GUFeUi$u6Ys z&$DXApYIY7EF;%4R}CY#Ky>(9F$}aH^P_mqKY!A){TePC)5FKV?ca$YZx#mGpmySi zxlC0WBr_+!;~=%?Q<-22i6fiB@48x?Vp@A+7P_}XW}Cp;Vpf%9mDf{-za_Mj{8?`1 z<~oBjIITMORa->I2v~iHilJK>N3G>d+Mu21&KDczjN1e=jb;G#ugL!XF|D>FPjf`a zTDj8%J;%1y6_-FidZ(taNBB6j%xtD2s_t%Zyu7OGe0-%O%_49JCqrP)nk{uGm8NM@ zorl^9B-Ve@B891Eua`}pS^3H^v$tM#v(Xn-VXEskgkkrKvD=-4*-6#E zqtK(Zer>1Qqs(cI3HX8lA7e$p;G$(2yFFfFu#5f@C#kyWsS@ljo@E$)TfcrVO`aqQ z5kAXcqtDe>&m!+^O1uWg%4@MC?k;Pg37dA@dmWdi-M4;{dx;D3t+#W}n~@GjY!TH+ z`zO*U*~fLlMjFVD!?_JO=gfWtjR8Q0CVE)=vYuqKNj7J*&W>eVf&p!YVg#^sm@yNt zEuTek$a&(1aIksPo?}LN7H!wQ)luVqW^s|Qr)(}DSN@8?QA4Iz%Q>l5kv=J zvRK`#uL!{s|8`E8%b|-wVh-Z2=~=k9MXONlw5#p(*Xgm>p#)dFt2WY0(Y*IL39#Xc{}O~G0PW#q$}eZ{&|JyDDv&{-)8)+FSI~KP5Q)gIDPB(ZWz#gU z$8TMi2=8W4Lmd3IOM6@Y^W%PQxBnKyKg75S0YYGxSV0^7;+KCMRsGHVocFgp?B>5* z0)OO_LNL(7-#d|89)o2(ZG7W?PfIqIuEcxb({Gx^7ztxEB!y>NGIid4cYyaUNXGN}%52Lyo`w+AkL9kGc z)_*#{LeLuc%R&;ep_>I#9?8%Ck`$piywjG^DZwH*6~`GCk207gDKJXK#BEZ7$*v{N zTxD&qiVn;rc9$9glsEb7nr#u1;7GHB%t75PgitiPpxS<;jdyxNgK&Kt;y`xtb^3oHjmq|&-q|;A82aU{Io@I_pHi>iagjt?(LC(nDCY85}&;q1n<*Fp&HgrJCs3h%J#I#;yh||C@k5++ZBp~xEkHf zj?sVVw}_g}H2hNR>zT@}byqG_Si3M9EY-EOr!oYyV$vJ^#V<4hsau3SSY?NYRj8_| zhOgb9s^i;hOjpi?Mg%c+Tdw`z#ND3DvCCU8p7Uso03P=ZwhjaFN*l+LK7| z%11af$9h}&<&epP6C1kIhoZC8&FNtpf32%OHRV^4S^m^|?X9kBKn=%PPkeOapI8cP zWrW!S6N53TFlYAO25%Wb8w5EnF}e-5W#Uce}cq{ z5hr`_Ws$W30B(V1)RVIT_n4`pw{^+?x}O!{HOw&!&j$Ml9kNkCXikhir5$u=`M zg)uddWUGHd@kTGVWP!qVRg7=&7S9QANig_5Df{MC#E>D{u{@>GmE74znjjKG6ReSU z@f^(_)0}xod`LI9frc0!mCr#dEG)j36Y0w8P6QMF6LUjMhLafrOY#`bP-9_pi7lVR z|2t1>)@Ts^y}($UHQMlG^u7FJj62+E&`@X5U>sW>S^kBIL1|MIfvi~vkG2-jP-As+ zq{@uJS2>Xt(9&t)@)J{6`9x!GMGElTq@Hi*4nQX`^1z$$)3(MVUQ9Bk+?6?pwY1IT zo}PU1pwpIL;Y0lBnqYYCEd9`|x54O?p206_rDd?C#OzM9XKd-uzZGEp7-1x1t1r-} zwJ+^XuI+j9QRPyU=i}Q#Fnk+yt#OQA5*gz*ac>B{vNeXzT^;#*REmdf8+Yq-*o*nQ z5y{?#`f=lsx$U)?iq|Nsvw`hTrqrI}z{=@iVe-X3WrbocFJTfFD z%g#c-uF^rh;$vm8y`bk--hFn_GfF-4y$^Qv!4tf3C1&SzD+#uy@r#l#k-iPX*@A1ro+hi?N->!N6O=*97GE-3j;8*Z$0((Ss56C;W|fHL{ydcYp+l}$YW8}&B#m<}v0UKHIO z;J~$$WWk)23KBs&5=*I(PUscW#A+6Bk-=&cFa4sBbP%3K8zG~S1=yWlAZGtsO+oWT z^*$g~g4rzg4M2Q2j-DyJJt@M*-ht6Muo*B%6rBzc+g&y!&fzvrmWe~_Ga{2VO_(`V zRLEXoJHekbfBONC=oE*QaL1f-2X|ld8U=k0hKO8gk31#;w}pr-!o1v;1bk~ixpabm zj)i}NA8=5}?kj>|O7Dk8t2IXl58rf8+(ELc645`}4zZ~|*OmPXd zdG`kCXBmk5O~W5KN?-{yne)Kdw8=0Ygq9?y|vic=T|nAB(1{MYLK`RDXkDG{8hvHt@i0iP0q@BQn+joF?u z_F(f{h9k-QLM})>PA%gjE!9Vw?YE9(TzF&zWt4Gp$ETVEyix}un#IKNBYb!i|K$Zt z{W*esAuM;MgR^EtmxhX}5aMZPQYgX}3D@ArUXl0j=8&9G-}Y4gB&9Hx15pX*S|H<5*mP7V;qNp*7uT&^ zs2UeYTv+L2>37~t=^s;`G!zjSQScX0_g5nrqFFtakWsT08FLpI1@4w6>sY`W&qYFc zkX;avT8_c$A5!W*gPQ1Y${9gb@RXN67>!BA(e4%zdAL!LX3Gg_9_>)2Ia!t%mzZdc zFS(8DxLhA6p^y;1H6i{@hDUAuMwq&dzKGz6%(($V7g~Y9w{Q=q#DYZ$RX*q9laklc z%A}4Glg!Re;NmsU74u7(Jd%JZZxu zNAo>NZ!>i9B5kenhXPtF)E)mEGCO1>9_*87Bv9h?ZI4TO5n0uRySRm0nO#U7WzSEU zJ5yCm*iFK|`1jErwv83La)Vw;MxN#DRhaBWpYDynM!1$<}_9#b#W?H6!SE- zetXo8BGevYRs<%rTs2&MFy{P3EqFF3GoUNwIs35%1Ml~A6gTyiJvKJAHdJO8A#ioJ ztwf&vhUYpp#bFFUw>Z%lhh`;4dCbDMqy>r^_xA#Kw6Pl|jz(?CYGH8FlVc8M-D7p&6w_Srp34%60Up4xTDk(M_>ycFp3;^uy zgIf18`cHTh&qlpUsf@quR?=>E=RnM16BwIJWdq$uT4`b1`WJIsRr&fxLlj6ufo9cM zbmvPC=kN?9*n2j%eGOQ32WW-ORRF{xfax7w1Lw6BpMw^niL(5g_I(jkGCN8QzzYP+ zKy}GcGugI$)s|#Ybr|5vB_}us@^!-`REX7ONduKplaON7>RNUm`56#~rDU&JCzZ;p zA7bRqN=MAj3r}GVtfQw&H*+PCcaP+}tfkN7%J+EWPI%Zoi3-UPyF{7(SaMEn8dk}fF%Q4GjzLw$yYI4jhJ5(oHi^HMAW(8O-3+%ch zzOON!dMHI_BCos(?!S8V1D8jpGwr{(2ugP9T7rdG&MKp{6{D+-TX-TdA|8iGacaM4 zlW`outZBchgApk0{Iu6r=8oFF3h`$PwZ>kakMW0R4D;21lfKi7RER3q^4WE2GFvan z;_wjXj1Yf~ph=H)^@@0Oj~sMR)9mP!dzA=vi#V&gw7C%SMy?i`zq)=VtPigy6X0hpH z=Wz_`@p%#W&Pq!%V4KIb5n{3bDRDvIEqb)npDNPVH7PPw@ijLtpwf22+YmwVvM79U z?^%${e?eq*H(=1&MO<~WkU<9L5##Z4rRvVzpUORU%q78%DrT~(U+Ztti}y7uw_gbH?lpFq zOiJLZ~rNmvvMmqvWCa9XV~o98su zGv8ACH=3=HAn5ptgKsKdH(H)2+L3HBj!7H1a@Pg<$}Zn+fL)UL_m0qu;Y911&g|v4 zIHI-hO=j4g6xAUULY_UKfauxKY*m1K7J%r(WIH9ylP_i&H;hTQC%W3ZqlovIG(K3T zwQaJH!>utjTatz8+kJbm`V!}@d**X@)Bab~_!>94ZbIpX^bEW;4qvYC>W?2QO5n-$ zk(x9mK<+`h@qihS!F{2?bKh^Bx@vUKPO4Y~AG)Y#30j44=z| z@Q}07@Ox{k=Q{ROq-rH1C71O30In74e0x%@w~R-4#@+e-)ZXAze2QB@M_m2*k?==9 zbTf~a8-TcNNJ$^#_T{#nDc;OorM{DRt%LO&#UCPYv3kws?L()vb&)z`Gk{`oFB8S( znJ(VX>CX{(ft(B$ol0Hvee`MHteI?Qy5Byv_A2wS?>{hdWD#U$4RI=W5Qjg!nkBWp zihu3T^DVirE~ak;lWh;+*r%I3^2Op{Kz_zJ`!yuvwWD~)W&5mty{#OXS10>tjEWEb zH&Cm^xjUz{$Y1hd&Ka-wiGL!n*E4KO2gctWBY#0vXMxPI3qHk7dyS7zccxwCGR1v! zFe-a%AUhR&3Cp=sL8nR+XCwR9(ru^G{#<%~QXLP@w)bhC{eY&gMSgG5=Ie4<|JoD- z(w6=Y^ZTteW6w2ch8_~ZeWdNUOUr7yon5M^QjX!uOneH^KTEbbM+BO(yR~+wM!l~B zy)&GaTe*kMkfjqsrP@P>_t~{>sFYt}30yn4_75qF4Nx4p*1ywFS3X55bEZeMPJYu? zuz;Q_vwLXmB&TIzNw4n|ItdCBaQAQ2I=&o#p||o4Y#aFTW(&SGv$ZE{zjr4_Vgd70 z6Smq0|9}Rs`e(@Yg~rsU;f4qo#V|z`#$XX9xBj!8`yFN zuc->_+oYI#j^;J>$K4#dV`ccWyHUWR@S~H02p@q)QPyQSpZ^4n_u19=nImr_96t>I z^C>d9bINP_x52fzP7_^#$|25KNADEVUt;Opm0I1iE&NwqrsOXs3xcI({-Uf@QF11@57@C`E8&hHA zRFi}+1%!IbP9!UKH8a!?yQ2USONnL{hz9v4G(Ujg->9942Sb9H&z#-mzMcp9(5_cM z+hPYr7l!aOkJlng;Gs$`9H`sHjA}dcX0$!Snb9Z1L6*y%(@jh2kZbT}K4haGv7cwVoUd=hzK_tTc}nEP^l&lJ1vLQQ#uYfQ+!(e1 z4!cA3tpkXnwC+gT3@~vOQ-=Q9g7>khN@Km8mCN1k6UWoT!M_pvmXv=<3?&J}-cV4r zmJOjFh9ENdu%9nh^ef44tEqBTXqLACYM3}p+7+j3O8s-|G@Dx5!7gI>5}dX_?Ftnd z{CFNuX5lF+7GWv&;#LG$ckC>B4iB*!RiP9v-py*$KjfeTQxB*{MBSvRnEF3xZo~=> z=NbdQ13UGuOp7;FKpmVhgY=ct;az;tPd9M`@w37;b%{H3LJf<}f2p23FBL`-gbtSPP{xAC6EI0eIR8c?@-|Jm%qU!>O^6ov=%8D$RRfTjC#dVTJFBp&-3h;BKxqP6kzoD8|gv?R|f_w43kw zQ`@p2*^`}VEt9**Ow1v?*}NR5^XRlZGpTD&jO%-V%0jl=wGKd5jGfLiC1bnuG&1L@=i9;OZoxi&;bdXFR58Z4SOFSbxNgQO&j6r;q=`(8J0<|c#m zPK(`lc@68M+GaE=1{x_OBSF(yIF z8Zn<%mX;N#w$ZNQ;*?hPnL&zUJ*6vRO05{Q!9p($!*5}m5QKg}Vou4hyRt7W>I#Om zkMUCsE+y%XwJZx6XIkfgHTO!_2tSK*LdY+bL0=4`lar_SR@qMbWRQ{?iG7yAN5sbz zUlTVzDMc|sId1W>jJo}NF0dOmYpe{9;F@dP^V_51cv&dxYgGCU%YNFZ-wu1ZHLcC) zWDdAHu@K*d^5^uUPRijby?K}LX||JJpdSTYc$+{9XMEXmDiyB2%!r1KiVD#-jpC!| z*Z=dPDDbgVqPYVq`eng`?@?F8__0+J2&xz~L%!tZW3y6A2`!=bi%PDyQz3yf3b|tktCJU|BCI3<pXgL&)u?jXsOsNtVvifGG zLA;#K6lrV*B^+If&@b&|&wDXBhcUx`Wnme8MLjnojf@qeT2N9;IG~#~CSJe(k{L28 zns7Y% zCGVvUDDpatWgF>SO8~~0|sga{!@kmFu$mmo{kcaqgI_Wb(aDUd(akVax^uh$p6%gB;r+wT+o&nA7u~!5?JdaZ&dAG3Q@9@GX9)cIOGwh?%6Z z!+pp=cN2_?CV`2|d>0GMatpQ6V&-4kO*&Z;l2G|{qE|=6p*+*>VJwcRlM7(DZjF41 zWpRg>N`f#iUSdBtbmOy6y;UY($EnQA8yzwU#R?4T-`U-Yp*X@Fj%&w0F1VWL6zVDyWqXuGpA9k%IBH*!M{{&AQA03wk5u@~ z=V-fKvecdGnm^QUV%E!!fjx}q?;97UM0`tEpUsJu{)cfcQp;u;SXGrXaw?~onw5Z; z2o--Vv(Q|52!)j5d@2J`Zoc8L1p4~&yi2i1pM`IIM#YD`SMvp!`D%z<{fS4if*cbNuK0&g6u| z(NUzs!H4c|o&Xs8qs$@v25n$x-M04jrL)#rX1W_R@E3IAE+5vY2JaSKxhz%L8;aU) zmCzXf0(TGh9CTpeJPS)s{{#LFE8U`Q0J0F*asHI}FU_;C1v1&{uRoQog|(pqv{Q;8x_b?xATO z<6=%4ll;t&g2~_ZCw>#gt1ZKcSKrGx!yjQO%B$9L9wD?pPr`Uv!Dl7KhgpZ=4Gzwi zAUM$-C&@Wc7s(h@U7rw3H`Yh0F#guJLdB8vtiG^@VT4bqP1bUtkhRXLWHJbQ06CPI z!+}qPnhJ$!;_n;@@<)#lr{r}+zIveqH?nP|3ci$*P zzJLa76A15e0KJhzA%jWpF4v?_#+qa5v$9i#uMd!xCc?~zJSh2nZ=!xo3c7Om0;|bE zP@F@v&+}f|Ri<9%j|mz;G)%mLRbKKt%V1+<5l;u}3AT(4)eIxsi0AL2IIHyErvrh- znH!QJLkyHahJ!0e74Q=he%w6z1~Nerd}xy+*&7+5kVC2%6L`YiseIIDo*b^7qcZaa z#29?ehY7@jgHHx>InweJD{=v_Lw=tlk{~na7;*@~a%Fd-%i^3np(W-T9TlHrETIzD zaq@FW3I>d_%o$vfmne_(U07#>@o#3-h!i~gIz8%TOaA5tf`h+~2eDp$s?3@gV3eXC zWCO**$<-lM)WMWzowo=w%*0oc3{J{NIYO+pjvkfExDU)@y$PE+M302QJc}vt;NqvG zDKS^^Q_zvvyAG9)vu;MPKaBUpo(Y7@4BVX%MrZL$dReou*=~y4D?sYMQ?~6VJ-jq zTY7C8rEQx7txXY6(1GF!IyzKtB3cNOx`83o)^(J=f_c(6dX5f7#GqLAs}^b^XuyEg zO7I(!K!aS;h_mgJnGCp$clIhKO}`cev~O5v^clBqI%6hOs9ck%bRw=tjt`B<=ZTYGNW7WS2}-qi~CYGqyIL6C+w3Z7)HW)&UN zj^Q50DXTZb**271{?ynE0t=t=sr8UR9FU=tZ>b)pw+iBf z?9fk|?j5cg(M(1Fm)v_4fb; zzBbo;6b|1*7+-iUt+1;P!6?EK3N~;V<|7hrGiWF5OQ?Cymk22ianG&@4SY6(4N=3Q zQ|xvqZPFhYWZxP17HrT(DEDP(ulh{S0vaC-@XawTqwE@v6D$T$3zHsVt!)}^Oe|BY z50GZ+-~JleBwRL#(B6dKuG-MAIau!t#&@%pzZ$67Yf!w^H2i76blL@470K6uhD%SFs^hs!`HN=FtB_- za7M#pa({0Qoh+a0b|wilLn<_no}~q?tz$mO@<$ZOU8w*Cy*b-)TETUp#4}s9KfP&D ztB|2T4Ox{_J`~Qlrs^?&$hZR`q<2NU9kOwupQ9orv*E9x*6cQT?k=nUyAbnoK^}U= zkiZfcU6P47mQvY+cx*AfIdQzLP(8h^~>yb#81^9P?o&<~SqRWP8;G(d^`Pa~0 zw8H+&%>y?Yn@owFF(xgu>cfQ&E8*V@PBOw4-ryF6;73Xk?40;h1y|Ui2lyRl;zyQ; zJ{lOJ>x7DjBh>T32m*mfZTL`_?+;8U)t05R7T6b&oub+E04gpI6tNHy`$B>}{$tzzMVl-Wi#+s$Xyvmy z8?$)pn$#{UNkFqYJgqd{ousaNuCxpCSgS6R1Mq$lmB-@@m$m8+mealB?y)?#fYuJ5 z4!{cT{z=JdqIIm++f51IFnl;CCa)B)3zK*_oDJMEE~D>N3y5y(#QF zN{n*(k5N}A)nRE;_`lc0zO*8Gdg-+~10#r%!Ph_`LRE>dz3`h}LmutqiR!`>Id#XL zH$*JM0}s7&<3kbbLn66i8*$WG;F_*TyBJVd4q>g7 z+B|gEQrWx5yZ$^u=l<3eEK4ZtOw8;;*M7@5Jad9>h~6>YL(ylvT~E#R`e-4~cWld3 zw6kl>gUv0!)gi*@-}F{Rya7-YlXdq^0Qxz*2V&ZbT5I_F$uKs#G@wd{jxCpJI(vRm zIhbFgK&_~ncJ~&%nx6x5EUDJS*ns)&z%CaB$(O^2GS4-`8qznj#_mF!cQDs(S6|*5 zz6a~AEL7Up6{wv>UJ3*v_ol{VpgR|I84$P5)G>0>hv1RXi>>XQv#r6{S2yFpG?KN6 z>9JGQSJIu0$nWtH(N`Grqq^`?KlnY>@#UHE8A8yvCD!fyz`bWKT>#w5_4v{Co~`9) zm*eYMqpNnOZzabmgw}9dm+!U-xbq3ax0DuCAQqio|-BZqhx* z2?MFj90$ty)yViho#Z=KG<<6h6#l6$(3Jn(e`u~zj`=)xQ1DBb&tbU~Op1IDm%q&ZT6uC+{2f$wbfI+C&|EVU*7{jnuuMwcpJzI$KZ ztuy}$7~!%KT=74Ur8K;3EXnvJL$Zh_bLqw77#j40e0i?OeRT8fGh-C&>2J0W3;@w7 zJTzqCXL!HYDedsYsy=BrGVr?!r9Q*zI8zij*KN-)?0ZjdMoVd92A1@f{9y$CcJ$H{tX#YH z^fPG0@?x9q7ZBzJ0Y;FElK&hM1&sWZ5Raf58=@j3Z51U4Oev7gG;qsIa45>sD6!3{ zQ7JB|(5$QrZ|ZF6{?gml-!U-MO)}i)Z8%WkXl6PzwRIihS* zu(&4WbS|xQDK>s~fAM(re0$@M<5bz|>lgsQ9f-{@$lGdpKWa8DW=gd%3cHfeEC6In zkG{!)E9Z%YMQTvkg(swrC14)MlWQ*?NvF}M`xMWUhcO0(SfPwC!4S#tlR=v?;d-K_L-5SN*#W%uUT+JJDHyspPHM_eL%L4t9`#~G3 zBa=E3mH)-{Y@uASa_5Fx@ledO;kVsJ#Od|MP-2%s#Do0ANO$bXYUjJ}+x_ueK z>$ZpGd7@VCtJB{AGE>H_7d}Q*i75D3o|C7^20<9IG$#=_Wm=?O=oxON_~(S^gMPP8 zyg9*Hc6^lTr?~SbQ43nPdvWaQ(#mL~S?=)&n7g|go(q_~GR|-a^qbVrPcTI(c3idj z0+PtLdtl*)S!jwd_%%4I1byrBLz56cH%-MUBmXQP+89c+zH1i`L> zKN`;o%rCVn(%_+37zF)iFG@OqRTY zLXba~MYXB3%*PgYZr-N4r8s5omZ)(=o7B*g!Ohi}Dtc*j9~$uIf0-<)XA(f7Yt@wt zf76d%skre<&o8Th0qC+q4zacADbk~n>iNqrRr;@~d+n>z^p0$>H7TsYy>f$*YX8##2J{s!7W zW0e`Zx~N~OzNt*?#uWg82{Kaykin~i{B5?$E@G}5FDWsm3sMy)WnKkM7s})^3>m#- zmFj^v1hJFgFl!>0ny$c}+KFb_z0uQi!_79lHG}j>nIl@^_4nhB!fYqqsf#Sr&jpWs zby(G?2k~LiIT<-uDlwDYt1+(2Ld8C|Xqoro7;v(VkkWf|>%K8#k?Zoybxpsb4-HVF z@Er8oV=-WzFZad(wJLG10dI(J-jhj%;C-wg-M6#d>WE-{ojvZ1J(XP{a9QbS_yBxV zkPk$DOsOpRbJ5zb@!hUw!Q#ijz$)#Zzw2C%J-#5A75dj93UFs+Ogc{rat7D7OJCxki!P)J+4zj6q~-7|?QFBIw=0P;_R-@V0j%*rQ4uAw%Kg ze#1Ou&4_`LDWM3^B&|JF`L5 zSw4VXI}%56xfe_Ln8juY&jG3_BI?%_!K`G7aqEOf%ej%FD^iQoo}fg~p2?_ZNI=tH zC`Jm@5v_bmHoqM+MM~A^kYH@^5|FAy)jbfAKuiC`!(>UwrI$v_W*+0+WQhUV&zsWN zGGj!sfExTTBE$a~H8{3V>-{Y*CTALEiuG@ubBCNM-r%EzX2^U-Cj=!`JWmRxk4rS? z-4U~xwFrMsOH3vHDDAe9yfHqDbb{Ft2~D=t76WQzl9}1n{AspoP*sXEND0Xx&#dWa zD}h^?C0pSAv~r7Z&XQkojn3}~&2E;kmY+M=kl-L8*nY{7f%5;40L)O?&?1dic7`Jp#^)o=NeVin?fn99J)rW<^eL$qtzTPe$~9Z)u6Z{y3yyQULfG7`weT)8O0`7wnb48@+a~q&xbb`x;)H zc=o-wGX>uF7=pB7_Ja3?`w;Ne2`$249h*Ca5_}pBqiPMASq%`pe#6&>Ge*POcO4J> zz%xRMT<<4?Vu}9lXM&Q6-Hv8)k49@33D1N%#8%-PZ*RAQdCHB%LOB7yd?$(6L)p$t z>5{xVdYJrUZ}gDEB{l!^i0!SD!JJu)34$J>WgU7__k=Yq{m0RrhxW9o!##Xl>_)3m zhOJuF!^98q5{_6*Tpdc+{OhYNrcmz=&lA_e`*-t(YHc*=_ec;hu=2zO47eC(H)=!y zv#|M%xzq}Fs>iz1Um7|~xrD{pUwIRAB~LRBh#XGTFxCo{Ix7r4>=lkZHdk*L{*yrk09*YRgQ|b8$xDtg zckaJ2s2aEa7lSG|gb^|{BJzKr^3yXiv$At?^YRM{i;7E1%gQS%tEy{i>*^aCo0`2) zrRiHbI=i}ie)RVB4-Ec`K^2TWHaRstGdnlGu((8xyS(;48C2%sC+8QJSJyYUclZA= zs3_oHe!uTvnz!+uy?n)PF%Hv!LZH#|KRf72mvjU>L&&A1NRd#{G%=_8t zYExnY6#iF*?+QS`d4>Uw>vosT5S+-t)x+puT>D*N_SezF$-F3BqJsa?)y4XE!MRz2 zgO{5K8iivMx*9~_W3m}X8eKsh;1MNQ9nfMGRF%-!Sb!u_8$a7O+vCQ`pY_=%y3rXM8@`r*O%@2to zHYw&ujyWq4xSBXCm1c)MFO#K~IWK3{iaD>K;hsFNc7T-dgBVNTKK&kDj*wJbWo*#g@u zCALnA2W(>PvzG(-&f5=4a?H9m3Sw`n_8Vf)T5fb|9ezA4UfT4$Jiszlw8UK6_bL2^ zZ%TPX{B~Ukm7B|q>&QZVH}oCzn{&>QLf!2TOte_%(J_ZdGMFgmsrv%3D`p1g` zTz{UvbZgCwh%Pa7>#Tqj1ZRaFfb&YG_y?Fyqf0`@2 zuk#i*9G=xYj`~~zvJpRgL+2FsF9rLy>-GVv)V{aJD~NuF!&6bd_ho+)_&xKO`gv|= zzZ3n5o>U~#e~gkaxV~T29QA)qR!0hO8A@c@eT9t_Bz`~PgYy4q<3s#@|48>I;LmY% zV!!?REfV1e>!N<+&1wJ5Sz}QBIT2Vh_yA-KEJ7k z$2b-0S51-)eFEyCR5tq}O87&MDbndW5AI*+1RuX>0&pA*T2xe)ApRp6)avoHZ!O6+ zpk(Cr<71L63+i!sX3~V!(q&D}sj7A4)cYwD${}H?75FhEs=tMlTOR1j{f;G+Xk-iP zP!%1_H0W)=aKR6Yq+j(83W7A#wQsDN0Z(%*v0X_U z@?Em&1Hjk`paiUV{#MT?xV08{1Y7Q3sFC_bn z6;QgzNG*^lsMoWXFH_UVVUW&ePcBrbc+)5pk}T!lgq8}rM=OMO#}%VKV+#n-3IuIZ zhTu+B$xuM4mD0wQsbC0F_g*Mgyi>=NDAYD2Q)`KMX^;*S4(S%lX$z zuFB+RRLC|6Inx=8pse-Ugf#@1LmGkC!u6tZmT3#rDUH;ur*dLaMflTmPQp=DBHA{k z5I|b6;l+%*XyE$)p%>-in%ei*}cHZcV$-*1E3hW0oA zzOF*HGvbBm94w<|4yzvAgB>m&!t@vpW&4c&bXgY${&8Ysraxe}>-?E>=afC<+k#xm z-N7_F7Hv9B=)TxVKz^g*cba;L7il~ym=P8hYNv;V_8Ut;kQFPa?nt7lb3!~IBSbje zj9NE%LPOzaYHOSsnWg>M=_6~VdGIj{lF7J5LTnZZhdH-84u?I;@S&R8$=N_Fn39nY zJiZY>UL}rjoUZE~#C0KPTK#MqNzg6;pF}kCdPb1sS5O(1ytVlEocUWEp>l>l9AZ=w zOKCfJr6gtNvcRq%S(I}Xnll#~uH8sJ8OfE<;K4du@2j*?K@FZWw%PGIf*pvQ5H2&9 zCLg>j8z`I&s!DdIhNQ%rqMROS_O>Qmx@)Yt?M7Alwzh^J>kCgP9g#Cvwx%EENvji` zz1vr&MAqBKoSuMkeFCr2fnTQ<8;!fBw`hBOU^h2tU{C=;A(iyo^1=g4ZTh(3Z1%gA z5h%T64I9yhHna97+#}Z@_wn$n2ZU5Aaf>Ke(E4us@41SH&76a9BE{;xB?eH{c(OVs#RJNW-- z2Z!Vq-JFE|*Aa*>QruUki(j3hfCQ0|@dya2fg%5^)5MUxw$0eqogb%Q|2h>C1Qvvz z8hjp93j`Y^^gnbQIWIXmAGwq|B_*$bpsKKtk`%f6f0JeZwF?o?JRx1%%YB&-1~j7n zN2+BKYJ+VFxZqfm^V zKh>CqbaG*`ZvJB_`!Y9LApSveAEe+=) zKRp67m`9qwF3`cfa1cZZ=MKu^c@i-eJm%S6D6$0gei*uj)qXg(Mb&=9S6miwKayDD zF$nW5+{(l(7r&Sgg{~lL(vK0B-6)Q|M1z#-bES&R_yu916!-3$`Y365Q0gf8Kl8GV zQk5iVj?>gMtSRJ#O%@K)^>*6!zJdofj0BB_##Kp}V`gyOA71q(cypP((yJ1OXN0U0`hYzIQ#}bARve`~1Uy z9Gt~k>pHIUI^sO*nP#~EY((qz5@RjfpVWFSCo4SpNklN8(9KX; zn-ahLNG;Z=^h9$C{Ji9R7L>x&K%wC%q3BT5;@ra0jneYQjg7MEKGx0h3JitKisseQ zvPfGUiSz|pIZ8t8sZf-X%1+wil zuO!~vdAzoof5uFjUbtC#DVmgay=sE`^A5%I%d#rUZJlm*;*UFQ)%f|T9B)$EXbAsw-8V;?L#e9U>{q5ZS?^eyQr^;R8DN^Ohn z4>N{ASC3{*lWdRF#Iw#D(GIcl5MOS(%+@az+-5s>|6N7dbH#kGfq9Qh8~11QK-4F% zgPAH%mc#jXPToYzaeQ1cp|(YN9)D%<5dXjfJU?y zRbP&3bjQ9NF9nUozr7XB(Gi!1HSzJIS?;KJ%Boas8{tl8=j#pYDf_dpr^mZzXXo>> za9+0~QS8Cd(}ND<_gW#DFn1xEyN#G@2+U9B-g4S^8AvU=Koa&iR9o5TahEO~ z+7D3;&m}G@PQ@<`4#o4$hSc;w;duEvNM@Xdp?pnd*$W?LrbN#bU);ynvLE3PZXzS;BS2g~M9>f^ZEk<(_`Os|P7+%~0MV`4MZKgVfpKLcSMo6h7GUT+co&6evnk zx}2^~xJdQxwsuIMbE#A8GcRCVmi(9pE_>$DaFN(%{SY&iQ`UVX^GVPra$`bgt}`lW z!7`WeR^CZ$RNG={CWVPmox@y?ZYEj&K{dRBI-kp;iUN-dCZbd0vEGVUKo=gUr&k|f zpRwDPC|LmWvgQs81x89#&Sq{hL!FCY1kCRw$s2>gx7coc>5(*W)hraL$CkC-z*J;? zUaIqi%_B`Y)y0JqhZnz0T$M57ryTg=9)=KU6qGlE-E!1W9Z_LpA&k~8)Ky)-{nX%|dymm7A5-%pvhgEb z{JzMpn%;uTmT^N1t3t<*$ANKK?KLmfD^W0d=W|_}!g3}&BpVhOP^||*FZU$v92#{sVi&a~|CP`sz%gEmCm ziA}?AIntDe?&3O`-f8ov410{vC02LMyWCtc`7th%ofCt{77E|c$5Hpuy3AvC9L|FW z{^_AOL}YswhAU0ue6Etw^`BXos6Hus%Q{yQi?1u_>L6ju!_mZO);OK#>XUFAq|U}Q zQ2hegJvOBl+Z#HHLd5l>E){tA;RM8YX0SjF8eIy`|UqQ37a;D*K@t zuTjayn){p(j#TcaZv^07*wUk5;%LyqS7Pv_LVa#B9Xpu)8W>FFu*>X2^HOr7X%u<% z!1puNYqZ9it zLCdW0&S7kt9(oNQc+h3Z*2&IeThUOuwIuMqEWCA9tNUYQX~%BaXVFcGR~|F%D(=-c zjkbcvBwmboUuQ^G*e$T;?Ft-sg(iQ(bVX%;_2G*f0$G0(M&|Xp({8_qDRceGBcV4D z<1{Q#OK=Jj!e^o96I1c_NDst=9E9WpQ13u3E+&3k7Iq8y zjI93r+;VXm1I{hqPGgp(l{WuKoC7tp4Sx2v$3GG0e;D5Iy=MMP;=J~Jc*7rw^QZj- z--&Z;%!#Sz(|;h&SAm-OSK|CnYG!mI*8dnWdrq96{b0^xN9tpN=?%XX&GL2smN@@b zGtU4)^H5-TgH24F`DCg7P-DeBP%{r^C^l7|4{!J}V-~2Hm71#o;+%->?r?L>dCjbt zsr0z^?NBn$y_dsxbpEqu-kdof-k{vtxIN$OwE6P4nz^lc|IK;LY)5hR;N5th;*Xm7 z$B5aUuq!~#3=D6WEHfDEX#ae?_hu;TW@pEj&%5bwUX68jo&gmLD)SN?LTb6>gU(pI zqc>YqV+~e@kPxXcx?Ht zW(I~gT-3~)m2F2Gn^g!@wyo-m5wrb_Wm~n+k=h5h>c(Z+w(F;~?rk^B{#nsnI3HBE z(ReXqmTkA~aQfbE`^jqAF3+M+Js>&E^=&1_M=-*+**fhLH( zmI@=v=KTP3QTh8p_NJ}(L!3|94~BVX&S%V?*UZl7O9x}(S)7P*=}Q^h<1j25=Lw}N z8HZzvJj%`kmu}!RV5n0@)IJxJ%V?O?^1OO|_GZ}P;j~^_#fJeswg{JLskn^#IccUJ z91*~1&;qMo4djCaLO!#s{`V{0Gc@lviR{Oi7GR~%#!#h=S?bXK7}Ihtk)2kR?|wdm z`}{Ud`k_~NR5bKn%*E;WVx>DoX6A&)<^Gh&T(T=`9P?{`tn|X_c7#@aSMQU)i0VPRFiWNZ3jC!0GsW zrMpYfNLiy?xfmub4l#ez$V&CB{GoB*@bULl**PcDGV+aC`Tf8A z#)&|F$G?e+-T~-^|KQ(#rRYROb^h!lzj99h?t1}>P6Ocmh|hUHF)=M^=?kVOduSae zD?Coi({VcOxQh4!^-<4Rp~iD?3y&o@d2*n%3*U(5l>H|p$vwgvqw?e@RB1p(Ua`HNYMDNQ>2bAHf&V+;E6 zVt&(Z`7J5Cul_&Vg1*fU`gIH1NlcNno?9Ghs(RH4|A#H;&uE*?nW}x%39P@~f-Y#A zKi`5Lsq*2^t^CIpbaJry_gfIH`|20?OaC9d4X_0PW6uA13o;QQ`Q-3A3YZ`CXSB_q zZ$aKDFM6Ua8~^1N#J6E7X#F0snisG2w_DIp+J;f4r6<3Bwe-)optJJqR0h<3z+GnK_>@u>>KF(-Z1jN2OUi!+Y86Y|GMtg&4*qLE&CO8{(apmYvTGR zT=75Ey?Bcc0IvAYLFZ5F-iNLuyZ-<>e;|ur2eGW6{R`0fS@%8&50+*8w{>p{O04z2 z1f8a8z%cSJ>fTp^gWtL0zpH!8Z>(2x`~o_EQTJ|4*!&0R{ITvG?rlN+Q_%UX?mb2A zru$FODF%T!>#(lBN|ziFnJ+)U5IbWBxMF^81OPe@!AJn;@D9q$i6Wk<+{S5`f@$cx zOhRvmyG%3Md^sF2xKhzDd;8JDqiHLX_QvO?Nneg;8Iwd^W{r6k8>g_7FH64k7^4yg zT?G!i=VB-_2>DwnqKF&}oPaMRDt`WR@eX`89C@yq=6x49KjQ^1!xC3R3O5EDcd(wm zSDHDBc=u`a_$wYZW>9bLey|d2(s1DcMubAqROyG%5$mRf%400tu%|1vAH!A3X0{qX z<3tU;J8bz9IktIx+Hr)Sqz z$f#%^S=|1DL(L(ka@Wo~GPAN{^ySW1+$+~^+%&L%6qQxgIreJz439G#;RC^<5DDhY z=?=iA6!Jpn%IysyX47d4=F01fIHMBwI7R2q?^hU?O%(~@E*MN;*KP5_;3*tV;k`H4 z7Q$0Bnjzx(=@f&vcsxfsj6yV&x8zxYQku|1%Sepv=TBd-1ge+1{IMv-!UbxUpM+Bidt(dM zt_;Mp>2`z*)~$}DlcaBB3)QbpmS z1{(!Z*!3F)QG25s2h&B8X*_~v1{;U6R`wf*ade=YgmaI=Od|MR2Af0*?ev>OiG4*k zjh4ifH;s{{4l#}0PAN8xQxU^3i&s~XH%rjE8)BBIV>e)ybk`fhJlQx>-aN%TGsHaA zx^logEsSg3JpKNtyhVoV%Mgo9kDURFEbp%vmf60z3YIy6)S;HSp&Wyjd68nDuB1n+ zC|DIF-VL=XOtl-dD$4Z6v@Xt#RIn~7%nY?IEv+21F01UoETfCuH{3hTW8&$M#KYAHv-|=Z@$iDOIS1bnv7*ENe3-wC4LpP>9>TWmg z4Q$6=!kbEtPe={I9s4NkhaI0%Kf=D>PZyGy7L_J70FWPwmBfrfVqKtRB0Yd{z-v#3~TgC@;UAOHI z&ke)&KFrd@i-M-jvp@(Cpke=9?&tOhJP;P>e7OT>4uNmWohUvkCv61xOvoS$ zHgqzYJ9bEZU4o4qr89sBW3ilQt-IcP?27-7`wjfI_FyPr^CbtqBp&z@Q$bww($KyQ zLS}i8uS7iu=T_P4H!SEziLJ_-1O!|`$eB>VxRDY+S@}-&_o3|sSDw-*C5T3tO(H?6 zMa~TUj$YiGeNrV=Zr|UENo~pFdY=`Hd(V_kSXV6&7jAKrX+r%(3po62Z-`kibJ>2ICNM|owQ&*eR#fhju+on&uWj- z^+AZXHTK83XB4vo_{#JG6tSqAT;NG65DplMhbOFh74BmtB@hb2=23BGcg4XGWr1Dw zWCvx8ln%-HOx5AW;);d?+e?&I}M#KR>zvd0CLH!VQ5?deqps*az`W@D!`C0RPMk zHq_)hvISD{#U;5nQY)mgvufCw^I3U90ONIQSx^cD8-%Sv=$qo3L&q%(rmdzy~yxJG(d(7VD9cOy5QKpnhT~u6!n5 zdVeJ*8jc;6f4{hxxyLl%4if zjH?p*cTfPH{VniS5Etu?NByGFQ*1&CXIaT7}^{#s{Rq;%?bo@LZF&7S0JP;8P zVNeLWCp}*9<2{|!#j}XJFiO5nh z0=c4E(SE%QY`lc@dZH%AV^{HThzp;KiyGPKTqSgr>Bbvf=9<>v7UILjm!H%2s(V?) zXoZXWdTexeb=u&=#@05?{>f2AR;SBJwjjKr-Q7($GNel1dp0GE*y9__Gzc=+B~ zi3VT;#clI3iSP2#X6Gd*aNe}@lXr?w<-K0^eKlV!lB?irAo+_$a{dZJv+)&5Ds9+s z?S?5Jwlnwd;`S~bi|G#;(o;lrC)*F0GRils*@k-VxGT~eCHX}}E>%wmS*MN+^wS$B zgV5wE%7$LX*INAgGa+8wg)4t%)u%nak%oxHQ1W;3024C^3ByQVO!`6|_P1bE+7W zCLodScTawxT6|S~MUx){ekyt6&i2->;C15zX}g6@i;v0$SCR2n--1ggk=`vP`su)X z9rmI!d$ffN*V44Z0+0ipA=XO9oH?z2+#KBL{L0~%LqAFyhH64b;j9>MRXnz4RSNtJ zAzGqpb$}KP%tCPIlYbns`RKod>jMg?)038r(j+$->xghTG(U+xr$ReuJJM#59$Cqbe?YHDo# zWCxzt9q{K$;jOxBWp7I$YkiYfCxq4Bg-%1nRZrYnD%_Vv?j{|f0@Q-V3gnH?7J;ly zh^H%FnwM=8g`CY!2o~mj9L(XYsbOe=e05An;%B~#Q=>{_DD-JE5{&09mFsJ_qD4c?pE?C+f zBeSRpoWc2VXFxkI@G7j|dp=LhwNZN_3>isHzGeLe$%I zs8P%Y`iTz7il~sZjPxv!8`L7-A~3eNq(s3hDIvK^Fe|gZE>NW4v1e&pDWiZ#r4O{R zp^sa%|8bLeDM5Sj@O2OW8+gP-gu{xSxpPnbxjk+ZFk#~nVb7y_5WR@ai79PTvQ$LI znZqM=no>)nhroNx@RBHK-!me)8|F)NYtCaoK^mt4ce=>W@v<_8XrxGRB!_>lvA`>e zEcptveM7JoTWHKFdVLSZa+}Ih07<~1pN@QhkIQ6ZL0*L8)&r;t{*}5-}D(Rjcp+062V>CiqhhwJR>$&;~ zw0x?4Ez)3uP)`G79}wu^2!cT&DyX`*-96*Hf>lLAk+}fKk_4&fS_kFd(-sPa@X&?P z;fWQC#@9X2ek3W*%?K{9@Gr=(X%waxigK+<7>x4{x3ud-1T`u>cebt_8k(}SdiLy& zYxH#NT)pYSqPpFyd^6|i>eYk9bpXW!y4h6JmRAnz7ahjOlql|e#KeInGt<<;*r{N8 z2@E+bbc9TNB1P}yWs%yJ@exJ#SvbDf%y@iM@+?DG=-7kIB9?V)Rbmw_eJAf>*nJ#7fcf;|NDWwt|4xru6&+RH{h{xs6viO7D3m- z!!kmnv&G``ViQx619UUX(jkI5(fPFxONtt;n9EzTs&nevc zO?%P~R50D4NfX}FPO*11oMdFB^USyLWI5po2ii`ON}VovG}jLu9H;<%z|tVb3xp{7 z<$h!WF|osi)aKMz9@}G~64iZdeb|uvXNGG9-nCFC1v4=Nm2&QZMZ2nT4HuSN`u?%{8LpA`~{3dVzn2Y_*tOe`$o z)6%W|q8xH@@gtOD7;<5Pt16BMlaTr6XqW>EXL)i1{ zUvn7LY%~CevE}-ibo_JE&QiBe6=Q>Ed4W2=M=F4(Gd)^oOsu>xSLhWC8|wknyN4q&U)*25Kwt}&mpRpoP) z$7xHxPfbgj|1Ypr|NSTZldbyy$CLhRwo3RBuIT@et@?8M`7_tAY!!_@h#g?71h1ph zg79Sfm;8wpf+qv8bYQeW1Rm(L!MNtdMo1TDALhT|2MErYQAR+dZAStQ0Kgw0mkX#S z0KD9~P-|6$gj6mZ`XIohZ({@cefak5;z$1NUnpmW(2Hp9pE!)FQOGF%MrjE{F3NrI ztM8!AdkpX$T(iD#<)24$1#rWDapj-;4sPLLXZ$XjtBqAz^LGv-FHAPe(eJ*4xp`%X zzVE_!-@)3t;L-*V&F#V11ERS<9Y)1?Uoikz{!N50;5#sNayXCXR`G_zYI0@hiLRZy z@_oa@siZ=^)^Je!V}NL`ok$4~%?)5T7)*b0jS;Zrzk4w}P-pQtLkx)KdYFKKXl_h` z5)jR8EKvCw&8=JJE^R3L;V}9x@6N|x1{_8;4iVoRMoicHf6BY*Xsm$4$Z=Tt!eJD2 zi73IV0JH))jLNQ;|GB*T4-TVWenRv?R{5pk!wM<}msx z@BX#Ya+krHIG^!Xq2=r^97aFn-4u2#nYz6{cNqPryxU2?OLVC9o6_=k@~+6;E$Kdi z*7B3=KCKrQRestiZ`%2^S^eFX|9QLCsnY*l z^YPB-T?E>-)4kqH_NV*(OjW1vhxvC;560!LeL0-EeTDT>n=atWUvS$!cjaIEda{ya z|MlZqQPtN^TTQz_Ym=uplXm1yubq84c~|v|EB_-M9EqZu5=A5%e5n})2^#Ig;Xngn zf_2eQE%}lSXCv|Tci}z*A<9FC)ujCrZP?lOcrOqY zW`r%#FG-c@;3u?Tg!eF5l58hB=nefco|9!SJ+4}axJ@p89Qu<>gG<3MVgr&2GGul- znjZxy>A5&90vIuC{s^`gsj28QK7QpJqMFiD8h~64gZ%+=Z+&ZdP+xxrbUgraPJa)( zC}-IWe+srk@T_rSstd4%-Vw?I3VwwOovJB1*Xs_^E%VT3KHT}ihQjY)OT`y0&m67U zt7sg5%8gF|^(A$Cz#ByG$pvTD$M+(|#gB|nOkfD$AdIC;WAxTxkEDywbS-92ODZHt zp~Lp|_D!*N`rZctns<%Bk2!;Z5Cz)rT0jWz;Txyx;~Zk{A?U*=eBq6|FiJYVI9R|I z{`SehwdrNT`OO-ET0 z$Z0^LDdT{Y#0h`w;96T zr8Rj{!>rUu6P81Z>KWOsvd+%;Ry#9}eD$<~JL?&?isyRz)f8j|71p8bL%n4tcrMX3 zhoae=7S?$Y1KSVNK1^7}Fyj`}Xi5h>esJNX5e-AKpBZdY?YaqB494_yWV!RgS~eyJ ze+eDAG5(60UoSuC43hF9?h5@STFWlvU4dr?n0V1Wmuz_*Ez{iS*^|lPO>MVm0;dVFB_mu{LLcOwQvBf^)fNAMaxS6x`dfX+tgd9S|kvw*;pW8Vfh>@!CQOd z=)}3^-BFX!X;$mjC&oC)M2Bi@7$qJtrCb8IPnLuSR;$E88$)h+&js(L(;My&q!mlf@?$hSjfZ05 z%~anb;+EX^_i|>I3^cN~ar92RLzl?LXYyg+hP?aT{lT6UT4 z0JbmJQHY)ldL@C}mnQN55^O6!uBN-~d;{CFzXsd$2-Hs7KY*?M_XyM|FdHST7yLelSca_jeH}*b`Qr{ZQ@UT+${W z0_CwEW{90f_7v84#+|w!ZmE<Yh4hCePVrYcg@~DsdpNf6jkAh?8)1b-s zOH#a#4pz#iyEM=*`&$G`LFYXXfy!s(9~e;acpsOIUBE0SKd7GiKE7C~fc5skAmvKU z?;=pc1srYzLw7&DPeNc9at6r{8&e!4_bU~0Ck+gn3mv44hXVu3ev3dg4UEvX)ut_B z7YRI-AHAP?kiMo=Bs4QH>e_OUu^0X=0yTG#c>+YBjt9oPKOJO&aEisz6vlli4zm+a z86__bjt2@I=HN&Cj6ji%6ax{ciAayL!#oF3{x&uPa2#m6#7u28d0iQq;M;9u>M;FYVdib$A>aQ zoHFgF3e&ZzAIdG2%XDT2ryE(|vT-Ub#l;PsRShmcW$X zBT&OjsKP)5Dze&tGVK+H?nyV&wm{M4-*qUu160zON>$fEz=V`Gkz z{{K;r4b}f!9vhh8f6HT|t{D5j;HL)7`Tvfe`YYCgLYU`&$XdMeJ2(Yci~o_whI5O|I%agI4Rbq1HK1UboDT{TCjaKBV=s+R?xD*esuWY-sv6 zZ0eu=gU1GoqJFCb%l>aYHr4t&jKdB+f9tWa#7YXkKlnEuo8i|3;&{r=6S7w#oS!LN z8*!dgxq;&{rG8V{<++x@!!nSL{mAucTnC&+&|Q9fz8Oh5{iA6Up6JHud)LMrXYHBr zfpcJ!EkD@hovrx7ci#=#HxJDe5+)$>0v$vIZis4t3F2`a!nW`XlD{>g@YMh28Ic8m zfn64$Hz|;S{v;?HOEiSb;-QicQmutsw%DE?>P+vIzB_IEEK23T%>FgJE022s%8^l> z<{X{+2McZ$xDS%-L6@`Fw4iK1y8Yo~Ke2OjAFhgrXKC@HXPYq|5gP#!9^ozTWKXS! z={_l$8IN+a@^bQd{TPVAfTEKW`HdJdh^EH}6A@?@6?SF!6!aqc3cdP=#7h_m@xZN3 z7l9Om)(Yebg0`gYCp?3XgqNSbS>IesmA?J(Ege2y$Ki+07w3VLFh$$s8lu_AYzY?> z0%~^k{#RrmWE!D#n3~o%ZRR3b^4qU}A+n2~i-W%<@5C^-vtRk6vz)L|+>y@S>(6I! z^hN4QqCh8$du}2a8{bwx;0Hz3t7|;46hToJkOrGxHTY71`DFm zvk))ig_B{@&Yaa?2vpJZhsO$hW$R^Dzv5BuAU6DrHJ2C33$;2%z^5zZ)^eo`dN)(| zGhLMcQ2P^kUpSHQr+P_iY=S9GLW*{9KSs7XNI!sTzK@p`nx}t~5>s73q3=v(0!(mo?h!miDbpEd!;j5J(0b~iX?~$#s#oQXECk z@Rg$)ttVaW`-MP75c;q$xe$tMFeTFCnV{nrP0JMGNUI@MeleOzynX)0I($sLL9@Pt zDHFtOx?gWS*Cx~ymrQ2RX7Nu5?qwozBl0&kx4V`rAFDCx@SxyUUat{0=>Gc$T3Mz$ zh(e^hgpvt%#@^Bvwz@6+BPKXDby7(#W&~N6)SjnUkvi8-FnRkVnvB`i2fwwTQWw0B zgQN?SW5&>g1z~4da7e(*=@te9UG#{XP{r6|;B0bw<4^kZpBV+PK^pEtvmVi}S>F?g zpgN2(X}I*<$F_P)CYrs94#tnGa}qqyR@vX(C?D|bzGhC%-DFCRdauebRM*!WJzHVX z{>ZNcZb)KPlZ*0l(PPGX6Dt8KHNFH~yLQi^hqx(v53lpqL~jR)+g1%0)gyoxGyiUG zxiIE^0$|7dye$&YD)Jn5BHvmSvTsyYu{Jq~KCNdRH~ZEq@{oY;$?}fdfxLF?z#FSP zwX$Xl4F(b!#<_kIUt*aeWES`8d$=fp>e4j&tZ(EA^yD9+4}$T$VNNbKzK>j4h)m54 zZmQv^!yd64M5@71iDL2mO>~eA@Bnq50Gg*M=NjSxGqHg&B{;d(2jf|V6gv@gLU6>0 zoD;xp<()7>V{pkM-+|87&f5vdgrlC$#)MsBGdQ6hP!oucdW#Jc1RIkxVImW`W;3ie z-i%?C0pB_2g$ie^3rBR3le?0h$vC5o-~E=anv*8VS>?Pfs~EY>QQ=%+HkF14$P&FG zaZkYk`lqhj3B{OiW}&H^h%4mw+(jg*t7Df$wTWO7p|9dum+H|!vbNes}uug-rD`9(%_{Lp2{0#Y}gRF-;&_UKc z=Vu4ml!RN64KC{OQE@dtnnwi}_7(R22*Ni{e3z*#>*oF&Da1FWBGf?hr~!MV5CVEw zgusJxpn>dDNmH8h9J~~{LO8k)R2uz^SoCIW@__VA20nx9t=F#pUFZZfil(5Yc)-39 zp2*og=%O;3N4t|w6Tk}zAtE!J8;DlF8lTPpqf%}WX9~%;`+X3ev$it$?FzeOH!DH5 zA~|hyl91=`9T$PYeB+_zI?BK&; zFrj0SB)PElef?Ze$Ew~PWAuYbw^wt@q0S8ZYKk}CTvyC3fBjRY+H0MRy2B1dezwz% zl-=Jz;~zrEyux~|2L2_4HlFL5u02ySGzrxE0-UBN<;()g+$me8G$eC1E(F`;{z z{e|P%qM9VH`4ex|;hA}_Ir-akAoiGPhYbkrp$s!LdJU~UP?)V+pI-D=)mmb>Y=Qi0s-zaFmg9|> zWolxX`_qeH+kpTk;!oG7$RYn(!_VgkKM_Ff1uPm#MHY_5#YQg>u9zs?}M^fFOKJl&u^LjDl<)uvE+e zoZ+f&{s$pS_8I;K?GoAkn^@Nb8jt^3VmXeM2WuZ9uU_wz8R) zo^1|sA`xlP6LRaP>a>#sbSu3th?y~(9D_*R(sk&`llZ0xm|BBgC|H$v9S~f_+E1|p zg|GS}6XQ?78*#;#wx1D95%@H!vWs?2-MXo~`3y{hSOsBViGy0CnL&KSCdl}pSyTQt zT^8*4VT;(L?2_Wsbw3t)*Db5mQb=^2DX+YLDIDjC4+qZlOE9hlJyR*enbL*_*L}E0Dz} zH>wfnyw%R&Wbt0^UcN^196u`_#B6d>sjwFdG6h)xIp>c0{1Yax z+)LEWPDx*}jl>8(;W#(ebBRpgJH$H@X1z2;qkjJ`&}d!RY!6==I@sr!$J4jDquNs1 zh3iA;zqpqFuq(ly7AIvkd`1G{ zo5&5{&!*uE#4xf!^8-IdH-w8mL*>5`j2A9DUMDL`chjX`+=O$FoX{})k)oxAg7kQD z7x@M^3x;O++Q(7;lF5v-baK#%m6(SL0~2b%h=SI$l$_w~tM8RmOsJa1$ML7+3qQWg z((A4=eP0&tLc<7xAgWLf6`dt8#*w*4S!pHb3}qg z2Lnn`ETfrq0!^UdVdV%Dui$aV!dz1CZK7zD$k2I?6^E%wzlA|9qW?SQbjMvmDIgVW zg_A=nYsqS(O~&3x+EuaDj8ey*Kmt7^so=eXcxag~Mc&wZci?rY;_x%vWPmvp1G6iu z(kF1#teA1v8DQcn%;c7km`F?E=o0(CXewVZdTkh*TANhZ@l3923L+n9u0}hju3k&E zj;lCT!vAtvHOC7}%`?4$OU8VZWKZ>*NvgbOdwpBcXQGnw`u}vNAB9F zKnmrcO`W_RgzD``i>SiMB1ccq6%tPdWjbo(>aZo))ad7RcXqvE{I+#f#^t37qp0Ff z?}ZvD4qQbclM;E`7y5|UC^#5?UnaI#7_H$=nDr`DZk!nd6rd7fT}gblm4bh&6^RBg zr#>Y$RgxrnEC6%5p-lobk1{jTY``&Cl}v6`TIDvu9Q2PtpbihOQnV(sQtxR}FDF8P z$t{)IOM%ED(H1Yvvyp)o@n{0o5trVPkJ+jm%F1@Z1=5U>3CAZgzbwOHozf%i8uf+3 zu~cZLh)G;SILaA!HIkg|(&X5(I2vCy60>{ib5+9zWQu)jG;}ypm1{gb@!tB~u{or2 zb5Ns*xHTF?ak`$P5kI>9B{80m@L>g8*zJ3enNj!2+0lNmfT|TNXbzb$SR767G7_%z z9MY;QqMUMM`;KDuLX5c^L%vGnJk1r1svrCP9 z*L}@Czb5XAeatYvD=XzQmbM5&1L1;TH;s_MYoMkq1#1lFrD;-k=_eYM_HNf?-VpD) zp|T>Zv6kj07F@Lkgrk|mk3SROf=*J{rROE;+}C1~Yt*7Moj-MxEUN|uLl`*MaIq1~ zpx^^kt@bmdNGT7+wZh}+>$nc(w-+XEbV?PJMQ-92f1ZhS6{ha%a1@ZD-Nq$5F3{cH zEB>58tGO-?fvWoGK7D|s^G+NU{cIB#MuUv3jVKXZLKa=1LFuSi9VuejdrR%s zFIbJFyZd0D&>^w!k^$1Fli>mOxH}s69z)T!?zKjHEi9*-+rl?LuRp@`mJq+|VHg#^ zO9hvF>~odM&`JCb#kDUmp9s4-BHd3B9F34WSMMPa-}p!$0V*dK_t3S^`rMeCS?%e1{O^89gc7h_VWqW&;+D*-uyC0O{qdgXVC&KM26LYPfVEp>D` z+Y~j<9WAOEJ(|{Un}AC6wJ&WncOsNZA`V=Tpl!Cs#aqWMb-)u7%~P}%y0yY{4Lyuc ziuf##_VVs)?pp#}k_dmHe*d%v)!c(nVWi7DT;SeVfz((?l_R+(R|Hob&6qnoA0dxM zZNv;LOer_CgqHU@PnZb|o8FTCeHZBPjhKBmPfiyPm_bKUJgVCVydwZnApp5#N9~dY zN~;EzyA$sFP!Q4)jjRzDL2k+*M5TSAdAn72h$zg}BKO=WY+eVHH^&f>lVU$6yvrQ> z#V^{?DJH{F1?w&GHdh2F#gObh$QWc9QZ2dFPm5(H;BmrD*q~Pl(fed{DV9E-3?X{e zMDVUL|B2bZEs!G$p4m$DA0=mS|E)W$e!0IQ1iDjEU~ijthQMleXx^qL4K0`2`>Z1u{?=XFa<;HXQEUJ=7rG!8^X5uq0<21&7 zhQFj1F3dAl1hs!U)Xb+wszJ3^&{q z$d~=m+E7TMSgG=am>I+=(ppN`UYDdQ7}2ShaO6X7Q1Cm*dkQ%UMwBp}smBy?3KH<9 zpje;ebnZ#sD3*7lhnU0|k(jf;`$)-1t5E2#F!_m6CAgfj(5MWm_{>9Ldc(-PMpDXA zQAt+xi2&pA0smTyewMQ&)SR6>F}<{2u#ZmB=)M5Obme;rI-~dHH|ta5TZkSIGLmam z6s%PAqvP-jKv-FcdVRsnC)KRYl4i6uCdov-tPq^fjKpO|AL+$$=2Zn1$nAW2KJp~d zVo@^bUSTS$-CE9lX_QyXP)95*UuJdV@kgQ?PM3sz$^v-ux1J@|s+l?70wXOc-{XVG zW1*EiMPb~R`>1IuR%qgJ=VrH~8afHZ9m>*(B^5jwp4RJX1@MNF(uT7WCm9winh)|! zO8F||+Gv7|YW8fUT4^eqysA4>mk+0CMWzFLz$v5XS6o_~Y;%|+@l`b>n#06zvKTeH ziZ^03G`xTt^wBXzOsE={HPVP{8|6GM$i9`gcT-9Frcq53r&E(mtjV@?p)*~hNMdtk zYZKKbldT%NbM0ft&&|!70tqK3sRe3%_hXaN(maHT!w=(5o;0Yc#!oSX!o@WOno+S7 zAsq>rJ2|vrgOC}|@+r#p8N^MZXGz$EraS9x4?!*2WvrnA<|uw0{MH?YaHjQHpJTMn zNsw>GQu|SBr=cp#2h}V3Pg<68I!}f1T(uy}4QObm{0C{ymbo-%^3jwQvL>PdD8&U3 ztW&u5^ZYl_0kyX}c<9p%RXb2q+m(#FmDCZR3^CCdS#r8Mu06qx(Wbh?o9teEiOm!< zLI|_HtSGXy`v4xP0rD@(DVG}dD@%xIK8b)jg;hJMiuCk4r7_~ah`mhLrGVyxJFG)8 z{6v(*cI$&D4SL@l_CAFmtZuOFV|*Og^Wrc4h(}IYB%AFlk5+ zaAKQHbEbG;HfLD&|63$+iD3zB#EX zq=yPy%QzXEoh~~6Mm!=bb0Q;4h)LZjb6hXWNzy=LWq6v;*?jrQK?C}$VK@P^v856U zTOrA+SD#V(sI`|Z=m;VAZe%1{ff{&Ld4sG9#89D}*9UTUS#m!Ov+}V*h=uZ>Fw^2t zYUCRCBiibh#SIH$gRgR5QI*E@#*}$fD&IGE&KmXzULHZom9;|RsjZvE!zT z4;N=M7U$X*7b-AMJUd=3E-rt;pR`?g^YA4O?ey#P(ZjdK8Qq?H4{4vT2EUGYdGrvS zn;f;v8vXy!c2Cijwh8~|lT>Wmwr$(CZQHhORFaBqyJ9C5+ja$&J$btO?e6FQ&YF{% zIoZeiO-_kCU8&ygSW%b%Sn#$3_*pE0@6=XjRYZp&A>17>l{066>s8`xcBdWdK_ zxIb}tDEWIV9biMyFlfC#!*V-jxU}%_15n%ByPK|G&I;`(H2l?^{q3G#xH+Bv!FK9C zd;S48m;v|p!3Co^KmMUG|DmWnyjCVum?WgQWDjpsh^D8uy#Ar`Cq#0$xGN`>T_?Kx zqV)X0(aO+<3jVROH6Yl}M((vM0;w zOzON~Hu!P42O1XIBl!(T zo>F)}M=YhsBeZ9@)Zj6KP155nyEdIfG|x~PdQXWcr-nD70aC;m%dwOTwpmhxxO*i8 z`jq_AqQui@;}eyuB|oa0V963-D?gD;53&Rbz003F2&MaVT=W#|2d^4?^P4{%8SUW; zRp*;>ML

  • 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�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/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 literal 0 HcmV?d00001 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4f1927b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3.8' + +services: + app: + container_name: wwebjs_api + # build: . + image: avoylenko/wwebjs-api:latest # Pull the image from Docker Hub + restart: always + ports: + - "3000:3000" + environment: + # - API_KEY=your_global_api_key_here # OPTIONAL + - BASE_WEBHOOK_URL=http://localhost:3000/localCallbackExample + - ENABLE_LOCAL_CALLBACK_EXAMPLE=TRUE # OPTIONAL, NOT RECOMMENDED FOR PRODUCTION + - MAX_ATTACHMENT_SIZE=5000000 # IN BYTES + - SET_MESSAGES_AS_SEEN=TRUE # WILL MARK THE MESSAGES AS READ AUTOMATICALLY + # ALL CALLBACKS: auth_failure|authenticated|call|change_state|disconnected|group_join|group_leave|group_update|loading_screen|media_uploaded|message|message_ack|message_create|message_reaction|message_revoke_everyone|qr|ready|contact_changed + - DISABLED_CALLBACKS=message_ack|message_reaction # PREVENT SENDING CERTAIN TYPES OF CALLBACKS BACK TO THE WEBHOOK + - ENABLE_SWAGGER_ENDPOINT=TRUE # OPTIONAL, ENABLES THE /api-docs ENDPOINT + # - RATE_LIMIT_MAX=1000 # OPTIONAL, THE MAXIUM NUMBER OF CONNECTIONS TO ALLOW PER TIME FRAME + # - RATE_LIMIT_WINDOW_MS=1000 # OPTIONAL, TIME FRAME FOR WHICH REQUESTS ARE CHECKED IN MS + # - WEB_VERSION='2.2328.5' # OPTIONAL, THE VERSION OF WHATSAPP WEB TO USE + # - WEB_VERSION_CACHE_TYPE=none # OPTIONAL, DETERMINES WHERE TO GET THE WHATSAPP WEB VERSION(local, remote or none), DEFAULT 'none' + # - RECOVER_SESSIONS=TRUE # OPTIONAL, SHOULD WE RECOVER THE SESSION IN CASE OF PAGE FAILURES + volumes: + - ./sessions:/usr/src/app/sessions # Mount the local ./sessions/ folder to the container's /usr/src/app/sessions folder diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0eb1c7d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8282 @@ +{ + "name": "wwebjs-api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wwebjs-api", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "axios": "^1.7.8", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "express-rate-limit": "^7.4.1", + "qr-image": "^3.2.0", + "qrcode-terminal": "^0.12.0", + "swagger-ui-express": "^5.0.1", + "whatsapp-web.js": "^1.26.0" + }, + "devDependencies": { + "eslint": "^8.38.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-promise": "^6.1.1", + "jest": "^29.5.0", + "supertest": "^6.3.3", + "swagger-autogen": "^2.23.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pedroslopez/moduleraid": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@pedroslopez/moduleraid/-/moduleraid-5.0.2.tgz", + "integrity": "sha512-wtnBAETBVYZ9GvcbgdswRVSLkFkYAGv1KzwBBTeRXvGT9sb9cPllOgFFWXCn9PyARQ0H+Ijz6mmoRrGateUDxQ==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "optional": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "optional": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "optional": true + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "optional": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT", + "optional": true + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "optional": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "optional": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT", + "optional": true + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "optional": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1045489", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1045489.tgz", + "integrity": "sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==", + "license": "BSD-3-Clause" + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "optional": true + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "optional": true + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.66", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz", + "integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-n": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", + "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-rate-limit": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.4.1.tgz", + "integrity": "sha512-KS3efpnpIDVIXopMc65EMbWbUht7qvTCdtCR2dD/IZmi9MIkopYESwyRqLgv8Pfu589+KqDqOdzJWW7AHoACeg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "4 || 5 || ^5.0.0-beta.1" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fluent-ffmpeg": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fluent-ffmpeg/-/fluent-ffmpeg-2.1.2.tgz", + "integrity": "sha512-IZTB4kq5GK0DPp7sGQ0q/BWurGHffRtQQwVkiqDgeO6wYJLLV5ZhgNOQ65loZxxuPMKZKZcICCUnaGtlxBiR0Q==", + "license": "MIT", + "dependencies": { + "async": ">=0.2.9", + "which": "^1.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fluent-ffmpeg/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "optional": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "optional": true + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "optional": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC", + "optional": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT", + "optional": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-webpmux": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/node-webpmux/-/node-webpmux-3.1.7.tgz", + "integrity": "sha512-ySkL4lBCto86OyQ0blAGzylWSECcn5I0lM3bYEhe75T8Zxt/BFUMHa8ktUguR7zwXNdS/Hms31VfSsYKN1383g==", + "license": "ISC" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT", + "optional": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-18.2.1.tgz", + "integrity": "sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==", + "deprecated": "< 22.8.2 is no longer supported", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "18.2.1" + }, + "engines": { + "node": ">=14.1.0" + } + }, + "node_modules/puppeteer-core": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-18.2.1.tgz", + "integrity": "sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==", + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1045489", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.9.0" + }, + "engines": { + "node": ">=14.1.0" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qr-image": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/qr-image/-/qr-image-3.2.0.tgz", + "integrity": "sha512-rXKDS5Sx3YipVsqmlMJsJsk6jXylEpiHRC2+nJy66fxA5ExYyGa4PqwteW69SaVmAb2OQ18HbYriT7cGQMbduw==", + "license": "MIT" + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT", + "optional": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-autogen": { + "version": "2.23.7", + "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.7.tgz", + "integrity": "sha512-vr7uRmuV0DCxWc0wokLJAwX3GwQFJ0jwN+AWk0hKxre2EZwusnkGSGdVFd82u7fQLgwSTnbWkxUL7HXuz5LTZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.4.1", + "deepmerge": "^4.2.2", + "glob": "^7.1.7", + "json5": "^2.2.3" + } + }, + "node_modules/swagger-autogen/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz", + "integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==", + "license": "Apache-2.0", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, + "node_modules/swagger-ui-express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "license": "MIT", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "optional": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "optional": true + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "optional": true + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatsapp-web.js": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/whatsapp-web.js/-/whatsapp-web.js-1.26.0.tgz", + "integrity": "sha512-JUbpwVmJE427KgYIXju+ycHq65SNnXkAsoWwnEUpyI4E0O45S5aG1stRML7aGJxVb6aycTR+hLrTlEiygsNJug==", + "license": "Apache-2.0", + "dependencies": { + "@pedroslopez/moduleraid": "^5.0.2", + "fluent-ffmpeg": "2.1.2", + "mime": "^3.0.0", + "node-fetch": "^2.6.9", + "node-webpmux": "3.1.7", + "puppeteer": "^18.2.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "archiver": "^5.3.1", + "fs-extra": "^10.1.0", + "unzipper": "^0.10.11" + } + }, + "node_modules/whatsapp-web.js/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "optional": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c1083dc --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "name": "wwebjs-api", + "version": "1.0.0", + "description": "REST API wrapper for whatsapp-web.js", + "main": "server.js", + "scripts": { + "start": "node server.js", + "test": "jest --runInBand", + "swagger": "node swagger.js" + }, + "dependencies": { + "axios": "^1.7.8", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "express-rate-limit": "^7.4.1", + "qr-image": "^3.2.0", + "qrcode-terminal": "^0.12.0", + "swagger-ui-express": "^5.0.1", + "whatsapp-web.js": "^1.26.0" + }, + "devDependencies": { + "eslint": "^8.38.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.7.0", + "eslint-plugin-promise": "^6.1.1", + "jest": "^29.5.0", + "supertest": "^6.3.3", + "swagger-autogen": "^2.23.7" + }, + "keywords": [ + "whatsapp", + "whatsapp-web", + "wwebjs", + "api", + "wrapper", + "rest", + "express", + "axios" + ], + "author": { + "name": "Anton Voylenko", + "email": "anton.voylenko@gmail.com" + }, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "repository": { + "type": "git", + "url": "https://github.com/avoylenko/wwebjs-api.git" + }, + "bugs": { + "url": "https://github.com/avoylenko/wwebjs-api/issues" + }, + "homepage": "https://github.com/avoylenko/wwebjs-api" +} diff --git a/server.js b/server.js new file mode 100644 index 0000000..e7d10bc --- /dev/null +++ b/server.js @@ -0,0 +1,16 @@ +const app = require('./src/app') +const { baseWebhookURL } = require('./src/config') +require('dotenv').config() + +// Start the server +const port = process.env.PORT || 3000 + +// Check if BASE_WEBHOOK_URL environment variable is available +if (!baseWebhookURL) { + console.error('BASE_WEBHOOK_URL environment variable is not set. Exiting...') + process.exit(1) // Terminate the application with an error code +} + +app.listen(port, () => { + console.log(`Server running on port ${port}`) +}) diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..aeeeb9c --- /dev/null +++ b/src/app.js @@ -0,0 +1,17 @@ +require('./routes') +const express = require('express') +const { restoreSessions } = require('./sessions') +const { routes } = require('./routes') +const { maxAttachmentSize } = require('./config') + +const app = express() + +// Initialize Express app +app.disable('x-powered-by') +app.use(express.json({ limit: maxAttachmentSize + 1000000 })) +app.use(express.urlencoded({ limit: maxAttachmentSize + 1000000, extended: true })) +app.use('/', routes) + +restoreSessions() + +module.exports = app diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..5032fc0 --- /dev/null +++ b/src/config.js @@ -0,0 +1,37 @@ +// Load environment variables from .env file +require('dotenv').config() + +// setup global const +const sessionFolderPath = process.env.SESSIONS_PATH || './sessions' +const enableLocalCallbackExample = (process.env.ENABLE_LOCAL_CALLBACK_EXAMPLE || '').toLowerCase() === 'true' +const globalApiKey = process.env.API_KEY +const baseWebhookURL = process.env.BASE_WEBHOOK_URL +const maxAttachmentSize = parseInt(process.env.MAX_ATTACHMENT_SIZE) || 10000000 +const setMessagesAsSeen = (process.env.SET_MESSAGES_AS_SEEN || '').toLowerCase() === 'true' +const disabledCallbacks = process.env.DISABLED_CALLBACKS ? process.env.DISABLED_CALLBACKS.split('|') : [] +const enableSwaggerEndpoint = (process.env.ENABLE_SWAGGER_ENDPOINT || '').toLowerCase() === 'true' +const webVersion = process.env.WEB_VERSION +const webVersionCacheType = process.env.WEB_VERSION_CACHE_TYPE || 'none' +const rateLimitMax = parseInt(process.env.RATE_LIMIT_MAX) || 1000 +const rateLimitWindowMs = parseInt(process.env.RATE_LIMIT_WINDOW_MS) || 1000 +const recoverSessions = (process.env.RECOVER_SESSIONS || '').toLowerCase() === 'true' +const chromeBin = process.env.CHROME_BIN || null +const headless = process.env.HEADLESS ? (process.env.HEADLESS).toLowerCase() === 'true' : true + +module.exports = { + sessionFolderPath, + enableLocalCallbackExample, + globalApiKey, + baseWebhookURL, + maxAttachmentSize, + setMessagesAsSeen, + disabledCallbacks, + enableSwaggerEndpoint, + webVersion, + webVersionCacheType, + rateLimitMax, + rateLimitWindowMs, + recoverSessions, + chromeBin, + headless +} diff --git a/src/controllers/chatController.js b/src/controllers/chatController.js new file mode 100644 index 0000000..3c03415 --- /dev/null +++ b/src/controllers/chatController.js @@ -0,0 +1,237 @@ +const { sessions } = require('../sessions') +const { sendErrorResponse } = require('../utils') + +/** + * @function + * @async + * @name getClassInfo + * @description Gets information about a chat using the chatId and sessionId + * @param {Object} req - Request object + * @param {Object} res - Response object + * @param {string} req.body.chatId - The ID of the chat to get information for + * @param {string} req.params.sessionId - The ID of the session to use + * @returns {Object} - Returns a JSON object with the success status and chat information + * @throws {Error} - Throws an error if chat is not found or if there is a server error + */ +const getClassInfo = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + res.json({ success: true, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Clears all messages in a chat. + * + * @function + * @async + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The ID of the session. + * @param {string} req.body.chatId - The ID of the chat to clear messages from. + * @throws {Error} If the chat is not found or there is an internal server error. + * @returns {Object} The success status and the cleared messages. + */ +const clearMessages = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const clearMessages = await chat.clearMessages() + res.json({ success: true, clearMessages }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Stops typing or recording in chat immediately. + * + * @function + * @async + * @param {Object} req - Request object. + * @param {Object} res - Response object. + * @param {string} req.body.chatId - ID of the chat to clear the state for. + * @param {string} req.params.sessionId - ID of the session the chat belongs to. + * @returns {Promise} - A Promise that resolves with a JSON object containing a success flag and the result of clearing the state. + * @throws {Error} - If there was an error while clearing the state. + */ +const clearState = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const clearState = await chat.clearState() + res.json({ success: true, clearState }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Delete a chat. + * + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.chatId - The ID of the chat to be deleted. + * @returns {Object} A JSON response indicating whether the chat was deleted successfully. + * @throws {Object} If there is an error while deleting the chat, an error response is sent with a status code of 500. + * @throws {Object} If the chat is not found, an error response is sent with a status code of 404. + */ +const deleteChat = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const deleteChat = await chat.delete() + res.json({ success: true, deleteChat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Fetches messages from a specified chat. + * + * @function + * @async + * + * @param {Object} req - The request object containing sessionId, chatId, and searchOptions. + * @param {string} req.params.sessionId - The ID of the session associated with the chat. + * @param {Object} req.body - The body of the request containing chatId and searchOptions. + * @param {string} req.body.chatId - The ID of the chat from which to fetch messages. + * @param {Object} req.body.searchOptions - The search options to use when fetching messages. + * + * @param {Object} res - The response object to send the fetched messages. + * @returns {Promise} A JSON object containing the success status and fetched messages. + * + * @throws {Error} If the chat is not found or there is an error fetching messages. + */ +const fetchMessages = async (req, res) => { + try { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique whatsApp identifier for the given Chat (either group or personnal)', + example: '6281288888888@c.us' + }, + searchOptions: { + type: 'object', + description: 'Search options for fetching messages', + example: '{}' + } + } + } + } + */ + const { chatId, searchOptions } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const messages = await chat.fetchMessages(searchOptions) + res.json({ success: true, messages }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Gets the contact for a chat + * @async + * @function + * @param {Object} req - The HTTP request object + * @param {Object} res - The HTTP response object + * @param {string} req.params.sessionId - The ID of the current session + * @param {string} req.body.chatId - The ID of the chat to get the contact for + * @returns {Promise} - Promise that resolves with the chat's contact information + * @throws {Error} - Throws an error if chat is not found or if there is an error getting the contact information + */ +const getContact = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const contact = await chat.getContact() + res.json({ success: true, contact }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Send a recording state to a WhatsApp chat. + * @async + * @function + * @param {object} req - The request object. + * @param {object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {object} req.body - The request body. + * @param {string} req.body.chatId - The ID of the chat to send the recording state to. + * @returns {object} - An object containing a success message and the result of the sendStateRecording method. + * @throws {object} - An error object containing a status code and error message if an error occurs. + */ +const sendStateRecording = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const sendStateRecording = await chat.sendStateRecording() + res.json({ success: true, sendStateRecording }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Send a typing state to a WhatsApp chat. + * @async + * @function + * @param {object} req - The request object. + * @param {object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {object} req.body - The request body. + * @param {string} req.body.chatId - The ID of the chat to send the typing state to. + * @returns {object} - An object containing a success message and the result of the sendStateTyping method. + * @throws {object} - An error object containing a status code and error message if an error occurs. + */ +const sendStateTyping = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat) { sendErrorResponse(res, 404, 'Chat not Found') } + const sendStateTyping = await chat.sendStateTyping() + res.json({ success: true, sendStateTyping }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + getClassInfo, + clearMessages, + clearState, + deleteChat, + fetchMessages, + getContact, + sendStateRecording, + sendStateTyping +} diff --git a/src/controllers/clientController.js b/src/controllers/clientController.js new file mode 100644 index 0000000..399268e --- /dev/null +++ b/src/controllers/clientController.js @@ -0,0 +1,1314 @@ +const { MessageMedia, Location, Buttons, List, Poll } = require('whatsapp-web.js') +const { sessions } = require('../sessions') +const { sendErrorResponse } = require('../utils') + +/** + * Send a message to a chat using the WhatsApp API + * + * @async + * @function sendMessage + * @param {Object} req - The request object containing the request parameters + * @param {Object} req.body - The request body containing the chatId, content, contentType and options + * @param {string} req.body.chatId - The chat id where the message will be sent + * @param {string|Object} req.body.content - The message content to be sent, can be a string or an object containing the MessageMedia data + * @param {string} req.body.contentType - The type of the message content, must be one of the following: 'string', 'MessageMedia', 'MessageMediaFromURL', 'Location', 'Buttons', or 'List' + * @param {Object} req.body.options - Additional options to be passed to the WhatsApp API + * @param {string} req.params.sessionId - The id of the WhatsApp session to be used + * @param {Object} res - The response object + * @returns {Object} - The response object containing a success flag and the sent message data + * @throws {Error} - If there is an error while sending the message + */ +const sendMessage = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + '@content': { + "application/json": { + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'The Chat id which contains the message (Group or Individual)', + }, + contentType: { + type: 'string', + description: 'The type of message content, must be one of the following: string, MessageMedia, MessageMediaFromURL, Location, Buttons, or List', + }, + content: { + type: 'object', + description: 'The content of the message, can be a string or an object', + }, + options: { + type: 'object', + description: 'The message send options', + } + } + }, + examples: { + string: { value: { chatId: '6281288888888@c.us', contentType: 'string', content: 'Hello World!' } }, + MessageMedia: { value: { chatId: '6281288888888@c.us', contentType: 'MessageMedia', content: { mimetype: 'image/jpeg', data: 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=', filename: 'image.jpg' } } }, + MessageMediaFromURL: { value: { chatId: '6281288888888@c.us', contentType: 'MessageMediaFromURL', content: 'https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=Example' } }, + Location: { value: { chatId: '6281288888888@c.us', contentType: 'Location', content: { latitude: -6.2, longitude: 106.8, description: 'Jakarta' } } }, + Buttons: { value: { chatId: '6281288888888@c.us', contentType: 'Buttons', content: { body: 'Hello World!', buttons: [{ body: 'button 1' }], title: 'Hello World!', footer: 'Hello World!' } } }, + List: { + value: { chatId: '6281288888888@c.us', contentType: 'List', content: { body: 'Hello World!', buttonText: 'Hello World!', sections: [{ title: 'sectionTitle', rows: [{ id: 'customId', title: 'ListItem2', description: 'desc' }, { title: 'ListItem2' }] }], title: 'Hello World!', footer: 'Hello World!' } } + }, + Contact: { + value: { chatId: '6281288888888@c.us', contentType: 'Contact', content: { contactId: '6281288888889@c.us' } } + }, + Poll: { + value: { chatId: '6281288888888@c.us', contentType: 'Poll', content: { pollName: 'Cats or Dogs?', pollOptions: ['Cats', 'Dogs'], options: { allowMultipleAnswers: true } } } + }, + } + } + } + } + */ + + try { + const { chatId, content, contentType, options } = req.body + const client = sessions.get(req.params.sessionId) + + let messageOut + switch (contentType) { + case 'string': + if (options?.media) { + const media = options.media + media.filename = null + media.filesize = null + options.media = new MessageMedia(media.mimetype, media.data, media.filename, media.filesize) + } + messageOut = await client.sendMessage(chatId, content, options) + break + case 'MessageMediaFromURL': { + const messageMediaFromURL = await MessageMedia.fromUrl(content, { unsafeMime: true }) + messageOut = await client.sendMessage(chatId, messageMediaFromURL, options) + break + } + case 'MessageMedia': { + const messageMedia = new MessageMedia(content.mimetype, content.data, content.filename, content.filesize) + messageOut = await client.sendMessage(chatId, messageMedia, options) + break + } + case 'Location': { + const location = new Location(content.latitude, content.longitude, content.description) + messageOut = await client.sendMessage(chatId, location, options) + break + } + case 'Buttons': { + const buttons = new Buttons(content.body, content.buttons, content.title, content.footer) + messageOut = await client.sendMessage(chatId, buttons, options) + break + } + case 'List': { + const list = new List(content.body, content.buttonText, content.sections, content.title, content.footer) + messageOut = await client.sendMessage(chatId, list, options) + break + } + case 'Contact': { + const contactId = content.contactId.endsWith('@c.us') ? content.contactId : `${content.contactId}@c.us` + const contact = await client.getContactById(contactId) + messageOut = await client.sendMessage(chatId, contact, options) + break + } + case 'Poll': { + const poll = new Poll(content.pollName, content.pollOptions, content.options) + messageOut = await client.sendMessage(chatId, poll, options) + break + } + default: + return sendErrorResponse(res, 404, 'contentType invalid, must be string, MessageMedia, MessageMediaFromURL, Location, Buttons, List, Contact or Poll') + } + + res.json({ success: true, message: messageOut }) + } catch (error) { + console.log(error) + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Get session information for a given sessionId + * + * @async + * @function getClientInfo + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {string} req.params.sessionId - The sessionId for which the session info is requested + * @returns {Object} - Response object with session info + * @throws Will throw an error if session info cannot be retrieved + */ +const getClassInfo = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const sessionInfo = await client.info + res.json({ success: true, sessionInfo }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Check if a user is registered on WhatsApp + * + * @async + * @function isRegisteredUser + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {string} req.params.sessionId - The sessionId in which the user is registered + * @param {string} req.body.id - The id of the user to check + * @returns {Object} - Response object with a boolean indicating whether the user is registered + * @throws Will throw an error if user registration cannot be checked + */ +const isRegisteredUser = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + number: { + type: 'string', + description: 'The number or ID (\"@c.us\" will be automatically appended if not specified)', + example: '6281288888888' + }, + } + }, + } + */ + try { + const { number } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.isRegisteredUser(number) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the registered WhatsApp ID for a number + * + * @async + * @function getNumberId + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {string} req.params.sessionId - The sessionId in which the user is registered + * @param {string} req.body.id - The id of the user to check + * @returns {Object} - Response object with a boolean indicating whether the user is registered + * @throws Will throw an error if user registration cannot be checked + */ +const getNumberId = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + number: { + type: 'string', + description: 'The number or ID (\"@c.us\" will be automatically appended if not specified)', + example: '6281288888888' + }, + } + }, + } + */ + try { + const { number } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.getNumberId(number) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Create a group with the given name and participants + * + * @async + * @function createGroup + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {string} req.params.sessionId - The sessionId in which to create the group + * @param {string} req.body.name - The name of the group to create + * @param {Array} req.body.participants - Array of user ids to add to the group + * @returns {Object} - Response object with information about the created group + * @throws Will throw an error if group cannot be created + */ +const createGroup = async (req, res) => { + try { + const { name, participants } = req.body + const client = sessions.get(req.params.sessionId) + const response = await client.createGroup(name, participants) + res.json({ success: true, response }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Set the status of the user in a given session + * + * @async + * @function setStatus + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @param {string} req.params.sessionId - The sessionId in which to set the status + * @param {string} req.body.status - The status to set + * @returns {Object} - Response object indicating success + * @throws Will throw an error if status cannot be set + */ +const setStatus = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + status: { + type: 'string', + description: 'New status message', + example: 'I\'m running WhatsApp Web Api' + }, + } + }, + } + */ + try { + const { status } = req.body + const client = sessions.get(req.params.sessionId) + await client.setStatus(status) + res.json({ success: true }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the contacts of the current session. + * @async + * @function + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID associated with the client. + * @param {Object} res - The response object. + * @returns {Promise} - A Promise that resolves with the retrieved contacts or rejects with an error. + */ +const getContacts = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const contacts = await client.getContacts() + res.json({ success: true, contacts }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieve all chats for the given session ID. + * + * @function + * @async + * + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID. + * @param {Object} res - The response object. + * + * @returns {Promise} A Promise that resolves when the operation is complete. + * + * @throws {Error} If the operation fails, an error is thrown. + */ +const getChats = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const chats = await client.getChats() + res.json({ success: true, chats }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Returns the profile picture URL for a given contact ID. + * + * @async + * @function + * @param {Object} req - Express request object. + * @param {Object} res - Express response object. + * @param {string} req.params.sessionId - The ID of the current session. + * @param {string} req.body.contactId - The ID of the contact to get the profile picture for. + * @returns {Promise} - A Promise that resolves with the profile picture URL. + * @throws {Error} - If there is an error retrieving the profile picture URL. + */ +const getProfilePictureUrl = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + contactId: { + type: 'string', + description: 'The contact ID\'s of profile', + example: '6281288888888@c.us' + }, + } + }, + } + */ + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.getProfilePicUrl(contactId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Accepts an invite. + * + * @async + * @function + * @param {Object} req - The HTTP request object. + * @param {Object} req.body - The request body. + * @param {Object} req.params - The request parameters. + * @param {string} req.params.sessionId - The ID of the session. + * @param {Object} res - The HTTP response object. + * @returns {Object} The response object. + * @throws {Error} If there is an error while accepting the invite. + */ +const acceptInvite = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + inviteCode: { + type: 'string', + description: 'Invitation code', + example: '' + }, + } + }, + } + */ + try { + const { inviteCode } = req.body + const client = sessions.get(req.params.sessionId) + const acceptInvite = await client.acceptInvite(inviteCode) + res.json({ success: true, acceptInvite }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the version of WhatsApp Web currently being run. + * + * @async + * @function getWWebVersion + * @param {Object} req - The HTTP request object. + * @param {Object} req.params - The request parameters. + * @param {string} req.params.sessionId - The ID of the session. + * @param {Object} res - The HTTP response object. + * @returns {Object} The response object. + * @throws {Error} If there is an error while accepting the invite. + */ +const getWWebVersion = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const result = await client.getWWebVersion() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Archives a chat. + * + * @async + * @function + * @param {Object} req - The HTTP request object. + * @param {Object} req.body - The request body. + * @param {Object} req.params - The request parameters. + * @param {string} req.params.sessionId - The ID of the session. + * @param {Object} res - The HTTP response object. + * @returns {Object} The response object. + * @throws {Error} If there is an error while archiving the chat. + */ +const archiveChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.archiveChat(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Get the list of blocked contacts for the user's client. + * + * @async + * @function getBlockedContacts + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID to use for the client. + * @param {Object} res - The response object. + * @returns {Promise} - A promise that resolves to an object with a success property and an array of blocked contacts. + * @throws {Error} - Throws an error if the operation fails. + */ +const getBlockedContacts = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const blockedContacts = await client.getBlockedContacts() + res.json({ success: true, blockedContacts }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Get the chat with the given ID. + * + * @async + * @function getChatById + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID to use for the client. + * @param {string} req.body.chatId - The ID of the chat to get. + * @param {Object} res - The response object. + * @returns {Promise} - A promise that resolves to an object with a success property and the chat object. + * @throws {Error} - Throws an error if the operation fails. + */ +const getChatById = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + res.json({ success: true, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Get the labels for the chat with the given ID. + * + * @async + * @function getChatLabels + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID to use for the client. + * @param {string} req.body.chatId - The ID of the chat to get labels for. + * @param {Object} res - The response object. + * @returns {Promise} - A promise that resolves to an object with a success property and an array of labels for the chat. + * @throws {Error} - Throws an error if the operation fails. + */ +const getChatLabels = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chatLabels = await client.getChatLabels(chatId) + res.json({ success: true, chatLabels }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Get the chats with the given label ID. + * + * @async + * @function getChatsByLabelId + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID to use for the client. + * @param {string} req.body.labelId - The ID of the label to get chats for. + * @param {Object} res - The response object. + * @returns {Promise} - A promise that resolves to an object with a success property and an array of chats with the given label. + * @throws {Error} - Throws an error if the operation fails. + */ +const getChatsByLabelId = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + labelId: { + type: 'string', + description: 'ID of the label', + example: '' + }, + } + }, + } + */ + try { + const { labelId } = req.body + const client = sessions.get(req.params.sessionId) + const chats = await client.getChatsByLabelId(labelId) + res.json({ success: true, chats }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the common groups between the client's session and the specified contact. + * @async + * @function getCommonGroups + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID of the client. + * @param {string} req.body.contactId - The ID of the contact to retrieve the common groups with. + * @param {Object} res - The response object. + * @returns {Object} - An object containing a success flag and the retrieved groups. + * @throws {Error} - If an error occurs while retrieving the common groups. + */ +const getCommonGroups = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + contactId: { + type: 'string', + description: 'The whatsapp user\'s ID (_serialized format)', + example: '' + }, + } + }, + } + */ + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const groups = await client.getCommonGroups(contactId) + res.json({ success: true, groups }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the contact with the specified ID. + * @async + * @function getContactById + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID of the client. + * @param {string} req.body.contactId - The ID of the contact to retrieve. + * @param {Object} res - The response object. + * @returns {Object} - An object containing a success flag and the retrieved contact. + * @throws {Error} - If an error occurs while retrieving the contact. + */ +const getContactById = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + contactId: { + type: 'string', + description: 'The whatsapp user\'s ID', + example: '' + }, + } + }, + } + */ + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + res.json({ success: true, contact }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the invite information for the specified invite code. + * @async + * @function getInviteInfo + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The session ID of the client. + * @param {string} req.body.inviteCode - The invite code to retrieve information for. + * @param {Object} res - The response object. + * @returns {Object} - An object containing a success flag and the retrieved invite information. + * @throws {Error} - If an error occurs while retrieving the invite information. + */ +const getInviteInfo = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + inviteCode: { + type: 'string', + description: 'Invitation code', + example: '' + }, + } + }, + } + */ + try { + const { inviteCode } = req.body + const client = sessions.get(req.params.sessionId) + const inviteInfo = await client.getInviteInfo(inviteCode) + res.json({ success: true, inviteInfo }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the label with the given ID for a particular session. + * @async + * @function + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The ID of the session to retrieve the label for. + * @param {Object} req.body - The request body object. + * @param {string} req.body.labelId - The ID of the label to retrieve. + * @param {Object} res - The response object. + * @returns {Promise} + * @throws {Error} If there is an error retrieving the label. + */ +const getLabelById = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + labelId: { + type: 'string', + description: 'ID of the label', + example: '' + }, + } + }, + } + */ + try { + const { labelId } = req.body + const client = sessions.get(req.params.sessionId) + const label = await client.getLabelById(labelId) + res.json({ success: true, label }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves all labels for a particular session. + * @async + * @function + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The ID of the session to retrieve the labels for. + * @param {Object} res - The response object. + * @returns {Promise} + * @throws {Error} If there is an error retrieving the labels. + */ +const getLabels = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const labels = await client.getLabels() + res.json({ success: true, labels }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Adds or removes labels to/from chats. + * @async + * @function + * @param {Object} req - the request object + * @param {Object} res - the response object + * @return {Promise} a Promise that resolves to the JSON response with success status and labels + * @throws {Error} if an error occurs + */ +const addOrRemoveLabels = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + labelIds: { + type: 'array', + description: 'Array of label IDs', + example: [] + }, + chatIds: { + type: 'array', + description: 'Array of chat IDs', + example: [] + }, + } + }, + } +*/ + try { + const { labelIds, chatIds } = req.body + const client = sessions.get(req.params.sessionId) + const labels = await client.addOrRemoveLabels(labelIds, chatIds) + res.json({ success: true, labels }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the state for a particular session. + * @async + * @function + * @param {Object} req - The request object. + * @param {string} req.params.sessionId - The ID of the session to retrieve the state for. + * @param {Object} res - The response object. + * @returns {Promise} + * @throws {Error} If there is an error retrieving the state. + */ +const getState = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const state = await client.getState() + res.json({ success: true, state }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Marks a chat as unread. + * + * @async + * @function markChatUnread + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.chatId - The ID of the chat to mark as unread. + * @returns {Promise} - A Promise that resolves when the chat is marked as unread. + * @throws {Error} - If an error occurs while marking the chat as unread. + */ +const markChatUnread = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const mark = await client.markChatUnread(chatId) + res.json({ success: true, mark }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Mutes a chat. + * + * @async + * @function muteChat + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.chatId - The ID of the chat to mute. + * @param {Date} [req.body.unmuteDate] - The date and time when the chat should be unmuted. If not provided, the chat will be muted indefinitely. + * @returns {Promise} - A Promise that resolves when the chat is muted. + * @throws {Error} - If an error occurs while muting the chat. + */ +const muteChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + unmuteDate: { + type: 'string', + description: 'Date when the chat will be muted, leave as is to mute forever', + example: '' + }, + } + }, + } + */ + try { + const { chatId, unmuteDate } = req.body + const client = sessions.get(req.params.sessionId) + let mute + if (unmuteDate) { + mute = await client.muteChat(chatId, new Date(unmuteDate)) + } else { + mute = await client.muteChat(chatId, null) + } + res.json({ success: true, mute }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Pins a chat. + * + * @async + * @function pinChat + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.chatId - The ID of the chat to pin. + * @returns {Promise} - A Promise that resolves when the chat is pinned. + * @throws {Error} - If an error occurs while pinning the chat. + */ +const pinChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.pinChat(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} +/** + * Search messages with the given query and options. + * @async + * @function searchMessages + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {Object} req.body - The request body. + * @param {string} req.body.query - The search query. + * @param {Object} [req.body.options] - The search options (optional). + * @returns {Promise} - A Promise that resolves with the search results. + * @throws {Error} - If there's an error during the search. + */ +const searchMessages = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'Search string', + example: '' + }, + options: { + type: 'object', + description: 'Search options', + example: {} + }, + } + }, + } + */ + try { + const { query, options } = req.body + const client = sessions.get(req.params.sessionId) + let messages + if (options) { + messages = await client.searchMessages(query, options) + } else { + messages = await client.searchMessages(query) + } + res.json({ success: true, messages }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Send presence available to the XMPP server. + * @async + * @function sendPresenceAvailable + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @returns {Promise} - A Promise that resolves with the presence status. + * @throws {Error} - If there's an error during the presence sending. + */ +const sendPresenceAvailable = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const presence = await client.sendPresenceAvailable() + res.json({ success: true, presence }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Send presence unavailable to the XMPP server. + * @async + * @function sendPresenceUnavailable + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @returns {Promise} - A Promise that resolves with the presence status. + * @throws {Error} - If there's an error during the presence sending. + */ +const sendPresenceUnavailable = async (req, res) => { + try { + const client = sessions.get(req.params.sessionId) + const presence = await client.sendPresenceUnavailable() + res.json({ success: true, presence }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Send a 'seen' message status for a given chat ID. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.body.chatId - The ID of the chat to set the seen status for. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue sending the seen status message, an error will be thrown. + */ +const sendSeen = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.sendSeen(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Set the display name for the user's WhatsApp account. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.body.displayName - The new display name to set for the user's WhatsApp account. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the display name, an error will be thrown. + */ +const setDisplayName = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + displayName: { + type: 'string', + description: 'New display name', + example: '' + }, + } + }, + } + */ + try { + const { displayName } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.setDisplayName(displayName) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Unarchive a chat for the user's WhatsApp account. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.body.chatId - The ID of the chat to unarchive. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue unarchiving the chat, an error will be thrown. + */ +const unarchiveChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.unarchiveChat(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Unmutes the chat identified by chatId using the client associated with the given sessionId. + * + * @async + * @function + * @param {Object} req - The HTTP request object containing the chatId and sessionId. + * @param {string} req.body.chatId - The unique identifier of the chat to unmute. + * @param {string} req.params.sessionId - The unique identifier of the session associated with the client to use. + * @param {Object} res - The HTTP response object. + * @returns {Promise} - A Promise that resolves with a JSON object containing a success flag and the result of the operation. + * @throws {Error} - If an error occurs during the operation, it is thrown and handled by the catch block. + */ +const unmuteChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.unmuteChat(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Unpins the chat identified by chatId using the client associated with the given sessionId. + * + * @async + * @function + * @param {Object} req - The HTTP request object containing the chatId and sessionId. + * @param {string} req.body.chatId - The unique identifier of the chat to unpin. + * @param {string} req.params.sessionId - The unique identifier of the session associated with the client to use. + * @param {Object} res - The HTTP response object. + * @returns {Promise} - A Promise that resolves with a JSON object containing a success flag and the result of the operation. + * @throws {Error} - If an error occurs during the operation, it is thrown and handled by the catch block. + */ +const unpinChat = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'ID of the chat', + example: '' + }, + } + }, + } + */ + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const result = await client.unpinChat(chatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * update the profile Picture of the session user + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.media - The new profile picture to set for the user's WhatsApp account. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the profile picture, an error will be thrown. + */ + +const setProfilePicture = async (req, res) => { + /* + #swagger.requestBody = { + required: true, + schema: { + type: "object", + properties: { + pictureMimetype: { + type: "string", + description: "The mimetype of the picture to set as the profile picture for the user WhatsApp account.", + example: "image/png" + }, + pictureData: { + type: "string", + description: "The base64 data of the picture to set as the profile picture for the user WhatsApp account.", + example: "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=" + } + } + } + } + */ + + try { + const { pictureMimetype, pictureData } = req.body + const client = sessions.get(req.params.sessionId) + const media = new MessageMedia(pictureMimetype, pictureData) + const result = await client.setProfilePicture(media) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + getClassInfo, + acceptInvite, + archiveChat, + createGroup, + getBlockedContacts, + getChatById, + getChatLabels, + getChats, + getChatsByLabelId, + getCommonGroups, + getContactById, + getContacts, + getInviteInfo, + getLabelById, + getLabels, + addOrRemoveLabels, + isRegisteredUser, + getNumberId, + getProfilePictureUrl, + getState, + markChatUnread, + muteChat, + pinChat, + searchMessages, + sendMessage, + sendPresenceAvailable, + sendPresenceUnavailable, + sendSeen, + setDisplayName, + setProfilePicture, + setStatus, + unarchiveChat, + unmuteChat, + unpinChat, + getWWebVersion +} diff --git a/src/controllers/contactController.js b/src/controllers/contactController.js new file mode 100644 index 0000000..dfa874f --- /dev/null +++ b/src/controllers/contactController.js @@ -0,0 +1,218 @@ +const { sessions } = require('../sessions') +const { sendErrorResponse } = require('../utils') + +/** + * Retrieves information about a WhatsApp contact by ID. + * + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The ID of the current session. + * @param {string} req.body.contactId - The ID of the contact to retrieve information for. + * @throws {Error} If there is an error retrieving the contact information. + * @returns {Object} The contact information object. + */ +const getClassInfo = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { + sendErrorResponse(res, 404, 'Contact not Found') + } + res.json({ success: true, result: contact }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Blocks a WhatsApp contact by ID. + * + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The ID of the current session. + * @param {string} req.body.contactId - The ID of the contact to block. + * @throws {Error} If there is an error blocking the contact. + * @returns {Object} The result of the blocking operation. + */ +const block = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { + sendErrorResponse(res, 404, 'Contact not Found') + } + const result = await contact.block() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the 'About' information of a WhatsApp contact by ID. + * + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The ID of the current session. + * @param {string} req.body.contactId - The ID of the contact to retrieve 'About' information for. + * @throws {Error} If there is an error retrieving the contact information. + * @returns {Object} The 'About' information of the contact. + */ +const getAbout = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { + sendErrorResponse(res, 404, 'Contact not Found') + } + const result = await contact.getAbout() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the chat information of a contact with a given contactId. + * + * @async + * @function getChat + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.contactId - The ID of the client whose chat information is being retrieved. + * @throws {Error} If the contact with the given contactId is not found or if there is an error retrieving the chat information. + * @returns {Promise} A promise that resolves with the chat information of the contact. + */ +const getChat = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { sendErrorResponse(res, 404, 'Contact not Found') } + const result = await contact.getChat() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the formatted number of a contact with a given contactId. + * + * @async + * @function getFormattedNumber + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.contactId - The ID of the client whose chat information is being retrieved. + * @throws {Error} If the contact with the given contactId is not found or if there is an error retrieving the chat information. + * @returns {Promise} A promise that resolves with the formatted number of the contact. + */ +const getFormattedNumber = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { sendErrorResponse(res, 404, 'Contact not Found') } + const result = await contact.getFormattedNumber() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the country code of a contact with a given contactId. + * + * @async + * @function getCountryCode + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.contactId - The ID of the client whose chat information is being retrieved. + * @throws {Error} If the contact with the given contactId is not found or if there is an error retrieving the chat information. + * @returns {Promise} A promise that resolves with the country code of the contact. + */ +const getCountryCode = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { sendErrorResponse(res, 404, 'Contact not Found') } + const result = await contact.getCountryCode() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the profile picture url of a contact with a given contactId. + * + * @async + * @function getProfilePicUrl + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.contactId - The ID of the client whose chat information is being retrieved. + * @throws {Error} If the contact with the given contactId is not found or if there is an error retrieving the chat information. + * @returns {Promise} A promise that resolves with the profile picture url of the contact. + */ +const getProfilePicUrl = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { sendErrorResponse(res, 404, 'Contact not Found') } + const result = await contact.getProfilePicUrl() || null + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Unblocks the contact with a given contactId. + * + * @async + * @function unblock + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.contactId - The ID of the client whose contact is being unblocked. + * @throws {Error} If the contact with the given contactId is not found or if there is an error unblocking the contact. + * @returns {Promise} A promise that resolves with the result of unblocking the contact. + */ +const unblock = async (req, res) => { + try { + const { contactId } = req.body + const client = sessions.get(req.params.sessionId) + const contact = await client.getContactById(contactId) + if (!contact) { sendErrorResponse(res, 404, 'Contact not Found') } + const result = await contact.unblock() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + getClassInfo, + block, + getAbout, + getChat, + unblock, + getFormattedNumber, + getCountryCode, + getProfilePicUrl +} diff --git a/src/controllers/groupChatController.js b/src/controllers/groupChatController.js new file mode 100644 index 0000000..9da1c42 --- /dev/null +++ b/src/controllers/groupChatController.js @@ -0,0 +1,355 @@ +const { MessageMedia } = require('whatsapp-web.js') +const { sessions } = require('../sessions') +const { sendErrorResponse } = require('../utils') + +/** + * Adds participants to a group chat. + * @async + * @function + * @param {Object} req - The request object containing the chatId and contactIds in the body. + * @param {string} req.body.chatId - The ID of the group chat. + * @param {Array} req.body.contactIds - An array of contact IDs to be added to the group. + * @param {Object} res - The response object. + * @returns {Object} Returns a JSON object containing a success flag and the updated participants list. + * @throws {Error} Throws an error if the chat is not a group chat. +*/ +const addParticipants = async (req, res) => { + try { + const { chatId, contactIds } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + await chat.addParticipants(contactIds) + res.json({ success: true, participants: chat.participants }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Removes participants from a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and updated participants list + * @throws {Error} If chat is not a group + */ +const removeParticipants = async (req, res) => { + try { + const { chatId, contactIds } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + await chat.removeParticipants(contactIds) + res.json({ success: true, participants: chat.participants }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Promotes participants in a group chat to admin + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and updated participants list + * @throws {Error} If chat is not a group + */ +const promoteParticipants = async (req, res) => { + try { + const { chatId, contactIds } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + await chat.promoteParticipants(contactIds) + res.json({ success: true, participants: chat.participants }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Demotes admin participants in a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and updated participants list + * @throws {Error} If chat is not a group + */ +const demoteParticipants = async (req, res) => { + try { + const { chatId, contactIds } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + await chat.demoteParticipants(contactIds) + res.json({ success: true, participants: chat.participants }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Gets the invite code for a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and invite code + * @throws {Error} If chat is not a group + */ +const getInviteCode = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const inviteCode = await chat.getInviteCode() + res.json({ success: true, inviteCode }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Sets the subject of a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and updated chat object + * @throws {Error} If chat is not a group + */ +const setSubject = async (req, res) => { + try { + const { chatId, subject } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const success = await chat.setSubject(subject) + res.json({ success, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Sets the description of a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and updated chat object + * @throws {Error} If chat is not a group + */ +const setDescription = async (req, res) => { + try { + const { chatId, description } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const success = await chat.setDescription(description) + res.json({ success, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Leaves a group chat + * + * @async + * @function + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} Returns a JSON object with success flag and outcome of leaving the chat + * @throws {Error} If chat is not a group + */ +const leave = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const outcome = await chat.leave() + res.json({ success: true, outcome }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves information about a chat based on the provided chatId + * + * @async + * @function getClassInfo + * @param {object} req - The request object + * @param {object} res - The response object + * @param {string} req.body.chatId - The chatId of the chat to retrieve information about + * @param {string} req.params.sessionId - The sessionId of the client making the request + * @throws {Error} The chat is not a group. + * @returns {Promise} - A JSON response with success true and chat object containing chat information + */ +const getClassInfo = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + res.json({ success: true, chat }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Revokes the invite link for a group chat based on the provided chatId + * + * @async + * @function revokeInvite + * @param {object} req - The request object + * @param {object} res - The response object + * @param {string} req.body.chatId - The chatId of the group chat to revoke the invite for + * @param {string} req.params.sessionId - The sessionId of the client making the request + * @throws {Error} The chat is not a group. + * @returns {Promise} - A JSON response with success true and the new invite code for the group chat + */ +const revokeInvite = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const newInviteCode = await chat.revokeInvite() + res.json({ success: true, newInviteCode }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Sets admins-only status of a group chat's info or messages. + * + * @async + * @function setInfoAdminsOnly + * @param {Object} req - Request object. + * @param {Object} res - Response object. + * @param {string} req.params.sessionId - ID of the user's session. + * @param {Object} req.body - Request body. + * @param {string} req.body.chatId - ID of the group chat. + * @param {boolean} req.body.adminsOnly - Desired admins-only status. + * @returns {Promise} Promise representing the success or failure of the operation. + * @throws {Error} If the chat is not a group. + */ +const setInfoAdminsOnly = async (req, res) => { + try { + const { chatId, adminsOnly } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.setInfoAdminsOnly(adminsOnly) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Sets admins-only status of a group chat's messages. + * + * @async + * @function setMessagesAdminsOnly + * @param {Object} req - Request object. + * @param {Object} res - Response object. + * @param {string} req.params.sessionId - ID of the user's session. + * @param {Object} req.body - Request body. + * @param {string} req.body.chatId - ID of the group chat. + * @param {boolean} req.body.adminsOnly - Desired admins-only status. + * @returns {Promise} Promise representing the success or failure of the operation. + * @throws {Error} If the chat is not a group. + */ +const setMessagesAdminsOnly = async (req, res) => { + try { + const { chatId, adminsOnly } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.setMessagesAdminsOnly(adminsOnly) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Set the group Picture + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.pictureMimetype - The mimetype of the image. + * @param {Object} req.body.pictureData - The new group picture in base64 format. + * @param {Object} req.body.chatId - ID of the group chat. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the group picture, an error will be thrown. + */ +const setPicture = async (req, res) => { + try { + const { pictureMimetype, pictureData, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const media = new MessageMedia(pictureMimetype, pictureData) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.setPicture(media) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Delete the group Picture + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {Object} req.body.chatId - ID of the group chat. + * @param {string} req.params.sessionId - The ID of the session for the user. + * @returns {Object} Returns a JSON object with a success status and the result of the function. + * @throws {Error} If there is an issue setting the group picture, an error will be thrown. + */ +const deletePicture = async (req, res) => { + try { + const { chatId } = req.body + const client = sessions.get(req.params.sessionId) + const chat = await client.getChatById(chatId) + if (!chat.isGroup) { throw new Error('The chat is not a group') } + const result = await chat.deletePicture() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + getClassInfo, + addParticipants, + demoteParticipants, + getInviteCode, + leave, + promoteParticipants, + removeParticipants, + revokeInvite, + setDescription, + setInfoAdminsOnly, + setMessagesAdminsOnly, + setSubject, + setPicture, + deletePicture +} diff --git a/src/controllers/healthController.js b/src/controllers/healthController.js new file mode 100644 index 0000000..6aa2f28 --- /dev/null +++ b/src/controllers/healthController.js @@ -0,0 +1,55 @@ +const fsp = require('fs').promises +const qrcode = require('qrcode-terminal') +const { sessionFolderPath } = require('../config') +const { sendErrorResponse } = require('../utils') + +/** + * Responds to ping request with 'pong' + * + * @function ping + * @async + * @param {Object} req - Express request object + * @param {Object} res - Express response object + * @returns {Promise} - Promise that resolves once response is sent + * @throws {Object} - Throws error if response fails + */ +const ping = async (req, res) => { + /* + #swagger.tags = ['Various'] + */ + try { + res.json({ success: true, message: 'pong' }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Example local callback function that generates a QR code and writes a log file + * + * @function localCallbackExample + * @async + * @param {Object} req - Express request object containing a body object with dataType and data + * @param {string} req.body.dataType - Type of data (in this case, 'qr') + * @param {Object} req.body.data - Data to generate a QR code from + * @param {Object} res - Express response object + * @returns {Promise} - Promise that resolves once response is sent + * @throws {Object} - Throws error if response fails + */ +const localCallbackExample = async (req, res) => { + /* + #swagger.tags = ['Various'] + */ + try { + const { dataType, data } = req.body + if (dataType === 'qr') { qrcode.generate(data.qr, { small: true }) } + await fsp.writeFile(`${sessionFolderPath}/message_log.txt`, `${JSON.stringify(req.body)}\r\n`, { flag: 'a+' }, _ => _) + res.json({ success: true }) + } catch (error) { + console.log(error) + await fsp.writeFile(`${sessionFolderPath}/message_log.txt`, `(ERROR) ${JSON.stringify(error)}\r\n`, { flag: 'a+' }, _ => _) + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { ping, localCallbackExample } diff --git a/src/controllers/messageController.js b/src/controllers/messageController.js new file mode 100644 index 0000000..241d62f --- /dev/null +++ b/src/controllers/messageController.js @@ -0,0 +1,376 @@ +const { sessions } = require('../sessions') +const { sendErrorResponse } = require('../utils') + +/** + * Get message by its ID from a given chat using the provided client. + * @async + * @function + * @param {object} client - The chat client. + * @param {string} messageId - The ID of the message to get. + * @param {string} chatId - The ID of the chat to search in. + * @returns {Promise} - A Promise that resolves with the message object that matches the provided ID, or undefined if no such message exists. + * @throws {Error} - Throws an error if the provided client, message ID or chat ID is invalid. + */ +const _getMessageById = async (client, messageId, chatId) => { + const chat = await client.getChatById(chatId) + const messages = await chat.fetchMessages({ limit: 100 }) + const message = messages.find((message) => { return message.id.id === messageId }) + return message +} + +/** + * Gets information about a message's class. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.messageId - The message ID. + * @param {string} req.body.chatId - The chat ID. + * @returns {Promise} - A Promise that resolves with no value when the function completes. + */ +const getClassInfo = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + res.json({ success: true, message }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Deletes a message. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.messageId - The message ID. + * @param {string} req.body.chatId - The chat ID. + * @param {boolean} req.body.everyone - Whether to delete the message for everyone or just the sender. + * @returns {Promise} - A Promise that resolves with no value when the function completes. + */ +const deleteMessage = async (req, res) => { + try { + const { messageId, chatId, everyone } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const result = await message.delete(everyone) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Downloads media from a message. + * @async + * @function + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.messageId - The message ID. + * @param {string} req.body.chatId - The chat ID. + * @param {boolean} req.body.everyone - Whether to download the media for everyone or just the sender. + * @returns {Promise} - A Promise that resolves with no value when the function completes. + */ +const downloadMedia = async (req, res) => { + try { + const { messageId, chatId, everyone } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const messageMedia = await message.downloadMedia(everyone) + res.json({ success: true, messageMedia }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Forwards a message to a destination chat. + * @async + * @function forward + * @param {Object} req - The request object received by the server. + * @param {Object} req.body - The body of the request object. + * @param {string} req.body.messageId - The ID of the message to forward. + * @param {string} req.body.chatId - The ID of the chat that contains the message to forward. + * @param {string} req.body.destinationChatId - The ID of the chat to forward the message to. + * @param {string} req.params.sessionId - The ID of the session to use the Telegram API with. + * @param {Object} res - The response object to be sent back to the client. + * @returns {Object} - The response object with a JSON body containing the result of the forward operation. + * @throws Will throw an error if the message is not found or if there is an error during the forward operation. + */ +const forward = async (req, res) => { + try { + const { messageId, chatId, destinationChatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const result = await message.forward(destinationChatId) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Gets information about a message. + * @async + * @function getInfo + * @param {Object} req - The request object received by the server. + * @param {Object} req.body - The body of the request object. + * @param {string} req.body.messageId - The ID of the message to get information about. + * @param {string} req.body.chatId - The ID of the chat that contains the message to get information about. + * @param {string} req.params.sessionId - The ID of the session to use the Telegram API with. + * @param {Object} res - The response object to be sent back to the client. + * @returns {Object} - The response object with a JSON body containing the information about the message. + * @throws Will throw an error if the message is not found or if there is an error during the get info operation. + */ +const getInfo = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const info = await message.getInfo() + res.json({ success: true, info }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves a list of contacts mentioned in a specific message + * + * @async + * @function + * @param {Object} req - The HTTP request object + * @param {Object} req.body - The request body + * @param {string} req.body.messageId - The ID of the message to retrieve mentions from + * @param {string} req.body.chatId - The ID of the chat where the message was sent + * @param {string} req.params.sessionId - The ID of the session for the client making the request + * @param {Object} res - The HTTP response object + * @returns {Promise} - The JSON response with the list of contacts + * @throws {Error} - If there's an error retrieving the message or mentions + */ +const getMentions = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const contacts = await message.getMentions() + res.json({ success: true, contacts }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the order information contained in a specific message + * + * @async + * @function + * @param {Object} req - The HTTP request object + * @param {Object} req.body - The request body + * @param {string} req.body.messageId - The ID of the message to retrieve the order from + * @param {string} req.body.chatId - The ID of the chat where the message was sent + * @param {string} req.params.sessionId - The ID of the session for the client making the request + * @param {Object} res - The HTTP response object + * @returns {Promise} - The JSON response with the order information + * @throws {Error} - If there's an error retrieving the message or order information + */ +const getOrder = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const order = await message.getOrder() + res.json({ success: true, order }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the payment information from a specific message identified by its ID. + * + * @async + * @function getPayment + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID associated with the client making the request. + * @param {Object} req.body - The message ID and chat ID associated with the message to retrieve payment information from. + * @param {string} req.body.messageId - The ID of the message to retrieve payment information from. + * @param {string} req.body.chatId - The ID of the chat the message is associated with. + * @returns {Object} An object containing a success status and the payment information for the specified message. + * @throws {Object} If the specified message is not found or if an error occurs during the retrieval process. + */ +const getPayment = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const payment = await message.getPayment() + res.json({ success: true, payment }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Retrieves the quoted message information from a specific message identified by its ID. + * + * @async + * @function getQuotedMessage + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID associated with the client making the request. + * @param {Object} req.body - The message ID and chat ID associated with the message to retrieve quoted message information from. + * @param {string} req.body.messageId - The ID of the message to retrieve quoted message information from. + * @param {string} req.body.chatId - The ID of the chat the message is associated with. + * @returns {Object} An object containing a success status and the quoted message information for the specified message. + * @throws {Object} If the specified message is not found or if an error occurs during the retrieval process. + */ +const getQuotedMessage = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const quotedMessage = await message.getQuotedMessage() + res.json({ success: true, quotedMessage }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * React to a specific message in a chat + * + * @async + * @function react + * @param {Object} req - The HTTP request object containing the request parameters and body. + * @param {Object} res - The HTTP response object to send the result. + * @param {string} req.params.sessionId - The ID of the session to use. + * @param {Object} req.body - The body of the request. + * @param {string} req.body.messageId - The ID of the message to react to. + * @param {string} req.body.chatId - The ID of the chat the message is in. + * @param {string} req.body.reaction - The reaction to add to the message. + * @returns {Object} The HTTP response containing the result of the operation. + * @throws {Error} If there was an error during the operation. + */ +const react = async (req, res) => { + try { + const { messageId, chatId, reaction } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const result = await message.react(reaction) + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Reply to a specific message in a chat + * + * @async + * @function reply + * @param {Object} req - The HTTP request object containing the request parameters and body. + * @param {Object} res - The HTTP response object to send the result. + * @param {string} req.params.sessionId - The ID of the session to use. + * @param {string} req.body.messageId - The ID of the message to reply to. + * @param {string} req.body.chatId - The ID of the chat the message is in. + * @param {string} req.body.content - The content of the message to send. + * @param {string} req.body.destinationChatId - The ID of the chat to send the reply to. + * @param {Object} req.body.options - Additional options for sending the message. + * @returns {Object} The HTTP response containing the result of the operation. + * @throws {Error} If there was an error during the operation. + */ +const reply = async (req, res) => { + try { + const { messageId, chatId, content, destinationChatId, options } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const repliedMessage = await message.reply(content, destinationChatId, options) + res.json({ success: true, repliedMessage }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * @function star + * @async + * @description Stars a message by message ID and chat ID. + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.messageId - The message ID. + * @param {string} req.body.chatId - The chat ID. + * @returns {Promise} A Promise that resolves with the result of the message.star() call. + * @throws {Error} If message is not found, it throws an error with the message "Message not Found". + */ +const star = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const result = await message.star() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +/** + * @function unstar + * @async + * @description Unstars a message by message ID and chat ID. + * @param {Object} req - The request object. + * @param {Object} res - The response object. + * @param {string} req.params.sessionId - The session ID. + * @param {string} req.body.messageId - The message ID. + * @param {string} req.body.chatId - The chat ID. + * @returns {Promise} A Promise that resolves with the result of the message.unstar() call. + * @throws {Error} If message is not found, it throws an error with the message "Message not Found". + */ +const unstar = async (req, res) => { + try { + const { messageId, chatId } = req.body + const client = sessions.get(req.params.sessionId) + const message = await _getMessageById(client, messageId, chatId) + if (!message) { throw new Error('Message not Found') } + const result = await message.unstar() + res.json({ success: true, result }) + } catch (error) { + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + getClassInfo, + deleteMessage, + downloadMedia, + forward, + getInfo, + getMentions, + getOrder, + getPayment, + getQuotedMessage, + react, + reply, + star, + unstar +} diff --git a/src/controllers/sessionController.js b/src/controllers/sessionController.js new file mode 100644 index 0000000..d8bd886 --- /dev/null +++ b/src/controllers/sessionController.js @@ -0,0 +1,374 @@ +const qr = require('qr-image') +const { setupSession, deleteSession, reloadSession, validateSession, flushSessions, sessions } = require('../sessions') +const { sendErrorResponse, waitForNestedObject } = require('../utils') + +/** + * Starts a session for the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to start. + * @returns {Promise} + * @throws {Error} If there was an error starting the session. + */ +const startSession = async (req, res) => { + // #swagger.summary = 'Start new session' + // #swagger.description = 'Starts a session for the given session ID.' + try { + const sessionId = req.params.sessionId + const setupSessionReturn = setupSession(sessionId) + if (!setupSessionReturn.success) { + /* #swagger.responses[422] = { + description: "Unprocessable Entity.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + sendErrorResponse(res, 422, setupSessionReturn.message) + return + } + /* #swagger.responses[200] = { + description: "Status of the initiated session.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/StartSessionResponse" } + } + } + } + */ + // wait until the client is created + await waitForNestedObject(setupSessionReturn.client, 'pupPage') + res.json({ success: true, message: setupSessionReturn.message }) + } catch (error) { + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + console.log('startSession ERROR', error) + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Status of the session with the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to start. + * @returns {Promise} + * @throws {Error} If there was an error getting status of the session. + */ +const statusSession = async (req, res) => { + // #swagger.summary = 'Get session status' + // #swagger.description = 'Status of the session with the given session ID.' + try { + const sessionId = req.params.sessionId + const sessionData = await validateSession(sessionId) + /* #swagger.responses[200] = { + description: "Status of the session.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/StatusSessionResponse" } + } + } + } + */ + res.json(sessionData) + } catch (error) { + console.log('statusSession ERROR', error) + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + sendErrorResponse(res, 500, error.message) + } +} + +/** + * QR code of the session with the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to start. + * @returns {Promise} + * @throws {Error} If there was an error getting status of the session. + */ +const sessionQrCode = async (req, res) => { + // #swagger.summary = 'Get session QR code' + // #swagger.description = 'QR code of the session with the given session ID.' + try { + const sessionId = req.params.sessionId + const session = sessions.get(sessionId) + if (!session) { + return res.json({ success: false, message: 'session_not_found' }) + } + if (session.qr) { + return res.json({ success: true, qr: session.qr }) + } + return res.json({ success: false, message: 'qr code not ready or already scanned' }) + } catch (error) { + console.log('sessionQrCode ERROR', error) + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + sendErrorResponse(res, 500, error.message) + } +} + +/** + * QR code as image of the session with the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to start. + * @returns {Promise} + * @throws {Error} If there was an error getting status of the session. + */ +const sessionQrCodeImage = async (req, res) => { + // #swagger.summary = 'Get session QR code as image' + // #swagger.description = 'QR code as image of the session with the given session ID.' + try { + const sessionId = req.params.sessionId + const session = sessions.get(sessionId) + if (!session) { + return res.json({ success: false, message: 'session_not_found' }) + } + if (session.qr) { + const qrImage = qr.image(session.qr) + /* #swagger.responses[200] = { + description: "QR image.", + content: { + "image/png": {} + } + } + */ + res.writeHead(200, { + 'Content-Type': 'image/png' + }) + return qrImage.pipe(res) + } + return res.json({ success: false, message: 'qr code not ready or already scanned' }) + } catch (error) { + console.log('sessionQrCodeImage ERROR', error) + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Restarts the session with the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to terminate. + * @returns {Promise} + * @throws {Error} If there was an error terminating the session. + */ +const restartSession = async (req, res) => { + // #swagger.summary = 'Restart session' + // #swagger.description = 'Restarts the session with the given session ID.' + try { + const sessionId = req.params.sessionId + const validation = await validateSession(sessionId) + if (validation.message === 'session_not_found') { + return res.json(validation) + } + await reloadSession(sessionId) + /* #swagger.responses[200] = { + description: "Sessions restarted.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/RestartSessionResponse" } + } + } + } + */ + res.json({ success: true, message: 'Restarted successfully' }) + } catch (error) { + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + console.log('restartSession ERROR', error) + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Terminates the session with the given session ID. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @param {string} req.params.sessionId - The session ID to terminate. + * @returns {Promise} + * @throws {Error} If there was an error terminating the session. + */ +const terminateSession = async (req, res) => { + // #swagger.summary = 'Terminate session' + // #swagger.description = 'Terminates the session with the given session ID.' + try { + const sessionId = req.params.sessionId + const validation = await validateSession(sessionId) + if (validation.message === 'session_not_found') { + return res.json(validation) + } + await deleteSession(sessionId, validation) + /* #swagger.responses[200] = { + description: "Sessions terminated.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/TerminateSessionResponse" } + } + } + } + */ + res.json({ success: true, message: 'Logged out successfully' }) + } catch (error) { + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + console.log('terminateSession ERROR', error) + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Terminates all inactive sessions. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @returns {Promise} + * @throws {Error} If there was an error terminating the sessions. + */ +const terminateInactiveSessions = async (req, res) => { + // #swagger.summary = 'Terminate inactive sessions' + // #swagger.description = 'Terminates all inactive sessions.' + try { + await flushSessions(true) + /* #swagger.responses[200] = { + description: "Sessions terminated.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/TerminateSessionsResponse" } + } + } + } + */ + res.json({ success: true, message: 'Flush completed successfully' }) + } catch (error) { + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + console.log('terminateInactiveSessions ERROR', error) + sendErrorResponse(res, 500, error.message) + } +} + +/** + * Terminates all sessions. + * + * @function + * @async + * @param {Object} req - The HTTP request object. + * @param {Object} res - The HTTP response object. + * @returns {Promise} + * @throws {Error} If there was an error terminating the sessions. + */ +const terminateAllSessions = async (req, res) => { + // #swagger.summary = 'Terminate all sessions' + // #swagger.description = 'Terminates all sessions.' + try { + await flushSessions(false) + /* #swagger.responses[200] = { + description: "Sessions terminated.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/TerminateSessionsResponse" } + } + } + } + */ + res.json({ success: true, message: 'Flush completed successfully' }) + } catch (error) { + /* #swagger.responses[500] = { + description: "Server Failure.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + console.log('terminateAllSessions ERROR', error) + sendErrorResponse(res, 500, error.message) + } +} + +module.exports = { + startSession, + statusSession, + sessionQrCode, + sessionQrCodeImage, + restartSession, + terminateSession, + terminateInactiveSessions, + terminateAllSessions +} diff --git a/src/middleware.js b/src/middleware.js new file mode 100644 index 0000000..17926ab --- /dev/null +++ b/src/middleware.js @@ -0,0 +1,188 @@ +const { globalApiKey, rateLimitMax, rateLimitWindowMs } = require('./config') +const { sendErrorResponse } = require('./utils') +const { validateSession } = require('./sessions') +const rateLimiting = require('express-rate-limit') + +const apikey = async (req, res, next) => { + /* + #swagger.security = [{ + "apiKeyAuth": [] + }] + */ + /* #swagger.responses[403] = { + description: "Forbidden.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ForbiddenResponse" } + } + } + } + */ + if (globalApiKey) { + const apiKey = req.headers['x-api-key'] + if (!apiKey || apiKey !== globalApiKey) { + return sendErrorResponse(res, 403, 'Invalid API key') + } + } + next() +} + +const sessionNameValidation = async (req, res, next) => { + /* + #swagger.parameters['sessionId'] = { + in: 'path', + description: 'Unique identifier for the session (alphanumeric and - allowed)', + required: true, + type: 'string', + example: 'f8377d8d-a589-4242-9ba6-9486a04ef80c' + } + */ + if ((!/^[\w-]+$/.test(req.params.sessionId))) { + /* #swagger.responses[422] = { + description: "Unprocessable Entity.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/ErrorResponse" } + } + } + } + */ + return sendErrorResponse(res, 422, 'Session should be alphanumerical or -') + } + next() +} + +const sessionValidation = async (req, res, next) => { + const validation = await validateSession(req.params.sessionId) + if (validation.success !== true) { + /* #swagger.responses[404] = { + description: "Not Found.", + content: { + "application/json": { + schema: { "$ref": "#/definitions/NotFoundResponse" } + } + } + } + */ + return sendErrorResponse(res, 404, validation.message) + } + next() +} + +const rateLimiter = rateLimiting({ + limit: rateLimitMax, + windowMs: rateLimitWindowMs, + message: "You can't make any more requests at the moment. Try again later" +}) + +const sessionSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Session'] + */ + next() +} + +const clientSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Client'] + */ + next() +} + +const contactSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Contact'] + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + contactId: { + type: 'string', + description: 'Unique whatsApp identifier for the contact', + example: '6281288888888@c.us' + } + } + } + } + */ + next() +} + +const messageSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Message'] + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'The Chat id which contains the message', + example: '6281288888888@c.us' + }, + messageId: { + type: 'string', + description: 'Unique whatsApp identifier for the message', + example: 'ABCDEF999999999' + } + } + } + } + */ + next() +} + +const chatSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Chat'] + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique whatsApp identifier for the given Chat (either group or personnal)', + example: '6281288888888@c.us' + } + } + } + } + */ + next() +} + +const groupChatSwagger = async (req, res, next) => { + /* + #swagger.tags = ['Group Chat'] + #swagger.requestBody = { + required: true, + schema: { + type: 'object', + properties: { + chatId: { + type: 'string', + description: 'Unique whatsApp identifier for the given Chat (either group or personnal)', + example: '6281288888888@c.us' + } + } + } + } + */ + next() +} + +module.exports = { + sessionValidation, + apikey, + sessionNameValidation, + sessionSwagger, + clientSwagger, + contactSwagger, + messageSwagger, + chatSwagger, + groupChatSwagger, + rateLimiter +} diff --git a/src/routes.js b/src/routes.js new file mode 100644 index 0000000..8f0ffdd --- /dev/null +++ b/src/routes.js @@ -0,0 +1,191 @@ +const express = require('express') +const routes = express.Router() +const swaggerUi = require('swagger-ui-express') +const swaggerDocument = require('../swagger.json') +const { enableLocalCallbackExample, enableSwaggerEndpoint } = require('./config') + +const middleware = require('./middleware') +const healthController = require('./controllers/healthController') +const sessionController = require('./controllers/sessionController') +const clientController = require('./controllers/clientController') +const chatController = require('./controllers/chatController') +const groupChatController = require('./controllers/groupChatController') +const messageController = require('./controllers/messageController') +const contactController = require('./controllers/contactController') + +/** + * ================ + * HEALTH ENDPOINTS + * ================ + */ + +// API endpoint to check if server is alive +routes.get('/ping', healthController.ping) +// API basic callback +if (enableLocalCallbackExample) { + routes.post('/localCallbackExample', [middleware.apikey, middleware.rateLimiter], healthController.localCallbackExample) +} + +/** + * ================ + * SESSION ENDPOINTS + * ================ + */ +const sessionRouter = express.Router() +sessionRouter.use(middleware.apikey) +sessionRouter.use(middleware.sessionSwagger) +routes.use('/session', sessionRouter) + +sessionRouter.get('/start/:sessionId', middleware.sessionNameValidation, sessionController.startSession) +sessionRouter.get('/status/:sessionId', middleware.sessionNameValidation, sessionController.statusSession) +sessionRouter.get('/qr/:sessionId', middleware.sessionNameValidation, sessionController.sessionQrCode) +sessionRouter.get('/qr/:sessionId/image', middleware.sessionNameValidation, sessionController.sessionQrCodeImage) +sessionRouter.get('/restart/:sessionId', middleware.sessionNameValidation, sessionController.restartSession) +sessionRouter.get('/terminate/:sessionId', middleware.sessionNameValidation, sessionController.terminateSession) +sessionRouter.get('/terminateInactive', sessionController.terminateInactiveSessions) +sessionRouter.get('/terminateAll', sessionController.terminateAllSessions) + +/** + * ================ + * CLIENT ENDPOINTS + * ================ + */ + +const clientRouter = express.Router() +clientRouter.use(middleware.apikey) +sessionRouter.use(middleware.clientSwagger) +routes.use('/client', clientRouter) + +clientRouter.get('/getClassInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getClassInfo) +clientRouter.post('/acceptInvite/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.acceptInvite) +clientRouter.post('/archiveChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.archiveChat) +clientRouter.post('/createGroup/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.createGroup) +clientRouter.post('/getBlockedContacts/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getBlockedContacts) +clientRouter.post('/getChatById/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getChatById) +clientRouter.post('/getChatLabels/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getChatLabels) +clientRouter.get('/getChats/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getChats) +clientRouter.post('/getChatsByLabelId/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getChatsByLabelId) +clientRouter.post('/getCommonGroups/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getCommonGroups) +clientRouter.post('/getContactById/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getContactById) +clientRouter.get('/getContacts/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getContacts) +clientRouter.post('/getInviteInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getInviteInfo) +clientRouter.post('/getLabelById/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getLabelById) +clientRouter.post('/getLabels/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getLabels) +clientRouter.post('/addOrRemoveLabels/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.addOrRemoveLabels) +clientRouter.post('/getNumberId/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getNumberId) +clientRouter.post('/isRegisteredUser/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.isRegisteredUser) +clientRouter.post('/getProfilePicUrl/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getProfilePictureUrl) +clientRouter.get('/getState/:sessionId', [middleware.sessionNameValidation], clientController.getState) +clientRouter.post('/markChatUnread/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.markChatUnread) +clientRouter.post('/muteChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.muteChat) +clientRouter.post('/pinChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.pinChat) +clientRouter.post('/searchMessages/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.searchMessages) +clientRouter.post('/sendMessage/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.sendMessage) +clientRouter.post('/sendPresenceAvailable/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.sendPresenceAvailable) +clientRouter.post('/sendPresenceUnavailable/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.sendPresenceUnavailable) +clientRouter.post('/sendSeen/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.sendSeen) +clientRouter.post('/setDisplayName/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.setDisplayName) +clientRouter.post('/setProfilePicture/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.setProfilePicture) +clientRouter.post('/setStatus/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.setStatus) +clientRouter.post('/unarchiveChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.unarchiveChat) +clientRouter.post('/unmuteChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.unmuteChat) +clientRouter.post('/unpinChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.unpinChat) +clientRouter.get('/getWWebVersion/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], clientController.getWWebVersion) + +/** + * ================ + * CHAT ENDPOINTS + * ================ + */ +const chatRouter = express.Router() +chatRouter.use(middleware.apikey) +sessionRouter.use(middleware.chatSwagger) +routes.use('/chat', chatRouter) + +chatRouter.post('/getClassInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.getClassInfo) +chatRouter.post('/clearMessages/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.clearMessages) +chatRouter.post('/clearState/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.clearState) +chatRouter.post('/delete/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.deleteChat) +chatRouter.post('/fetchMessages/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.fetchMessages) +chatRouter.post('/getContact/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.getContact) +chatRouter.post('/sendStateRecording/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.sendStateRecording) +chatRouter.post('/sendStateTyping/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], chatController.sendStateTyping) + +/** + * ================ + * GROUP CHAT ENDPOINTS + * ================ + */ +const groupChatRouter = express.Router() +groupChatRouter.use(middleware.apikey) +sessionRouter.use(middleware.groupChatSwagger) +routes.use('/groupChat', groupChatRouter) + +groupChatRouter.post('/getClassInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.getClassInfo) +groupChatRouter.post('/addParticipants/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.addParticipants) +groupChatRouter.post('/demoteParticipants/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.demoteParticipants) +groupChatRouter.post('/getInviteCode/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.getInviteCode) +groupChatRouter.post('/leave/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.leave) +groupChatRouter.post('/promoteParticipants/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.promoteParticipants) +groupChatRouter.post('/removeParticipants/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.removeParticipants) +groupChatRouter.post('/revokeInvite/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.revokeInvite) +groupChatRouter.post('/setDescription/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setDescription) +groupChatRouter.post('/setInfoAdminsOnly/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setInfoAdminsOnly) +groupChatRouter.post('/setMessagesAdminsOnly/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setMessagesAdminsOnly) +groupChatRouter.post('/setSubject/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setSubject) +groupChatRouter.post('/setPicture/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.setPicture) +groupChatRouter.post('/deletePicture/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], groupChatController.deletePicture) + +/** + * ================ + * MESSAGE ENDPOINTS + * ================ + */ +const messageRouter = express.Router() +messageRouter.use(middleware.apikey) +sessionRouter.use(middleware.messageSwagger) +routes.use('/message', messageRouter) + +messageRouter.post('/getClassInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getClassInfo) +messageRouter.post('/delete/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.deleteMessage) +messageRouter.post('/downloadMedia/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.downloadMedia) +messageRouter.post('/forward/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.forward) +messageRouter.post('/getInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getInfo) +messageRouter.post('/getMentions/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getMentions) +messageRouter.post('/getOrder/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getOrder) +messageRouter.post('/getPayment/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getPayment) +messageRouter.post('/getQuotedMessage/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.getQuotedMessage) +messageRouter.post('/react/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.react) +messageRouter.post('/reply/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.reply) +messageRouter.post('/star/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.star) +messageRouter.post('/unstar/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], messageController.unstar) + +/** + * ================ + * MESSAGE ENDPOINTS + * ================ + */ +const contactRouter = express.Router() +contactRouter.use(middleware.apikey) +sessionRouter.use(middleware.contactSwagger) +routes.use('/contact', contactRouter) + +contactRouter.post('/getClassInfo/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getClassInfo) +contactRouter.post('/block/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.block) +contactRouter.post('/getAbout/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getAbout) +contactRouter.post('/getChat/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getChat) +contactRouter.post('/unblock/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.unblock) +contactRouter.post('/getFormattedNumber/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getFormattedNumber) +contactRouter.post('/getCountryCode/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getCountryCode) +contactRouter.post('/getProfilePicUrl/:sessionId', [middleware.sessionNameValidation, middleware.sessionValidation], contactController.getProfilePicUrl) +/** + * ================ + * SWAGGER ENDPOINTS + * ================ + */ +if (enableSwaggerEndpoint) { + routes.use('/api-docs', swaggerUi.serve) + routes.get('/api-docs', swaggerUi.setup(swaggerDocument) /* #swagger.ignore = true */) +} + +module.exports = { routes } diff --git a/src/sessions.js b/src/sessions.js new file mode 100644 index 0000000..2278b4d --- /dev/null +++ b/src/sessions.js @@ -0,0 +1,474 @@ +const { Client, LocalAuth } = require('whatsapp-web.js') +const fs = require('fs') +const path = require('path') +const sessions = new Map() +const { baseWebhookURL, sessionFolderPath, maxAttachmentSize, setMessagesAsSeen, webVersion, webVersionCacheType, recoverSessions, chromeBin, headless } = require('./config') +const { triggerWebhook, waitForNestedObject, checkIfEventisEnabled } = require('./utils') + +// Function to validate if the session is ready +const validateSession = async (sessionId) => { + try { + const returnData = { success: false, state: null, message: '' } + + // Session not Connected 😢 + if (!sessions.has(sessionId) || !sessions.get(sessionId)) { + returnData.message = 'session_not_found' + return returnData + } + + const client = sessions.get(sessionId) + // wait until the client is created + await waitForNestedObject(client, 'pupPage') + .catch((err) => { return { success: false, state: null, message: err.message } }) + + // Wait for client.pupPage to be evaluable + let maxRetry = 0 + while (true) { + try { + if (client.pupPage.isClosed()) { + return { success: false, state: null, message: 'browser tab closed' } + } + await Promise.race([ + client.pupPage.evaluate('1'), + new Promise(resolve => setTimeout(resolve, 1000)) + ]) + break + } catch (error) { + if (maxRetry === 2) { + return { success: false, state: null, message: 'session closed' } + } + maxRetry++ + } + } + + const state = await client.getState() + returnData.state = state + if (state !== 'CONNECTED') { + returnData.message = 'session_not_connected' + return returnData + } + + // Session Connected 🎉 + returnData.success = true + returnData.message = 'session_connected' + return returnData + } catch (error) { + console.log(error) + return { success: false, state: null, message: error.message } + } +} + +// Function to handle client session restoration +const restoreSessions = () => { + try { + if (!fs.existsSync(sessionFolderPath)) { + fs.mkdirSync(sessionFolderPath) // Create the session directory if it doesn't exist + } + // Read the contents of the folder + fs.readdir(sessionFolderPath, (_, files) => { + // Iterate through the files in the parent folder + for (const file of files) { + // Use regular expression to extract the string from the folder name + const match = file.match(/^session-(.+)$/) + if (match) { + const sessionId = match[1] + console.log('existing session detected', sessionId) + setupSession(sessionId) + } + } + }) + } catch (error) { + console.log(error) + console.error('Failed to restore sessions:', error) + } +} + +// Setup Session +const setupSession = (sessionId) => { + try { + if (sessions.has(sessionId)) { + return { success: false, message: `Session already exists for: ${sessionId}`, client: sessions.get(sessionId) } + } + + // Disable the delete folder from the logout function (will be handled separately) + const localAuth = new LocalAuth({ clientId: sessionId, dataPath: sessionFolderPath }) + delete localAuth.logout + localAuth.logout = () => { } + + const clientOptions = { + puppeteer: { + executablePath: chromeBin, + headless, + args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-gpu', '--disable-dev-shm-usage'] + }, + authStrategy: localAuth + } + + if (webVersion) { + clientOptions.webVersion = webVersion + switch (webVersionCacheType.toLowerCase()) { + case 'local': + clientOptions.webVersionCache = { + type: 'local' + } + break + case 'remote': + clientOptions.webVersionCache = { + type: 'remote', + remotePath: 'https://raw.githubusercontent.com/wppconnect-team/wa-version/main/html/' + webVersion + '.html' + } + break + default: + clientOptions.webVersionCache = { + type: 'none' + } + } + } + + const client = new Client(clientOptions) + + client.initialize().catch(err => console.log('Initialize error:', err.message)) + + initializeEvents(client, sessionId) + + // Save the session to the Map + sessions.set(sessionId, client) + return { success: true, message: 'Session initiated successfully', client } + } catch (error) { + return { success: false, message: error.message, client: null } + } +} + +const initializeEvents = (client, sessionId) => { + // check if the session webhook is overridden + const sessionWebhook = process.env[sessionId.toUpperCase() + '_WEBHOOK_URL'] || baseWebhookURL + + if (recoverSessions) { + waitForNestedObject(client, 'pupPage').then(() => { + const restartSession = async (sessionId) => { + sessions.delete(sessionId) + await client.destroy().catch(e => { }) + setupSession(sessionId) + } + client.pupPage.once('close', function () { + // emitted when the page closes + console.log(`Browser page closed for ${sessionId}. Restoring`) + restartSession(sessionId) + }) + client.pupPage.once('error', function () { + // emitted when the page crashes + console.log(`Error occurred on browser page for ${sessionId}. Restoring`) + restartSession(sessionId) + }) + }).catch(e => { }) + } + + checkIfEventisEnabled('auth_failure') + .then(_ => { + client.on('auth_failure', (msg) => { + triggerWebhook(sessionWebhook, sessionId, 'status', { msg }) + }) + }) + + checkIfEventisEnabled('authenticated') + .then(_ => { + client.on('authenticated', () => { + triggerWebhook(sessionWebhook, sessionId, 'authenticated') + }) + }) + + checkIfEventisEnabled('call') + .then(_ => { + client.on('call', async (call) => { + triggerWebhook(sessionWebhook, sessionId, 'call', { call }) + }) + }) + + checkIfEventisEnabled('change_state') + .then(_ => { + client.on('change_state', state => { + triggerWebhook(sessionWebhook, sessionId, 'change_state', { state }) + }) + }) + + checkIfEventisEnabled('disconnected') + .then(_ => { + client.on('disconnected', (reason) => { + triggerWebhook(sessionWebhook, sessionId, 'disconnected', { reason }) + }) + }) + + checkIfEventisEnabled('group_join') + .then(_ => { + client.on('group_join', (notification) => { + triggerWebhook(sessionWebhook, sessionId, 'group_join', { notification }) + }) + }) + + checkIfEventisEnabled('group_leave') + .then(_ => { + client.on('group_leave', (notification) => { + triggerWebhook(sessionWebhook, sessionId, 'group_leave', { notification }) + }) + }) + + checkIfEventisEnabled('group_update') + .then(_ => { + client.on('group_update', (notification) => { + triggerWebhook(sessionWebhook, sessionId, 'group_update', { notification }) + }) + }) + + checkIfEventisEnabled('loading_screen') + .then(_ => { + client.on('loading_screen', (percent, message) => { + triggerWebhook(sessionWebhook, sessionId, 'loading_screen', { percent, message }) + }) + }) + + checkIfEventisEnabled('media_uploaded') + .then(_ => { + client.on('media_uploaded', (message) => { + triggerWebhook(sessionWebhook, sessionId, 'media_uploaded', { message }) + }) + }) + + checkIfEventisEnabled('message') + .then(_ => { + client.on('message', async (message) => { + triggerWebhook(sessionWebhook, sessionId, 'message', { message }) + if (message.hasMedia && message._data?.size < maxAttachmentSize) { + // custom service event + checkIfEventisEnabled('media').then(_ => { + message.downloadMedia().then(messageMedia => { + triggerWebhook(sessionWebhook, sessionId, 'media', { messageMedia, message }) + }).catch(e => { + console.log('Download media error:', e.message) + }) + }) + } + if (setMessagesAsSeen) { + const chat = await message.getChat() + chat.sendSeen() + } + }) + }) + + checkIfEventisEnabled('message_ack') + .then(_ => { + client.on('message_ack', async (message, ack) => { + triggerWebhook(sessionWebhook, sessionId, 'message_ack', { message, ack }) + if (setMessagesAsSeen) { + const chat = await message.getChat() + chat.sendSeen() + } + }) + }) + + checkIfEventisEnabled('message_create') + .then(_ => { + client.on('message_create', async (message) => { + triggerWebhook(sessionWebhook, sessionId, 'message_create', { message }) + if (setMessagesAsSeen) { + const chat = await message.getChat() + chat.sendSeen() + } + }) + }) + + checkIfEventisEnabled('message_reaction') + .then(_ => { + client.on('message_reaction', (reaction) => { + triggerWebhook(sessionWebhook, sessionId, 'message_reaction', { reaction }) + }) + }) + + checkIfEventisEnabled('message_edit') + .then(_ => { + client.on('message_edit', (message, newBody, prevBody) => { + triggerWebhook(sessionWebhook, sessionId, 'message_edit', { message, newBody, prevBody }) + }) + }) + + checkIfEventisEnabled('message_ciphertext') + .then(_ => { + client.on('message_ciphertext', (message) => { + triggerWebhook(sessionWebhook, sessionId, 'message_ciphertext', { message }) + }) + }) + + checkIfEventisEnabled('message_revoke_everyone') + .then(_ => { + // eslint-disable-next-line camelcase + client.on('message_revoke_everyone', async (message) => { + // eslint-disable-next-line camelcase + triggerWebhook(sessionWebhook, sessionId, 'message_revoke_everyone', { message }) + }) + }) + + checkIfEventisEnabled('message_revoke_me') + .then(_ => { + client.on('message_revoke_me', async (message) => { + triggerWebhook(sessionWebhook, sessionId, 'message_revoke_me', { message }) + }) + }) + + client.on('qr', (qr) => { + // inject qr code into session + client.qr = qr + checkIfEventisEnabled('qr') + .then(_ => { + triggerWebhook(sessionWebhook, sessionId, 'qr', { qr }) + }) + }) + + checkIfEventisEnabled('ready') + .then(_ => { + client.on('ready', () => { + triggerWebhook(sessionWebhook, sessionId, 'ready') + }) + }) + + checkIfEventisEnabled('contact_changed') + .then(_ => { + client.on('contact_changed', async (message, oldId, newId, isContact) => { + triggerWebhook(sessionWebhook, sessionId, 'contact_changed', { message, oldId, newId, isContact }) + }) + }) + + checkIfEventisEnabled('chat_removed') + .then(_ => { + client.on('chat_removed', async (chat) => { + triggerWebhook(sessionWebhook, sessionId, 'chat_removed', { chat }) + }) + }) + + checkIfEventisEnabled('chat_archived') + .then(_ => { + client.on('chat_archived', async (chat, currState, prevState) => { + triggerWebhook(sessionWebhook, sessionId, 'chat_archived', { chat, currState, prevState }) + }) + }) + + checkIfEventisEnabled('unread_count') + .then(_ => { + client.on('unread_count', async (chat) => { + triggerWebhook(sessionWebhook, sessionId, 'unread_count', { chat }) + }) + }) +} + +// Function to delete client session folder +const deleteSessionFolder = async (sessionId) => { + try { + const targetDirPath = path.join(sessionFolderPath, `session-${sessionId}`) + const resolvedTargetDirPath = await fs.promises.realpath(targetDirPath) + const resolvedSessionPath = await fs.promises.realpath(sessionFolderPath) + + // Ensure the target directory path ends with a path separator + const safeSessionPath = `${resolvedSessionPath}${path.sep}` + + // Validate the resolved target directory path is a subdirectory of the session folder path + if (!resolvedTargetDirPath.startsWith(safeSessionPath)) { + throw new Error('Invalid path: Directory traversal detected') + } + await fs.promises.rm(resolvedTargetDirPath, { recursive: true, force: true }) + } catch (error) { + console.log('Folder deletion error', error) + throw error + } +} + +// Function to reload client session without removing browser cache +const reloadSession = async (sessionId) => { + try { + const client = sessions.get(sessionId) + if (!client) { + return + } + client.pupPage?.removeAllListeners('close') + client.pupPage?.removeAllListeners('error') + try { + const pages = await client.pupBrowser.pages() + await Promise.all(pages.map((page) => page.close())) + await Promise.race([ + client.pupBrowser.close(), + new Promise(resolve => setTimeout(resolve, 5000)) + ]) + } catch (e) { + const childProcess = client.pupBrowser.process() + if (childProcess) { + childProcess.kill(9) + } + } + sessions.delete(sessionId) + setupSession(sessionId) + } catch (error) { + console.log(error) + throw error + } +} + +const deleteSession = async (sessionId, validation) => { + try { + const client = sessions.get(sessionId) + if (!client) { + return + } + client.pupPage?.removeAllListeners('close') + client.pupPage?.removeAllListeners('error') + if (validation.success) { + // Client Connected, request logout + console.log(`Logging out session ${sessionId}`) + await client.logout() + } else if (validation.message === 'session_not_connected') { + // Client not Connected, request destroy + console.log(`Destroying session ${sessionId}`) + await client.destroy() + } + // Wait 10 secs for client.pupBrowser to be disconnected before deleting the folder + let maxDelay = 0 + while (client.pupBrowser.isConnected() && (maxDelay < 10)) { + await new Promise(resolve => setTimeout(resolve, 1000)) + maxDelay++ + } + await deleteSessionFolder(sessionId) + sessions.delete(sessionId) + } catch (error) { + console.log(error) + throw error + } +} + +// Function to handle session flush +const flushSessions = async (deleteOnlyInactive) => { + try { + // Read the contents of the sessions folder + const files = await fs.promises.readdir(sessionFolderPath) + // Iterate through the files in the parent folder + for (const file of files) { + // Use regular expression to extract the string from the folder name + const match = file.match(/^session-(.+)$/) + if (match) { + const sessionId = match[1] + const validation = await validateSession(sessionId) + if (!deleteOnlyInactive || !validation.success) { + await deleteSession(sessionId, validation) + } + } + } + } catch (error) { + console.log(error) + throw error + } +} + +module.exports = { + sessions, + setupSession, + restoreSessions, + validateSession, + deleteSession, + reloadSession, + flushSessions +} diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..8943a42 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,46 @@ +const axios = require('axios') +const { globalApiKey, disabledCallbacks } = require('./config') + +// Trigger webhook endpoint +const triggerWebhook = (webhookURL, sessionId, dataType, data) => { + axios.post(webhookURL, { dataType, data, sessionId }, { headers: { 'x-api-key': globalApiKey } }) + .catch(error => console.error('Failed to send new message webhook:', sessionId, dataType, error.message, data || '')) +} + +// Function to send a response with error status and message +const sendErrorResponse = (res, status, message) => { + res.status(status).json({ success: false, error: message }) +} + +// Function to wait for a specific item not to be null +const waitForNestedObject = (rootObj, nestedPath, maxWaitTime = 10000, interval = 100) => { + const start = Date.now() + return new Promise((resolve, reject) => { + const checkObject = () => { + const nestedObj = nestedPath.split('.').reduce((obj, key) => obj ? obj[key] : undefined, rootObj) + if (nestedObj) { + // Nested object exists, resolve the promise + resolve() + } else if (Date.now() - start > maxWaitTime) { + // Maximum wait time exceeded, reject the promise + console.log('Timed out waiting for nested object') + reject(new Error('Timeout waiting for nested object')) + } else { + // Nested object not yet created, continue waiting + setTimeout(checkObject, interval) + } + } + checkObject() + }) +} + +const checkIfEventisEnabled = (event) => { + return new Promise((resolve, reject) => { if (!disabledCallbacks.includes(event)) { resolve() } }) +} + +module.exports = { + triggerWebhook, + sendErrorResponse, + waitForNestedObject, + checkIfEventisEnabled +} diff --git a/swagger.js b/swagger.js new file mode 100644 index 0000000..733704d --- /dev/null +++ b/swagger.js @@ -0,0 +1,80 @@ +const swaggerAutogen = require('swagger-autogen')({ openapi: '3.0.0', autoBody: false }) + +const outputFile = './swagger.json' +const endpointsFiles = ['./src/routes.js'] + +const doc = { + info: { + title: 'WWebJS API', + description: 'API wrapper for WhatsAppWebJS' + }, + servers: [ + { + url: '', + description: '' + }, + { + url: 'http://localhost:3000', + description: 'localhost' + } + ], + securityDefinitions: { + apiKeyAuth: { + type: 'apiKey', + in: 'header', + name: 'x-api-key' + } + }, + produces: ['application/json'], + tags: [ + { + name: 'Session', + description: 'Handling multiple sessions logic, creation and deletion' + }, + { + name: 'Client', + description: 'All functions related to the client' + }, + { + name: 'Message', + description: 'May fail if the message is too old (Only from the last 100 Messages of the given chat)' + } + ], + definitions: { + StartSessionResponse: { + success: true, + message: 'Session initiated successfully' + }, + StatusSessionResponse: { + success: true, + state: 'CONNECTED', + message: 'session_connected' + }, + RestartSessionResponse: { + success: true, + message: 'Restarted successfully' + }, + TerminateSessionResponse: { + success: true, + message: 'Logged out successfully' + }, + TerminateSessionsResponse: { + success: true, + message: 'Flush completed successfully' + }, + ErrorResponse: { + success: false, + error: 'Some server error' + }, + NotFoundResponse: { + success: false, + error: 'Some server error' + }, + ForbiddenResponse: { + success: false, + error: 'Invalid API key' + } + } +} + +swaggerAutogen(outputFile, endpointsFiles, doc) diff --git a/swagger.json b/swagger.json new file mode 100644 index 0000000..70c34e0 --- /dev/null +++ b/swagger.json @@ -0,0 +1,7643 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "WWebJS API", + "description": "API wrapper for WhatsAppWebJS", + "version": "1.0.0" + }, + "servers": [ + { + "url": "", + "description": "" + }, + { + "url": "http://localhost:3000", + "description": "localhost" + } + ], + "tags": [ + { + "name": "Session", + "description": "Handling multiple sessions logic, creation and deletion" + }, + { + "name": "Client", + "description": "All functions related to the client" + }, + { + "name": "Message", + "description": "May fail if the message is too old (Only from the last 100 Messages of the given chat)" + } + ], + "paths": { + "/ping": { + "get": { + "tags": [ + "Various" + ], + "description": "", + "responses": { + "200": { + "description": "OK" + } + } + } + }, + "/localCallbackExample": { + "post": { + "tags": [ + "Various" + ], + "description": "", + "parameters": [ + { + "name": "x-api-key", + "in": "header", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/start/{sessionId}": { + "get": { + "tags": [ + "Session" + ], + "summary": "Start new session", + "description": "Starts a session for the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "Status of the initiated session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StartSessionResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/status/{sessionId}": { + "get": { + "tags": [ + "Session" + ], + "summary": "Get session status", + "description": "Status of the session with the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "Status of the session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StatusSessionResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/qr/{sessionId}": { + "get": { + "tags": [ + "Session" + ], + "summary": "Get session QR code", + "description": "QR code of the session with the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/qr/{sessionId}/image": { + "get": { + "tags": [ + "Session" + ], + "summary": "Get session QR code as image", + "description": "QR code as image of the session with the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "QR image.", + "content": { + "image/png": {} + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/restart/{sessionId}": { + "get": { + "tags": [ + "Session" + ], + "summary": "Restart session", + "description": "Restarts the session with the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "Sessions restarted.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RestartSessionResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/terminate/{sessionId}": { + "get": { + "tags": [ + "Session" + ], + "summary": "Terminate session", + "description": "Terminates the session with the given session ID.", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "Sessions terminated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TerminateSessionResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/terminateInactive": { + "get": { + "tags": [ + "Session" + ], + "summary": "Terminate inactive sessions", + "description": "Terminates all inactive sessions.", + "responses": { + "200": { + "description": "Sessions terminated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TerminateSessionsResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/session/terminateAll": { + "get": { + "tags": [ + "Session" + ], + "summary": "Terminate all sessions", + "description": "Terminates all sessions.", + "responses": { + "200": { + "description": "Sessions terminated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TerminateSessionsResponse" + } + } + } + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "500": { + "description": "Server Failure.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/getClassInfo/{sessionId}": { + "get": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/acceptInvite/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inviteCode": { + "type": "string", + "description": "Invitation code", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "inviteCode": { + "type": "string", + "description": "Invitation code", + "example": "" + } + } + } + } + } + } + } + }, + "/client/archiveChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/createGroup/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/getBlockedContacts/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/getChatById/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getChatLabels/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getChats/{sessionId}": { + "get": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/getChatsByLabelId/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "labelId": { + "type": "string", + "description": "ID of the label", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "labelId": { + "type": "string", + "description": "ID of the label", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getCommonGroups/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The whatsapp user's ID (_serialized format)", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The whatsapp user's ID (_serialized format)", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getContactById/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The whatsapp user's ID", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The whatsapp user's ID", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getContacts/{sessionId}": { + "get": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/getInviteInfo/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "inviteCode": { + "type": "string", + "description": "Invitation code", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "inviteCode": { + "type": "string", + "description": "Invitation code", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getLabelById/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "labelId": { + "type": "string", + "description": "ID of the label", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "labelId": { + "type": "string", + "description": "ID of the label", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getLabels/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/addOrRemoveLabels/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "labelIds": { + "type": "array", + "description": "Array of label IDs", + "example": [] + }, + "chatIds": { + "type": "array", + "description": "Array of chat IDs", + "example": [] + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "labelIds": { + "type": "array", + "description": "Array of label IDs", + "example": [] + }, + "chatIds": { + "type": "array", + "description": "Array of chat IDs", + "example": [] + } + } + } + } + } + } + } + }, + "/client/getNumberId/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The number or ID ('@c.us' will be automatically appended if not specified)", + "example": "6281288888888" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The number or ID ('@c.us' will be automatically appended if not specified)", + "example": "6281288888888" + } + } + } + } + } + } + } + }, + "/client/isRegisteredUser/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The number or ID ('@c.us' will be automatically appended if not specified)", + "example": "6281288888888" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "number": { + "type": "string", + "description": "The number or ID ('@c.us' will be automatically appended if not specified)", + "example": "6281288888888" + } + } + } + } + } + } + } + }, + "/client/getProfilePicUrl/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The contact ID's of profile", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "The contact ID's of profile", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/client/getState/{sessionId}": { + "get": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/markChatUnread/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/muteChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + }, + "unmuteDate": { + "type": "string", + "description": "Date when the chat will be muted, leave as is to mute forever", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + }, + "unmuteDate": { + "type": "string", + "description": "Date when the chat will be muted, leave as is to mute forever", + "example": "" + } + } + } + } + } + } + } + }, + "/client/pinChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/searchMessages/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Search string", + "example": "" + }, + "options": { + "type": "object", + "description": "Search options", + "example": {} + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Search string", + "example": "" + }, + "options": { + "type": "object", + "description": "Search options", + "example": {} + } + } + } + } + } + } + } + }, + "/client/sendMessage/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message (Group or Individual)" + }, + "contentType": { + "type": "string", + "description": "The type of message content, must be one of the following: string, MessageMedia, MessageMediaFromURL, Location, Buttons, or List" + }, + "content": { + "type": "object", + "description": "The content of the message, can be a string or an object" + }, + "options": { + "type": "object", + "description": "The message send options" + } + } + }, + "examples": { + "string": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "string", + "content": "Hello World!" + } + }, + "MessageMedia": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "MessageMedia", + "content": { + "mimetype": "image/jpeg", + "data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=", + "filename": "image.jpg" + } + } + }, + "MessageMediaFromURL": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "MessageMediaFromURL", + "content": "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=Example" + } + }, + "Location": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "Location", + "content": { + "latitude": -6.2, + "longitude": 106.8, + "description": "Jakarta" + } + } + }, + "Buttons": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "Buttons", + "content": { + "body": "Hello World!", + "buttons": [ + { + "body": "button 1" + } + ], + "title": "Hello World!", + "footer": "Hello World!" + } + } + }, + "List": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "List", + "content": { + "body": "Hello World!", + "buttonText": "Hello World!", + "sections": [ + { + "title": "sectionTitle", + "rows": [ + { + "id": "customId", + "title": "ListItem2", + "description": "desc" + }, + { + "title": "ListItem2" + } + ] + } + ], + "title": "Hello World!", + "footer": "Hello World!" + } + } + }, + "Contact": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "Contact", + "content": { + "contactId": "6281288888889@c.us" + } + } + }, + "Poll": { + "value": { + "chatId": "6281288888888@c.us", + "contentType": "Poll", + "content": { + "pollName": "Cats or Dogs?", + "pollOptions": [ + "Cats", + "Dogs" + ], + "options": { + "allowMultipleAnswers": true + } + } + } + } + } + } + } + } + } + }, + "/client/sendPresenceAvailable/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/sendPresenceUnavailable/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/client/sendSeen/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/setDisplayName/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "New display name", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "New display name", + "example": "" + } + } + } + } + } + } + } + }, + "/client/setProfilePicture/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "pictureMimetype": { + "type": "string", + "description": "The mimetype of the picture to set as the profile picture for the user WhatsApp account.", + "example": "image/png" + }, + "pictureData": { + "type": "string", + "description": "The base64 data of the picture to set as the profile picture for the user WhatsApp account.", + "example": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX +/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "pictureMimetype": { + "type": "string", + "description": "The mimetype of the picture to set as the profile picture for the user WhatsApp account.", + "example": "image/png" + }, + "pictureData": { + "type": "string", + "description": "The base64 data of the picture to set as the profile picture for the user WhatsApp account.", + "example": "iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX +/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=" + } + } + } + } + } + } + } + }, + "/client/setStatus/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "New status message", + "example": "I'm running WhatsApp Web Api" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "New status message", + "example": "I'm running WhatsApp Web Api" + } + } + } + } + } + } + } + }, + "/client/unarchiveChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/unmuteChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/unpinChat/{sessionId}": { + "post": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "ID of the chat", + "example": "" + } + } + } + } + } + } + } + }, + "/client/getWWebVersion/{sessionId}": { + "get": { + "tags": [ + "Client" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ] + } + }, + "/chat/getClassInfo/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/clearMessages/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/clearState/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/delete/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/fetchMessages/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + }, + "searchOptions": { + "type": "object", + "description": "Search options for fetching messages", + "example": "{}" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + }, + "searchOptions": { + "type": "object", + "description": "Search options for fetching messages", + "example": "{}" + } + } + } + } + } + } + } + }, + "/chat/getContact/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/sendStateRecording/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/chat/sendStateTyping/{sessionId}": { + "post": { + "tags": [ + "Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/getClassInfo/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/addParticipants/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/demoteParticipants/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/getInviteCode/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/leave/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/promoteParticipants/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/removeParticipants/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/revokeInvite/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/setDescription/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/setInfoAdminsOnly/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/setMessagesAdminsOnly/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/setSubject/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/setPicture/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/groupChat/deletePicture/{sessionId}": { + "post": { + "tags": [ + "Group Chat" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "Unique whatsApp identifier for the given Chat (either group or personnal)", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/message/getClassInfo/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/delete/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/downloadMedia/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/forward/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/getInfo/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/getMentions/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/getOrder/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/getPayment/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/getQuotedMessage/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/react/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/reply/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/star/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/message/unstar/{sessionId}": { + "post": { + "tags": [ + "Message" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "chatId": { + "type": "string", + "description": "The Chat id which contains the message", + "example": "6281288888888@c.us" + }, + "messageId": { + "type": "string", + "description": "Unique whatsApp identifier for the message", + "example": "ABCDEF999999999" + } + } + } + } + } + } + } + }, + "/contact/getClassInfo/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/block/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/getAbout/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/getChat/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/unblock/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/getFormattedNumber/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/getCountryCode/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + }, + "/contact/getProfilePicUrl/{sessionId}": { + "post": { + "tags": [ + "Contact" + ], + "description": "", + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the session (alphanumeric and - allowed)", + "example": "f8377d8d-a589-4242-9ba6-9486a04ef80c" + } + ], + "responses": { + "200": { + "description": "OK" + }, + "403": { + "description": "Forbidden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenResponse" + } + } + } + }, + "404": { + "description": "Not Found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotFoundResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security": [ + { + "apiKeyAuth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + }, + "application/xml": { + "schema": { + "type": "object", + "properties": { + "contactId": { + "type": "string", + "description": "Unique whatsApp identifier for the contact", + "example": "6281288888888@c.us" + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "StartSessionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Session initiated successfully" + } + }, + "xml": { + "name": "StartSessionResponse" + } + }, + "StatusSessionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + }, + "state": { + "type": "string", + "example": "CONNECTED" + }, + "message": { + "type": "string", + "example": "session_connected" + } + }, + "xml": { + "name": "StatusSessionResponse" + } + }, + "RestartSessionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Restarted successfully" + } + }, + "xml": { + "name": "RestartSessionResponse" + } + }, + "TerminateSessionResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Logged out successfully" + } + }, + "xml": { + "name": "TerminateSessionResponse" + } + }, + "TerminateSessionsResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + }, + "message": { + "type": "string", + "example": "Flush completed successfully" + } + }, + "xml": { + "name": "TerminateSessionsResponse" + } + }, + "ErrorResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Some server error" + } + }, + "xml": { + "name": "ErrorResponse" + } + }, + "NotFoundResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Some server error" + } + }, + "xml": { + "name": "NotFoundResponse" + } + }, + "ForbiddenResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": false + }, + "error": { + "type": "string", + "example": "Invalid API key" + } + }, + "xml": { + "name": "ForbiddenResponse" + } + } + }, + "securitySchemes": { + "apiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "x-api-key" + } + } + } +} \ No newline at end of file diff --git a/tests/api.test.js b/tests/api.test.js new file mode 100644 index 0000000..f1fef6f --- /dev/null +++ b/tests/api.test.js @@ -0,0 +1,143 @@ +const request = require('supertest') +const fs = require('fs') + +// Mock your application's environment variables +process.env.API_KEY = 'test_api_key' +process.env.SESSIONS_PATH = './sessions_test' +process.env.ENABLE_LOCAL_CALLBACK_EXAMPLE = 'TRUE' +process.env.BASE_WEBHOOK_URL = 'http://localhost:3000/localCallbackExample' + +const app = require('../src/app') +jest.mock('qrcode-terminal') + +let server +beforeAll(() => { + server = app.listen(3000) +}) + +beforeEach(async () => { + if (fs.existsSync('./sessions_test/message_log.txt')) { + fs.writeFileSync('./sessions_test/message_log.txt', '') + } +}) + +afterAll(() => { + server.close() + fs.rmSync('./sessions_test', { recursive: true, force: true }) +}) + +// Define test cases +describe('API health checks', () => { + it('should return valid healthcheck', async () => { + const response = await request(app).get('/ping') + expect(response.status).toBe(200) + expect(response.body).toEqual({ message: 'pong', success: true }) + }) + + it('should return a valid callback', async () => { + const response = await request(app).post('/localCallbackExample') + .set('x-api-key', 'test_api_key') + .send({ sessionId: '1', dataType: 'testDataType', data: 'testData' }) + expect(response.status).toBe(200) + expect(response.body).toEqual({ success: true }) + + expect(fs.existsSync('./sessions_test/message_log.txt')).toBe(true) + expect(fs.readFileSync('./sessions_test/message_log.txt', 'utf-8')).toEqual('{"sessionId":"1","dataType":"testDataType","data":"testData"}\r\n') + }) +}) + +describe('API Authentication Tests', () => { + it('should return 403 Forbidden for invalid API key', async () => { + const response = await request(app).get('/session/start/1') + expect(response.status).toBe(403) + expect(response.body).toEqual({ success: false, error: 'Invalid API key' }) + }) + + it('should fail invalid sessionId', async () => { + const response = await request(app).get('/session/start/ABCD1@').set('x-api-key', 'test_api_key') + expect(response.status).toBe(422) + expect(response.body).toEqual({ success: false, error: 'Session should be alphanumerical or -' }) + }) + + it('should setup and terminate a client session', async () => { + const response = await request(app).get('/session/start/1').set('x-api-key', 'test_api_key') + expect(response.status).toBe(200) + expect(response.body).toEqual({ success: true, message: 'Session initiated successfully' }) + expect(fs.existsSync('./sessions_test/session-1')).toBe(true) + + const response2 = await request(app).get('/session/terminate/1').set('x-api-key', 'test_api_key') + expect(response2.status).toBe(200) + expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' }) + + expect(fs.existsSync('./sessions_test/session-1')).toBe(false) + }, 10000) + + it('should setup and flush multiple client sessions', async () => { + const response = await request(app).get('/session/start/2').set('x-api-key', 'test_api_key') + expect(response.status).toBe(200) + expect(response.body).toEqual({ success: true, message: 'Session initiated successfully' }) + expect(fs.existsSync('./sessions_test/session-2')).toBe(true) + + const response2 = await request(app).get('/session/start/3').set('x-api-key', 'test_api_key') + expect(response2.status).toBe(200) + expect(response2.body).toEqual({ success: true, message: 'Session initiated successfully' }) + expect(fs.existsSync('./sessions_test/session-3')).toBe(true) + + const response3 = await request(app).get('/session/terminateInactive').set('x-api-key', 'test_api_key') + expect(response3.status).toBe(200) + expect(response3.body).toEqual({ success: true, message: 'Flush completed successfully' }) + + expect(fs.existsSync('./sessions_test/session-2')).toBe(false) + expect(fs.existsSync('./sessions_test/session-3')).toBe(false) + }, 10000) +}) + +describe('API Action Tests', () => { + it('should setup, create at least a QR, and terminate a client session', async () => { + const response = await request(app).get('/session/start/4').set('x-api-key', 'test_api_key') + expect(response.status).toBe(200) + expect(response.body).toEqual({ success: true, message: 'Session initiated successfully' }) + expect(fs.existsSync('./sessions_test/session-4')).toBe(true) + + // Wait for message_log.txt to not be empty + const result = await waitForFileNotToBeEmpty('./sessions_test/message_log.txt') + .then(() => { return true }) + .catch(() => { return false }) + expect(result).toBe(true) + + // Verify the message content + const expectedMessage = { + dataType: 'qr', + data: expect.objectContaining({ qr: expect.any(String) }), + sessionId: '4' + } + expect(JSON.parse(fs.readFileSync('./sessions_test/message_log.txt', 'utf-8'))).toEqual(expectedMessage) + + const response2 = await request(app).get('/session/terminate/4').set('x-api-key', 'test_api_key') + expect(response2.status).toBe(200) + expect(response2.body).toEqual({ success: true, message: 'Logged out successfully' }) + expect(fs.existsSync('./sessions_test/session-4')).toBe(false) + }, 15000) +}) + +// Function to wait for a specific item to be equal a specific value +const waitForFileNotToBeEmpty = (filePath, maxWaitTime = 10000, interval = 100) => { + const start = Date.now() + return new Promise((resolve, reject) => { + const checkObject = () => { + const filecontent = fs.readFileSync(filePath, 'utf-8') + if (filecontent !== '') { + // Nested object exists, resolve the promise + resolve() + } else if (Date.now() - start > maxWaitTime) { + // Maximum wait time exceeded, reject the promise + console.log('Timed out waiting for nested object') + reject(new Error('Timeout waiting for nested object')) + } else { + // Nested object not yet created, continue waiting + setTimeout(checkObject, interval) + } + } + checkObject() + }) +}

    #dSz<6GZ1QRg#j{cmco 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�+ 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