@zerodev/sdk 4.0.9 → 4.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -3
- package/dist/cjs/index.d.ts +3 -4
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
- package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
- package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js +210 -0
- package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
- package/dist/cjs/kernel-zerodev/account.d.ts +13 -4
- package/dist/cjs/kernel-zerodev/account.js +50 -38
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/constants.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/constants.js +3 -1
- package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +12 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.js +1 -0
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/signer/empty-account.d.ts +10 -0
- package/dist/cjs/kernel-zerodev/signer/empty-account.js +43 -0
- package/dist/cjs/kernel-zerodev/signer/empty-account.js.map +1 -0
- package/dist/cjs/kernel-zerodev/utils.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/utils.js +11 -1
- package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/cjs/kernel-zerodev/validator/base.js +20 -3
- package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +11 -0
- package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator/index.js +4 -1
- package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +1 -0
- package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +345 -0
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/cjs/kernel-zerodev/validator-provider/base.js +17 -2
- package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.js +4 -1
- package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js +114 -0
- package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -1
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
- package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
- package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js +207 -0
- package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +13 -4
- package/dist/esm/kernel-zerodev/account.js +51 -38
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/constants.d.ts +2 -0
- package/dist/esm/kernel-zerodev/constants.js +2 -0
- package/dist/esm/kernel-zerodev/constants.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +2 -2
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +13 -2
- package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.js +1 -0
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/signer/empty-account.d.ts +10 -0
- package/dist/esm/kernel-zerodev/signer/empty-account.js +40 -0
- package/dist/esm/kernel-zerodev/signer/empty-account.js.map +1 -0
- package/dist/esm/kernel-zerodev/utils.d.ts +2 -0
- package/dist/esm/kernel-zerodev/utils.js +8 -0
- package/dist/esm/kernel-zerodev/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/esm/kernel-zerodev/validator/base.js +20 -3
- package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +13 -2
- package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator/index.js +3 -1
- package/dist/esm/kernel-zerodev/validator/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +2 -1
- package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js +341 -0
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/esm/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/esm/kernel-zerodev/validator-provider/base.js +17 -2
- package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.js +3 -1
- package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js +110 -0
- package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -1
- package/dist/types/index.d.ts +3 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
- package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
- package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +159 -0
- package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
- package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +13 -4
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/constants.d.ts +2 -0
- package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
- package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/signer/empty-account.d.ts +11 -0
- package/dist/types/kernel-zerodev/signer/empty-account.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/utils.d.ts +2 -0
- package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/base.d.ts +6 -3
- package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
- package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/index.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts +66 -0
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator/types.d.ts +5 -1
- package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts +5 -4
- package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts +2 -1
- package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
- package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts +19 -0
- package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts.map +1 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts +5 -0
- package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +3 -4
- package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +2 -2
- package/src/kernel-zerodev/abis/KernelAccountAbi.ts +3 -3
- package/src/kernel-zerodev/abis/SessionKeyValidatorAbi.ts +206 -0
- package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +1 -1
- package/src/kernel-zerodev/account.ts +58 -50
- package/src/kernel-zerodev/constants.ts +3 -0
- package/src/kernel-zerodev/ethers-provider/account-signer.ts +3 -3
- package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +25 -7
- package/src/kernel-zerodev/provider.ts +4 -2
- package/src/kernel-zerodev/signer/empty-account.ts +27 -0
- package/src/kernel-zerodev/utils.ts +10 -0
- package/src/kernel-zerodev/validator/base.ts +32 -6
- package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +20 -1
- package/src/kernel-zerodev/validator/index.ts +8 -1
- package/src/kernel-zerodev/validator/kill-switch-validator.ts +6 -1
- package/src/kernel-zerodev/validator/session-key-validator.ts +483 -0
- package/src/kernel-zerodev/validator/types.ts +14 -1
- package/src/kernel-zerodev/validator-provider/base.ts +24 -13
- package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/index.ts +8 -1
- package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +4 -1
- package/src/kernel-zerodev/validator-provider/session-key-provider.ts +151 -0
- package/src/kernel-zerodev/validator-provider/types.ts +10 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { getUserOperationHash, getChain, } from "@alchemy/aa-core";
|
|
2
|
+
import { KernelBaseValidator, ValidatorMode, } from "./base.js";
|
|
3
|
+
import { encodeFunctionData, toBytes, concat, pad, toHex, keccak256, encodeAbiParameters, concatHex, zeroAddress, decodeFunctionData, isHex, getFunctionSelector, } from "viem";
|
|
4
|
+
import { SessionKeyValidatorAbi } from "../abis/SessionKeyValidatorAbi.js";
|
|
5
|
+
import { DUMMY_ECDSA_SIG } from "../constants.js";
|
|
6
|
+
import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
|
|
7
|
+
import { MerkleTree } from "merkletreejs";
|
|
8
|
+
import { getChainId } from "../api/index.js";
|
|
9
|
+
import { fixSignedData } from "../utils.js";
|
|
10
|
+
export var ParamCondition;
|
|
11
|
+
(function (ParamCondition) {
|
|
12
|
+
ParamCondition[ParamCondition["EQUAL"] = 0] = "EQUAL";
|
|
13
|
+
ParamCondition[ParamCondition["GREATER_THAN"] = 1] = "GREATER_THAN";
|
|
14
|
+
ParamCondition[ParamCondition["LESS_THAN"] = 2] = "LESS_THAN";
|
|
15
|
+
ParamCondition[ParamCondition["GREATER_THAN_OR_EQUAL"] = 3] = "GREATER_THAN_OR_EQUAL";
|
|
16
|
+
ParamCondition[ParamCondition["LESS_THAN_OR_EQUAL"] = 4] = "LESS_THAN_OR_EQUAL";
|
|
17
|
+
ParamCondition[ParamCondition["NOT_EQUAL"] = 5] = "NOT_EQUAL";
|
|
18
|
+
})(ParamCondition || (ParamCondition = {}));
|
|
19
|
+
export class SessionKeyValidator extends KernelBaseValidator {
|
|
20
|
+
constructor(params) {
|
|
21
|
+
super(params);
|
|
22
|
+
Object.defineProperty(this, "sessionKey", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(this, "sessionKeyData", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: void 0
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(this, "merkleTree", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: void 0
|
|
39
|
+
});
|
|
40
|
+
this.sessionKey = params.sessionKey;
|
|
41
|
+
this.sessionKeyData = {
|
|
42
|
+
...params.sessionKeyData,
|
|
43
|
+
paymaster: params.sessionKeyData.paymaster ?? zeroAddress,
|
|
44
|
+
};
|
|
45
|
+
this.merkleTree = this.getMerkleTree();
|
|
46
|
+
this.selector =
|
|
47
|
+
params.selector ??
|
|
48
|
+
getFunctionSelector("execute(address, uint256, bytes, uint8)");
|
|
49
|
+
this.executor = params.executor ?? zeroAddress;
|
|
50
|
+
this.mode = params.mode ?? ValidatorMode.plugin;
|
|
51
|
+
}
|
|
52
|
+
static async init(params) {
|
|
53
|
+
const chainId = await getChainId(params.projectId);
|
|
54
|
+
if (!chainId) {
|
|
55
|
+
throw new Error("ChainId not found");
|
|
56
|
+
}
|
|
57
|
+
const chain = getChain(chainId);
|
|
58
|
+
const instance = new SessionKeyValidator({ ...params, chain });
|
|
59
|
+
return instance;
|
|
60
|
+
}
|
|
61
|
+
shouldDelegateViaFallback() {
|
|
62
|
+
return this.merkleTree.getHexRoot() === pad("0x00", { size: 32 });
|
|
63
|
+
}
|
|
64
|
+
findMatchingPermission(callData) {
|
|
65
|
+
try {
|
|
66
|
+
const { functionName, args } = decodeFunctionData({
|
|
67
|
+
abi: KernelAccountAbi,
|
|
68
|
+
data: callData,
|
|
69
|
+
});
|
|
70
|
+
if (functionName !== "execute")
|
|
71
|
+
return undefined;
|
|
72
|
+
const permissionsList = this.sessionKeyData.permissions;
|
|
73
|
+
if (!permissionsList || !permissionsList.length)
|
|
74
|
+
return undefined;
|
|
75
|
+
const targetToMatch = args[0].toLowerCase();
|
|
76
|
+
let targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === targetToMatch);
|
|
77
|
+
if (!targetPermissions.length) {
|
|
78
|
+
targetPermissions = permissionsList.filter((permission) => permission.target.toLowerCase() === zeroAddress.toLowerCase());
|
|
79
|
+
}
|
|
80
|
+
if (!targetPermissions.length)
|
|
81
|
+
return undefined;
|
|
82
|
+
const operationPermissions = this.filterByOperation(targetPermissions, args[3]);
|
|
83
|
+
if (!operationPermissions.length)
|
|
84
|
+
return undefined;
|
|
85
|
+
const signaturePermissions = this.filterBySignature(operationPermissions, args[2].slice(0, 10).toLowerCase());
|
|
86
|
+
const valueLimitPermissions = signaturePermissions.filter((permission) => permission.valueLimit >= args[1]);
|
|
87
|
+
if (!valueLimitPermissions.length)
|
|
88
|
+
return undefined;
|
|
89
|
+
const sortedPermissions = valueLimitPermissions.sort((a, b) => b.valueLimit - a.valueLimit);
|
|
90
|
+
return this.findPermissionByRule(sortedPermissions, args[2]);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
filterByOperation(permissions, operation) {
|
|
97
|
+
return permissions.filter((permission) => permission.operation === operation);
|
|
98
|
+
}
|
|
99
|
+
filterBySignature(permissions, signature) {
|
|
100
|
+
return permissions.filter((permission) => permission.sig.toLowerCase() === signature);
|
|
101
|
+
}
|
|
102
|
+
findPermissionByRule(permissions, data) {
|
|
103
|
+
return permissions.find((permission) => {
|
|
104
|
+
for (const rule of permission.rules) {
|
|
105
|
+
const dataParam = this.getFormattedHex("0x" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64));
|
|
106
|
+
const ruleParam = this.getFormattedHex(rule.param);
|
|
107
|
+
if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
getFormattedHex(value) {
|
|
115
|
+
return pad(isHex(value) ? value : toHex(value), {
|
|
116
|
+
size: 32,
|
|
117
|
+
}).toLowerCase();
|
|
118
|
+
}
|
|
119
|
+
evaluateRuleCondition(dataParam, ruleParam, condition) {
|
|
120
|
+
switch (condition) {
|
|
121
|
+
case ParamCondition.EQUAL:
|
|
122
|
+
return dataParam === ruleParam;
|
|
123
|
+
case ParamCondition.GREATER_THAN:
|
|
124
|
+
return dataParam > ruleParam;
|
|
125
|
+
case ParamCondition.LESS_THAN:
|
|
126
|
+
return dataParam < ruleParam;
|
|
127
|
+
case ParamCondition.GREATER_THAN_OR_EQUAL:
|
|
128
|
+
return dataParam >= ruleParam;
|
|
129
|
+
case ParamCondition.LESS_THAN_OR_EQUAL:
|
|
130
|
+
return dataParam <= ruleParam;
|
|
131
|
+
case ParamCondition.NOT_EQUAL:
|
|
132
|
+
return dataParam !== ruleParam;
|
|
133
|
+
default:
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
getMerkleTree() {
|
|
138
|
+
const permissionPacked = this.sessionKeyData.permissions?.map((permission) => this.encodePermissionData(permission));
|
|
139
|
+
if (permissionPacked?.length === 1)
|
|
140
|
+
permissionPacked.push(permissionPacked[0]);
|
|
141
|
+
return permissionPacked && permissionPacked.length !== 0
|
|
142
|
+
? new MerkleTree(permissionPacked, keccak256, {
|
|
143
|
+
sortPairs: true,
|
|
144
|
+
hashLeaves: true,
|
|
145
|
+
})
|
|
146
|
+
: new MerkleTree([pad("0x00", { size: 32 })], keccak256, {
|
|
147
|
+
hashLeaves: false,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
encodePermissionData(permission, merkleProof) {
|
|
151
|
+
let permissionParam = {
|
|
152
|
+
components: [
|
|
153
|
+
{
|
|
154
|
+
name: "target",
|
|
155
|
+
type: "address",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: "valueLimit",
|
|
159
|
+
type: "uint256",
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
name: "sig",
|
|
163
|
+
type: "bytes4",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
components: [
|
|
167
|
+
{
|
|
168
|
+
name: "offset",
|
|
169
|
+
type: "uint256",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
internalType: "enum ParamCondition",
|
|
173
|
+
name: "condition",
|
|
174
|
+
type: "uint8",
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
name: "param",
|
|
178
|
+
type: "bytes32",
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
name: "rules",
|
|
182
|
+
type: "tuple[]",
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
internalType: "enum Operation",
|
|
186
|
+
name: "operation",
|
|
187
|
+
type: "uint8",
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
name: "permission",
|
|
191
|
+
type: "tuple",
|
|
192
|
+
};
|
|
193
|
+
let params;
|
|
194
|
+
let values;
|
|
195
|
+
if (merkleProof) {
|
|
196
|
+
params = [
|
|
197
|
+
permissionParam,
|
|
198
|
+
{
|
|
199
|
+
name: "merkleProof",
|
|
200
|
+
type: "bytes32[]",
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
values = [permission, merkleProof];
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
params = [permissionParam];
|
|
207
|
+
values = [permission];
|
|
208
|
+
}
|
|
209
|
+
return encodeAbiParameters(params, values);
|
|
210
|
+
}
|
|
211
|
+
getSessionData() {
|
|
212
|
+
if (!this.selector || !this.executor) {
|
|
213
|
+
throw Error("Plugin Validator data params uninitialised");
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
selector: this.selector,
|
|
217
|
+
executor: this.executor,
|
|
218
|
+
validUntil: this.validUntil,
|
|
219
|
+
validAfter: this.validAfter,
|
|
220
|
+
sessionKeyData: this.sessionKeyData,
|
|
221
|
+
enableSignature: this.enableSignature,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
async signer() {
|
|
225
|
+
return await Promise.resolve(this.sessionKey);
|
|
226
|
+
}
|
|
227
|
+
async getEnableData() {
|
|
228
|
+
if (!this.merkleTree) {
|
|
229
|
+
throw Error("SessionKeyValidator: MerkleTree not generated");
|
|
230
|
+
}
|
|
231
|
+
return concat([
|
|
232
|
+
await this.sessionKey.getAddress(),
|
|
233
|
+
pad(this.merkleTree.getHexRoot(), { size: 32 }),
|
|
234
|
+
pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),
|
|
235
|
+
pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),
|
|
236
|
+
this.sessionKeyData.paymaster,
|
|
237
|
+
]);
|
|
238
|
+
}
|
|
239
|
+
async isPluginEnabled(kernelAccountAddress, selector) {
|
|
240
|
+
if (!this.publicClient) {
|
|
241
|
+
throw new Error("Validator uninitialized: PublicClient missing");
|
|
242
|
+
}
|
|
243
|
+
const execDetail = await this.publicClient.readContract({
|
|
244
|
+
abi: KernelAccountAbi,
|
|
245
|
+
address: kernelAccountAddress,
|
|
246
|
+
functionName: "getExecution",
|
|
247
|
+
args: [selector],
|
|
248
|
+
});
|
|
249
|
+
const enableData = await this.publicClient.readContract({
|
|
250
|
+
abi: SessionKeyValidatorAbi,
|
|
251
|
+
address: this.validatorAddress,
|
|
252
|
+
functionName: "sessionData",
|
|
253
|
+
args: [await this.sessionKey.getAddress(), kernelAccountAddress],
|
|
254
|
+
});
|
|
255
|
+
const enableDataHex = concatHex([
|
|
256
|
+
await this.sessionKey.getAddress(),
|
|
257
|
+
pad(enableData[0], { size: 4 }),
|
|
258
|
+
pad(toHex(enableData[1]), { size: 6 }),
|
|
259
|
+
pad(toHex(enableData[2]), { size: 6 }),
|
|
260
|
+
enableData[3],
|
|
261
|
+
]);
|
|
262
|
+
return (execDetail.validator.toLowerCase() ===
|
|
263
|
+
this.validatorAddress.toLowerCase() &&
|
|
264
|
+
enableData[4] &&
|
|
265
|
+
enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase());
|
|
266
|
+
}
|
|
267
|
+
async getDummyUserOpSignature(callData) {
|
|
268
|
+
const matchingPermission = this.findMatchingPermission(callData);
|
|
269
|
+
if (!matchingPermission && !this.shouldDelegateViaFallback()) {
|
|
270
|
+
throw Error("SessionKeyValidator: No matching permission found for the userOp");
|
|
271
|
+
}
|
|
272
|
+
const encodedPermissionData = this.sessionKeyData.permissions &&
|
|
273
|
+
this.sessionKeyData.permissions.length !== 0 &&
|
|
274
|
+
matchingPermission
|
|
275
|
+
? this.encodePermissionData(matchingPermission)
|
|
276
|
+
: "0x";
|
|
277
|
+
const merkleProof = this.merkleTree.getHexProof(keccak256(encodedPermissionData));
|
|
278
|
+
const encodedData = this.sessionKeyData.permissions &&
|
|
279
|
+
this.sessionKeyData.permissions.length !== 0 &&
|
|
280
|
+
matchingPermission
|
|
281
|
+
? this.encodePermissionData(matchingPermission, merkleProof)
|
|
282
|
+
: "0x";
|
|
283
|
+
return concatHex([
|
|
284
|
+
await this.sessionKey.getAddress(),
|
|
285
|
+
DUMMY_ECDSA_SIG,
|
|
286
|
+
encodedData,
|
|
287
|
+
]);
|
|
288
|
+
}
|
|
289
|
+
encodeEnable(sessionKeyEnableData) {
|
|
290
|
+
return encodeFunctionData({
|
|
291
|
+
abi: SessionKeyValidatorAbi,
|
|
292
|
+
functionName: "enable",
|
|
293
|
+
args: [sessionKeyEnableData],
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
encodeDisable(sessionKey) {
|
|
297
|
+
return encodeFunctionData({
|
|
298
|
+
abi: SessionKeyValidatorAbi,
|
|
299
|
+
functionName: "disable",
|
|
300
|
+
args: [sessionKey],
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
async signMessage(message) {
|
|
304
|
+
return await this.sessionKey.signMessage(message);
|
|
305
|
+
}
|
|
306
|
+
async signTypedData(params) {
|
|
307
|
+
return fixSignedData(await this.sessionKey.signTypedData(params));
|
|
308
|
+
}
|
|
309
|
+
async signUserOp(userOp) {
|
|
310
|
+
if (!this.chain) {
|
|
311
|
+
throw new Error("Validator uninitialized");
|
|
312
|
+
}
|
|
313
|
+
const hash = getUserOperationHash({
|
|
314
|
+
...userOp,
|
|
315
|
+
signature: "0x",
|
|
316
|
+
}, this.entryPointAddress, BigInt(this.chain.id));
|
|
317
|
+
const formattedMessage = typeof hash === "string" ? toBytes(hash) : hash;
|
|
318
|
+
const matchingPermission = this.findMatchingPermission(userOp.callData);
|
|
319
|
+
if (!matchingPermission && !this.shouldDelegateViaFallback()) {
|
|
320
|
+
throw Error("SessionKeyValidator: No matching permission found for the userOp");
|
|
321
|
+
}
|
|
322
|
+
const encodedPermissionData = this.sessionKeyData.permissions &&
|
|
323
|
+
this.sessionKeyData.permissions.length !== 0 &&
|
|
324
|
+
matchingPermission
|
|
325
|
+
? this.encodePermissionData(matchingPermission)
|
|
326
|
+
: "0x";
|
|
327
|
+
const merkleProof = this.merkleTree.getHexProof(keccak256(encodedPermissionData));
|
|
328
|
+
const encodedData = this.sessionKeyData.permissions &&
|
|
329
|
+
this.sessionKeyData.permissions.length !== 0 &&
|
|
330
|
+
matchingPermission
|
|
331
|
+
? this.encodePermissionData(matchingPermission, merkleProof)
|
|
332
|
+
: "0x";
|
|
333
|
+
const signature = concat([
|
|
334
|
+
await this.sessionKey.getAddress(),
|
|
335
|
+
await this.sessionKey.signMessage(formattedMessage),
|
|
336
|
+
encodedData,
|
|
337
|
+
]);
|
|
338
|
+
return signature;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=session-key-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n keccak256,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n} from \"viem\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport type { Operation } from \"../provider.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamCondition {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport interface ParamRules {\n offset: number;\n condition: ParamCondition;\n param: Hex;\n}\n\nexport interface Permission {\n target: Address;\n valueLimit: number;\n sig: Hex;\n rules: ParamRules[];\n operation: Operation;\n}\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermission(callData: Hex): Permission | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\") return undefined;\n\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = args[0].toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n args[3]\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n operationPermissions,\n args[2].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => permission.valueLimit >= args[1]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort(\n (a, b) => b.valueLimit - a.valueLimit\n );\n\n return this.findPermissionByRule(sortedPermissions, args[2]);\n } catch (error) {\n return undefined;\n }\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.operation === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.sig.toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamCondition\n ): boolean {\n switch (condition) {\n case ParamCondition.EQUAL:\n return dataParam === ruleParam;\n case ParamCondition.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamCondition.LESS_THAN:\n return dataParam < ruleParam;\n case ParamCondition.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamCondition.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamCondition.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked?.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n sortPairs: true,\n hashLeaves: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n });\n }\n\n encodePermissionData(permission: Permission, merkleProof?: string[]): Hex {\n let permissionParam = {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 4 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[4] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n const matchingPermission = this.findMatchingPermission(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n encodedData,\n ]);\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const matchingPermission = this.findMatchingPermission(userOp.callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n encodedData,\n ]);\n return signature;\n }\n}\n"]}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import type { ECDSAValidator, ECDSAValidatorParams } from "./ecdsa-validator.js";
|
|
2
2
|
import type { ERC165SessionKeyValidator, ERC165SessionKeyValidatorParams } from "./erc165-session-key-validator.js";
|
|
3
3
|
import type { KillSwitchValidator, KillSwitchValidatorParams } from "./kill-switch-validator.js";
|
|
4
|
-
|
|
4
|
+
import type { SessionKeyValidator, SessionKeyValidatorParams, ParamRules, Permission, SessionKeyData, SessionKeyParams } from "./session-key-validator.js";
|
|
5
|
+
export type SupportedValidators = "ECDSA" | "KILL_SWITCH" | "ERC165_SESSION_KEY" | "SESSION_KEY";
|
|
5
6
|
export type ValidatorTypeMap = {
|
|
6
7
|
ECDSA: ECDSAValidator;
|
|
7
8
|
KILL_SWITCH: KillSwitchValidator;
|
|
8
9
|
ERC165_SESSION_KEY: ERC165SessionKeyValidator;
|
|
10
|
+
SESSION_KEY: SessionKeyValidator;
|
|
9
11
|
};
|
|
10
12
|
export type ValidatorParamsMap = {
|
|
11
13
|
ECDSA: ECDSAValidatorParams;
|
|
12
14
|
KILL_SWITCH: KillSwitchValidatorParams;
|
|
13
15
|
ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;
|
|
16
|
+
SESSION_KEY: SessionKeyValidatorParams;
|
|
14
17
|
};
|
|
15
18
|
export type ValidatorMap = {
|
|
16
19
|
[V in SupportedValidators]: new (params: ValidatorParamsMap[V]) => ValidatorTypeMap[V];
|
|
17
20
|
};
|
|
21
|
+
export type { ParamRules, Permission, SessionKeyData, SessionKeyParams };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ECDSAValidator,\n ECDSAValidatorParams,\n} from \"./ecdsa-validator.js\";\nimport type {\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams,\n} from \"./erc165-session-key-validator.js\";\n\nimport type {\n KillSwitchValidator,\n KillSwitchValidatorParams,\n} from \"./kill-switch-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n} from \"./session-key-validator.js\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Hex, type SendUserOperationResult
|
|
1
|
+
import { type Hex, type SendUserOperationResult } from "@alchemy/aa-core";
|
|
2
2
|
import { ZeroDevProvider, type ZeroDevProviderConfig } from "../provider.js";
|
|
3
3
|
import type { KernelBaseValidator, KernelBaseValidatorParams } from "../validator/base.js";
|
|
4
4
|
import type { PaymasterAndBundlerProviders, PaymasterConfig, PaymasterPolicy } from "../paymaster/types.js";
|
|
@@ -12,15 +12,16 @@ export type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {
|
|
|
12
12
|
};
|
|
13
13
|
export interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {
|
|
14
14
|
projectId: string;
|
|
15
|
-
owner: SmartAccountSigner;
|
|
16
15
|
bundlerProvider?: PaymasterAndBundlerProviders;
|
|
17
16
|
opts?: ValidatorProviderParamsOpts<P>;
|
|
18
17
|
usePaymaster?: boolean;
|
|
18
|
+
defaultProvider?: ValidatorProvider<KernelBaseValidator, KernelBaseValidatorParams>;
|
|
19
19
|
}
|
|
20
20
|
export type ExtendedValidatorProviderParams<P extends KernelBaseValidatorParams> = ValidatorProviderParams<P> & RequiredProps<P>;
|
|
21
|
-
export declare abstract class ValidatorProvider<P extends KernelBaseValidatorParams> extends ZeroDevProvider {
|
|
21
|
+
export declare abstract class ValidatorProvider<V extends KernelBaseValidator, P extends KernelBaseValidatorParams> extends ZeroDevProvider {
|
|
22
|
+
protected defaultProvider?: ValidatorProvider<KernelBaseValidator, KernelBaseValidatorParams>;
|
|
22
23
|
constructor(params: ExtendedValidatorProviderParams<P>, validator: KernelBaseValidator);
|
|
23
|
-
getValidator: () =>
|
|
24
|
+
getValidator: () => V;
|
|
24
25
|
getEncodedEnableData: (enableData: Hex) => Promise<Hex>;
|
|
25
26
|
getEncodedDisableData: (disableData: Hex) => Promise<Hex>;
|
|
26
27
|
sendEnableUserOperation: (enableData: Hex) => Promise<SendUserOperationResult>;
|
|
@@ -12,6 +12,12 @@ export class ValidatorProvider extends ZeroDevProvider {
|
|
|
12
12
|
projectId: params.projectId,
|
|
13
13
|
bundlerProvider: params.bundlerProvider,
|
|
14
14
|
});
|
|
15
|
+
Object.defineProperty(this, "defaultProvider", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: void 0
|
|
20
|
+
});
|
|
15
21
|
Object.defineProperty(this, "getValidator", {
|
|
16
22
|
enumerable: true,
|
|
17
23
|
configurable: true,
|
|
@@ -77,14 +83,23 @@ export class ValidatorProvider extends ZeroDevProvider {
|
|
|
77
83
|
});
|
|
78
84
|
this.connect(() => new KernelSmartContractAccount({
|
|
79
85
|
projectId: params.projectId,
|
|
80
|
-
owner: params.owner,
|
|
81
86
|
validator,
|
|
87
|
+
defaultValidator: params.defaultProvider?.getValidator(),
|
|
82
88
|
rpcClient: this.rpcClient,
|
|
83
89
|
bundlerProvider: params.bundlerProvider,
|
|
90
|
+
index: params.defaultProvider?.getAccount().getIndex(),
|
|
84
91
|
...params.opts?.accountConfig,
|
|
85
92
|
}));
|
|
86
93
|
if (params.usePaymaster === undefined || params.usePaymaster) {
|
|
87
|
-
|
|
94
|
+
let paymasterConfig = params.opts?.paymasterConfig ?? {
|
|
95
|
+
policy: "VERIFYING_PAYMASTER",
|
|
96
|
+
};
|
|
97
|
+
paymasterConfig = {
|
|
98
|
+
...paymasterConfig,
|
|
99
|
+
paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ??
|
|
100
|
+
params.bundlerProvider,
|
|
101
|
+
};
|
|
102
|
+
withZeroDevPaymasterAndData(this, paymasterConfig);
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hex, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport { ZeroDevProvider, type ZeroDevProviderConfig } from \"../provider.js\";\nimport type {\n KernelBaseValidator,\n KernelBaseValidatorParams,\n} from \"../validator/base.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"../paymaster/types.js\";\nimport {\n KernelSmartContractAccount,\n type KernelSmartAccountParams,\n isKernelAccount,\n} from \"../account.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport type { RequiredProps } from \"../types.js\";\n\nexport type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {\n paymasterConfig?: PaymasterConfig<PaymasterPolicy>;\n providerConfig?: Partial<ZeroDevProviderConfig>;\n accountConfig?: Omit<\n KernelSmartAccountParams,\n keyof ExtendedValidatorProviderParams<P>\n >;\n validatorConfig?: Omit<P, keyof ExtendedValidatorProviderParams<P>>;\n};\n\nexport interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {\n projectId: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: ValidatorProviderParamsOpts<P>;\n usePaymaster?: boolean;\n defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n}\n\nexport type ExtendedValidatorProviderParams<\n P extends KernelBaseValidatorParams\n> = ValidatorProviderParams<P> & RequiredProps<P>;\n\n// A simple facade abstraction for validator related provider operations\n// Needs to be implemented for each validator plugin\nexport abstract class ValidatorProvider<\n V extends KernelBaseValidator,\n P extends KernelBaseValidatorParams\n> extends ZeroDevProvider {\n protected defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n constructor(\n params: ExtendedValidatorProviderParams<P>,\n validator: KernelBaseValidator\n ) {\n super({\n ...params.opts?.providerConfig,\n chain: params.opts?.providerConfig?.chain ?? polygonMumbai,\n rpcUrl: params.opts?.providerConfig?.rpcUrl,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n });\n this.connect(\n () =>\n new KernelSmartContractAccount({\n projectId: params.projectId,\n validator,\n defaultValidator: params.defaultProvider?.getValidator(),\n rpcClient: this.rpcClient,\n bundlerProvider: params.bundlerProvider,\n index: params.defaultProvider?.getAccount().getIndex(),\n ...params.opts?.accountConfig,\n })\n );\n if (params.usePaymaster === undefined || params.usePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ??\n params.bundlerProvider,\n };\n withZeroDevPaymasterAndData(this, paymasterConfig);\n }\n }\n\n getValidator = (): V => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return this.account.getValidator() as unknown as V;\n };\n\n getEncodedEnableData = async (enableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeEnable(enableData);\n };\n\n getEncodedDisableData = async (disableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeDisable(disableData);\n };\n\n sendEnableUserOperation = async (\n enableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedEnableData = await this.getEncodedEnableData(enableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedEnableData,\n });\n };\n\n sendDisableUserOperation = async (\n disableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedDisableData = await this.getEncodedDisableData(disableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedDisableData,\n });\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ValidatorProvider, type ExtendedValidatorProviderParams } from "./base.js";
|
|
2
|
-
import { type ECDSAValidatorParams } from "../validator/ecdsa-validator.js";
|
|
3
|
-
export declare class ECDSAProvider extends ValidatorProvider<ECDSAValidatorParams> {
|
|
2
|
+
import { ECDSAValidator, type ECDSAValidatorParams } from "../validator/ecdsa-validator.js";
|
|
3
|
+
export declare class ECDSAProvider extends ValidatorProvider<ECDSAValidator, ECDSAValidatorParams> {
|
|
4
4
|
constructor(params: ExtendedValidatorProviderParams<ECDSAValidatorParams>);
|
|
5
5
|
static init(params: ExtendedValidatorProviderParams<ECDSAValidatorParams>): Promise<ECDSAProvider>;
|
|
6
6
|
changeOwner: (enableData: `0x${string}`) => Promise<import("@alchemy/aa-core").SendUserOperationResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecdsa-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/ecdsa-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,GAEf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,aAAc,SAAQ,
|
|
1
|
+
{"version":3,"file":"ecdsa-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/ecdsa-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,GAEf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,aAAc,SAAQ,iBAGlC;IACC,YAAY,MAA6D;QACvE,MAAM,KAAK,GACT,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,KAAK,QAAQ;YACpD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,aAAa,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC;YACnC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK;YACL,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;SAChC,CAAC,CAAC;QACH,KAAK,CACH;YACE,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;aAC1D;SACF,EACD,SAAS,CACV,CAAC;QAwBJ;;;;mBAAc,IAAI,CAAC,uBAAuB;WAAC;QAE3C;;;;mBAAc,IAAI,CAAC,wBAAwB;WAAC;IAzB5C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAA6D;QAE7D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;YACjC,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE;oBACd,KAAK;oBACL,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc;iBAC/B;aACF;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAKF","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n ECDSAValidator,\n type ECDSAValidatorParams,\n} from \"../validator/ecdsa-validator.js\";\nimport { getChain } from \"@alchemy/aa-core\";\nimport { getChainId } from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\n\nexport class ECDSAProvider extends ValidatorProvider<\n ECDSAValidator,\n ECDSAValidatorParams\n> {\n constructor(params: ExtendedValidatorProviderParams<ECDSAValidatorParams>) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new ECDSAValidator({\n projectId: params.projectId,\n owner: params.owner,\n chain,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n }\n\n public static async init(\n params: ExtendedValidatorProviderParams<ECDSAValidatorParams>\n ): Promise<ECDSAProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ECDSAProvider({\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n return instance;\n }\n\n changeOwner = this.sendEnableUserOperation;\n\n deleteOwner = this.sendDisableUserOperation;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ValidatorProvider, type ExtendedValidatorProviderParams } from "./base.js";
|
|
2
|
-
import { type ERC165SessionKeyValidatorParams } from "../validator/erc165-session-key-validator.js";
|
|
3
|
-
export declare class ERC165SessionKeyProvider extends ValidatorProvider<ERC165SessionKeyValidatorParams> {
|
|
2
|
+
import { ERC165SessionKeyValidator, type ERC165SessionKeyValidatorParams } from "../validator/erc165-session-key-validator.js";
|
|
3
|
+
export declare class ERC165SessionKeyProvider extends ValidatorProvider<ERC165SessionKeyValidator, ERC165SessionKeyValidatorParams> {
|
|
4
4
|
constructor(params: ExtendedValidatorProviderParams<ERC165SessionKeyValidatorParams>);
|
|
5
5
|
static init(params: ExtendedValidatorProviderParams<ERC165SessionKeyValidatorParams>): Promise<ERC165SessionKeyProvider>;
|
|
6
6
|
changeGuardian: (enableData: `0x${string}`) => Promise<import("@alchemy/aa-core").SendUserOperationResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc165-session-key-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,GAE1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oCAAoC,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,OAAO,wBAAyB,SAAQ,
|
|
1
|
+
{"version":3,"file":"erc165-session-key-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,GAE1B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oCAAoC,EAAE,MAAM,iBAAiB,CAAC;AAEvE,MAAM,OAAO,wBAAyB,SAAQ,iBAG7C;IACC,YACE,MAAwE;QAExE,MAAM,KAAK,GACT,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,KAAK,QAAQ;YACpD,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,aAAa,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,yBAAyB,CAAC;YAC9C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,KAAK;YACL,gBAAgB,EACd,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB;gBAC9C,oCAAoC;YACtC,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;SAChC,CAAC,CAAC;QACH,KAAK,CACH;YACE,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;aAC1D;SACF,EACD,SAAS,CACV,CAAC;QAwBJ;;;;mBAAiB,IAAI,CAAC,uBAAuB;WAAC;QAE9C;;;;mBAA6B,IAAI,CAAC,wBAAwB;WAAC;IAzB3D,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAAwE;QAExE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC;YAC5C,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE;oBACd,KAAK;oBACL,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc;iBAC/B;aACF;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAKF","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n ERC165SessionKeyValidator,\n type ERC165SessionKeyValidatorParams,\n} from \"../validator/erc165-session-key-validator.js\";\nimport { getChain } from \"@alchemy/aa-core\";\nimport { getChainId } from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { ERC165_SESSION_KEY_VALIDATOR_ADDRESS } from \"../constants.js\";\n\nexport class ERC165SessionKeyProvider extends ValidatorProvider<\n ERC165SessionKeyValidator,\n ERC165SessionKeyValidatorParams\n> {\n constructor(\n params: ExtendedValidatorProviderParams<ERC165SessionKeyValidatorParams>\n ) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new ERC165SessionKeyValidator({\n projectId: params.projectId,\n sessionKey: params.sessionKey,\n sessionKeyData: params.sessionKeyData,\n chain,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n ERC165_SESSION_KEY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n }\n\n public static async init(\n params: ExtendedValidatorProviderParams<ERC165SessionKeyValidatorParams>\n ): Promise<ERC165SessionKeyProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ERC165SessionKeyProvider({\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n return instance;\n }\n\n changeGuardian = this.sendEnableUserOperation;\n\n deleteERC165SessionKeyData = this.sendDisableUserOperation;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ECDSAProvider } from "./ecdsa-provider.js";
|
|
2
2
|
import { ERC165SessionKeyProvider } from "./erc165-session-key-provider.js";
|
|
3
3
|
import { KillSwitchProvider } from "./kill-switch-provider.js";
|
|
4
|
+
import { SessionKeyProvider } from "./session-key-provider.js";
|
|
4
5
|
import type { ValidatorProviderMap } from "./types.js";
|
|
5
6
|
export declare const ValidatorProviders: ValidatorProviderMap;
|
|
6
|
-
export { ECDSAProvider, KillSwitchProvider, ERC165SessionKeyProvider };
|
|
7
|
+
export { ECDSAProvider, KillSwitchProvider, ERC165SessionKeyProvider, SessionKeyProvider, };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { ECDSAProvider } from "./ecdsa-provider.js";
|
|
2
2
|
import { ERC165SessionKeyProvider } from "./erc165-session-key-provider.js";
|
|
3
3
|
import { KillSwitchProvider } from "./kill-switch-provider.js";
|
|
4
|
+
import { SessionKeyProvider } from "./session-key-provider.js";
|
|
4
5
|
export const ValidatorProviders = {
|
|
5
6
|
ECDSA: ECDSAProvider,
|
|
6
7
|
KILL_SWITCH: KillSwitchProvider,
|
|
7
8
|
ERC165_SESSION_KEY: ERC165SessionKeyProvider,
|
|
9
|
+
SESSION_KEY: SessionKeyProvider,
|
|
8
10
|
};
|
|
9
|
-
export { ECDSAProvider, KillSwitchProvider, ERC165SessionKeyProvider };
|
|
11
|
+
export { ECDSAProvider, KillSwitchProvider, ERC165SessionKeyProvider, SessionKeyProvider, };
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,MAAM,CAAC,MAAM,kBAAkB,GAAyB;IACtD,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,kBAAkB;IAC/B,kBAAkB,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,MAAM,CAAC,MAAM,kBAAkB,GAAyB;IACtD,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,kBAAkB;IAC/B,kBAAkB,EAAE,wBAAwB;IAC5C,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,GACnB,CAAC","sourcesContent":["import { ECDSAProvider } from \"./ecdsa-provider.js\";\nimport { ERC165SessionKeyProvider } from \"./erc165-session-key-provider.js\";\nimport { KillSwitchProvider } from \"./kill-switch-provider.js\";\nimport { SessionKeyProvider } from \"./session-key-provider.js\";\nimport type { ValidatorProviderMap } from \"./types.js\";\n\nexport const ValidatorProviders: ValidatorProviderMap = {\n ECDSA: ECDSAProvider,\n KILL_SWITCH: KillSwitchProvider,\n ERC165_SESSION_KEY: ERC165SessionKeyProvider,\n SESSION_KEY: SessionKeyProvider,\n};\n\nexport {\n ECDSAProvider,\n KillSwitchProvider,\n ERC165SessionKeyProvider,\n SessionKeyProvider,\n};\n"]}
|