UNPKG

@cometh/session-keys

Version:
2,317 lines (2,311 loc) 76 kB
// src/index.ts import { SmartSessionMode as SmartSessionMode2 } from "@rhinestone/module-sdk"; import { erc7579Actions } from "permissionless/actions/erc7579"; // src/abis/safe.ts var SafeAbi = [ { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address" } ], name: "AddedOwner", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "bytes32", name: "approvedHash", type: "bytes32" }, { indexed: true, internalType: "address", name: "owner", type: "address" } ], name: "ApproveHash", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "handler", type: "address" } ], name: "ChangedFallbackHandler", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "guard", type: "address" } ], name: "ChangedGuard", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "threshold", type: "uint256" } ], name: "ChangedThreshold", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "module", type: "address" } ], name: "DisabledModule", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "module", type: "address" } ], name: "EnabledModule", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "bytes32", name: "txHash", type: "bytes32" }, { indexed: false, internalType: "uint256", name: "payment", type: "uint256" } ], name: "ExecutionFailure", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "module", type: "address" } ], name: "ExecutionFromModuleFailure", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "module", type: "address" } ], name: "ExecutionFromModuleSuccess", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "bytes32", name: "txHash", type: "bytes32" }, { indexed: false, internalType: "uint256", name: "payment", type: "uint256" } ], name: "ExecutionSuccess", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address" } ], name: "RemovedOwner", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "module", type: "address" }, { indexed: false, internalType: "address", name: "to", type: "address" }, { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" } ], name: "SafeModuleTransaction", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "to", type: "address" }, { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, { indexed: false, internalType: "bytes", name: "data", type: "bytes" }, { indexed: false, internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, { indexed: false, internalType: "uint256", name: "safeTxGas", type: "uint256" }, { indexed: false, internalType: "uint256", name: "baseGas", type: "uint256" }, { indexed: false, internalType: "uint256", name: "gasPrice", type: "uint256" }, { indexed: false, internalType: "address", name: "gasToken", type: "address" }, { indexed: false, internalType: "address payable", name: "refundReceiver", type: "address" }, { indexed: false, internalType: "bytes", name: "signatures", type: "bytes" }, { indexed: false, internalType: "bytes", name: "additionalInfo", type: "bytes" } ], name: "SafeMultiSigTransaction", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "sender", type: "address" }, { indexed: false, internalType: "uint256", name: "value", type: "uint256" } ], name: "SafeReceived", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "initiator", type: "address" }, { indexed: false, internalType: "address[]", name: "owners", type: "address[]" }, { indexed: false, internalType: "uint256", name: "threshold", type: "uint256" }, { indexed: false, internalType: "address", name: "initializer", type: "address" }, { indexed: false, internalType: "address", name: "fallbackHandler", type: "address" } ], name: "SafeSetup", type: "event" }, { anonymous: false, inputs: [ { indexed: true, internalType: "bytes32", name: "msgHash", type: "bytes32" } ], name: "SignMsg", type: "event" }, { stateMutability: "nonpayable", type: "fallback" }, { inputs: [], name: "VERSION", outputs: [ { internalType: "string", name: "", type: "string" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "owner", type: "address" }, { internalType: "uint256", name: "_threshold", type: "uint256" } ], name: "addOwnerWithThreshold", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "bytes32", name: "hashToApprove", type: "bytes32" } ], name: "approveHash", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "", type: "address" }, { internalType: "bytes32", name: "", type: "bytes32" } ], name: "approvedHashes", outputs: [ { internalType: "uint256", name: "", type: "uint256" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "uint256", name: "_threshold", type: "uint256" } ], name: "changeThreshold", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "bytes32", name: "dataHash", type: "bytes32" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "bytes", name: "signatures", type: "bytes" }, { internalType: "uint256", name: "requiredSignatures", type: "uint256" } ], name: "checkNSignatures", outputs: [], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "bytes32", name: "dataHash", type: "bytes32" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "bytes", name: "signatures", type: "bytes" } ], name: "checkSignatures", outputs: [], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "prevModule", type: "address" }, { internalType: "address", name: "module", type: "address" } ], name: "disableModule", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [], name: "domainSeparator", outputs: [ { internalType: "bytes32", name: "", type: "bytes32" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "module", type: "address" } ], name: "enableModule", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, { internalType: "uint256", name: "safeTxGas", type: "uint256" }, { internalType: "uint256", name: "baseGas", type: "uint256" }, { internalType: "uint256", name: "gasPrice", type: "uint256" }, { internalType: "address", name: "gasToken", type: "address" }, { internalType: "address", name: "refundReceiver", type: "address" }, { internalType: "uint256", name: "_nonce", type: "uint256" } ], name: "encodeTransactionData", outputs: [ { internalType: "bytes", name: "", type: "bytes" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, { internalType: "uint256", name: "safeTxGas", type: "uint256" }, { internalType: "uint256", name: "baseGas", type: "uint256" }, { internalType: "uint256", name: "gasPrice", type: "uint256" }, { internalType: "address", name: "gasToken", type: "address" }, { internalType: "address payable", name: "refundReceiver", type: "address" }, { internalType: "bytes", name: "signatures", type: "bytes" } ], name: "execTransaction", outputs: [ { internalType: "bool", name: "", type: "bool" } ], stateMutability: "payable", type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } ], name: "execTransactionFromModule", outputs: [ { internalType: "bool", name: "success", type: "bool" } ], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" } ], name: "execTransactionFromModuleReturnData", outputs: [ { internalType: "bool", name: "success", type: "bool" }, { internalType: "bytes", name: "returnData", type: "bytes" } ], stateMutability: "nonpayable", type: "function" }, { inputs: [], name: "getChainId", outputs: [ { internalType: "uint256", name: "", type: "uint256" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "start", type: "address" }, { internalType: "uint256", name: "pageSize", type: "uint256" } ], name: "getModulesPaginated", outputs: [ { internalType: "address[]", name: "array", type: "address[]" }, { internalType: "address", name: "next", type: "address" } ], stateMutability: "view", type: "function" }, { inputs: [], name: "getOwners", outputs: [ { internalType: "address[]", name: "", type: "address[]" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "uint256", name: "offset", type: "uint256" }, { internalType: "uint256", name: "length", type: "uint256" } ], name: "getStorageAt", outputs: [ { internalType: "bytes", name: "", type: "bytes" } ], stateMutability: "view", type: "function" }, { inputs: [], name: "getThreshold", outputs: [ { internalType: "uint256", name: "", type: "uint256" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "to", type: "address" }, { internalType: "uint256", name: "value", type: "uint256" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "enum Enum.Operation", name: "operation", type: "uint8" }, { internalType: "uint256", name: "safeTxGas", type: "uint256" }, { internalType: "uint256", name: "baseGas", type: "uint256" }, { internalType: "uint256", name: "gasPrice", type: "uint256" }, { internalType: "address", name: "gasToken", type: "address" }, { internalType: "address", name: "refundReceiver", type: "address" }, { internalType: "uint256", name: "_nonce", type: "uint256" } ], name: "getTransactionHash", outputs: [ { internalType: "bytes32", name: "", type: "bytes32" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "module", type: "address" } ], name: "isModuleEnabled", outputs: [ { internalType: "bool", name: "", type: "bool" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "owner", type: "address" } ], name: "isOwner", outputs: [ { internalType: "bool", name: "", type: "bool" } ], stateMutability: "view", type: "function" }, { inputs: [], name: "nonce", outputs: [ { internalType: "uint256", name: "", type: "uint256" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "prevOwner", type: "address" }, { internalType: "address", name: "owner", type: "address" }, { internalType: "uint256", name: "_threshold", type: "uint256" } ], name: "removeOwner", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "handler", type: "address" } ], name: "setFallbackHandler", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "guard", type: "address" } ], name: "setGuard", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address[]", name: "_owners", type: "address[]" }, { internalType: "uint256", name: "_threshold", type: "uint256" }, { internalType: "address", name: "to", type: "address" }, { internalType: "bytes", name: "data", type: "bytes" }, { internalType: "address", name: "fallbackHandler", type: "address" }, { internalType: "address", name: "paymentToken", type: "address" }, { internalType: "uint256", name: "payment", type: "uint256" }, { internalType: "address payable", name: "paymentReceiver", type: "address" } ], name: "setup", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "bytes32", name: "", type: "bytes32" } ], name: "signedMessages", outputs: [ { internalType: "uint256", name: "", type: "uint256" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "targetContract", type: "address" }, { internalType: "bytes", name: "calldataPayload", type: "bytes" } ], name: "simulateAndRevert", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "prevOwner", type: "address" }, { internalType: "address", name: "oldOwner", type: "address" }, { internalType: "address", name: "newOwner", type: "address" } ], name: "swapOwner", outputs: [], stateMutability: "nonpayable", type: "function" }, { stateMutability: "payable", type: "receive" } ]; // src/constants.ts var SAFE_7579_ADDRESS = "0x7579EE8307284F293B1927136486880611F20002"; var LAUNCHPAD_ADDRESS = "0x7579011aB74c46090561ea277Ba79D510c6C00ff"; var hardcodeVerificationGasLimit7579 = 1000000n; var FALLBACK_TARGET_FLAG = "0x0000000000000000000000000000000000000001"; var FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = "0x00000001"; // src/7579/is7579Installed.ts import { isSmartAccountDeployed } from "permissionless"; import { http, createPublicClient } from "viem"; async function is7579Installed(client) { const smartAccountAddress = client.account?.address; const publicClient = client?.account?.client ?? createPublicClient({ chain: client.chain, transport: http(), cacheTime: 6e4, batch: { multicall: { wait: 50 } } }); createPublicClient({ chain: client.chain, transport: http(), cacheTime: 6e4, batch: { multicall: { wait: 50 } } }); const isDeployed = await isSmartAccountDeployed( publicClient, smartAccountAddress ); if (isDeployed) { const isFallbackSet = await publicClient.readContract({ address: smartAccountAddress, abi: SafeAbi, functionName: "isModuleEnabled", args: [SAFE_7579_ADDRESS] }); return isFallbackSet; } return false; } // src/modules/sessionKey/decorators/grantPermission.ts import { RHINESTONE_ATTESTER_ADDRESS, getSmartSessionsValidator } from "@rhinestone/module-sdk"; import { isSmartAccountDeployed as isSmartAccountDeployed2 } from "permissionless"; import { sendUserOperation } from "viem/account-abstraction"; import { encodeFunctionData as encodeFunctionData2, getAction, parseAbi } from "viem/utils"; // src/modules/sessionKey/decorators/preparePermission.ts import { SMART_SESSIONS_ADDRESS, encodeValidationData as encodeValidationData2, getPermissionId, getSudoPolicy } from "@rhinestone/module-sdk"; import { ChainNotFoundError } from "viem"; import { encodeFunctionData } from "viem/utils"; // src/modules/sessionKey/abi/smartSessionAbi.ts var SmartSessionAbi = [ { inputs: [{ internalType: "uint256", name: "index", type: "uint256" }], name: "AssociatedArray_OutOfBounds", type: "error" }, { inputs: [ { internalType: "uint64", name: "providedChainId", type: "uint64" } ], name: "ChainIdMismatch", type: "error" }, { inputs: [ { internalType: "uint64", name: "providedChainId", type: "uint64" } ], name: "ChainIdMismatch", type: "error" }, { inputs: [], name: "ForbiddenValidationData", type: "error" }, { inputs: [{ internalType: "uint256", name: "index", type: "uint256" }], name: "HashIndexOutOfBounds", type: "error" }, { inputs: [ { internalType: "bytes32", name: "providedHash", type: "bytes32" }, { internalType: "bytes32", name: "computedHash", type: "bytes32" } ], name: "HashMismatch", type: "error" }, { inputs: [ { internalType: "bytes32", name: "providedHash", type: "bytes32" }, { internalType: "bytes32", name: "computedHash", type: "bytes32" } ], name: "HashMismatch", type: "error" }, { inputs: [], name: "InvalidActionId", type: "error" }, { inputs: [], name: "InvalidCallTarget", type: "error" }, { inputs: [], name: "InvalidData", type: "error" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "bytes32", name: "hash", type: "bytes32" } ], name: "InvalidEnableSignature", type: "error" }, { inputs: [ { internalType: "contract ISessionValidator", name: "sessionValidator", type: "address" } ], name: "InvalidISessionValidator", type: "error" }, { inputs: [], name: "InvalidMode", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "InvalidPermissionId", type: "error" }, { inputs: [], name: "InvalidSelfCall", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "InvalidSession", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "sessionValidator", type: "address" }, { internalType: "address", name: "account", type: "address" }, { internalType: "bytes32", name: "userOpHash", type: "bytes32" } ], name: "InvalidSessionKeySignature", type: "error" }, { inputs: [], name: "InvalidTarget", type: "error" }, { inputs: [{ internalType: "address", name: "sender", type: "address" }], name: "InvalidUserOpSender", type: "error" }, { inputs: [], name: "NoExecutionsInBatch", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "NoPoliciesSet", type: "error" }, { inputs: [], name: "PartlyEnabledActions", type: "error" }, { inputs: [], name: "PartlyEnabledPolicies", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "PaymasterValidationNotEnabled", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "policy", type: "address" } ], name: "PolicyViolation", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "account", type: "address" } ], name: "SignerNotFound", type: "error" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "account", type: "address" } ], name: "SignerNotFound", type: "error" }, { inputs: [{ internalType: "address", name: "account", type: "address" }], name: "SmartSessionModuleAlreadyInstalled", type: "error" }, { inputs: [], name: "UnsupportedExecutionType", type: "error" }, { inputs: [{ internalType: "address", name: "policy", type: "address" }], name: "UnsupportedPolicy", type: "error" }, { inputs: [ { internalType: "enum SmartSessionMode", name: "mode", type: "uint8" } ], name: "UnsupportedSmartSessionMode", type: "error" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "ActionId", name: "actionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "ActionIdDisabled", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "account", type: "address" }, { indexed: false, internalType: "uint256", name: "newValue", type: "uint256" } ], name: "NonceIterated", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" }, { indexed: false, internalType: "bool", name: "enabled", type: "bool" } ], name: "PermissionIdPermit4337Paymaster", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "enum PolicyType", name: "policyType", type: "uint8" }, { indexed: false, internalType: "address", name: "policy", type: "address" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "PolicyDisabled", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "enum PolicyType", name: "policyType", type: "uint8" }, { indexed: false, internalType: "address", name: "policy", type: "address" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "PolicyEnabled", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "account", type: "address" } ], name: "SessionCreated", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "SessionRemoved", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "sessionValidator", type: "address" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "SessionValidatorDisabled", type: "event" }, { anonymous: false, inputs: [ { indexed: false, internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { indexed: false, internalType: "address", name: "sessionValidator", type: "address" }, { indexed: false, internalType: "address", name: "smartAccount", type: "address" } ], name: "SessionValidatorEnabled", type: "event" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { internalType: "bytes4", name: "actionTargetSelector", type: "bytes4" }, { internalType: "address", name: "actionTarget", type: "address" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "actionPolicies", type: "tuple[]" } ], internalType: "struct ActionData[]", name: "actions", type: "tuple[]" } ], name: "areActionsEnabled", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "erc1271Policies", type: "tuple[]" } ], name: "areERC1271PoliciesEnabled", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "userOpPolicies", type: "tuple[]" } ], name: "areUserOpPoliciesEnabled", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "ActionId", name: "actionId", type: "bytes32" } ], name: "disableActionId", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "ActionId", name: "actionId", type: "bytes32" }, { internalType: "address[]", name: "policies", type: "address[]" } ], name: "disableActionPolicies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address[]", name: "policies", type: "address[]" }, { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "string[]", name: "contentNames", type: "string[]" } ], internalType: "struct ERC7739Context[]", name: "contexts", type: "tuple[]" } ], name: "disableERC1271Policies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address[]", name: "policies", type: "address[]" } ], name: "disableUserOpPolicies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { internalType: "bytes4", name: "actionTargetSelector", type: "bytes4" }, { internalType: "address", name: "actionTarget", type: "address" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "actionPolicies", type: "tuple[]" } ], internalType: "struct ActionData[]", name: "actionPolicies", type: "tuple[]" } ], name: "enableActionPolicies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "string[]", name: "contentNames", type: "string[]" } ], internalType: "struct ERC7739Context[]", name: "allowedERC7739Content", type: "tuple[]" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "erc1271Policies", type: "tuple[]" } ], internalType: "struct ERC7739Data", name: "erc1271Policies", type: "tuple" } ], name: "enableERC1271Policies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { components: [ { internalType: "contract ISessionValidator", name: "sessionValidator", type: "address" }, { internalType: "bytes", name: "sessionValidatorInitData", type: "bytes" }, { internalType: "bytes32", name: "salt", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "userOpPolicies", type: "tuple[]" }, { components: [ { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "string[]", name: "contentNames", type: "string[]" } ], internalType: "struct ERC7739Context[]", name: "allowedERC7739Content", type: "tuple[]" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "erc1271Policies", type: "tuple[]" } ], internalType: "struct ERC7739Data", name: "erc7739Policies", type: "tuple" }, { components: [ { internalType: "bytes4", name: "actionTargetSelector", type: "bytes4" }, { internalType: "address", name: "actionTarget", type: "address" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "actionPolicies", type: "tuple[]" } ], internalType: "struct ActionData[]", name: "actions", type: "tuple[]" }, { internalType: "bool", name: "permitERC4337Paymaster", type: "bool" } ], internalType: "struct Session[]", name: "sessions", type: "tuple[]" } ], name: "enableSessions", outputs: [ { internalType: "PermissionId[]", name: "permissionIds", type: "bytes32[]" } ], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "userOpPolicies", type: "tuple[]" } ], name: "enableUserOpPolicies", outputs: [], stateMutability: "nonpayable", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "ActionId", name: "actionId", type: "bytes32" } ], name: "getActionPolicies", outputs: [{ internalType: "address[]", name: "", type: "address[]" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "getERC1271Policies", outputs: [{ internalType: "address[]", name: "", type: "address[]" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "getEnabledActions", outputs: [{ internalType: "bytes32[]", name: "", type: "bytes32[]" }], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "address", name: "account", type: "address" }, { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], name: "getEnabledERC7739Content", outputs: [ { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "bytes32[]", name: "contentNameHashes", type: "bytes32[]" } ], internalType: "struct ERC7739ContextHashes[]", name: "enabledERC7739ContentHashes", type: "tuple[]" } ], stateMutability: "view", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "account", type: "address" } ], name: "getNonce", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, { inputs: [{ internalType: "address", name: "account", type: "address" }], name: "getPermissionIDs", outputs: [ { internalType: "PermissionId[]", name: "permissionIds", type: "bytes32[]" } ], stateMutability: "view", type: "function" }, { inputs: [ { components: [ { internalType: "contract ISessionValidator", name: "sessionValidator", type: "address" }, { internalType: "bytes", name: "sessionValidatorInitData", type: "bytes" }, { internalType: "bytes32", name: "salt", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "userOpPolicies", type: "tuple[]" }, { components: [ { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "string[]", name: "contentNames", type: "string[]" } ], internalType: "struct ERC7739Context[]", name: "allowedERC7739Content", type: "tuple[]" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "erc1271Policies", type: "tuple[]" } ], internalType: "struct ERC7739Data", name: "erc7739Policies", type: "tuple" }, { components: [ { internalType: "bytes4", name: "actionTargetSelector", type: "bytes4" }, { internalType: "address", name: "actionTarget", type: "address" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "actionPolicies", type: "tuple[]" } ], internalType: "struct ActionData[]", name: "actions", type: "tuple[]" }, { internalType: "bool", name: "permitERC4337Paymaster", type: "bool" } ], internalType: "struct Session", name: "session", type: "tuple" } ], name: "getPermissionId", outputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" } ], stateMutability: "pure", type: "function" }, { inputs: [ { internalType: "PermissionId", name: "permissionId", type: "bytes32" }, { internalType: "address", name: "account", type: "address" }, { components: [ { internalType: "contract ISessionValidator", name: "sessionValidator", type: "address" }, { internalType: "bytes", name: "sessionValidatorInitData", type: "bytes" }, { internalType: "bytes32", name: "salt", type: "bytes32" }, { components: [ { internalType: "address", name: "policy", type: "address" }, { internalType: "bytes", name: "initData", type: "bytes" } ], internalType: "struct PolicyData[]", name: "userOpPolicies", type: "tuple[]" }, { components: [ { components: [ { internalType: "bytes32", name: "appDomainSeparator", type: "bytes32" }, { internalType: "string[]", name: "contentNames", type: "string[]" } ], internalType: "struct ERC7739Context[]", name: "allowe