Merge pull request #8 from HuanLinOTO/refactor

Refactor
This commit is contained in:
多玩幻灵qwq 2023-08-27 22:35:47 +08:00 committed by GitHub
commit 5af6e5375c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 248 additions and 1079 deletions

View File

@ -1,10 +1,6 @@
# GenshinCloudPlayHelpper
每天帮你获取15分钟云原神时间~
## ⚠️请不要进行宣传,谢谢!
## 一旦发现宣传就删库跑路!
每天帮你获取 15 分钟云原神时间~
## 配置教程
@ -23,7 +19,7 @@
}
```
> sendMail 一个bool 代表是否在运行结束后将结果发送至指定邮箱false时mailConfig内的内容可不填
> sendMail 一个 bool 代表是否在运行结束后将结果发送至指定邮箱false mailConfig 内的内容可不填
> mailConfig 具体配置
>
> > user 发送方邮箱
@ -36,7 +32,7 @@
> >
> > smtpPort smtp 服务器端口
> >
> > smtpSecure 如果smtp服务器使用SSL/TLS那么为true如果使用STARTTLS或不使用加密那么为false
> > smtpSecure 如果 smtp 服务器使用 SSL/TLS那么为 true如果使用 STARTTLS 或不使用加密,那么为 false
对于常用的邮件而言,配置列举如下
@ -67,30 +63,30 @@
具体数据 请看“抓包”环节
> token 是在云原神登录后用于验证的标记
> client_type 1代表ios设备 2代表android&鸿蒙设备
> client_type 1 代表 ios 设备 2 代表 android&鸿蒙设备
> device_name 设备名称
> device_model 设备型号
> device_id 在米哈游服务器中注册的uuid
> sys_version 系统版本 android&鸿蒙中为系统版本 ios设备中为ios版本
> channel 下载渠道 ios设备填"app store" android&鸿蒙填"mihoyo"(以抓包为准,我也不知道渠道服是不是这个)
> device_id 在米哈游服务器中注册的 uuid
> sys_version 系统版本 android&鸿蒙中为系统版本 ios 设备中为 ios 版本
> channel 下载渠道 ios 设备填"app store" android&鸿蒙填"mihoyo"(以抓包为准,我也不知道渠道服是不是这个)
### 抓包
> > # ios
> >
> > App Store中下载应用Stream用于抓包
> > App Store 中下载应用 Stream用于抓包
> > 然后看视频吧
> > 看不了/不显示的点右边 https://hzsj.coding.net/p/ayakaturtleshop/d/PublicResource/git/raw/master/c9f1a9b91951b0f1c2da8f3817274074.mp4?download=false
> > <video src="https://hzsj.coding.net/p/ayakaturtleshop/d/PublicResource/git/raw/master/c9f1a9b91951b0f1c2da8f3817274074.mp4?download=false"></video>
>
> # android&鸿蒙
>
> > (来自https://bili33.top/posts/MHYY-AutoCheckin-Manual)
> > 因为云原神是在手机上运行的所以你需要安装一个手机上的抓包软件例如HttpCanary或者如果你能够用fiddler电脑运行去抓也行
> > (来自 https://bili33.top/posts/MHYY-AutoCheckin-Manual)
> > 因为云原神是在手机上运行的,所以你需要安装一个手机上的抓包软件(例如 HttpCanary或者如果你能够用 fiddler 电脑运行去抓也行)
> > [![看就完了](https://cdn.bilicdn.tk/gh/Vikutorika/assets@master/img/Github/MHYY-AutoCheckin/HTTPCANARY-Result.jpg?download=false)]
> > 一定要记得装抓包软件提供的证书要不然解不了SSL连接一定要先登录并成功进去了再启动抓包软件
> > 一定要记得装抓包软件提供的证书,要不然解不了 SSL 连接,一定要先登录并成功进去了再启动抓包软件!!!
> > [![看就完了](https://cdn.bilicdn.tk/gh/Vikutorika/assets@master/img/Github/MHYY-AutoCheckin/HTTPS-REQUEST-RESULT.png?download=false)]
> > 这里面只要是个HTTP链接随便一个里面都有我们所需要的东西这里我就点开了一个链接在请求里面有所有我们需要的东西而解释我都写在图片里面了
> > 这里面只要是个 HTTP 链接,随便一个里面都有我们所需要的东西,这里我就点开了一个链接,在请求里面有所有我们需要的东西,而解释我都写在图片里面了
二者抓到的包差不多,抓到包之后有以下对应关系
@ -107,8 +103,8 @@
```
对着填进去就完了
接着在configs文件夹里创建任意一个json文件将配置填进去
如果想一次性签到n个用户创建不同的json文件即可程序会自动扫描configs文件夹下面的文件
接着在 configs 文件夹里创建任意一个 json 文件,将配置填进去
如果想一次性签到 n 个用户,创建不同的 json 文件即可,程序会自动扫描 configs 文件夹下面的文件
## 另外

