@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
JavaScript
;
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