@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
JavaScript
"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