UNPKG

@sociogram-dev/mini-apps-sdk

Version:

SDK for creating mini apps that integrate with Sociogram

3 lines (2 loc) 4.7 kB
(function(m,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(m=typeof globalThis<"u"?globalThis:m||self,_(m.SociogramMiniAppsSDK={}))})(this,function(m){"use strict";const _=e=>{try{return e=e.replace(/\+/g,"%20"),decodeURIComponent(e)}catch(a){return console.error("[Sociogram.MiniApp] Failed to decode URL:",a),e}},w=e=>{const a={};if(!e.length)return a;const p=e.split("&");let c,d,l,f;for(c=0;c<p.length;c++)d=p[c].split("="),l=_(d[0]),f=d[1]==null?null:_(d[1]),a[l]=f;return a},u=()=>{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),{}}},S=()=>{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=u(),{isIframe:p,environment:c}=S(),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),f(t,s=>{s(t,r)})},f=(t,r)=>{const s=e[t];if(s!=null&&s.length)for(const g of s)try{r(g)}catch(I){console.error("Error in event handler:",I)}},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(g){s==null||s(),console.error("Failed to post message:",g)}},receiveEvent:l,callEventCallbacks:f,postMessage:d,onEvent:n,offEvent:i}},h=e=>{const a={initData:e.initParams,version:"1.0"},p=new Map,c=new Map,d=new Map,l=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})}}};(()=>{window.Sociogram=window.Sociogram||{};const e=E();window.Sociogram.WebView=e,window.Sociogram.Utils={safeParseUrlParams:u,urlSafeDecode:_,urlParseQueryString:w},window.Sociogram.MiniApp=h(e)})();const M=window.Sociogram.MiniApp;var v=(e=>(e.USD="usd",e.SOL="sol",e))(v||{});m.CurrencyType=v,m.default=M,Object.defineProperties(m,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}); //# sourceMappingURL=mini-apps-sdk.umd.js.map