├── .env ├── .eslintrc.js ├── .github └── workflows │ └── run.yml ├── .gitignore ├── LICENSE ├── README.md ├── accounts.js ├── image ├── accounts.jpg ├── action.png ├── env.png ├── fork.png ├── group.jpg ├── local.png ├── push.png └── wxpusher.jpg ├── package.json ├── src ├── accounts.js ├── app.js ├── family.js └── sendNotify.js └── yarn.lock /.env: -------------------------------------------------------------------------------- 1 | TY_ACCOUNTS=[{"userName":"userName","password":"password"}] 2 | # Server 3 | SENDKEY= 4 | #Telegram 5 | TELEGRAM_BOT_TOKEN= 6 | TELEGRAM_CHAT_ID= 7 | #WecomBot 8 | WECOM_BOT_KEY= 9 | WECOM_BOT_TELPHONE= 10 | #WxPusher 11 | WX_PUSHER_APP_TOKEN= 12 | WX_PUSHER_UID= -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | node: true, 4 | }, 5 | extends: 'airbnb-base', 6 | overrides: [ 7 | ], 8 | parserOptions: { 9 | ecmaVersion: 'latest', 10 | }, 11 | rules: { 12 | 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /.github/workflows/run.yml: -------------------------------------------------------------------------------- 1 | name: Cloud check in action 2 | on: 3 | push: 4 | branches: 5 | - main 6 | - dev 7 | watch: 8 | types: started 9 | workflow_dispatch: 10 | schedule: 11 | - cron: '0 3,21 * * *' 12 | jobs: 13 | build-and-deploy-19071507010: 14 | runs-on: ubuntu-latest 15 | environment: 19071507010 16 | steps: 17 | - uses: actions/checkout@main 18 | 19 | - name: Setup Node.js environment 20 | uses: actions/setup-node@main 21 | with: 22 | node-version: 18 23 | 24 | - name: init secrets 25 | uses: shine1594/secrets-to-env-action@master 26 | with: 27 | secrets: ${{ toJSON(secrets) }} 28 | secrets_env: production 29 | prefix_prod: "" 30 | file_name_prod: .env 31 | 32 | - name: init 33 | run: npm install 34 | 35 | - name: run 36 | id: run 37 | uses: nick-fields/retry@master 38 | with: 39 | timeout_minutes: 50 40 | max_attempts: 3 41 | command: npm start 42 | 43 | - name: Keep Running 44 | run: | 45 | git config --local user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" 46 | git config --local user.name "${{ github.actor }}" 47 | git remote set-url origin https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }} 48 | git pull --rebase --autostash 49 | git commit --allow-empty -m "Keep Running..." 50 | git push 51 | 52 | - name: Delete old workflow run 53 | uses: Mattraks/delete-workflow-runs@main 54 | with: 55 | token: ${{ github.token }} 56 | repository: ${{ github.repository }} 57 | retain_days: 0 58 | keep_minimum_runs: 50 59 | 60 | build-and-deploy-bing7027: 61 | runs-on: ubuntu-latest 62 | environment: bing7027 63 | steps: 64 | - uses: actions/checkout@main 65 | 66 | - name: Setup Node.js environment 67 | uses: actions/setup-node@main 68 | with: 69 | node-version: 18 70 | 71 | - name: init secrets 72 | uses: shine1594/secrets-to-env-action@master 73 | with: 74 | secrets: ${{ toJSON(secrets) }} 75 | secrets_env: production 76 | prefix_prod: "" 77 | file_name_prod: .env 78 | 79 | - name: init 80 | run: npm install 81 | 82 | - name: run 83 | id: run 84 | uses: nick-fields/retry@master 85 | with: 86 | timeout_minutes: 50 87 | max_attempts: 3 88 | command: npm start 89 | 90 | - name: Keep Running 91 | run: | 92 | git config --local user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" 93 | git config --local user.name "${{ github.actor }}" 94 | git remote set-url origin https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }} 95 | git pull --rebase --autostash 96 | git commit --allow-empty -m "Keep Running..." 97 | git push 98 | 99 | - name: Delete old workflow run 100 | uses: Mattraks/delete-workflow-runs@main 101 | with: 102 | token: ${{ github.token }} 103 | repository: ${{ github.repository }} 104 | retain_days: 0 105 | keep_minimum_runs: 50 106 | 107 | build-and-deploy-user: 108 | runs-on: ubuntu-latest 109 | environment: user 110 | steps: 111 | - uses: actions/checkout@main 112 | 113 | - name: Setup Node.js environment 114 | uses: actions/setup-node@main 115 | with: 116 | node-version: 18 117 | 118 | - name: init secrets 119 | uses: shine1594/secrets-to-env-action@master 120 | with: 121 | secrets: ${{ toJSON(secrets) }} 122 | secrets_env: production 123 | prefix_prod: "" 124 | file_name_prod: .env 125 | 126 | - name: init 127 | run: npm install 128 | 129 | - name: run 130 | id: run 131 | uses: nick-fields/retry@master 132 | with: 133 | timeout_minutes: 50 134 | max_attempts: 3 135 | command: npm start 136 | 137 | - name: Keep Running 138 | run: | 139 | git config --local user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" 140 | git config --local user.name "${{ github.actor }}" 141 | git remote set-url origin https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }} 142 | git pull --rebase --autostash 143 | git commit --allow-empty -m "Keep Running..." 144 | git push 145 | 146 | - name: Delete old workflow run 147 | uses: Mattraks/delete-workflow-runs@main 148 | with: 149 | token: ${{ github.token }} 150 | repository: ${{ github.repository }} 151 | retain_days: 0 152 | keep_minimum_runs: 50 153 | 154 | 155 | build-and-deploy-4: 156 | runs-on: ubuntu-latest 157 | environment: 4 158 | steps: 159 | - uses: actions/checkout@main 160 | 161 | - name: Setup Node.js environment 162 | uses: actions/setup-node@main 163 | with: 164 | node-version: 18 165 | 166 | - name: init secrets 167 | uses: shine1594/secrets-to-env-action@master 168 | with: 169 | secrets: ${{ toJSON(secrets) }} 170 | secrets_env: production 171 | prefix_prod: "" 172 | file_name_prod: .env 173 | 174 | - name: init 175 | run: npm install 176 | 177 | - name: run 178 | id: run 179 | uses: nick-fields/retry@master 180 | with: 181 | timeout_minutes: 50 182 | max_attempts: 3 183 | command: npm start 184 | 185 | - name: Keep Running 186 | run: | 187 | git config --local user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com" 188 | git config --local user.name "${{ github.actor }}" 189 | git remote set-url origin https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }} 190 | git pull --rebase --autostash 191 | git commit --allow-empty -m "Keep Running..." 192 | git push 193 | 194 | - name: Delete old workflow run 195 | uses: Mattraks/delete-workflow-runs@main 196 | with: 197 | token: ${{ github.token }} 198 | repository: ${{ github.repository }} 199 | retain_days: 0 200 | keep_minimum_runs: 50 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | package-lock.json 8 | tests/**/coverage/ 9 | 10 | # Editor directories and files 11 | .idea 12 | .vscode 13 | *.suo 14 | *.ntvs* 15 | *.njsproj 16 | *.sln 17 | 18 | cheese.log 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 WesLin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ☁ **天翼云盘签到脚本** 🤖✨ 2 | 3 | --- 4 | 5 | ### 🔑 账号配置 & 环境变量 6 | **路径**: `Settings` → `Secrets and variables` → `Actions` → `Variables` → `Environment variables` 7 | 8 | 在这里新建一个 `user` 9 | 10 | 在`Environment secrets`这里添加以下变量 11 | | 变量名🐈 | 说明 📌 | 示例 🖼️ | 12 | |----------------------|-----------------------------------------------------------------------|-------------------------| 13 | | `TY_ACCOUNTS` | 账号密码组合,格式:`[{"userName":"账号","password":"密码"},...]` | `[{"userName":"u1","password":"p1"},{"userName":"u2","password":"p2"}]` | 14 | | `EXEC_THRESHOLD` | 个人云和家庭云签到线程数(不填或者默认1就行,默认主号签到一次,小号签到10次) | `1` | 15 | | `FAMILYID` | 家庭云ID抓取教程:[Alist文档](https://alist.nn.ci/zh/guide/drivers/189.html#%E5%AE%B6%E5%BA%AD%E8%BD%AC%E7%A7%BB) | `123456` | 16 | | `WXPUSHER_UIDS` | 微信推送UID(扫码获取)[二维码](https://wxpusher.zjiecode.com/api/qrcode/4Ix7noqD3L7DMBoSlvig3t4hqjFWzPkdHqAYsg8IzkPreW7d8uGUHi9LJO4EcyJg.jpg) | `UID_123` | 17 | | `WXPUSHER_APP_TOKEN` | # wxpusher 的 appToken 官方文档: https://wxpusher.zjiecode.com/docs/ 管理后台: https://wxpusher.zjiecode.com/admin/(https://wxpusher.zjiecode.com/api/qrcode/4Ix7noqD3L7DMBoSlvig3t4hqjFWzPkdHqAYsg8IzkPreW7d8uGUHi9LJO4EcyJg.jpg) | `` | 18 | 19 | --- 20 | **如果EXEC_THRESHOLD不设置。或者设置为1。就主号签到一次个人跟家庭。其他号签到10次家庭。不签到个人。如果EXEC_THRESHOLD设置其他数字。所有号个人签到EXEC_THRESHOLD次数。家庭签到EXEC_THRESHOLD次数。TY_ACCOUNTS账密。跟群主格式一致FAMILYID家庭IDEXEC_THRESHOLD线程。不设置默认保号模式PUSH_PLUS_TOKEN推送 21 | ### 🚀 快速执行指南 22 | 1️⃣ **启用Workflow** 23 | ✅ 点击仓库顶部 `操作` → **`I understand my workflows, go ahead 和 enable them`** 24 | 25 | 2️⃣ **触发运行** 26 | 🌟 给仓库点 **星标** 立即执行 27 | 28 | 3️⃣ **定时任务** 29 | ⏰ 每日 **北京时间 5:00** 自动签到 30 | 31 | --- 32 | 33 | ### 🐉 青龙面板部署 34 | ```bash 35 | ql repo https://github.com/Aijiaobin/Cloud189Checkin.git "src|.env" "image" "src|.eslintrc.js|accounts.js|config.js|serverChan.js|telegramBot.js|wecomBot.js|wxPusher.js|.env" "main" "js" "rm -rf /ql/data/repo/wes-lin_Cloud189Checkin" 36 | ``` 37 | 38 | --- 39 | # 通知服务配置说明 40 | 41 | ## GOTIFY 通知 42 | - **GOTIFY_URL**:Gotify 地址(如 `https://push.example.de:8080`) 43 | - **GOTIFY_TOKEN**:Gotify 的消息应用 Token 44 | - **GOTIFY_PRIORITY**:推送消息优先级(默认 `0`) 45 | 46 | --- 47 | 48 | ## go-cqhttp 通知 49 | - **GOBOT_URL**:请求地址 50 | - 推送到个人 QQ:`http://127.0.0.1/send_private_msg` 51 | - 推送到群:`http://127.0.0.1/send_group_msg` 52 | - **GOBOT_TOKEN**:go-cqhttp 配置的访问密钥 53 | - **GOBOT_QQ**: 54 | - 若 `GOBOT_URL` 为 `/send_private_msg`,填写 `user_id=个人QQ` 55 | - 若为 `/send_group_msg`,填写 `group_id=QQ群` 56 | 57 | --- 58 | 59 | ## 微信 Server 酱通知 60 | - **PUSH_KEY**:申请的 SCKEY 61 | 62 | --- 63 | 64 | ## PushDeer 通知 65 | - **DEER_KEY**:PushDeer 的 KEY 66 | - **DEER_URL**:PushDeer 的 URL(可选,默认 `https://api2.pushdeer.com/message/push`) 67 | 68 | --- 69 | 70 | ## Synology Chat 通知 71 | - **CHAT_URL**:申请的 CHAT_URL 72 | - **CHAT_TOKEN**:申请的 CHAT_TOKEN 73 | 74 | --- 75 | 76 | ## Bark App 通知 77 | - **BARK_PUSH**:Bark 推送地址(如 `https://api.day.app/XXXXXXXX`) 78 | - **BARK_ICON**:推送图标(仅 iOS15+ 生效) 79 | - **BARK_SOUND**:推送铃声 80 | - **BARK_GROUP**:消息分组(默认 `QingLong`) 81 | 82 | --- 83 | 84 | ## Telegram 机器人通知 85 | - **TG_BOT_TOKEN**:Telegram Bot 的 Token 86 | - **TG_USER_ID**:接收消息用户的 ID 87 | - **TG_PROXY_HOST**:HTTP 代理主机地址 88 | - **TG_PROXY_PORT**:HTTP 代理端口号 89 | - **TG_PROXY_AUTH**:代理认证参数 90 | - **TG_API_HOST**:Telegram API 反向代理地址(默认 `api.telegram.org`) 91 | 92 | --- 93 | 94 | ## 钉钉机器人通知 95 | - **DD_BOT_TOKEN**:钉钉机器人 Webhook 96 | - **DD_BOT_SECRET**:加签密钥(以 `SEC` 开头) 97 | 98 | --- 99 | 100 | ## 企业微信配置 101 | ### 基础设置 102 | - **QYWX_ORIGIN**:反向代理地址(默认 `https://qyapi.weixin.qq.com`) 103 | 104 | ### 机器人通知 105 | - **QYWX_KEY**:机器人 Webhook 106 | 107 | ### 应用消息通知 108 | - **QYWX_AM**:依次填入 `corpid,corpsecret,touser(多成员用|隔开),agentid,消息类型(默认文本)` 109 | 110 | --- 111 | 112 | ## iGot 聚合推送 113 | - **IGOT_PUSH_KEY**:iGot 推送 Key 114 | 115 | --- 116 | 117 | ## Push+ 设置 118 | - **PUSH_PLUS_TOKEN**:一对一/多推送 Token 119 | - **PUSH_PLUS_USER**:群组编码(一对多模式需填) 120 | 121 | --- 122 | 123 | ## Cool Push 设置 124 | - **QQ_SKEY**:Cool Push 授权 Skey 125 | - **QQ_MODE**:推送模式 126 | 127 | --- 128 | 129 | ## 智能微秘书设置 130 | - **AIBOTK_KEY**:个人中心 API Key 131 | - **AIBOTK_TYPE**:发送目标(`room` 或 `contact`) 132 | - **AIBOTK_NAME**:目标名称(与类型对应) 133 | 134 | --- 135 | 136 | ## 飞书机器人设置 137 | - **FSKEY**:飞书机器人 Key 138 | 139 | --- 140 | 141 | ## SMTP 邮件设置 142 | - **SMTP_SERVER**:邮件服务器(如 `smtp.exmail.qq.com:465`) 143 | - **SMTP_SSL**:是否启用 SSL(`true`/`false`) 144 | - **SMTP_EMAIL**:收发件邮箱 145 | - **SMTP_PASSWORD**:登录密码/特殊口令 146 | - **SMTP_NAME**:收发件人姓名 147 | 148 | --- 149 | 150 | ## PushMe 通知 151 | - **PUSHME_KEY**:PushMe 的 KEY 152 | ## WXPUSHER通知 153 | - **WXPUSHER_APP_TOKEN:** '', // wxpusher 的 appToken 154 | - **WXPUSHER_TOPIC_IDS: **'', // wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行** 155 | - **WXPUSHER_UIDS: **'', // wxpusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行 156 | 157 | ## 🙏 **特别鸣谢** 158 | - 原项目:[wes-lin/Cloud189Checkin](https://github.com/wes-lin/Cloud189Checkin) 159 | - README优化:[ShelbyAlan](https://github.com/ShelbyAlan) 💡 160 | 161 | ## 交流群 162 | 163 | ![](https://cdn.jsdelivr.net/gh/wes-lin/Cloud189Checkin/image/group.jpg) 164 | 165 | ## [更新内容](https://github.com/wes-lin/Cloud189Checkin/wiki/更新内容) 166 | -------------------------------------------------------------------------------- /accounts.js: -------------------------------------------------------------------------------- 1 | module.exports = JSON.parse(process.env.TY_ACCOUNTS || "[]"); 2 | -------------------------------------------------------------------------------- /image/accounts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/accounts.jpg -------------------------------------------------------------------------------- /image/action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/action.png -------------------------------------------------------------------------------- /image/env.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/env.png -------------------------------------------------------------------------------- /image/fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/fork.png -------------------------------------------------------------------------------- /image/group.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/group.jpg -------------------------------------------------------------------------------- /image/local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/local.png -------------------------------------------------------------------------------- /image/push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/push.png -------------------------------------------------------------------------------- /image/wxpusher.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aijiaobin/Cloud189Checkin/2e8b7110e2702b247ad3f173e4d7847b5f619abd/image/wxpusher.jpg -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cloud", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node ./src/family.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "cloud189-sdk": "^1.0.5", 14 | "dotenv": "^16.4.5", 15 | "log4js": "^6.9.1", 16 | "node-jsencrypt": "^1.0.0", 17 | "superagent": "^7.1.3" 18 | }, 19 | "devDependencies": { 20 | "eslint": "^8.40.0", 21 | "eslint-config-airbnb-base": "^15.0.0", 22 | "eslint-plugin-import": "^2.27.5" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/accounts.js: -------------------------------------------------------------------------------- 1 | module.exports = JSON.parse(process.env.TY_ACCOUNTS || "[]"); -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | 2 | /* eslint-disable no-await-in-loop */ 3 | /*const $ = new Env('天翼网盘签到');*/ 4 | require("dotenv").config(); 5 | const { pushPlusNotify } = require('./sendNotify.js'); 6 | const log4js = require("log4js"); 7 | const recording = require("log4js/lib/appenders/recording"); 8 | log4js.configure({ 9 | appenders: { 10 | vcr: { 11 | type: "recording", 12 | }, 13 | out: { 14 | type: "console", 15 | }, 16 | }, 17 | categories: { default: { appenders: ["vcr", "out"], level: "info" } }, 18 | }); 19 | 20 | const logger = log4js.getLogger(); 21 | // process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' 22 | const superagent = require("superagent"); 23 | const { CloudClient } = require("cloud189-sdk"); 24 | // const serverChan = require("./push/serverChan"); 25 | // const telegramBot = require("./push/telegramBot"); 26 | // const wecomBot = require("./push/wecomBot"); 27 | // const wxpush = require("./push/wxPusher"); 28 | const accounts = require("./accounts"); 29 | const {sendNotify} = require("./sendNotify"); 30 | 31 | const mask = (s, start, end) => s.split("").fill("*", start, end).join(""); 32 | 33 | const buildTaskResult = (res, result) => { 34 | const index = result.length; 35 | if (res.errorCode === "User_Not_Chance") { 36 | result.push(`第${index}次抽奖失败,次数不足`); 37 | } else { 38 | result.push(`第${index}次抽奖成功,抽奖获得${res.prizeName}`); 39 | } 40 | }; 41 | 42 | const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); 43 | 44 | // 任务 1.签到 2.天天抽红包 3.自动备份抽红包 45 | const doTask = async (cloudClient) => { 46 | const result = []; 47 | const res1 = await cloudClient.userSign(); 48 | result.push( 49 | `${res1.isSign ? "已经签到过了," : ""}签到获得${res1.netdiskBonus}M空间` 50 | ); 51 | await delay(5000); // 延迟5秒 52 | 53 | const res2 = await cloudClient.taskSign(); 54 | buildTaskResult(res2, result); 55 | 56 | await delay(5000); // 延迟5秒 57 | const res3 = await cloudClient.taskPhoto(); 58 | buildTaskResult(res3, result); 59 | 60 | return result; 61 | }; 62 | 63 | const doFamilyTask = async (cloudClient) => { 64 | const { familyInfoResp } = await cloudClient.getFamilyList(); 65 | const result = []; 66 | if (familyInfoResp) { 67 | for (let index = 0; index < familyInfoResp.length; index += 1) { 68 | const { familyId } = familyInfoResp[index]; 69 | const res = await cloudClient.familyUserSign(familyId); 70 | result.push( 71 | "家庭任务" + 72 | `${res.signStatus ? "已经签到过了," : ""}签到获得${ 73 | res.bonusSpace 74 | }M空间` 75 | ); 76 | } 77 | } 78 | return result; 79 | }; 80 | 81 | const pushServerChan = (title, desp) => { 82 | if (!serverChan.sendKey) { 83 | return; 84 | } 85 | const data = { 86 | title, 87 | desp, 88 | }; 89 | superagent 90 | .post(`https://sctapi.ftqq.com/${serverChan.sendKey}.send`) 91 | .type("form") 92 | .send(data) 93 | .end((err, res) => { 94 | if (err) { 95 | logger.error(`ServerChan推送失败:${JSON.stringify(err)}`); 96 | return; 97 | } 98 | const json = JSON.parse(res.text); 99 | if (json.code !== 0) { 100 | logger.error(`ServerChan推送失败:${JSON.stringify(json)}`); 101 | } else { 102 | logger.info("ServerChan推送成功"); 103 | } 104 | }); 105 | }; 106 | 107 | const pushTelegramBot = (title, desp) => { 108 | if (!(telegramBot.botToken && telegramBot.chatId)) { 109 | return; 110 | } 111 | const data = { 112 | chat_id: telegramBot.chatId, 113 | text: `${title}\n\n${desp}`, 114 | }; 115 | superagent 116 | .post(`https://api.telegram.org/bot${telegramBot.botToken}/sendMessage`) 117 | .type("form") 118 | .send(data) 119 | .end((err, res) => { 120 | if (err) { 121 | logger.error(`TelegramBot推送失败:${JSON.stringify(err)}`); 122 | return; 123 | } 124 | const json = JSON.parse(res.text); 125 | if (!json.ok) { 126 | logger.error(`TelegramBot推送失败:${JSON.stringify(json)}`); 127 | } else { 128 | logger.info("TelegramBot推送成功"); 129 | } 130 | }); 131 | }; 132 | 133 | const pushWecomBot = (title, desp) => { 134 | if (!(wecomBot.key && wecomBot.telphone)) { 135 | return; 136 | } 137 | const data = { 138 | msgtype: "text", 139 | text: { 140 | content: `${title}\n\n${desp}`, 141 | mentioned_mobile_list: [wecomBot.telphone], 142 | }, 143 | }; 144 | superagent 145 | .post( 146 | `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=${wecomBot.key}` 147 | ) 148 | .send(data) 149 | .end((err, res) => { 150 | if (err) { 151 | logger.error(`wecomBot推送失败:${JSON.stringify(err)}`); 152 | return; 153 | } 154 | const json = JSON.parse(res.text); 155 | if (json.errcode) { 156 | logger.error(`wecomBot推送失败:${JSON.stringify(json)}`); 157 | } else { 158 | logger.info("wecomBot推送成功"); 159 | } 160 | }); 161 | }; 162 | 163 | const pushWxPusher = (title, desp) => { 164 | if (!(wxpush.appToken && wxpush.uid)) { 165 | return; 166 | } 167 | const data = { 168 | appToken: wxpush.appToken, 169 | contentType: 1, 170 | summary: title, 171 | content: desp, 172 | uids: [wxpush.uid], 173 | }; 174 | superagent 175 | .post("https://wxpusher.zjiecode.com/api/send/message") 176 | .send(data) 177 | .end((err, res) => { 178 | if (err) { 179 | logger.error(`wxPusher推送失败:${JSON.stringify(err)}`); 180 | return; 181 | } 182 | const json = JSON.parse(res.text); 183 | if (json.data[0].code !== 1000) { 184 | logger.error(`wxPusher推送失败:${JSON.stringify(json)}`); 185 | } else { 186 | logger.info("wxPusher推送成功"); 187 | } 188 | }); 189 | }; 190 | 191 | const push = (title, desp) => { 192 | // pushServerChan(title, desp); 193 | // pushTelegramBot(title, desp); 194 | // pushWecomBot(title, desp); 195 | // pushWxPusher(title, desp); 196 | // 调用 pushPlusNotify 发送通知 197 | 198 | // pushPlusNotify("title", desp); 199 | sendNotify("天翼网盘自动签到", desp) 200 | }; 201 | 202 | // 开始执行程序 203 | async function main() { 204 | for (let index = 0; index < accounts.length; index += 1) { 205 | const account = accounts[index]; 206 | const { userName, password } = account; 207 | if (userName && password) { 208 | const userNameInfo = mask(userName, 3, 7); 209 | try { 210 | logger.log(`账户 ${userNameInfo}开始执行`); 211 | const cloudClient = new CloudClient(userName, password); 212 | await cloudClient.login(); 213 | const result = await doTask(cloudClient); 214 | result.forEach((r) => logger.log(r)); 215 | const familyResult = await doFamilyTask(cloudClient); 216 | familyResult.forEach((r) => logger.log(r)); 217 | logger.log("任务执行完毕"); 218 | const { cloudCapacityInfo, familyCapacityInfo } = 219 | await cloudClient.getUserSizeInfo(); 220 | logger.log( 221 | `个人总容量:${( 222 | cloudCapacityInfo.totalSize / 223 | 1024 / 224 | 1024 / 225 | 1024 226 | ).toFixed(2)}G,家庭总容量:${( 227 | familyCapacityInfo.totalSize / 228 | 1024 / 229 | 1024 / 230 | 1024 231 | ).toFixed(2)}G` 232 | ); 233 | } catch (e) { 234 | logger.error(e); 235 | if (e.code === "ETIMEDOUT") { 236 | throw e; 237 | } 238 | } finally { 239 | logger.log(`账户 ${userNameInfo}执行完毕`); 240 | } 241 | } 242 | } 243 | } 244 | 245 | (async () => { 246 | try { 247 | await main(); 248 | } finally { 249 | const events = recording.replay(); 250 | const content = events.map((e) => `${e.data.join("")}`).join(" \n"); 251 | push("天翼云盘自动签到任务", content); 252 | recording.erase(); 253 | } 254 | })(); 255 | -------------------------------------------------------------------------------- /src/family.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-await-in-loop */ 2 | /* cron: 0 7,19 * * * 3 | const $ = new Env('天翼网盘签到'); */ 4 | require('dotenv').config(); 5 | const log4js = require('log4js'); 6 | const { CloudClient } = require('cloud189-sdk'); 7 | const { sendNotify } = require('./sendNotify'); 8 | // 新增环境变量处理(在日志配置之前) 9 | const EXEC_THRESHOLD = parseInt(process.env.EXEC_THRESHOLD || 1); // 默认值为1 10 | // 日志配置 11 | log4js.configure({ 12 | appenders: { 13 | debug: { 14 | type: 'console', 15 | layout: { type: 'pattern', pattern: '%[%d{hh:mm:ss} %p %f{1}:%l%] %m' }, 16 | }, 17 | }, 18 | categories: { default: { appenders: ['debug'], level: 'debug' } }, 19 | }); 20 | const logger = log4js.getLogger(); 21 | 22 | // 调试工具 23 | const benchmark = { 24 | start: Date.now(), 25 | lap() { 26 | return `${((Date.now() - this.start) / 1000).toFixed(2)}s`; 27 | }, 28 | }; 29 | 30 | // 新增工具函数:带超时的 Promise 31 | function timeout(promise, ms) { 32 | return Promise.race([ 33 | promise, 34 | new Promise((_, reject) => setTimeout(() => reject(new Error(`请求超时(${ms}ms)`)), ms)), 35 | ]); 36 | } 37 | 38 | // 核心签到逻辑 39 | async function stressTest(account, familyId, personalCount = 10, familyCount = 10) { 40 | let personalTotal = 0; let 41 | familyTotal = 0; 42 | let actualPersonal = 0; let 43 | actualFamily = 0; 44 | const report = []; 45 | 46 | try { 47 | logger.debug(`🚦 开始压力测试 (账号: ${mask(account.userName)})`); 48 | 49 | const client = new CloudClient(account.userName, account.password); 50 | await client.login().catch(() => { throw new Error('登录失败'); }); 51 | // 获取初始容量信息 52 | const userSizeInfo = await client.getUserSizeInfo().catch(() => null); 53 | // 个人签到10连击(新增30秒超时) 54 | const personalPromises = Array(personalCount).fill().map(() => timeout(client.userSign(), 30000) // 30秒超时控制 55 | .then((res) => { 56 | const mb = res.netdiskBonus; 57 | logger.debug(`[${Date.now()}] 🎯 个人签到 ✅ 获得: ${mb}MB`); 58 | return mb; 59 | }) 60 | .catch((err) => { 61 | const message = err.message.includes('超时') ? `请求超时(30秒)` : err.message; 62 | report.push(`[${Date.now()}] 🎯 个人签到 ❌ 获得: 0MB (原因: ${message})`); 63 | return 0; 64 | })); 65 | const personalResults = await Promise.allSettled(personalPromises); 66 | personalTotal = personalResults.reduce((sum, r) => sum + r.value, 0); 67 | report.push(`🎯 个人签到完成 累计获得: ${personalTotal}MB`); 68 | 69 | // 家庭签到10连击(新增30秒超时) 70 | const familyPromises = Array(familyCount).fill().map(() => timeout(client.familyUserSign(familyId), 30000) // 30秒超时控制 71 | .then((res) => { 72 | const mb = res.bonusSpace; 73 | logger.debug(`[${Date.now()}] 🏠 家庭签到 ✅ 获得: ${mb}MB`); 74 | return mb; 75 | }) 76 | .catch((err) => { 77 | const message = err.message.includes('超时') ? `请求超时(30秒)` : err.message; 78 | report.push(`[${Date.now()}] 🏠 家庭签到 ❌ 获得: 0MB (原因: ${message})`); 79 | return 0; 80 | })); 81 | const familyResults = await Promise.allSettled(familyPromises); 82 | familyTotal = familyResults.reduce((sum, r) => sum + r.value, 0); 83 | report.push(`🏠 家庭签到完成 本次获得: ${familyTotal}MB`); 84 | // 获取签到后容量信息 85 | const afterUserSizeInfo = await client.getUserSizeInfo().catch(() => null); 86 | 87 | // 计算实际容量变化 88 | if (userSizeInfo && afterUserSizeInfo) { 89 | actualPersonal = (afterUserSizeInfo.cloudCapacityInfo.totalSize - userSizeInfo.cloudCapacityInfo.totalSize) / 1024 / 1024; 90 | actualFamily = (afterUserSizeInfo.familyCapacityInfo.totalSize - userSizeInfo.familyCapacityInfo.totalSize) / 1024 / 1024; 91 | report.push(`📊 实际容量变化 | 个人: ${actualPersonal.toFixed(2)}MB | 家庭: ${actualFamily.toFixed(2)}MB`); 92 | } else { 93 | report.push(`⚠️ 容量信息获取失败,无法计算实际变化`); 94 | } 95 | return { 96 | success: true, 97 | personalTotal, 98 | familyTotal, 99 | actualFamily, 100 | report: `账号 ${mask(account.userName)}\n${report.join('\n')}`, 101 | }; 102 | } catch (e) { 103 | return { 104 | success: false, 105 | report: `❌ ${mask(account.userName)} 签到失败: ${e.message}`, 106 | }; 107 | } 108 | } 109 | 110 | // 辅助方法 111 | function mask(s) { 112 | return s.replace(/(\d{3})\d+(\d{4})/, '$1****$2'); 113 | } 114 | const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); 115 | 116 | // 修改后的执行测试 117 | (async () => { 118 | try { 119 | logger.debug('🔥 启动专项压力测试'); 120 | const accounts = require('./accounts'); 121 | const familyId = process.env.FAMILYID; 122 | 123 | if (!familyId) throw new Error('未配置环境变量 FAMILYID'); 124 | 125 | // 新增:在主作用域声明变量 126 | let mainAccountClient = null; 127 | let initialSizeInfo = null; 128 | let finalSizeInfo = null; 129 | 130 | // 仅当存在账号时初始化主账号 131 | if (accounts.length > 0) { 132 | const mainAccount = accounts[0]; 133 | mainAccountClient = new CloudClient(mainAccount.userName, mainAccount.password); 134 | await mainAccountClient.login().catch((e) => { 135 | throw new Error(`主账号登录失败: ${e.message}`); 136 | }); 137 | initialSizeInfo = await mainAccountClient.getUserSizeInfo().catch(() => null); 138 | if (!initialSizeInfo) throw new Error('无法获取初始容量信息'); 139 | logger.debug(`🏠 初始家庭容量: ${initialSizeInfo.familyCapacityInfo.totalSize} Bytes`); 140 | } 141 | let totalFamily = 0; 142 | let totalActualFamily = 0; 143 | const reports = []; 144 | 145 | for (let index = 0; index < accounts.length; index++) { 146 | const account = accounts[index]; 147 | if (!account.userName || !account.password) { 148 | logger.error(`账号配置错误: accounts[${index}]`); 149 | continue; 150 | } 151 | // 新增签到次数控制逻辑 152 | let personalCount = 10; 153 | let familyCount = 10; 154 | 155 | if (EXEC_THRESHOLD === 1) { 156 | if (index === 0) { // 第一个账号 157 | personalCount = 1; 158 | familyCount = 1; 159 | } else { // 其他账号 160 | personalCount = 0; 161 | familyCount = 10; 162 | } 163 | } else { // 其他账号 164 | personalCount = EXEC_THRESHOLD; 165 | familyCount = EXEC_THRESHOLD; 166 | }// 若 EXEC_THRESHOLD=0 保持默认值10 167 | const result = await stressTest( 168 | { userName: account.userName, password: account.password }, 169 | familyId, 170 | personalCount, 171 | familyCount, 172 | ); 173 | 174 | reports.push(result.report); 175 | 176 | if (result.success) { 177 | totalFamily += result.familyTotal; 178 | totalActualFamily += result.actualFamily; 179 | } 180 | 181 | if (accounts.length > 1 && index < accounts.length - 1) { 182 | await sleep(5000); 183 | } 184 | } 185 | // 最终容量统计(确保主账号客户端存在) 186 | if (mainAccountClient) { 187 | finalSizeInfo = await mainAccountClient.getUserSizeInfo().catch(() => null); 188 | if (finalSizeInfo) { 189 | logger.debug(`🏠 最终家庭容量: ${finalSizeInfo.familyCapacityInfo.totalSize} Bytes`); 190 | const actualFamilyTotal = (finalSizeInfo.familyCapacityInfo.totalSize - initialSizeInfo.familyCapacityInfo.totalSize) / 1024 / 1024; 191 | var finalMessage = `📈 实际家庭容量总增加: ${actualFamilyTotal.toFixed(2)}MB\n⏱️ 执行耗时: ${benchmark.lap()}`; 192 | } 193 | } 194 | 195 | const finalReport = [ 196 | reports.join('\n\n'), 197 | `🏠 所有家庭签到累计获得: ${totalFamily}MB`, 198 | finalMessage || '⚠️ 无法计算实际容量变化', 199 | ].join('\n\n'); 200 | 201 | sendNotify('天翼云压力测试报告', finalReport); 202 | logger.debug(`📊 测试结果:\n${finalReport}`); 203 | } catch (e) { 204 | logger.error('致命错误:', e.message); 205 | process.exit(1); 206 | } 207 | })(); 208 | -------------------------------------------------------------------------------- /src/sendNotify.js: -------------------------------------------------------------------------------- 1 | const querystring = require('node:querystring'); 2 | const got = require('got'); 3 | const crypto = require("crypto"); 4 | const timeout = 15000; 5 | 6 | const push_config = { 7 | HITOKOTO: true, // 启用一言(随机句子) 8 | 9 | BARK_PUSH: '', // bark IP 或设备码,例:https://api.day.app/DxHcxxxxxRxxxxxxcm/ 10 | BARK_ARCHIVE: '', // bark 推送是否存档 11 | BARK_GROUP: '', // bark 推送分组 12 | BARK_SOUND: '', // bark 推送声音 13 | BARK_ICON: '', // bark 推送图标 14 | BARK_LEVEL: '', // bark 推送时效性 15 | BARK_URL: '', // bark 推送跳转URL 16 | 17 | DD_BOT_SECRET: '', // 钉钉机器人的 DD_BOT_SECRET 18 | DD_BOT_TOKEN: '', // 钉钉机器人的 DD_BOT_TOKEN 19 | 20 | FSKEY: '', // 飞书机器人的 FSKEY 21 | 22 | // 推送到个人QQ:http://127.0.0.1/send_private_msg 23 | // 群:http://127.0.0.1/send_group_msg 24 | GOBOT_URL: '', // go-cqhttp 25 | // 推送到个人QQ 填入 user_id=个人QQ 26 | // 群 填入 group_id=QQ群 27 | GOBOT_QQ: '', // go-cqhttp 的推送群或用户 28 | GOBOT_TOKEN: '', // go-cqhttp 的 access_token 29 | 30 | GOTIFY_URL: '', // gotify地址,如https://push.example.de:8080 31 | GOTIFY_TOKEN: '', // gotify的消息应用token 32 | GOTIFY_PRIORITY: 0, // 推送消息优先级,默认为0 33 | 34 | IGOT_PUSH_KEY: '', // iGot 聚合推送的 IGOT_PUSH_KEY,例如:https://push.hellyw.com/XXXXXXXX 35 | 36 | PUSH_KEY: '', // server 酱的 PUSH_KEY,兼容旧版与 Turbo 版 37 | 38 | DEER_KEY: '', // PushDeer 的 PUSHDEER_KEY 39 | DEER_URL: '', // PushDeer 的 PUSHDEER_URL 40 | 41 | CHAT_URL: '', // synology chat url 42 | CHAT_TOKEN: '', // synology chat token 43 | 44 | // 官方文档:https://www.pushplus.plus/ 45 | PUSH_PLUS_TOKEN: '', // pushplus 推送的用户令牌 46 | PUSH_PLUS_USER: '', // pushplus 推送的群组编码 47 | PUSH_PLUS_TEMPLATE: 'html', // pushplus 发送模板,支持html,txt,json,markdown,cloudMonitor,jenkins,route,pay 48 | PUSH_PLUS_CHANNEL: 'wechat', // pushplus 发送渠道,支持wechat,webhook,cp,mail,sms 49 | PUSH_PLUS_WEBHOOK: '', // pushplus webhook编码,可在pushplus公众号上扩展配置出更多渠道 50 | PUSH_PLUS_CALLBACKURL: '', // pushplus 发送结果回调地址,会把推送最终结果通知到这个地址上 51 | PUSH_PLUS_TO: '', // pushplus 好友令牌,微信公众号渠道填写好友令牌,企业微信渠道填写企业微信用户id 52 | 53 | // 微加机器人,官方网站:https://www.weplusbot.com/ 54 | WE_PLUS_BOT_TOKEN: '', // 微加机器人的用户令牌 55 | WE_PLUS_BOT_RECEIVER: '', // 微加机器人的消息接收人 56 | WE_PLUS_BOT_VERSION: 'pro', //微加机器人调用版本,pro和personal;为空默认使用pro(专业版),个人版填写:personal 57 | 58 | QMSG_KEY: '', // qmsg 酱的 QMSG_KEY 59 | QMSG_TYPE: '', // qmsg 酱的 QMSG_TYPE 60 | 61 | QYWX_ORIGIN: 'https://qyapi.weixin.qq.com', // 企业微信代理地址 62 | 63 | /* 64 | 此处填你企业微信应用消息的值(详见文档 https://work.weixin.qq.com/api/doc/90000/90135/90236) 65 | 环境变量名 QYWX_AM依次填入 corpid,corpsecret,touser(注:多个成员ID使用|隔开),agentid,消息类型(选填,不填默认文本消息类型) 66 | 注意用,号隔开(英文输入法的逗号),例如:wwcff56746d9adwers,B-791548lnzXBE6_BWfxdf3kSTMJr9vFEPKAbh6WERQ,mingcheng,1000001,2COXgjH2UIfERF2zxrtUOKgQ9XklUqMdGSWLBoW_lSDAdafat 67 | 可选推送消息类型(推荐使用图文消息(mpnews)): 68 | - 文本卡片消息: 0 (数字零) 69 | - 文本消息: 1 (数字一) 70 | - 图文消息(mpnews): 素材库图片id, 可查看此教程(http://note.youdao.com/s/HMiudGkb)或者(https://note.youdao.com/ynoteshare1/index.html?id=1a0c8aff284ad28cbd011b29b3ad0191&type=note) 71 | */ 72 | QYWX_AM: '', // 企业微信应用 73 | 74 | QYWX_KEY: '', // 企业微信机器人的 webhook(详见文档 https://work.weixin.qq.com/api/doc/90000/90136/91770),例如:693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa 75 | 76 | TG_BOT_TOKEN: '', // tg 机器人的 TG_BOT_TOKEN,例:1407203283:AAG9rt-6RDaaX0HBLZQq0laNOh898iFYaRQ 77 | TG_USER_ID: '', // tg 机器人的 TG_USER_ID,例:1434078534 78 | TG_API_HOST: 'https://api.telegram.org', // tg 代理 api 79 | TG_PROXY_AUTH: '', // tg 代理认证参数 80 | TG_PROXY_HOST: '', // tg 机器人的 TG_PROXY_HOST 81 | TG_PROXY_PORT: '', // tg 机器人的 TG_PROXY_PORT 82 | 83 | AIBOTK_KEY: '', // 智能微秘书 个人中心的apikey 文档地址:http://wechat.aibotk.com/docs/about 84 | AIBOTK_TYPE: '', // 智能微秘书 发送目标 room 或 contact 85 | AIBOTK_NAME: '', // 智能微秘书 发送群名 或者好友昵称和type要对应好 86 | 87 | SMTP_SERVICE: '', // 邮箱服务名称,比如 126、163、Gmail、QQ 等,支持列表 https://github.com/nodemailer/nodemailer/blob/master/lib/well-known/services.json 88 | SMTP_EMAIL: '', // SMTP 收发件邮箱,通知将会由自己发给自己 89 | SMTP_PASSWORD: '', // SMTP 登录密码,也可能为特殊口令,视具体邮件服务商说明而定 90 | SMTP_NAME: '', // SMTP 收发件人姓名,可随意填写 91 | 92 | PUSHME_KEY: '', // 官方文档:https://push.i-i.me,PushMe 酱的 PUSHME_KEY 93 | 94 | // CHRONOCAT API https://chronocat.vercel.app/install/docker/official/ 95 | CHRONOCAT_QQ: '', // 个人: user_id=个人QQ 群则填入 group_id=QQ群 多个用英文;隔开同时支持个人和群 96 | CHRONOCAT_TOKEN: '', // 填写在CHRONOCAT文件生成的访问密钥 97 | CHRONOCAT_URL: '', // Red 协议连接地址 例: http://127.0.0.1:16530 98 | 99 | WEBHOOK_URL: '', // 自定义通知 请求地址 100 | WEBHOOK_BODY: '', // 自定义通知 请求体 101 | WEBHOOK_HEADERS: '', // 自定义通知 请求头 102 | WEBHOOK_METHOD: '', // 自定义通知 请求方法 103 | WEBHOOK_CONTENT_TYPE: '', // 自定义通知 content-type 104 | 105 | NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh 106 | NTFY_TOPIC: '', // ntfy的消息应用topic 107 | NTFY_PRIORITY: '3', // 推送消息优先级,默认为3 108 | 109 | // 官方文档: https://wxpusher.zjiecode.com/docs/ 110 | // 管理后台: https://wxpusher.zjiecode.com/admin/ 111 | WXPUSHER_APP_TOKEN: '', // wxpusher 的 appToken 112 | WXPUSHER_TOPIC_IDS: '', // wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行 113 | WXPUSHER_UIDS: '', // wxpusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行 114 | }; 115 | 116 | for (const key in push_config) { 117 | const v = process.env[key]; 118 | if (v) { 119 | push_config[key] = v; 120 | } 121 | } 122 | 123 | const $ = { 124 | post: (params, callback) => { 125 | const { url, ...others } = params; 126 | got.post(url, others).then( 127 | (res) => { 128 | let body = res.body; 129 | try { 130 | body = JSON.parse(body); 131 | } catch (error) {} 132 | callback(null, res, body); 133 | }, 134 | (err) => { 135 | callback(err?.response?.body || err); 136 | }, 137 | ); 138 | }, 139 | get: (params, callback) => { 140 | const { url, ...others } = params; 141 | got.get(url, others).then( 142 | (res) => { 143 | let body = res.body; 144 | try { 145 | body = JSON.parse(body); 146 | } catch (error) {} 147 | callback(null, res, body); 148 | }, 149 | (err) => { 150 | callback(err?.response?.body || err); 151 | }, 152 | ); 153 | }, 154 | logErr: console.log, 155 | }; 156 | 157 | async function one() { 158 | const url = 'https://v1.hitokoto.cn/'; 159 | const res = await got.get(url); 160 | const body = JSON.parse(res.body); 161 | return `${body.hitokoto} ----${body.from}`; 162 | } 163 | 164 | function gotifyNotify(text, desp) { 165 | return new Promise((resolve) => { 166 | const { GOTIFY_URL, GOTIFY_TOKEN, GOTIFY_PRIORITY } = push_config; 167 | if (GOTIFY_URL && GOTIFY_TOKEN) { 168 | const options = { 169 | url: `${GOTIFY_URL}/message?token=${GOTIFY_TOKEN}`, 170 | body: `title=${encodeURIComponent(text)}&message=${encodeURIComponent( 171 | desp, 172 | )}&priority=${GOTIFY_PRIORITY}`, 173 | headers: { 174 | 'Content-Type': 'application/x-www-form-urlencoded', 175 | }, 176 | }; 177 | $.post(options, (err, resp, data) => { 178 | try { 179 | if (err) { 180 | console.log('Gotify 发送通知调用API失败😞\n', err); 181 | } else { 182 | if (data.id) { 183 | console.log('Gotify 发送通知消息成功🎉\n'); 184 | } else { 185 | console.log(`Gotify 发送通知调用API失败😞 ${data.message}\n`); 186 | } 187 | } 188 | } catch (e) { 189 | $.logErr(e, resp); 190 | } finally { 191 | resolve(); 192 | } 193 | }); 194 | } else { 195 | resolve(); 196 | } 197 | }); 198 | } 199 | 200 | function gobotNotify(text, desp) { 201 | return new Promise((resolve) => { 202 | const { GOBOT_URL, GOBOT_TOKEN, GOBOT_QQ } = push_config; 203 | if (GOBOT_URL) { 204 | const options = { 205 | url: `${GOBOT_URL}?access_token=${GOBOT_TOKEN}&${GOBOT_QQ}`, 206 | json: { message: `${text}\n${desp}` }, 207 | headers: { 208 | 'Content-Type': 'application/json', 209 | }, 210 | timeout, 211 | }; 212 | $.post(options, (err, resp, data) => { 213 | try { 214 | if (err) { 215 | console.log('Go-cqhttp 通知调用API失败😞\n', err); 216 | } else { 217 | if (data.retcode === 0) { 218 | console.log('Go-cqhttp 发送通知消息成功🎉\n'); 219 | } else if (data.retcode === 100) { 220 | console.log(`Go-cqhttp 发送通知消息异常 ${data.errmsg}\n`); 221 | } else { 222 | console.log(`Go-cqhttp 发送通知消息异常 ${JSON.stringify(data)}`); 223 | } 224 | } 225 | } catch (e) { 226 | $.logErr(e, resp); 227 | } finally { 228 | resolve(data); 229 | } 230 | }); 231 | } else { 232 | resolve(); 233 | } 234 | }); 235 | } 236 | 237 | function serverNotify(text, desp) { 238 | return new Promise((resolve) => { 239 | const { PUSH_KEY } = push_config; 240 | if (PUSH_KEY) { 241 | // 微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 242 | desp = desp.replace(/[\n\r]/g, '\n\n'); 243 | 244 | const matchResult = PUSH_KEY.match(/^sctp(\d+)t/i); 245 | const options = { 246 | url: 247 | matchResult && matchResult[1] 248 | ? `https://${matchResult[1]}.push.ft07.com/send/${PUSH_KEY}.send` 249 | : `https://sctapi.ftqq.com/${PUSH_KEY}.send`, 250 | body: `text=${encodeURIComponent(text)}&desp=${encodeURIComponent( 251 | desp, 252 | )}`, 253 | headers: { 254 | 'Content-Type': 'application/x-www-form-urlencoded', 255 | }, 256 | timeout, 257 | }; 258 | $.post(options, (err, resp, data) => { 259 | try { 260 | if (err) { 261 | console.log('Server 酱发送通知调用API失败😞\n', err); 262 | } else { 263 | // server酱和Server酱·Turbo版的返回json格式不太一样 264 | if (data.errno === 0 || data.data.errno === 0) { 265 | console.log('Server 酱发送通知消息成功🎉\n'); 266 | } else if (data.errno === 1024) { 267 | // 一分钟内发送相同的内容会触发 268 | console.log(`Server 酱发送通知消息异常 ${data.errmsg}\n`); 269 | } else { 270 | console.log(`Server 酱发送通知消息异常 ${JSON.stringify(data)}`); 271 | } 272 | } 273 | } catch (e) { 274 | $.logErr(e, resp); 275 | } finally { 276 | resolve(data); 277 | } 278 | }); 279 | } else { 280 | resolve(); 281 | } 282 | }); 283 | } 284 | 285 | function pushDeerNotify(text, desp) { 286 | return new Promise((resolve) => { 287 | const { DEER_KEY, DEER_URL } = push_config; 288 | if (DEER_KEY) { 289 | // PushDeer 建议对消息内容进行 urlencode 290 | desp = encodeURI(desp); 291 | const options = { 292 | url: DEER_URL || `https://api2.pushdeer.com/message/push`, 293 | body: `pushkey=${DEER_KEY}&text=${text}&desp=${desp}&type=markdown`, 294 | headers: { 295 | 'Content-Type': 'application/x-www-form-urlencoded', 296 | }, 297 | timeout, 298 | }; 299 | $.post(options, (err, resp, data) => { 300 | try { 301 | if (err) { 302 | console.log('PushDeer 通知调用API失败😞\n', err); 303 | } else { 304 | // 通过返回的result的长度来判断是否成功 305 | if ( 306 | data.content.result.length !== undefined && 307 | data.content.result.length > 0 308 | ) { 309 | console.log('PushDeer 发送通知消息成功🎉\n'); 310 | } else { 311 | console.log( 312 | `PushDeer 发送通知消息异常😞 ${JSON.stringify(data)}`, 313 | ); 314 | } 315 | } 316 | } catch (e) { 317 | $.logErr(e, resp); 318 | } finally { 319 | resolve(data); 320 | } 321 | }); 322 | } else { 323 | resolve(); 324 | } 325 | }); 326 | } 327 | 328 | function chatNotify(text, desp) { 329 | return new Promise((resolve) => { 330 | const { CHAT_URL, CHAT_TOKEN } = push_config; 331 | if (CHAT_URL && CHAT_TOKEN) { 332 | // 对消息内容进行 urlencode 333 | desp = encodeURI(desp); 334 | const options = { 335 | url: `${CHAT_URL}${CHAT_TOKEN}`, 336 | body: `payload={"text":"${text}\n${desp}"}`, 337 | headers: { 338 | 'Content-Type': 'application/x-www-form-urlencoded', 339 | }, 340 | }; 341 | $.post(options, (err, resp, data) => { 342 | try { 343 | if (err) { 344 | console.log('Chat 发送通知调用API失败😞\n', err); 345 | } else { 346 | if (data.success) { 347 | console.log('Chat 发送通知消息成功🎉\n'); 348 | } else { 349 | console.log(`Chat 发送通知消息异常 ${JSON.stringify(data)}`); 350 | } 351 | } 352 | } catch (e) { 353 | $.logErr(e); 354 | } finally { 355 | resolve(data); 356 | } 357 | }); 358 | } else { 359 | resolve(); 360 | } 361 | }); 362 | } 363 | 364 | function barkNotify(text, desp, params = {}) { 365 | return new Promise((resolve) => { 366 | let { 367 | BARK_PUSH, 368 | BARK_ICON, 369 | BARK_SOUND, 370 | BARK_GROUP, 371 | BARK_LEVEL, 372 | BARK_ARCHIVE, 373 | BARK_URL, 374 | } = push_config; 375 | if (BARK_PUSH) { 376 | // 兼容BARK本地用户只填写设备码的情况 377 | if (!BARK_PUSH.startsWith('http')) { 378 | BARK_PUSH = `https://api.day.app/${BARK_PUSH}`; 379 | } 380 | const options = { 381 | url: `${BARK_PUSH}`, 382 | json: { 383 | title: text, 384 | body: desp, 385 | icon: BARK_ICON, 386 | sound: BARK_SOUND, 387 | group: BARK_GROUP, 388 | isArchive: BARK_ARCHIVE, 389 | level: BARK_LEVEL, 390 | url: BARK_URL, 391 | ...params, 392 | }, 393 | headers: { 394 | 'Content-Type': 'application/json', 395 | }, 396 | timeout, 397 | }; 398 | $.post(options, (err, resp, data) => { 399 | try { 400 | if (err) { 401 | console.log('Bark APP 发送通知调用API失败😞\n', err); 402 | } else { 403 | if (data.code === 200) { 404 | console.log('Bark APP 发送通知消息成功🎉\n'); 405 | } else { 406 | console.log(`Bark APP 发送通知消息异常 ${data.message}\n`); 407 | } 408 | } 409 | } catch (e) { 410 | $.logErr(e, resp); 411 | } finally { 412 | resolve(); 413 | } 414 | }); 415 | } else { 416 | resolve(); 417 | } 418 | }); 419 | } 420 | 421 | function tgBotNotify(text, desp) { 422 | return new Promise((resolve) => { 423 | const { 424 | TG_BOT_TOKEN, 425 | TG_USER_ID, 426 | TG_PROXY_HOST, 427 | TG_PROXY_PORT, 428 | TG_API_HOST, 429 | TG_PROXY_AUTH, 430 | } = push_config; 431 | if (TG_BOT_TOKEN && TG_USER_ID) { 432 | let options = { 433 | url: `${TG_API_HOST}/bot${TG_BOT_TOKEN}/sendMessage`, 434 | json: { 435 | chat_id: `${TG_USER_ID}`, 436 | text: `${text}\n\n${desp}`, 437 | disable_web_page_preview: true, 438 | }, 439 | headers: { 440 | 'Content-Type': 'application/json', 441 | }, 442 | timeout, 443 | }; 444 | if (TG_PROXY_HOST && TG_PROXY_PORT) { 445 | const { HttpProxyAgent, HttpsProxyAgent } = require('hpagent'); 446 | const _options = { 447 | keepAlive: true, 448 | keepAliveMsecs: 1000, 449 | maxSockets: 256, 450 | maxFreeSockets: 256, 451 | proxy: `http://${TG_PROXY_AUTH}${TG_PROXY_HOST}:${TG_PROXY_PORT}`, 452 | }; 453 | const httpAgent = new HttpProxyAgent(_options); 454 | const httpsAgent = new HttpsProxyAgent(_options); 455 | const agent = { 456 | http: httpAgent, 457 | https: httpsAgent, 458 | }; 459 | options.agent = agent; 460 | } 461 | $.post(options, (err, resp, data) => { 462 | try { 463 | if (err) { 464 | console.log('Telegram 发送通知消息失败😞\n', err); 465 | } else { 466 | if (data.ok) { 467 | console.log('Telegram 发送通知消息成功🎉。\n'); 468 | } else if (data.error_code === 400) { 469 | console.log( 470 | '请主动给bot发送一条消息并检查接收用户ID是否正确。\n', 471 | ); 472 | } else if (data.error_code === 401) { 473 | console.log('Telegram bot token 填写错误。\n'); 474 | } 475 | } 476 | } catch (e) { 477 | $.logErr(e, resp); 478 | } finally { 479 | resolve(data); 480 | } 481 | }); 482 | } else { 483 | resolve(); 484 | } 485 | }); 486 | } 487 | function ddBotNotify(text, desp) { 488 | return new Promise((resolve) => { 489 | const { DD_BOT_TOKEN, DD_BOT_SECRET } = push_config; 490 | const options = { 491 | url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`, 492 | json: { 493 | msgtype: 'text', 494 | text: { 495 | content: `${text}\n\n${desp}`, 496 | }, 497 | }, 498 | headers: { 499 | 'Content-Type': 'application/json', 500 | }, 501 | timeout, 502 | }; 503 | if (DD_BOT_TOKEN && DD_BOT_SECRET) { 504 | const crypto = require('crypto'); 505 | const dateNow = Date.now(); 506 | const hmac = crypto.createHmac('sha256', DD_BOT_SECRET); 507 | hmac.update(`${dateNow}\n${DD_BOT_SECRET}`); 508 | const result = encodeURIComponent(hmac.digest('base64')); 509 | options.url = `${options.url}×tamp=${dateNow}&sign=${result}`; 510 | $.post(options, (err, resp, data) => { 511 | try { 512 | if (err) { 513 | console.log('钉钉发送通知消息失败😞\n', err); 514 | } else { 515 | if (data.errcode === 0) { 516 | console.log('钉钉发送通知消息成功🎉\n'); 517 | } else { 518 | console.log(`钉钉发送通知消息异常 ${data.errmsg}\n`); 519 | } 520 | } 521 | } catch (e) { 522 | $.logErr(e, resp); 523 | } finally { 524 | resolve(data); 525 | } 526 | }); 527 | } else if (DD_BOT_TOKEN) { 528 | $.post(options, (err, resp, data) => { 529 | try { 530 | if (err) { 531 | console.log('钉钉发送通知消息失败😞\n', err); 532 | } else { 533 | if (data.errcode === 0) { 534 | console.log('钉钉发送通知消息成功🎉\n'); 535 | } else { 536 | console.log(`钉钉发送通知消息异常 ${data.errmsg}\n`); 537 | } 538 | } 539 | } catch (e) { 540 | $.logErr(e, resp); 541 | } finally { 542 | resolve(data); 543 | } 544 | }); 545 | } else { 546 | resolve(); 547 | } 548 | }); 549 | } 550 | 551 | function qywxBotNotify(text, desp) { 552 | return new Promise((resolve) => { 553 | const { QYWX_ORIGIN, QYWX_KEY } = push_config; 554 | const options = { 555 | url: `${QYWX_ORIGIN}/cgi-bin/webhook/send?key=${QYWX_KEY}`, 556 | json: { 557 | msgtype: 'text', 558 | text: { 559 | content: `${text}\n\n${desp}`, 560 | }, 561 | }, 562 | headers: { 563 | 'Content-Type': 'application/json', 564 | }, 565 | timeout, 566 | }; 567 | if (QYWX_KEY) { 568 | $.post(options, (err, resp, data) => { 569 | try { 570 | if (err) { 571 | console.log('企业微信发送通知消息失败😞\n', err); 572 | } else { 573 | if (data.errcode === 0) { 574 | console.log('企业微信发送通知消息成功🎉。\n'); 575 | } else { 576 | console.log(`企业微信发送通知消息异常 ${data.errmsg}\n`); 577 | } 578 | } 579 | } catch (e) { 580 | $.logErr(e, resp); 581 | } finally { 582 | resolve(data); 583 | } 584 | }); 585 | } else { 586 | resolve(); 587 | } 588 | }); 589 | } 590 | 591 | function ChangeUserId(desp) { 592 | const { QYWX_AM } = push_config; 593 | const QYWX_AM_AY = QYWX_AM.split(','); 594 | if (QYWX_AM_AY[2]) { 595 | const userIdTmp = QYWX_AM_AY[2].split('|'); 596 | let userId = ''; 597 | for (let i = 0; i < userIdTmp.length; i++) { 598 | const count = '账号' + (i + 1); 599 | const count2 = '签到号 ' + (i + 1); 600 | if (desp.match(count2)) { 601 | userId = userIdTmp[i]; 602 | } 603 | } 604 | if (!userId) userId = QYWX_AM_AY[2]; 605 | return userId; 606 | } else { 607 | return '@all'; 608 | } 609 | } 610 | 611 | async function qywxamNotify(text, desp) { 612 | const MAX_LENGTH = 900; 613 | if (desp.length > MAX_LENGTH) { 614 | let d = desp.substr(0, MAX_LENGTH) + '\n==More=='; 615 | await do_qywxamNotify(text, d); 616 | await qywxamNotify(text, desp.substr(MAX_LENGTH)); 617 | } else { 618 | return await do_qywxamNotify(text, desp); 619 | } 620 | } 621 | 622 | function do_qywxamNotify(text, desp) { 623 | return new Promise((resolve) => { 624 | const { QYWX_AM, QYWX_ORIGIN } = push_config; 625 | if (QYWX_AM) { 626 | const QYWX_AM_AY = QYWX_AM.split(','); 627 | const options_accesstoken = { 628 | url: `${QYWX_ORIGIN}/cgi-bin/gettoken`, 629 | json: { 630 | corpid: `${QYWX_AM_AY[0]}`, 631 | corpsecret: `${QYWX_AM_AY[1]}`, 632 | }, 633 | headers: { 634 | 'Content-Type': 'application/json', 635 | }, 636 | timeout, 637 | }; 638 | $.post(options_accesstoken, (err, resp, json) => { 639 | let html = desp.replace(/\n/g, '
'); 640 | let accesstoken = json.access_token; 641 | let options; 642 | 643 | switch (QYWX_AM_AY[4]) { 644 | case '0': 645 | options = { 646 | msgtype: 'textcard', 647 | textcard: { 648 | title: `${text}`, 649 | description: `${desp}`, 650 | url: 'https://github.com/whyour/qinglong', 651 | btntxt: '更多', 652 | }, 653 | }; 654 | break; 655 | 656 | case '1': 657 | options = { 658 | msgtype: 'text', 659 | text: { 660 | content: `${text}\n\n${desp}`, 661 | }, 662 | }; 663 | break; 664 | 665 | default: 666 | options = { 667 | msgtype: 'mpnews', 668 | mpnews: { 669 | articles: [ 670 | { 671 | title: `${text}`, 672 | thumb_media_id: `${QYWX_AM_AY[4]}`, 673 | author: `智能助手`, 674 | content_source_url: ``, 675 | content: `${html}`, 676 | digest: `${desp}`, 677 | }, 678 | ], 679 | }, 680 | }; 681 | } 682 | if (!QYWX_AM_AY[4]) { 683 | // 如不提供第四个参数,则默认进行文本消息类型推送 684 | options = { 685 | msgtype: 'text', 686 | text: { 687 | content: `${text}\n\n${desp}`, 688 | }, 689 | }; 690 | } 691 | options = { 692 | url: `${QYWX_ORIGIN}/cgi-bin/message/send?access_token=${accesstoken}`, 693 | json: { 694 | touser: `${ChangeUserId(desp)}`, 695 | agentid: `${QYWX_AM_AY[3]}`, 696 | safe: '0', 697 | ...options, 698 | }, 699 | headers: { 700 | 'Content-Type': 'application/json', 701 | }, 702 | }; 703 | 704 | $.post(options, (err, resp, data) => { 705 | try { 706 | if (err) { 707 | console.log( 708 | '成员ID:' + 709 | ChangeUserId(desp) + 710 | '企业微信应用消息发送通知消息失败😞\n', 711 | err, 712 | ); 713 | } else { 714 | if (data.errcode === 0) { 715 | console.log( 716 | '成员ID:' + 717 | ChangeUserId(desp) + 718 | '企业微信应用消息发送通知消息成功🎉。\n', 719 | ); 720 | } else { 721 | console.log( 722 | `企业微信应用消息发送通知消息异常 ${data.errmsg}\n`, 723 | ); 724 | } 725 | } 726 | } catch (e) { 727 | $.logErr(e, resp); 728 | } finally { 729 | resolve(data); 730 | } 731 | }); 732 | }); 733 | } else { 734 | resolve(); 735 | } 736 | }); 737 | } 738 | 739 | function iGotNotify(text, desp, params = {}) { 740 | return new Promise((resolve) => { 741 | const { IGOT_PUSH_KEY } = push_config; 742 | if (IGOT_PUSH_KEY) { 743 | // 校验传入的IGOT_PUSH_KEY是否有效 744 | const IGOT_PUSH_KEY_REGX = new RegExp('^[a-zA-Z0-9]{24}$'); 745 | if (!IGOT_PUSH_KEY_REGX.test(IGOT_PUSH_KEY)) { 746 | console.log('您所提供的 IGOT_PUSH_KEY 无效\n'); 747 | resolve(); 748 | return; 749 | } 750 | const options = { 751 | url: `https://push.hellyw.com/${IGOT_PUSH_KEY.toLowerCase()}`, 752 | body: `title=${text}&content=${desp}&${querystring.stringify(params)}`, 753 | headers: { 754 | 'Content-Type': 'application/x-www-form-urlencoded', 755 | }, 756 | timeout, 757 | }; 758 | $.post(options, (err, resp, data) => { 759 | try { 760 | if (err) { 761 | console.log('IGot 发送通知调用API失败😞\n', err); 762 | } else { 763 | if (data.ret === 0) { 764 | console.log('IGot 发送通知消息成功🎉\n'); 765 | } else { 766 | console.log(`IGot 发送通知消息异常 ${data.errMsg}\n`); 767 | } 768 | } 769 | } catch (e) { 770 | $.logErr(e, resp); 771 | } finally { 772 | resolve(data); 773 | } 774 | }); 775 | } else { 776 | resolve(); 777 | } 778 | }); 779 | } 780 | 781 | function pushPlusNotify(text, desp) { 782 | return new Promise((resolve) => { 783 | const { 784 | PUSH_PLUS_TOKEN, 785 | PUSH_PLUS_USER, 786 | PUSH_PLUS_TEMPLATE, 787 | PUSH_PLUS_CHANNEL, 788 | PUSH_PLUS_WEBHOOK, 789 | PUSH_PLUS_CALLBACKURL, 790 | PUSH_PLUS_TO, 791 | } = push_config; 792 | if (PUSH_PLUS_TOKEN) { 793 | desp = desp.replace(/[\n\r]/g, '
'); // 默认为html, 不支持plaintext 794 | const body = { 795 | token: `${PUSH_PLUS_TOKEN}`, 796 | title: `${text}`, 797 | content: `${desp}`, 798 | topic: `${PUSH_PLUS_USER}`, 799 | template: `${PUSH_PLUS_TEMPLATE}`, 800 | channel: `${PUSH_PLUS_CHANNEL}`, 801 | webhook: `${PUSH_PLUS_WEBHOOK}`, 802 | callbackUrl: `${PUSH_PLUS_CALLBACKURL}`, 803 | to: `${PUSH_PLUS_TO}`, 804 | }; 805 | const options = { 806 | url: `https://www.pushplus.plus/send`, 807 | body: JSON.stringify(body), 808 | headers: { 809 | 'Content-Type': ' application/json', 810 | }, 811 | timeout, 812 | }; 813 | $.post(options, (err, resp, data) => { 814 | try { 815 | if (err) { 816 | console.log( 817 | `pushplus 发送${ 818 | PUSH_PLUS_USER ? '一对多' : '一对一' 819 | }通知消息失败😞\n`, 820 | err, 821 | ); 822 | } else { 823 | if (data.code === 200) { 824 | console.log( 825 | `pushplus 发送${ 826 | PUSH_PLUS_USER ? '一对多' : '一对一' 827 | }通知请求成功🎉,可根据流水号查询推送结果:${ 828 | data.data 829 | }\n注意:请求成功并不代表推送成功,如未收到消息,请到pushplus官网使用流水号查询推送最终结果`, 830 | ); 831 | } else { 832 | console.log( 833 | `pushplus 发送${ 834 | PUSH_PLUS_USER ? '一对多' : '一对一' 835 | }通知消息异常 ${data.msg}\n`, 836 | ); 837 | } 838 | } 839 | } catch (e) { 840 | $.logErr(e, resp); 841 | } finally { 842 | resolve(data); 843 | } 844 | }); 845 | } else { 846 | resolve(); 847 | } 848 | }); 849 | } 850 | 851 | function wePlusBotNotify(text, desp) { 852 | return new Promise((resolve) => { 853 | const { WE_PLUS_BOT_TOKEN, WE_PLUS_BOT_RECEIVER, WE_PLUS_BOT_VERSION } = 854 | push_config; 855 | if (WE_PLUS_BOT_TOKEN) { 856 | let template = 'txt'; 857 | if (desp.length > 800) { 858 | desp = desp.replace(/[\n\r]/g, '
'); 859 | template = 'html'; 860 | } 861 | const body = { 862 | token: `${WE_PLUS_BOT_TOKEN}`, 863 | title: `${text}`, 864 | content: `${desp}`, 865 | template: `${template}`, 866 | receiver: `${WE_PLUS_BOT_RECEIVER}`, 867 | version: `${WE_PLUS_BOT_VERSION}`, 868 | }; 869 | const options = { 870 | url: `https://www.weplusbot.com/send`, 871 | body: JSON.stringify(body), 872 | headers: { 873 | 'Content-Type': ' application/json', 874 | }, 875 | timeout, 876 | }; 877 | $.post(options, (err, resp, data) => { 878 | try { 879 | if (err) { 880 | console.log(`微加机器人发送通知消息失败😞\n`, err); 881 | } else { 882 | if (data.code === 200) { 883 | console.log(`微加机器人发送通知消息完成🎉\n`); 884 | } else { 885 | console.log(`微加机器人发送通知消息异常 ${data.msg}\n`); 886 | } 887 | } 888 | } catch (e) { 889 | $.logErr(e, resp); 890 | } finally { 891 | resolve(data); 892 | } 893 | }); 894 | } else { 895 | resolve(); 896 | } 897 | }); 898 | } 899 | 900 | function aibotkNotify(text, desp) { 901 | return new Promise((resolve) => { 902 | const { AIBOTK_KEY, AIBOTK_TYPE, AIBOTK_NAME } = push_config; 903 | if (AIBOTK_KEY && AIBOTK_TYPE && AIBOTK_NAME) { 904 | let json = {}; 905 | let url = ''; 906 | switch (AIBOTK_TYPE) { 907 | case 'room': 908 | url = 'https://api-bot.aibotk.com/openapi/v1/chat/room'; 909 | json = { 910 | apiKey: `${AIBOTK_KEY}`, 911 | roomName: `${AIBOTK_NAME}`, 912 | message: { 913 | type: 1, 914 | content: `【青龙快讯】\n\n${text}\n${desp}`, 915 | }, 916 | }; 917 | break; 918 | case 'contact': 919 | url = 'https://api-bot.aibotk.com/openapi/v1/chat/contact'; 920 | json = { 921 | apiKey: `${AIBOTK_KEY}`, 922 | name: `${AIBOTK_NAME}`, 923 | message: { 924 | type: 1, 925 | content: `【青龙快讯】\n\n${text}\n${desp}`, 926 | }, 927 | }; 928 | break; 929 | } 930 | const options = { 931 | url: url, 932 | json, 933 | headers: { 934 | 'Content-Type': 'application/json', 935 | }, 936 | timeout, 937 | }; 938 | $.post(options, (err, resp, data) => { 939 | try { 940 | if (err) { 941 | console.log('智能微秘书发送通知消息失败😞\n', err); 942 | } else { 943 | if (data.code === 0) { 944 | console.log('智能微秘书发送通知消息成功🎉。\n'); 945 | } else { 946 | console.log(`智能微秘书发送通知消息异常 ${data.error}\n`); 947 | } 948 | } 949 | } catch (e) { 950 | $.logErr(e, resp); 951 | } finally { 952 | resolve(data); 953 | } 954 | }); 955 | } else { 956 | resolve(); 957 | } 958 | }); 959 | } 960 | 961 | function fsBotNotify(text, desp) { 962 | return new Promise((resolve) => { 963 | const { FSKEY } = push_config; 964 | if (FSKEY) { 965 | const options = { 966 | url: `https://open.feishu.cn/open-apis/bot/v2/hook/${FSKEY}`, 967 | json: { msg_type: 'text', content: { text: `${text}\n\n${desp}` } }, 968 | headers: { 969 | 'Content-Type': 'application/json', 970 | }, 971 | timeout, 972 | }; 973 | $.post(options, (err, resp, data) => { 974 | try { 975 | if (err) { 976 | console.log('飞书发送通知调用API失败😞\n', err); 977 | } else { 978 | if (data.StatusCode === 0 || data.code === 0) { 979 | console.log('飞书发送通知消息成功🎉\n'); 980 | } else { 981 | console.log(`飞书发送通知消息异常 ${data.msg}\n`); 982 | } 983 | } 984 | } catch (e) { 985 | $.logErr(e, resp); 986 | } finally { 987 | resolve(data); 988 | } 989 | }); 990 | } else { 991 | resolve(); 992 | } 993 | }); 994 | } 995 | 996 | async function smtpNotify(text, desp) { 997 | const { SMTP_EMAIL, SMTP_PASSWORD, SMTP_SERVICE, SMTP_NAME } = push_config; 998 | if (![SMTP_EMAIL, SMTP_PASSWORD].every(Boolean) || !SMTP_SERVICE) { 999 | return; 1000 | } 1001 | 1002 | try { 1003 | const nodemailer = require('nodemailer'); 1004 | const transporter = nodemailer.createTransport({ 1005 | service: SMTP_SERVICE, 1006 | auth: { 1007 | user: SMTP_EMAIL, 1008 | pass: SMTP_PASSWORD, 1009 | }, 1010 | }); 1011 | 1012 | const addr = SMTP_NAME ? `"${SMTP_NAME}" <${SMTP_EMAIL}>` : SMTP_EMAIL; 1013 | const info = await transporter.sendMail({ 1014 | from: addr, 1015 | to: addr, 1016 | subject: text, 1017 | html: `${desp.replace(/\n/g, '
')}`, 1018 | }); 1019 | 1020 | transporter.close(); 1021 | 1022 | if (info.messageId) { 1023 | console.log('SMTP 发送通知消息成功🎉\n'); 1024 | return true; 1025 | } 1026 | console.log('SMTP 发送通知消息失败😞\n'); 1027 | } catch (e) { 1028 | console.log('SMTP 发送通知消息出现异常😞\n', e); 1029 | } 1030 | } 1031 | 1032 | function pushMeNotify(text, desp, params = {}) { 1033 | return new Promise((resolve) => { 1034 | const { PUSHME_KEY, PUSHME_URL } = push_config; 1035 | if (PUSHME_KEY) { 1036 | const options = { 1037 | url: PUSHME_URL || 'https://push.i-i.me', 1038 | json: { push_key: PUSHME_KEY, title: text, content: desp, ...params }, 1039 | headers: { 1040 | 'Content-Type': 'application/json', 1041 | }, 1042 | timeout, 1043 | }; 1044 | $.post(options, (err, resp, data) => { 1045 | try { 1046 | if (err) { 1047 | console.log('PushMe 发送通知调用API失败😞\n', err); 1048 | } else { 1049 | if (data === 'success') { 1050 | console.log('PushMe 发送通知消息成功🎉\n'); 1051 | } else { 1052 | console.log(`PushMe 发送通知消息异常 ${data}\n`); 1053 | } 1054 | } 1055 | } catch (e) { 1056 | $.logErr(e, resp); 1057 | } finally { 1058 | resolve(data); 1059 | } 1060 | }); 1061 | } else { 1062 | resolve(); 1063 | } 1064 | }); 1065 | } 1066 | 1067 | function chronocatNotify(title, desp) { 1068 | return new Promise((resolve) => { 1069 | const { CHRONOCAT_TOKEN, CHRONOCAT_QQ, CHRONOCAT_URL } = push_config; 1070 | if (!CHRONOCAT_TOKEN || !CHRONOCAT_QQ || !CHRONOCAT_URL) { 1071 | resolve(); 1072 | return; 1073 | } 1074 | 1075 | const user_ids = CHRONOCAT_QQ.match(/user_id=(\d+)/g)?.map( 1076 | (match) => match.split('=')[1], 1077 | ); 1078 | const group_ids = CHRONOCAT_QQ.match(/group_id=(\d+)/g)?.map( 1079 | (match) => match.split('=')[1], 1080 | ); 1081 | 1082 | const url = `${CHRONOCAT_URL}/api/message/send`; 1083 | const headers = { 1084 | 'Content-Type': 'application/json', 1085 | Authorization: `Bearer ${CHRONOCAT_TOKEN}`, 1086 | }; 1087 | 1088 | for (const [chat_type, ids] of [ 1089 | [1, user_ids], 1090 | [2, group_ids], 1091 | ]) { 1092 | if (!ids) { 1093 | continue; 1094 | } 1095 | for (const chat_id of ids) { 1096 | const data = { 1097 | peer: { 1098 | chatType: chat_type, 1099 | peerUin: chat_id, 1100 | }, 1101 | elements: [ 1102 | { 1103 | elementType: 1, 1104 | textElement: { 1105 | content: `${title}\n\n${desp}`, 1106 | }, 1107 | }, 1108 | ], 1109 | }; 1110 | const options = { 1111 | url: url, 1112 | json: data, 1113 | headers, 1114 | timeout, 1115 | }; 1116 | $.post(options, (err, resp, data) => { 1117 | try { 1118 | if (err) { 1119 | console.log('Chronocat 发送QQ通知消息失败😞\n', err); 1120 | } else { 1121 | if (chat_type === 1) { 1122 | console.log(`Chronocat 个人消息 ${ids}推送成功🎉`); 1123 | } else { 1124 | console.log(`Chronocat 群消息 ${ids}推送成功🎉`); 1125 | } 1126 | } 1127 | } catch (e) { 1128 | $.logErr(e, resp); 1129 | } finally { 1130 | resolve(data); 1131 | } 1132 | }); 1133 | } 1134 | } 1135 | }); 1136 | } 1137 | 1138 | function qmsgNotify(text, desp) { 1139 | return new Promise((resolve) => { 1140 | const { QMSG_KEY, QMSG_TYPE } = push_config; 1141 | if (QMSG_KEY && QMSG_TYPE) { 1142 | const options = { 1143 | url: `https://qmsg.zendee.cn/${QMSG_TYPE}/${QMSG_KEY}`, 1144 | body: `msg=${text}\n\n${desp.replace('----', '-')}`, 1145 | headers: { 1146 | 'Content-Type': 'application/x-www-form-urlencoded', 1147 | }, 1148 | timeout, 1149 | }; 1150 | $.post(options, (err, resp, data) => { 1151 | try { 1152 | if (err) { 1153 | console.log('Qmsg 发送通知调用API失败😞\n', err); 1154 | } else { 1155 | if (data.code === 0) { 1156 | console.log('Qmsg 发送通知消息成功🎉\n'); 1157 | } else { 1158 | console.log(`Qmsg 发送通知消息异常 ${data}\n`); 1159 | } 1160 | } 1161 | } catch (e) { 1162 | $.logErr(e, resp); 1163 | } finally { 1164 | resolve(data); 1165 | } 1166 | }); 1167 | } else { 1168 | resolve(); 1169 | } 1170 | }); 1171 | } 1172 | 1173 | function webhookNotify(text, desp) { 1174 | return new Promise((resolve) => { 1175 | const { 1176 | WEBHOOK_URL, 1177 | WEBHOOK_BODY, 1178 | WEBHOOK_HEADERS, 1179 | WEBHOOK_CONTENT_TYPE, 1180 | WEBHOOK_METHOD, 1181 | } = push_config; 1182 | if ( 1183 | !WEBHOOK_METHOD || 1184 | !WEBHOOK_URL || 1185 | (!WEBHOOK_URL.includes('$title') && !WEBHOOK_BODY.includes('$title')) 1186 | ) { 1187 | resolve(); 1188 | return; 1189 | } 1190 | 1191 | const headers = parseHeaders(WEBHOOK_HEADERS); 1192 | const body = parseBody(WEBHOOK_BODY, WEBHOOK_CONTENT_TYPE, (v) => 1193 | v 1194 | ?.replaceAll('$title', text?.replaceAll('\n', '\\n')) 1195 | ?.replaceAll('$content', desp?.replaceAll('\n', '\\n')), 1196 | ); 1197 | const bodyParam = formatBodyFun(WEBHOOK_CONTENT_TYPE, body); 1198 | const options = { 1199 | method: WEBHOOK_METHOD, 1200 | headers, 1201 | allowGetBody: true, 1202 | ...bodyParam, 1203 | timeout, 1204 | retry: 1, 1205 | }; 1206 | 1207 | const formatUrl = WEBHOOK_URL.replaceAll( 1208 | '$title', 1209 | encodeURIComponent(text), 1210 | ).replaceAll('$content', encodeURIComponent(desp)); 1211 | got(formatUrl, options).then((resp) => { 1212 | try { 1213 | if (resp.statusCode !== 200) { 1214 | console.log(`自定义发送通知消息失败😞 ${resp.body}\n`); 1215 | } else { 1216 | console.log(`自定义发送通知消息成功🎉 ${resp.body}\n`); 1217 | } 1218 | } catch (e) { 1219 | $.logErr(e, resp); 1220 | } finally { 1221 | resolve(resp.body); 1222 | } 1223 | }); 1224 | }); 1225 | } 1226 | 1227 | function ntfyNotify(text, desp) { 1228 | function encodeRFC2047(text) { 1229 | const encodedBase64 = Buffer.from(text).toString('base64'); 1230 | return `=?utf-8?B?${encodedBase64}?=`; 1231 | } 1232 | 1233 | return new Promise((resolve) => { 1234 | const { NTFY_URL, NTFY_TOPIC, NTFY_PRIORITY } = push_config; 1235 | if (NTFY_TOPIC) { 1236 | const options = { 1237 | url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`, 1238 | body: `${desp}`, 1239 | headers: { 1240 | Title: `${encodeRFC2047(text)}`, 1241 | Priority: NTFY_PRIORITY || '3', 1242 | }, 1243 | timeout, 1244 | }; 1245 | $.post(options, (err, resp, data) => { 1246 | try { 1247 | if (err) { 1248 | console.log('Ntfy 通知调用API失败😞\n', err); 1249 | } else { 1250 | if (data.id) { 1251 | console.log('Ntfy 发送通知消息成功🎉\n'); 1252 | } else { 1253 | console.log(`Ntfy 发送通知消息异常 ${JSON.stringify(data)}`); 1254 | } 1255 | } 1256 | } catch (e) { 1257 | $.logErr(e, resp); 1258 | } finally { 1259 | resolve(data); 1260 | } 1261 | }); 1262 | } else { 1263 | resolve(); 1264 | } 1265 | }); 1266 | } 1267 | 1268 | function wxPusherNotify(text, desp) { 1269 | return new Promise((resolve) => { 1270 | const { WXPUSHER_APP_TOKEN, WXPUSHER_TOPIC_IDS, WXPUSHER_UIDS } = 1271 | push_config; 1272 | if (WXPUSHER_APP_TOKEN) { 1273 | // 处理topic_ids,将分号分隔的字符串转为数组 1274 | const topicIds = WXPUSHER_TOPIC_IDS 1275 | ? WXPUSHER_TOPIC_IDS.split(';') 1276 | .map((id) => id.trim()) 1277 | .filter((id) => id) 1278 | .map((id) => parseInt(id)) 1279 | : []; 1280 | 1281 | // 处理uids,将分号分隔的字符串转为数组 1282 | const uids = WXPUSHER_UIDS 1283 | ? WXPUSHER_UIDS.split(';') 1284 | .map((uid) => uid.trim()) 1285 | .filter((uid) => uid) 1286 | : []; 1287 | 1288 | // topic_ids uids 至少有一个 1289 | if (!topicIds.length && !uids.length) { 1290 | console.log( 1291 | 'wxpusher 服务的 WXPUSHER_TOPIC_IDS 和 WXPUSHER_UIDS 至少设置一个!!', 1292 | ); 1293 | return resolve(); 1294 | } 1295 | 1296 | const body = { 1297 | appToken: WXPUSHER_APP_TOKEN, 1298 | content: `

