UNPKG

spwmini-shitless

Version:

Shitless SPWorlds Miniapp creation toolkit

161 lines (157 loc) 5.03 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/client.ts var client_exports = {}; __export(client_exports, { default: () => SPWMini }); module.exports = __toCommonJS(client_exports); // src/emitter/index.js function Emitter(obj) { if (obj) return mixin(obj); } function mixin(obj) { for (var key in Emitter.prototype) { obj[key] = Emitter.prototype[key]; } return obj; } Emitter.prototype.on = Emitter.prototype.addEventListener = function(event, fn) { this._callbacks = this._callbacks || {}; (this._callbacks["$" + event] = this._callbacks["$" + event] || []).push(fn); return this; }; Emitter.prototype.once = function(event, fn) { function on() { this.off(event, on); fn.apply(this, arguments); } on.fn = fn; this.on(event, on); return this; }; Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function(event, fn) { this._callbacks = this._callbacks || {}; if (0 == arguments.length) { this._callbacks = {}; return this; } var callbacks = this._callbacks["$" + event]; if (!callbacks) return this; if (1 == arguments.length) { delete this._callbacks["$" + event]; return this; } var cb; for (var i = 0; i < callbacks.length; i++) { cb = callbacks[i]; if (cb === fn || cb.fn === fn) { callbacks.splice(i, 1); break; } } if (callbacks.length === 0) { delete this._callbacks["$" + event]; } return this; }; Emitter.prototype.emit = function(event) { this._callbacks = this._callbacks || {}; var args = new Array(arguments.length - 1), callbacks = this._callbacks["$" + event]; for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } if (callbacks) { callbacks = callbacks.slice(0); for (var i = 0, len = callbacks.length; i < len; ++i) { callbacks[i].apply(this, args); } } return this; }; Emitter.prototype.emitReserved = Emitter.prototype.emit; Emitter.prototype.listeners = function(event) { this._callbacks = this._callbacks || {}; return this._callbacks["$" + event] || []; }; Emitter.prototype.hasListeners = function(event) { return !!this.listeners(event).length; }; // src/client.ts var SPWMini = class extends Emitter { appId; isReady = false; user = null; customFetch = null; #send(type, payload) { if (payload) return window.parent.postMessage({ type, payload }, "*"); return window.parent.postMessage({ type }, "*"); } #handleMessage({ data }) { if (!data || typeof data !== "object") return; if (!data.type) return; this.emit(data.type, data.payload); } constructor(appId, options) { super(); this.appId = appId; if (options?.customFetch) this.customFetch = options.customFetch; const doAutoInit = !options || options.autoinit !== false; if (doAutoInit) this.initialize(); this.once("initResponse", (user) => { this.isReady = true; this.user = user; if (this.isReady) this.emit("ready"); }); } initialize() { window.addEventListener("message", this.#handleMessage.bind(this)); this.#send("init", this.appId); } validateUser(url, init = {}) { return new Promise((resolve, reject) => { if (!init.method) init.method = "POST"; if (!init.headers) init.headers = {}; init.headers["Content-Type"] = "application/json"; const fetchFunction = this.customFetch || window.fetch; fetchFunction(url, { ...init, body: JSON.stringify(this.user) }).then((r) => r.text()).then((v) => resolve(v === "1")).catch(reject); }); } dispose() { window.removeEventListener("message", this.#handleMessage.bind(this)); } openURL(url) { let parsedUrl; try { parsedUrl = new URL(url); } catch (e) { throw "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 URL"; } if (parsedUrl.protocol !== "https:") throw "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B"; this.#send("openURL", url); } openPayment(code) { if (!code) throw "\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D \u043A\u043E\u0434"; this.#send("openPayment", code); } };