@sociogram-dev/mini-apps-sdk
Version:
SDK for creating mini apps that integrate with Sociogram
186 lines (185 loc) • 6.03 kB
JavaScript
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