UNPKG

@gaoding/editor-sdk

Version:

稿定编辑器对外 SDK

1,636 lines 80.3 kB
var MessageType; (function(MessageType2) { MessageType2["Call"] = "call"; MessageType2["Reply"] = "reply"; MessageType2["Syn"] = "syn"; MessageType2["SynAck"] = "synAck"; MessageType2["Ack"] = "ack"; })(MessageType || (MessageType = {})); var Resolution; (function(Resolution2) { Resolution2["Fulfilled"] = "fulfilled"; Resolution2["Rejected"] = "rejected"; })(Resolution || (Resolution = {})); var ErrorCode; (function(ErrorCode2) { ErrorCode2["ConnectionDestroyed"] = "ConnectionDestroyed"; ErrorCode2["ConnectionTimeout"] = "ConnectionTimeout"; ErrorCode2["NotInIframe"] = "NotInIframe"; ErrorCode2["NoIframeSrc"] = "NoIframeSrc"; })(ErrorCode || (ErrorCode = {})); var NativeErrorName; (function(NativeErrorName2) { NativeErrorName2["DataCloneError"] = "DataCloneError"; })(NativeErrorName || (NativeErrorName = {})); var NativeEventType; (function(NativeEventType2) { NativeEventType2["Message"] = "message"; })(NativeEventType || (NativeEventType = {})); var createDestructor = () => { const callbacks = []; let destroyed = false; return { destroy(error) { destroyed = true; callbacks.forEach((callback) => { callback(error); }); }, onDestroy(callback) { destroyed ? callback() : callbacks.push(callback); } }; }; var createLogger = (debug) => { return (...args) => { if (debug) { console.log("[Penpal]", ...args); } }; }; const DEFAULT_PORT_BY_PROTOCOL = { "http:": "80", "https:": "443" }; const URL_REGEX = /^(https?:)?\/\/([^/:]+)?(:(\d+))?/; const opaqueOriginSchemes = ["file:", "data:"]; var getOriginFromSrc = (src) => { if (src && opaqueOriginSchemes.find((scheme) => src.startsWith(scheme))) { return "null"; } const location = document.location; const regexResult = URL_REGEX.exec(src); let protocol; let hostname; let port; if (regexResult) { protocol = regexResult[1] ? regexResult[1] : location.protocol; hostname = regexResult[2]; port = regexResult[4]; } else { protocol = location.protocol; hostname = location.hostname; port = location.port; } const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : ""; return `${protocol}//${hostname}${portSuffix}`; }; const serializeError = ({ name: name2, message, stack }) => ({ name: name2, message, stack }); const deserializeError = (obj) => { const deserializedError = new Error(); Object.keys(obj).forEach((key) => deserializedError[key] = obj[key]); return deserializedError; }; var connectCallReceiver = (info, methods, log) => { const { localName, local, remote, originForSending, originForReceiving } = info; let destroyed = false; const handleMessageEvent = (event) => { if (event.source !== remote || event.data.penpal !== MessageType.Call) { return; } if (event.origin !== originForReceiving) { log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`); return; } const callMessage = event.data; const { methodName, args, id: id2 } = callMessage; log(`${localName}: Received ${methodName}() call`); const createPromiseHandler = (resolution) => { return (returnValue) => { log(`${localName}: Sending ${methodName}() reply`); if (destroyed) { log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`); return; } const message = { penpal: MessageType.Reply, id: id2, resolution, returnValue }; if (resolution === Resolution.Rejected && returnValue instanceof Error) { message.returnValue = serializeError(returnValue); message.returnValueIsError = true; } try { remote.postMessage(message, originForSending); } catch (err) { if (err.name === NativeErrorName.DataCloneError) { const errorReplyMessage = { penpal: MessageType.Reply, id: id2, resolution: Resolution.Rejected, returnValue: serializeError(err), returnValueIsError: true }; remote.postMessage(errorReplyMessage, originForSending); } throw err; } }; }; new Promise((resolve) => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected)); }; local.addEventListener(NativeEventType.Message, handleMessageEvent); return () => { destroyed = true; local.removeEventListener(NativeEventType.Message, handleMessageEvent); }; }; let id = 0; var generateId = () => ++id; var connectCallSender = (callSender, info, methodNames, destroyConnection, log) => { const { localName, local, remote, originForSending, originForReceiving } = info; let destroyed = false; log(`${localName}: Connecting call sender`); const createMethodProxy = (methodName) => { return (...args) => { log(`${localName}: Sending ${methodName}() call`); let iframeRemoved; try { if (remote.closed) { iframeRemoved = true; } } catch (e) { iframeRemoved = true; } if (iframeRemoved) { destroyConnection(); } if (destroyed) { const error = new Error(`Unable to send ${methodName}() call due to destroyed connection`); error.code = ErrorCode.ConnectionDestroyed; throw error; } return new Promise((resolve, reject) => { const id2 = generateId(); const handleMessageEvent = (event) => { if (event.source !== remote || event.data.penpal !== MessageType.Reply || event.data.id !== id2) { return; } if (event.origin !== originForReceiving) { log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`); return; } const replyMessage = event.data; log(`${localName}: Received ${methodName}() reply`); local.removeEventListener(NativeEventType.Message, handleMessageEvent); let returnValue = replyMessage.returnValue; if (replyMessage.returnValueIsError) { returnValue = deserializeError(returnValue); } (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue); }; local.addEventListener(NativeEventType.Message, handleMessageEvent); const callMessage = { penpal: MessageType.Call, id: id2, methodName, args }; remote.postMessage(callMessage, originForSending); }); }; }; methodNames.reduce((api, methodName) => { api[methodName] = createMethodProxy(methodName); return api; }, callSender); return () => { destroyed = true; }; }; var handleAckMessageFactory = (methods, childOrigin, originForSending, destructor, log) => { const { destroy, onDestroy } = destructor; let destroyCallReceiver; let receiverMethodNames; const callSender = {}; return (event) => { if (event.origin !== childOrigin) { log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`); return; } log("Parent: Handshake - Received ACK"); const info = { localName: "Parent", local: window, remote: event.source, originForSending, originForReceiving: childOrigin }; if (destroyCallReceiver) { destroyCallReceiver(); } destroyCallReceiver = connectCallReceiver(info, methods, log); onDestroy(destroyCallReceiver); if (receiverMethodNames) { receiverMethodNames.forEach((receiverMethodName) => { delete callSender[receiverMethodName]; }); } receiverMethodNames = event.data.methodNames; const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log); onDestroy(destroyCallSender); return callSender; }; }; var handleSynMessageFactory = (log, methods, childOrigin, originForSending) => { return (event) => { if (event.origin !== childOrigin) { log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`); return; } log("Parent: Handshake - Received SYN, responding with SYN-ACK"); const synAckMessage = { penpal: MessageType.SynAck, methodNames: Object.keys(methods) }; event.source.postMessage(synAckMessage, originForSending); }; }; const CHECK_IFRAME_IN_DOC_INTERVAL = 6e4; var monitorIframeRemoval = (iframe, destructor) => { const { destroy, onDestroy } = destructor; const checkIframeInDocIntervalId = setInterval(() => { if (!iframe.isConnected) { clearInterval(checkIframeInDocIntervalId); destroy(); } }, CHECK_IFRAME_IN_DOC_INTERVAL); onDestroy(() => { clearInterval(checkIframeInDocIntervalId); }); }; var startConnectionTimeout = (timeout, callback) => { let timeoutId; if (timeout !== void 0) { timeoutId = window.setTimeout(() => { const error = new Error(`Connection timed out after ${timeout}ms`); error.code = ErrorCode.ConnectionTimeout; callback(error); }, timeout); } return () => { clearTimeout(timeoutId); }; }; var validateIframeHasSrcOrSrcDoc = (iframe) => { if (!iframe.src && !iframe.srcdoc) { const error = new Error("Iframe must have src or srcdoc property defined."); error.code = ErrorCode.NoIframeSrc; throw error; } }; var connectToChild = (options) => { let { iframe, methods = {}, childOrigin, timeout, debug = false } = options; const log = createLogger(debug); const destructor = createDestructor(); const { onDestroy, destroy } = destructor; if (!childOrigin) { validateIframeHasSrcOrSrcDoc(iframe); childOrigin = getOriginFromSrc(iframe.src); } const originForSending = childOrigin === "null" ? "*" : childOrigin; const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending); const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log); const promise = new Promise((resolve, reject) => { const stopConnectionTimeout = startConnectionTimeout(timeout, destroy); const handleMessage = (event) => { if (event.source !== iframe.contentWindow || !event.data) { return; } if (event.data.penpal === MessageType.Syn) { handleSynMessage(event); return; } if (event.data.penpal === MessageType.Ack) { const callSender = handleAckMessage(event); if (callSender) { stopConnectionTimeout(); resolve(callSender); } return; } }; window.addEventListener(NativeEventType.Message, handleMessage); log("Parent: Awaiting handshake"); monitorIframeRemoval(iframe, destructor); onDestroy((error) => { window.removeEventListener(NativeEventType.Message, handleMessage); if (!error) { error = new Error("Connection destroyed"); error.code = ErrorCode.ConnectionDestroyed; } reject(error); }); }); return { promise, destroy() { destroy(); } }; }; const version$1 = "2.2.6"; const env = { TEMPLATE_EDITOR_URL: "https://open.gaoding.com/design", MOBILE_TEMPLATE_EDITOR_URL: "https://open.gaoding.com/h5/design", KOUTU_EDITOR_URL: "https://open.gaoding.com/clip", IMAGE_EDITOR_URL: "https://open.gaoding.com/design/image", OPEN_PLATFORM_ORIGIN: "https://open.gaoding.com", get VERSION() { return version$1; } }; var __async$7 = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; function createIframeModal(frame, onClose) { const wrapper = document.createElement("div"); wrapper.style.cssText = ` position: relative; width: calc(100vw - 100px); min-width: 1280px; height: calc(100vh - 80px); min-height: 604px; margin: 50px auto; background: rgb(255, 255, 255); display: block; `; const btn = document.createElement("div"); btn.style.cssText = ` font-size: 13px; width: 42px; height: 42px; text-align: right; position: absolute; right: -42px; top: 0px; background: no-repeat rgb(0, 0, 0); cursor: pointer; display: flex; align-items: center; justify-content: center; `; const btnIcon = document.createElement("img"); btnIcon.src = "https://st-gdx.dancf.com/gaodingx/34555636/design/20190509-142237-249d.png"; btnIcon.style.cssText = "display: block; width: 24px;"; btn.appendChild(btnIcon); const modal = document.createElement("div"); modal.style.cssText = ` position: fixed; left: 0px; top: 0px; width: 100%; height: 100%; z-index: 1000; `; modal.className = "gaoding-editor-iframe-dialog"; wrapper.appendChild(btn); wrapper.appendChild(frame); modal.appendChild(wrapper); wrapper.appendChild(frame); const mask = document.createElement("div"); mask.style.cssText = ` position: fixed; inset: 0px; z-index: 999; background-color: rgb(0, 0, 0); opacity: 0.5; `; let isOpen = false; let overflowValue = ""; function toggleScrollSwitch() { const dom = document.querySelector(".gaoding-editor-iframe-dialog"); if (!dom) return; if (isOpen) { overflowValue = document.documentElement.style.overflow; document.documentElement.style.overflow = "hidden"; } else { document.documentElement.style.overflow = overflowValue; } } function close() { return __async$7(this, null, function* () { var _a, _b; if (onClose) { const res = yield onClose(); if (res === false) return; } isOpen = false; toggleScrollSwitch(); (_a = mask.parentElement) == null ? void 0 : _a.removeChild(mask); (_b = modal.parentElement) == null ? void 0 : _b.removeChild(modal); }); } function open() { if (isOpen) return; isOpen = true; document.body.appendChild(mask); document.body.appendChild(modal); toggleScrollSwitch(); } btn.addEventListener("click", close); return { open, close }; } function createConnect(options) { const iframe = document.createElement("iframe"); iframe.style.cssText = ` display: block; width: 100%; height: 100%; ${options.css} `; iframe.referrerPolicy = "strict-origin-when-cross-origin"; iframe.className = "gaoding-iframe"; iframe.setAttribute("frameborder", "0"); let child = null; function update(url, query) { return __async$7(this, null, function* () { const q = Object.assign({}, query, { app_id: options.appId, v: env.VERSION }); const uri = `${url}?${Object.entries(q).filter(([_, v]) => v !== void 0).map(([k, v]) => `${k}=${v}`).join("&")}`; if (!query) { iframe.src = url; return; } iframe.src = uri; if (child) { child.destroy(); } child = connectToChild({ iframe, methods: options.methods }); }); } let modal = null; if (!options.container) { modal = createIframeModal(iframe, options.onClose); } function insert() { if (modal) { return modal.open(); } const parent = typeof options.container === "string" ? document.body.querySelector(options.container) : options.container; if (!parent) throw new Error(`\u65E0\u6548\u7684 container ${options.container}`); parent.appendChild(iframe); } function remove() { if (modal == null ? void 0 : modal.close) { return modal.close(); } if (iframe.parentElement) { iframe.parentElement.removeChild(iframe); } } function restetContainer(container) { modal = createIframeModal(iframe, options.onClose); options.container = container; } return { remove, insert, update, iframe, restetContainer, getService() { return __async$7(this, null, function* () { return child.promise; }); } }; } var __defProp$2 = Object.defineProperty; var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField$1 = (obj, key, value) => { __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __async$6 = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; class Event { constructor() { __publicField$1(this, "events"); this.events = {}; } add(name2, fn) { if (!fn) return () => { }; const hooks = this.get(name2); hooks.push(fn); this.events[name2] = hooks; return () => this.off(name2, fn); } on(name2, fn) { return this.add(name2, fn); } once(name2, fn) { const off = this.add(name2, (...args) => { off(); fn(...args); }); return off; } off(name2, fn) { const hooks = this.get(name2); if (hooks) { const index = hooks.findIndex((f) => f === fn); index !== -1 && hooks.splice(index, 1); } } get(name2) { return this.events[name2] || []; } invoke(name2, ...args) { const evnets = [...this.get(name2)]; for (const hook of evnets) { hook(...args); } } emit(name2, ...args) { this.invoke(name2, ...args); } asyncInvoke(name2, ...args) { return __async$6(this, null, function* () { const evnets = [...this.get(name2)]; for (const hook of evnets) { yield hook(...args); } }); } asyncInvokeAll(name2, ...args) { return __async$6(this, null, function* () { yield Promise.all(this.get(name2).map((hook) => hook(...args))); }); } } var __async$5 = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; function copyFile(file) { return __async$5(this, null, function* () { const filename = file instanceof File ? file.name : `${file.type}`; return new File([yield file.arrayBuffer()], filename, { type: file.type }); }); } function assert(condition, message) { if (!condition) { throw new Error(message); } } var __async$4 = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; function createTemplateEditor(config) { const event = new Event(); let canva = null; let load = false; const tempCallbacks = []; function cleanCallBack() { tempCallbacks.forEach((fn) => fn()); tempCallbacks.length = 0; } const iframeManager = createConnect({ appId: config.appId, container: config.container, onClose() { return __async$4(this, null, function* () { if (config.onCloseModal) { const res = yield config.onCloseModal(); if (res === false) return false; } event.emit("close"); }); }, methods: { emit(name2, ...args) { return __async$4(this, null, function* () { event.emit(name2, ...args); }); }, onload() { return __async$4(this, null, function* () { event.emit("load"); }); }, onSelectTemplate(info) { return __async$4(this, null, function* () { event.emit("select.template", info); return false; }); }, onTemplateLoad() { return __async$4(this, null, function* () { canva = yield createCanva(); event.emit("template.load"); }); }, getUseRightToken(info) { return __async$4(this, null, function* () { if (!config.getUseRightCert) return false; const token = yield config.getUseRightCert(info); if (token instanceof Error) { return { message: token.message }; } return token; }); }, getUserCode() { return __async$4(this, null, function* () { if (!config.authorize) return false; try { return yield config.authorize(); } catch (error) { close(); } }); } } }); function createCanva() { return __async$4(this, null, function* () { const servcie = yield iframeManager.getService(); return { addImage(url, options) { return __async$4(this, null, function* () { servcie.addImage(url, options); }); } }; }); } function createDesign(options = {}) { if (options.categoryId) { assert(["number", "string"].includes(typeof options.categoryId), "categoryId \u53C2\u6570\u7C7B\u578B\u6709\u8BEF"); } cleanCallBack(); load = false; const params = { version: config.authorize ? "TE002" : "TE001", buttonText: options.okText || "\u4FDD\u5B58" }; if (options.templateId) { params.id = options.templateId; } else { params.mode = "create"; if (options.size) { params.width = options.size.width; params.height = options.size.height; } } if (options.categoryId) { params.filterId = options.categoryId; } iframeManager.update(env.TEMPLATE_EDITOR_URL, params); event.once("load", () => __async$4(this, null, function* () { load = true; const e = yield iframeManager.getService(); yield e.init({ appId: config.appId, version: config.authorize ? "TE002" : "TE001", fileTypes: options.fileTypes, disableModules: options.disableModules, v: env.VERSION, filterPaidMaterial: options.filterPaidMaterial, categoryId: options.categoryId }); event.emit("editor.load"); })); iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("save", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); } function editDesign(options) { if (options.categories) { assert(Array.isArray(options.categories), "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B"); assert(options.categories.map((c) => +c).filter(Boolean).length === options.categories.length, "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B"); } cleanCallBack(); load = false; iframeManager.update(env.TEMPLATE_EDITOR_URL, { id: options.id, buttonText: options.okText || "\u4FDD\u5B58", mode: "user", version: config.authorize ? "TE002" : "TE001" }); event.once("load", () => __async$4(this, null, function* () { var _a; load = true; const e = yield iframeManager.getService(); yield e.init({ appId: config.appId, version: config.authorize ? "TE002" : "TE001", disableModules: options.disableModules, categoryId: (_a = options.categories) == null ? void 0 : _a.join(","), v: env.VERSION, filterPaidMaterial: options.filterPaidMaterial, fileTypes: options.fileTypes }); event.emit("editor.load"); })); iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("save", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); } function openTemplateList(options) { if (options.categories) { assert(Array.isArray(options.categories), "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B"); assert(options.categories.map((c) => +c).filter(Boolean).length === options.categories.length, "categories \u53C2\u6570\u5FC5\u987B\u662F number \u6570\u7EC4\u7C7B\u578B"); } load = false; cleanCallBack(); iframeManager.update(env.OPEN_PLATFORM_ORIGIN + "/template/search", { app_id: config.appId, version: config.authorize ? "TE002" : "TE001" }); event.once("load", () => __async$4(this, null, function* () { load = true; const e = yield iframeManager.getService(); e.init({ appId: config.appId, v: env.VERSION, version: config.authorize ? "TE002" : "TE001", categories: options.categories }); })); if (options.onSelectTemplate) { tempCallbacks.push(event.add("select.template", options.onSelectTemplate)); } iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("select.template", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); } function close() { event.emit("close"); iframeManager.remove(); } function onSave(fn) { event.add("save", fn); } function onClose(fn) { event.add("close", fn); } function onLoad(fn) { event.add("editor.load", fn); } function onTemplateLoad(fn) { event.add("template.load", fn); } return { get canva() { return canva; }, get isLoad() { return load; }, openTemplateList, close, onSave, onTemplateLoad, onClose, onLoad, editDesign, createDesign }; } var __async$3 = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; function createMobileTemplateEditor(config) { assert(!!config, "createTemplateEditor \u9700\u8981\u4F20\u5165\u53C2\u6570\u624D\u80FD\u4F7F\u7528"); assert(typeof config.authorize === "function", "authorize \u5FC5\u73B0\u662F\u4E2A function"); assert(typeof config.container === "string", "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 container"); assert(typeof config.getUseRightCert === "function", "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570 getUseRightCert"); const event = new Event(); let load = false; const tempCallbacks = []; function cleanCallBack() { tempCallbacks.forEach((fn) => fn()); tempCallbacks.length = 0; } const iframeManager = createConnect({ appId: config.appId, container: config.container, css: "min-height: 100vh;", methods: { emit(name2, ...args) { return __async$3(this, null, function* () { event.emit(name2, ...args); }); }, onload() { return __async$3(this, null, function* () { event.emit("load"); }); }, onSelectTemplate(info) { return __async$3(this, null, function* () { event.emit("select.template", info); return false; }); }, onTemplateLoad() { return __async$3(this, null, function* () { event.emit("template.load"); }); }, getUseRightCert(info) { return __async$3(this, null, function* () { if (!config.getUseRightCert) return false; const token = yield config.getUseRightCert(info); if (token instanceof Error) { return { message: token.message }; } return token; }); }, getUserCode() { return __async$3(this, null, function* () { if (!config.authorize) return false; try { return yield config.authorize(); } catch (error) { close(); } }); } } }); function createDesign(options) { return __async$3(this, null, function* () { cleanCallBack(); load = false; const code = yield config.authorize(); const params = { version: "TE002", user_code: code }; if (options.templateId) { params.id = options.templateId; } iframeManager.update(env.MOBILE_TEMPLATE_EDITOR_URL, params); event.once("load", () => __async$3(this, null, function* () { load = true; const e = yield iframeManager.getService(); yield e.init({ appId: config.appId, version: "TE002" }); event.emit("editor.load"); })); iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("save", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); }); } function editDesign(options) { return __async$3(this, null, function* () { cleanCallBack(); load = false; const code = yield config.authorize(); iframeManager.update(env.MOBILE_TEMPLATE_EDITOR_URL, { id: options.id, mode: "user", user_code: code, version: "TE002" }); event.once("load", () => __async$3(this, null, function* () { load = true; const e = yield iframeManager.getService(); yield e.init({ appId: config.appId, version: "TE002", v: env.VERSION }); event.emit("editor.load"); })); iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("save", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); }); } function openTemplateList(options) { load = false; cleanCallBack(); iframeManager.update(env.OPEN_PLATFORM_ORIGIN + "/mt/templates", { app_id: config.appId, version: "TE002" }); event.once("load", () => __async$3(this, null, function* () { load = true; const e = yield iframeManager.getService(); e.init({ appId: config.appId, v: env.VERSION, version: "TE002" }); })); if (options.onSelectTemplate) { tempCallbacks.push(event.add("select.template", options.onSelectTemplate)); } iframeManager.insert(); return new Promise((resolve) => { tempCallbacks.push(event.once("select.template", (v) => resolve(v))); tempCallbacks.push(event.once("close", () => resolve(false))); }); } function close() { event.emit("close"); iframeManager.remove(); } function onSave(fn) { event.add("save", fn); } function onClose(fn) { event.add("close", fn); } function onLoad(fn) { event.add("editor.load", fn); } function onTemplateLoad(fn) { event.add("template.load", fn); } return { get isLoad() { return load; }, openTemplateList, close, onSave, onTemplateLoad, onClose, onLoad, editDesign, createDesign }; } var axios$2 = { exports: {} }; var bind$2 = function bind(fn, thisArg) { return function wrap() { var args = new Array(arguments.length); for (var i = 0; i < args.length; i++) { args[i] = arguments[i]; } return fn.apply(thisArg, args); }; }; var bind$1 = bind$2; var toString = Object.prototype.toString; function isArray(val) { return toString.call(val) === "[object Array]"; } function isUndefined(val) { return typeof val === "undefined"; } function isBuffer(val) { return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === "function" && val.constructor.isBuffer(val); } function isArrayBuffer(val) { return toString.call(val) === "[object ArrayBuffer]"; } function isFormData(val) { return typeof FormData !== "undefined" && val instanceof FormData; } function isArrayBufferView(val) { var result; if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) { result = ArrayBuffer.isView(val); } else { result = val && val.buffer && val.buffer instanceof ArrayBuffer; } return result; } function isString(val) { return typeof val === "string"; } function isNumber(val) { return typeof val === "number"; } function isObject(val) { return val !== null && typeof val === "object"; } function isPlainObject(val) { if (toString.call(val) !== "[object Object]") { return false; } var prototype = Object.getPrototypeOf(val); return prototype === null || prototype === Object.prototype; } function isDate(val) { return toString.call(val) === "[object Date]"; } function isFile(val) { return toString.call(val) === "[object File]"; } function isBlob(val) { return toString.call(val) === "[object Blob]"; } function isFunction(val) { return toString.call(val) === "[object Function]"; } function isStream(val) { return isObject(val) && isFunction(val.pipe); } function isURLSearchParams(val) { return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams; } function trim(str) { return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ""); } function isStandardBrowserEnv() { if (typeof navigator !== "undefined" && (navigator.product === "ReactNative" || navigator.product === "NativeScript" || navigator.product === "NS")) { return false; } return typeof window !== "undefined" && typeof document !== "undefined"; } function forEach(obj, fn) { if (obj === null || typeof obj === "undefined") { return; } if (typeof obj !== "object") { obj = [obj]; } if (isArray(obj)) { for (var i = 0, l = obj.length; i < l; i++) { fn.call(null, obj[i], i, obj); } } else { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { fn.call(null, obj[key], key, obj); } } } } function merge() { var result = {}; function assignValue(val, key) { if (isPlainObject(result[key]) && isPlainObject(val)) { result[key] = merge(result[key], val); } else if (isPlainObject(val)) { result[key] = merge({}, val); } else if (isArray(val)) { result[key] = val.slice(); } else { result[key] = val; } } for (var i = 0, l = arguments.length; i < l; i++) { forEach(arguments[i], assignValue); } return result; } function extend(a, b, thisArg) { forEach(b, function assignValue(val, key) { if (thisArg && typeof val === "function") { a[key] = bind$1(val, thisArg); } else { a[key] = val; } }); return a; } function stripBOM(content) { if (content.charCodeAt(0) === 65279) { content = content.slice(1); } return content; } var utils$d = { isArray, isArrayBuffer, isBuffer, isFormData, isArrayBufferView, isString, isNumber, isObject, isPlainObject, isUndefined, isDate, isFile, isBlob, isFunction, isStream, isURLSearchParams, isStandardBrowserEnv, forEach, merge, extend, trim, stripBOM }; var utils$c = utils$d; function encode(val) { return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]"); } var buildURL$2 = function buildURL(url, params, paramsSerializer) { if (!params) { return url; } var serializedParams; if (paramsSerializer) { serializedParams = paramsSerializer(params); } else if (utils$c.isURLSearchParams(params)) { serializedParams = params.toString(); } else { var parts = []; utils$c.forEach(params, function serialize(val, key) { if (val === null || typeof val === "undefined") { return; } if (utils$c.isArray(val)) { key = key + "[]"; } else { val = [val]; } utils$c.forEach(val, function parseValue(v) { if (utils$c.isDate(v)) { v = v.toISOString(); } else if (utils$c.isObject(v)) { v = JSON.stringify(v); } parts.push(encode(key) + "=" + encode(v)); }); }); serializedParams = parts.join("&"); } if (serializedParams) { var hashmarkIndex = url.indexOf("#"); if (hashmarkIndex !== -1) { url = url.slice(0, hashmarkIndex); } url += (url.indexOf("?") === -1 ? "?" : "&") + serializedParams; } return url; }; var utils$b = utils$d; function InterceptorManager$1() { this.handlers = []; } InterceptorManager$1.prototype.use = function use(fulfilled, rejected, options) { this.handlers.push({ fulfilled, rejected, synchronous: options ? options.synchronous : false, runWhen: options ? options.runWhen : null }); return this.handlers.length - 1; }; InterceptorManager$1.prototype.eject = function eject(id2) { if (this.handlers[id2]) { this.handlers[id2] = null; } }; InterceptorManager$1.prototype.forEach = function forEach2(fn) { utils$b.forEach(this.handlers, function forEachHandler(h) { if (h !== null) { fn(h); } }); }; var InterceptorManager_1 = InterceptorManager$1; var utils$a = utils$d; var normalizeHeaderName$1 = function normalizeHeaderName(headers, normalizedName) { utils$a.forEach(headers, function processHeader(value, name2) { if (name2 !== normalizedName && name2.toUpperCase() === normalizedName.toUpperCase()) { headers[normalizedName] = value; delete headers[name2]; } }); }; var enhanceError$2 = function enhanceError(error, config, code, request2, response) { error.config = config; if (code) { error.code = code; } error.request = request2; error.response = response; error.isAxiosError = true; error.toJSON = function toJSON() { return { message: this.message, name: this.name, description: this.description, number: this.number, fileName: this.fileName, lineNumber: this.lineNumber, columnNumber: this.columnNumber, stack: this.stack, config: this.config, code: this.code }; }; return error; }; var enhanceError$1 = enhanceError$2; var createError$2 = function createError(message, config, code, request2, response) { var error = new Error(message); return enhanceError$1(error, config, code, request2, response); }; var createError$1 = createError$2; var settle$1 = function settle(resolve, reject, response) { var validateStatus2 = response.config.validateStatus; if (!response.status || !validateStatus2 || validateStatus2(response.status)) { resolve(response); } else { reject(createError$1("Request failed with status code " + response.status, response.config, null, response.request, response)); } }; var utils$9 = utils$d; var cookies$1 = utils$9.isStandardBrowserEnv() ? function standardBrowserEnv() { return { write: function write(name2, value, expires, path, domain, secure) { var cookie = []; cookie.push(name2 + "=" + encodeURIComponent(value)); if (utils$9.isNumber(expires)) { cookie.push("expires=" + new Date(expires).toGMTString()); } if (utils$9.isString(path)) { cookie.push("path=" + path); } if (utils$9.isString(domain)) { cookie.push("domain=" + domain); } if (secure === true) { cookie.push("secure"); } document.cookie = cookie.join("; "); }, read: function read(name2) { var match = document.cookie.match(new RegExp("(^|;\\s*)(" + name2 + ")=([^;]*)")); return match ? decodeURIComponent(match[3]) : null; }, remove: function remove(name2) { this.write(name2, "", Date.now() - 864e5); } }; }() : function nonStandardBrowserEnv() { return { write: function write() { }, read: function read() { return null; }, remove: function remove() { } }; }(); var isAbsoluteURL$1 = function isAbsoluteURL(url) { return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); }; var combineURLs$1 = function combineURLs(baseURL, relativeURL) { return relativeURL ? baseURL.replace(/\/+$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL; }; var isAbsoluteURL2 = isAbsoluteURL$1; var combineURLs2 = combineURLs$1; var buildFullPath$1 = function buildFullPath(baseURL, requestedURL) { if (baseURL && !isAbsoluteURL2(requestedURL)) { return combineURLs2(baseURL, requestedURL); } return requestedURL; }; var utils$8 = utils$d; var ignoreDuplicateOf = [ "age", "authorization", "content-length", "content-type", "etag", "expires", "from", "host", "if-modified-since", "if-unmodified-since", "last-modified", "location", "max-forwards", "proxy-authorization", "referer", "retry-after", "user-agent" ]; var parseHeaders$1 = function parseHeaders(headers) { var parsed = {}; var key; var val; var i; if (!headers) { return parsed; } utils$8.forEach(headers.split("\n"), function parser(line) { i = line.indexOf(":"); key = utils$8.trim(line.substr(0, i)).toLowerCase(); val = utils$8.trim(line.substr(i + 1)); if (key) { if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { return; } if (key === "set-cookie") { parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); } else { parsed[key] = parsed[key] ? parsed[key] + ", " + val : val; } } }); return parsed; }; var utils$7 = utils$d; var isURLSameOrigin$1 = utils$7.isStandardBrowserEnv() ? function standardBrowserEnv2() { var msie = /(msie|trident)/i.test(navigator.userAgent); var urlParsingNode = document.createElement("a"); var originURL; function resolveURL(url) { var href = url; if (msie) { urlParsingNode.setAttribute("href", href); href = urlParsingNode.href; } urlParsingNode.setAttribute("href", href); return { href: urlParsingNode.href, protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, "") : "", host: urlParsingNode.host, search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, "") : "", hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, "") : "", hostname: urlParsingNode.hostname, port: urlParsingNode.port, pathname: urlParsingNode.pathname.charAt(0) === "/" ? urlParsingNode.pathname : "/" + urlParsingNode.pathname }; } originURL = resolveURL(window.location.href); return function isURLSameOrigin2(requestURL) { var parsed = utils$7.isString(requestURL) ? resolveURL(requestURL) : requestURL; return parsed.protocol === originURL.protocol && parsed.host === originURL.host; }; }() : function nonStandardBrowserEnv2() { return function isURLSameOrigin2() { return true; }; }(); var utils$6 = utils$d; var settle2 = settle$1; var cookies = cookies$1; var buildURL$1 = buildURL$2; var buildFullPath2 = buildFullPath$1; var parseHeaders2 = parseHeaders$1; var isURLSameOrigin = isURLSameOrigin$1; var createError2 = createError$2; var xhr = function xhrAdapter(config) { return new Promise(function dispatchXhrRequest(resolve, reject) { var requestData = config.data; var requestHeaders = config.headers; var responseType = config.responseType; if (utils$6.isFormData(requestData)) { delete requestHeaders["Content-Type"]; } var request2 = new XMLHttpRequest(); if (config.auth) { var username = config.auth.username || ""; var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ""; requestHeaders.Authorization = "Basic " + btoa(username + ":" + password); } var fullPath = buildFullPath2(config.baseURL, config.url); request2.open(config.method.toUpperCase(), buildURL$1(fullPath, config.params, config.paramsSerializer), true); request2.timeout = config.timeout; function onloadend() { if (!request2) { return; } var responseHeaders = "getAllResponseHeaders" in request2 ? parseHeaders2(request2.getAllResponseHeaders()) : null; var responseData = !responseType || responseType === "text" || responseType === "json" ? request2.responseText : request2.response; var response = { data: responseData, status: request2.status, statusText: request2.statusText, headers: responseHeaders, config, request: request2 }; settle2(resolve, reject, response); request2 = null; } if ("onloadend" in request2) { request2.onloadend = onloadend; } else { request2.onreadystatechange = function handleLoad() { if (!request2 || request2.readyState !== 4) { return; } if (request2.status === 0 && !(request2.responseURL && request2.responseURL.indexOf("file:") === 0)) { return; } setTimeout(onloadend); }; } request2.onabort = function handleAbort() { if (!request2) { return; } reject(createError2("Request aborted", config, "ECONNABORTED", request2)); request2 = null; }; request2.onerror = function handleError() { reject(createError2("Network Error", config, null, request2)); request2 = null; }; request2.ontimeout = function handleTimeout() { var timeoutErrorMessage = "timeout of " + config.timeout + "ms exceeded"; if (config.timeoutErrorMessage) { timeoutErrorMessage = config.timeoutErrorMessage; } reject(createError2(timeoutErrorMessage, config, config.transitional && config.transitional.clarifyTimeoutError ? "ETIMEDOUT" : "ECONNABORTED", request2)); request2 = null; }; if (utils$6.isStandardBrowserEnv()) { var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : void 0; if (xsrfValue) { requestHeaders[config.xsrfHeaderName] = xsrfValue; } } if ("setRequestHeader" in request2) { utils$6.forEach(requestHeaders, function setRequestHeader(val, key) { if (typeof requestData === "undefined" && key.toLowerCase() === "content-type") { delete requestHeaders[key]; } else { request2.setRequestHeader(key, val); } }); } if (!utils$6.isUndefined(config.withCredentials)) { request2.withCredentials = !!config.withCredentials; } if (responseType && responseType !== "json") { request2.responseType = config.responseType; } if (typeof config.onDownloadProgress === "function") { request2.addEventListener("progress", config.onDownloadProgress); } if (typeof config.onUploadProgress === "function" && request2.upload) { request2.upload.addEventListener("progress", config.onUploadProgress); } if (config.cancelToken) { config.cancelToken.promise.then(function onCanceled(cancel) { if (!request2) { return; } request2.abort(); reject(cancel); request2 = null; }); } if (!requestData) { requestData = null; } request2.send(requestData); }); }; var utils$5 = utils$d; var normalizeHeaderName2 = normalizeHeaderName$1; var enhanceError2 = enhanceError$2; var DEFAULT_CONTENT_TYPE = { "Content-Type": "application/x-www-form-urlencoded" }; function setContentTypeIfUnset(headers, value) { if (!utils$5.isUndefined(headers) && utils$5.isUndefined(headers["Content-Type"])) { headers["Content-Type"] = value; } } function getDefaultAdapter() { var adapter; if (typeof XMLHttpRequest !== "undefined") { adapter = xhr; } else if (typeof process !== "undefined" && Object.prototype.toString.call(process) === "[object process]") { adapter = xhr; } return adapter; } function stringifySafely(rawValue, parser, encoder) { if (utils$5.isString(rawValue)) { try { (parser || JSON.parse)(rawValue); return utils$5.trim(rawValue); } catch (e) { if (e.name !== "SyntaxError") { throw e; } } } return (encoder ||