@web3auth/modal
Version:
Multi chain wallet aggregator for web3Auth
171 lines (167 loc) • 5.55 kB
JavaScript
'use strict';
var httpHelpers = require('@toruslabs/http-helpers');
var auth = require('@web3auth/auth');
var noModal = require('@web3auth/no-modal');
var clsx = require('clsx');
var tailwindMerge = require('tailwind-merge');
const cache = new Map();
/** Merge classes with tailwind-merge with clsx full feature and memoization */
function cn(...inputs) {
// Create a cache key using JSON.stringify
const cacheKey = JSON.stringify(inputs);
// Check if the result is already cached
if (cache.has(cacheKey)) {
return cache.get(cacheKey);
}
// If not cached, compute the result
const result = tailwindMerge.twMerge(clsx(inputs));
// Store the result in the cache
cache.set(cacheKey, result);
return result;
}
const getBrowserExtensionUrl = (browserType, walletId) => {
if (walletId !== null && walletId !== void 0 && walletId.startsWith("https://")) return walletId;
switch (browserType) {
case "chrome":
return `https://chrome.google.com/webstore/detail/${walletId}`;
case "firefox":
return `https://addons.mozilla.org/firefox/addon/${walletId}`;
case "edge":
return `https://microsoftedge.microsoft.com/addons/detail/${walletId}`;
default:
return null;
}
};
const getMobileInstallLink = (os, appId) => {
if (appId !== null && appId !== void 0 && appId.includes("https://")) {
return appId;
}
switch (os) {
case "android":
return `https://play.google.com/store/apps/details?id=${appId}`;
case "ios":
return `https://apps.apple.com/app/safepal-wallet/${appId}`;
default:
return "";
}
};
const getOsName = os => {
switch (os) {
case "ios":
return "iOS";
case "android":
return "Android";
default:
return "";
}
};
const getBrowserName = browserType => {
return browserType.charAt(0).toUpperCase() + browserType.slice(1);
};
const getIcons = icon => {
return `https://images.web3auth.io/login-modal/${icon}.svg`;
};
const passwordlessBackendUrl = "https://api.web3auth.io/passwordless-service";
const getUserCountry = async () => {
try {
const result = await httpHelpers.get(`${passwordlessBackendUrl}/api/v3/user/location`);
if (result && result.data.country) return {
country: result.data.country,
dialCode: result.data.dial_code
};
return null;
} catch (error) {
noModal.log.error("error getting user country", error);
return null;
}
};
const validatePhoneNumber = async phoneNumber => {
try {
const result = await httpHelpers.post(`${passwordlessBackendUrl}/api/v3/phone_number/validate`, {
phone_number: phoneNumber
});
if (result && result.success) return result;
return {
success: false,
parsed_number: "",
country_flag: ""
};
} catch (error) {
noModal.log.error("error validating phone number", error);
if (error.status === 400) {
return {
success: false,
parsed_number: "",
country_flag: ""
};
}
// sending true because we don't want the user to be stuck on a flow
// if there is an error with the api or something went wrong.
return {
success: false,
parsed_number: "",
country_flag: ""
};
}
};
const getUserLanguage = defaultLanguage => {
let userLanguage = defaultLanguage;
if (!userLanguage) {
const browserLanguage = typeof window !== "undefined" ? window.navigator.userLanguage || window.navigator.language || "en-US" : "en-US";
userLanguage = browserLanguage.split("-")[0];
}
return Object.prototype.hasOwnProperty.call(auth.LANGUAGE_MAP, userLanguage) ? userLanguage : auth.LANGUAGES.en;
};
function formatIOSMobile(params) {
const encodedUri = encodeURIComponent(params.uri);
if (params.link.startsWith("http")) return `${params.link}/wc?uri=${encodedUri}`;
if (params.link) return `${params.link}wc?uri=${encodedUri}`;
return "";
}
const getErrorMessages = errorCode => {
if (!errorCode) return "passwordless.something-wrong-error";
switch (errorCode) {
case "E001":
return "passwordless.error-invalid-params";
case "E002":
return "passwordless.error-invalid-origin";
case "E201":
return "passwordless.error-sending-sms-failed";
case "E300":
return "passwordless.error-no-mail-generated";
case "E301":
return "passwordless.error-invalid-link";
case "E302":
return "passwordless.error-new-link-generated-heading";
case "E304":
case "E403":
return "passwordless.error-max-retry-limit-reached";
case "E305":
case "E401":
return "passwordless.error-invalid-otp";
case "E306":
return "passwordless.error-otp-expired";
case "E400":
return "passwordless.error-no-sms-generated";
case "E411":
return "passwordless.error-plan-limit-reached";
case "E412":
return "passwordless.error-recaptcha-verification-failed";
case "E502":
return "passwordless.error-invalid-test-account";
default:
return "passwordless.something-wrong-error";
}
};
exports.cn = cn;
exports.formatIOSMobile = formatIOSMobile;
exports.getBrowserExtensionUrl = getBrowserExtensionUrl;
exports.getBrowserName = getBrowserName;
exports.getErrorMessages = getErrorMessages;
exports.getIcons = getIcons;
exports.getMobileInstallLink = getMobileInstallLink;
exports.getOsName = getOsName;
exports.getUserCountry = getUserCountry;
exports.getUserLanguage = getUserLanguage;
exports.passwordlessBackendUrl = passwordlessBackendUrl;
exports.validatePhoneNumber = validatePhoneNumber;