@cometh/session-keys
Version:
SDK Cometh Connect Session Keys
2,317 lines (2,311 loc) • 76 kB
JavaScript
// 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