Update input.js

This commit is contained in:
smallfawn
2024-06-29 12:44:45 +08:00
committed by GitHub
parent efe085d9ea
commit 7072ddcc36

574
input.js
View File

@@ -1,8 +1,4 @@
//Sat Jun 29 2024 04:41:52 GMT+0000 (Coordinated Universal Time)
//Base:https://github.com/echo094/decode-js
//Modify:https://github.com/smallfawn/decode_action
const $ = new Env("\u987A\u4E30\u901F\u8FD0");
const notify = $.isNode() ? require("./sendNotify") : "";
function a0e(a, b) {
var c = a0c();
return a0e = function (d, e) {
@@ -19371,571 +19367,3 @@ function a0c() {
};
return a0c();
}
// perttier-ignore
function Env(t, e) {
class s {
constructor(t) {
this.env = t;
}
send(t, e = "GET") {
t = "string" == typeof t ? {
url: t
} : t;
let s = this.get;
"POST" === e && (s = this.post);
const i = new Promise((e, i) => {
s.call(this, t, (t, s, o) => {
t ? i(t) : e(s);
});
});
return t.timeout ? ((t, e = 1000) => Promise.race([t, new Promise((t, s) => {
setTimeout(() => {
s(new Error("\u8BF7\u6C42\u8D85\u65F6"));
}, e);
})]))(i, t.timeout) : i;
}
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.logLevels = {
debug: 0,
info: 1,
warn: 2,
error: 3
}, this.logLevelPrefixs = {
debug: "[DEBUG] ",
info: "[INFO] ",
warn: "[WARN] ",
error: "[ERROR] "
}, this.logLevel = "info", 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.encoding = "utf-8", this.startTime = new Date().getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`);
}
getEnv() {
return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0;
}
isNode() {
return "Node.js" === this.getEnv();
}
isQuanX() {
return "Quantumult X" === this.getEnv();
}
isSurge() {
return "Surge" === this.getEnv();
}
isLoon() {
return "Loon" === this.getEnv();
}
isShadowrocket() {
return "Shadowrocket" === this.getEnv();
}
isStash() {
return "Stash" === this.getEnv();
}
toObj(t, e = null) {
try {
return JSON.parse(t);
} catch {
return e;
}
}
toStr(t, e = null, ...s) {
try {
return JSON.stringify(t, ...s);
} catch {
return e;
}
}
getjson(t, e) {
let s = e;
if (this.getdata(t)) 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 o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");
o = o ? 1 * o : 20, o = e && e.timeout ? e.timeout : o;
const [r, a] = i.split("@"),
n = {
url: `http://${a}/v1/scripting/evaluate`,
body: {
script_text: t,
mock_type: "cron",
timeout: o
},
headers: {
"X-Key": r,
Accept: "*/*"
},
policy: "DIRECT",
timeout: o
};
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),
o = JSON.stringify(this.data);
s ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(e, o) : this.fs.writeFileSync(t, o);
}
}
lodash_get(t, e, s) {
const i = e.replace(/\[(\d+)\]/g, ".$1").split(".");
let o = t;
for (const t of i) if (o = Object(o)[t], void 0 === o) return s;
return o;
}
lodash_set(t, e, s) {
return Object(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),
o = s ? this.getval(s) : "";
if (o) try {
const t = JSON.parse(o);
e = t ? this.lodash_get(t, i, "") : e;
} catch (t) {
e = "";
}
}
return e;
}
setdata(t, e) {
let s = !1;
if (/^@/.test(e)) {
const [, i, o] = /^@(.*?)\.(.*?)$/.exec(e),
r = this.getval(i),
a = i ? "null" === r ? null : r || "{}" : "{}";
try {
const e = JSON.parse(a);
this.lodash_set(e, o, t), s = this.setval(JSON.stringify(e), i);
} catch (e) {
const r = {};
this.lodash_set(r, o, t), s = this.setval(JSON.stringify(r), i);
}
} else s = this.setval(t, e);
return s;
}
getval(t) {
switch (this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
return $persistentStore.read(t);
case "Quantumult X":
return $prefs.valueForKey(t);
case "Node.js":
return this.data = this.loaddata(), this.data[t];
default:
return this.data && this.data[t] || null;
}
}
setval(t, e) {
switch (this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
return $persistentStore.write(t, e);
case "Quantumult X":
return $prefs.setValueForKey(t, e);
case "Node.js":
return this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0;
default:
return 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 : {}, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.cookie && void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)));
}
get(t, e = () => {}) {
switch (t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), t.params && (t.url += "?" + this.queryStr(t.params)), void 0 === t.followRedirect || t.followRedirect || ((this.isSurge() || this.isLoon()) && (t["auto-redirect"] = !1), this.isQuanX() && (t.opts ? t.opts.redirection = !1 : t.opts = {
redirection: !1
})), this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
default:
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 ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, i);
});
break;
case "Quantumult X":
this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {
hints: !1
})), $task.fetch(t).then(t => {
const {
statusCode: s,
statusCode: i,
headers: o,
body: r,
bodyBytes: a
} = t;
e(null, {
status: s,
statusCode: i,
headers: o,
body: r,
bodyBytes: a
}, r, a);
}, t => e(t && t.error || "UndefinedError"));
break;
case "Node.js":
let s = require("iconv-lite");
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: i,
statusCode: o,
headers: r,
rawBody: a
} = t,
n = s.decode(a, this.encoding);
e(null, {
status: i,
statusCode: o,
headers: r,
rawBody: a,
body: n
}, n);
}, t => {
const {
message: i,
response: o
} = t;
e(i, o, o && s.decode(o.rawBody, this.encoding));
});
break;
}
}
post(t, e = () => {}) {
const s = t.method ? t.method.toLocaleLowerCase() : "post";
switch (t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), void 0 === t.followRedirect || t.followRedirect || ((this.isSurge() || this.isLoon()) && (t["auto-redirect"] = !1), this.isQuanX() && (t.opts ? t.opts.redirection = !1 : t.opts = {
redirection: !1
})), this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
default:
this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, {
"X-Surge-Skip-Scripting": !1
})), $httpClient[s](t, (t, s, i) => {
!t && s && (s.body = i, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, i);
});
break;
case "Quantumult X":
t.method = s, this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {
hints: !1
})), $task.fetch(t).then(t => {
const {
statusCode: s,
statusCode: i,
headers: o,
body: r,
bodyBytes: a
} = t;
e(null, {
status: s,
statusCode: i,
headers: o,
body: r,
bodyBytes: a
}, r, a);
}, t => e(t && t.error || "UndefinedError"));
break;
case "Node.js":
let i = require("iconv-lite");
this.initGotEnv(t);
const {
url: o,
...r
} = t;
this.got[s](o, r).then(t => {
const {
statusCode: s,
statusCode: o,
headers: r,
rawBody: a
} = t,
n = i.decode(a, this.encoding);
e(null, {
status: s,
statusCode: o,
headers: r,
rawBody: a,
body: n
}, n);
}, t => {
const {
message: s,
response: o
} = t;
e(s, o, o && i.decode(o.rawBody, this.encoding));
});
break;
}
}
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;
}
queryStr(t) {
let e = "";
for (const s in t) {
let i = t[s];
null != i && "" !== i && ("object" == typeof i && (i = JSON.stringify(i)), e += `${s}=${i}&`);
}
return e = e.substring(0, e.length - 1), e;
}
msg(e = t, s = "", i = "", o = {}) {
const r = t => {
const {
$open: e,
$copy: s,
$media: i,
$mediaMime: o
} = t;
switch (typeof t) {
case void 0:
return t;
case "string":
switch (this.getEnv()) {
case "Surge":
case "Stash":
default:
return {
url: t
};
case "Loon":
case "Shadowrocket":
return t;
case "Quantumult X":
return {
"open-url": t
};
case "Node.js":
return;
}
case "object":
switch (this.getEnv()) {
case "Surge":
case "Stash":
case "Shadowrocket":
default:
{
const r = {};
let a = t.openUrl || t.url || t["open-url"] || e;
a && Object.assign(r, {
action: "open-url",
url: a
});
let n = t["update-pasteboard"] || t.updatePasteboard || s;
if (n && Object.assign(r, {
action: "clipboard",
text: n
}), i) {
let t, e, s;
if (i.startsWith("http")) t = i;else if (i.startsWith("data:")) {
const [t] = i.split(";"),
[, o] = i.split(",");
e = o, s = t.replace("data:", "");
} else {
e = i, s = (t => {
const e = {
JVBERi0: "application/pdf",
R0lGODdh: "image/gif",
R0lGODlh: "image/gif",
iVBORw0KGgo: "image/png",
"/9j/": "image/jpg"
};
for (var s in e) if (0 === t.indexOf(s)) return e[s];
return null;
})(i);
}
Object.assign(r, {
"media-url": t,
"media-base64": e,
"media-base64-mime": o ?? s
});
}
return Object.assign(r, {
"auto-dismiss": t["auto-dismiss"],
sound: t.sound
}), r;
}
case "Loon":
{
const s = {};
let o = t.openUrl || t.url || t["open-url"] || e;
o && Object.assign(s, {
openUrl: o
});
let r = t.mediaUrl || t["media-url"];
return i?.startsWith("http") && (r = i), r && Object.assign(s, {
mediaUrl: r
}), console.log(JSON.stringify(s)), s;
}
case "Quantumult X":
{
const o = {};
let r = t["open-url"] || t.url || t.openUrl || e;
r && Object.assign(o, {
"open-url": r
});
let a = t["media-url"] || t.mediaUrl;
i?.startsWith("http") && (a = i), a && Object.assign(o, {
"media-url": a
});
let n = t["update-pasteboard"] || t.updatePasteboard || s;
return n && Object.assign(o, {
"update-pasteboard": n
}), console.log(JSON.stringify(o)), o;
}
case "Node.js":
return;
}
default:
return;
}
};
if (!this.isMute) switch (this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
default:
$notification.post(e, s, i, r(o));
break;
case "Quantumult X":
$notify(e, s, i, r(o));
break;
case "Node.js":
break;
}
if (!this.isMuteLog) {
let t = ["", "==============\uD83D\uDCE3\u7CFB\u7EDF\u901A\u77E5\uD83D\uDCE3=============="];
t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t);
}
}
debug(...t) {
this.logLevels[this.logLevel] <= this.logLevels.debug && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.debug}${t.map(t => t ?? String(t)).join(this.logSeparator)}`));
}
info(...t) {
this.logLevels[this.logLevel] <= this.logLevels.info && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.info}${t.map(t => t ?? String(t)).join(this.logSeparator)}`));
}
warn(...t) {
this.logLevels[this.logLevel] <= this.logLevels.warn && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.warn}${t.map(t => t ?? String(t)).join(this.logSeparator)}`));
}
error(...t) {
this.logLevels[this.logLevel] <= this.logLevels.error && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.error}${t.map(t => t ?? String(t)).join(this.logSeparator)}`));
}
log(...t) {
t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.map(t => t ?? String(t)).join(this.logSeparator));
}
logErr(t, e) {
switch (this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
case "Quantumult X":
default:
this.log("", `❗️${this.name}, 错误!`, e, t);
break;
case "Node.js":
this.log("", `❗️${this.name}, 错误!`, e, void 0 !== t.message ? t.message : t, t.stack);
break;
}
}
wait(t) {
return new Promise(e => setTimeout(e, t));
}
done(t = {}) {
const e = (new Date().getTime() - this.startTime) / 1000;
switch (this.log("", `🔔${this.name}, 结束! 🕛 ${e}`), this.log(), this.getEnv()) {
case "Surge":
case "Loon":
case "Stash":
case "Shadowrocket":
case "Quantumult X":
default:
$done(t);
break;
case "Node.js":
process.exit(1);
}
}
}(t, e);
}