${text}


${desp}
`, 1299 | summary: text, 1300 | contentType: 2, 1301 | topicIds: topicIds, 1302 | uids: uids, 1303 | verifyPayType: 0, 1304 | }; 1305 | 1306 | const options = { 1307 | url: 'https://wxpusher.zjiecode.com/api/send/message', 1308 | body: JSON.stringify(body), 1309 | headers: { 1310 | 'Content-Type': 'application/json', 1311 | }, 1312 | timeout, 1313 | }; 1314 | 1315 | $.post(options, (err, resp, data) => { 1316 | try { 1317 | if (err) { 1318 | console.log('wxpusher发送通知消息失败!\n', err); 1319 | } else { 1320 | if (data.code === 1000) { 1321 | console.log('wxpusher发送通知消息完成!'); 1322 | } else { 1323 | console.log(`wxpusher发送通知消息异常:${data.msg}`); 1324 | } 1325 | } 1326 | } catch (e) { 1327 | $.logErr(e, resp); 1328 | } finally { 1329 | resolve(data); 1330 | } 1331 | }); 1332 | } else { 1333 | resolve(); 1334 | } 1335 | }); 1336 | } 1337 | 1338 | function parseString(input, valueFormatFn) { 1339 | const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g; 1340 | const matches = {}; 1341 | 1342 | let match; 1343 | while ((match = regex.exec(input)) !== null) { 1344 | const [, key, value] = match; 1345 | const _key = key.trim(); 1346 | if (!_key || matches[_key]) { 1347 | continue; 1348 | } 1349 | 1350 | let _value = value.trim(); 1351 | 1352 | try { 1353 | _value = valueFormatFn ? valueFormatFn(_value) : _value; 1354 | const jsonValue = JSON.parse(_value); 1355 | matches[_key] = jsonValue; 1356 | } catch (error) { 1357 | matches[_key] = _value; 1358 | } 1359 | } 1360 | 1361 | return matches; 1362 | } 1363 | 1364 | function parseHeaders(headers) { 1365 | if (!headers) return {}; 1366 | 1367 | const parsed = {}; 1368 | let key; 1369 | let val; 1370 | let i; 1371 | 1372 | headers && 1373 | headers.split('\n').forEach(function parser(line) { 1374 | i = line.indexOf(':'); 1375 | key = line.substring(0, i).trim().toLowerCase(); 1376 | val = line.substring(i + 1).trim(); 1377 | 1378 | if (!key) { 1379 | return; 1380 | } 1381 | 1382 | parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 1383 | }); 1384 | 1385 | return parsed; 1386 | } 1387 | 1388 | function parseBody(body, contentType, valueFormatFn) { 1389 | if (contentType === 'text/plain' || !body) { 1390 | return valueFormatFn && body ? valueFormatFn(body) : body; 1391 | } 1392 | 1393 | const parsed = parseString(body, valueFormatFn); 1394 | 1395 | switch (contentType) { 1396 | case 'multipart/form-data': 1397 | return Object.keys(parsed).reduce((p, c) => { 1398 | p.append(c, parsed[c]); 1399 | return p; 1400 | }, new FormData()); 1401 | case 'application/x-www-form-urlencoded': 1402 | return Object.keys(parsed).reduce((p, c) => { 1403 | return p ? `${p}&${c}=${parsed[c]}` : `${c}=${parsed[c]}`; 1404 | }); 1405 | } 1406 | 1407 | return parsed; 1408 | } 1409 | 1410 | function formatBodyFun(contentType, body) { 1411 | if (!body) return {}; 1412 | switch (contentType) { 1413 | case 'application/json': 1414 | return { json: body }; 1415 | case 'multipart/form-data': 1416 | return { form: body }; 1417 | case 'application/x-www-form-urlencoded': 1418 | case 'text/plain': 1419 | return { body }; 1420 | } 1421 | return {}; 1422 | } 1423 | 1424 | /** 1425 | * sendNotify 推送通知功能 1426 | * @param text 通知头 1427 | * @param desp 通知体 1428 | * @param params 某些推送通知方式点击弹窗可跳转, 例:{ url: 'https://abc.com' } 1429 | * @returns {Promise} 1430 | */ 1431 | async function sendNotify(text, desp, params = {}) { 1432 | // 根据标题跳过一些消息推送,环境变量:SKIP_PUSH_TITLE 用回车分隔 1433 | let skipTitle = process.env.SKIP_PUSH_TITLE; 1434 | if (skipTitle) { 1435 | if (skipTitle.split('\n').includes(text)) { 1436 | console.info(text + '在 SKIP_PUSH_TITLE 环境变量内,跳过推送'); 1437 | return; 1438 | } 1439 | } 1440 | 1441 | if (push_config.HITOKOTO !== 'false') { 1442 | desp += '\n\n' + (await one()); 1443 | } 1444 | 1445 | await Promise.all([ 1446 | serverNotify(text, desp), // 微信server酱 1447 | pushPlusNotify(text, desp), // pushplus 1448 | wePlusBotNotify(text, desp), // 微加机器人 1449 | barkNotify(text, desp, params), // iOS Bark APP 1450 | tgBotNotify(text, desp), // telegram 机器人 1451 | ddBotNotify(text, desp), // 钉钉机器人 1452 | qywxBotNotify(text, desp), // 企业微信机器人 1453 | qywxamNotify(text, desp), // 企业微信应用消息推送 1454 | iGotNotify(text, desp, params), // iGot 1455 | gobotNotify(text, desp), // go-cqhttp 1456 | gotifyNotify(text, desp), // gotify 1457 | chatNotify(text, desp), // synolog chat 1458 | pushDeerNotify(text, desp), // PushDeer 1459 | aibotkNotify(text, desp), // 智能微秘书 1460 | fsBotNotify(text, desp), // 飞书机器人 1461 | smtpNotify(text, desp), // SMTP 邮件 1462 | pushMeNotify(text, desp, params), // PushMe 1463 | chronocatNotify(text, desp), // Chronocat 1464 | webhookNotify(text, desp), // 自定义通知 1465 | qmsgNotify(text, desp), // 自定义通知 1466 | ntfyNotify(text, desp), // Ntfy 1467 | wxPusherNotify(text, desp), // wxpusher 1468 | ]); 1469 | } 1470 | 1471 | module.exports = { 1472 | sendNotify, 1473 | }; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@eslint-community/eslint-utils@^4.2.0": 11 | version "4.4.0" 12 | resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" 13 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 14 | dependencies: 15 | eslint-visitor-keys "^3.3.0" 16 | 17 | "@eslint-community/regexpp@^4.6.1": 18 | version "4.6.2" 19 | resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" 20 | integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== 21 | 22 | "@eslint/eslintrc@^2.1.1": 23 | version "2.1.1" 24 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz" 25 | integrity sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA== 26 | dependencies: 27 | ajv "^6.12.4" 28 | debug "^4.3.2" 29 | espree "^9.6.0" 30 | globals "^13.19.0" 31 | ignore "^5.2.0" 32 | import-fresh "^3.2.1" 33 | js-yaml "^4.1.0" 34 | minimatch "^3.1.2" 35 | strip-json-comments "^3.1.1" 36 | 37 | "@eslint/js@^8.46.0": 38 | version "8.46.0" 39 | resolved "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz" 40 | integrity sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA== 41 | 42 | "@humanwhocodes/config-array@^0.11.10": 43 | version "0.11.10" 44 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" 45 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 46 | dependencies: 47 | "@humanwhocodes/object-schema" "^1.2.1" 48 | debug "^4.1.1" 49 | minimatch "^3.0.5" 50 | 51 | "@humanwhocodes/module-importer@^1.0.1": 52 | version "1.0.1" 53 | resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" 54 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 55 | 56 | "@humanwhocodes/object-schema@^1.2.1": 57 | version "1.2.1" 58 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" 59 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 60 | 61 | "@nodelib/fs.scandir@2.1.5": 62 | version "2.1.5" 63 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 64 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 65 | dependencies: 66 | "@nodelib/fs.stat" "2.0.5" 67 | run-parallel "^1.1.9" 68 | 69 | "@nodelib/fs.stat@2.0.5": 70 | version "2.0.5" 71 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 72 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 73 | 74 | "@nodelib/fs.walk@^1.2.8": 75 | version "1.2.8" 76 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 77 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 78 | dependencies: 79 | "@nodelib/fs.scandir" "2.1.5" 80 | fastq "^1.6.0" 81 | 82 | "@sindresorhus/is@^4.0.0": 83 | version "4.6.0" 84 | resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" 85 | integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== 86 | 87 | "@szmarczak/http-timer@^4.0.5": 88 | version "4.0.6" 89 | resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" 90 | integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== 91 | dependencies: 92 | defer-to-connect "^2.0.0" 93 | 94 | "@types/cacheable-request@^6.0.1": 95 | version "6.0.3" 96 | resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" 97 | integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== 98 | dependencies: 99 | "@types/http-cache-semantics" "*" 100 | "@types/keyv" "^3.1.4" 101 | "@types/node" "*" 102 | "@types/responselike" "^1.0.0" 103 | 104 | "@types/http-cache-semantics@*": 105 | version "4.0.4" 106 | resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" 107 | integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== 108 | 109 | "@types/json5@^0.0.29": 110 | version "0.0.29" 111 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 112 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 113 | 114 | "@types/keyv@^3.1.4": 115 | version "3.1.4" 116 | resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" 117 | integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== 118 | dependencies: 119 | "@types/node" "*" 120 | 121 | "@types/node@*": 122 | version "20.14.1" 123 | resolved "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz" 124 | integrity sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA== 125 | dependencies: 126 | undici-types "~5.26.4" 127 | 128 | "@types/responselike@^1.0.0": 129 | version "1.0.3" 130 | resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" 131 | integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== 132 | dependencies: 133 | "@types/node" "*" 134 | 135 | acorn-jsx@^5.3.2: 136 | version "5.3.2" 137 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 138 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 139 | 140 | "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: 141 | version "8.10.0" 142 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" 143 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== 144 | 145 | ajv@^6.12.4: 146 | version "6.12.6" 147 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 148 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 149 | dependencies: 150 | fast-deep-equal "^3.1.1" 151 | fast-json-stable-stringify "^2.0.0" 152 | json-schema-traverse "^0.4.1" 153 | uri-js "^4.2.2" 154 | 155 | ansi-regex@^5.0.1: 156 | version "5.0.1" 157 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 158 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 159 | 160 | ansi-styles@^4.1.0: 161 | version "4.3.0" 162 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 163 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 164 | dependencies: 165 | color-convert "^2.0.1" 166 | 167 | argparse@^2.0.1: 168 | version "2.0.1" 169 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 170 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 171 | 172 | array-buffer-byte-length@^1.0.0: 173 | version "1.0.0" 174 | resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" 175 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== 176 | dependencies: 177 | call-bind "^1.0.2" 178 | is-array-buffer "^3.0.1" 179 | 180 | array-includes@^3.1.6: 181 | version "3.1.6" 182 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" 183 | integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== 184 | dependencies: 185 | call-bind "^1.0.2" 186 | define-properties "^1.1.4" 187 | es-abstract "^1.20.4" 188 | get-intrinsic "^1.1.3" 189 | is-string "^1.0.7" 190 | 191 | array.prototype.findlastindex@^1.2.2: 192 | version "1.2.2" 193 | resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz" 194 | integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== 195 | dependencies: 196 | call-bind "^1.0.2" 197 | define-properties "^1.1.4" 198 | es-abstract "^1.20.4" 199 | es-shim-unscopables "^1.0.0" 200 | get-intrinsic "^1.1.3" 201 | 202 | array.prototype.flat@^1.3.1: 203 | version "1.3.1" 204 | resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz" 205 | integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== 206 | dependencies: 207 | call-bind "^1.0.2" 208 | define-properties "^1.1.4" 209 | es-abstract "^1.20.4" 210 | es-shim-unscopables "^1.0.0" 211 | 212 | array.prototype.flatmap@^1.3.1: 213 | version "1.3.1" 214 | resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" 215 | integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== 216 | dependencies: 217 | call-bind "^1.0.2" 218 | define-properties "^1.1.4" 219 | es-abstract "^1.20.4" 220 | es-shim-unscopables "^1.0.0" 221 | 222 | arraybuffer.prototype.slice@^1.0.1: 223 | version "1.0.1" 224 | resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz" 225 | integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== 226 | dependencies: 227 | array-buffer-byte-length "^1.0.0" 228 | call-bind "^1.0.2" 229 | define-properties "^1.2.0" 230 | get-intrinsic "^1.2.1" 231 | is-array-buffer "^3.0.2" 232 | is-shared-array-buffer "^1.0.2" 233 | 234 | asap@^2.0.0: 235 | version "2.0.6" 236 | resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" 237 | integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== 238 | 239 | asynckit@^0.4.0: 240 | version "0.4.0" 241 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" 242 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 243 | 244 | available-typed-arrays@^1.0.5: 245 | version "1.0.5" 246 | resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 247 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 248 | 249 | balanced-match@^1.0.0: 250 | version "1.0.2" 251 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 252 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 253 | 254 | brace-expansion@^1.1.7: 255 | version "1.1.11" 256 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 257 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 258 | dependencies: 259 | balanced-match "^1.0.0" 260 | concat-map "0.0.1" 261 | 262 | cacheable-lookup@^5.0.3: 263 | version "5.0.4" 264 | resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" 265 | integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== 266 | 267 | cacheable-request@^7.0.1: 268 | version "7.0.4" 269 | resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" 270 | integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== 271 | dependencies: 272 | clone-response "^1.0.2" 273 | get-stream "^5.1.0" 274 | http-cache-semantics "^4.0.0" 275 | keyv "^4.0.0" 276 | lowercase-keys "^2.0.0" 277 | normalize-url "^6.0.1" 278 | responselike "^2.0.0" 279 | 280 | call-bind@^1.0.0, call-bind@^1.0.2: 281 | version "1.0.2" 282 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 283 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 284 | dependencies: 285 | function-bind "^1.1.1" 286 | get-intrinsic "^1.0.2" 287 | 288 | callsites@^3.0.0: 289 | version "3.1.0" 290 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 291 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 292 | 293 | chalk@^4.0.0: 294 | version "4.1.2" 295 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 296 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 297 | dependencies: 298 | ansi-styles "^4.1.0" 299 | supports-color "^7.1.0" 300 | 301 | clone-response@^1.0.2: 302 | version "1.0.3" 303 | resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" 304 | integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== 305 | dependencies: 306 | mimic-response "^1.0.0" 307 | 308 | cloud189-sdk@^1.0.3: 309 | version "1.0.3" 310 | resolved "https://registry.npmjs.org/cloud189-sdk/-/cloud189-sdk-1.0.3.tgz" 311 | integrity sha512-eK+ARmNKId9XEPCJJ+/VTXcJ7E5Upg5cEca24cz/mnPt0VJh16abJbMTqvZ8wMM5qTDYYc2BvaIKe7OWKcFHaA== 312 | dependencies: 313 | got "11.8.2" 314 | node-jsencrypt "^1.0.0" 315 | tough-cookie "^4.1.4" 316 | 317 | color-convert@^2.0.1: 318 | version "2.0.1" 319 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 320 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 321 | dependencies: 322 | color-name "~1.1.4" 323 | 324 | color-name@~1.1.4: 325 | version "1.1.4" 326 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 327 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 328 | 329 | combined-stream@^1.0.8: 330 | version "1.0.8" 331 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" 332 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 333 | dependencies: 334 | delayed-stream "~1.0.0" 335 | 336 | component-emitter@^1.3.0: 337 | version "1.3.0" 338 | resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" 339 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 340 | 341 | concat-map@0.0.1: 342 | version "0.0.1" 343 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 344 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 345 | 346 | confusing-browser-globals@^1.0.10: 347 | version "1.0.11" 348 | resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" 349 | integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== 350 | 351 | cookiejar@^2.1.3: 352 | version "2.1.3" 353 | resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" 354 | integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== 355 | 356 | cross-spawn@^7.0.2: 357 | version "7.0.3" 358 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 359 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 360 | dependencies: 361 | path-key "^3.1.0" 362 | shebang-command "^2.0.0" 363 | which "^2.0.1" 364 | 365 | date-format@^4.0.14: 366 | version "4.0.14" 367 | resolved "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz" 368 | integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== 369 | 370 | debug@^3.2.7: 371 | version "3.2.7" 372 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 373 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 374 | dependencies: 375 | ms "^2.1.1" 376 | 377 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 378 | version "4.3.4" 379 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 380 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 381 | dependencies: 382 | ms "2.1.2" 383 | 384 | decompress-response@^6.0.0: 385 | version "6.0.0" 386 | resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" 387 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 388 | dependencies: 389 | mimic-response "^3.1.0" 390 | 391 | deep-is@^0.1.3: 392 | version "0.1.4" 393 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 394 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 395 | 396 | defer-to-connect@^2.0.0: 397 | version "2.0.1" 398 | resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" 399 | integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== 400 | 401 | define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: 402 | version "1.2.0" 403 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" 404 | integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== 405 | dependencies: 406 | has-property-descriptors "^1.0.0" 407 | object-keys "^1.1.1" 408 | 409 | delayed-stream@~1.0.0: 410 | version "1.0.0" 411 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" 412 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 413 | 414 | dezalgo@1.0.3: 415 | version "1.0.3" 416 | resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" 417 | integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== 418 | dependencies: 419 | asap "^2.0.0" 420 | wrappy "1" 421 | 422 | doctrine@^2.1.0: 423 | version "2.1.0" 424 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" 425 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 426 | dependencies: 427 | esutils "^2.0.2" 428 | 429 | doctrine@^3.0.0: 430 | version "3.0.0" 431 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 432 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 433 | dependencies: 434 | esutils "^2.0.2" 435 | 436 | dom-walk@^0.1.0: 437 | version "0.1.2" 438 | resolved "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" 439 | integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== 440 | 441 | dotenv@^16.4.5: 442 | version "16.4.7" 443 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz" 444 | integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== 445 | 446 | end-of-stream@^1.1.0: 447 | version "1.4.4" 448 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 449 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 450 | dependencies: 451 | once "^1.4.0" 452 | 453 | es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: 454 | version "1.22.1" 455 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz" 456 | integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== 457 | dependencies: 458 | array-buffer-byte-length "^1.0.0" 459 | arraybuffer.prototype.slice "^1.0.1" 460 | available-typed-arrays "^1.0.5" 461 | call-bind "^1.0.2" 462 | es-set-tostringtag "^2.0.1" 463 | es-to-primitive "^1.2.1" 464 | function.prototype.name "^1.1.5" 465 | get-intrinsic "^1.2.1" 466 | get-symbol-description "^1.0.0" 467 | globalthis "^1.0.3" 468 | gopd "^1.0.1" 469 | has "^1.0.3" 470 | has-property-descriptors "^1.0.0" 471 | has-proto "^1.0.1" 472 | has-symbols "^1.0.3" 473 | internal-slot "^1.0.5" 474 | is-array-buffer "^3.0.2" 475 | is-callable "^1.2.7" 476 | is-negative-zero "^2.0.2" 477 | is-regex "^1.1.4" 478 | is-shared-array-buffer "^1.0.2" 479 | is-string "^1.0.7" 480 | is-typed-array "^1.1.10" 481 | is-weakref "^1.0.2" 482 | object-inspect "^1.12.3" 483 | object-keys "^1.1.1" 484 | object.assign "^4.1.4" 485 | regexp.prototype.flags "^1.5.0" 486 | safe-array-concat "^1.0.0" 487 | safe-regex-test "^1.0.0" 488 | string.prototype.trim "^1.2.7" 489 | string.prototype.trimend "^1.0.6" 490 | string.prototype.trimstart "^1.0.6" 491 | typed-array-buffer "^1.0.0" 492 | typed-array-byte-length "^1.0.0" 493 | typed-array-byte-offset "^1.0.0" 494 | typed-array-length "^1.0.4" 495 | unbox-primitive "^1.0.2" 496 | which-typed-array "^1.1.10" 497 | 498 | es-set-tostringtag@^2.0.1: 499 | version "2.0.1" 500 | resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" 501 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== 502 | dependencies: 503 | get-intrinsic "^1.1.3" 504 | has "^1.0.3" 505 | has-tostringtag "^1.0.0" 506 | 507 | es-shim-unscopables@^1.0.0: 508 | version "1.0.0" 509 | resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" 510 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 511 | dependencies: 512 | has "^1.0.3" 513 | 514 | es-to-primitive@^1.2.1: 515 | version "1.2.1" 516 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 517 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 518 | dependencies: 519 | is-callable "^1.1.4" 520 | is-date-object "^1.0.1" 521 | is-symbol "^1.0.2" 522 | 523 | escape-string-regexp@^4.0.0: 524 | version "4.0.0" 525 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 526 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 527 | 528 | eslint-config-airbnb-base@^15.0.0: 529 | version "15.0.0" 530 | resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz" 531 | integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== 532 | dependencies: 533 | confusing-browser-globals "^1.0.10" 534 | object.assign "^4.1.2" 535 | object.entries "^1.1.5" 536 | semver "^6.3.0" 537 | 538 | eslint-import-resolver-node@^0.3.7: 539 | version "0.3.9" 540 | resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" 541 | integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== 542 | dependencies: 543 | debug "^3.2.7" 544 | is-core-module "^2.13.0" 545 | resolve "^1.22.4" 546 | 547 | eslint-module-utils@^2.8.0: 548 | version "2.8.0" 549 | resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" 550 | integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== 551 | dependencies: 552 | debug "^3.2.7" 553 | 554 | eslint-plugin-import@^2.25.2, eslint-plugin-import@^2.27.5: 555 | version "2.28.0" 556 | resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz" 557 | integrity sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q== 558 | dependencies: 559 | array-includes "^3.1.6" 560 | array.prototype.findlastindex "^1.2.2" 561 | array.prototype.flat "^1.3.1" 562 | array.prototype.flatmap "^1.3.1" 563 | debug "^3.2.7" 564 | doctrine "^2.1.0" 565 | eslint-import-resolver-node "^0.3.7" 566 | eslint-module-utils "^2.8.0" 567 | has "^1.0.3" 568 | is-core-module "^2.12.1" 569 | is-glob "^4.0.3" 570 | minimatch "^3.1.2" 571 | object.fromentries "^2.0.6" 572 | object.groupby "^1.0.0" 573 | object.values "^1.1.6" 574 | resolve "^1.22.3" 575 | semver "^6.3.1" 576 | tsconfig-paths "^3.14.2" 577 | 578 | eslint-scope@^7.2.2: 579 | version "7.2.2" 580 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" 581 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 582 | dependencies: 583 | esrecurse "^4.3.0" 584 | estraverse "^5.2.0" 585 | 586 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.2: 587 | version "3.4.2" 588 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz" 589 | integrity sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw== 590 | 591 | "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.32.0 || ^8.2.0", eslint@^8.40.0: 592 | version "8.46.0" 593 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz" 594 | integrity sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg== 595 | dependencies: 596 | "@eslint-community/eslint-utils" "^4.2.0" 597 | "@eslint-community/regexpp" "^4.6.1" 598 | "@eslint/eslintrc" "^2.1.1" 599 | "@eslint/js" "^8.46.0" 600 | "@humanwhocodes/config-array" "^0.11.10" 601 | "@humanwhocodes/module-importer" "^1.0.1" 602 | "@nodelib/fs.walk" "^1.2.8" 603 | ajv "^6.12.4" 604 | chalk "^4.0.0" 605 | cross-spawn "^7.0.2" 606 | debug "^4.3.2" 607 | doctrine "^3.0.0" 608 | escape-string-regexp "^4.0.0" 609 | eslint-scope "^7.2.2" 610 | eslint-visitor-keys "^3.4.2" 611 | espree "^9.6.1" 612 | esquery "^1.4.2" 613 | esutils "^2.0.2" 614 | fast-deep-equal "^3.1.3" 615 | file-entry-cache "^6.0.1" 616 | find-up "^5.0.0" 617 | glob-parent "^6.0.2" 618 | globals "^13.19.0" 619 | graphemer "^1.4.0" 620 | ignore "^5.2.0" 621 | imurmurhash "^0.1.4" 622 | is-glob "^4.0.0" 623 | is-path-inside "^3.0.3" 624 | js-yaml "^4.1.0" 625 | json-stable-stringify-without-jsonify "^1.0.1" 626 | levn "^0.4.1" 627 | lodash.merge "^4.6.2" 628 | minimatch "^3.1.2" 629 | natural-compare "^1.4.0" 630 | optionator "^0.9.3" 631 | strip-ansi "^6.0.1" 632 | text-table "^0.2.0" 633 | 634 | espree@^9.6.0, espree@^9.6.1: 635 | version "9.6.1" 636 | resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" 637 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 638 | dependencies: 639 | acorn "^8.9.0" 640 | acorn-jsx "^5.3.2" 641 | eslint-visitor-keys "^3.4.1" 642 | 643 | esquery@^1.4.2: 644 | version "1.5.0" 645 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" 646 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 647 | dependencies: 648 | estraverse "^5.1.0" 649 | 650 | esrecurse@^4.3.0: 651 | version "4.3.0" 652 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 653 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 654 | dependencies: 655 | estraverse "^5.2.0" 656 | 657 | estraverse@^5.1.0, estraverse@^5.2.0: 658 | version "5.3.0" 659 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 660 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 661 | 662 | esutils@^2.0.2: 663 | version "2.0.3" 664 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 665 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 666 | 667 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 668 | version "3.1.3" 669 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 670 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 671 | 672 | fast-json-stable-stringify@^2.0.0: 673 | version "2.1.0" 674 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 675 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 676 | 677 | fast-levenshtein@^2.0.6: 678 | version "2.0.6" 679 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 680 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 681 | 682 | fast-safe-stringify@^2.1.1: 683 | version "2.1.1" 684 | resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" 685 | integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== 686 | 687 | fastq@^1.6.0: 688 | version "1.15.0" 689 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" 690 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 691 | dependencies: 692 | reusify "^1.0.4" 693 | 694 | file-entry-cache@^6.0.1: 695 | version "6.0.1" 696 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 697 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 698 | dependencies: 699 | flat-cache "^3.0.4" 700 | 701 | find-up@^5.0.0: 702 | version "5.0.0" 703 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 704 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 705 | dependencies: 706 | locate-path "^6.0.0" 707 | path-exists "^4.0.0" 708 | 709 | flat-cache@^3.0.4: 710 | version "3.0.4" 711 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 712 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 713 | dependencies: 714 | flatted "^3.1.0" 715 | rimraf "^3.0.2" 716 | 717 | flatted@^3.1.0, flatted@^3.2.7: 718 | version "3.2.7" 719 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" 720 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 721 | 722 | for-each@^0.3.3: 723 | version "0.3.3" 724 | resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 725 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 726 | dependencies: 727 | is-callable "^1.1.3" 728 | 729 | form-data@^4.0.0: 730 | version "4.0.0" 731 | resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" 732 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 733 | dependencies: 734 | asynckit "^0.4.0" 735 | combined-stream "^1.0.8" 736 | mime-types "^2.1.12" 737 | 738 | formidable@^2.0.1: 739 | version "2.0.1" 740 | resolved "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz" 741 | integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== 742 | dependencies: 743 | dezalgo "1.0.3" 744 | hexoid "1.0.0" 745 | once "1.4.0" 746 | qs "6.9.3" 747 | 748 | fs-extra@^8.1.0: 749 | version "8.1.0" 750 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" 751 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 752 | dependencies: 753 | graceful-fs "^4.2.0" 754 | jsonfile "^4.0.0" 755 | universalify "^0.1.0" 756 | 757 | fs.realpath@^1.0.0: 758 | version "1.0.0" 759 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 760 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 761 | 762 | function-bind@^1.1.1: 763 | version "1.1.1" 764 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 765 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 766 | 767 | function.prototype.name@^1.1.5: 768 | version "1.1.5" 769 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" 770 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 771 | dependencies: 772 | call-bind "^1.0.2" 773 | define-properties "^1.1.3" 774 | es-abstract "^1.19.0" 775 | functions-have-names "^1.2.2" 776 | 777 | functions-have-names@^1.2.2, functions-have-names@^1.2.3: 778 | version "1.2.3" 779 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 780 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 781 | 782 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: 783 | version "1.2.1" 784 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" 785 | integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== 786 | dependencies: 787 | function-bind "^1.1.1" 788 | has "^1.0.3" 789 | has-proto "^1.0.1" 790 | has-symbols "^1.0.3" 791 | 792 | get-random-values@^1.2.0: 793 | version "1.2.2" 794 | resolved "https://registry.npmjs.org/get-random-values/-/get-random-values-1.2.2.tgz" 795 | integrity sha512-lMyPjQyl0cNNdDf2oR+IQ/fM3itDvpoHy45Ymo2r0L1EjazeSl13SfbKZs7KtZ/3MDCeueiaJiuOEfKqRTsSgA== 796 | dependencies: 797 | global "^4.4.0" 798 | 799 | get-stream@^5.1.0: 800 | version "5.2.0" 801 | resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" 802 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 803 | dependencies: 804 | pump "^3.0.0" 805 | 806 | get-symbol-description@^1.0.0: 807 | version "1.0.0" 808 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 809 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 810 | dependencies: 811 | call-bind "^1.0.2" 812 | get-intrinsic "^1.1.1" 813 | 814 | glob-parent@^6.0.2: 815 | version "6.0.2" 816 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 817 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 818 | dependencies: 819 | is-glob "^4.0.3" 820 | 821 | glob@^7.1.3: 822 | version "7.2.3" 823 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 824 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 825 | dependencies: 826 | fs.realpath "^1.0.0" 827 | inflight "^1.0.4" 828 | inherits "2" 829 | minimatch "^3.1.1" 830 | once "^1.3.0" 831 | path-is-absolute "^1.0.0" 832 | 833 | global@^4.4.0: 834 | version "4.4.0" 835 | resolved "https://registry.npmjs.org/global/-/global-4.4.0.tgz" 836 | integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== 837 | dependencies: 838 | min-document "^2.19.0" 839 | process "^0.11.10" 840 | 841 | globals@^13.19.0: 842 | version "13.20.0" 843 | resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" 844 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 845 | dependencies: 846 | type-fest "^0.20.2" 847 | 848 | globalthis@^1.0.3: 849 | version "1.0.3" 850 | resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" 851 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 852 | dependencies: 853 | define-properties "^1.1.3" 854 | 855 | gopd@^1.0.1: 856 | version "1.0.1" 857 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" 858 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 859 | dependencies: 860 | get-intrinsic "^1.1.3" 861 | 862 | got@11.8.2: 863 | version "11.8.2" 864 | resolved "https://registry.npmjs.org/got/-/got-11.8.2.tgz" 865 | integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== 866 | dependencies: 867 | "@sindresorhus/is" "^4.0.0" 868 | "@szmarczak/http-timer" "^4.0.5" 869 | "@types/cacheable-request" "^6.0.1" 870 | "@types/responselike" "^1.0.0" 871 | cacheable-lookup "^5.0.3" 872 | cacheable-request "^7.0.1" 873 | decompress-response "^6.0.0" 874 | http2-wrapper "^1.0.0-beta.5.2" 875 | lowercase-keys "^2.0.0" 876 | p-cancelable "^2.0.0" 877 | responselike "^2.0.0" 878 | 879 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 880 | version "4.2.11" 881 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" 882 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 883 | 884 | graphemer@^1.4.0: 885 | version "1.4.0" 886 | resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" 887 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 888 | 889 | has-bigints@^1.0.1, has-bigints@^1.0.2: 890 | version "1.0.2" 891 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 892 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 893 | 894 | has-flag@^4.0.0: 895 | version "4.0.0" 896 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 897 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 898 | 899 | has-property-descriptors@^1.0.0: 900 | version "1.0.0" 901 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 902 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 903 | dependencies: 904 | get-intrinsic "^1.1.1" 905 | 906 | has-proto@^1.0.1: 907 | version "1.0.1" 908 | resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" 909 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 910 | 911 | has-symbols@^1.0.2, has-symbols@^1.0.3: 912 | version "1.0.3" 913 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 914 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 915 | 916 | has-tostringtag@^1.0.0: 917 | version "1.0.0" 918 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 919 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 920 | dependencies: 921 | has-symbols "^1.0.2" 922 | 923 | has@^1.0.3: 924 | version "1.0.3" 925 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 926 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 927 | dependencies: 928 | function-bind "^1.1.1" 929 | 930 | hexoid@1.0.0: 931 | version "1.0.0" 932 | resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" 933 | integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== 934 | 935 | http-cache-semantics@^4.0.0: 936 | version "4.1.1" 937 | resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" 938 | integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== 939 | 940 | http2-wrapper@^1.0.0-beta.5.2: 941 | version "1.0.3" 942 | resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" 943 | integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== 944 | dependencies: 945 | quick-lru "^5.1.1" 946 | resolve-alpn "^1.0.0" 947 | 948 | ignore@^5.2.0: 949 | version "5.2.4" 950 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" 951 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 952 | 953 | import-fresh@^3.2.1: 954 | version "3.3.0" 955 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 956 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 957 | dependencies: 958 | parent-module "^1.0.0" 959 | resolve-from "^4.0.0" 960 | 961 | imurmurhash@^0.1.4: 962 | version "0.1.4" 963 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 964 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 965 | 966 | inflight@^1.0.4: 967 | version "1.0.6" 968 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 969 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 970 | dependencies: 971 | once "^1.3.0" 972 | wrappy "1" 973 | 974 | inherits@^2.0.3, inherits@2: 975 | version "2.0.4" 976 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 977 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 978 | 979 | internal-slot@^1.0.5: 980 | version "1.0.5" 981 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" 982 | integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== 983 | dependencies: 984 | get-intrinsic "^1.2.0" 985 | has "^1.0.3" 986 | side-channel "^1.0.4" 987 | 988 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: 989 | version "3.0.2" 990 | resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" 991 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== 992 | dependencies: 993 | call-bind "^1.0.2" 994 | get-intrinsic "^1.2.0" 995 | is-typed-array "^1.1.10" 996 | 997 | is-bigint@^1.0.1: 998 | version "1.0.4" 999 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1000 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1001 | dependencies: 1002 | has-bigints "^1.0.1" 1003 | 1004 | is-boolean-object@^1.1.0: 1005 | version "1.1.2" 1006 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 1007 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1008 | dependencies: 1009 | call-bind "^1.0.2" 1010 | has-tostringtag "^1.0.0" 1011 | 1012 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1013 | version "1.2.7" 1014 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" 1015 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1016 | 1017 | is-core-module@^2.12.1, is-core-module@^2.13.0: 1018 | version "2.13.0" 1019 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" 1020 | integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== 1021 | dependencies: 1022 | has "^1.0.3" 1023 | 1024 | is-date-object@^1.0.1: 1025 | version "1.0.5" 1026 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 1027 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1028 | dependencies: 1029 | has-tostringtag "^1.0.0" 1030 | 1031 | is-extglob@^2.1.1: 1032 | version "2.1.1" 1033 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1034 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1035 | 1036 | is-glob@^4.0.0, is-glob@^4.0.3: 1037 | version "4.0.3" 1038 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1039 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1040 | dependencies: 1041 | is-extglob "^2.1.1" 1042 | 1043 | is-negative-zero@^2.0.2: 1044 | version "2.0.2" 1045 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1046 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1047 | 1048 | is-number-object@^1.0.4: 1049 | version "1.0.7" 1050 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" 1051 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1052 | dependencies: 1053 | has-tostringtag "^1.0.0" 1054 | 1055 | is-path-inside@^3.0.3: 1056 | version "3.0.3" 1057 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 1058 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1059 | 1060 | is-regex@^1.1.4: 1061 | version "1.1.4" 1062 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1063 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1064 | dependencies: 1065 | call-bind "^1.0.2" 1066 | has-tostringtag "^1.0.0" 1067 | 1068 | is-shared-array-buffer@^1.0.2: 1069 | version "1.0.2" 1070 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1071 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1072 | dependencies: 1073 | call-bind "^1.0.2" 1074 | 1075 | is-string@^1.0.5, is-string@^1.0.7: 1076 | version "1.0.7" 1077 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1078 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1079 | dependencies: 1080 | has-tostringtag "^1.0.0" 1081 | 1082 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1083 | version "1.0.4" 1084 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1085 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1086 | dependencies: 1087 | has-symbols "^1.0.2" 1088 | 1089 | is-typed-array@^1.1.10, is-typed-array@^1.1.9: 1090 | version "1.1.12" 1091 | resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" 1092 | integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== 1093 | dependencies: 1094 | which-typed-array "^1.1.11" 1095 | 1096 | is-weakref@^1.0.2: 1097 | version "1.0.2" 1098 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1099 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1100 | dependencies: 1101 | call-bind "^1.0.2" 1102 | 1103 | isarray@^2.0.5: 1104 | version "2.0.5" 1105 | resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" 1106 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1107 | 1108 | isexe@^2.0.0: 1109 | version "2.0.0" 1110 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1111 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1112 | 1113 | js-yaml@^4.1.0: 1114 | version "4.1.0" 1115 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1116 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1117 | dependencies: 1118 | argparse "^2.0.1" 1119 | 1120 | json-buffer@3.0.1: 1121 | version "3.0.1" 1122 | resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" 1123 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1124 | 1125 | json-schema-traverse@^0.4.1: 1126 | version "0.4.1" 1127 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1128 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1129 | 1130 | json-stable-stringify-without-jsonify@^1.0.1: 1131 | version "1.0.1" 1132 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1133 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1134 | 1135 | json5@^1.0.2: 1136 | version "1.0.2" 1137 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" 1138 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1139 | dependencies: 1140 | minimist "^1.2.0" 1141 | 1142 | jsonfile@^4.0.0: 1143 | version "4.0.0" 1144 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" 1145 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== 1146 | optionalDependencies: 1147 | graceful-fs "^4.1.6" 1148 | 1149 | keyv@^4.0.0: 1150 | version "4.5.4" 1151 | resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" 1152 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1153 | dependencies: 1154 | json-buffer "3.0.1" 1155 | 1156 | levn@^0.4.1: 1157 | version "0.4.1" 1158 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1159 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1160 | dependencies: 1161 | prelude-ls "^1.2.1" 1162 | type-check "~0.4.0" 1163 | 1164 | locate-path@^6.0.0: 1165 | version "6.0.0" 1166 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1167 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1168 | dependencies: 1169 | p-locate "^5.0.0" 1170 | 1171 | lodash.merge@^4.6.2: 1172 | version "4.6.2" 1173 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1174 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1175 | 1176 | log4js@^6.9.1: 1177 | version "6.9.1" 1178 | resolved "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz" 1179 | integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== 1180 | dependencies: 1181 | date-format "^4.0.14" 1182 | debug "^4.3.4" 1183 | flatted "^3.2.7" 1184 | rfdc "^1.3.0" 1185 | streamroller "^3.1.5" 1186 | 1187 | lowercase-keys@^2.0.0: 1188 | version "2.0.0" 1189 | resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" 1190 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1191 | 1192 | lru-cache@^6.0.0: 1193 | version "6.0.0" 1194 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 1195 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1196 | dependencies: 1197 | yallist "^4.0.0" 1198 | 1199 | methods@^1.1.2: 1200 | version "1.1.2" 1201 | resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" 1202 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 1203 | 1204 | mime-db@1.52.0: 1205 | version "1.52.0" 1206 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 1207 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1208 | 1209 | mime-types@^2.1.12: 1210 | version "2.1.35" 1211 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 1212 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1213 | dependencies: 1214 | mime-db "1.52.0" 1215 | 1216 | mime@^2.5.0: 1217 | version "2.6.0" 1218 | resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" 1219 | integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== 1220 | 1221 | mimic-response@^1.0.0: 1222 | version "1.0.1" 1223 | resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" 1224 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1225 | 1226 | mimic-response@^3.1.0: 1227 | version "3.1.0" 1228 | resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" 1229 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1230 | 1231 | min-document@^2.19.0: 1232 | version "2.19.0" 1233 | resolved "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" 1234 | integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== 1235 | dependencies: 1236 | dom-walk "^0.1.0" 1237 | 1238 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1239 | version "3.1.2" 1240 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1241 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1242 | dependencies: 1243 | brace-expansion "^1.1.7" 1244 | 1245 | minimist@^1.2.0, minimist@^1.2.6: 1246 | version "1.2.8" 1247 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 1248 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1249 | 1250 | ms@^2.1.1, ms@2.1.2: 1251 | version "2.1.2" 1252 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1253 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1254 | 1255 | natural-compare@^1.4.0: 1256 | version "1.4.0" 1257 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1258 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1259 | 1260 | node-jsencrypt@^1.0.0: 1261 | version "1.0.0" 1262 | resolved "https://registry.npmjs.org/node-jsencrypt/-/node-jsencrypt-1.0.0.tgz" 1263 | integrity sha1-g//O1BTsvhL+oBfGxYXJv8Sa0Zs= sha512-ANQ/XkOVS02R89MtfoelFxarMsLA12nlOT802VS4LVhl+JRSRZIvkLIjvKYZmIar+mENUkR9mBKUdcdiPy/7lA== 1264 | dependencies: 1265 | get-random-values "^1.2.0" 1266 | 1267 | normalize-url@^6.0.1: 1268 | version "6.1.0" 1269 | resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" 1270 | integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== 1271 | 1272 | object-inspect@^1.12.3, object-inspect@^1.9.0: 1273 | version "1.12.3" 1274 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" 1275 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== 1276 | 1277 | object-keys@^1.1.1: 1278 | version "1.1.1" 1279 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1280 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1281 | 1282 | object.assign@^4.1.2, object.assign@^4.1.4: 1283 | version "4.1.4" 1284 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" 1285 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1286 | dependencies: 1287 | call-bind "^1.0.2" 1288 | define-properties "^1.1.4" 1289 | has-symbols "^1.0.3" 1290 | object-keys "^1.1.1" 1291 | 1292 | object.entries@^1.1.5: 1293 | version "1.1.6" 1294 | resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz" 1295 | integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== 1296 | dependencies: 1297 | call-bind "^1.0.2" 1298 | define-properties "^1.1.4" 1299 | es-abstract "^1.20.4" 1300 | 1301 | object.fromentries@^2.0.6: 1302 | version "2.0.6" 1303 | resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz" 1304 | integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== 1305 | dependencies: 1306 | call-bind "^1.0.2" 1307 | define-properties "^1.1.4" 1308 | es-abstract "^1.20.4" 1309 | 1310 | object.groupby@^1.0.0: 1311 | version "1.0.0" 1312 | resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz" 1313 | integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== 1314 | dependencies: 1315 | call-bind "^1.0.2" 1316 | define-properties "^1.2.0" 1317 | es-abstract "^1.21.2" 1318 | get-intrinsic "^1.2.1" 1319 | 1320 | object.values@^1.1.6: 1321 | version "1.1.6" 1322 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" 1323 | integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== 1324 | dependencies: 1325 | call-bind "^1.0.2" 1326 | define-properties "^1.1.4" 1327 | es-abstract "^1.20.4" 1328 | 1329 | once@^1.3.0, once@^1.3.1, once@^1.4.0, once@1.4.0: 1330 | version "1.4.0" 1331 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1332 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1333 | dependencies: 1334 | wrappy "1" 1335 | 1336 | optionator@^0.9.3: 1337 | version "0.9.3" 1338 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" 1339 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1340 | dependencies: 1341 | "@aashutoshrathi/word-wrap" "^1.2.3" 1342 | deep-is "^0.1.3" 1343 | fast-levenshtein "^2.0.6" 1344 | levn "^0.4.1" 1345 | prelude-ls "^1.2.1" 1346 | type-check "^0.4.0" 1347 | 1348 | p-cancelable@^2.0.0: 1349 | version "2.1.1" 1350 | resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" 1351 | integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== 1352 | 1353 | p-limit@^3.0.2: 1354 | version "3.1.0" 1355 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1356 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1357 | dependencies: 1358 | yocto-queue "^0.1.0" 1359 | 1360 | p-locate@^5.0.0: 1361 | version "5.0.0" 1362 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1363 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1364 | dependencies: 1365 | p-limit "^3.0.2" 1366 | 1367 | parent-module@^1.0.0: 1368 | version "1.0.1" 1369 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1370 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1371 | dependencies: 1372 | callsites "^3.0.0" 1373 | 1374 | path-exists@^4.0.0: 1375 | version "4.0.0" 1376 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1377 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1378 | 1379 | path-is-absolute@^1.0.0: 1380 | version "1.0.1" 1381 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1382 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1383 | 1384 | path-key@^3.1.0: 1385 | version "3.1.1" 1386 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1387 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1388 | 1389 | path-parse@^1.0.7: 1390 | version "1.0.7" 1391 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1392 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1393 | 1394 | prelude-ls@^1.2.1: 1395 | version "1.2.1" 1396 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1397 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1398 | 1399 | process@^0.11.10: 1400 | version "0.11.10" 1401 | resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" 1402 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 1403 | 1404 | psl@^1.1.33: 1405 | version "1.9.0" 1406 | resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" 1407 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 1408 | 1409 | pump@^3.0.0: 1410 | version "3.0.0" 1411 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" 1412 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1413 | dependencies: 1414 | end-of-stream "^1.1.0" 1415 | once "^1.3.1" 1416 | 1417 | punycode@^2.1.0, punycode@^2.1.1: 1418 | version "2.3.1" 1419 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" 1420 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 1421 | 1422 | qs@^6.10.3: 1423 | version "6.10.3" 1424 | resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" 1425 | integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== 1426 | dependencies: 1427 | side-channel "^1.0.4" 1428 | 1429 | qs@6.9.3: 1430 | version "6.9.3" 1431 | resolved "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz" 1432 | integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== 1433 | 1434 | querystringify@^2.1.1: 1435 | version "2.2.0" 1436 | resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" 1437 | integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== 1438 | 1439 | queue-microtask@^1.2.2: 1440 | version "1.2.3" 1441 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1442 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1443 | 1444 | quick-lru@^5.1.1: 1445 | version "5.1.1" 1446 | resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" 1447 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1448 | 1449 | readable-stream@^3.6.0: 1450 | version "3.6.0" 1451 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" 1452 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== 1453 | dependencies: 1454 | inherits "^2.0.3" 1455 | string_decoder "^1.1.1" 1456 | util-deprecate "^1.0.1" 1457 | 1458 | regexp.prototype.flags@^1.5.0: 1459 | version "1.5.0" 1460 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz" 1461 | integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== 1462 | dependencies: 1463 | call-bind "^1.0.2" 1464 | define-properties "^1.2.0" 1465 | functions-have-names "^1.2.3" 1466 | 1467 | requires-port@^1.0.0: 1468 | version "1.0.0" 1469 | resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" 1470 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 1471 | 1472 | resolve-alpn@^1.0.0: 1473 | version "1.2.1" 1474 | resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" 1475 | integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== 1476 | 1477 | resolve-from@^4.0.0: 1478 | version "4.0.0" 1479 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1480 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1481 | 1482 | resolve@^1.22.3, resolve@^1.22.4: 1483 | version "1.22.4" 1484 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz" 1485 | integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== 1486 | dependencies: 1487 | is-core-module "^2.13.0" 1488 | path-parse "^1.0.7" 1489 | supports-preserve-symlinks-flag "^1.0.0" 1490 | 1491 | responselike@^2.0.0: 1492 | version "2.0.1" 1493 | resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" 1494 | integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== 1495 | dependencies: 1496 | lowercase-keys "^2.0.0" 1497 | 1498 | reusify@^1.0.4: 1499 | version "1.0.4" 1500 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1501 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1502 | 1503 | rfdc@^1.3.0: 1504 | version "1.3.0" 1505 | resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" 1506 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 1507 | 1508 | rimraf@^3.0.2: 1509 | version "3.0.2" 1510 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1511 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1512 | dependencies: 1513 | glob "^7.1.3" 1514 | 1515 | run-parallel@^1.1.9: 1516 | version "1.2.0" 1517 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1518 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1519 | dependencies: 1520 | queue-microtask "^1.2.2" 1521 | 1522 | safe-array-concat@^1.0.0: 1523 | version "1.0.0" 1524 | resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz" 1525 | integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== 1526 | dependencies: 1527 | call-bind "^1.0.2" 1528 | get-intrinsic "^1.2.0" 1529 | has-symbols "^1.0.3" 1530 | isarray "^2.0.5" 1531 | 1532 | safe-buffer@~5.2.0: 1533 | version "5.2.1" 1534 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1535 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1536 | 1537 | safe-regex-test@^1.0.0: 1538 | version "1.0.0" 1539 | resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" 1540 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 1541 | dependencies: 1542 | call-bind "^1.0.2" 1543 | get-intrinsic "^1.1.3" 1544 | is-regex "^1.1.4" 1545 | 1546 | semver@^6.3.0, semver@^6.3.1: 1547 | version "6.3.1" 1548 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" 1549 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 1550 | 1551 | semver@^7.3.7: 1552 | version "7.3.7" 1553 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" 1554 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1555 | dependencies: 1556 | lru-cache "^6.0.0" 1557 | 1558 | shebang-command@^2.0.0: 1559 | version "2.0.0" 1560 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1561 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1562 | dependencies: 1563 | shebang-regex "^3.0.0" 1564 | 1565 | shebang-regex@^3.0.0: 1566 | version "3.0.0" 1567 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1568 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1569 | 1570 | side-channel@^1.0.4: 1571 | version "1.0.4" 1572 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1573 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1574 | dependencies: 1575 | call-bind "^1.0.0" 1576 | get-intrinsic "^1.0.2" 1577 | object-inspect "^1.9.0" 1578 | 1579 | streamroller@^3.1.5: 1580 | version "3.1.5" 1581 | resolved "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz" 1582 | integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== 1583 | dependencies: 1584 | date-format "^4.0.14" 1585 | debug "^4.3.4" 1586 | fs-extra "^8.1.0" 1587 | 1588 | string_decoder@^1.1.1: 1589 | version "1.3.0" 1590 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" 1591 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1592 | dependencies: 1593 | safe-buffer "~5.2.0" 1594 | 1595 | string.prototype.trim@^1.2.7: 1596 | version "1.2.7" 1597 | resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" 1598 | integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== 1599 | dependencies: 1600 | call-bind "^1.0.2" 1601 | define-properties "^1.1.4" 1602 | es-abstract "^1.20.4" 1603 | 1604 | string.prototype.trimend@^1.0.6: 1605 | version "1.0.6" 1606 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" 1607 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== 1608 | dependencies: 1609 | call-bind "^1.0.2" 1610 | define-properties "^1.1.4" 1611 | es-abstract "^1.20.4" 1612 | 1613 | string.prototype.trimstart@^1.0.6: 1614 | version "1.0.6" 1615 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" 1616 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== 1617 | dependencies: 1618 | call-bind "^1.0.2" 1619 | define-properties "^1.1.4" 1620 | es-abstract "^1.20.4" 1621 | 1622 | strip-ansi@^6.0.1: 1623 | version "6.0.1" 1624 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1625 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1626 | dependencies: 1627 | ansi-regex "^5.0.1" 1628 | 1629 | strip-bom@^3.0.0: 1630 | version "3.0.0" 1631 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 1632 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1633 | 1634 | strip-json-comments@^3.1.1: 1635 | version "3.1.1" 1636 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1637 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1638 | 1639 | superagent@^7.1.3: 1640 | version "7.1.3" 1641 | resolved "https://registry.npmjs.org/superagent/-/superagent-7.1.3.tgz" 1642 | integrity sha512-WA6et4nAvgBCS73lJvv1D0ssI5uk5Gh+TGN/kNe+B608EtcVs/yzfl+OLXTzDs7tOBDIpvgh/WUs1K2OK1zTeQ== 1643 | dependencies: 1644 | component-emitter "^1.3.0" 1645 | cookiejar "^2.1.3" 1646 | debug "^4.3.4" 1647 | fast-safe-stringify "^2.1.1" 1648 | form-data "^4.0.0" 1649 | formidable "^2.0.1" 1650 | methods "^1.1.2" 1651 | mime "^2.5.0" 1652 | qs "^6.10.3" 1653 | readable-stream "^3.6.0" 1654 | semver "^7.3.7" 1655 | 1656 | supports-color@^7.1.0: 1657 | version "7.2.0" 1658 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1659 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1660 | dependencies: 1661 | has-flag "^4.0.0" 1662 | 1663 | supports-preserve-symlinks-flag@^1.0.0: 1664 | version "1.0.0" 1665 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1666 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1667 | 1668 | text-table@^0.2.0: 1669 | version "0.2.0" 1670 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1671 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1672 | 1673 | tough-cookie@^4.1.4: 1674 | version "4.1.4" 1675 | resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" 1676 | integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== 1677 | dependencies: 1678 | psl "^1.1.33" 1679 | punycode "^2.1.1" 1680 | universalify "^0.2.0" 1681 | url-parse "^1.5.3" 1682 | 1683 | tsconfig-paths@^3.14.2: 1684 | version "3.14.2" 1685 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" 1686 | integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== 1687 | dependencies: 1688 | "@types/json5" "^0.0.29" 1689 | json5 "^1.0.2" 1690 | minimist "^1.2.6" 1691 | strip-bom "^3.0.0" 1692 | 1693 | type-check@^0.4.0, type-check@~0.4.0: 1694 | version "0.4.0" 1695 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1696 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1697 | dependencies: 1698 | prelude-ls "^1.2.1" 1699 | 1700 | type-fest@^0.20.2: 1701 | version "0.20.2" 1702 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1703 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1704 | 1705 | typed-array-buffer@^1.0.0: 1706 | version "1.0.0" 1707 | resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" 1708 | integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== 1709 | dependencies: 1710 | call-bind "^1.0.2" 1711 | get-intrinsic "^1.2.1" 1712 | is-typed-array "^1.1.10" 1713 | 1714 | typed-array-byte-length@^1.0.0: 1715 | version "1.0.0" 1716 | resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" 1717 | integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== 1718 | dependencies: 1719 | call-bind "^1.0.2" 1720 | for-each "^0.3.3" 1721 | has-proto "^1.0.1" 1722 | is-typed-array "^1.1.10" 1723 | 1724 | typed-array-byte-offset@^1.0.0: 1725 | version "1.0.0" 1726 | resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" 1727 | integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== 1728 | dependencies: 1729 | available-typed-arrays "^1.0.5" 1730 | call-bind "^1.0.2" 1731 | for-each "^0.3.3" 1732 | has-proto "^1.0.1" 1733 | is-typed-array "^1.1.10" 1734 | 1735 | typed-array-length@^1.0.4: 1736 | version "1.0.4" 1737 | resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" 1738 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 1739 | dependencies: 1740 | call-bind "^1.0.2" 1741 | for-each "^0.3.3" 1742 | is-typed-array "^1.1.9" 1743 | 1744 | unbox-primitive@^1.0.2: 1745 | version "1.0.2" 1746 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1747 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1748 | dependencies: 1749 | call-bind "^1.0.2" 1750 | has-bigints "^1.0.2" 1751 | has-symbols "^1.0.3" 1752 | which-boxed-primitive "^1.0.2" 1753 | 1754 | undici-types@~5.26.4: 1755 | version "5.26.5" 1756 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1757 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1758 | 1759 | universalify@^0.1.0: 1760 | version "0.1.2" 1761 | resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" 1762 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 1763 | 1764 | universalify@^0.2.0: 1765 | version "0.2.0" 1766 | resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" 1767 | integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== 1768 | 1769 | uri-js@^4.2.2: 1770 | version "4.4.1" 1771 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1772 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1773 | dependencies: 1774 | punycode "^2.1.0" 1775 | 1776 | url-parse@^1.5.3: 1777 | version "1.5.10" 1778 | resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" 1779 | integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== 1780 | dependencies: 1781 | querystringify "^2.1.1" 1782 | requires-port "^1.0.0" 1783 | 1784 | util-deprecate@^1.0.1: 1785 | version "1.0.2" 1786 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1787 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1788 | 1789 | which-boxed-primitive@^1.0.2: 1790 | version "1.0.2" 1791 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1792 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1793 | dependencies: 1794 | is-bigint "^1.0.1" 1795 | is-boolean-object "^1.1.0" 1796 | is-number-object "^1.0.4" 1797 | is-string "^1.0.5" 1798 | is-symbol "^1.0.3" 1799 | 1800 | which-typed-array@^1.1.10, which-typed-array@^1.1.11: 1801 | version "1.1.11" 1802 | resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz" 1803 | integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== 1804 | dependencies: 1805 | available-typed-arrays "^1.0.5" 1806 | call-bind "^1.0.2" 1807 | for-each "^0.3.3" 1808 | gopd "^1.0.1" 1809 | has-tostringtag "^1.0.0" 1810 | 1811 | which@^2.0.1: 1812 | version "2.0.2" 1813 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1814 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1815 | dependencies: 1816 | isexe "^2.0.0" 1817 | 1818 | wrappy@1: 1819 | version "1.0.2" 1820 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1821 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1822 | 1823 | yallist@^4.0.0: 1824 | version "4.0.0" 1825 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1826 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1827 | 1828 | yocto-queue@^0.1.0: 1829 | version "0.1.0" 1830 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1831 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1832 | --------------------------------------------------------------------------------