UNPKG

@cometh/session-keys

Version:
2,306 lines (2,281 loc) 77.8 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/index.ts var _modulesdk = require('@rhinestone/module-sdk'); var _erc7579 = require('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 var _permissionless = require('permissionless'); var _viem = require('viem'); async function is7579Installed(client) { const smartAccountAddress = _optionalChain([client, 'access', _2 => _2.account, 'optionalAccess', _3 => _3.address]); const publicClient = _nullishCoalesce(_optionalChain([client, 'optionalAccess', _4 => _4.account, 'optionalAccess', _5 => _5.client]), () => ( _viem.createPublicClient.call(void 0, { chain: client.chain, transport: _viem.http.call(void 0, ), cacheTime: 6e4, batch: { multicall: { wait: 50 } } }))); _viem.createPublicClient.call(void 0, { chain: client.chain, transport: _viem.http.call(void 0, ), cacheTime: 6e4, batch: { multicall: { wait: 50 } } }); const isDeployed = await _permissionless.isSmartAccountDeployed.call(void 0, 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 var _accountabstraction = require('viem/account-abstraction'); var _utils = require('viem/utils'); // src/modules/sessionKey/decorators/preparePermission.ts // 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: [ {