UNPKG

@sociogram-dev/mini-apps-sdk

Version:

SDK for creating mini apps that integrate with Sociogram

186 lines (185 loc) 6.03 kB
const g = (e) => { try { return e = e.replace(/\+/g, "%20"), decodeURIComponent(e); } catch (a) { return console.error("[Sociogram.MiniApp] Failed to decode URL:", a), e; } }, u = (e) => { const a = {}; if (!e.length) return a; const p = e.split("&"); let c, d, l, m; for (c = 0; c < p.length; c++) d = p[c].split("="), l = g(d[0]), m = d[1] == null ? null : g(d[1]), a[l] = m; return a; }, f = () => { try { const e = new URLSearchParams(window.location.search); return Object.fromEntries( Array.from(e.entries()).map(([a, p]) => p === "null" ? [a, null] : [a, p]) ); } catch (e) { return console.error("[Sociogram.MiniApp] Failed to parse URL parameters:", e), {}; } }, w = () => { if (window.ReactNativeWebView) return { isIframe: !1, environment: "react-native" }; const e = window.parent !== window; return { isIframe: e, environment: e ? "iframe" : "web" }; }, E = () => { const e = {}, a = f(), { isIframe: p, environment: c } = w(), d = (t) => { const r = JSON.stringify(t); c === "react-native" && window.ReactNativeWebView ? window.ReactNativeWebView.postMessage(r) : p && window.parent.postMessage(r, "*"); }, l = (t, r) => { console.log("[Sociogram.WebView] < receiveEvent", t, r), m(t, (s) => { s(t, r); }); }, m = (t, r) => { const s = e[t]; if (s != null && s.length) for (const _ of s) try { r(_); } catch (v) { console.error("Error in event handler:", v); } }, n = (t, r) => { e[t] === void 0 && (e[t] = []), e[t].indexOf(r) === -1 && e[t].push(r); }, i = (t, r) => { if (e[t] === void 0) return; const s = e[t].indexOf(r); s !== -1 && e[t].splice(s, 1); }; if (p || c === "react-native") { window.addEventListener("message", (t) => { if (t.source !== window.parent && c !== "react-native") return; let r; try { r = JSON.parse(t.data); } catch (s) { console.error("Failed to parse message data:", s); return; } if (r != null && r.eventType) if (r.eventType === "reload_iframe") { try { window.parent.postMessage(JSON.stringify({ eventType: "iframe_will_reload" }), "*"); } catch (s) { console.error("Failed to post reload message:", s); } location.reload(); } else l(r.eventType, r.eventData); }); try { d({ eventType: "iframe_ready", eventData: { reload_supported: !0 } }); } catch (t) { console.error("Failed to post iframe ready message:", t); } } return { initParams: a, isIframe: p, postEvent: (t, r = "", s) => { console.log("[Sociogram.WebView] > postEvent", t, r); try { d({ eventType: t, eventData: r }), s == null || s(); } catch (_) { s == null || s(), console.error("Failed to post message:", _); } }, receiveEvent: l, callEventCallbacks: m, postMessage: d, onEvent: n, offEvent: i }; }, S = (e) => { const a = { initData: e.initParams, version: "1.0" }, p = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(); return e.onEvent("mini_app_invoice_closed", (n, i) => { const { invoiceId: o, status: t } = i, r = p.get(o); r && (r(t), p.delete(o)); }), e.onEvent("mini_app_get_followers_response", (n, i) => { const o = i, t = c.get(o.requestId); t && (t(o.response), c.delete(o.requestId)); }), e.onEvent("mini_app_get_following_response", (n, i) => { const o = i, t = d.get(o.requestId); t && (t(o.response), d.delete(o.requestId)); }), e.onEvent("mini_app_get_friends_response", (n, i) => { const o = i, t = l.get(o.requestId); t && (t(o.response), l.delete(o.requestId)); }), { get initData() { return a.initData; }, get version() { return a.version; }, readTextFromClipboard: (n) => { e.postEvent("mini_app_read_text_from_clipboard", { text: n }); }, openLink: (n, i) => { e.postEvent("mini_app_open_link", { url: n, options: i }); }, openInvoice: (n, i) => { const o = `invoice_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; i && p.set(o, i); const t = { ...n, invoiceId: o }; return e.postEvent("mini_app_open_invoice", t), o; }, getFollowers: (n, i) => { const o = `followers_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; return i && c.set(o, i), e.postEvent("mini_app_get_followers", { requestId: o, ...n }), o; }, getFollowing: (n, i) => { const o = `following_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; return i && d.set(o, i), e.postEvent("mini_app_get_following", { requestId: o, ...n }), o; }, getFriends: (n, i) => { const o = `friends_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`; return i && l.set(o, i), e.postEvent("mini_app_get_friends", { requestId: o, ...n }), o; }, share: (n) => { e.postEvent("mini_app_share", n); }, openRewardModal: (n) => { e.postEvent("mini_app_open_reward_modal", n); }, openTipModal: (n) => { e.postEvent("mini_app_open_tip_modal", n); }, openLikeModal: (n) => { e.postEvent("mini_app_open_like_modal", n); }, followUser: (n) => { e.postEvent("mini_app_follow_user", { address: n }); } }; }, h = () => { window.Sociogram = window.Sociogram || {}; const e = E(); window.Sociogram.WebView = e, window.Sociogram.Utils = { safeParseUrlParams: f, urlSafeDecode: g, urlParseQueryString: u }, window.Sociogram.MiniApp = S(e); }; h(); const M = window, F = M.Sociogram.MiniApp; var I = /* @__PURE__ */ ((e) => (e.USD = "usd", e.SOL = "sol", e))(I || {}); export { I as CurrencyType, F as default }; //# sourceMappingURL=mini-apps-sdk.js.map