UNPKG

@thirdweb-dev/wallets

Version:

<p align="center"> <br /> <a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/js/blob/main/packages/sdk/logo.svg?raw=true" width="200" alt=""/></a> <br /> </p> <h1 align="center">thirdweb Wallet SDK</h1> <p align="center"> <a href="ht

221 lines (213 loc) • 8.34 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var classPrivateMethodGet = require('../../../../dist/classPrivateMethodGet-8801ecd5.cjs.dev.js'); var classPrivateFieldSet = require('../../../../dist/classPrivateFieldSet-f0dc2a42.cjs.dev.js'); var defineProperty = require('../../../../dist/defineProperty-21d22449.cjs.dev.js'); var BloctoSDK = require('@blocto/sdk'); var ethers = require('ethers'); var walletIds = require('../../../../dist/walletIds-2f745506.cjs.dev.js'); var url = require('../../../../dist/url-f53b640f.cjs.dev.js'); var WagmiConnector = require('../../../../dist/WagmiConnector-6ff7d562.cjs.dev.js'); var errors = require('../../../../dist/errors-323b40ec.cjs.dev.js'); var normalizeChainId = require('../../../../dist/normalizeChainId-8778491e.cjs.dev.js'); require('@thirdweb-dev/chains'); require('eventemitter3'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } var BloctoSDK__default = /*#__PURE__*/_interopDefault(BloctoSDK); var _provider = /*#__PURE__*/new WeakMap(); var _onAccountsChangedBind = /*#__PURE__*/new WeakMap(); var _onChainChangedBind = /*#__PURE__*/new WeakMap(); var _onDisconnectBind = /*#__PURE__*/new WeakMap(); var _isUserRejectedRequestError = /*#__PURE__*/new WeakSet(); var _handleConnectReset = /*#__PURE__*/new WeakSet(); class BloctoConnector extends WagmiConnector.WagmiConnector { constructor(_ref) { let { chains, options = {} } = _ref; super({ chains, options }); classPrivateMethodGet._classPrivateMethodInitSpec(this, _handleConnectReset); classPrivateMethodGet._classPrivateMethodInitSpec(this, _isUserRejectedRequestError); defineProperty._defineProperty(this, "id", walletIds.walletIds.blocto); defineProperty._defineProperty(this, "name", "Blocto"); defineProperty._defineProperty(this, "ready", true); classPrivateFieldSet._classPrivateFieldInitSpec(this, _provider, { writable: true, value: void 0 }); classPrivateFieldSet._classPrivateFieldInitSpec(this, _onAccountsChangedBind, { writable: true, value: void 0 }); classPrivateFieldSet._classPrivateFieldInitSpec(this, _onChainChangedBind, { writable: true, value: void 0 }); classPrivateFieldSet._classPrivateFieldInitSpec(this, _onDisconnectBind, { writable: true, value: void 0 }); classPrivateFieldSet._classPrivateFieldSet(this, _onAccountsChangedBind, this.onAccountsChanged.bind(this)); classPrivateFieldSet._classPrivateFieldSet(this, _onChainChangedBind, this.onChainChanged.bind(this)); classPrivateFieldSet._classPrivateFieldSet(this, _onDisconnectBind, this.onDisconnect.bind(this)); } async connect(config) { try { const provider = await this.getProvider(config); this.setupListeners(); this.emit("message", { type: "connecting" }); const accounts = await provider.request({ method: "eth_requestAccounts" }); const account = ethers.utils.getAddress(accounts[0]); const id = await this.getChainId(); const unsupported = this.isChainUnsupported(id); return { account, chain: { id, unsupported }, provider }; } catch (error) { classPrivateMethodGet._classPrivateMethodGet(this, _handleConnectReset, _handleConnectReset2).call(this); if (classPrivateMethodGet._classPrivateMethodGet(this, _isUserRejectedRequestError, _isUserRejectedRequestError2).call(this, error)) { throw new errors.UserRejectedRequestError(error); } throw error; } } async disconnect() { const provider = await this.getProvider(); await provider.request({ method: "wallet_disconnect" }); this.removeListeners(); classPrivateMethodGet._classPrivateMethodGet(this, _handleConnectReset, _handleConnectReset2).call(this); } async getAccount() { const provider = await this.getProvider(); const accounts = await provider.request({ method: "eth_accounts" }); const [address] = accounts || []; if (!address) { throw new Error("No accounts found"); } return address; } async getChainId() { const provider = await this.getProvider(); const chainId = await provider.request({ method: "eth_chainId" }); return normalizeChainId.normalizeChainId(chainId); } getProvider() { let { chainId } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (!classPrivateFieldSet._classPrivateFieldGet(this, _provider)) { const _chainId = chainId ?? this.options.chainId ?? this.chains[0]?.chainId ?? 1; const _rpc = this.chains.find(x => x.chainId === _chainId)?.rpc[0]; classPrivateFieldSet._classPrivateFieldSet(this, _provider, new BloctoSDK__default["default"]({ ethereum: { chainId: _chainId, rpc: _rpc }, appId: this.options.appId })?.ethereum); } if (!classPrivateFieldSet._classPrivateFieldGet(this, _provider)) { throw new errors.ConnectorNotFoundError(); } return Promise.resolve(classPrivateFieldSet._classPrivateFieldGet(this, _provider)); } async getSigner() { let { chainId } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; const [provider, account] = await Promise.all([this.getProvider(), this.getAccount()]); return new ethers.providers.Web3Provider(provider, chainId).getSigner(account); } async isAuthorized() { return !!classPrivateFieldSet._classPrivateFieldGet(this, _provider)?._blocto?.sessionKey ?? false; } async switchChain(chainId) { const provider = await this.getProvider(); const id = ethers.utils.hexValue(chainId); const chain = this.chains.find(x => x.chainId === chainId); if (!chain) { throw new errors.SwitchChainError(new Error("chain not found on connector.")); } const isBloctoSupportChain = provider._blocto.supportNetworkList[`${chainId}`]; if (!isBloctoSupportChain) { throw new errors.SwitchChainError(new Error(`Blocto unsupported chain: ${id}`)); } try { await provider.request({ method: "wallet_addEthereumChain", params: [{ chainId: id, rpcUrls: url.getValidPublicRPCUrl(chain) // no client id on purpose here }] }); await provider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: id }] }); return chain; } catch (error) { if (classPrivateMethodGet._classPrivateMethodGet(this, _isUserRejectedRequestError, _isUserRejectedRequestError2).call(this, error)) { throw new errors.UserRejectedRequestError(error); } throw new errors.SwitchChainError(error); } } onAccountsChanged() { // not supported yet } async onChainChanged(chain) { const id = normalizeChainId.normalizeChainId(chain); const unsupported = this.isChainUnsupported(id); const account = await this.getAccount(); this.emit("change", { chain: { id, unsupported }, account }); } onDisconnect() { this.emit("disconnect"); } async setupListeners() { const provider = await this.getProvider(); provider.on("accountsChanged", classPrivateFieldSet._classPrivateFieldGet(this, _onAccountsChangedBind)); provider.on("chainChanged", classPrivateFieldSet._classPrivateFieldGet(this, _onChainChangedBind)); provider.on("disconnect", classPrivateFieldSet._classPrivateFieldGet(this, _onDisconnectBind)); } async removeListeners() { const provider = await this.getProvider(); provider.off("accountsChanged", classPrivateFieldSet._classPrivateFieldGet(this, _onAccountsChangedBind)); provider.off("chainChanged", classPrivateFieldSet._classPrivateFieldGet(this, _onChainChangedBind)); provider.off("disconnect", classPrivateFieldSet._classPrivateFieldGet(this, _onDisconnectBind)); } } function _isUserRejectedRequestError2(error) { return /(user rejected)/i.test(error.message); } function _handleConnectReset2() { classPrivateFieldSet._classPrivateFieldSet(this, _provider, undefined); } exports.BloctoConnector = BloctoConnector;