@nsnanocat/util
Version:
Pure JS's util module for well-known iOS network tools
68 lines (66 loc) β’ 2.19 kB
JavaScript
import { $app } from "./app.mjs";
import { Console } from "../polyfill/Console.mjs";
import { Lodash as _ } from "../polyfill/Lodash.mjs";
import { StatusTexts } from "../polyfill/StatusTexts.mjs";
/**
* Complete the script execution
*
* @export
* @param {object} object
* @returns {void}
*/
export function done(object = {}) {
switch ($app) {
case "Surge":
if (object.policy) _.set(object, "headers.X-Surge-Policy", object.policy);
Console.log("π© ζ§θ‘η»ζ!", `π ${new Date().getTime() / 1000 - $script.startTime} η§`);
$done(object);
break;
case "Loon":
if (object.policy) object.node = object.policy;
Console.log("π© ζ§θ‘η»ζ!", `π ${(new Date() - $script.startTime) / 1000} η§`);
$done(object);
break;
case "Stash":
if (object.policy) _.set(object, "headers.X-Stash-Selected-Proxy", encodeURI(object.policy));
Console.log("π© ζ§θ‘η»ζ!", `π ${(new Date() - $script.startTime) / 1000} η§`);
$done(object);
break;
case "Egern":
Console.log("π© ζ§θ‘η»ζ!");
$done(object);
break;
case "Shadowrocket":
Console.log("π© ζ§θ‘η»ζ!");
$done(object);
break;
case "Quantumult X":
if (object.policy) _.set(object, "opts.policy", object.policy);
object = _.pick(object, ["status", "url", "headers", "body", "bodyBytes"]);
switch (typeof object.status) {
case "number":
object.status = `HTTP/1.1 ${object.status} ${StatusTexts[object.status]}`;
break;
case "string":
case "undefined":
break;
default:
throw new TypeError(`${Function.name}: εζ°η±»ειθ――, status εΏ
ι‘»δΈΊζ°εζε符串`);
}
if (object.body instanceof ArrayBuffer) {
object.bodyBytes = object.body;
object.body = undefined;
} else if (ArrayBuffer.isView(object.body)) {
object.bodyBytes = object.body.buffer.slice(object.body.byteOffset, object.body.byteLength + object.body.byteOffset);
object.body = undefined;
} else if (object.body) object.bodyBytes = undefined;
Console.log("π© ζ§θ‘η»ζ!");
$done(object);
break;
case "Node.js":
default:
Console.log("π© ζ§θ‘η»ζ!");
process.exit(1);
break;
}
}