UNPKG

@web3auth/no-modal

Version:
130 lines (126 loc) 5.35 kB
'use strict'; 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;