UNPKG

@0xsequence/connect

Version:
141 lines 5.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sequenceWallet = sequenceWallet; const _0xsequence_1 = require("0xsequence"); const viem_1 = require("viem"); const wagmi_1 = require("wagmi"); const localStorage_js_1 = require("../../constants/localStorage.js"); const helpers_js_1 = require("../../utils/helpers.js"); sequenceWallet.type = 'sequence'; function sequenceWallet(params) { const { defaultNetwork, connect, walletAppURL } = params; const { projectAccessKey } = connect; return (0, wagmi_1.createConnector)(config => ({ id: 'sequence', name: 'Sequence', type: sequenceWallet.type, params, setEmail(email) { if (params.connect.settings) { params.connect.settings.signInWithEmail = email; } }, async setup() { const provider = await this.getProvider(); provider.on('chainChanged', (chainIdHex) => { config.emitter.emit('change', { chainId: (0, helpers_js_1.normalizeChainId)(chainIdHex) }); }); provider.on('disconnect', () => { this.onDisconnect(); }); }, async connect() { const provider = await this.getProvider(); if (!provider.isConnected()) { const localStorageTheme = await config.storage?.getItem(localStorage_js_1.LocalStorageKey.Theme); const ethAuthSettings = (await config.storage?.getItem(localStorage_js_1.LocalStorageKey.EthAuthSettings)) ?? {}; const connectOptionsWithTheme = { authorize: true, askForEmail: true, ...ethAuthSettings, ...connect, settings: { theme: localStorageTheme || 'dark', ...connect?.settings } }; const e = await provider.connect(connectOptionsWithTheme); if (e.error) { throw new viem_1.UserRejectedRequestError(new Error(e.error)); } if (!e.connected) { throw new viem_1.UserRejectedRequestError(new Error('Wallet connection rejected')); } const proofString = e.proof?.proofString; const proofTypedData = e.proof?.typedData; if (proofString && proofTypedData) { const jsonEthAuthProof = { proofString, typedData: proofTypedData }; await config.storage?.setItem(localStorage_js_1.LocalStorageKey.EthAuthProof, jsonEthAuthProof); } // Save the email used to sign in await config.storage?.setItem(localStorage_js_1.LocalStorageKey.WaasSignInEmail, e.email || null); } const accounts = await this.getAccounts(); return { accounts: [...accounts], chainId: provider.getChainId() }; }, async disconnect() { const provider = await this.getProvider(); provider.disconnect(); await config.storage?.removeItem(localStorage_js_1.LocalStorageKey.WaasSignInEmail); }, async getAccounts() { const provider = await this.getProvider(); const signer = provider.getSigner(); const account = (0, viem_1.getAddress)(await signer.getAddress()); return [account]; }, async getProvider() { try { const provider = _0xsequence_1.sequence.getWallet(); return provider; } catch (err) { if (!projectAccessKey) { throw 'projectAccessKey not found'; } const provider = _0xsequence_1.sequence.initWallet(projectAccessKey, { defaultNetwork, transports: { walletAppURL: walletAppURL || 'https://sequence.app' }, defaultEIP6492: true, analytics: false }); const chainId = provider.getChainId(); config.emitter.emit('change', { chainId: (0, helpers_js_1.normalizeChainId)(chainId) }); return provider; } }, async isAuthorized() { try { const account = await this.getAccounts(); return !!account; } catch (e) { return false; } }, async switchChain({ chainId }) { const provider = await this.getProvider(); const chain = config.chains.find(c => c.id === chainId) || config.chains[0]; provider.setDefaultChainId((0, helpers_js_1.normalizeChainId)(chainId)); config.emitter.emit('change', { chainId }); return chain; }, async getChainId() { const provider = await this.getProvider(); const chainId = provider.getChainId(); return chainId; }, async onAccountsChanged(accounts) { return { account: accounts[0] }; }, async onChainChanged(chain) { const provider = await this.getProvider(); config.emitter.emit('change', { chainId: (0, helpers_js_1.normalizeChainId)(chain) }); provider.setDefaultChainId((0, helpers_js_1.normalizeChainId)(chain)); }, async onConnect(_connectinfo) { }, async onDisconnect() { await config.storage?.removeItem(localStorage_js_1.LocalStorageKey.EthAuthProof); config.emitter.emit('disconnect'); } })); } //# sourceMappingURL=sequenceConnector.js.map