更新于 07-14 22:25

This commit is contained in:
root
2021-07-14 22:26:01 -04:00
parent 039f65f400
commit 137b01c3d1

View File

@@ -374,350 +374,287 @@ var _0xodl='jsjiami.com.v6',_0x36df=[_0xodl,'ZklZaUE=','ZXJyb3I=','ZkZJd1Y=','WX
// prettier-ignore // prettier-ignore
const canRequest = (url) => { const canRequest = (url) => {
const canRequest = (url) => { const [, , host] = url.split('/')
const [, , host] = url.split('/')
if (
if ( ![
![ 'oapi.dingtalk.com',
'oapi.dingtalk.com', 'cdn.jsdelivr.net',
'cdn.jsdelivr.net', 'lkyl.dianpusoft.cn',
'lkyl.dianpusoft.cn', 'raw.githubusercontent.com',
'raw.githubusercontent.com', 'www.fastmock.site',
].includes(host) && ].includes(host) &&
!/\.jd\.com$/.test(host) && !/\.jd\.com$/.test(host) &&
!/\.jingxi\.com/.test(host) && !/\.jingxi\.com/.test(host) &&
!/\.isvjcloud\.com/.test(host) && !/\.isvjcloud\.com/.test(host)
!/\.fastmock\.site/.test(host) ) {
) { console.log(host, url)
console.log(host, url) throw new Error(`该请求 url 不合法: ${url}`)
throw new Error(`该请求 url 不合法: ${url}`) }
}
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')
} }
} }
function Env(t, e) { return new (class {
'undefined' != typeof process && constructor(t, e) {
JSON.stringify(process.env).indexOf('GITHUB') > -1 && ;(this.name = t),
process.exit(0) (this.http = new s(this)),
(this.data = null),
class s { (this.dataFile = 'box.dat'),
constructor(t) { (this.logs = []),
this.env = t (this.isMute = !1),
} (this.isNeedRewrite = !1),
(this.logSeparator = '\n'),
send(t, e = 'GET') { (this.startTime = new Date().getTime()),
t = 'string' == typeof t ? { url: t } : t Object.assign(this, e),
let s = this.get this.log('', `🔔${this.name}, 开始!`)
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 { isNode() {
constructor(t, e) { return 'undefined' != typeof module && !!module.exports
;(this.name = t), }
(this.http = new s(this)),
(this.data = null), isQuanX() {
(this.dataFile = 'box.dat'), return 'undefined' != typeof $task
(this.logs = []), }
(this.isMute = !1),
(this.isNeedRewrite = !1), isSurge() {
(this.logSeparator = '\n'), return 'undefined' != typeof $httpClient && 'undefined' == typeof $loon
(this.startTime = new Date().getTime()), }
Object.assign(this, e),
this.log('', `🔔${this.name}, 开始!`) isLoon() {
} return 'undefined' != typeof $loon
}
isNode() {
return 'undefined' != typeof module && !!module.exports toObj(t, e = null) {
} try {
return JSON.parse(t)
isQuanX() { } catch {
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 return e
} }
}
setdata(t, e) {
let s = !1 toStr(t, e = null) {
if (/^@/.test(e)) { try {
const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), return JSON.stringify(t)
o = this.getval(i), } catch {
h = i ? ('null' === o ? null : o || '{}') : '{}' return e
try { }
const e = JSON.parse(h) }
this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), i))
} catch (e) { getjson(t, e) {
const o = {} let s = e
this.lodash_set(o, r, t), (s = this.setval(JSON.stringify(o), i)) 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: '*/*' },
} }
} else s = this.setval(t, e) this.post(n, (t, e, i) => s(i))
return s }).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 {}
}
}
} }
}
getval(t) {
return this.isSurge() || this.isLoon() writedata() {
? $persistentStore.read(t) if (this.isNode()) {
: this.isQuanX() ;(this.fs = this.fs ? this.fs : require('fs')),
? $prefs.valueForKey(t) (this.path = this.path ? this.path : require('path'))
: this.isNode() const t = this.path.resolve(this.dataFile),
? ((this.data = this.loaddata()), this.data[t]) e = this.path.resolve(process.cwd(), this.dataFile),
: (this.data && this.data[t]) || null 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)
} }
}
setval(t, e) {
return this.isSurge() || this.isLoon() lodash_get(t, e, s) {
? $persistentStore.write(t, e) const i = e.replace(/\[(\d+)\]/g, '.$1').split('.')
: this.isQuanX() let r = t
? $prefs.setValueForKey(t, e) for (const t of i) if (((r = Object(r)[t]), void 0 === r)) return s
: this.isNode() return r
? ((this.data = this.loaddata()), }
(this.data[e] = t),
this.writedata(), lodash_set(t, e, s) {
!0) return Object(t) !== t
: (this.data && this.data[e]) || null ? 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
initGotEnv(t) { }
;(this.got = this.got ? this.got : require('got')),
(this.cktough = this.cktough ? this.cktough : require('tough-cookie')), setdata(t, e) {
(this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), let s = !1
t && if (/^@/.test(e)) {
((t.headers = t.headers ? t.headers : {}), const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e),
void 0 === t.headers.Cookie && o = this.getval(i),
void 0 === t.cookieJar && h = i ? ('null' === o ? null : o || '{}') : '{}'
(t.cookieJar = this.ckjar)) try {
} const e = JSON.parse(h)
this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), i))
get(t, e = () => {}) { } catch (e) {
canRequest(t.url) const o = {}
this.lodash_set(o, r, t), (s = this.setval(JSON.stringify(o), i))
t.headers && }
(delete t.headers['Content-Type'], delete t.headers['Content-Length']), } else s = this.setval(t, e)
this.isSurge() || this.isLoon() return s
? (this.isSurge() && }
this.isNeedRewrite &&
((t.headers = t.headers || {}), getval(t) {
Object.assign(t.headers, { 'X-Surge-Skip-Scripting': !1 })), return this.isSurge() || this.isLoon()
$httpClient.get(t, (t, s, i) => { ? $persistentStore.read(t)
!t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i) : this.isQuanX()
})) ? $prefs.valueForKey(t)
: this.isQuanX() : this.isNode()
? (this.isNeedRewrite && ? ((this.data = this.loaddata()), this.data[t])
((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), : (this.data && this.data[t]) || null
$task.fetch(t).then( }
(t) => {
const { statusCode: s, statusCode: i, headers: r, body: o } = t setval(t, e) {
e(null, { status: s, statusCode: i, headers: r, body: o }, o) return this.isSurge() || this.isLoon()
}, ? $persistentStore.write(t, e)
(t) => e(t) : this.isQuanX()
)) ? $prefs.setValueForKey(t, e)
: this.isNode() && : this.isNode()
(this.initGotEnv(t), ? ((this.data = this.loaddata()),
this.got(t) (this.data[e] = t),
.on('redirect', (t, e) => { this.writedata(),
try { !0)
if (t.headers['set-cookie']) { : (this.data && this.data[e]) || null
const s = t.headers['set-cookie'] }
.map(this.cktough.Cookie.parse)
.toString() initGotEnv(t) {
s && this.ckjar.setCookieSync(s, null), ;(this.got = this.got ? this.got : require('got')),
(e.cookieJar = this.ckjar) (this.cktough = this.cktough ? this.cktough : require('tough-cookie')),
} (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()),
} catch (t) { t &&
this.logErr(t) ((t.headers = t.headers ? t.headers : {}),
} void 0 === t.headers.Cookie &&
}) void 0 === t.cookieJar &&
.then( (t.cookieJar = this.ckjar))
(t) => { }
const {
statusCode: s, get(t, e = () => {}) {
statusCode: i, canRequest(t.url)
headers: r,
body: o, t.headers &&
} = t (delete t.headers['Content-Type'], delete t.headers['Content-Length']),
e(null, { status: s, statusCode: i, headers: r, body: o }, o) this.isSurge() || this.isLoon()
}, ? (this.isSurge() &&
(t) => { this.isNeedRewrite &&
const { message: s, response: i } = t ((t.headers = t.headers || {}),
e(s, i, i && i.body) Object.assign(t.headers, { 'X-Surge-Skip-Scripting': !1 })),
} $httpClient.get(t, (t, s, i) => {
))
}
post(t, e = () => {}) {
canRequest(t.url)
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) !t && s && ((s.body = i), (s.statusCode = s.status)), e(t, s, i)
}) }))
else if (this.isQuanX()) : this.isQuanX()
(t.method = 'POST'), ? (this.isNeedRewrite &&
this.isNeedRewrite &&
((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })),
$task.fetch(t).then( $task.fetch(t).then(
(t) => { (t) => {
@@ -725,116 +662,178 @@ const canRequest = (url) => {
e(null, { status: s, statusCode: i, headers: r, body: o }, o) e(null, { status: s, statusCode: i, headers: r, body: o }, o)
}, },
(t) => e(t) (t) => e(t)
) ))
else if (this.isNode()) { : this.isNode() &&
this.initGotEnv(t) (this.initGotEnv(t),
const { url: s, ...i } = t this.got(t)
this.got.post(s, i).then( .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 = () => {}) {
canRequest(t.url)
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) => { (t) => {
const { statusCode: s, statusCode: i, headers: r, body: o } = t const { statusCode: s, statusCode: i, headers: r, body: o } = t
e(null, { status: s, statusCode: i, headers: r, body: o }, o) e(null, { status: s, statusCode: i, headers: r, body: o }, o)
}, },
(t) => { (t) => e(t)
const { message: s, response: i } = t
e(s, i, i && i.body)
}
) )
} 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() time(t, e = null) {
let i = { const s = e ? new Date(e) : new Date()
'M+': s.getMonth() + 1, let i = {
'd+': s.getDate(), 'M+': s.getMonth() + 1,
'H+': s.getHours(), 'd+': s.getDate(),
'm+': s.getMinutes(), 'H+': s.getHours(),
's+': s.getSeconds(), 'm+': s.getMinutes(),
'q+': Math.floor((s.getMonth() + 3) / 3), 's+': s.getSeconds(),
S: s.getMilliseconds(), 'q+': Math.floor((s.getMonth() + 3) / 3),
} S: s.getMilliseconds(),
;/(y+)/.test(t) && }
;/(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( (t = t.replace(
RegExp.$1, RegExp.$1,
(s.getFullYear() + '').substr(4 - RegExp.$1.length) 1 == RegExp.$1.length
? i[e]
: ('00' + i[e]).substr(('' + i[e]).length)
)) ))
for (let e in i) return t
new RegExp('(' + e + ')').test(t) && }
(t = t.replace(
RegExp.$1, msg(e = t, s = '', i = '', r) {
1 == RegExp.$1.length const o = (t) => {
? i[e] if (!t) return t
: ('00' + i[e]).substr(('' + i[e]).length) if ('string' == typeof t)
)) return this.isLoon()
return t ? t
} : this.isQuanX()
? { 'open-url': t }
msg(e = t, s = '', i = '', r) { : this.isSurge()
const o = (t) => { ? { url: t }
if (!t) return t : void 0
if ('string' == typeof t) if ('object' == typeof t) {
return this.isLoon() if (this.isLoon()) {
? t let e = t.openUrl || t.url || t['open-url'],
: this.isQuanX() s = t.mediaUrl || t['media-url']
? { 'open-url': t } return { openUrl: e, mediaUrl: s }
: this.isSurge() }
? { url: t } if (this.isQuanX()) {
: void 0 let e = t['open-url'] || t.url || t.openUrl,
if ('object' == typeof t) { s = t['media-url'] || t.mediaUrl
if (this.isLoon()) { return { 'open-url': e, 'media-url': s }
let e = t.openUrl || t.url || t['open-url'], }
s = t.mediaUrl || t['media-url'] if (this.isSurge()) {
return { openUrl: e, mediaUrl: s } let e = t.url || t.openUrl || t['open-url']
} return { url: e }
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))
}
} }
if (
log(...t) { (this.isMute ||
t.length > 0 && (this.logs = [...this.logs, ...t]), (this.isSurge() || this.isLoon()
console.log(t.join(this.logSeparator)) ? $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))
} }
}
logErr(t, e) {
const s = !this.isSurge() && !this.isQuanX() && !this.isLoon() log(...t) {
s t.length > 0 && (this.logs = [...this.logs, ...t]),
? this.log('', `❗️${this.name}, 错误!`, t.stack) console.log(t.join(this.logSeparator))
: this.log('', `❗️${this.name}, 错误!`, t) }
}
logErr(t, e) {
wait(t) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon()
return new Promise((e) => setTimeout(e, t)) s
} ? this.log('', `❗️${this.name}, 错误!`, t.stack)
: this.log('', `❗️${this.name}, 错误!`, t)
done(t = {}) { }
const e = new Date().getTime(),
s = (e - this.startTime) / 1e3 wait(t) {
this.log('', `🔔${this.name}, 结束! 🕛 ${s}`), return new Promise((e) => setTimeout(e, t))
this.log(), }
(this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
} done(t = {}) {
})(t, e) 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)
}