View File

@ -1,91 +0,0 @@
const request = require("sync-request")
const fs = require("fs")
const log4js = require("log4js")
const { getConfigs, checkConfigs, makeHeader, Notification, Wallet, SendLog, AppVersion, getGlobalConfig } = require("./config")
const urlconfig = require("./config")
const nodemailer = require('nodemailer')
var baseLogger = log4js.getLogger()
baseLogger.level = "info"
var logContent = ``
global.log = {
info(content){
logContent += `<strong style="color: green">[info]</strong> ${content}<br>`
baseLogger.info(content)
},
error(content){
logContent += `<strong style="color: red">[error]</strong> ${content}<br>`
baseLogger.error(content)
}
}
log.info("开始获取全局配置")
var globalConfig = getGlobalConfig();
log.info("获取成功")
if (globalConfig.sendMail == true) {
log.info("组装邮件发射器")
var transporter = nodemailer.createTransport({
host: globalConfig.mailConfig.smtpServer,
port: globalConfig.mailConfig.smtpPort,
secure: globalConfig.mailConfig.smtpSecure,
auth: {
user: globalConfig.mailConfig.user,
pass: globalConfig.mailConfig.pass
}
});
}
var configs = getConfigs();
// console.log(configs);
log.info(`正在检测配置有效性`)
checkConfigs(configs)
log.info("检测完毕!")
log.info("正在获取版本号")
var appversion = AppVersion();
appversion = appversion.data.package_version
log.info(`获取成功!当前版本号:${appversion}`)
var successNum = 0,totalNum = 0;
for(key in configs) {
totalNum ++;
log.info(`正在执行配置 ${key}`)
log.info("尝试签到……")
var WalletRespond = Wallet(makeHeader(configs[key]),appversion);
logContent += `<span style="color: orange">${key} Wallet返回体 <br> ${JSON.stringify(WalletRespond)}</span><br>`;
var NotificationRespond = Notification(makeHeader(configs[key]));
logContent += `<span style="color: orange">${key} Notification返回体 <br> ${JSON.stringify(NotificationRespond)}</span><br>`;
if(WalletRespond.data != null) {
if(WalletRespond.data.free_time.free_time != undefined) {
successNum ++;
log.info(`签到完毕! 剩余时长:${WalletRespond.data.free_time.free_time}分钟`)
let NotificationLength = NotificationRespond.data.list.length
if(NotificationLength != 0) {
log.info(`已堆积 ${NotificationLength} 个签到通知 请及时处理!`)
}
} else {
log.error("签到失败")
}
} else {
log.error("签到失败")
}
// log.info(`Wallet ${Wallet(makeHeader(configs[key])).StringVersion}`)
// log.info(`Announcement ${Announcement(makeHeader(configs[key])).StringVersion}`)
// console.log(makeHeader(configs[key]));
}
if (globalConfig.sendMail == true) {
log.info(`运行完毕!丢出日志`)
SendLog(
transporter,
globalConfig.mailConfig.user,
globalConfig.mailConfig.mailto,
successNum,
totalNum,
logContent
)
}

