kitten-cloud-function
Version:
用于编程猫源码云功能(云变量、云列表等)的客户端工具
323 lines (322 loc) • 13.1 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CodemaoLocalStorage = exports.CoCoCodemaoEnvironmentServerWebSocket = exports.isCodemaoWindow = exports.isBrowser = exports.isNode = void 0;
exports.getAuthorization = getAuthorization;
exports.getCodemaoIFrameElement = getCodemaoIFrameElement;
exports.getCodemaoWindow = getCodemaoWindow;
exports.CoCoCodemaoEnvironmentServerAxios = CoCoCodemaoEnvironmentServerAxios;
exports.CodemaoAxios = CodemaoAxios;
exports.CodemaoWebSocket = CodemaoWebSocket;
exports.isNode = typeof global == "object";
exports.isBrowser = typeof window == "object";
exports.isCodemaoWindow = exports.isBrowser && location.hostname.endsWith("codemao.cn");
const dirs = exports.isNode ? require("appdirsjs").default({ appName: "SLIGHTNING/Codemao-Community" }) : null;
async function getAuthorization() {
if (dirs == null) {
throw new Error("当前环境不支持该方法");
}
try {
return String(await (await Promise.resolve().then(() => __importStar(require("fs")))).promises.readFile((await Promise.resolve().then(() => __importStar(require("path")))).resolve(dirs.config, "authorization.txt")));
}
catch (error) {
if (error instanceof Error && "code" in error && error.code == "ENOENT") {
return null;
}
else {
throw error;
}
}
}
let codemaoIFrameElement = null;
let codemaoWindow = null;
function getCodemaoIFrameElement() {
return codemaoIFrameElement;
}
function getCodemaoWindow() {
if (codemaoWindow != null) {
return codemaoWindow;
}
return codemaoWindow = new Promise((resolve, reject) => {
function startListen(codemaoWindow) {
if (codemaoWindow == null) {
reject(new Error("编程猫环境服务连接失败:窗口为空"));
return;
}
function listener(event) {
const { data } = event;
if (data == null || typeof data != "object") {
return;
}
if (/^https?:\/\/coco\.codemao\.cn$/.test(event.origin) &&
data.type == "COCO_CODEMAO_ENVIRONMENT_SERVER_INIT") {
window.removeEventListener("message", listener);
resolve(codemaoWindow);
}
}
window.addEventListener("message", listener);
codemaoWindow.addEventListener("beforeunload", () => {
codemaoIFrameElement = null;
codemaoWindow = null;
reject(new Error("编程猫环境服务连接失败:窗口已被关闭"));
});
window.addEventListener("beforeunload", () => {
codemaoWindow === null || codemaoWindow === void 0 ? void 0 : codemaoWindow.close();
codemaoIFrameElement = null;
codemaoWindow = null;
});
}
if (location.protocol == "file:") {
codemaoIFrameElement = document.createElement("iframe");
codemaoIFrameElement.src = "https://coco.codemao.cn/editor/player/255051613?channel=h5";
codemaoIFrameElement.style.display = "none";
document.body.appendChild(codemaoIFrameElement);
startListen(codemaoIFrameElement.contentWindow);
}
else {
const buttonElement = document.createElement("div");
buttonElement.innerText = "点击打开编程猫环境服务\n打开后请不要关闭编程猫环境服务页面";
buttonElement.style.width = "100%";
buttonElement.style.height = "100%";
buttonElement.style.fontSize = "2em";
buttonElement.style.position = "fixed";
buttonElement.style.left = "0px";
buttonElement.style.top = "0px";
buttonElement.style.right = "0px";
buttonElement.style.bottom = "0px";
buttonElement.style.backgroundColor = "white";
buttonElement.style.cursor = "pointer";
buttonElement.style.zIndex = "10000";
buttonElement.addEventListener("click", () => {
startListen(open("https://coco.codemao.cn/editor/player/255051613?channel=h5"));
buttonElement.remove();
});
document.body.appendChild(buttonElement);
}
});
}
const CoCoCodemaoEnvironmentServerAxiosIDSet = new Set();
async function CoCoCodemaoEnvironmentServerAxios(argument) {
let id;
do {
id = Math.floor(Math.random() * 90000000) + 10000000;
} while (CoCoCodemaoEnvironmentServerAxiosIDSet.has(id));
CoCoCodemaoEnvironmentServerAxiosIDSet.add(id);
return new Promise((resolve, reject) => {
function listener(event) {
const { data } = event;
if (data == null || typeof data != "object") {
return;
}
if (data.type == "CODEMAO_ENVIRONMENT_AXIOS_RESULT" && data.id == id) {
CoCoCodemaoEnvironmentServerAxiosIDSet.delete(id);
window.removeEventListener("message", listener);
if (data.success) {
resolve(data.response);
}
else {
reject(data.error);
}
}
}
window.addEventListener("message", listener);
getCodemaoWindow().then((codemaoWindow) => {
codemaoWindow.postMessage({
type: "CODEMAO_ENVIRONMENT_AXIOS",
id,
argument
}, "https://coco.codemao.cn");
}).catch(reject);
});
}
const CoCoCodemaoEnvironmentServerWebSocketIDSet = new Set();
class CoCoCodemaoEnvironmentServerWebSocket {
constructor(url) {
this.url = url;
do {
this.id = Math.floor(Math.random() * 90000000) + 10000000;
} while (CoCoCodemaoEnvironmentServerWebSocketIDSet.has(this.id));
CoCoCodemaoEnvironmentServerWebSocketIDSet.add(this.id);
const listener = (event) => {
var _a;
const { data } = event;
if (data == null || typeof data != "object") {
return;
}
if (data.type == "CODEMAO_ENVIRONMENT_WEB_SOCKET_OPEN" && data.id == this.id) {
this.onopen(data.event);
}
if (data.type == "CODEMAO_ENVIRONMENT_WEB_SOCKET_MESSAGE" && data.id == this.id) {
this.onmessage(data.event);
}
if (data.type == "CODEMAO_ENVIRONMENT_WEB_SOCKET_CLOSE" && data.id == this.id) {
this.onclose(data.event);
CoCoCodemaoEnvironmentServerWebSocketIDSet.delete(this.id);
window.removeEventListener("message", listener);
}
if (data.type == "CODEMAO_ENVIRONMENT_WEB_SOCKET_ERROR" && data.id == this.id) {
this.onerror((_a = data.error) !== null && _a !== void 0 ? _a : data.event);
}
};
window.addEventListener("message", listener);
getCodemaoWindow().then((codemaoWindow) => {
codemaoWindow.postMessage({
type: "CODEMAO_ENVIRONMENT_WEB_SOCKET",
id: this.id,
url
}, "https://coco.codemao.cn");
}).catch(this.onerror);
}
send(data) {
getCodemaoWindow().then((codemaoWindow) => {
codemaoWindow.postMessage({
type: "CODEMAO_ENVIRONMENT_WEB_SOCKET_SEND",
id: this.id,
data
}, "https://coco.codemao.cn");
}).catch(this.onerror);
}
close() {
getCodemaoWindow().then((codemaoWindow) => {
codemaoWindow.postMessage({
type: "CODEMAO_ENVIRONMENT_WEB_SOCKET_CLOSE",
id: this.id
}, "https://coco.codemao.cn");
}).catch(this.onerror);
}
onopen(__event) { }
onmessage(__event) { }
onclose(__event) { }
onerror(__event) { }
}
exports.CoCoCodemaoEnvironmentServerWebSocket = CoCoCodemaoEnvironmentServerWebSocket;
exports.CodemaoLocalStorage = (() => {
if (exports.isNode) {
return new (class CodemaoLocalStorage {
constructor() {
this.filePath = require("path").resolve(dirs.config, "local-storage.json");
try {
this.store = JSON.parse(String(require("fs").readFileSync(this.filePath)));
}
catch (error) {
if (error instanceof Error && "code" in error && error.code == "ENOENT") {
this.store = {};
}
else {
throw error;
}
}
}
save() {
(async () => {
(await Promise.resolve().then(() => __importStar(require("fs")))).promises.writeFile(this.filePath, JSON.stringify(this.store));
})();
}
get length() {
return Object.keys(this.store).length;
}
clear() {
this.store = {};
this.save();
}
getItem(key) {
var _a;
return (_a = this.store[key]) !== null && _a !== void 0 ? _a : null;
}
key(index) {
var _a;
return (_a = Object.values(this.store)[index]) !== null && _a !== void 0 ? _a : null;
}
removeItem(key) {
delete this.store[key];
this.save();
}
setItem(key, value) {
this.store[key] = value;
this.save();
}
})();
}
else if (exports.isBrowser) {
return localStorage;
}
else {
throw new Error("未知的运行平台");
}
})();
async function CodemaoAxios(argument) {
var _a, _b;
var _c;
const axios = await Promise.resolve().then(() => __importStar(require("axios")));
const axiosDefault = exports.isNode || exports.isCodemaoWindow ? axios.default : CoCoCodemaoEnvironmentServerAxios;
if (exports.isNode && argument.withCredentials) {
const authorization = await getAuthorization();
if (authorization != null) {
(_a = argument.headers) !== null && _a !== void 0 ? _a : (argument.headers = {});
(_b = (_c = argument.headers)["Cookie"]) !== null && _b !== void 0 ? _b : (_c["Cookie"] = "");
argument.headers["Cookie"] += `Authorization=${authorization};`;
}
}
const response = await axiosDefault(argument);
let { data } = response;
if (data != null && typeof data == "object" &&
"status" in data && typeof data.status == "number" &&
"text" in data && typeof data.text == "string") {
data = JSON.parse(data.text);
}
if (data != null && typeof data == "object" &&
"code" in data && typeof data.code == "number" &&
"msg" in data && typeof data.msg == "string" &&
"data" in data) {
if (data.code != 200) {
throw new axios.AxiosError(data.msg, data.code.toString(), response.config, response.request, response);
}
return data.data;
}
return data;
}
async function CodemaoWebSocket(url) {
if (exports.isNode) {
const WebSocket = (await Promise.resolve().then(() => __importStar(require("websocket")))).w3cwebsocket;
const authorization = await getAuthorization();
if (authorization == null) {
return new WebSocket(url);
}
else {
return new WebSocket(url, undefined, undefined, {
Cookie: `Authorization=${authorization};`
});
}
}
else if (exports.isCodemaoWindow) {
return new WebSocket(url);
}
else if (exports.isBrowser) {
return new CoCoCodemaoEnvironmentServerWebSocket(url);
}
else {
throw new Error("未知的运行平台");
}
}
;