diff --git a/README.md b/README.md index fd0046a..f88f13e 100644 --- a/README.md +++ b/README.md @@ -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 > > > > # 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 文件夹下面的文件 ## 另外 diff --git a/index.js b/index.js deleted file mode 100644 index 09a6762..0000000 --- a/index.js +++ /dev/null @@ -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 += `[info] ${content}
` - baseLogger.info(content) - }, - error(content){ - logContent += `[error] ${content}
` - 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 += `${key} Wallet返回体
${JSON.stringify(WalletRespond)}

`; - var NotificationRespond = Notification(makeHeader(configs[key])); - logContent += `${key} Notification返回体
${JSON.stringify(NotificationRespond)}

`; - 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 - ) -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8197edb..0000000 --- a/package-lock.json +++ /dev/null @@ -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==" - } - } -} diff --git a/package.json b/package.json index f950a4d..bd70501 100644 --- a/package.json +++ b/package.json @@ -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" } } diff --git a/config.js b/src/config.js similarity index 84% rename from config.js rename to src/config.js index 7dd828c..6512caf 100644 --- a/config.js +++ b/src/config.js @@ -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("日志已丢出!") + }); +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..c013f61 --- /dev/null +++ b/src/index.js @@ -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(`${key} Wallet返回体
${JSON.stringify(WalletRespond)}

`); + var NotificationRespond = await Notification(makeHeader(configs[key])); + addLogContent(`${key} Notification返回体
${JSON.stringify(NotificationRespond)}

`); + 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() + ) + } +})() \ No newline at end of file diff --git a/src/logger.js b/src/logger.js new file mode 100644 index 0000000..1213538 --- /dev/null +++ b/src/logger.js @@ -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 += `[info] ${content}
` + baseLogger.info(content) + }, + error(content) { + logContent += `[error] ${content}
` + baseLogger.error(content) + } +} \ No newline at end of file