UNPKG

@coinmeca/wallet-provider

Version:

This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

109 lines 4.33 kB
"use client"; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import Script from "next/script"; import { createContext, useContext, useEffect, useMemo, useState } from "react"; import { format as sdkFormat, loadStorage as sdkLoadStorage, parse as sdkParse, } from "@coinmeca/wallet-sdk/utils"; export const format = sdkFormat; export const parse = sdkParse; export const loadStorage = sdkLoadStorage; export const loadTelegram = (telegram) => ({ telegram, user: telegram?.initDataUnsafe?.user, isInApp: telegram && telegram?.platform !== "unknown", isExpanded: telegram?.isExpanded || false, isVerticalSwipe: telegram?.isVerticalSwipesEnabled, isCloseConfirm: telegram?.isClosingConfirmationEnabled, storage: telegram?.CloudStorage, send: (text) => telegram && telegram?.sendData(text), enable: { vertical: () => telegram?.enableVerticalSwipes?.(), closeConfirm: () => telegram?.enableClosingConfirmation?.(), }, disable: { vertical: () => telegram?.disableVerticalSwipes?.(), closeConfirm: () => telegram?.disableClosingConfirmation?.(), }, bio: { request: (reason) => telegram && telegram.BiometricManager.requestAccess({ reason }), auth: (reason) => telegram && telegram.BiometricManager.authenticate({ reason }), }, show: { alert: (message, callback) => telegram && telegram?.showAlert(message, callback), confirm: (title, callback) => telegram && telegram?.showConfirm(title, callback), popup: (popup, callback) => telegram && telegram?.showPopup(popup, callback), scanQR: (text, callback) => telegram && telegram?.showScanQrPopup({ text }, callback), }, open: { internal: (url, callback) => { if (telegram) { telegram?.openTelegramLink(url); callback?.(); } }, external: (url, try_instant_view, callback) => { if (telegram) { telegram?.openLink(url, { try_instant_view }); callback?.(); } }, }, expand: (callback) => { if (telegram) { telegram?.expand(); callback?.(); } }, exit: (callback) => { if (telegram) { telegram?.close(); telegram?.MainButton?.offClick(() => { callback?.(); }); } }, }); const TelegramContext = createContext(undefined); export const useTelegram = () => { const context = useContext(TelegramContext); if (!context) throw new Error("useTelegram must be used within a TelegramProvider"); return context; }; export const TelegramProvider = ({ src = "https://telegram.org/js/telegram-web-app.js", children }) => { const [telegram, setTelegram] = useState(); const [user, setUser] = useState(); const onLoad = () => { const telegram = typeof window !== "undefined" ? window.Telegram?.WebApp || window.Telegram?.WebView : undefined; if (telegram) { telegram.ready(); // Assuming BiometricManager exists and has an init method if (telegram.BiometricManager) telegram.BiometricManager.init(); telegram.enableVerticalSwipes(); setTelegram(telegram); setUser(telegram.initDataUnsafe?.user); } }; const modules = useMemo(() => loadTelegram(telegram), [telegram]); useEffect(() => { if (telegram) { // Define a cleanup function that does not return a value return () => { if (telegram?.MainButton) telegram?.MainButton?.offClick(() => setUser(undefined)); }; } }, [telegram]); return (_jsxs(_Fragment, { children: [_jsx(Script, { src: src, onLoad: onLoad }), _jsx(TelegramContext.Provider, { value: { ...{ ...modules, exit: (callback) => { modules.exit(callback); setUser(undefined); }, }, telegram, user, }, children: children })] })); }; //# sourceMappingURL=telegram.js.map