├── run.cmd ├── .npmrc ├── .yarnrc ├── img ├── 1.jpg └── 2.jpg ├── config.json ├── .gitignore ├── package.json ├── README.md ├── main.js └── yarn.lock /run.cmd: -------------------------------------------------------------------------------- 1 | node-pkg\node.exe main.js 2 | pause -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmmirror.com/ -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | registry "https://registry.npmmirror.com/" -------------------------------------------------------------------------------- /img/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yukinotech/qBittorrent-block-xunlei/HEAD/img/1.jpg -------------------------------------------------------------------------------- /img/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yukinotech/qBittorrent-block-xunlei/HEAD/img/2.jpg -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": "127.0.0.1:8083", 3 | "username": "admin", 4 | "password": "xxxxxxxxxxxx" 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # yarn.lock 2 | node_modules 3 | dist 4 | 5 | # vscode 6 | .vscode 7 | 8 | # jest coverage 9 | coverage 10 | 11 | # build 12 | build 13 | 14 | *.log 15 | 16 | node-pkg 17 | 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "qBittorrent-block-xunlei", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "repository": "https://github.com/yukinotech/qBittorrent-block-xunlei", 6 | "author": "yukinotech ", 7 | "license": "MIT", 8 | "dependencies": { 9 | "axios": "^0.24.0", 10 | "qs": "^6.10.2", 11 | "winston": "^3.3.3" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # qBittorrent 迅雷客户端 屏蔽 2 | 3 | 受项目 uTorrent 自动屏蔽迅雷脚本 https://github.com/ShenHongFei/utorrent-block-xunlei 启发 4 | 5 | 原理类似,为qBittorrent 设计 6 | 7 | ## 其他可选项目 8 | 9 | - qBittorrent-Enhanced-Edition: https://github.com/c0re100/qBittorrent-Enhanced-Edition 10 | 11 | qBittorrent-Enhanced-Edition 编译打包时,已经集成屏蔽迅雷的列表 12 | 13 | ## 使用本项目的优势 14 | - 可以配合任意版本qBittorrent(只要支持webUI即可)或者官方最新版本,或者其他魔改版 15 | 16 | ## 如何使用 17 | 18 | ### 先设置统一环境 19 | 20 | 进入qBittorrent设置界面,选择打开web ui,输入用户名和密码,保证使用的安全,注意端口号和目录下的`config.json`保持一致 21 | ![屏幕截图 2022-01-02 232042.jpg](https://s2.loli.net/2022/01/02/c3unyd5hL1zl7wt.jpg) 22 | 23 | 编辑`config.json`,保证端口号,ip,用户名和密码一致 24 | ![屏幕截图 2022-01-02 232121.jpg](https://s2.loli.net/2022/01/02/iyMglBNzKjIkPRA.jpg) 25 | 26 | `127.0.0.1` 如果不了解,请勿修改 27 | ### 方法一 28 | 29 | 有node环境直接调用即可 30 | ``` 31 | // 安装依赖 32 | npm install 33 | // or 34 | yarn 35 | 36 | node main.js 37 | ``` 38 | 39 | ### 方法二 40 | 41 | 直接下载release包(包含runtime,包体积较大) 42 | 43 | 双击,windows下,执行`run.cmd`,弹出小窗即成功 -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const axios = require("axios") 2 | const fsPromises = require("fs/promises") 3 | const fs = require("fs") 4 | const path = require("path") 5 | const qs = require("qs") 6 | // const winston = require("winston") 7 | // const format = winston.format 8 | 9 | let dateStr = new Date() 10 | .toLocaleString("zh-CN", { hour12: false }) 11 | .replace(/[\/:]/g, "-") 12 | 13 | // const logFile = winston.createLogger({ 14 | // level: "info", 15 | // format: format.combine( 16 | // format.timestamp({ 17 | // format: "YYYY-MM-DD HH:mm:ss", 18 | // }), 19 | // format.splat(), 20 | // format.simple() 21 | // ), 22 | // transports: [ 23 | // new winston.transports.File({ 24 | // filename: dateStr + ".log", 25 | // }), 26 | // ], 27 | // }) 28 | 29 | console.log("log start", dateStr) 30 | 31 | const configPath = path.join(__dirname, "./config.json") 32 | const config = fs.readFileSync(configPath, { 33 | encoding: "utf-8", 34 | }) 35 | const configObj = JSON.parse(config) 36 | 37 | console.log("settings ", { 38 | username: 39 | configObj.username.slice(0, 1) + "***" + configObj.username.slice(4), 40 | password: 41 | configObj.password.slice(0, 1) + "***" + configObj.password.slice(4), 42 | root: configObj.root.slice(0, 1) + "***" + configObj.root.slice(4), 43 | }) 44 | // logFile.info("log start") 45 | 46 | let isBan = (client) => { 47 | if (!client || typeof client !== "string") return false 48 | return client.match(/(-XL0012-)|(Xunlei)|(^7\.)|(QQDownload)/i) 49 | } 50 | 51 | let main = async () => { 52 | // logFile.info("mission start") 53 | // number of peers be baned 54 | let banCount = 0 55 | const configPath = path.join(__dirname, "./config.json") 56 | const config = await fsPromises.readFile(configPath, { 57 | encoding: "utf-8", 58 | }) 59 | const configObj = JSON.parse(config) 60 | 61 | const commonHeader = { 62 | Host: configObj.root, 63 | Origin: "http://" + configObj.root, 64 | Pragma: "no-cache", 65 | Referer: "http://" + configObj.root + "/", 66 | "Accept-Encoding": "gzip, deflate, br", 67 | } 68 | 69 | // login 70 | let loginRes = await axios.request({ 71 | url: "http://" + configObj.root + "/api/v2/auth/login", 72 | method: "post", 73 | headers: { 74 | "Content-type": "application/x-www-form-urlencoded; charset=UTF-8", 75 | Accept: "*/*", 76 | ...commonHeader, 77 | }, 78 | data: qs.stringify({ 79 | username: configObj.username, 80 | password: configObj.password, 81 | }), 82 | }) 83 | 84 | let cookieStr = loginRes.headers?.["set-cookie"]?.[0] 85 | let cookie = cookieStr.match(/(.*?);/)[1] 86 | 87 | // logFile.info("cookie %s", cookie.slice(0, 4) + "********" + cookie.slice(12)) 88 | 89 | // get all mission info 90 | let allMission = await axios.request({ 91 | url: "http://" + configObj.root + "/api/v2/sync/maindata", 92 | method: "get", 93 | headers: { 94 | Accept: "application/json", 95 | ...commonHeader, 96 | cookie, 97 | }, 98 | }) 99 | 100 | let torrents = allMission.data.torrents 101 | let torrentsArr = Object.keys(torrents) 102 | // logFile.info("torrents") 103 | // console.log(torrents) 104 | 105 | // get all user in each mission 106 | for (let i = 0; i < torrentsArr.length; i++) { 107 | let usersInOneM = await axios.request({ 108 | url: "http://" + configObj.root + "/api/v2/sync/torrentPeers", 109 | method: "get", 110 | headers: { 111 | Accept: "application/json", 112 | ...commonHeader, 113 | cookie, 114 | }, 115 | params: { 116 | hash: torrentsArr[i], 117 | }, 118 | }) 119 | let peers = usersInOneM.data.peers 120 | let peersArr = Object.keys(peers) 121 | for (let j = 0; j < peersArr.length; j++) { 122 | try { 123 | if (isBan(peers[peersArr[j]].client)) { 124 | console.log("屏蔽 ", [peersArr[j], peers[peersArr[j]].client]) 125 | // logFile.info("屏蔽 ", [peersArr[j], peers[peersArr[j]].client]) 126 | banCount++ 127 | // maybe 404 , user has been baned 128 | let banUser = await axios.request({ 129 | url: "http://" + configObj.root + "/api/v2/transfer/banPeers", 130 | method: "post", 131 | headers: { 132 | Accept: "application/json", 133 | ...commonHeader, 134 | cookie, 135 | }, 136 | data: qs.stringify({ 137 | hash: torrentsArr[i], 138 | peers: peersArr[j], 139 | }), 140 | }) 141 | // logFile.info("ban success ", peersArr[j]) 142 | } 143 | } catch (e) { 144 | throw new Error(e) 145 | console.log(e) 146 | // logFile.info(e.toString()) 147 | } 148 | } 149 | } 150 | 151 | if (banCount === 0) { 152 | // logFile.info("no peers to ban") 153 | console.log("no peers to ban") 154 | } 155 | 156 | // logFile.info("mission end") 157 | } 158 | 159 | 160 | setInterval(async () => { 161 | try { 162 | await main() 163 | } catch (e) { 164 | console.log(e) 165 | // logFile.info(e.toString()) 166 | } 167 | }, 60 * 1000) 168 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@dabh/diagnostics@^2.0.2": 6 | version "2.0.2" 7 | resolved "https://registry.npmmirror.com/@dabh/diagnostics/download/@dabh/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" 8 | integrity sha1-KQ0I97OBuPlGB9yPRxoSxnX52zE= 9 | dependencies: 10 | colorspace "1.1.x" 11 | enabled "2.0.x" 12 | kuler "^2.0.0" 13 | 14 | async@^3.1.0: 15 | version "3.2.2" 16 | resolved "https://registry.npmmirror.com/async/download/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" 17 | integrity sha1-LrdnEDS7IZTUXTDjHiTsfn+WcM0= 18 | 19 | axios@^0.24.0: 20 | version "0.24.0" 21 | resolved "https://registry.npmmirror.com/axios/download/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" 22 | integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== 23 | dependencies: 24 | follow-redirects "^1.14.4" 25 | 26 | call-bind@^1.0.0: 27 | version "1.0.2" 28 | resolved "https://registry.npmmirror.com/call-bind/download/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 29 | integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= 30 | dependencies: 31 | function-bind "^1.1.1" 32 | get-intrinsic "^1.0.2" 33 | 34 | color-convert@^1.9.3: 35 | version "1.9.3" 36 | resolved "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 37 | integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= 38 | dependencies: 39 | color-name "1.1.3" 40 | 41 | color-name@1.1.3: 42 | version "1.1.3" 43 | resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 44 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 45 | 46 | color-name@^1.0.0: 47 | version "1.1.4" 48 | resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 49 | integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= 50 | 51 | color-string@^1.6.0: 52 | version "1.9.0" 53 | resolved "https://registry.npmmirror.com/color-string/download/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" 54 | integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== 55 | dependencies: 56 | color-name "^1.0.0" 57 | simple-swizzle "^0.2.2" 58 | 59 | color@^3.1.3: 60 | version "3.2.1" 61 | resolved "https://registry.npmmirror.com/color/download/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" 62 | integrity sha1-NUTcGYyvRJDD7MmnkLVP6f9F4WQ= 63 | dependencies: 64 | color-convert "^1.9.3" 65 | color-string "^1.6.0" 66 | 67 | colors@^1.2.1: 68 | version "1.4.0" 69 | resolved "https://registry.npmmirror.com/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 70 | integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= 71 | 72 | colorspace@1.1.x: 73 | version "1.1.4" 74 | resolved "https://registry.npmmirror.com/colorspace/download/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" 75 | integrity sha1-jUQtEYYVL2BFO/gHDNZus2TlkkM= 76 | dependencies: 77 | color "^3.1.3" 78 | text-hex "1.0.x" 79 | 80 | enabled@2.0.x: 81 | version "2.0.0" 82 | resolved "https://registry.npmmirror.com/enabled/download/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" 83 | integrity sha1-+d2S7C1vS7wNXR5k4h1hzUZl58I= 84 | 85 | fecha@^4.2.0: 86 | version "4.2.1" 87 | resolved "https://registry.npmmirror.com/fecha/download/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" 88 | integrity sha1-CoOtj4bvYqCR4iu1oDnNA9I+7M4= 89 | 90 | fn.name@1.x.x: 91 | version "1.1.0" 92 | resolved "https://registry.npmmirror.com/fn.name/download/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" 93 | integrity sha1-JsrYAXlnrqhzG8QpYdBKPVmIrMw= 94 | 95 | follow-redirects@^1.14.4: 96 | version "1.14.6" 97 | resolved "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" 98 | integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== 99 | 100 | function-bind@^1.1.1: 101 | version "1.1.1" 102 | resolved "https://registry.npmmirror.com/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 103 | integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= 104 | 105 | get-intrinsic@^1.0.2: 106 | version "1.1.1" 107 | resolved "https://registry.npmmirror.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 108 | integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= 109 | dependencies: 110 | function-bind "^1.1.1" 111 | has "^1.0.3" 112 | has-symbols "^1.0.1" 113 | 114 | has-symbols@^1.0.1: 115 | version "1.0.2" 116 | resolved "https://registry.npmmirror.com/has-symbols/download/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" 117 | integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= 118 | 119 | has@^1.0.3: 120 | version "1.0.3" 121 | resolved "https://registry.npmmirror.com/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 122 | integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= 123 | dependencies: 124 | function-bind "^1.1.1" 125 | 126 | inherits@^2.0.3: 127 | version "2.0.4" 128 | resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 129 | integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= 130 | 131 | is-arrayish@^0.3.1: 132 | version "0.3.2" 133 | resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 134 | integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= 135 | 136 | is-stream@^2.0.0: 137 | version "2.0.1" 138 | resolved "https://registry.npmmirror.com/is-stream/download/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 139 | integrity sha1-+sHj1TuXrVqdCunO8jifWBClwHc= 140 | 141 | kuler@^2.0.0: 142 | version "2.0.0" 143 | resolved "https://registry.npmmirror.com/kuler/download/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" 144 | integrity sha1-4sVwo4ADiPtEQH6FFTHB1nCwYbM= 145 | 146 | logform@^2.2.0: 147 | version "2.3.0" 148 | resolved "https://registry.npmmirror.com/logform/download/logform-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flogform%2Fdownload%2Flogform-2.3.0.tgz#a3997a05985de2ebd325ae0d166dffc9c6fe6b57" 149 | integrity sha1-o5l6BZhd4uvTJa4NFm3/ycb+a1c= 150 | dependencies: 151 | colors "^1.2.1" 152 | fecha "^4.2.0" 153 | ms "^2.1.1" 154 | safe-stable-stringify "^1.1.0" 155 | triple-beam "^1.3.0" 156 | 157 | ms@^2.1.1: 158 | version "2.1.3" 159 | resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1632788836446&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fms%2Fdownload%2Fms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 160 | integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= 161 | 162 | object-inspect@^1.9.0: 163 | version "1.12.0" 164 | resolved "https://registry.npmmirror.com/object-inspect/download/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" 165 | integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== 166 | 167 | one-time@^1.0.0: 168 | version "1.0.0" 169 | resolved "https://registry.npmmirror.com/one-time/download/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" 170 | integrity sha1-4GvBdK7SFO1Y7e3lc7Qzu/gny0U= 171 | dependencies: 172 | fn.name "1.x.x" 173 | 174 | qs@^6.10.2: 175 | version "6.10.2" 176 | resolved "https://registry.npmmirror.com/qs/download/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" 177 | integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== 178 | dependencies: 179 | side-channel "^1.0.4" 180 | 181 | readable-stream@^3.4.0: 182 | version "3.6.0" 183 | resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" 184 | integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= 185 | dependencies: 186 | inherits "^2.0.3" 187 | string_decoder "^1.1.1" 188 | util-deprecate "^1.0.1" 189 | 190 | safe-buffer@~5.2.0: 191 | version "5.2.1" 192 | resolved "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 193 | integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= 194 | 195 | safe-stable-stringify@^1.1.0: 196 | version "1.1.1" 197 | resolved "https://registry.npmmirror.com/safe-stable-stringify/download/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a" 198 | integrity sha1-yKIgq1Jc2U5g6/R93EBNYQ3F2Eo= 199 | 200 | side-channel@^1.0.4: 201 | version "1.0.4" 202 | resolved "https://registry.npmmirror.com/side-channel/download/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 203 | integrity sha1-785cj9wQTudRslxY1CkAEfpeos8= 204 | dependencies: 205 | call-bind "^1.0.0" 206 | get-intrinsic "^1.0.2" 207 | object-inspect "^1.9.0" 208 | 209 | simple-swizzle@^0.2.2: 210 | version "0.2.2" 211 | resolved "https://registry.npmmirror.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 212 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 213 | dependencies: 214 | is-arrayish "^0.3.1" 215 | 216 | stack-trace@0.0.x: 217 | version "0.0.10" 218 | resolved "https://registry.npmmirror.com/stack-trace/download/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" 219 | integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= 220 | 221 | string_decoder@^1.1.1: 222 | version "1.3.0" 223 | resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 224 | integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= 225 | dependencies: 226 | safe-buffer "~5.2.0" 227 | 228 | text-hex@1.0.x: 229 | version "1.0.0" 230 | resolved "https://registry.npmmirror.com/text-hex/download/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" 231 | integrity sha1-adycGxdEbueakr9biEu0uRJ1BvU= 232 | 233 | triple-beam@^1.2.0, triple-beam@^1.3.0: 234 | version "1.3.0" 235 | resolved "https://registry.npmmirror.com/triple-beam/download/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" 236 | integrity sha1-pZUhTHKY24M57u7gg+TRC9jLjdk= 237 | 238 | util-deprecate@^1.0.1: 239 | version "1.0.2" 240 | resolved "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 241 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 242 | 243 | winston-transport@^4.4.0: 244 | version "4.4.1" 245 | resolved "https://registry.npmmirror.com/winston-transport/download/winston-transport-4.4.1.tgz#42a830e07363719c13c12bd2fb87a226f692dc75" 246 | integrity sha512-ciZRlU4CSjHqHe8RQG1iPxKMRVwv6ZJ0RC7DxStKWd0KjpAhPDy5gVYSCpIUq+5CUsP+IyNOTZy1X0tO2QZqjg== 247 | dependencies: 248 | logform "^2.2.0" 249 | readable-stream "^3.4.0" 250 | triple-beam "^1.2.0" 251 | 252 | winston@^3.3.3: 253 | version "3.3.3" 254 | resolved "https://registry.npmmirror.com/winston/download/winston-3.3.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwinston%2Fdownload%2Fwinston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" 255 | integrity sha1-rmFyBCyvspeGr6PQnI/4M6t8kXA= 256 | dependencies: 257 | "@dabh/diagnostics" "^2.0.2" 258 | async "^3.1.0" 259 | is-stream "^2.0.0" 260 | logform "^2.2.0" 261 | one-time "^1.0.0" 262 | readable-stream "^3.4.0" 263 | stack-trace "0.0.x" 264 | triple-beam "^1.3.0" 265 | winston-transport "^4.4.0" 266 | --------------------------------------------------------------------------------