UNPKG

@circle-apps/sdk

Version:

Official SDK for Celia Mini Apps integration

214 lines (213 loc) 9.14 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CeliaSDKContext = void 0; exports.CeliaSDKProvider = CeliaSDKProvider; exports.useCeliaSDK = useCeliaSDK; // src/contexts/CeliaSDKContext.tsx const react_1 = __importStar(require("react")); const CeliaSDK_1 = require("../CeliaSDK"); exports.CeliaSDKContext = (0, react_1.createContext)(null); function CeliaSDKProvider({ children, fallback = react_1.default.createElement(DefaultFallback, null), enableOutsideWebView = false, }) { const [isReady, setIsReady] = (0, react_1.useState)(false); const [error, setError] = (0, react_1.useState)(null); const [sdk, setSdk] = (0, react_1.useState)(null); const [isWebView, setIsWebView] = (0, react_1.useState)(null); const [language, setLanguage] = (0, react_1.useState)(null); (0, react_1.useEffect)(() => { let isMounted = true; let sdkInstance = null; const init = () => __awaiter(this, void 0, void 0, function* () { try { sdkInstance = new CeliaSDK_1.CeliaSDK(); setSdk(sdkInstance); // If not in a WebView and not enabled to work outside, don't initialize if (sdkInstance.isWebView === false && !enableOutsideWebView) { setIsWebView(false); setError(new Error("CeliaSDK can only be used within a Celia WebView")); setIsReady(true); return; } // Immediately try to fetch language after SDK is created try { const result = yield sdkInstance.getLanguage(); if (isMounted) { setLanguage(result.language); } } catch (langErr) { console.warn("Failed to fetch language during initialization:", langErr); // Set default language as fallback if (isMounted) { setLanguage("en"); } } } catch (err) { if (isMounted) { console.error("Error initializing CeliaSDK:", err); setError(err instanceof Error ? err : new Error("Failed to initialize CeliaSDK")); } } }); init(); return () => { isMounted = false; // Cleanup if needed }; }, [enableOutsideWebView]); (0, react_1.useEffect)(() => { if (!sdk) return; // Check if already initialized if (sdk.isInitialized) { setIsReady(true); setError(null); // Only fetch language if it's not already set if (!language) { fetchLanguage(sdk); } return; } // Set a timeout to handle cases where initialization might hang const timeout = setTimeout(() => { if (!isReady) { console.warn("SDK initialization taking longer than expected"); setIsReady(true); // Continue anyway // Try to fetch language even if initialization took longer than expected if (sdk && !language) { fetchLanguage(sdk); } } }, 3000); return () => clearTimeout(timeout); }, [sdk, isReady, language]); // Function to fetch language from the native app const fetchLanguage = (sdkInstance) => __awaiter(this, void 0, void 0, function* () { try { const result = yield sdkInstance.getLanguage(); if (result && result.language) { setLanguage(result.language); } else { // If we got a response but no language, set default setLanguage("en"); } } catch (err) { console.warn("Failed to fetch language:", err); // Set default language as fallback setLanguage("en"); } }); // If not in WebView and not enabled to work outside, show error if (isWebView === false && !enableOutsideWebView) { return (fallback || (react_1.default.createElement(DefaultFallback, { error: new Error("CeliaSDK can only be used within a Celia WebView") }))); } // Show fallback while loading if ((!isReady || !sdk) && !error) { return react_1.default.createElement(react_1.default.Fragment, null, fallback); } // Show error state if there's an error and no fallback if (error && !fallback) { return react_1.default.createElement(DefaultFallback, { error: error }); } // Define the ad-related functions const showBannerAd = (options) => __awaiter(this, void 0, void 0, function* () { if (!sdk) { throw new Error("CeliaSDK is not initialized"); } return sdk.showBannerAd(options); }); const hideBannerAd = (containerId) => __awaiter(this, void 0, void 0, function* () { if (!sdk) { throw new Error("CeliaSDK is not initialized"); } return sdk.hideBannerAd({ containerId }); }); const showAd = (options) => __awaiter(this, void 0, void 0, function* () { if (!sdk) { throw new Error("CeliaSDK is not initialized"); } return sdk.showAd(options); }); const contextValue = { sdk, isLoading: !isReady || !sdk, isReady: !!sdk && isReady, error, isWebView: isWebView || false, language, showBannerAd, hideBannerAd, showAd, }; return (react_1.default.createElement(exports.CeliaSDKContext.Provider, { value: contextValue }, children)); } function DefaultFallback({ error } = {}) { return (react_1.default.createElement("div", { style: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100vh", padding: "20px", textAlign: "center", fontFamily: "Arial, sans-serif", } }, error ? (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("h2", null, "Error Loading Celia SDK"), react_1.default.createElement("p", { style: { color: "red" } }, error.message), react_1.default.createElement("p", null, "Please try again later or contact support if the problem persists."))) : (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("h2", null, "Loading Celia SDK..."), react_1.default.createElement("p", null, "Please wait while we initialize the application."))))); } function useCeliaSDK() { const context = (0, react_1.useContext)(exports.CeliaSDKContext); if (!context) { throw new Error("useCeliaSDK must be used within a CeliaSDKProvider"); } return context; }