833
package-lock.json generated
View File

@ -1,833 +0,0 @@
{
"name": "genshincloudplayhelpper",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "genshincloudplayhelpper",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"log4js": "^6.5.2",
"nodemailer": "^6.7.6",
"sync-request": "^6.1.0"
}
},
"node_modules/@types/concat-stream": {
"version": "1.6.1",
"resolved": "https://registry.npmmirror.com/@types/concat-stream/-/concat-stream-1.6.1.tgz",
"integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/form-data": {
"version": "0.0.33",
"resolved": "https://registry.npmmirror.com/@types/form-data/-/form-data-0.0.33.tgz",
"integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"node_modules/@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"node_modules/caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"engines": [
"node >= 0.8"
],
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/date-format": {
"version": "4.0.11",
"resolved": "https://registry.npmmirror.com/date-format/-/date-format-4.0.11.tgz",
"integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==",
"engines": {
"node": ">=4.0"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/flatted": {
"version": "3.2.5",
"resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz",
"integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg=="
},
"node_modules/form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/get-intrinsic": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
"integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"node_modules/get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/get-port/-/get-port-3.2.0.tgz",
"integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==",
"engines": {
"node": ">=4"
}
},
"node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/http-basic": {
"version": "8.1.3",
"resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz",
"integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
"dependencies": {
"caseless": "^0.12.0",
"concat-stream": "^1.6.2",
"http-response-object": "^3.0.1",
"parse-cache-control": "^1.0.1"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/http-response-object": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/http-response-object/-/http-response-object-3.0.2.tgz",
"integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
"dependencies": {
"@types/node": "^10.0.3"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/log4js": {
"version": "6.5.2",
"resolved": "https://registry.npmmirror.com/log4js/-/log4js-6.5.2.tgz",
"integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==",
"dependencies": {
"date-format": "^4.0.10",
"debug": "^4.3.4",
"flatted": "^3.2.5",
"rfdc": "^1.3.0",
"streamroller": "^3.1.1"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nodemailer": {
"version": "6.7.6",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.6.tgz",
"integrity": "sha512-/6KF/umU7r7X21Y648/yiRLrgkfz0dmpyuo4BfgYWIpnT/jCbkPTvegMfxCsDAu+O810p2L1BGXieMTPp3nJVA==",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
"node_modules/parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
"integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/promise": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/promise/-/promise-8.1.0.tgz",
"integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
"dependencies": {
"asap": "~2.0.6"
}
},
"node_modules/qs": {
"version": "6.10.5",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.5.tgz",
"integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/rfdc": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"node_modules/streamroller": {
"version": "3.1.1",
"resolved": "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.1.tgz",
"integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==",
"dependencies": {
"date-format": "^4.0.10",
"debug": "^4.3.4",
"fs-extra": "^10.1.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/sync-request": {
"version": "6.1.0",
"resolved": "https://registry.npmmirror.com/sync-request/-/sync-request-6.1.0.tgz",
"integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
"dependencies": {
"http-response-object": "^3.0.1",
"sync-rpc": "^1.2.1",
"then-request": "^6.0.0"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/sync-rpc": {
"version": "1.3.6",
"resolved": "https://registry.npmmirror.com/sync-rpc/-/sync-rpc-1.3.6.tgz",
"integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
"dependencies": {
"get-port": "^3.1.0"
}
},
"node_modules/then-request": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/then-request/-/then-request-6.0.2.tgz",
"integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
"dependencies": {
"@types/concat-stream": "^1.6.0",
"@types/form-data": "0.0.33",
"@types/node": "^8.0.0",
"@types/qs": "^6.2.31",
"caseless": "~0.12.0",
"concat-stream": "^1.6.0",
"form-data": "^2.2.0",
"http-basic": "^8.1.1",
"http-response-object": "^3.0.1",
"promise": "^8.0.0",
"qs": "^6.4.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/then-request/node_modules/@types/node": {
"version": "8.10.66",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-8.10.66.tgz",
"integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}
},
"dependencies": {
"@types/concat-stream": {
"version": "1.6.1",
"resolved": "https://registry.npmmirror.com/@types/concat-stream/-/concat-stream-1.6.1.tgz",
"integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
"requires": {
"@types/node": "*"
}
},
"@types/form-data": {
"version": "0.0.33",
"resolved": "https://registry.npmmirror.com/@types/form-data/-/form-data-0.0.33.tgz",
"integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
"requires": {
"@types/node": "*"
}
},
"@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
},
"@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz",
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"date-format": {
"version": "4.0.11",
"resolved": "https://registry.npmmirror.com/date-format/-/date-format-4.0.11.tgz",
"integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"flatted": {
"version": "3.2.5",
"resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.5.tgz",
"integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg=="
},
"form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
},
"fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
"integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"get-port": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/get-port/-/get-port-3.2.0.tgz",
"integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
},
"graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"http-basic": {
"version": "8.1.3",
"resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz",
"integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
"requires": {
"caseless": "^0.12.0",
"concat-stream": "^1.6.2",
"http-response-object": "^3.0.1",
"parse-cache-control": "^1.0.1"
}
},
"http-response-object": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/http-response-object/-/http-response-object-3.0.2.tgz",
"integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
"requires": {
"@types/node": "^10.0.3"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"log4js": {
"version": "6.5.2",
"resolved": "https://registry.npmmirror.com/log4js/-/log4js-6.5.2.tgz",
"integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==",
"requires": {
"date-format": "^4.0.10",
"debug": "^4.3.4",
"flatted": "^3.2.5",
"rfdc": "^1.3.0",
"streamroller": "^3.1.1"
}
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"nodemailer": {
"version": "6.7.6",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.6.tgz",
"integrity": "sha512-/6KF/umU7r7X21Y648/yiRLrgkfz0dmpyuo4BfgYWIpnT/jCbkPTvegMfxCsDAu+O810p2L1BGXieMTPp3nJVA=="
},
"object-inspect": {
"version": "1.12.2",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
},
"parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
"integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"promise": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/promise/-/promise-8.1.0.tgz",
"integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==",
"requires": {
"asap": "~2.0.6"
}
},
"qs": {
"version": "6.10.5",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.5.tgz",
"integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==",
"requires": {
"side-channel": "^1.0.4"
}
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rfdc": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz",
"integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"streamroller": {
"version": "3.1.1",
"resolved": "https://registry.npmmirror.com/streamroller/-/streamroller-3.1.1.tgz",
"integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==",
"requires": {
"date-format": "^4.0.10",
"debug": "^4.3.4",
"fs-extra": "^10.1.0"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"sync-request": {
"version": "6.1.0",
"resolved": "https://registry.npmmirror.com/sync-request/-/sync-request-6.1.0.tgz",
"integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
"requires": {
"http-response-object": "^3.0.1",
"sync-rpc": "^1.2.1",
"then-request": "^6.0.0"
}
},
"sync-rpc": {
"version": "1.3.6",
"resolved": "https://registry.npmmirror.com/sync-rpc/-/sync-rpc-1.3.6.tgz",
"integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
"requires": {
"get-port": "^3.1.0"
}
},
"then-request": {
"version": "6.0.2",
"resolved": "https://registry.npmmirror.com/then-request/-/then-request-6.0.2.tgz",
"integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
"requires": {
"@types/concat-stream": "^1.6.0",
"@types/form-data": "0.0.33",
"@types/node": "^8.0.0",
"@types/qs": "^6.2.31",
"caseless": "~0.12.0",
"concat-stream": "^1.6.0",
"form-data": "^2.2.0",
"http-basic": "^8.1.1",
"http-response-object": "^3.0.1",
"promise": "^8.0.0",
"qs": "^6.4.0"
},
"dependencies": {
"@types/node": {
"version": "8.10.66",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-8.10.66.tgz",
"integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
}
}
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}
}
}

View File

@ -18,8 +18,8 @@
},
"homepage": "https://github.com/HuanLinMaster/GenshinCloudPlayHelpper#readme",
"dependencies": {
"log4js": "^6.5.2",
"axios": "^1.5.0",
"nodemailer": "^6.7.6",
"sync-request": "^6.1.0"
"reggol": "^1.4.4"
}
}

View File

@ -1,135 +1,136 @@
const { exit } = require("process")
const fs = require("fs")
const request = require("sync-request")
const nodemailer = require('nodemailer')
exports.NotificationURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true'
exports.WalletURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get'
exports.AnnouncementURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo'
// Here must be an earlier version so that the response won't be null
exports.AppVersionURL = 'https://api-takumi.mihoyo.com/ptolemaios/api/getLatestRelease?app_id=1953443910&app_version=3.3.0&channel=mihoyo'
exports.Notification = function(header) {
let tmp = JSON.parse(request("GET",exports.NotificationURL,{
headers:header
}).body.toString());
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.Wallet = function(header) {
let tmp = JSON.parse(request("GET",exports.WalletURL,{
headers:header
}).body.toString());
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.Announcement = function(header) {
let tmp = JSON.parse(request("GET",exports.AnnouncementURL,{
headers:header
}).body.toString());
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.AppVersion = function() {
let tmp = JSON.parse(request("GET",exports.AppVersionURL).body.toString());
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
var configKeys = [
"token",
"client_type",
"device_name",
"device_model",
"sys_version",
"channel"
]
exports.getGlobalConfig = function() {
try {
var globalConfig = fs.readFileSync("global.json")
} catch(e) {
if(e == "Error: ENOENT: no such file or directory, scandir 'global.json'") {
log.error(`读取配置失败!找不到全局配置文件`)
} else {
log.error(`读取配置失败!错误信息:${e}`);
}
exit()
}
return JSON.parse(globalConfig);
}
exports.getConfigs = function(){
// var configsList;
try {
var configsList = fs.readdirSync("configs")
} catch(e) {
if(e == "Error: ENOENT: no such file or directory, scandir 'configs'") {
log.error(`读取配置失败!找不到configs文件夹`)
} else {
log.error(`读取配置失败!错误信息:${e}`);
}
exit()
}
log.info(`检测到${configsList.length}个配置文件:`)
configsList.forEach(file => {
log.info(`${file}`)
})
var configs = {}
configsList.forEach(file => {
configs[file] = JSON.parse(fs.readFileSync(`configs/${file}`))
})
return configs
}
exports.checkConfigs = function(configs){
for(file in configs) {
var configThis = configs[file];
var isNoProbem = true;
for(key in configKeys) {
if(configThis[configKeys[key]] == "" || configThis[configKeys[key]] == undefined || configThis[configKeys[key]] == null || configThis[configKeys[key]] == NaN) {
log.error(`配置文件 ${file} 异常:`);
log.error(` —— ${configKeys[key]}字段缺失`);
// isNoProbem = false;
}
}
// if(!isNoProbem) {
// exit();
// }
}
}
// var appversion = exports.AppVersion();
exports.makeHeader = function(data,appversion){
return {
'x-rpc-combo_token': data.token,
'x-rpc-client_type': data.client_type,
'x-rpc-app_version': appversion,
'x-rpc-sys_version': data.sys_version,
'x-rpc-channel': data.channel,
'x-rpc-device_id': data.device_id,
'x-rpc-device_name': data.device_name,
'x-rpc-device_model': data.device_model,
'x-rpc-app_id': 1953439974,
'Referer': 'https://app.mihoyo.com',
'Host': 'api-cloudgame.mihoyo.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'User-Agent': 'okhttp/4.9.0'
}
}
exports.SendLog = function(transporter,mailfrom,mailto,successNum,totalNum,content) {
transporter.sendMail({
from: mailfrom+'" Genshin CloudPlay Helper"', //邮件来源
to: mailto, //邮件发送到哪里,多个邮箱使用逗号隔开
subject: `今日已签到${successNum}/${totalNum}名用户`, // 邮件主题
text: '☺️😍😎', // 存文本类型的邮件正文
html: `${content}` // html类型的邮件正文
}, (error, info) => {
if (error) {
return console.log(error);
}
log.info("日志已丢出!")
});
}
const { exit } = require("process")
const fs = require("fs")
const nodemailer = require('nodemailer')
const { default: axios } = require("axios")
const { log } = require("./logger")
exports.NotificationURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?status=NotificationStatusUnread&type=NotificationTypePopup&is_sort=true'
exports.WalletURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get'
exports.AnnouncementURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo'
// Here must be an earlier version so that the response won't be null
exports.AppVersionURL = 'https://api-takumi.mihoyo.com/ptolemaios/api/getLatestRelease?app_id=1953443910&app_version=3.3.0&channel=mihoyo'
exports.Notification = async function(header) {
let tmp = (await axios(exports.NotificationURL,{
headers:header
})).data;
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.Wallet = async function(header) {
let tmp = (await axios(exports.WalletURL,{
headers:header
})).data;
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.Announcement = async function(header) {
let tmp = (await axios(exports.AnnouncementURL,{
headers:header
})).data;
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
exports.AppVersion = async function() {
let tmp = (await axios(exports.AppVersionURL)).data;
tmp.StringVersion = JSON.stringify(tmp);
return tmp;
}
var configKeys = [
"token",
"client_type",
"device_name",
"device_model",
"sys_version",
"channel"
]
exports.getGlobalConfig = function() {
try {
var globalConfig = fs.readFileSync("global.json")
} catch(e) {
if(e.toString().includes("Error: ENOENT: no such file or directory")) {
log.error(`读取配置失败!找不到全局配置文件`)
} else {
log.error(`读取配置失败!错误信息:${e}`);
}
exit()
}
return JSON.parse(globalConfig);
}
exports.getConfigs = function(){
// var configsList;
try {
var configsList = fs.readdirSync("configs")
} catch(e) {
if(e == "Error: ENOENT: no such file or directory, scandir 'configs'") {
log.error(`读取配置失败!找不到configs文件夹`)
} else {
log.error(`读取配置失败!错误信息:${e}`);
}
exit()
}
log.info(`检测到${configsList.length}个配置文件:`)
configsList.forEach(file => {
log.info(`${file}`)
})
var configs = {}
configsList.forEach(file => {
configs[file] = JSON.parse(fs.readFileSync(`configs/${file}`))
})
return configs
}
exports.checkConfigs = function(configs){
for(file in configs) {
var configThis = configs[file];
var isNoProbem = true;
for(key in configKeys) {
if(configThis[configKeys[key]] == "" || configThis[configKeys[key]] == undefined || configThis[configKeys[key]] == null || configThis[configKeys[key]] == NaN) {
log.error(`配置文件 ${file} 异常:`);
log.error(` —— ${configKeys[key]}字段缺失`);
// isNoProbem = false;
}
}
// if(!isNoProbem) {
// exit();
// }
}
}
// var appversion = exports.AppVersion();
exports.makeHeader = function(data,appversion){
return {
'x-rpc-combo_token': data.token,
'x-rpc-client_type': data.client_type,
'x-rpc-app_version': appversion,
'x-rpc-sys_version': data.sys_version,
'x-rpc-channel': data.channel,
'x-rpc-device_id': data.device_id,
'x-rpc-device_name': data.device_name,
'x-rpc-device_model': data.device_model,
'x-rpc-app_id': 1953439974,
'Referer': 'https://app.mihoyo.com',
'Host': 'api-cloudgame.mihoyo.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip',
'User-Agent': 'okhttp/4.9.0'
}
}
exports.SendLog = function(transporter,mailfrom,mailto,successNum,totalNum,content) {
transporter.sendMail({
from: mailfrom+'" Genshin CloudPlay Helper"', //邮件来源
to: mailto, //邮件发送到哪里,多个邮箱使用逗号隔开
subject: `今日已签到${successNum}/${totalNum}名用户`, // 邮件主题
text: '☺️😍😎', // 存文本类型的邮件正文
html: `${content}` // html类型的邮件正文
}, (error, info) => {
if (error) {
return console.log(error);
}
log.info("日志已丢出!")
});
}

76
src/index.js Normal file
View File

@ -0,0 +1,76 @@
const fs = require("fs")
const reggol = require("reggol")
const { getConfigs, checkConfigs, makeHeader, Notification, Wallet, SendLog, AppVersion, getGlobalConfig } = require("./config")
const urlconfig = require("./config")
const { log, addLogContent, getLogs } = require("./logger");
const nodemailer = require("nodemailer");
(async () => {
log.info("开始获取全局配置")
var globalConfig = getGlobalConfig();
log.info("获取成功")
if (globalConfig.sendMail == true) {
log.info("组装邮件发射器")
var transporter = nodemailer.createTransport({
host: globalConfig.mailConfig.smtpServer,
port: globalConfig.mailConfig.smtpPort,
secure: globalConfig.mailConfig.smtpSecure,
auth: {
user: globalConfig.mailConfig.user,
pass: globalConfig.mailConfig.pass
}
});
}
var configs = getConfigs();
// console.log(configs);
log.info(`正在检测配置有效性`)
checkConfigs(configs)
log.info("检测完毕!")
log.info("正在获取版本号")
var appversion = await AppVersion();
appversion = appversion.data.package_version
log.info(`获取成功!当前版本号:${appversion}`)
var successNum = 0,totalNum = 0;
for (key in configs) {
totalNum ++;
log.info(`正在执行配置 ${key}`)
log.info("尝试签到……")
var WalletRespond = await Wallet(makeHeader(configs[key]),appversion);
addLogContent(`<span style="color: orange">${key} Wallet返回体 <br> ${JSON.stringify(WalletRespond)}</span><br>`);
var NotificationRespond = await Notification(makeHeader(configs[key]));
addLogContent(`<span style="color: orange">${key} Notification返回体 <br> ${JSON.stringify(NotificationRespond)}</span><br>`);
if(WalletRespond.data != null) {
if(WalletRespond.data.free_time.free_time != undefined) {
successNum ++;
log.info(`签到完毕! 剩余时长:${WalletRespond.data.free_time.free_time}分钟`)
let NotificationLength = NotificationRespond.data.list.length
if(NotificationLength != 0) {
log.info(`已堆积 ${NotificationLength} 个签到通知 请及时处理!`)
}
} else {
log.error("签到失败")
}
} else {
log.error("签到失败")
}
// log.info(`Wallet ${Wallet(makeHeader(configs[key])).StringVersion}`)
// log.info(`Announcement ${Announcement(makeHeader(configs[key])).StringVersion}`)
// console.log(makeHeader(configs[key]));
}
if (globalConfig.sendMail == true) {
log.info(`运行完毕!丢出日志`)
SendLog(
transporter,
globalConfig.mailConfig.user,
globalConfig.mailConfig.mailto,
successNum,
totalNum,
getLogs()
)
}
})()

20
src/logger.js Normal file
View File

@ -0,0 +1,20 @@
const reggol = require("reggol")
const baseLogger = new reggol("GenshinCloudPlayHelper")
let logContent = ``
exports.addLogContent = function(content) {
logContent += content
}
exports.getLogs = function() {
return logContent
}
exports.log = {
info(content) {
logContent += `<strong style="color: green">[info]</strong> ${content}<br>`
baseLogger.info(content)
},
error(content) {
logContent += `<strong style="color: red">[error]</strong> ${content}<br>`
baseLogger.error(content)
}
}