@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
130 lines (126 loc) • 5.35 kB
JavaScript
;
require('@babel/runtime/helpers/objectSpread2');
require('@babel/runtime/helpers/defineProperty');
require('@segment/analytics-next');
require('../../base/loglevel.js');
var baseControllers = require('@toruslabs/base-controllers');
require('@web3auth/auth');
require('../../base/errors/index.js');
require('../../base/wallet/index.js');
require('../../base/connector/connectorStatus.js');
require('../../base/connector/constants.js');
require('jwt-decode');
var constants = require('../../base/constants.js');
require('../../base/plugin/errors.js');
require('../../base/plugin/IPlugin.js');
require('@toruslabs/constants');
require('@toruslabs/http-helpers');
var utils = require('../utils.js');
exports.DEFAULT_EIP155_METHODS = void 0;
(function (DEFAULT_EIP155_METHODS) {
DEFAULT_EIP155_METHODS["ETH_SEND_TRANSACTION"] = "eth_sendTransaction";
DEFAULT_EIP155_METHODS["ETH_SIGN_TRANSACTION"] = "eth_signTransaction";
DEFAULT_EIP155_METHODS["ETH_SIGN"] = "eth_sign";
DEFAULT_EIP155_METHODS["PERSONAL_SIGN"] = "personal_sign";
DEFAULT_EIP155_METHODS["ETH_SIGN_TYPED_DATA"] = "eth_signTypedData";
DEFAULT_EIP155_METHODS["ETH_SIGN_TYPED_DATA_V3"] = "eth_signTypedData_v3";
DEFAULT_EIP155_METHODS["ETH_SIGN_TYPED_DATA_V4"] = "eth_signTypedData_v4";
DEFAULT_EIP155_METHODS["ADD_ETHEREUM_CHAIN"] = "wallet_addEthereumChain";
DEFAULT_EIP155_METHODS["SWITCH_ETHEREUM_CHAIN"] = "wallet_switchEthereumChain";
})(exports.DEFAULT_EIP155_METHODS || (exports.DEFAULT_EIP155_METHODS = {}));
exports.DEFAULT_SOLANA_METHODS = void 0;
(function (DEFAULT_SOLANA_METHODS) {
DEFAULT_SOLANA_METHODS["SIGN_TRANSACTION"] = "solana_signTransaction";
DEFAULT_SOLANA_METHODS["SIGN_MESSAGE"] = "solana_signMessage";
})(exports.DEFAULT_SOLANA_METHODS || (exports.DEFAULT_SOLANA_METHODS = {}));
exports.DEFAULT_EIP_155_EVENTS = void 0;
(function (DEFAULT_EIP_155_EVENTS) {
DEFAULT_EIP_155_EVENTS["ETH_CHAIN_CHANGED"] = "chainChanged";
DEFAULT_EIP_155_EVENTS["ETH_ACCOUNTS_CHANGED"] = "accountsChanged";
})(exports.DEFAULT_EIP_155_EVENTS || (exports.DEFAULT_EIP_155_EVENTS = {}));
exports.DEFAULT_SOLANA_EVENTS = void 0;
(function (DEFAULT_SOLANA_EVENTS) {
DEFAULT_SOLANA_EVENTS["SOL_CHAIN_CHANGED"] = "chainChanged";
DEFAULT_SOLANA_EVENTS["SOL_ACCOUNTS_CHANGED"] = "accountsChanged";
})(exports.DEFAULT_SOLANA_EVENTS || (exports.DEFAULT_SOLANA_EVENTS = {}));
/**
* Gets site metadata and returns it
*
*/
const getSiteMetadata = async () => ({
name: utils.getSiteName(window),
icon: await utils.getSiteIcon(window)
});
const getNamespacesFromChains = chains => {
const supportedNamespaces = [];
chains.forEach(chainId => {
const [namespace] = chainId.split(":");
if (!supportedNamespaces.includes(namespace)) {
supportedNamespaces.push(namespace);
}
});
return supportedNamespaces;
};
const getSupportedMethodsByNamespace = namespace => {
switch (namespace) {
case baseControllers.CHAIN_NAMESPACES.EIP155:
return Object.values(exports.DEFAULT_EIP155_METHODS);
case baseControllers.CHAIN_NAMESPACES.SOLANA:
return Object.values(exports.DEFAULT_SOLANA_METHODS);
default:
throw new Error(`No default methods for namespace: ${namespace}`);
}
};
const getSupportedEventsByNamespace = namespace => {
switch (namespace) {
case baseControllers.CHAIN_NAMESPACES.EIP155:
return Object.values(exports.DEFAULT_EIP_155_EVENTS);
case baseControllers.CHAIN_NAMESPACES.SOLANA:
return Object.values(exports.DEFAULT_SOLANA_EVENTS);
default:
throw new Error(`No default events for namespace: ${namespace}`);
}
};
const getRequiredNamespaces = chains => {
const selectedNamespaces = getNamespacesFromChains(chains);
return Object.fromEntries(selectedNamespaces.map(namespace => [namespace, {
methods: getSupportedMethodsByNamespace(namespace),
chains: chains.filter(chain => chain.startsWith(namespace)),
events: getSupportedEventsByNamespace(namespace)
}]));
};
const getWalletConnectV2Settings = async (chains, projectID) => {
const appMetadata = await getSiteMetadata();
const connectorSettings = {
walletConnectInitOptions: {
projectId: projectID,
relayUrl: "wss://relay.walletconnect.com",
metadata: {
name: appMetadata.name,
description: appMetadata.name,
url: window.location.origin,
icons: [appMetadata.icon || ""]
}
}
};
const chainNamespaces = chains.map(chain => {
if (chain.chainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA) {
return `${chain.chainNamespace}:${constants.SOLANA_CAIP_CHAIN_MAP[chain.chainId]}`;
} else if (chain.chainNamespace === baseControllers.CHAIN_NAMESPACES.EIP155) {
return `${chain.chainNamespace}:${parseInt(chain.chainId, 16)}`;
}
throw new Error(`Unsupported chain namespace: ${chain.chainNamespace}`);
});
const loginSettings = {
optionalNamespaces: getRequiredNamespaces(chainNamespaces)
};
return {
connectorSettings,
loginSettings
};
};
exports.getNamespacesFromChains = getNamespacesFromChains;
exports.getRequiredNamespaces = getRequiredNamespaces;
exports.getSupportedEventsByNamespace = getSupportedEventsByNamespace;
exports.getSupportedMethodsByNamespace = getSupportedMethodsByNamespace;
exports.getWalletConnectV2Settings = getWalletConnectV2Settings;