open_card/activity/jd_opencardL77.js

525 lines
25 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
2.18-2.28 联合关注
新增开卡脚本 一次性脚本
第一个账号助力作者 其他依次助力CK1
第一个CK失效会退出脚本
————————————————
入口:[ 2.18-2.28 联合关注 (https://lzdz-isv.isvjcloud.com/welfare/unite/activity?activityId=1eca438e9a484de0960115fc7088a7c6&shareUuid=05ee99c9babc4cb6a8132d3383d26f69)]
请求太频繁会被黑ip
过10分钟再执行
============Quantumultx===============
[task_local]
#2.18-2.28 联合关注
40 11 * * * jd_opencardL77.js, tag=2.18-2.28 联合关注, enabled=true
*/
let guaunknownTask_addSku = "true"
let guaopenwait = "0"
const $ = new Env('2.18-2.28 联合关注');
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
const notify = $.isNode() ? require('./sendNotify') : '';
//IOS等用户直接用NobyDa的jd cookie
let cookiesArr = [],
cookie = '';
if ($.isNode()) {
Object.keys(jdCookieNode).forEach((item) => {
cookiesArr.push(jdCookieNode[item])
})
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {};
} else {
cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
}
allMessage = ""
message = ""
$.hotFlag = false
$.outFlag = false
$.activityEnd = false
let lz_jdpin_token_cookie =''
let activityCookie =''
!(async () => {
if (!cookiesArr[0]) {
$.msg($.name, '【提示】请先获取cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {
"open-url": "https://bean.m.jd.com/"
});
return;
}
$.activityId = "4e54fef7014a4651bdad42ec33a51816"
$.shareUuid = "4c913f89a6014e27a5daf158ee7c3491"
$.venderIds = "1000398820"
console.log(`入口:\nhttps://lzdz-isv.isvjcloud.com/welfare/unite/activity?activityId=${$.activityId}&shareUuid=${$.shareUuid}`)
for (let i = 0; i < cookiesArr.length; i++) {
cookie = cookiesArr[i];
if (cookie) {
$.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1])
$.index = i + 1;
message = ""
$.bean = 0
$.hotFlag = false
$.nickName = '';
console.log(`\n\n******开始【京东账号${$.index}${$.nickName || $.UserName}*********\n`);
await getUA()
await run();
if(i == 0 && !$.actorUuid) break
if($.outFlag || $.activityEnd) break
}
}
if($.outFlag) {
let msg = '此ip已被限制请过10分钟后再执行脚本'
$.msg($.name, ``, `${msg}`);
if ($.isNode()) await notify.sendNotify(`${$.name}`, `${msg}`);
}
})()
.catch((e) => $.logErr(e))
.finally(() => $.done())
async function run() {
try {
$.hasEnd = true
$.endTime = 0
lz_jdpin_token_cookie = ''
$.Token = ''
$.Pin = ''
let flag = false
await takePostRequest('isvObfuscator');
if($.Token == ''){
console.log('获取[token]失败!')
return
}
await getCk()
if (activityCookie == '') {
console.log(`获取cookie失败`); return;
}
if($.activityEnd === true){
console.log('活动结束')
return
}
if($.outFlag){
console.log('此ip已被限制请过10分钟后再执行脚本\n')
return
}
await takePostRequest('getMyPing');
if(!$.Pin){
console.log('获取[Pin]失败!')
return
}
await takePostRequest('accessLogWithAD');
await takePostRequest('getUserInfo');
await takePostRequest('activityContent');
if(!$.actorUuid){
console.log('获取不到[actorUuid]退出执行,请重新执行')
return
}
if($.hasEnd === true || Date.now() > $.endTime){
$.activityEnd = true
console.log('活动结束')
return
}
await takePostRequest('drawContent');
await $.wait(1000)
if($.taskData.followShop){
$.log("关注: " + $.taskData.followShop.allStatus)
if(!$.taskData.followShop.allStatus && !$.outFlag){
flag = true
$.taskType = 23
await takePostRequest('关注');
await $.wait(parseInt(Math.random() * 2000 + 3000, 10))
}
}
if($.taskData.followSku){
$.log("关注: " + $.taskData.followSku.allStatus)
if(!$.taskData.followSku.allStatus && !$.outFlag){
flag = true
$.taskType = 22
await takePostRequest('关注');
await $.wait(parseInt(Math.random() * 2000 + 3000, 10))
}
}
if($.taskData.addSku){
$.log("加购: " + $.taskData.addSku.allStatus)
if(!$.taskData.addSku.allStatus && !$.outFlag){
flag = true
$.taskType = 21
await takePostRequest('加购');
await $.wait(parseInt(Math.random() * 2000 + 3000, 10))
}
}
await $.wait(parseInt(Math.random() * 1000 + 2000, 10))
await takePostRequest('getShareRecord');
if($.totalCount > 0){
let m = $.totalCount
do{
await takePostRequest('领取奖励');
await $.wait(parseInt(Math.random() * 1000 + 2000, 10))
m--;
}while (m > 0)
}
await takePostRequest('getDrawRecordHasCoupon');
if($.outFlag){
console.log('此ip已被限制请过10分钟后再执行脚本\n')
return
}
console.log($.actorUuid)
console.log(`当前助力:${$.shareUuid}`)
if($.index == 1){
$.shareUuid = $.actorUuid
console.log(`后面的号都会助力:${$.shareUuid}`)
}
return
await $.wait(parseInt(Math.random() * 1000 + 5000, 10))
if(flag) await $.wait(parseInt(Math.random() * 1000 + 10000, 10))
if($.index % 3 == 0) console.log('休息1分钟别被黑ip了\n可持续发展')
if($.index % 3 == 0) await $.wait(parseInt(Math.random() * 5000 + 60000, 10))
} catch (e) {
console.log(e)
}
}
async function takePostRequest(type) {
if($.outFlag) return
let url = 'https://lzdz-isv.isvjcloud.com';
let body = ``;
let method = 'POST'
let admJson = ''
switch (type) {
case 'isvObfuscator':
url = `https://api.m.jd.com/client.action?functionId=isvObfuscator`;
body = `body=%7B%22url%22%3A%22https%3A//lzdz-isv.isvjcloud.com%22%2C%22id%22%3A%22%22%7D&uuid=f37a4d8b094434f55b3d8b97f53aa659e649fe06&client=apple&clientVersion=10.1.4&st=1634180373571&sv=120&sign=ec39c5ee3223426f01f88b843f898db1`;
break;
case 'getMyPing':
url = `${url}/customer/getMyPing`;
body = `userId=${$.shopId || $.venderId || $.venderIds || ''}&token=${$.Token}&fromType=APP`;
break;
case 'accessLogWithAD':
let pageurl = `${url}/drawCenter/activity?activityId=${$.activityId}&shareUuid=${$.shareUuid}`
url = `${url}/common/accessLogWithAD`;
body = `venderId=${$.shopId || $.venderId || $.venderIds || ''}&code=99&pin=${encodeURIComponent($.Pin)}&activityId=${$.activityId}&pageUrl=${encodeURIComponent(pageurl)}&subType=app&adSource=`
break;
case 'getUserInfo':
url = `${url}/wxActionCommon/getUserInfo`;
body = `pin=${encodeURIComponent($.Pin)}`;
break;
case 'activityContent':
url = `${url}/welfare/unite/activityContent`;
body = `activityId=${$.activityId}&pin=${encodeURIComponent($.Pin)}&pinImg=${encodeURIComponent($.attrTouXiang)}&nick=${encodeURIComponent($.nickname)}&shareUuid=${$.shareUuid}`
break;
case 'drawContent':
url = `${url}/dingzhi/taskact/openCardcommon/drawContent`;
body = `activityId=${$.activityId}&pin=${encodeURIComponent($.Pin)}`
break;
case '关注':
case '加购':
url = `${url}/welfare/unite/saveTask`;
body = `activityId=${$.activityId}&pin=${encodeURIComponent($.Pin)}&actorUuid=${$.actorUuid}&taskType=${$.taskType}&shareUuid=${$.shareUuid}`
break;
case '领取奖励':
url = `${url}/welfare/unite/getInfo`;
body = `activityId=${$.activityId}&pin=${encodeURIComponent($.Pin)}&actorUuid=${$.actorUuid}`
break;
case 'getDrawRecordHasCoupon':
url = `${url}/dingzhi/taskact/common/getDrawRecordHasCoupon`;
body = `activityId=${$.activityId}&pin=${encodeURIComponent($.Pin)}&actorUuid=${$.actorUuid}`
break;
case 'getShareRecord':
url = `${url}/welfare/unite/getAssistInfo`;
body = `activityId=${$.activityId}&actorUuid=${$.actorUuid}&sortStatus=1`
break;
default:
console.log(`错误${type}`);
}
let myRequest = getPostRequest(url, body, method);
// console.log(myRequest)
return new Promise(async resolve => {
$.post(myRequest, (err, resp, data) => {
try {
setActivityCookie(resp)
if (err) {
if(resp && typeof resp.statusCode != 'undefined'){
if(resp.statusCode == 493){
console.log('此ip已被限制请过10分钟后再执行脚本\n')
$.outFlag = true
}
}
console.log(`${$.toStr(err,err)}`)
console.log(`${type} API请求失败请检查网路重试`)
} else {
dealReturn(type, data);
}
} catch (e) {
// console.log(data);
console.log(e, resp)
} finally {
resolve();
}
})
})
}
async function dealReturn(type, data) {
let res = ''
try {
if(type != 'accessLogWithAD' || type != 'drawContent'){
if(data){
res = JSON.parse(data);
}
}
} catch (e) {
console.log(`${type} 执行任务异常`);
console.log(data);
$.runFalag = false;
}
try {
switch (type) {
case 'isvObfuscator':
if(typeof res == 'object'){
if(res.errcode == 0){
if(typeof res.token != 'undefined') $.Token = res.token
}else if(res.message){
console.log(`isvObfuscator ${res.message || ''}`)
}else{
console.log(data)
}
}else{
console.log(data)
}
break;
case 'getMyPing':
if(typeof res == 'object'){
if(res.result && res.result === true){
if(res.data && typeof res.data.secretPin != 'undefined') $.Pin = res.data.secretPin
if(res.data && typeof res.data.nickname != 'undefined') $.nickname = res.data.nickname
}else if(res.errorMessage){
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case 'getUserInfo':
$.attrTouXiang = "https://img10.360buyimg.com/imgzone/jfs/t1/7020/27/13511/6142/5c5138d8E4df2e764/5a1216a3a5043c5d.png"
if(typeof res == 'object'){
if(res.result && res.result === true){
if(res.data && typeof res.data.yunMidImageUrl != 'undefined') $.attrTouXiang = res.data.yunMidImageUrl || $.attrTouXiang
}else if(res.errorMessage){
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case 'activityContent':
if(typeof res == 'object'){
if(res.result && res.result === true){
$.endTime = res.data.endTime || res.data.activity.endTime || 0
$.hasEnd = res.data.hasEnd || false
$.taskData = res.data.taskData || {}
$.actorUuid = res.data.actorUuid || ''
}else if(res.errorMessage){
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case '抽奖':
case '关注':
case '加购':
case '领取奖励':
if(typeof res == 'object'){
if(res.result && res.result === true){
if(typeof res.data == 'object'){
let msg = ''
let title = type
if(res.data.drawResult){
msg += (res.data.drawResult.drawOk == true && res.data.drawResult.value+'京豆') || '空气💨'
}
if(res.data.addPoint){
msg += ` ${res.data.addPoint}游戏机会`
}
console.log(`${title}获得:${msg || data}`)
}else{
console.log(`${type} ${data}`)
}
}else if(res.errorMessage){
$.runFalag = false;
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case 'getDrawRecordHasCoupon':
if(typeof res == 'object'){
if(res.result && res.result === true){
let value = 0
for(let i in res.data){
let item = res.data[i]
if(item.infoName.indexOf('京豆') > -1){
value += Number(item.infoName.replace('京豆','')) || 0
}
}
if(value > 0) console.log(`共获得${parseInt(value, 10) || 0}京豆`)
}else if(res.errorMessage){
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case 'getShareRecord':
if(typeof res == 'object'){
if(res.result && res.result === true && res.data){
console.log(`领取机会(${res.data.hasDrawTimes}/10) 可领取奖励${res.data.totalCount}`)
$.totalCount = res.data.totalCount
$.log(`=========== 你邀请了:${res.data.shareRecord.length}`)
}else if(res.errorMessage){
console.log(`${type} ${res.errorMessage || ''}`)
}else{
console.log(`${type} ${data}`)
}
}else{
console.log(`${type} ${data}`)
}
break;
case 'accessLogWithAD':
case 'drawContent':
break;
default:
console.log(`${type}-> ${data}`);
}
if(typeof res == 'object'){
if(res.errorMessage){
if(res.errorMessage.indexOf('火爆') >-1 ){
$.hotFlag = true
}
}
}
} catch (e) {
console.log(e)
}
}
function getPostRequest(url, body, method="POST") {
let headers = {
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-cn",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
"Cookie": cookie,
"User-Agent": $.UA,
"X-Requested-With": "XMLHttpRequest"
}
if(url.indexOf('https://lzdz-isv.isvjcloud.com') > -1){
headers["Referer"] = `https://lzdz-isv.isvjcloud.com/welfare/unite/activity?activityId=${$.activityId}&shareUuid=${$.shareUuid}`
headers["Origin"] = `https://lzdz-isv.isvjcloud.com`
headers["Cookie"] = `${lz_jdpin_token_cookie && lz_jdpin_token_cookie || ''}${$.Pin && "AUTH_C_USER=" + $.Pin + ";" || ""}${activityCookie}`
}
return {url: url, method: method, headers: headers, body: body, timeout:30000};
}
function getCk() {
return new Promise(resolve => {
let get = {
url:`https://lzdz-isv.isvjcloud.com/welfare/unite/activity?activityId=${$.activityId}&shareUuid=${$.shareUuid}`,
headers: {
"User-Agent": $.UA,
},
timeout:30000
}
$.get(get, async(err, resp, data) => {
try {
if (err) {
if(resp && typeof resp.statusCode != 'undefined'){
if(resp.statusCode == 493){
console.log('此ip已被限制请过10分钟后再执行脚本\n')
$.outFlag = true
}
}
console.log(`${$.toStr(err)}`)
console.log(`${$.name} cookie API请求失败请检查网路重试`)
} else {
let end = data.match(/(活动已经结束)/) && data.match(/(活动已经结束)/)[1] || ''
if(end){
$.activityEnd = true
console.log('活动已结束')
}
setActivityCookie(resp)
}
} catch (e) {
$.logErr(e, resp)
} finally {
resolve();
}
})
})
}
function setActivityCookie(resp){
let LZ_TOKEN_KEY = ''
let LZ_TOKEN_VALUE = ''
let lz_jdpin_token = ''
let setcookies = resp && resp['headers'] && (resp['headers']['set-cookie'] || resp['headers']['Set-Cookie'] || '') || ''
let setcookie = ''
if(setcookies){
if(typeof setcookies != 'object'){
setcookie = setcookies.split(',')
}else setcookie = setcookies
for (let ck of setcookie) {
let name = ck.split(";")[0].trim()
if(name.split("=")[1]){
// console.log(name.replace(/ /g,''))
if(name.indexOf('LZ_TOKEN_KEY=')>-1) LZ_TOKEN_KEY = name.replace(/ /g,'')+';'
if(name.indexOf('LZ_TOKEN_VALUE=')>-1) LZ_TOKEN_VALUE = name.replace(/ /g,'')+';'
if(name.indexOf('lz_jdpin_token=')>-1) lz_jdpin_token = ''+name.replace(/ /g,'')+';'
}
}
}
if(LZ_TOKEN_KEY && LZ_TOKEN_VALUE) activityCookie = `${LZ_TOKEN_KEY} ${LZ_TOKEN_VALUE}`
if(lz_jdpin_token) lz_jdpin_token_cookie = lz_jdpin_token
}
async function getUA(){
$.UA = `jdapp;iPhone;10.1.4;13.1.2;${randomString(40)};network/wifi;model/iPhone8,1;addressid/2308460611;appBuild/167814;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`
}
function randomString(e) {
e = e || 32;
let t = "abcdef0123456789", a = t.length, n = "";
for (i = 0; i < e; i++)
n += t.charAt(Math.floor(Math.random() * a));
return n
}
function jsonParse(str) {
if (typeof str == "string") {
try {
return JSON.parse(str);
} catch (e) {
console.log(e);
$.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie')
return [];
}
}
}
// prettier-ignore
function Env(t,e){"undefined"!=typeof process&&JSON.stringify(process.env).indexOf("GITHUB")>-1&&process.exit(0);class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),n={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(n,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`❗️${this.name}, 错误!`,t.stack):this.log("",`❗️${this.name}, 错误!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`🔔${this.name}, 结束! 🕛 ${s}`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)}