UNPKG

@pushchain/ui-kit

Version:

Push Chain is a true universal L1 that is 100% EVM compatible. It allows developers to deploy once and make their apps instantly compatible with users from all other L1s (Ethereum, Solana, etc) with zero on-chain code change.

155 lines 6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.waapSignAndSendTransaction = exports.waapSignAuthorization = exports.waapSignTypedData = exports.waapSignMessage = exports.switchNetwork = exports.getWaapAccount = exports.getWaapAddress = exports.getWaapProvider = void 0; const viem_1 = require("viem"); const waapEvents_1 = require("./waapEvents"); const chains_1 = require("../walletProviders/ethereum/chains"); const signAuthorization_1 = require("../walletProviders/ethereum/signAuthorization"); const getWaapProvider = () => { if (typeof window === 'undefined') return null; return window.waap ?? null; }; exports.getWaapProvider = getWaapProvider; const getWaapAddress = async () => { const waap = (0, exports.getWaapProvider)(); const accounts = await waap.request({ method: "eth_accounts" }); const addr = accounts?.[0]; if (!addr) throw new Error("No WaaP account connected"); return addr; }; exports.getWaapAddress = getWaapAddress; const getWaapAccount = async () => { const provider = (0, exports.getWaapProvider)(); const accounts = (await provider.request({ method: "eth_accounts", })); if (!accounts || accounts.length === 0) { throw new Error("No connected WaaP account"); } return accounts[0]; }; exports.getWaapAccount = getWaapAccount; const switchNetwork = async (chainName) => { const network = chains_1.chains[chainName]; const provider = (0, exports.getWaapProvider)(); const hexNetworkId = (0, viem_1.toHex)(network.id); const currentChainId = await provider.request({ method: "eth_chainId", }); if (currentChainId === hexNetworkId) return; try { await provider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: hexNetworkId }] }); } catch (err) { try { await provider.request({ method: "wallet_addEthereumChain", params: [{ chainId: hexNetworkId, chainName: network.name, rpcUrls: network.rpcUrls.default.http, nativeCurrency: network.nativeCurrency, blockExplorerUrls: [network.blockExplorers?.default.url] }] }); } catch (addError) { console.error("Error switching network:", addError); throw addError; } } }; exports.switchNetwork = switchNetwork; const waapSignMessage = async (message) => { const provider = (0, exports.getWaapProvider)(); const accounts = (await provider.request({ method: "eth_accounts", })); if (!accounts || accounts.length === 0) { throw new Error("No connected Rabby account"); } const hexMessage = (0, viem_1.bytesToHex)(message); const signature = await provider.request({ method: "personal_sign", params: [hexMessage, accounts[0]], }); return (0, viem_1.hexToBytes)(signature); }; exports.waapSignMessage = waapSignMessage; const waapSignTypedData = async (typedData) => { const provider = (0, exports.getWaapProvider)(); const accounts = (await provider.request({ method: "eth_accounts", })); if (!accounts || accounts.length === 0) { throw new Error("No connected Rabby account"); } typedData.types = { EIP712Domain: [ { name: "version", type: "string" }, { name: "chainId", type: "uint256" }, { name: "verifyingContract", type: "address" }, ], UniversalPayload: typedData.types["UniversalPayload"], }; const signature = await provider.request({ method: "eth_signTypedData_v4", params: [accounts[0], JSON.stringify(typedData)], }); return (0, viem_1.hexToBytes)(signature); }; exports.waapSignTypedData = waapSignTypedData; const waapSignAuthorization = async (params) => { const provider = (0, exports.getWaapProvider)(); if (typeof provider?.signAuthorization === 'function') { const authorization = await provider.signAuthorization(params); return (0, signAuthorization_1.normalizeSignedAuthorization)(authorization, params); } if (typeof provider?.authorize === 'function') { return (0, signAuthorization_1.signAuthorizationWithEthersSigner)(provider, params); } throw new Error(signAuthorization_1.EIP_7702_UNSUPPORTED_ERROR); }; exports.waapSignAuthorization = waapSignAuthorization; const waapSignAndSendTransaction = async (txn) => { const provider = (0, exports.getWaapProvider)(); const accounts = (await provider.request({ method: "eth_accounts", })); if (!accounts || accounts.length === 0) { throw new Error("No connected Rabby account"); } const hex = (0, viem_1.bytesToHex)(txn); const parsed = (0, viem_1.parseTransaction)(hex); const txParams = { from: accounts[0], to: parsed.to, value: parsed.value ? "0x" + parsed.value.toString(16) : undefined, data: parsed.data, gas: parsed.gas ? "0x" + parsed.gas.toString(16) : undefined, maxPriorityFeePerGas: parsed.maxPriorityFeePerGas ? "0x" + parsed.maxPriorityFeePerGas.toString(16) : undefined, maxFeePerGas: parsed.maxFeePerGas ? "0x" + parsed.maxFeePerGas.toString(16) : undefined, }; const res = await provider.request({ method: "eth_sendTransaction", params: [txParams], async: true, }); if ((0, viem_1.isHash)(res)) return (0, viem_1.hexToBytes)(res); const pendingTxId = res?.pendingTxId; const txHash = await (0, waapEvents_1.waitForTxHashFromPendingTxId)(provider, pendingTxId); return (0, viem_1.hexToBytes)(txHash); }; exports.waapSignAndSendTransaction = waapSignAndSendTransaction; //# sourceMappingURL=waapProvider.js.map