├── .gitignore ├── Asset ├── Cat.png ├── China_Telecom.png ├── Leosysicon.jpg ├── Phone.png ├── PhoneBill.png ├── Telecom.png └── mango.png ├── DataTest └── default.c ├── Env for me └── env.js ├── GETIP.js ├── README.md ├── SHADOWROCKET ├── 10000.Module ├── AD_BAN.sgmodule ├── BD10000.js └── BaiduDirect.lua ├── STASH ├── ASN_china.yaml ├── BAIDU-IP.js └── Culler.stoverride ├── Scriptable └── Telecom_Script.js ├── TeleV2.0 ├── GETBD.stoverride ├── Tele_Stash.stoverride ├── Tele_Stash_Auto.stoverride └── Tele_Stash_Panel.stoverride ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Telecom/.DS_Store 3 | .idea 4 | box.dat 5 | test.json -------------------------------------------------------------------------------- /Asset/Cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/Cat.png -------------------------------------------------------------------------------- /Asset/China_Telecom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/China_Telecom.png -------------------------------------------------------------------------------- /Asset/Leosysicon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/Leosysicon.jpg -------------------------------------------------------------------------------- /Asset/Phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/Phone.png -------------------------------------------------------------------------------- /Asset/PhoneBill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/PhoneBill.png -------------------------------------------------------------------------------- /Asset/Telecom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/Telecom.png -------------------------------------------------------------------------------- /Asset/mango.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LitPrompt/Module/c44a2c459e61b4338aedf65d1f49c85c17597572/Asset/mango.png -------------------------------------------------------------------------------- /DataTest/default.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | typedef struct LNode{ 5 | int data; 6 | struct LNode* next; 7 | }LNode,*Linklist; 8 | 9 | Linklist headinsert(){ 10 | int c; 11 | LNode *S; 12 | Linklist L; 13 | L=(Linklist)malloc(sizeof(LNode)); 14 | L->next=NULL; 15 | scanf("%d",&c); 16 | while(c!=999){ 17 | S=(LNode *)malloc(sizeof(LNode)); 18 | S->data=c; 19 | S->next=L->next; 20 | L->next=S; 21 | scanf("%d",&c); 22 | } 23 | return L; 24 | } 25 | 26 | //Linklist TailInsert(){} 27 | 28 | void printList(Linklist L){ 29 | while(L != NULL){ 30 | printf("%d ", L->data); 31 | L = L->next; //向后遍历 32 | } 33 | } 34 | 35 | int main() { 36 | Linklist head; 37 | head=headinsert(); 38 | printList(head->next); 39 | } -------------------------------------------------------------------------------- /Env for me/env.js: -------------------------------------------------------------------------------- 1 | const $ = new Env(`Env for me`) 2 | 3 | function Env(name) { 4 | LN = typeof $loon != `undefined` 5 | SG_STH_SDR = typeof $httpClient != `undefined` && !LN 6 | QX = typeof $task != `undefined` 7 | read = (key) => { 8 | if (LN || SG_STH_SDR) return $persistentStore.read(key) 9 | if (QX) return $prefs.valueForKey(key) 10 | } 11 | write = (key, val) => { 12 | if (LN || SG_STH_SDR) return $persistentStore.write(String(key), val); 13 | if (QX) return $prefs.setValueForKey(String(key), val) 14 | } 15 | notice = (title, subtitle, message, url) => { 16 | if (LN) $notification.post(title, subtitle, message, url) 17 | if (SG_STH_SDR) $notification.post(title, subtitle, message, { url: url }) 18 | if (QX) $notify(title, subtitle, message, { 'open-url': url }) 19 | } 20 | get = (url, cb) => { 21 | if (LN || SG_STH_SDR) {$httpClient.get(url, cb)} 22 | if (QX) {url.method = `GET`; $task.fetch(url).then((resp) => cb(null, {}, resp.body))} 23 | } 24 | post = (url, cb) => { 25 | if (LN || SG_STH_SDR) {$httpClient.post(url, cb)} 26 | if (QX) {url.method = `POST`; $task.fetch(url).then((resp) => cb(null, {}, resp.body))} 27 | } 28 | toObj = (str) => JSON.parse(str) 29 | toStr = (obj) => JSON.stringify(obj) 30 | log = (message) => console.log(message) 31 | done = (value = {}) => {$done(value)} 32 | return { name, read, write, notice, get, post, toObj, toStr, log, done } 33 | } -------------------------------------------------------------------------------- /GETIP.js: -------------------------------------------------------------------------------- 1 | $httpClient.get("https://api.my-ip.io/ip", function (error, response, data) { 2 | $done({ 3 | title: "当前 IP 地址", 4 | content: data, 5 | backgroundColor: "#663399", 6 | icon: "network", 7 | }) 8 | }) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 欢迎来到我的仓库 2 | #喜欢的话点个小心心把# 3 | ## 特别声明 4 | 5 | - 本仓库发布的脚本及其中涉及的任何解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 6 | 7 | - 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。 8 | 9 | - 本人对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。 10 | 11 | - 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 本人对于由此引起的任何隐私泄漏或其他后果概不负责。 12 | 13 | - 请勿将本仓库的任何内容用于商业或非法目的,否则后果自负。 14 | 15 | - 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本。 16 | 17 | - 任何以任何方式查看此项目的人或直接或间接使用该项目的任何脚本的使用者都应仔细阅读此声明。本人保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或本项目的规则,则视为您已接受此免责声明。 18 | 19 | **您必须在下载后的24小时内从计算机或手机中完全删除以上内容** 20 | -------------------------------------------------------------------------------- /SHADOWROCKET/10000.Module: -------------------------------------------------------------------------------- 1 | #!name=电信余量 2 | #!desc=请前往BoxJS安装 https://raw.githubusercontent.com/QGCliveDavis/Module/main/TeleV2.0/Tele.json这个订阅,跟着订阅里的操作来 3 | 4 | [Script] 5 | 请求体获取 = type=http-request,script-path=https://raw.githubusercontent.com/QGCliveDavis/Module/main/SHADOWROCKET/BD10000.js,pattern=^https?:\/\/czapp\.bestpay\.com\.cn,max-size=131072,requires-body=true,timeout=10,script-update-interval=86400 6 | 电信余量 = type=cron,script-path=https://raw.githubusercontent.com/QGCliveDavis/Module/main/TeleV2.0/10000.js,cronexpr="*/5 * * * *",timeout=10,script-update-interval=86400 7 | [MITM] 8 | hostname = czapp.bestpay.com.cn -------------------------------------------------------------------------------- /SHADOWROCKET/BD10000.js: -------------------------------------------------------------------------------- 1 | let loginerror=$persistentStore.read('Bodyswitch') 2 | 3 | const bodyName = '中国电信' 4 | const bodyVal = $request.body 5 | const effective = bodyVal.indexOf("BILLCYCLE") 6 | 7 | if (effective==0&&loginerror==1) { 8 | $persistentStore.write(String(bodyVal), "Tele_BD") 9 | let loginerror=0 10 | $persistentStore.write(String(loginerror),'Bodyswitch') 11 | if (bodyVal) { 12 | let msg = `${bodyName}` 13 | $notification.post(msg, 'Body写入成功',bodyVal ) 14 | console.log(msg) 15 | console.log(bodyVal) 16 | } 17 | } 18 | else{ 19 | if(loginerror==0){console.log('当前Body有效,无需获取')} 20 | else($notification.post("请点击已用流量","" ,"")) 21 | } 22 | 23 | $done({}) -------------------------------------------------------------------------------- /SHADOWROCKET/BaiduDirect.lua: -------------------------------------------------------------------------------- 1 | -- file: lua/backend-baidu.lua 2 | 3 | local http = require 'http' 4 | local backend = require 'backend' 5 | 6 | local char = string.char 7 | local byte = string.byte 8 | local find = string.find 9 | local sub = string.sub 10 | 11 | local ADDRESS = backend.ADDRESS 12 | local PROXY = backend.PROXY 13 | local DIRECT_WRITE = backend.SUPPORT.DIRECT_WRITE 14 | 15 | local SUCCESS = backend.RESULT.SUCCESS 16 | local HANDSHAKE = backend.RESULT.HANDSHAKE 17 | local DIRECT = backend.RESULT.DIRECT 18 | 19 | local ctx_uuid = backend.get_uuid 20 | local ctx_proxy_type = backend.get_proxy_type 21 | local ctx_address_type = backend.get_address_type 22 | local ctx_address_host = backend.get_address_host 23 | local ctx_address_bytes = backend.get_address_bytes 24 | local ctx_address_port = backend.get_address_port 25 | local ctx_write = backend.write 26 | local ctx_free = backend.free 27 | local ctx_debug = backend.debug 28 | 29 | local flags = {} 30 | local kHttpHeaderSent = 1 31 | local kHttpHeaderRecived = 2 32 | 33 | function wa_lua_on_flags_cb(ctx) 34 | return DIRECT_WRITE 35 | end 36 | 37 | function wa_lua_on_handshake_cb(ctx) 38 | local uuid = ctx_uuid(ctx) 39 | 40 | if flags[uuid] == kHttpHeaderRecived then 41 | return true 42 | end 43 | 44 | if flags[uuid] ~= kHttpHeaderSent then 45 | local host = ctx_address_host(ctx) 46 | local port = ctx_address_port(ctx) 47 | local res = 'CONNECT ' .. host .. ':' .. port .. ' HTTP/1.1\r\n' .. 48 | 'Host: ' .. host .. ':' .. port .. '\r\n' .. 49 | 'User-Agent: okhttp/4.9.0 Dalvik/2.1.0 baiduboxapp/11.0.5.12 (Baidu; P1 11)\r\n'.. 50 | 'Proxy-Connection: Keep-Alive\r\n'.. 51 | 'X-T5-Auth: YTY0Nzlk\r\n\r\n' 52 | ctx_write(ctx, res) 53 | flags[uuid] = kHttpHeaderSent 54 | end 55 | 56 | return false 57 | end 58 | 59 | function wa_lua_on_read_cb(ctx, buf) 60 | ctx_debug('wa_lua_on_read_cb') 61 | local uuid = ctx_uuid(ctx) 62 | if flags[uuid] == kHttpHeaderSent then 63 | flags[uuid] = kHttpHeaderRecived 64 | return HANDSHAKE, nil 65 | end 66 | return DIRECT, buf 67 | end 68 | 69 | function wa_lua_on_write_cb(ctx, buf) 70 | ctx_debug('wa_lua_on_write_cb') 71 | return DIRECT, buf 72 | end 73 | 74 | function wa_lua_on_close_cb(ctx) 75 | ctx_debug('wa_lua_on_close_cb') 76 | local uuid = ctx_uuid(ctx) 77 | flags[uuid] = nil 78 | ctx_free(ctx) 79 | return SUCCESS 80 | end -------------------------------------------------------------------------------- /STASH/BAIDU-IP.js: -------------------------------------------------------------------------------- 1 | $httpClient.get("https://forge.speedtest.cn/api/location/info", function (error, response, data) { 2 | let dataObject = JSON.parse(data); 3 | let { country, province, isp, city, ip } = dataObject; 4 | isp = `运营商:${isp}`; 5 | ip = `免流IP:${ip}`; 6 | let region = `地区:${country} ${province} ${city}`; 7 | body={ 8 | title: "当前免流信息", 9 | content: `${isp}\n${ip}\n${region}`, 10 | backgroundColor: "#FF6600", 11 | icon: "antenna.radiowaves.left.and.right.circle.fill", 12 | } 13 | $done(body) 14 | }) 15 | -------------------------------------------------------------------------------- /STASH/Culler.stoverride: -------------------------------------------------------------------------------- 1 | name: 百度直连信息面板 2 | desc: 显示免流地区,需名为百度直连的本地代理 3 | 4 | tiles: 5 | - name: BaiduCellar-Tile 6 | interval: 600 7 | script-providers: 8 | BaiduCellar-Tile: 9 | url: https://raw.githubusercontent.com/QGCliveDavis/Module/main/STASH/BAIDU-IP.js 10 | interval: 86400 11 | 12 | rules: 13 | - DOMAIN-KEYWORD,forge.speedtest.cn,百度直连 14 | -------------------------------------------------------------------------------- /Scriptable/Telecom_Script.js: -------------------------------------------------------------------------------- 1 | const w = new ListWidget() 2 | const DynamicText = Color.dynamic(new Color('#111111'), new Color('#ffffff')) 3 | w.backgroundColor = Color.dynamic(new Color('#ffffff'), new Color('#1c1c1e')) 4 | 5 | 6 | async function Run(){ 7 | let Wsize=-1 8 | if(!getdata('LimitVal')) setdata('LimitVal', '') 9 | if(!getdata('unLimitVal')) setdata('unLimitVal', '') 10 | 11 | if (config.runsInApp) { 12 | let al = new Alert() 13 | al.title = '余量信息' 14 | al.message = '请在相关设置选择数据来源' 15 | al.addAction('更新脚本') //0 16 | al.addAction('相关设置') //1 17 | al.addAction('预览组件') //2 18 | al.addAction('刷新桌面小组件') //3 19 | al.addCancelAction('取消') //-1 20 | 21 | 22 | let UserCh = await al.presentSheet() 23 | if (UserCh == -1) {} 24 | if (UserCh == 0) { 25 | await AsyncJs() 26 | let al = new Alert() 27 | al.message = '更新脚本完成,退出后生效' 28 | al.addAction('完成') 29 | await al.present() 30 | } 31 | if (UserCh == 1) {//相关设置 32 | let a1 = new Alert() 33 | a1.title = '相关设置' 34 | a1.message='间距与数据相关设置' 35 | a1.addAction('数据来源') 36 | a1.addAction('自定义余量') 37 | a1.addAction('组件间距设置') 38 | a1.addDestructiveAction('清除缓存') 39 | a1.addCancelAction('取消') 40 | let ch=await a1.presentAlert() 41 | if(ch==0){//数据来源 42 | let a2=new Alert() 43 | a2.title = '数据来源' 44 | a2.addAction('从BoxJS获取-电信') 45 | a2.addAction('从BoxJS获取-联通') 46 | a2.addCancelAction('取消') 47 | let ch=await a2.presentAlert() 48 | if(ch==-1) {} 49 | if(ch==0) { 50 | setdata('isData', '1') 51 | Wsize=1 52 | } 53 | if(ch==1) { 54 | setdata('isData', '2') 55 | Wsize=1 56 | } 57 | 58 | } 59 | if(ch==1){//通用与定向数据自定义 60 | let a2=new Alert() 61 | a2.message=`通用与定向数据自定义\n不填写为默认空\n单位GB` 62 | a2.addTextField('通用总量',getdata('LimitVal')||'') 63 | a2.addTextField('定向总量',getdata('unLimitVal')||'') 64 | a2.addAction('确认') 65 | a2.addCancelAction('取消') 66 | await a2.presentAlert() 67 | let val=a2.textFieldValue(0) 68 | let val1=a2.textFieldValue(1) 69 | setdata('LimitVal', String(val)) 70 | setdata('unLimitVal', String(val1)) 71 | 72 | } 73 | if(ch==2){//组件间距设置 74 | let a2=new Alert() 75 | a2.title='组件间距设置' 76 | a2.message=`柱状图单次减少量为0.1` 77 | a2.addTextField('组件间隔 默认值50' , getdata('Space')||'') 78 | a2.addTextField('柱状图间隔 默认值2', getdata('KSize')||'') 79 | a2.addTextField('左边距 默认值5', getdata('Left_Padding')||'') 80 | a2.addDestructiveAction('全部恢复默认值') 81 | a2.addAction('确认') 82 | a2.addCancelAction('取消') 83 | let ch = await a2.presentAlert() 84 | if(ch==0){ 85 | rmdata('Space'); 86 | rmdata('KSize'); 87 | rmdata('Left_Padding'); 88 | }else if(ch == 1){ 89 | let Space = a2.textFieldValue(0) 90 | let KSize = a2.textFieldValue(1) 91 | let Left_Padding = a2.textFieldValue(2) 92 | setdata('Space', String(Space)) 93 | setdata('KSize', String(KSize)) 94 | setdata('Left_Padding', String(Left_Padding)) 95 | Wsize = 1 96 | } 97 | 98 | } 99 | if(ch==3){ 100 | let a2=new Alert() 101 | a2.message=`清除上版本缓存,当组件存在问题时可清理` 102 | a2.addAction('确认') 103 | a2.addCancelAction('取消') 104 | let ch=await a2.presentAlert() 105 | if(ch==0){ClearData()} 106 | } 107 | } 108 | if (UserCh == 2) {//预览类型 109 | let a1 = new Alert() 110 | a1.title = '预览类型' 111 | a1.addAction('小组件') 112 | a1.addAction('中等组件') 113 | a1.addCancelAction('取消') 114 | Wsize = await a1.presentAlert() 115 | } 116 | if(UserCh==3){ 117 | let al = new Alert() 118 | al.message = '刷新完成' 119 | al.addAction('完成') 120 | await al.present() 121 | } 122 | } 123 | 124 | let str='数据流量-通用' 125 | let str1 ='数据流量-定向' 126 | Query=await BoxJsData() 127 | 128 | processData(Query) 129 | 130 | if (config.widgetFamily == 'small' || Wsize == 0) { 131 | generateSmallWidget(str ,str1, w ,Query) 132 | if (Wsize == 0) { w.presentSmall() } 133 | } 134 | if (config.widgetFamily == 'medium' || Wsize == 1) { 135 | 136 | const rowSpacing = 10; // 设置行间距 137 | const leftPadding = Number(getdata('Left_Padding'))|| 5; // 设置左边距 138 | const LimtUnlimitPadding= Number(getdata('Space'))|| 50; //设置第一行通用与定向间距 139 | 140 | generateMediumWidget(Query ,str ,str1 ,w ,rowSpacing ,leftPadding ,LimtUnlimitPadding) 141 | if (Wsize == 1) { w.presentMedium() } 142 | } 143 | 144 | } 145 | 146 | await Run() 147 | Script.setWidget(w) 148 | Script.complete() 149 | 150 | function ClearData(){ 151 | for(i=0;i<48;++i)rmdata(String(i)) 152 | rmdata('LimitVal') 153 | rmdata('unLimitVal') 154 | rmdata('Space') 155 | rmdata('KSize') 156 | rmdata('Left_Padding') 157 | rmdata('Hours') 158 | } 159 | 160 | async function AsyncJs(){ 161 | let fm = FileManager.local(); 162 | if (fm.isFileStoredIniCloud(module.filename)) { 163 | fm = FileManager.iCloud(); 164 | } 165 | const url = 'https://raw.githubusercontent.com/LitPrompt/Module/main/Scriptable/Telecom_Script.js'; 166 | const request = new Request(url); 167 | try { 168 | const code = await request.loadString(); 169 | fm.writeString(module.filename, code); 170 | const alert = new Alert(); 171 | alert.message = '代码已更新,关闭生效。'; 172 | // alert.addAction('确定'); 173 | // alert.presentAlert(); 174 | } catch (e) { 175 | console.error(e); 176 | } 177 | } 178 | 179 | function processData(Query) { 180 | let Hours = new Date().getHours(); //获取小时 181 | if (!getdata('Hours')) setdata('Hours', String(Hours)); 182 | LastTime = Hours == 0 ? 47 : Hours + 24 - 1; 183 | 184 | for (Hours == 0 ? i = 1 : i = 0; i <= 23 && (!getdata(String(i)) || Hours == 0); i++) { //数据初始化 185 | let First = { unlimitchange: 0, limitchange: 0 }; 186 | setdata(String(i), JSON.stringify(First)); 187 | } 188 | for (i = 24; i <= 47 && !getdata(String(i)); i++) { //数据初始化 189 | let First = { unlimitusage: 0, limitusage: 0 }; 190 | setdata(String(i), JSON.stringify(First)); 191 | } 192 | 193 | if (getdata('Hours') != String(Hours)) { 194 | setdata('Hours', String(Hours)); 195 | let Usage={ 196 | limitusage : Query.LimitUsage, 197 | unlimitusage : Query.UNLimitUsage 198 | } 199 | setdata(String(Hours + 24), JSON.stringify(Usage)); //将就数据存入24-47中 200 | } 201 | 202 | let LastLimit = getobjdata(String(LastTime)).limitusage; 203 | let LastUnlimit = getobjdata(String(LastTime)).unlimitusage; 204 | let Change = { 205 | unlimitchange: Query.UNLimitUsage - LastUnlimit, 206 | limitchange: Query.LimitUsage - LastLimit 207 | }; 208 | setdata(String(Hours), JSON.stringify(Change)); //将变化量存入0~23中 209 | } 210 | 211 | function generateSmallWidget(str ,str1, Widget ,Query){ 212 | const container = Widget.addStack(); 213 | container.layoutVertically(); 214 | container.centerAlignContent(); 215 | 216 | const upStack = container.addStack(); 217 | generateModule(upStack,str,Query.LimitUsage, Query.LimitAll) 218 | container.addSpacer(10); 219 | const downStack = container.addStack(); 220 | generateModule(downStack,str1,Query.UNLimitUsage, Query.UNLimitAll) 221 | } 222 | 223 | function generateMediumWidget(Query ,str ,str1 ,Widget ,rowSpacing ,leftPadding ,LimtUnlimitPadding){ 224 | 225 | let column = Widget.addStack() 226 | column.layoutVertically() 227 | 228 | 229 | let row =column.addStack(); 230 | row.addSpacer(leftPadding+10) 231 | 232 | column.addSpacer(rowSpacing); // 在 row2 添加垂直间距 233 | 234 | let row2 = column.addStack() 235 | row2.addSpacer(leftPadding) 236 | 237 | column.addSpacer(rowSpacing); // 在 row3 添加垂直间距 238 | 239 | let row3 = column.addStack() 240 | row3.addSpacer(leftPadding) 241 | 242 | const container = row.addStack(); 243 | container.layoutHorizontally(); 244 | container.centerAlignContent(); 245 | 246 | const leftStack = container.addStack(); 247 | generateModule(leftStack,str,Query.LimitUsage, Query.LimitAll) 248 | 249 | container.addSpacer(LimtUnlimitPadding); 250 | 251 | const rightStack = container.addStack(); 252 | generateModule(rightStack,str1,Query.UNLimitUsage, Query.UNLimitAll) 253 | 254 | 255 | const canvasWidth = 10; 256 | const canvasHeight = 40; 257 | 258 | for (let i = 0; i <= 23; i++) { 259 | let columnImgStack = row3.addStack() 260 | columnImgStack.layoutVertically() 261 | const iconImg = columnImgStack.addImage(HourKline(getobjdata(String(i)).limitchange, getobjdata(String(i)).unlimitchange, i,canvasWidth ,canvasHeight)) 262 | iconImg.imageSize = new Size(canvasWidth, canvasHeight); 263 | // 在指定时间下方绘制时间数字 264 | if (i === 0 || i === 6 || i === 12 || i === 18 || i === 23) { 265 | let timeText=columnImgStack.addText(i.toString().padStart(2, '0')) 266 | timeText.font = Font.mediumSystemFont(9) 267 | timeText.textColor= DynamicText 268 | } 269 | row3.addSpacer(Number(getdata('KSize'))||2); 270 | } 271 | 272 | 273 | } 274 | 275 | function generateModule(Widget,str,usage, total) { 276 | 277 | Widget.setPadding(0, 0, 0, 15); 278 | 279 | const column = Widget.addStack() 280 | column.layoutVertically() 281 | 282 | let titleRow= column.addStack() 283 | titleRow.layoutHorizontally() 284 | let title = titleRow.addText(str) 285 | title.textColor = DynamicText 286 | title.font = Font.boldSystemFont(9) 287 | 288 | column.addSpacer(2) 289 | 290 | let valRow = column.addStack() 291 | // valRow.layoutHorizontally() 292 | const iconImg = valRow.addImage(UsageBar(usage, total)) 293 | iconImg.imageSize = new Size(7, 42) 294 | valRow.addSpacer(5)//图片与文字距离 295 | let valRowLine = valRow.addStack() 296 | valRowLine.layoutVertically() 297 | const usageText = valRowLine.addText(String(ToSize(usage, 1, 1, 1))) 298 | const totalText = valRowLine.addText(total==0? '无限 ':String(ToSize(total, 1, 0, 1)) + '(' + (usage / total * 100).toFixed(0) + '%)') 299 | usageText.font = Font.mediumMonospacedSystemFont(20) 300 | totalText.font = Font.mediumRoundedSystemFont(15) 301 | usageText.textColor = DynamicText 302 | totalText.textColor = DynamicText 303 | 304 | } 305 | 306 | /** 307 | * 308 | * @param {*} total 总量 309 | * @param {*} haveGone 使用量 310 | * @returns 311 | */ 312 | function UsageBar(haveGone, total) { 313 | const canvasWidth = 7; 314 | const canvasHeight = 40; 315 | const barCornerRadius = {x: 8 ,y: 2 }; 316 | 317 | // 创建DrawContext实例,并设置画布大小 318 | const context = new DrawContext(); 319 | context.size = new Size(canvasWidth, canvasHeight)//画布宽高 320 | context.respectScreenScale = true; 321 | context.opaque = false; // 设置为透明背景 322 | 323 | // 创建柱状图剩余路径 324 | const bgPath = new Path(); 325 | bgPath.addRoundedRect(new Rect(0, 0, canvasWidth, canvasHeight), barCornerRadius.x, barCornerRadius.y); 326 | context.addPath(bgPath); 327 | context.setFillColor(new Color("#4d4d4d")); 328 | context.fillPath(); 329 | 330 | // 创建柱状图用量路径 331 | const barPath = new Path(); 332 | const barHeight = (haveGone / total) * canvasHeight; 333 | const barRect = new Rect(0, canvasHeight - barHeight , canvasWidth, barHeight); 334 | barPath.addRoundedRect(barRect, barCornerRadius.x, barCornerRadius.y); 335 | context.addPath(barPath); 336 | context.setFillColor(new Color("#1785ff")); // 填充蓝色 337 | context.fillPath(); 338 | 339 | const Image = context.getImage(); // 获取绘制的图像 340 | 341 | return Image; 342 | } 343 | 344 | /** 345 | * 346 | * @param {*} limit 通用用量 347 | * @param {*} unlimit 定向用量 348 | * @param {*} t 时间 349 | * @returns image 350 | */ 351 | function HourKline(limit, unlimit, t ,width ,height) { 352 | 353 | let All = limit + unlimit 354 | 355 | if (All >= 0 && All <= 10240) ThereShold = 10240//10MB 356 | if (All > 10240 && All <= 102400) ThereShold = 102400//100MB 357 | if (All > 102400 && All <= 512000) ThereShold = 512000//500MB 358 | if (All > 512000 && All <= 1048576) ThereShold = 1048576//1GB 359 | if (All > 1048576 && All <= 5242880) ThereShold = 5242880//5GB 360 | if (All > 5242880 && All <= 20971520) ThereShold = 20971520//20GB 361 | if (All > 20971520) ThereShold = 1048576000//100GB 362 | 363 | const context = new DrawContext()//创建图形画布 364 | context.opaque = false; // 设置为透明背景 365 | context.size = new Size(width, height) 366 | context.respectScreenScale = true 367 | 368 | if (t == 0 || t == 6 || t == 12 || t == 18 || t == 23) Width = 0.4 369 | else Width = 0.1 370 | 371 | const bgColor = new Color("#4d4d4d"); // 线条为浅灰色 372 | // 创建柱状图线条 373 | const bgPath = new Path(); 374 | bgPath.addRoundedRect(new Rect(width / 2, 0, Width, height), 0, 0); 375 | context.addPath(bgPath); 376 | context.setFillColor(bgColor); 377 | context.fillPath(); 378 | 379 | 380 | // 创建柱状图用量路径 381 | const barPath = new Path(); 382 | const limitbarHeight = height * limit / ThereShold 383 | const unlimitbarHeight = height * unlimit / ThereShold 384 | 385 | const barlimitRect = new Rect(0, height - limitbarHeight-unlimitbarHeight, width, limitbarHeight); 386 | const barunlimitRect = new Rect(0, height- unlimitbarHeight, width, unlimitbarHeight); 387 | barPath.addRoundedRect(barlimitRect, 0, 0); 388 | barPath.addRoundedRect(barunlimitRect, 0, 0); 389 | 390 | // 设置不同的填充颜色 391 | context.setFillColor(new Color("#fe708b")); // 设置limit部分的填充颜色 392 | context.fill(barlimitRect); 393 | 394 | context.setFillColor(new Color("#8676ff")); // 设置unlimit部分的填充颜色 395 | context.fill(barunlimitRect); 396 | 397 | return context.getImage() 398 | } 399 | 400 | function ToSize(kbyte, s, l, t) { 401 | const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; 402 | let size = kbyte * 1024; // 将输入的千字节转换为字节 403 | 404 | // 计算单位的指数 405 | let unitIndex = 0; 406 | while (size >= 1024 && unitIndex < units.length - 1) { 407 | size /= 1024; 408 | unitIndex++; 409 | } 410 | 411 | // 格式化大小字符串 412 | let formattedSize = size.toFixed(s); 413 | if (l > 0) { 414 | formattedSize = formattedSize.padEnd(formattedSize.length + l, ' '); 415 | } 416 | 417 | // 添加单位 418 | if (t === 1) { 419 | formattedSize += units[unitIndex]; 420 | } 421 | 422 | return formattedSize; 423 | } 424 | 425 | 426 | async function BoxJsData() { 427 | console.log('BoxJS获取数据') 428 | let url 429 | if(getdata('isData')== '1'){ 430 | url = 'http://boxjs.com/query/data/PackgeDetail' 431 | } 432 | if(getdata('isData')=='2'){ 433 | url = 'http://boxjs.com/query/data/@ChinaUnicom.10010v4.vars' 434 | } 435 | console.log(url) 436 | 437 | let data = null 438 | try { 439 | let SetVal = Number(getdata('LimitVal')) 440 | let SetVal1 = Number(getdata('unLimitVal')) 441 | 442 | let req = new Request(url) 443 | data = await (req.loadJSON()) 444 | if(SetVal != '') SetVal *= 1048576 445 | if(SetVal1 != '') SetVal1 *=1048579 446 | 447 | if(getdata('isData')=='1'){ 448 | 449 | ArrayQuery = JSON.parse(data.val) 450 | 451 | BillLeft = ArrayQuery.balanceInfo.balance||null,//[话剩] 452 | BillUsed = ArrayQuery.balanceInfo.used || null,//[话用] 453 | AllLimitUse = ArrayQuery.flowInfo.commonFlow.used,// '[通用]' 454 | AllLimitLeft = ArrayQuery.flowInfo.commonFlow.balance,// '[通剩]' 455 | AllLimit = SetVal|| ArrayQuery.flowInfo.commonFlow.total ,// '[通总]' 456 | AllUnlimitUse = ArrayQuery.flowInfo.specialAmount.used,// '[定用]' 457 | AllUnlimitLeft = ArrayQuery.flowInfo.specialAmount.balance,// '[定剩]' 458 | AllUnlimit = SetVal1|| ArrayQuery.flowInfo.specialAmount.total,// '[定总]' 459 | AllVoiceUsed = ArrayQuery.voiceInfo.used || null,//[语用] 460 | AllVoiceLeft = ArrayQuery.voiceInfo.balance|| null//[语剩] 461 | 462 | 463 | } 464 | if(getdata('isData')=='2'){ 465 | rawData=JSON.parse(data.val) 466 | 467 | AllVoiceUsed = '' 468 | AllVoiceLeft = '' 469 | BillUsed = '' 470 | BillLeft = '' 471 | AllUnlimitUse=(rawData['[所有免流.已用].raw'])*1024 472 | AllUnlimitLeft= (rawData['[所有免流.剩余].raw'])*1024 473 | AllUnlimit =SetVal1 || rawData['[所有免流.总].raw'] *1024 474 | 475 | 476 | AllLimitUse=(rawData['[所有通用.已用].raw'])*1024 477 | AllLimitLeft=(rawData['[所有通用.剩余].raw'])*1024 478 | AllLimit= SetVal || rawData['[所有通用.总].raw'] *1024 479 | 480 | console.log(AllLimit+' '+AllLimitLeft+' '+AllLimitUse+`\n`+AllUnlimit+' '+AllUnlimitLeft+' '+AllUnlimitUse); 481 | 482 | } 483 | } catch (e) { 484 | console.error(e); 485 | } 486 | 487 | let Queryinfo = { 488 | UNLimitAll: AllUnlimit, 489 | UNLimitLeft: AllUnlimitLeft, 490 | UNLimitUsage: AllUnlimitUse, 491 | 492 | LimitAll: AllLimit, 493 | LimitLeft: AllLimitLeft, 494 | LimitUsage: AllLimitUse , 495 | 496 | VoiceBill: {used:AllVoiceUsed,left:AllVoiceLeft}, 497 | VoiceDataBill: {used:BillUsed,left:BillLeft} 498 | } 499 | 500 | console.log(Queryinfo); 501 | 502 | return Queryinfo 503 | } 504 | 505 | async function getImage(url) { 506 | const request = new Request(url); 507 | const image = await request.loadImage(); 508 | return image 509 | } 510 | 511 | function setdata(Key, Val) {Keychain.set(Key, Val);} 512 | function getdata(Key) { 513 | if(Keychain.contains(Key))return Keychain.get(Key) 514 | else return false 515 | } 516 | function getobjdata(Key) { return JSON.parse(Keychain.get(Key)) } 517 | function rmdata(Key) { Keychain.remove(Key)} 518 | -------------------------------------------------------------------------------- /TeleV2.0/GETBD.stoverride: -------------------------------------------------------------------------------- 1 | name: 电信余量请求体获取 2 | desc: 开启脚本以及mitm等开关,配合电信余量使用 3 | 4 | http: 5 | mitm: 6 | - czapp.bestpay.com.cn 7 | script: 8 | - match: ^https?:\/\/czapp\.bestpay\.com\.cn 9 | name: Telecom_BD 10 | type: request 11 | require-body: true 12 | timeout: 120 13 | 14 | 15 | script-providers: 16 | Telecom_BD: 17 | url: https://github.com/ChinaTelecomOperators/ChinaTelecom/releases/download/Prerelease-Alpha/GetBd.js 18 | interval: 86400 19 | -------------------------------------------------------------------------------- /TeleV2.0/Tele_Stash.stoverride: -------------------------------------------------------------------------------- 1 | name: 电信余量 2 | desc: 电信免流跳点通知(需配合请求体覆写) 3 | 4 | cron: 5 | script: 6 | - name: Telecom 7 | cron: '*/5 * * * *' # at every 5th minute 8 | timeout: 10 # optional 9 | tiles: 10 | - name: Telecom 11 | title: 今日免流信息 12 | content: '' 13 | backgroundColor: "#0099FF" 14 | icon: "dial.max.fill" 15 | interval: 600 16 | script-providers: 17 | Telecom: 18 | url: https://github.com/ChinaTelecomOperators/ChinaTelecom/releases/download/Prerelease-Alpha/Tele_Cellular.js 19 | interval: 86400 -------------------------------------------------------------------------------- /TeleV2.0/Tele_Stash_Auto.stoverride: -------------------------------------------------------------------------------- 1 | name: 电信余量(自动版) 2 | desc: 电信免流跳点通知 3 | 4 | cron: 5 | script: 6 | - name: Telecom_Auto 7 | cron: '*/5 * * * *' # at every 5th minute 8 | timeout: 10 # optional 9 | debug: true 10 | tiles: 11 | - name: Telecom_Auto 12 | title: 今日免流信息 13 | content: '' 14 | backgroundColor: "#0099FF" 15 | icon: "dial.max.fill" 16 | interval: 600 17 | script-providers: 18 | Telecom_Auto: 19 | url: https://github.com/ChinaTelecomOperators/ChinaTelecom/releases/download/Prerelease-Alpha/Tele_Cellular_Auto.js 20 | interval: 86400 -------------------------------------------------------------------------------- /TeleV2.0/Tele_Stash_Panel.stoverride: -------------------------------------------------------------------------------- 1 | name: 电信信息 Tile 面板 2 | desc: 电信信息面板 3 | 4 | tiles: 5 | - name: Telecom_Panel 6 | title: '电信余量_Panel' 7 | content: '' 8 | backgroundColor: "#cd4639" 9 | icon: "list.bullet.rectangle" 10 | interval: 600 11 | script-providers: 12 | Telecom_Panel: 13 | url: https://github.com/ChinaTelecomOperators/ChinaTelecom/releases/download/Prerelease-Alpha/Tele_Cellular_Panel.js 14 | interval: 86400 -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Module", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "got": "^11.8.3", 9 | "iconv-lite": "^0.6.3", 10 | "tough-cookie": "^4.1.2" 11 | } 12 | }, 13 | "node_modules/@sindresorhus/is": { 14 | "version": "4.6.0", 15 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 16 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", 17 | "engines": { 18 | "node": ">=10" 19 | }, 20 | "funding": { 21 | "url": "https://github.com/sindresorhus/is?sponsor=1" 22 | } 23 | }, 24 | "node_modules/@szmarczak/http-timer": { 25 | "version": "4.0.6", 26 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 27 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 28 | "dependencies": { 29 | "defer-to-connect": "^2.0.0" 30 | }, 31 | "engines": { 32 | "node": ">=10" 33 | } 34 | }, 35 | "node_modules/@types/cacheable-request": { 36 | "version": "6.0.2", 37 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", 38 | "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", 39 | "dependencies": { 40 | "@types/http-cache-semantics": "*", 41 | "@types/keyv": "*", 42 | "@types/node": "*", 43 | "@types/responselike": "*" 44 | } 45 | }, 46 | "node_modules/@types/http-cache-semantics": { 47 | "version": "4.0.1", 48 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", 49 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" 50 | }, 51 | "node_modules/@types/keyv": { 52 | "version": "3.1.4", 53 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 54 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 55 | "dependencies": { 56 | "@types/node": "*" 57 | } 58 | }, 59 | "node_modules/@types/node": { 60 | "version": "18.8.2", 61 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", 62 | "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==" 63 | }, 64 | "node_modules/@types/responselike": { 65 | "version": "1.0.0", 66 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 67 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 68 | "dependencies": { 69 | "@types/node": "*" 70 | } 71 | }, 72 | "node_modules/cacheable-lookup": { 73 | "version": "5.0.4", 74 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 75 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", 76 | "engines": { 77 | "node": ">=10.6.0" 78 | } 79 | }, 80 | "node_modules/cacheable-request": { 81 | "version": "7.0.2", 82 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", 83 | "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", 84 | "dependencies": { 85 | "clone-response": "^1.0.2", 86 | "get-stream": "^5.1.0", 87 | "http-cache-semantics": "^4.0.0", 88 | "keyv": "^4.0.0", 89 | "lowercase-keys": "^2.0.0", 90 | "normalize-url": "^6.0.1", 91 | "responselike": "^2.0.0" 92 | }, 93 | "engines": { 94 | "node": ">=8" 95 | } 96 | }, 97 | "node_modules/clone-response": { 98 | "version": "1.0.3", 99 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 100 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 101 | "dependencies": { 102 | "mimic-response": "^1.0.0" 103 | }, 104 | "funding": { 105 | "url": "https://github.com/sponsors/sindresorhus" 106 | } 107 | }, 108 | "node_modules/decompress-response": { 109 | "version": "6.0.0", 110 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 111 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 112 | "dependencies": { 113 | "mimic-response": "^3.1.0" 114 | }, 115 | "engines": { 116 | "node": ">=10" 117 | }, 118 | "funding": { 119 | "url": "https://github.com/sponsors/sindresorhus" 120 | } 121 | }, 122 | "node_modules/decompress-response/node_modules/mimic-response": { 123 | "version": "3.1.0", 124 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 125 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 126 | "engines": { 127 | "node": ">=10" 128 | }, 129 | "funding": { 130 | "url": "https://github.com/sponsors/sindresorhus" 131 | } 132 | }, 133 | "node_modules/defer-to-connect": { 134 | "version": "2.0.1", 135 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 136 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", 137 | "engines": { 138 | "node": ">=10" 139 | } 140 | }, 141 | "node_modules/end-of-stream": { 142 | "version": "1.4.4", 143 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 144 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 145 | "dependencies": { 146 | "once": "^1.4.0" 147 | } 148 | }, 149 | "node_modules/get-stream": { 150 | "version": "5.2.0", 151 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 152 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 153 | "dependencies": { 154 | "pump": "^3.0.0" 155 | }, 156 | "engines": { 157 | "node": ">=8" 158 | }, 159 | "funding": { 160 | "url": "https://github.com/sponsors/sindresorhus" 161 | } 162 | }, 163 | "node_modules/got": { 164 | "version": "11.8.3", 165 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", 166 | "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", 167 | "dependencies": { 168 | "@sindresorhus/is": "^4.0.0", 169 | "@szmarczak/http-timer": "^4.0.5", 170 | "@types/cacheable-request": "^6.0.1", 171 | "@types/responselike": "^1.0.0", 172 | "cacheable-lookup": "^5.0.3", 173 | "cacheable-request": "^7.0.2", 174 | "decompress-response": "^6.0.0", 175 | "http2-wrapper": "^1.0.0-beta.5.2", 176 | "lowercase-keys": "^2.0.0", 177 | "p-cancelable": "^2.0.0", 178 | "responselike": "^2.0.0" 179 | }, 180 | "engines": { 181 | "node": ">=10.19.0" 182 | }, 183 | "funding": { 184 | "url": "https://github.com/sindresorhus/got?sponsor=1" 185 | } 186 | }, 187 | "node_modules/http-cache-semantics": { 188 | "version": "4.1.0", 189 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 190 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" 191 | }, 192 | "node_modules/http2-wrapper": { 193 | "version": "1.0.3", 194 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 195 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 196 | "dependencies": { 197 | "quick-lru": "^5.1.1", 198 | "resolve-alpn": "^1.0.0" 199 | }, 200 | "engines": { 201 | "node": ">=10.19.0" 202 | } 203 | }, 204 | "node_modules/iconv-lite": { 205 | "version": "0.6.3", 206 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 207 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 208 | "dependencies": { 209 | "safer-buffer": ">= 2.1.2 < 3.0.0" 210 | }, 211 | "engines": { 212 | "node": ">=0.10.0" 213 | } 214 | }, 215 | "node_modules/json-buffer": { 216 | "version": "3.0.1", 217 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 218 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 219 | }, 220 | "node_modules/keyv": { 221 | "version": "4.5.0", 222 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", 223 | "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", 224 | "dependencies": { 225 | "json-buffer": "3.0.1" 226 | } 227 | }, 228 | "node_modules/lowercase-keys": { 229 | "version": "2.0.0", 230 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 231 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 232 | "engines": { 233 | "node": ">=8" 234 | } 235 | }, 236 | "node_modules/mimic-response": { 237 | "version": "1.0.1", 238 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 239 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 240 | "engines": { 241 | "node": ">=4" 242 | } 243 | }, 244 | "node_modules/normalize-url": { 245 | "version": "6.1.0", 246 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 247 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 248 | "engines": { 249 | "node": ">=10" 250 | }, 251 | "funding": { 252 | "url": "https://github.com/sponsors/sindresorhus" 253 | } 254 | }, 255 | "node_modules/once": { 256 | "version": "1.4.0", 257 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 258 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 259 | "dependencies": { 260 | "wrappy": "1" 261 | } 262 | }, 263 | "node_modules/p-cancelable": { 264 | "version": "2.1.1", 265 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 266 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 267 | "engines": { 268 | "node": ">=8" 269 | } 270 | }, 271 | "node_modules/psl": { 272 | "version": "1.9.0", 273 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 274 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 275 | }, 276 | "node_modules/pump": { 277 | "version": "3.0.0", 278 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 279 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 280 | "dependencies": { 281 | "end-of-stream": "^1.1.0", 282 | "once": "^1.3.1" 283 | } 284 | }, 285 | "node_modules/punycode": { 286 | "version": "2.1.1", 287 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 288 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 289 | "engines": { 290 | "node": ">=6" 291 | } 292 | }, 293 | "node_modules/querystringify": { 294 | "version": "2.2.0", 295 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 296 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 297 | }, 298 | "node_modules/quick-lru": { 299 | "version": "5.1.1", 300 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 301 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 302 | "engines": { 303 | "node": ">=10" 304 | }, 305 | "funding": { 306 | "url": "https://github.com/sponsors/sindresorhus" 307 | } 308 | }, 309 | "node_modules/requires-port": { 310 | "version": "1.0.0", 311 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 312 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" 313 | }, 314 | "node_modules/resolve-alpn": { 315 | "version": "1.2.1", 316 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 317 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" 318 | }, 319 | "node_modules/responselike": { 320 | "version": "2.0.1", 321 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 322 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 323 | "dependencies": { 324 | "lowercase-keys": "^2.0.0" 325 | }, 326 | "funding": { 327 | "url": "https://github.com/sponsors/sindresorhus" 328 | } 329 | }, 330 | "node_modules/safer-buffer": { 331 | "version": "2.1.2", 332 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 333 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 334 | }, 335 | "node_modules/tough-cookie": { 336 | "version": "4.1.2", 337 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", 338 | "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", 339 | "dependencies": { 340 | "psl": "^1.1.33", 341 | "punycode": "^2.1.1", 342 | "universalify": "^0.2.0", 343 | "url-parse": "^1.5.3" 344 | }, 345 | "engines": { 346 | "node": ">=6" 347 | } 348 | }, 349 | "node_modules/universalify": { 350 | "version": "0.2.0", 351 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 352 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 353 | "engines": { 354 | "node": ">= 4.0.0" 355 | } 356 | }, 357 | "node_modules/url-parse": { 358 | "version": "1.5.10", 359 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 360 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 361 | "dependencies": { 362 | "querystringify": "^2.1.1", 363 | "requires-port": "^1.0.0" 364 | } 365 | }, 366 | "node_modules/wrappy": { 367 | "version": "1.0.2", 368 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 369 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 370 | } 371 | }, 372 | "dependencies": { 373 | "@sindresorhus/is": { 374 | "version": "4.6.0", 375 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", 376 | "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" 377 | }, 378 | "@szmarczak/http-timer": { 379 | "version": "4.0.6", 380 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", 381 | "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", 382 | "requires": { 383 | "defer-to-connect": "^2.0.0" 384 | } 385 | }, 386 | "@types/cacheable-request": { 387 | "version": "6.0.2", 388 | "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", 389 | "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", 390 | "requires": { 391 | "@types/http-cache-semantics": "*", 392 | "@types/keyv": "*", 393 | "@types/node": "*", 394 | "@types/responselike": "*" 395 | } 396 | }, 397 | "@types/http-cache-semantics": { 398 | "version": "4.0.1", 399 | "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", 400 | "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" 401 | }, 402 | "@types/keyv": { 403 | "version": "3.1.4", 404 | "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", 405 | "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", 406 | "requires": { 407 | "@types/node": "*" 408 | } 409 | }, 410 | "@types/node": { 411 | "version": "18.8.2", 412 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", 413 | "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==" 414 | }, 415 | "@types/responselike": { 416 | "version": "1.0.0", 417 | "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", 418 | "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", 419 | "requires": { 420 | "@types/node": "*" 421 | } 422 | }, 423 | "cacheable-lookup": { 424 | "version": "5.0.4", 425 | "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", 426 | "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" 427 | }, 428 | "cacheable-request": { 429 | "version": "7.0.2", 430 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", 431 | "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", 432 | "requires": { 433 | "clone-response": "^1.0.2", 434 | "get-stream": "^5.1.0", 435 | "http-cache-semantics": "^4.0.0", 436 | "keyv": "^4.0.0", 437 | "lowercase-keys": "^2.0.0", 438 | "normalize-url": "^6.0.1", 439 | "responselike": "^2.0.0" 440 | } 441 | }, 442 | "clone-response": { 443 | "version": "1.0.3", 444 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 445 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 446 | "requires": { 447 | "mimic-response": "^1.0.0" 448 | } 449 | }, 450 | "decompress-response": { 451 | "version": "6.0.0", 452 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 453 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 454 | "requires": { 455 | "mimic-response": "^3.1.0" 456 | }, 457 | "dependencies": { 458 | "mimic-response": { 459 | "version": "3.1.0", 460 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 461 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" 462 | } 463 | } 464 | }, 465 | "defer-to-connect": { 466 | "version": "2.0.1", 467 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", 468 | "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" 469 | }, 470 | "end-of-stream": { 471 | "version": "1.4.4", 472 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 473 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 474 | "requires": { 475 | "once": "^1.4.0" 476 | } 477 | }, 478 | "get-stream": { 479 | "version": "5.2.0", 480 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 481 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 482 | "requires": { 483 | "pump": "^3.0.0" 484 | } 485 | }, 486 | "got": { 487 | "version": "11.8.3", 488 | "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", 489 | "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", 490 | "requires": { 491 | "@sindresorhus/is": "^4.0.0", 492 | "@szmarczak/http-timer": "^4.0.5", 493 | "@types/cacheable-request": "^6.0.1", 494 | "@types/responselike": "^1.0.0", 495 | "cacheable-lookup": "^5.0.3", 496 | "cacheable-request": "^7.0.2", 497 | "decompress-response": "^6.0.0", 498 | "http2-wrapper": "^1.0.0-beta.5.2", 499 | "lowercase-keys": "^2.0.0", 500 | "p-cancelable": "^2.0.0", 501 | "responselike": "^2.0.0" 502 | } 503 | }, 504 | "http-cache-semantics": { 505 | "version": "4.1.0", 506 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 507 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" 508 | }, 509 | "http2-wrapper": { 510 | "version": "1.0.3", 511 | "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", 512 | "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", 513 | "requires": { 514 | "quick-lru": "^5.1.1", 515 | "resolve-alpn": "^1.0.0" 516 | } 517 | }, 518 | "iconv-lite": { 519 | "version": "0.6.3", 520 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 521 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 522 | "requires": { 523 | "safer-buffer": ">= 2.1.2 < 3.0.0" 524 | } 525 | }, 526 | "json-buffer": { 527 | "version": "3.0.1", 528 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 529 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" 530 | }, 531 | "keyv": { 532 | "version": "4.5.0", 533 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.0.tgz", 534 | "integrity": "sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==", 535 | "requires": { 536 | "json-buffer": "3.0.1" 537 | } 538 | }, 539 | "lowercase-keys": { 540 | "version": "2.0.0", 541 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 542 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" 543 | }, 544 | "mimic-response": { 545 | "version": "1.0.1", 546 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 547 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 548 | }, 549 | "normalize-url": { 550 | "version": "6.1.0", 551 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 552 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" 553 | }, 554 | "once": { 555 | "version": "1.4.0", 556 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 557 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 558 | "requires": { 559 | "wrappy": "1" 560 | } 561 | }, 562 | "p-cancelable": { 563 | "version": "2.1.1", 564 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 565 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" 566 | }, 567 | "psl": { 568 | "version": "1.9.0", 569 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 570 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" 571 | }, 572 | "pump": { 573 | "version": "3.0.0", 574 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 575 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 576 | "requires": { 577 | "end-of-stream": "^1.1.0", 578 | "once": "^1.3.1" 579 | } 580 | }, 581 | "punycode": { 582 | "version": "2.1.1", 583 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 584 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 585 | }, 586 | "querystringify": { 587 | "version": "2.2.0", 588 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 589 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" 590 | }, 591 | "quick-lru": { 592 | "version": "5.1.1", 593 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 594 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" 595 | }, 596 | "requires-port": { 597 | "version": "1.0.0", 598 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 599 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" 600 | }, 601 | "resolve-alpn": { 602 | "version": "1.2.1", 603 | "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", 604 | "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" 605 | }, 606 | "responselike": { 607 | "version": "2.0.1", 608 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", 609 | "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", 610 | "requires": { 611 | "lowercase-keys": "^2.0.0" 612 | } 613 | }, 614 | "safer-buffer": { 615 | "version": "2.1.2", 616 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 617 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 618 | }, 619 | "tough-cookie": { 620 | "version": "4.1.2", 621 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", 622 | "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", 623 | "requires": { 624 | "psl": "^1.1.33", 625 | "punycode": "^2.1.1", 626 | "universalify": "^0.2.0", 627 | "url-parse": "^1.5.3" 628 | } 629 | }, 630 | "universalify": { 631 | "version": "0.2.0", 632 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 633 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" 634 | }, 635 | "url-parse": { 636 | "version": "1.5.10", 637 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 638 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 639 | "requires": { 640 | "querystringify": "^2.1.1", 641 | "requires-port": "^1.0.0" 642 | } 643 | }, 644 | "wrappy": { 645 | "version": "1.0.2", 646 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 647 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 648 | } 649 | } 650 | } 651 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "got": "^11.8.3", 4 | "iconv-lite": "^0.6.3", 5 | "tough-cookie": "^4.1.2" 6 | } 7 | } 8 | --------------------------------------------------------------------------------