UNPKG

kitten-cloud-function

Version:

用于编程猫源码云功能(云变量、云列表等)的客户端工具

323 lines (322 loc) 13.1 kB
"use strict"; 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("未知的运行平台"); } }