@perawallet/connect
Version:
JavaScript SDK for integrating Pera Wallet to web applications.
71 lines (54 loc) • 1.81 kB
text/typescript
import {detectBrowser, isAndroid, isIOS} from "./device/deviceUtils";
import {PERA_WALLET_APP_DEEP_LINK} from "./peraWalletConstants";
function generatePeraWalletAppDeepLink(shouldAddBrowserName = true): string {
let appDeepLink = PERA_WALLET_APP_DEEP_LINK;
const browserName = detectBrowser();
if (shouldAddBrowserName && browserName) {
appDeepLink = `${appDeepLink}?browser=${encodeURIComponent(browserName)}`;
}
return appDeepLink;
}
function generateEmbeddedWalletURL(url: string, isCompactMode?: boolean) {
const newURL = new URL(url);
newURL.searchParams.append("embedded", "true");
if (isCompactMode) newURL.searchParams.append("compactMode", "true");
return newURL.toString();
}
/**
* @param {string} uri WalletConnect uri
* @param {Object} params Optional parameters
* @returns {string} Pera Wallet deeplink
*/
function generatePeraWalletConnectDeepLink(
uri: string,
params?: {
singleAccount?: boolean;
selectedAccount?: string;
}
): string {
let appDeepLink = generatePeraWalletAppDeepLink(false);
// Add `wc` suffix to the deeplink if it doesn't exist
if (isIOS() && !appDeepLink.includes("-wc")) {
appDeepLink = appDeepLink.replace("://", "-wc://");
}
let deepLink = `${appDeepLink}wc?uri=${encodeURIComponent(uri)}`;
const browserName = detectBrowser();
if (isAndroid()) {
deepLink = uri;
}
if (browserName) {
deepLink = `${deepLink}&browser=${encodeURIComponent(browserName)}`;
}
if (params?.singleAccount) {
deepLink = `${deepLink}&singleAccount=true`;
}
if (params?.selectedAccount) {
deepLink = `${deepLink}&selectedAccount=${params.selectedAccount}`;
}
return deepLink;
}
export {
generatePeraWalletAppDeepLink,
generatePeraWalletConnectDeepLink,
generateEmbeddedWalletURL
};