UNPKG

@whop/iframe

Version:

Powers communication between Whop and your embedded app

119 lines (116 loc) 4.37 kB
import { appsServerSchema, createSDK, postmessageTransport, reactNativeClientTransport, transport_exports, whopServerSchema } from "./chunk-DPDPUJJX.mjs"; // src/sdk/mobile-app-postmessage.ts function getReactNativePostMessage() { const reactNativePostMessage = typeof window !== "undefined" && "ReactNativeWebView" in window && typeof window.ReactNativeWebView === "object" && window.ReactNativeWebView && "postMessage" in window.ReactNativeWebView && typeof window.ReactNativeWebView.postMessage === "function" ? (data) => { if (typeof window !== "undefined" && "ReactNativeWebView" in window && typeof window.ReactNativeWebView === "object" && window.ReactNativeWebView && "postMessage" in window.ReactNativeWebView && typeof window.ReactNativeWebView.postMessage === "function") window?.ReactNativeWebView?.postMessage(data); } : void 0; return reactNativePostMessage; } function getSwiftPostMessage() { const swiftMessageHandler = typeof window !== "undefined" && "webkit" in window && typeof window.webkit === "object" && window.webkit !== null && "messageHandlers" in window.webkit && typeof window.webkit.messageHandlers === "object" && window.webkit.messageHandlers !== null && "SwiftWebView" in window.webkit.messageHandlers && typeof window.webkit.messageHandlers.SwiftWebView === "object" && window.webkit.messageHandlers.SwiftWebView !== null && "postMessage" in window.webkit.messageHandlers.SwiftWebView ? window.webkit.messageHandlers.SwiftWebView : null; const swiftPostMessage = swiftMessageHandler ? (data) => { if (typeof swiftMessageHandler.postMessage === "function") { swiftMessageHandler.postMessage(data); } } : void 0; return swiftPostMessage; } // src/sdk/sync-href.ts function syncHref({ onChange }) { if (typeof window === "undefined") return; const initialHref = window.location.href; onChange({ href: initialHref }).catch(() => null); let lastKnown = initialHref; window.addEventListener("popstate", () => { const { href } = window.location; onChange({ href }).catch(() => null); lastKnown = href; }); if (window._whop_sync_href_interval) { clearInterval(window._whop_sync_href_interval); } window._whop_sync_href_interval = setInterval(() => { const { href } = window.location; if (href === lastKnown) return; onChange({ href }).catch(() => null); lastKnown = href; }, 250); } // src/sdk/index.ts function setColorTheme(theme) { document.documentElement.dispatchEvent( new CustomEvent("frosted-ui:set-theme", { detail: theme }) ); } function createSdk({ onMessage = {}, appId = process.env.NEXT_PUBLIC_WHOP_APP_ID, overrideParentOrigins }) { const mobileWebView = getSwiftPostMessage() ?? getReactNativePostMessage(); const remoteWindow = typeof window === "undefined" ? void 0 : window.parent; if (!appId) { throw new Error( "[createSdk]: appId is required. Please provide an appId or set the NEXT_PUBLIC_WHOP_APP_ID environment variable." ); } const sdk = createSDK({ clientSchema: whopServerSchema, serverSchema: appsServerSchema, forceCompleteness: false, serverImplementation: onMessage, localAppId: appId, remoteAppId: "app_whop", transport: mobileWebView ? reactNativeClientTransport({ postMessage: mobileWebView, targetOrigin: "com.whop.whopapp" }) : postmessageTransport({ remoteWindow, targetOrigins: overrideParentOrigins ?? [ "https://whop.com", "https://dash.whop.com", "http://localhost:8003" ] }), serverComplete: true, serverMiddleware: [ { onColorThemeChange: setColorTheme } ], timeout: 15e3, timeouts: { inAppPurchase: 1e3 * 60 * 60 * 24, // 24 hours, we never want this to timeout. onHrefChange: 500 // we don't really care about a response here. } }); if (typeof window !== "undefined") { sdk.getColorTheme().then(setColorTheme).catch(() => null); document.documentElement.addEventListener("frosted-ui:mounted", () => { sdk.getColorTheme().then(setColorTheme).catch(() => null); }); } syncHref({ onChange: sdk.onHrefChange }); return sdk; } export { appsServerSchema, createSdk, transport_exports as transport, whopServerSchema }; //# sourceMappingURL=index.mjs.map