UNPKG

@safe-global/protocol-kit

Version:

SDK that facilitates the interaction with Safe Smart Accounts

1,259 lines (1,242 loc) 345 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __decorateClass = (decorators, target, key, kind) => { var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target; for (var i = decorators.length - 1, decorator; i >= 0; i--) if (decorator = decorators[i]) result = (kind ? decorator(target, key, result) : decorator(result)) || result; if (kind && result) __defProp(target, key, result); return result; }; // src/index.ts var src_exports = {}; __export(src_exports, { ContractManager: () => contractManager_default, CreateCallBaseContract: () => CreateCallBaseContract_default, DEFAULT_SAFE_VERSION: () => DEFAULT_SAFE_VERSION, EthSafeMessage: () => SafeMessage_default, EthSafeSignature: () => EthSafeSignature, EthSafeTransaction: () => SafeTransaction_default, MultiSendBaseContract: () => MultiSendBaseContract_default, MultiSendCallOnlyBaseContract: () => MultiSendCallOnlyBaseContract_default, PREDETERMINED_SALT_NONCE: () => PREDETERMINED_SALT_NONCE, SafeBaseContract: () => SafeBaseContract_default, SafeFeature: () => SafeFeature, SafeProvider: () => SafeProvider_default, SafeProxyFactoryBaseContract: () => SafeProxyFactoryBaseContract_default, SignMessageLibBaseContract: () => SignMessageLibBaseContract_default, adjustVInSignature: () => adjustVInSignature, buildContractSignature: () => buildContractSignature, buildSignatureBytes: () => buildSignatureBytes, calculateSafeMessageHash: () => calculateSafeMessageHash, calculateSafeTransactionHash: () => calculateSafeTransactionHash, createERC20TokenTransferTransaction: () => createERC20TokenTransferTransaction, createPasskeyClient: () => createPasskeyClient, decodeMultiSendData: () => decodeMultiSendData, default: () => src_default, encodeCreateProxyWithNonce: () => encodeCreateProxyWithNonce, encodeMultiSendData: () => encodeMultiSendData, encodeSetupCallData: () => encodeSetupCallData, estimateSafeDeploymentGas: () => estimateSafeDeploymentGas, estimateSafeTxGas: () => estimateSafeTxGas, estimateTxBaseGas: () => estimateTxBaseGas, estimateTxGas: () => estimateTxGas, extractPasskeyData: () => extractPasskeyData, generateEIP712Signature: () => generateEIP712Signature, generateOnChainIdentifier: () => generateOnChainIdentifier_default, generatePreValidatedSignature: () => generatePreValidatedSignature, generateSignature: () => generateSignature, generateTypedData: () => generateTypedData, getChainIdFromEip3770NetworkPrefix: () => getChainIdFromEip3770NetworkPrefix, getCompatibilityFallbackHandlerContract: () => getCompatibilityFallbackHandlerContract, getCreateCallContract: () => getCreateCallContract, getERC20Decimals: () => getERC20Decimals, getEip3770NetworkPrefixFromChainId: () => getEip3770NetworkPrefixFromChainId, getEip712MessageTypes: () => getEip712MessageTypes, getEip712TxTypes: () => getEip712TxTypes, getExtensibleFallbackHandlerContract: () => getExtensibleFallbackHandlerContract, getMultiSendCallOnlyContract: () => getMultiSendCallOnlyContract, getMultiSendContract: () => getMultiSendContract, getP256VerifierAddress: () => getP256VerifierAddress, getPasskeyOwnerAddress: () => getPasskeyOwnerAddress_default, getPredictedSafeAddressInitCode: () => getPredictedSafeAddressInitCode, getSafeAddressFromDeploymentTx: () => getSafeAddressFromDeploymentTx, getSafeContract: () => getSafeContract, getSafeProxyFactoryContract: () => getSafeProxyFactoryContract, getSafeWebAuthnSharedSignerContract: () => getSafeWebAuthnSharedSignerContract, getSafeWebAuthnSignerFactoryContract: () => getSafeWebAuthnSignerFactoryContract, getSignMessageLibContract: () => getSignMessageLibContract, hasSafeFeature: () => hasSafeFeature, hashSafeMessage: () => hashSafeMessage, isGasTokenCompatibleWithHandlePayment: () => isGasTokenCompatibleWithHandlePayment, predictSafeAddress: () => predictSafeAddress, preimageSafeMessageHash: () => preimageSafeMessageHash, preimageSafeTransactionHash: () => preimageSafeTransactionHash, standardizeSafeTransactionData: () => standardizeSafeTransactionData, validateEip3770Address: () => validateEip3770Address, validateEthereumAddress: () => validateEthereumAddress }); module.exports = __toCommonJS(src_exports); // src/Safe.ts var import_types_kit37 = require("@safe-global/types-kit"); // src/contracts/utils.ts var import_viem13 = require("viem"); var import_actions10 = require("viem/actions"); // src/contracts/config.ts var import_safe_deployments = require("@safe-global/safe-deployments"); var import_safe_modules_deployments = require("@safe-global/safe-modules-deployments"); var DEFAULT_SAFE_VERSION = "1.4.1"; var safeDeploymentsVersions = { "1.5.0": { safeSingletonVersion: "1.5.0", safeSingletonL2Version: "1.5.0", safeProxyFactoryVersion: "1.5.0", compatibilityFallbackHandler: "1.5.0", extensibleFallbackHandler: "1.5.0", multiSendVersion: "1.5.0", multiSendCallOnlyVersion: "1.5.0", signMessageLibVersion: "1.5.0", createCallVersion: "1.5.0", simulateTxAccessorVersion: "1.5.0", safeWebAuthnSignerFactoryVersion: "0.2.1", safeWebAuthnSharedSignerVersion: "0.2.1" }, "1.4.1": { safeSingletonVersion: "1.4.1", safeSingletonL2Version: "1.4.1", safeProxyFactoryVersion: "1.4.1", compatibilityFallbackHandler: "1.4.1", multiSendVersion: "1.4.1", multiSendCallOnlyVersion: "1.4.1", signMessageLibVersion: "1.4.1", createCallVersion: "1.4.1", simulateTxAccessorVersion: "1.4.1", safeWebAuthnSignerFactoryVersion: "0.2.1", safeWebAuthnSharedSignerVersion: "0.2.1" }, "1.3.0": { safeSingletonVersion: "1.3.0", safeSingletonL2Version: "1.3.0", safeProxyFactoryVersion: "1.3.0", compatibilityFallbackHandler: "1.3.0", multiSendVersion: "1.3.0", multiSendCallOnlyVersion: "1.3.0", signMessageLibVersion: "1.3.0", createCallVersion: "1.3.0", simulateTxAccessorVersion: "1.3.0", safeWebAuthnSignerFactoryVersion: "0.2.1", safeWebAuthnSharedSignerVersion: "0.2.1" }, "1.2.0": { safeSingletonVersion: "1.2.0", safeSingletonL2Version: void 0, safeProxyFactoryVersion: "1.1.1", compatibilityFallbackHandler: "1.3.0", multiSendVersion: "1.1.1", multiSendCallOnlyVersion: "1.3.0", signMessageLibVersion: "1.3.0", createCallVersion: "1.3.0", safeWebAuthnSignerFactoryVersion: void 0, safeWebAuthnSharedSignerVersion: void 0 }, "1.1.1": { safeSingletonVersion: "1.1.1", safeSingletonL2Version: void 0, safeProxyFactoryVersion: "1.1.1", compatibilityFallbackHandler: "1.3.0", multiSendVersion: "1.1.1", multiSendCallOnlyVersion: "1.3.0", signMessageLibVersion: "1.3.0", createCallVersion: "1.3.0", safeWebAuthnSignerFactoryVersion: void 0, safeWebAuthnSharedSignerVersion: void 0 }, "1.0.0": { safeSingletonVersion: "1.0.0", safeSingletonL2Version: void 0, safeProxyFactoryVersion: "1.0.0", compatibilityFallbackHandler: "1.3.0", multiSendVersion: "1.1.1", multiSendCallOnlyVersion: "1.3.0", signMessageLibVersion: "1.3.0", createCallVersion: "1.3.0", safeWebAuthnSignerFactoryVersion: void 0, safeWebAuthnSharedSignerVersion: void 0 } }; var safeDeploymentsL1ChainIds = [ 1n // Ethereum Mainnet ]; var contractFunctions = { safeSingletonVersion: import_safe_deployments.getSafeSingletonDeployments, safeSingletonL2Version: import_safe_deployments.getSafeL2SingletonDeployments, safeProxyFactoryVersion: import_safe_deployments.getProxyFactoryDeployments, compatibilityFallbackHandler: import_safe_deployments.getCompatibilityFallbackHandlerDeployments, extensibleFallbackHandler: import_safe_deployments.getExtensibleFallbackHandlerDeployments, multiSendVersion: import_safe_deployments.getMultiSendDeployments, multiSendCallOnlyVersion: import_safe_deployments.getMultiSendCallOnlyDeployments, signMessageLibVersion: import_safe_deployments.getSignMessageLibDeployments, createCallVersion: import_safe_deployments.getCreateCallDeployments, simulateTxAccessorVersion: import_safe_deployments.getSimulateTxAccessorDeployments, safeWebAuthnSignerFactoryVersion: import_safe_modules_deployments.getSafeWebAuthnSignerFactoryDeployment, safeWebAuthnSharedSignerVersion: import_safe_modules_deployments.getSafeWebAuthnShareSignerDeployment }; function getContractDeployment(safeVersion, chainId, contractName3) { const contractVersion = safeDeploymentsVersions[safeVersion][contractName3]; const filters = { version: contractVersion, network: chainId.toString(), released: true }; const deployment = contractFunctions[contractName3](filters); return deployment; } function getContractInfo(contractAddress) { for (const [safeVersion, contracts] of Object.entries(safeDeploymentsVersions)) { for (const [contractName3, contractVersion] of Object.entries(contracts)) { const filters = { version: contractVersion, released: true }; const deployment = contractFunctions[contractName3]( filters ); if (deployment && deployment.networkAddresses) { for (const [, addresses] of Object.entries(deployment.networkAddresses)) { if (Array.isArray(addresses) && addresses.find((a) => a.toLowerCase() === contractAddress.toLowerCase()) || typeof addresses === "string" && addresses.toLowerCase() === contractAddress.toLowerCase()) { const types = Object.keys(deployment.deployments); const type = types.find( (t) => deployment.deployments[t]?.address.toLowerCase() === contractAddress.toLowerCase() ); if (type) { return { version: safeVersion, type, contractName: contractName3 }; } } } } } } return void 0; } // src/utils/constants.ts var import_viem = require("viem"); var ZERO_ADDRESS = import_viem.zeroAddress; var EMPTY_DATA = "0x"; var SENTINEL_ADDRESS = "0x0000000000000000000000000000000000000001"; // src/utils/address.ts function sameString(str1, str2) { return !!str1 && !!str2 && str1.toLowerCase() === str2.toLowerCase(); } function isZeroAddress(address) { return sameString(address, ZERO_ADDRESS); } function isSentinelAddress(address) { return sameString(address, SENTINEL_ADDRESS); } function isRestrictedAddress(address) { return isZeroAddress(address) || isSentinelAddress(address); } // src/utils/eip-3770/index.ts var import_viem2 = require("viem"); // src/utils/eip-3770/config.ts var networks = [ { chainId: 1n, shortName: "eth" }, { chainId: 3n, shortName: "rop" }, { chainId: 4n, shortName: "rin" }, { chainId: 5n, shortName: "gor" }, { chainId: 10n, shortName: "oeth" }, { chainId: 11n, shortName: "meta" }, { chainId: 12n, shortName: "kal" }, { chainId: 14n, shortName: "flr" }, { chainId: 16n, shortName: "cflr" }, { chainId: 18n, shortName: "tst" }, { chainId: 19n, shortName: "sgb" }, { chainId: 25n, shortName: "cro" }, { chainId: 28n, shortName: "bobarinkeby" }, { chainId: 30n, shortName: "rsk" }, { chainId: 31n, shortName: "trsk" }, { chainId: 39n, shortName: "u2u" }, { chainId: 40n, shortName: "telosevm" }, { chainId: 41n, shortName: "telosevmtestnet" }, { chainId: 42n, shortName: "lukso" }, { chainId: 43n, shortName: "pangolin" }, { chainId: 44n, shortName: "crab" }, { chainId: 46n, shortName: "darwinia" }, { chainId: 50n, shortName: "xdc" }, { chainId: 51n, shortName: "txdc" }, { chainId: 56n, shortName: "bnb" }, { chainId: 57n, shortName: "sys" }, { chainId: 61n, shortName: "etc" }, { chainId: 63n, shortName: "metc" }, { chainId: 69n, shortName: "okov" }, { chainId: 71n, shortName: "cfxtest" }, { chainId: 81n, shortName: "joc" }, { chainId: 82n, shortName: "meter" }, { chainId: 83n, shortName: "meter-test" }, { chainId: 88n, shortName: "vic" }, { chainId: 96n, shortName: "bkc" }, { chainId: 97n, shortName: "bnbt" }, { chainId: 98n, shortName: "six" }, { chainId: 100n, shortName: "gno" }, { chainId: 106n, shortName: "vlx" }, { chainId: 108n, shortName: "tt" }, { chainId: 109n, shortName: "shibariumecosystem" }, { chainId: 111n, shortName: "etl" }, { chainId: 114n, shortName: "c2flr" }, { chainId: 122n, shortName: "fuse" }, { chainId: 123n, shortName: "spark" }, { chainId: 130n, shortName: "unichain" }, { chainId: 133n, shortName: "HSKT" }, { chainId: 137n, shortName: "matic" }, { chainId: 143n, shortName: "mon" }, { chainId: 146n, shortName: "sonic" }, { chainId: 148n, shortName: "shimmerevm" }, { chainId: 150n, shortName: "sixt" }, { chainId: 151n, shortName: "rbn" }, { chainId: 153n, shortName: "rbn-testnet" }, { chainId: 155n, shortName: "tenet-testnet" }, { chainId: 169n, shortName: "manta" }, { chainId: 173n, shortName: "eni" }, { chainId: 177n, shortName: "hsk" }, { chainId: 179n, shortName: "abey" }, { chainId: 181n, shortName: "water" }, { chainId: 185n, shortName: "mint" }, { chainId: 195n, shortName: "tokb" }, { chainId: 196n, shortName: "okb" }, { chainId: 204n, shortName: "opbnb" }, { chainId: 228n, shortName: "fhe" }, { chainId: 232n, shortName: "lens" }, { chainId: 239n, shortName: "tacchain" }, { chainId: 240n, shortName: "zkTCRO" }, { chainId: 246n, shortName: "ewt" }, { chainId: 250n, shortName: "ftm" }, { chainId: 252n, shortName: "fraxtal" }, { chainId: 255n, shortName: "kroma" }, { chainId: 274n, shortName: "lachain" }, { chainId: 280n, shortName: "zksync-goerli" }, { chainId: 282n, shortName: "deprecated-zkTCRO" }, { chainId: 288n, shortName: "boba" }, { chainId: 291n, shortName: "orderly" }, { chainId: 295n, shortName: "hedera-mainnet" }, { chainId: 296n, shortName: "hedera-testnet" }, { chainId: 300n, shortName: "zksync-sepolia" }, { chainId: 314n, shortName: "filecoin" }, { chainId: 321n, shortName: "kcs" }, { chainId: 322n, shortName: "kcst" }, { chainId: 324n, shortName: "zksync" }, { chainId: 336n, shortName: "sdn" }, { chainId: 338n, shortName: "tcro" }, { chainId: 360n, shortName: "shape" }, { chainId: 369n, shortName: "pls" }, { chainId: 388n, shortName: "zkCRO" }, { chainId: 418n, shortName: "latestnet" }, { chainId: 420n, shortName: "ogor" }, { chainId: 424n, shortName: "PGN" }, { chainId: 466n, shortName: "appchain" }, { chainId: 478n, shortName: "formnetwork" }, { chainId: 480n, shortName: "wc" }, { chainId: 530n, shortName: "pundiai" }, { chainId: 545n, shortName: "flow-testnet" }, { chainId: 570n, shortName: "sys-rollux" }, { chainId: 588n, shortName: "metis-stardust" }, { chainId: 592n, shortName: "astr" }, { chainId: 595n, shortName: "maca" }, { chainId: 599n, shortName: "metis-goerli" }, { chainId: 648n, shortName: "ace" }, { chainId: 686n, shortName: "kar" }, { chainId: 690n, shortName: "redstone" }, { chainId: 698n, shortName: "Matchain" }, { chainId: 747n, shortName: "flow-mainnet" }, { chainId: 756n, shortName: "capx-testnet" }, { chainId: 757n, shortName: "capx" }, { chainId: 787n, shortName: "aca" }, { chainId: 841n, shortName: "tara" }, { chainId: 842n, shortName: "taratest" }, { chainId: 870n, shortName: "AMN" }, { chainId: 919n, shortName: "modesep" }, { chainId: 938n, shortName: "haust" }, { chainId: 943n, shortName: "t4pls" }, { chainId: 964n, shortName: "bittensor-evm-mainnet" }, { chainId: 970n, shortName: "ccn" }, { chainId: 988n, shortName: "stable" }, { chainId: 995n, shortName: "5ire" }, { chainId: 999n, shortName: "hyper_evm" }, { chainId: 1001n, shortName: "kaia-kairos" }, { chainId: 1008n, shortName: "eun" }, { chainId: 1030n, shortName: "cfx" }, { chainId: 1088n, shortName: "metis-andromeda" }, { chainId: 1101n, shortName: "zkevm" }, { chainId: 1111n, shortName: "wemix" }, { chainId: 1112n, shortName: "twemix" }, { chainId: 1114n, shortName: "tcore2" }, { chainId: 1115n, shortName: "tcore" }, { chainId: 1116n, shortName: "core" }, { chainId: 1125n, shortName: "taker" }, { chainId: 1135n, shortName: "lisk" }, { chainId: 1230n, shortName: "UltronTestnet" }, { chainId: 1231n, shortName: "UltronMainnet" }, { chainId: 1284n, shortName: "mbeam" }, { chainId: 1285n, shortName: "mriver" }, { chainId: 1287n, shortName: "mbase" }, { chainId: 1294n, shortName: "bobabeam" }, { chainId: 1301n, shortName: "unichain-sep" }, { chainId: 1315n, shortName: "story-aeneid" }, { chainId: 1328n, shortName: "sei-testnet" }, { chainId: 1329n, shortName: "sei" }, { chainId: 1337n, shortName: "geth" }, { chainId: 1424n, shortName: "perennial" }, { chainId: 1439n, shortName: "injective-testnet" }, { chainId: 1442n, shortName: "testnet-zkEVM-mango" }, { chainId: 1480n, shortName: "vana" }, { chainId: 1513n, shortName: "Story" }, { chainId: 1514n, shortName: "sty" }, { chainId: 1516n, shortName: "story-testnet" }, { chainId: 1559n, shortName: "tenet" }, { chainId: 1625n, shortName: "gravity" }, { chainId: 1663n, shortName: "Gobi" }, { chainId: 1672n, shortName: "pharos" }, { chainId: 1729n, shortName: "reya" }, { chainId: 1740n, shortName: "metall2-testnet" }, { chainId: 1750n, shortName: "metall2" }, { chainId: 1776n, shortName: "injective" }, { chainId: 1807n, shortName: "rana" }, { chainId: 1811n, shortName: "lif3-testnet" }, { chainId: 1868n, shortName: "soneium" }, { chainId: 1890n, shortName: "lightlink_phoenix" }, { chainId: 1891n, shortName: "lightlink_pegasus" }, { chainId: 1923n, shortName: "swellchain" }, { chainId: 1924n, shortName: "swellchain-sep" }, { chainId: 1946n, shortName: "soneium-minato" }, { chainId: 1984n, shortName: "euntest" }, { chainId: 1995n, shortName: "edxt" }, { chainId: 1998n, shortName: "kyoto-testnet" }, { chainId: 2000n, shortName: "dc" }, { chainId: 2001n, shortName: "milkada" }, { chainId: 2002n, shortName: "milkalgo" }, { chainId: 2008n, shortName: "cloudwalk_testnet" }, { chainId: 2019n, shortName: "pmint_test" }, { chainId: 2020n, shortName: "pmint" }, { chainId: 2021n, shortName: "edg" }, { chainId: 2039n, shortName: "aleph" }, { chainId: 2187n, shortName: "g7" }, { chainId: 2192n, shortName: "snax" }, { chainId: 2201n, shortName: "stable-testnet" }, { chainId: 2221n, shortName: "tkava" }, { chainId: 2222n, shortName: "kava" }, { chainId: 2331n, shortName: "rss3-testnet" }, { chainId: 2345n, shortName: "goat" }, { chainId: 2358n, shortName: "kroma-sepolia" }, { chainId: 2390n, shortName: "tacchain_2390-1" }, { chainId: 2391n, shortName: "tacchain_2391-1" }, { chainId: 2424n, shortName: "inevm-testnet" }, { chainId: 2442n, shortName: "zkevm-testnet-cardona" }, { chainId: 2522n, shortName: "fraxtal-testnet" }, { chainId: 2741n, shortName: "abstract" }, { chainId: 2787n, shortName: "creator-chain-mainnet" }, { chainId: 2810n, shortName: "hmorph" }, { chainId: 2818n, shortName: "morph" }, { chainId: 2910n, shortName: "morph-hoodi-testnet" }, { chainId: 3068n, shortName: "bfc" }, { chainId: 3111n, shortName: "alpha" }, { chainId: 3338n, shortName: "PEAQ" }, { chainId: 3501n, shortName: "JFIN" }, { chainId: 3636n, shortName: "BTNXt" }, { chainId: 3637n, shortName: "BTNX" }, { chainId: 3737n, shortName: "csb" }, { chainId: 3776n, shortName: "astrzk" }, { chainId: 4002n, shortName: "tftm" }, { chainId: 4061n, shortName: "Nahmii3Mainnet" }, { chainId: 4062n, shortName: "Nahmii3Testnet" }, { chainId: 4078n, shortName: "muster" }, { chainId: 4153n, shortName: "rise" }, { chainId: 4157n, shortName: "crossfi-testnet" }, { chainId: 4158n, shortName: "crossfi" }, { chainId: 4162n, shortName: "SXR" }, { chainId: 4202n, shortName: "lisksep" }, { chainId: 4217n, shortName: "tempo" }, { chainId: 4326n, shortName: "megaeth" }, { chainId: 4337n, shortName: "beam" }, { chainId: 4460n, shortName: "orderlyl2" }, { chainId: 4488n, shortName: "HYDRA" }, { chainId: 4509n, shortName: "SC" }, { chainId: 4653n, shortName: "gold" }, { chainId: 4661n, shortName: "appchaintestnet" }, { chainId: 4689n, shortName: "iotex-mainnet" }, { chainId: 4801n, shortName: "wcsep" }, { chainId: 4918n, shortName: "txvm" }, { chainId: 4919n, shortName: "xvm" }, { chainId: 5000n, shortName: "mantle" }, { chainId: 5001n, shortName: "mantle-testnet" }, { chainId: 5003n, shortName: "mnt-sep" }, { chainId: 5031n, shortName: "Somnia" }, { chainId: 5115n, shortName: "citrea-testnet" }, { chainId: 5165n, shortName: "ftn" }, { chainId: 5330n, shortName: "sseed" }, { chainId: 5464n, shortName: "saga" }, { chainId: 5611n, shortName: "obnbt" }, { chainId: 5700n, shortName: "tsys" }, { chainId: 5851n, shortName: "OntologyTestnet" }, { chainId: 5887n, shortName: "dukong" }, { chainId: 5888n, shortName: "mantrachain" }, { chainId: 6001n, shortName: "bouncebit-mainnet" }, { chainId: 6102n, shortName: "cascadia" }, { chainId: 6321n, shortName: "eaura" }, { chainId: 6322n, shortName: "aura" }, { chainId: 6342n, shortName: "megatest" }, { chainId: 6398n, shortName: "connext-sepolia" }, { chainId: 6688n, shortName: "iris" }, { chainId: 6880n, shortName: "mtt-network" }, { chainId: 6900n, shortName: "cataclysm-1" }, { chainId: 6911n, shortName: "nibiru-testnet-2" }, { chainId: 6942n, shortName: "laika" }, { chainId: 7000n, shortName: "zetachain-mainnet" }, { chainId: 7001n, shortName: "zetachain-testnet" }, { chainId: 7070n, shortName: "planq" }, { chainId: 7171n, shortName: "bitrock" }, { chainId: 7200n, shortName: "xsat" }, { chainId: 7208n, shortName: "nxra-mainnet" }, { chainId: 7332n, shortName: "EON" }, { chainId: 7336n, shortName: "pruvtestnet" }, { chainId: 7337n, shortName: "pruvmainnet" }, { chainId: 7341n, shortName: "shyft" }, { chainId: 7560n, shortName: "cyeth" }, { chainId: 7700n, shortName: "canto" }, { chainId: 7771n, shortName: "tbitrock" }, { chainId: 7897n, shortName: "arena-z" }, { chainId: 7979n, shortName: "dos" }, { chainId: 8008n, shortName: "polynomial" }, { chainId: 8150n, shortName: "alpen" }, { chainId: 8192n, shortName: "tqf" }, { chainId: 8194n, shortName: "ttqf" }, { chainId: 8217n, shortName: "kaia-mainnet" }, { chainId: 8329n, shortName: "lrz" }, { chainId: 8333n, shortName: "b3" }, { chainId: 8408n, shortName: "zentest" }, { chainId: 8453n, shortName: "base" }, { chainId: 8700n, shortName: "ACN" }, { chainId: 8765n, shortName: "ward" }, { chainId: 8801n, shortName: "okto-testnet" }, { chainId: 8822n, shortName: "iotaevm" }, { chainId: 8844n, shortName: "THYDRA" }, { chainId: 9000n, shortName: "evmos-testnet" }, { chainId: 9001n, shortName: "evmos" }, { chainId: 9069n, shortName: "AP3X" }, { chainId: 9070n, shortName: "tAP3X" }, { chainId: 9369n, shortName: "z" }, { chainId: 9700n, shortName: "MainnetDev" }, { chainId: 9728n, shortName: "boba-testnet" }, { chainId: 9745n, shortName: "plasma" }, { chainId: 9746n, shortName: "plasma-testnet" }, { chainId: 10000n, shortName: "smartbch" }, { chainId: 10001n, shortName: "smartbchtest" }, { chainId: 10081n, shortName: "joct" }, { chainId: 10143n, shortName: "mon-testnet" }, { chainId: 10200n, shortName: "chi" }, { chainId: 10242n, shortName: "aa" }, { chainId: 10243n, shortName: "aat" }, { chainId: 10849n, shortName: "lamina1" }, { chainId: 10888n, shortName: "gameswift-chain-testnet" }, { chainId: 11011n, shortName: "shapesep" }, { chainId: 11111n, shortName: "WAGMI" }, { chainId: 11124n, shortName: "abstract-sepolia" }, { chainId: 11235n, shortName: "islm" }, { chainId: 11417n, shortName: "anq-testnet" }, { chainId: 11437n, shortName: "shyftt" }, { chainId: 11501n, shortName: "bevm" }, { chainId: 11503n, shortName: "bevm-test" }, { chainId: 11820n, shortName: "artela-mainnet" }, { chainId: 11891n, shortName: "Arianee" }, { chainId: 12324n, shortName: "l3x" }, { chainId: 12325n, shortName: "l3x-testnet" }, { chainId: 12357n, shortName: "rei-testnet" }, { chainId: 12553n, shortName: "rss3" }, { chainId: 13337n, shortName: "beam-testnet" }, { chainId: 13371n, shortName: "imx" }, { chainId: 13441n, shortName: "bridgeless" }, { chainId: 13473n, shortName: "imx-testnet" }, { chainId: 13505n, shortName: "gravitysep" }, { chainId: 13746n, shortName: "g7t" }, { chainId: 14601n, shortName: "sonic-testnet" }, { chainId: 14800n, shortName: "vana-moksha" }, { chainId: 16661n, shortName: "0g" }, { chainId: 17000n, shortName: "holesky" }, { chainId: 17069n, shortName: "garnet" }, { chainId: 17172n, shortName: "eclipse" }, { chainId: 18231n, shortName: "unreal-old" }, { chainId: 18233n, shortName: "unreal" }, { chainId: 18880n, shortName: "expchain" }, { chainId: 20994n, shortName: "fluent-testnet" }, { chainId: 22776n, shortName: "mapo" }, { chainId: 23294n, shortName: "sapphire" }, { chainId: 23295n, shortName: "sapphire-testnet" }, { chainId: 24101n, shortName: "incentiv" }, { chainId: 25327n, shortName: "Everclear" }, { chainId: 25363n, shortName: "fluent" }, { chainId: 26888n, shortName: "tABCore" }, { chainId: 28802n, shortName: "tcent" }, { chainId: 28882n, shortName: "BobaSepolia" }, { chainId: 28979n, shortName: "kimbonet-testnet" }, { chainId: 30303n, shortName: "Ethiq" }, { chainId: 31611n, shortName: "mezo-testnet" }, { chainId: 31612n, shortName: "mezo" }, { chainId: 32323n, shortName: "basedai" }, { chainId: 32380n, shortName: "paix" }, { chainId: 32769n, shortName: "zil" }, { chainId: 32770n, shortName: "zq2-proto-mainnet" }, { chainId: 33101n, shortName: "zil-testnet" }, { chainId: 33111n, shortName: "curtis" }, { chainId: 33139n, shortName: "apechain" }, { chainId: 33401n, shortName: "slingshot" }, { chainId: 34443n, shortName: "mode" }, { chainId: 35441n, shortName: "q" }, { chainId: 35443n, shortName: "q-testnet" }, { chainId: 36888n, shortName: "abcore" }, { chainId: 36900n, shortName: "adi" }, { chainId: 37111n, shortName: "lens-sepolia" }, { chainId: 41455n, shortName: "aleph-zero" }, { chainId: 41923n, shortName: "edu-chain" }, { chainId: 42161n, shortName: "arb1" }, { chainId: 42170n, shortName: "arb-nova" }, { chainId: 42220n, shortName: "celo" }, { chainId: 42421n, shortName: "rwa" }, { chainId: 42431n, shortName: "tempo-moderato" }, { chainId: 42793n, shortName: "etlk" }, { chainId: 43111n, shortName: "hemi" }, { chainId: 43113n, shortName: "fuji" }, { chainId: 43114n, shortName: "avax" }, { chainId: 43288n, shortName: "boba-avax" }, { chainId: 43419n, shortName: "gunz-mainnet" }, { chainId: 44787n, shortName: "alfa" }, { chainId: 45000n, shortName: "autobahnnetwork" }, { chainId: 47763n, shortName: "neox-mainnet" }, { chainId: 47805n, shortName: "rei" }, { chainId: 48898n, shortName: "zircuit-garfield-testnet" }, { chainId: 48899n, shortName: "zircuit-testnet" }, { chainId: 48900n, shortName: "zircuit-mainnet" }, { chainId: 49088n, shortName: "tbfc" }, { chainId: 49321n, shortName: "Stork" }, { chainId: 50104n, shortName: "sophon" }, { chainId: 50312n, shortName: "SomniaTestnet" }, { chainId: 52924n, shortName: "lazai" }, { chainId: 53302n, shortName: "seedsep" }, { chainId: 53456n, shortName: "birdlayer" }, { chainId: 53457n, shortName: "dodochain" }, { chainId: 54211n, shortName: "islmt" }, { chainId: 55244n, shortName: "spn" }, { chainId: 56288n, shortName: "boba-bnb" }, { chainId: 57000n, shortName: "tsys-rollux" }, { chainId: 57054n, shortName: "blaze" }, { chainId: 57073n, shortName: "ink" }, { chainId: 58008n, shortName: "sepPGN" }, { chainId: 59140n, shortName: "linea-goerli" }, { chainId: 59141n, shortName: "linea-sepolia" }, { chainId: 59144n, shortName: "linea" }, { chainId: 59902n, shortName: "metis-sepolia" }, { chainId: 60808n, shortName: "bob" }, { chainId: 61166n, shortName: "treasure" }, { chainId: 66665n, shortName: "ceth" }, { chainId: 71401n, shortName: "gw-testnet-v1" }, { chainId: 71402n, shortName: "gw-mainnet-v1" }, { chainId: 72080n, shortName: "nxra-testnet" }, { chainId: 73799n, shortName: "vt" }, { chainId: 80001n, shortName: "maticmum" }, { chainId: 80002n, shortName: "polygonamoy" }, { chainId: 80069n, shortName: "berachain-bepolia" }, { chainId: 80084n, shortName: "berachainbArtio" }, { chainId: 80085n, shortName: "berachainArtio" }, { chainId: 80094n, shortName: "berachain" }, { chainId: 81224n, shortName: "Codex" }, { chainId: 81457n, shortName: "blastmainnet" }, { chainId: 83291n, shortName: "lrz-testnet" }, { chainId: 84531n, shortName: "basegor" }, { chainId: 84532n, shortName: "basesep" }, { chainId: 88811n, shortName: "unit0-mainnet" }, { chainId: 88817n, shortName: "unit0-testnet" }, { chainId: 88882n, shortName: "chzspicy" }, { chainId: 88888n, shortName: "chiliz" }, { chainId: 90001n, shortName: "dhobyghaut" }, { chainId: 91342n, shortName: "giwasepolia" }, { chainId: 97435n, shortName: "sling" }, { chainId: 98864n, shortName: "plume-devnet" }, { chainId: 98865n, shortName: "plume" }, { chainId: 98866n, shortName: "plume-mainnet" }, { chainId: 98867n, shortName: "plume-testnet" }, { chainId: 98875n, shortName: "nil" }, { chainId: 98985n, shortName: "superposition-testnet" }, { chainId: 102030n, shortName: "ctc" }, { chainId: 103454n, shortName: "masatest" }, { chainId: 105105n, shortName: "stratis" }, { chainId: 111188n, shortName: "re-al" }, { chainId: 127823n, shortName: "etls" }, { chainId: 128123n, shortName: "etlt" }, { chainId: 167000n, shortName: "tko-mainnet" }, { chainId: 167008n, shortName: "tko-katla" }, { chainId: 167009n, shortName: "tko-hekla" }, { chainId: 167013n, shortName: "tko-hoodi" }, { chainId: 175188n, shortName: "lpy" }, { chainId: 181228n, shortName: "hpp-sepolia" }, { chainId: 190415n, shortName: "hpp-mainnet" }, { chainId: 200101n, shortName: "milktada" }, { chainId: 200202n, shortName: "milktalgo" }, { chainId: 200810n, shortName: "btrt" }, { chainId: 200901n, shortName: "btr" }, { chainId: 205205n, shortName: "auroria" }, { chainId: 210425n, shortName: "platon" }, { chainId: 222888n, shortName: "mocat" }, { chainId: 278701n, shortName: "creator-chain-testnet" }, { chainId: 314159n, shortName: "filecoin-calibration" }, { chainId: 325000n, shortName: "CampV2" }, { chainId: 328527n, shortName: "nal" }, { chainId: 333999n, shortName: "olympus" }, { chainId: 369369n, shortName: "den-mainnet" }, { chainId: 381931n, shortName: "metal" }, { chainId: 421611n, shortName: "arb-rinkeby" }, { chainId: 421613n, shortName: "arb-goerli" }, { chainId: 421614n, shortName: "arb-sep" }, { chainId: 444444n, shortName: "syndr" }, { chainId: 490000n, shortName: "ATN" }, { chainId: 511111n, shortName: "alpha-testnet" }, { chainId: 534351n, shortName: "scr-sepolia" }, { chainId: 534352n, shortName: "scr" }, { chainId: 534353n, shortName: "scr-alpha" }, { chainId: 543210n, shortName: "zero-network" }, { chainId: 555666n, shortName: "eclipset" }, { chainId: 560048n, shortName: "hoe" }, { chainId: 622277n, shortName: "rth" }, { chainId: 656476n, shortName: "open-campus-codex" }, { chainId: 657468n, shortName: "ethereal-testnet" }, { chainId: 660279n, shortName: "xai" }, { chainId: 668668n, shortName: "cnw" }, { chainId: 688688n, shortName: "pharos-testnet" }, { chainId: 688689n, shortName: "pharos-atlantic" }, { chainId: 695569n, shortName: "pyrope" }, { chainId: 713715n, shortName: "sei-devnet" }, { chainId: 743111n, shortName: "hemi-sep" }, { chainId: 747474n, shortName: "katana" }, { chainId: 763373n, shortName: "inksepolia" }, { chainId: 763375n, shortName: "surge-testnet" }, { chainId: 764984n, shortName: "lamina1test" }, { chainId: 808813n, shortName: "bob-sepolia" }, { chainId: 810180n, shortName: "zklink-nova" }, { chainId: 839999n, shortName: "txsat" }, { chainId: 853211n, shortName: "haqq-testethiq" }, { chainId: 978657n, shortName: "treasure-ruby" }, { chainId: 984122n, shortName: "forma" }, { chainId: 1000101n, shortName: "xo" }, { chainId: 1440000n, shortName: "xrplevm" }, { chainId: 1449000n, shortName: "xrplevmtestnet" }, { chainId: 1501869n, shortName: "water9" }, { chainId: 2206132n, shortName: "platondev2" }, { chainId: 2632500n, shortName: "coti" }, { chainId: 3441006n, shortName: "mantaSepoliaTestnet" }, { chainId: 4457845n, shortName: "zero-sepolia" }, { chainId: 5042002n, shortName: "arc-testnet" }, { chainId: 5064014n, shortName: "ethereal" }, { chainId: 6038361n, shortName: "azkyt" }, { chainId: 6281971n, shortName: "dogeos-chykyu" }, { chainId: 6985385n, shortName: "hp" }, { chainId: 7225878n, shortName: "saakuru" }, { chainId: 7777777n, shortName: "zora" }, { chainId: 9999999n, shortName: "fluence" }, { chainId: 11142220n, shortName: "celo-sep" }, { chainId: 11155111n, shortName: "sep" }, { chainId: 11155420n, shortName: "opsep" }, { chainId: 11155931n, shortName: "rise-testnet" }, { chainId: 12227332n, shortName: "neox-t4" }, { chainId: 13374202n, shortName: "ethereal-testnet-0" }, { chainId: 13863860n, shortName: "sis" }, { chainId: 20250407n, shortName: "platondev3" }, { chainId: 21000000n, shortName: "corn" }, { chainId: 52164803n, shortName: "fluence-testnet" }, { chainId: 65100004n, shortName: "piccadilly-04" }, { chainId: 94204209n, shortName: "polygon-blackberry" }, { chainId: 111557560n, shortName: "cysep" }, { chainId: 123420111n, shortName: "opcelestia-raspberry" }, { chainId: 161221135n, shortName: "plume-testnet-legacy" }, { chainId: 168587773n, shortName: "blastsepolia" }, { chainId: 222000222n, shortName: "kanazawa" }, { chainId: 245022926n, shortName: "neonevm-devnet" }, { chainId: 245022934n, shortName: "neonevm-mainnet" }, { chainId: 253368190n, shortName: "flame" }, { chainId: 328527624n, shortName: "nalsep" }, { chainId: 333000333n, shortName: "meld" }, { chainId: 476462898n, shortName: "Skopje" }, { chainId: 531050104n, shortName: "sophon-testnet" }, { chainId: 531050204n, shortName: "sophon-os-testnet" }, { chainId: 666666666n, shortName: "degen-chain" }, { chainId: 888888888n, shortName: "ancient8" }, { chainId: 994873017n, shortName: "lumia-mainnet" }, { chainId: 999999999n, shortName: "zsep" }, { chainId: 1313161554n, shortName: "aurora" }, { chainId: 1313161555n, shortName: "aurora-testnet" }, { chainId: 1417429182n, shortName: "zephyr" }, { chainId: 1511670449n, shortName: "GPT" }, { chainId: 1570754601n, shortName: "hst-test" }, { chainId: 1660990954n, shortName: "sn-sepolia" }, { chainId: 1666600000n, shortName: "hmy-s0" }, { chainId: 1666700000n, shortName: "hmy-b-s0" }, { chainId: 1952959480n, shortName: "lumiatestnet" }, { chainId: 2030232745n, shortName: "lumia-beam-testnet" }, { chainId: 3735928814n, shortName: "edent" }, { chainId: 11297108099n, shortName: "tpalm" }, { chainId: 11297108109n, shortName: "palm" }, { chainId: 30143370385n, shortName: "BUB" }, { chainId: 37714555429n, shortName: "xaitestnet" }, { chainId: 88153591557n, shortName: "arb-blueberry" }, { chainId: 123420000220n, shortName: "fluence-stage" }, { chainId: 920637907288165n, shortName: "kkrt-starknet-sepolia" } ]; try { if (process.env.TEST_NETWORK === "hardhat") { networks.push({ shortName: "local", chainId: 31337n }); } } catch { } // src/utils/eip-3770/index.ts function parseEip3770Address(fullAddress) { const parts = fullAddress.split(":"); const address = parts.length > 1 ? parts[1] : parts[0]; const prefix = parts.length > 1 ? parts[0] : ""; return { prefix, address }; } function getEip3770NetworkPrefixFromChainId(chainId) { const network = networks.find((network2) => chainId === network2.chainId); if (!network) { throw new Error("No network prefix supported for the current chainId"); } return network.shortName; } function getChainIdFromEip3770NetworkPrefix(prefix) { const network = networks.find(({ shortName }) => shortName === prefix); if (!network) { throw new Error("No chainId found for the given network prefix"); } return network.chainId; } function isValidEip3770NetworkPrefix(prefix) { return networks.some(({ shortName }) => shortName === prefix); } function validateEip3770NetworkPrefix(prefix, currentChainId) { const isCurrentNetworkPrefix = prefix === getEip3770NetworkPrefixFromChainId(currentChainId); if (!isValidEip3770NetworkPrefix(prefix) || !isCurrentNetworkPrefix) { throw new Error("The network prefix must match the current network"); } } function validateEthereumAddress(address) { if (!(0, import_viem2.isAddress)(address)) { throw new Error(`Invalid Ethereum address ${address}`); } } function validateEip3770Address(fullAddress, currentChainId) { const { address, prefix } = parseEip3770Address(fullAddress); validateEthereumAddress(address); if (prefix) { validateEip3770NetworkPrefix(prefix, currentChainId); } return { address, prefix }; } // src/utils/eip-712/index.ts var import_viem5 = require("viem"); var import_satisfies = __toESM(require("semver/functions/satisfies.js")); // src/utils/eip-712/encode.ts var import_viem4 = require("viem"); // src/utils/types.ts var import_viem3 = require("viem"); var allChains = __toESM(require("viem/chains")); function isSafeConfigWithPredictedSafe(config) { return config.predictedSafe !== void 0; } function asHash(hash) { return hash; } function asHex(hex) { return (0, import_viem3.isHex)(hex) ? hex : `0x${hex}`; } function getChainById(chainId) { const chain = Object.values(allChains).find((chain2) => chain2.id === Number(chainId)); if (chain) { return chain; } else { return (0, import_viem3.defineChain)({ id: Number(chainId), name: "Custom", nativeCurrency: { decimals: import_viem3.etherUnits.wei, name: "Ether", symbol: "ETH" }, rpcUrls: { default: { http: [], webSocket: [] } } }); } } // src/utils/eip-712/encode.ts function encodeField({ types, name, type, value }) { if (types[type] !== void 0) { return [{ type: "bytes32" }, (0, import_viem4.keccak256)(encodeData({ data: value, primaryType: type, types }))]; } if (type === "bytes") { const prepend = value.length % 2 ? "0" : ""; value = `0x${prepend + value.slice(2)}`; return [{ type: "bytes32" }, (0, import_viem4.keccak256)(value)]; } if (type === "string") return [{ type: "bytes32" }, (0, import_viem4.keccak256)((0, import_viem4.toHex)(value))]; if (type.lastIndexOf("]") === type.length - 1) { const parsedType = type.slice(0, type.lastIndexOf("[")); const typeValuePairs = value.map( (item) => encodeField({ name, type: parsedType, types, value: item }) ); return [ { type: "bytes32" }, (0, import_viem4.keccak256)( (0, import_viem4.encodeAbiParameters)( typeValuePairs.map(([t]) => t), typeValuePairs.map(([, v]) => v) ) ) ]; } return [{ type }, value]; } function findTypeDependencies({ primaryType: primaryType_, types }, results = /* @__PURE__ */ new Set()) { const match = primaryType_.match(/^\w*/u); const primaryType = match?.[0] || ""; if (results.has(primaryType) || types[primaryType] === void 0) { return results; } results.add(primaryType); for (const field of types[primaryType]) { findTypeDependencies({ primaryType: field.type, types }, results); } return results; } function encodeType({ primaryType, types }) { let result = ""; const unsortedDeps = findTypeDependencies({ primaryType, types }); unsortedDeps.delete(primaryType); const deps = [primaryType, ...Array.from(unsortedDeps).sort()]; for (const type of deps) { result += `${type}(${types[type].map(({ name, type: t }) => `${t} ${name}`).join(",")})`; } return result; } function hashType({ primaryType, types }) { const encodedHashType = (0, import_viem4.toHex)(encodeType({ primaryType, types })); return (0, import_viem4.keccak256)(encodedHashType); } function encodeData({ data, primaryType, types }) { const encodedTypes = [{ type: "bytes32" }]; const encodedValues = [hashType({ primaryType, types })]; for (const field of types[primaryType]) { const [type, value] = encodeField({ types, name: field.name, type: field.type, value: data[field.name] }); encodedTypes.push(type); encodedValues.push(value); } return (0, import_viem4.encodeAbiParameters)(encodedTypes, encodedValues); } function hashStruct({ data, primaryType, types }) { const encoded = encodeData({ data, primaryType, types }); return (0, import_viem4.keccak256)(encoded); } function deducePrimaryType(types) { return Object.keys(types)[0]; } function hashTypedData(typedData) { const data = encodeTypedData(typedData); return (0, import_viem4.keccak256)(asHex(data)); } function encodeTypedData(typedData) { typedData.primaryType = !typedData?.primaryType ? deducePrimaryType(typedData.types) : typedData?.primaryType; const { domain = {}, message, primaryType } = typedData; const types = { EIP712Domain: (0, import_viem4.getTypesForEIP712Domain)({ domain }), ...typedData.types }; (0, import_viem4.validateTypedData)({ domain, message, primaryType, types }); const parts = ["0x1901"]; if (domain) parts.push( (0, import_viem4.hashDomain)({ domain, types }) ); if (primaryType !== "EIP712Domain") parts.push( hashStruct({ data: message, primaryType, types }) ); return (0, import_viem4.concat)(parts); } // src/utils/eip-712/index.ts var EQ_OR_GT_1_3_0 = ">=1.3.0"; var EIP712_DOMAIN_BEFORE_V130 = [ { type: "address", name: "verifyingContract" } ]; var EIP712_DOMAIN = [ { type: "uint256", name: "chainId" }, { type: "address", name: "verifyingContract" } ]; function getEip712TxTypes(safeVersion) { const eip712WithChainId = (0, import_satisfies.default)(safeVersion, EQ_OR_GT_1_3_0); return { EIP712Domain: eip712WithChainId ? EIP712_DOMAIN : EIP712_DOMAIN_BEFORE_V130, SafeTx: [ { type: "address", name: "to" }, { type: "uint256", name: "value" }, { type: "bytes", name: "data" }, { type: "uint8", name: "operation" }, { type: "uint256", name: "safeTxGas" }, { type: "uint256", name: "baseGas" }, { type: "uint256", name: "gasPrice" }, { type: "address", name: "gasToken" }, { type: "address", name: "refundReceiver" }, { type: "uint256", name: "nonce" } ] }; } function getEip712MessageTypes(safeVersion) { const eip712WithChainId = (0, import_satisfies.default)(safeVersion, EQ_OR_GT_1_3_0); return { EIP712Domain: eip712WithChainId ? EIP712_DOMAIN : EIP712_DOMAIN_BEFORE_V130, SafeMessage: [{ type: "bytes", name: "message" }] }; } var hashTypedData2 = (typedData) => { return hashTypedData(typedData); }; var hashMessage = (message) => { return (0, import_viem5.hashMessage)(message); }; var hashSafeMessage = (message) => { return typeof message === "string" ? hashMessage(message) : hashTypedData2(message); }; function generateTypedData({ safeAddress, safeVersion, chainId, data }) { const isSafeTransactionDataType = data.hasOwnProperty("to"); const eip712WithChainId = (0, import_satisfies.default)(safeVersion, EQ_OR_GT_1_3_0); let typedData; if (isSafeTransactionDataType) { const txData = data; typedData = { types: getEip712TxTypes(safeVersion), domain: { verifyingContract: safeAddress }, primaryType: "SafeTx", message: { ...txData, value: txData.value, safeTxGas: txData.safeTxGas, baseGas: txData.baseGas, gasPrice: txData.gasPrice, nonce: txData.nonce } }; } else { const message = data; typedData = { types: getEip712MessageTypes(safeVersion), domain: { verifyingContract: safeAddress }, primaryType: "SafeMessage", message: { message: hashSafeMessage(message) } }; } if (eip712WithChainId) { typedData.domain.chainId = Number(chainId); } return typedData; } // src/utils/safeVersions.ts var import_satisfies2 = __toESM(require("semver/functions/satisfies.js")); var SafeFeature = /* @__PURE__ */ ((SafeFeature2) => { SafeFeature2["SAFE_TX_GAS_OPTIONAL"] = "SAFE_TX_GAS_OPTIONAL"; SafeFeature2["SAFE_TX_GUARDS"] = "SAFE_TX_GUARDS"; SafeFeature2["SAFE_FALLBACK_HANDLER"] = "SAFE_FALLBACK_HANDLER"; SafeFeature2["ETH_SIGN"] = "ETH_SIGN"; SafeFeature2["ACCOUNT_ABSTRACTION"] = "ACCOUNT_ABSTRACTION"; SafeFeature2["REQUIRED_TXGAS"] = "REQUIRED_TXGAS"; SafeFeature2["SIMULATE_AND_REVERT"] = "SIMULATE_AND_REVERT"; SafeFeature2["PASSKEY_SIGNER"] = "PASSKEY_SIGNER"; SafeFeature2["SAFE_L2_CONTRACTS"] = "SAFE_L2_CONTRACTS"; SafeFeature2["SAFE_MODULE_GUARD"] = "SAFE_MODULE_GUARD"; return SafeFeature2; })(SafeFeature || {}); var SAFE_FEATURES_BY_VERSION = { ["SAFE_TX_GAS_OPTIONAL" /* SAFE_TX_GAS_OPTIONAL */]: ">=1.3.0", ["SAFE_TX_GUARDS" /* SAFE_TX_GUARDS */]: ">=1.3.0", ["SAFE_FALLBACK_HANDLER" /* SAFE_FALLBACK_HANDLER */]: ">=1.1.1", ["ETH_SIGN" /* ETH_SIGN */]: ">=1.1.0", ["ACCOUNT_ABSTRACTION" /* ACCOUNT_ABSTRACTION */]: ">=1.3.0", ["REQUIRED_TXGAS" /* REQUIRED_TXGAS */]: "<=1.2.0", ["SIMULATE_AND_REVERT" /* SIMULATE_AND_REVERT */]: ">=1.3.0", ["PASSKEY_SIGNER" /* PASSKEY_SIGNER */]: ">=1.3.0", ["SAFE_L2_CONTRACTS" /* SAFE_L2_CONTRACTS */]: ">=1.3.0", ["SAFE_MODULE_GUARD" /* SAFE_MODULE_GUARD */]: ">=1.5.0" }; var hasSafeFeature = (feature, version) => { if (!(feature in SAFE_FEATURES_BY_VERSION)) { return false; } return (0, import_satisfies2.default)(version, SAFE_FEATURES_BY_VERSION[feature]); }; async function isSafeContractCompatibleWithRequiredTxGas(safeContract) { const safeVersion = safeContract.safeVersion; if (!hasSafeFeature("REQUIRED_TXGAS" /* REQUIRED_TXGAS */, safeVersion)) { throw new Error("Current version of the Safe does not support the requiredTxGas functionality"); } return safeContract; } async function isSafeContractCompatibleWithSimulateAndRevert(safeContract) { const safeVersion = safeContract.safeVersion; if (!hasSafeFeature("SIMULATE_AND_REVERT" /* SIMULATE_AND_REVERT */, safeVersion)) { throw new Error( "Current version of the Safe does not support the simulateAndRevert functionality" ); } return safeContract; } // src/utils/signatures/SafeSignature.ts var EthSafeSignature = class { /** * Creates an instance of a Safe signature. * * @param signer - Ethers signer * @param signature - The Safe signature * @returns The Safe signature instance */ constructor(signer, signature, isContractSignature = false) { this.signer = signer; this.data = signature; this.isContractSignature = isContractSignature; } /** * Returns the static part of the Safe signature. * * @returns The static part of the Safe signature */ staticPart(dynamicOffset) { if (this.isContractSignature) { return `${this.signer.slice(2).padStart(64, "0")}${dynamicOffset || ""}00`; } return this.data; } /** * Returns the dynamic part of the Safe signature. * * @returns The dynamic part of the Safe signature */ dynamicPart() { if (this.isContractSignature) { const dynamicPartLength = (this.data.slice(2).length / 2).toString(16).padStart(64, "0"); return `${dynamicPartLength}${this.data.slice(2)}`; } return ""; } }; // src/utils/signatures/utils.ts var import_viem6 = require("viem"); var import_types_kit = require("@safe-global/types-kit"); var import_satisfies3 = __toESM(require("semver/functions/satisfies.js")); function generatePreValidatedSignature(ownerAddress) { const signature = "0x000000000000000000000000" + ownerAddress.slice(2) + "000000000000000000000000000000000000000000000000000000000000000001"; return new EthSafeSignature(ownerAddress, signature); } async function isTxHashSignedWithPrefix(txHash, signature, ownerAddress) { let hasPrefix; try { const recoveredAddress = await (0,