@zerodev/sdk 4.1.4 → 4.2.0
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/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +7 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.d.ts +3 -1
- package/dist/cjs/kernel-zerodev/provider.js +56 -0
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.d.ts +5 -5
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +27 -28
- package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/types.d.ts +10 -7
- package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.d.ts +3 -1
- package/dist/esm/kernel-zerodev/provider.js +56 -0
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/session-key-validator.d.ts +5 -5
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js +27 -27
- package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/types.d.ts +10 -7
- package/dist/esm/kernel-zerodev/validator/types.js.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/provider.d.ts +3 -1
- package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts +5 -5
- package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/types.d.ts +10 -7
- package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +3 -1
- package/src/kernel-zerodev/provider.ts +74 -0
- package/src/kernel-zerodev/validator/session-key-validator.ts +33 -29
- package/src/kernel-zerodev/validator/types.ts +15 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,sBAAsB,CAAC","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport 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 RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,MAAM,SAAS,CAAC;AACjB,OAAO,EAAe,MAAM,sBAAsB,CAAC","sourcesContent":["import {\n type AbiParameter,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type AbiFunction,\n type ExtractAbiFunction,\n} from \"abitype\";\nimport { type Pretty } from \"abitype/src/types.js\";\nimport 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 RecoveryValidator,\n RecoveryValidatorParams,\n} from \"./recovery-validator.js\";\nimport type {\n SessionKeyValidator,\n SessionKeyValidatorParams,\n ParamRules,\n Permission,\n SessionKeyData,\n SessionKeyParams,\n ParamOperator,\n} from \"./session-key-validator.js\";\nimport type { Abi, InferFunctionName, Narrow } from \"viem\";\n\nexport type SupportedValidators =\n | \"ECDSA\"\n | \"KILL_SWITCH\"\n | \"ERC165_SESSION_KEY\"\n | \"SESSION_KEY\"\n | \"RECOVERY\";\n\nexport type ValidatorTypeMap = {\n ECDSA: ECDSAValidator;\n KILL_SWITCH: KillSwitchValidator;\n ERC165_SESSION_KEY: ERC165SessionKeyValidator;\n SESSION_KEY: SessionKeyValidator;\n RECOVERY: RecoveryValidator;\n};\n\nexport type ValidatorParamsMap = {\n ECDSA: ECDSAValidatorParams;\n KILL_SWITCH: KillSwitchValidatorParams;\n ERC165_SESSION_KEY: ERC165SessionKeyValidatorParams;\n SESSION_KEY: SessionKeyValidatorParams;\n RECOVERY: RecoveryValidatorParams;\n};\n\nexport type ValidatorMap = {\n [V in SupportedValidators]: new (\n params: ValidatorParamsMap[V]\n ) => ValidatorTypeMap[V];\n};\n\nexport type EthereumProvider = { request(...args: any): Promise<any> };\n\nexport type { ParamRules, Permission, SessionKeyData, SessionKeyParams };\n\n// Session Key types\nexport type AbiParametersToPrimitiveTypes<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = Pretty<{\n [K in keyof TAbiParameters]: AbiParameterToPrimitiveType<\n TAbiParameters[K],\n TAbiParameterKind\n >;\n}>;\n\nexport type AbiParametersToConditons<\n TAbiParameters extends readonly AbiParameter[]\n> = Pretty<{\n [K in keyof TAbiParameters]: ParamOperator;\n}>;\n\nexport type CombinedArgs<\n TAbiParameters extends readonly AbiParameter[],\n TAbiParameterKind extends AbiParameterKind = AbiParameterKind\n> = {\n [K in keyof TAbiParameters]: {\n operator: ParamOperator;\n value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;\n } | null;\n};\n\nexport type GetFunctionArgs<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n TAbiFunction extends AbiFunction = TAbi extends Abi\n ? ExtractAbiFunction<TAbi, TFunctionName>\n : AbiFunction,\n TArgs = CombinedArgs<TAbiFunction[\"inputs\"]>,\n FailedToParseArgs =\n | ([TArgs] extends [never] ? true : false)\n | (readonly unknown[] extends TArgs ? true : false)\n> = true extends FailedToParseArgs\n ? {\n args?: readonly unknown[];\n }\n : TArgs extends readonly []\n ? { args?: never }\n : {\n args?: TArgs;\n };\n\nexport type GeneratePermissionFromArgsParameters<\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string | undefined = string,\n _FunctionName = TAbi extends Abi\n ? InferFunctionName<TAbi, TFunctionName>\n : never\n> = Pick<Permission, \"operation\" | \"target\" | \"valueLimit\"> & {\n functionName?: _FunctionName;\n} & (TFunctionName extends string\n ? { abi: Narrow<TAbi> } & GetFunctionArgs<TAbi, TFunctionName>\n : _FunctionName extends string\n ? { abi: [Narrow<TAbi[number]>] } & GetFunctionArgs<TAbi, _FunctionName>\n : never);\n"]}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -3,11 +3,12 @@ export { ValidatorMode, KernelBaseValidator, } from "./kernel-zerodev/validator/
|
|
|
3
3
|
export * from "./kernel-zerodev/validator/index.js";
|
|
4
4
|
export type * from "./kernel-zerodev/validator/types.js";
|
|
5
5
|
export type { KernelBaseValidatorParams } from "./kernel-zerodev/validator/base.js";
|
|
6
|
-
export { ParamCondition, getAbiItem, getPermissionFromABI, } from "./kernel-zerodev/validator/session-key-validator.js";
|
|
6
|
+
export { ParamOperator, ParamOperator as ParamCondition, getAbiItem, getPermissionFromABI, } from "./kernel-zerodev/validator/session-key-validator.js";
|
|
7
7
|
export { ValidatorProvider } from "./kernel-zerodev/validator-provider/base.js";
|
|
8
8
|
export type { ValidatorProviderParams, ValidatorProviderParamsOpts, ExtendedValidatorProviderParams, } from "./kernel-zerodev/validator-provider/base.js";
|
|
9
9
|
export type * from "./kernel-zerodev/validator-provider/types.js";
|
|
10
10
|
export * from "./kernel-zerodev/validator-provider/index.js";
|
|
11
|
+
export { ECDSAProvider as SimpleProvider } from "./kernel-zerodev/validator-provider/index.js";
|
|
11
12
|
export type * from "./kernel-zerodev/paymaster/types.js";
|
|
12
13
|
export { KernelSmartContractAccount } from "./kernel-zerodev/account.js";
|
|
13
14
|
export type { KernelSmartAccountParams } from "./kernel-zerodev/account.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EACL,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EACL,aAAa,EACb,aAAa,IAAI,cAAc,EAC/B,UAAU,EACV,oBAAoB,GACrB,MAAM,qDAAqD,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,6CAA6C,CAAC;AACrD,mBAAmB,8CAA8C,CAAC;AAClE,cAAc,8CAA8C,CAAC;AAC7D,OAAO,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAG/F,mBAAmB,qCAAqC,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG1E,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Address, type Chain, type Hash, type HttpTransport, type RpcTransactionRequest } from "viem";
|
|
2
|
-
import { type SmartAccountProviderOpts, type UserOperationCallData, type BatchUserOperationCallData, type SendUserOperationResult, SmartAccountProvider, type AccountMiddlewareFn, type UserOperationOverrides } from "@alchemy/aa-core";
|
|
2
|
+
import { type SmartAccountProviderOpts, type UserOperationCallData, type BatchUserOperationCallData, type SendUserOperationResult, type UserOperationStruct, SmartAccountProvider, type AccountMiddlewareFn, type UserOperationOverrides } from "@alchemy/aa-core";
|
|
3
3
|
import { KernelSmartContractAccount } from "./account.js";
|
|
4
4
|
import type { PaymasterAndBundlerProviders, PaymasterConfig, PaymasterPolicy } from "./paymaster/types.js";
|
|
5
5
|
export type ZeroDevProviderConfig = {
|
|
@@ -26,6 +26,8 @@ export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport>
|
|
|
26
26
|
constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
|
|
27
27
|
getProjectId: () => string;
|
|
28
28
|
sendTransaction: (request: RpcTransactionRequest, operation?: UserOpDataOperationTypes<UserOperationCallData>) => Promise<Hash>;
|
|
29
|
+
buildUserOperation: <T extends UserOperationCallData | BatchUserOperationCallData>(data: T, overrides?: UserOperationOverrides, operation?: UserOpDataOperationTypes<T>) => Promise<UserOperationStruct>;
|
|
30
|
+
private _runMiddlewareStack;
|
|
29
31
|
sendUserOperation: <T extends UserOperationCallData | BatchUserOperationCallData>(data: T, overrides?: UserOperationOverrides, operation?: UserOpDataOperationTypes<T>) => Promise<SendUserOperationResult>;
|
|
30
32
|
isReplacementOpError(errorIn: any): boolean;
|
|
31
33
|
unwrapError(errorIn: any): Error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,KAAK,wBAAwB,EAE7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,MAAM,CAAC;AACd,OAAO,EAGL,KAAK,wBAAwB,EAE7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAG5B,KAAK,mBAAmB,EAExB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,0BAA0B,EAAmB,MAAM,cAAc,CAAC;AAM3E,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,IAAI,CAAC,EAAE,wBAAwB,GAAG;QAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,oBAAY,SAAS;IACnB,IAAI,IAAI;IACR,YAAY,IAAI;CACjB;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI,CAAC,SAAS,qBAAqB,GAC9D,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,GACvC,CAAC,SAAS,0BAA0B,GACpC,SAAS,CAAC,IAAI,GACd,KAAK,CAAC;AAEV,qBAAa,eAAgB,SAAQ,oBAAoB,CAAC,aAAa,CAAC;IACtE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;gBAE5B,EACV,SAAS,EACT,KAAK,EACL,iBAAsC,EACtC,MAAoB,EACpB,OAAO,EACP,eAAe,EACf,IAAI,GACL,EAAE,qBAAqB;IA2BxB,YAAY,QAAO,MAAM,CAAmB;IAE5C,eAAe,YACJ,qBAAqB,cACnB,yBAAyB,qBAAqB,CAAC,KACzD,QAAQ,IAAI,CAAC,CAwBd;IAEF,kBAAkB,sFAIJ,sBAAsB,8CAEjC,QAAQ,mBAAmB,CAAC,CAkD7B;IAEF,OAAO,CAAC,mBAAmB,CAczB;IAEF,iBAAiB,sFAIH,sBAAsB,8CAEjC,QAAQ,uBAAuB,CAAC,CA2GjC;IAEF,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAc3C,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK;IAsBhC,UAAU,EAAE,MAAM,0BAA0B,CAK1C;IAEF,4BAA4B,EAAE,mBAAmB,CAK/C;IAEF,2BAA2B,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC;;;IAUpE,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CA6BjE;CACH"}
|
|
@@ -14,7 +14,7 @@ export type SessionKeyParams = Pick<SessionKeyValidatorParams, "sessionKeyData"
|
|
|
14
14
|
initCode?: Hex;
|
|
15
15
|
accountAddress?: Address;
|
|
16
16
|
};
|
|
17
|
-
export declare enum
|
|
17
|
+
export declare enum ParamOperator {
|
|
18
18
|
EQUAL = 0,
|
|
19
19
|
GREATER_THAN = 1,
|
|
20
20
|
LESS_THAN = 2,
|
|
@@ -24,13 +24,13 @@ export declare enum ParamCondition {
|
|
|
24
24
|
}
|
|
25
25
|
export interface ParamRules {
|
|
26
26
|
offset: number;
|
|
27
|
-
condition:
|
|
27
|
+
condition: ParamOperator;
|
|
28
28
|
param: Hex;
|
|
29
29
|
}
|
|
30
30
|
export type Permission = {
|
|
31
31
|
target: Address;
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
rules?: ParamRules[];
|
|
33
|
+
sig?: Hex;
|
|
34
34
|
valueLimit?: bigint;
|
|
35
35
|
operation?: Operation;
|
|
36
36
|
};
|
|
@@ -41,7 +41,7 @@ export interface SessionKeyData {
|
|
|
41
41
|
permissions?: Permission[];
|
|
42
42
|
}
|
|
43
43
|
export declare function getAbiItem<TAbi extends Abi | readonly unknown[], TItemName extends string>({ abi, args, name, }: GetAbiItemParameters<TAbi, TItemName>): GetAbiItemReturnType<TAbi, TItemName>;
|
|
44
|
-
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args,
|
|
44
|
+
export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, target, args, functionName, operation, valueLimit, }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Permission;
|
|
45
45
|
export declare class SessionKeyValidator extends KernelBaseValidator {
|
|
46
46
|
protected sessionKey: SmartAccountSigner;
|
|
47
47
|
sessionKeyData: SessionKeyData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAEzB,KAAK,mBAAmB,EACxB,KAAK,GAAG,EACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EAEnB,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AACnB,OAAO,EAaL,KAAK,oBAAoB,EAC1B,MAAM,MAAM,CAAC;AAKd,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { ECDSAValidator, ECDSAValidatorParams } from "./ecdsa-validator.js"
|
|
|
4
4
|
import type { ERC165SessionKeyValidator, ERC165SessionKeyValidatorParams } from "./erc165-session-key-validator.js";
|
|
5
5
|
import type { KillSwitchValidator, KillSwitchValidatorParams } from "./kill-switch-validator.js";
|
|
6
6
|
import type { RecoveryValidator, RecoveryValidatorParams } from "./recovery-validator.js";
|
|
7
|
-
import type { SessionKeyValidator, SessionKeyValidatorParams, ParamRules, Permission, SessionKeyData, SessionKeyParams,
|
|
7
|
+
import type { SessionKeyValidator, SessionKeyValidatorParams, ParamRules, Permission, SessionKeyData, SessionKeyParams, ParamOperator } from "./session-key-validator.js";
|
|
8
8
|
import type { Abi, InferFunctionName, Narrow } from "viem";
|
|
9
9
|
export type SupportedValidators = "ECDSA" | "KILL_SWITCH" | "ERC165_SESSION_KEY" | "SESSION_KEY" | "RECOVERY";
|
|
10
10
|
export type ValidatorTypeMap = {
|
|
@@ -29,20 +29,23 @@ export type EthereumProvider = {
|
|
|
29
29
|
};
|
|
30
30
|
export type { ParamRules, Permission, SessionKeyData, SessionKeyParams };
|
|
31
31
|
export type AbiParametersToPrimitiveTypes<TAbiParameters extends readonly AbiParameter[], TAbiParameterKind extends AbiParameterKind = AbiParameterKind> = Pretty<{
|
|
32
|
-
[K in keyof TAbiParameters]: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind
|
|
32
|
+
[K in keyof TAbiParameters]: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;
|
|
33
33
|
}>;
|
|
34
34
|
export type AbiParametersToConditons<TAbiParameters extends readonly AbiParameter[]> = Pretty<{
|
|
35
|
-
[K in keyof TAbiParameters]:
|
|
35
|
+
[K in keyof TAbiParameters]: ParamOperator;
|
|
36
36
|
}>;
|
|
37
|
-
export type
|
|
37
|
+
export type CombinedArgs<TAbiParameters extends readonly AbiParameter[], TAbiParameterKind extends AbiParameterKind = AbiParameterKind> = {
|
|
38
|
+
[K in keyof TAbiParameters]: {
|
|
39
|
+
operator: ParamOperator;
|
|
40
|
+
value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;
|
|
41
|
+
} | null;
|
|
42
|
+
};
|
|
43
|
+
export type GetFunctionArgs<TAbi extends Abi | readonly unknown[], TFunctionName extends string, TAbiFunction extends AbiFunction = TAbi extends Abi ? ExtractAbiFunction<TAbi, TFunctionName> : AbiFunction, TArgs = CombinedArgs<TAbiFunction["inputs"]>, FailedToParseArgs = ([TArgs] extends [never] ? true : false) | (readonly unknown[] extends TArgs ? true : false)> = true extends FailedToParseArgs ? {
|
|
38
44
|
args?: readonly unknown[];
|
|
39
|
-
conditions?: readonly unknown[];
|
|
40
45
|
} : TArgs extends readonly [] ? {
|
|
41
46
|
args?: never;
|
|
42
|
-
conditions?: never;
|
|
43
47
|
} : {
|
|
44
48
|
args?: TArgs;
|
|
45
|
-
conditions?: TConditions;
|
|
46
49
|
};
|
|
47
50
|
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = Pick<Permission, "operation" | "target" | "valueLimit"> & {
|
|
48
51
|
functionName?: _FunctionName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,yBAAyB,EACzB,+BAA+B,EAChC,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EACzB,UAAU,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -13,7 +13,8 @@ export * from "./kernel-zerodev/validator/index.js";
|
|
|
13
13
|
export type * from "./kernel-zerodev/validator/types.js";
|
|
14
14
|
export type { KernelBaseValidatorParams } from "./kernel-zerodev/validator/base.js";
|
|
15
15
|
export {
|
|
16
|
-
|
|
16
|
+
ParamOperator,
|
|
17
|
+
ParamOperator as ParamCondition,
|
|
17
18
|
getAbiItem,
|
|
18
19
|
getPermissionFromABI,
|
|
19
20
|
} from "./kernel-zerodev/validator/session-key-validator.js";
|
|
@@ -27,6 +28,7 @@ export type {
|
|
|
27
28
|
} from "./kernel-zerodev/validator-provider/base.js";
|
|
28
29
|
export type * from "./kernel-zerodev/validator-provider/types.js";
|
|
29
30
|
export * from "./kernel-zerodev/validator-provider/index.js";
|
|
31
|
+
export { ECDSAProvider as SimpleProvider } from "./kernel-zerodev/validator-provider/index.js";
|
|
30
32
|
|
|
31
33
|
// Core exports
|
|
32
34
|
export type * from "./kernel-zerodev/paymaster/types.js";
|
|
@@ -137,6 +137,80 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
|
|
|
137
137
|
return await this.waitForUserOperationTransaction(hash as Hash);
|
|
138
138
|
};
|
|
139
139
|
|
|
140
|
+
buildUserOperation = async <
|
|
141
|
+
T extends UserOperationCallData | BatchUserOperationCallData
|
|
142
|
+
>(
|
|
143
|
+
data: T,
|
|
144
|
+
overrides?: UserOperationOverrides,
|
|
145
|
+
operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>
|
|
146
|
+
): Promise<UserOperationStruct> => {
|
|
147
|
+
if (!isKernelAccount(this.account)) {
|
|
148
|
+
throw new Error("account not connected!");
|
|
149
|
+
}
|
|
150
|
+
if (!this.account.validator) {
|
|
151
|
+
throw new Error("validator not connected!");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
let callData: BytesLike = "0x";
|
|
155
|
+
|
|
156
|
+
if (Array.isArray(data)) {
|
|
157
|
+
if (operation === Operation.Call) {
|
|
158
|
+
callData = await this.account.encodeBatchExecute(data);
|
|
159
|
+
} else {
|
|
160
|
+
throw InvalidOperation;
|
|
161
|
+
}
|
|
162
|
+
} else if (isKernelAccount(this.account)) {
|
|
163
|
+
if (operation === Operation.DelegateCall) {
|
|
164
|
+
callData = await this.account.encodeExecuteDelegate(
|
|
165
|
+
data.target,
|
|
166
|
+
data.value ?? 0n,
|
|
167
|
+
data.data
|
|
168
|
+
);
|
|
169
|
+
} else if (operation === Operation.Call) {
|
|
170
|
+
callData = await this.account.encodeExecute(
|
|
171
|
+
data.target,
|
|
172
|
+
data.value ?? 0n,
|
|
173
|
+
data.data
|
|
174
|
+
);
|
|
175
|
+
} else {
|
|
176
|
+
throw InvalidOperation;
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
throw InvalidOperation;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const initCode = await this.account.getInitCode();
|
|
183
|
+
const nonce = await this.account.getNonce();
|
|
184
|
+
return await this._runMiddlewareStack(
|
|
185
|
+
{
|
|
186
|
+
initCode,
|
|
187
|
+
sender: this.getAddress(),
|
|
188
|
+
nonce,
|
|
189
|
+
callData,
|
|
190
|
+
signature: await this.account
|
|
191
|
+
.getValidator()
|
|
192
|
+
.getDynamicDummySignature(await this.getAddress(), callData as Hex),
|
|
193
|
+
} as UserOperationStruct,
|
|
194
|
+
overrides
|
|
195
|
+
);
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
private _runMiddlewareStack = async (
|
|
199
|
+
uo: UserOperationStruct,
|
|
200
|
+
overrides?: UserOperationOverrides
|
|
201
|
+
): Promise<UserOperationStruct> => {
|
|
202
|
+
const result = await asyncPipe(
|
|
203
|
+
this.dummyPaymasterDataMiddleware,
|
|
204
|
+
this.feeDataGetter,
|
|
205
|
+
this.paymasterDataMiddleware,
|
|
206
|
+
this.gasEstimator,
|
|
207
|
+
this.customMiddleware ?? noOpMiddleware,
|
|
208
|
+
async (struct) => ({ ...struct, ...overrides })
|
|
209
|
+
)(uo);
|
|
210
|
+
|
|
211
|
+
return deepHexlify(await resolveProperties<UserOperationStruct>(result));
|
|
212
|
+
};
|
|
213
|
+
|
|
140
214
|
sendUserOperation = async <
|
|
141
215
|
T extends UserOperationCallData | BatchUserOperationCallData
|
|
142
216
|
>(
|
|
@@ -38,7 +38,11 @@ import { Operation } from "../provider.js";
|
|
|
38
38
|
import { getChainId } from "../api/index.js";
|
|
39
39
|
import { fixSignedData } from "../utils.js";
|
|
40
40
|
import type { GetAbiItemReturnType } from "viem/dist/types/utils/abi/getAbiItem.js";
|
|
41
|
-
import type
|
|
41
|
+
import { type AbiFunction } from "abitype";
|
|
42
|
+
import type {
|
|
43
|
+
CombinedArgs,
|
|
44
|
+
GeneratePermissionFromArgsParameters,
|
|
45
|
+
} from "./types.js";
|
|
42
46
|
|
|
43
47
|
// We need to be able to serialize bigint to transmit session key over
|
|
44
48
|
// the network.
|
|
@@ -62,7 +66,7 @@ export type SessionKeyParams = Pick<
|
|
|
62
66
|
accountAddress?: Address;
|
|
63
67
|
};
|
|
64
68
|
|
|
65
|
-
export enum
|
|
69
|
+
export enum ParamOperator {
|
|
66
70
|
EQUAL = 0,
|
|
67
71
|
GREATER_THAN = 1,
|
|
68
72
|
LESS_THAN = 2,
|
|
@@ -73,14 +77,14 @@ export enum ParamCondition {
|
|
|
73
77
|
|
|
74
78
|
export interface ParamRules {
|
|
75
79
|
offset: number;
|
|
76
|
-
condition:
|
|
80
|
+
condition: ParamOperator;
|
|
77
81
|
param: Hex;
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
export type Permission = {
|
|
81
85
|
target: Address;
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
rules?: ParamRules[];
|
|
87
|
+
sig?: Hex;
|
|
84
88
|
valueLimit?: bigint;
|
|
85
89
|
operation?: Operation;
|
|
86
90
|
};
|
|
@@ -136,7 +140,6 @@ export function getPermissionFromABI<
|
|
|
136
140
|
abi,
|
|
137
141
|
target,
|
|
138
142
|
args,
|
|
139
|
-
conditions,
|
|
140
143
|
functionName,
|
|
141
144
|
operation,
|
|
142
145
|
valueLimit,
|
|
@@ -151,24 +154,22 @@ export function getPermissionFromABI<
|
|
|
151
154
|
}
|
|
152
155
|
const functionSelector = getFunctionSelector(abiItem);
|
|
153
156
|
let paramRules: ParamRules[] = [];
|
|
154
|
-
if (
|
|
155
|
-
args
|
|
156
|
-
|
|
157
|
-
conditions &&
|
|
158
|
-
Array.isArray(conditions) &&
|
|
159
|
-
args.length === conditions.length
|
|
160
|
-
) {
|
|
161
|
-
paramRules = args
|
|
162
|
-
.map<ParamRules>(
|
|
157
|
+
if (args && Array.isArray(args)) {
|
|
158
|
+
paramRules = (args as CombinedArgs<AbiFunction["inputs"]>)
|
|
159
|
+
.map(
|
|
163
160
|
(arg, i) =>
|
|
164
|
-
arg &&
|
|
165
|
-
|
|
166
|
-
|
|
161
|
+
arg && {
|
|
162
|
+
param: pad(
|
|
163
|
+
isHex(arg.value)
|
|
164
|
+
? arg.value
|
|
165
|
+
: toHex(arg.value as Parameters<typeof toHex>[0]),
|
|
166
|
+
{ size: 32 }
|
|
167
|
+
),
|
|
167
168
|
offset: i * 32,
|
|
168
|
-
condition:
|
|
169
|
+
condition: arg.operator,
|
|
169
170
|
}
|
|
170
171
|
)
|
|
171
|
-
.filter((rule) => rule);
|
|
172
|
+
.filter((rule) => rule) as ParamRules[];
|
|
172
173
|
}
|
|
173
174
|
return {
|
|
174
175
|
sig: functionSelector,
|
|
@@ -198,6 +199,8 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
198
199
|
...perm,
|
|
199
200
|
operation: perm.operation ?? Operation.Call,
|
|
200
201
|
valueLimit: perm.valueLimit ?? 0n,
|
|
202
|
+
sig: perm.sig ?? pad("0x", { size: 4 }),
|
|
203
|
+
rules: perm.rules ?? [],
|
|
201
204
|
})
|
|
202
205
|
);
|
|
203
206
|
this.merkleTree = this.getMerkleTree();
|
|
@@ -305,7 +308,8 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
305
308
|
signature: string
|
|
306
309
|
): Permission[] {
|
|
307
310
|
return permissions.filter(
|
|
308
|
-
(permission) =>
|
|
311
|
+
(permission) =>
|
|
312
|
+
(permission.sig ?? pad("0x", { size: 4 })).toLowerCase() === signature
|
|
309
313
|
);
|
|
310
314
|
}
|
|
311
315
|
|
|
@@ -314,7 +318,7 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
314
318
|
data: string
|
|
315
319
|
): Permission | undefined {
|
|
316
320
|
return permissions.find((permission) => {
|
|
317
|
-
for (const rule of permission.rules) {
|
|
321
|
+
for (const rule of permission.rules ?? []) {
|
|
318
322
|
const dataParam: Hex = this.getFormattedHex(
|
|
319
323
|
"0x" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)
|
|
320
324
|
);
|
|
@@ -337,20 +341,20 @@ export class SessionKeyValidator extends KernelBaseValidator {
|
|
|
337
341
|
private evaluateRuleCondition(
|
|
338
342
|
dataParam: Hex,
|
|
339
343
|
ruleParam: Hex,
|
|
340
|
-
condition:
|
|
344
|
+
condition: ParamOperator
|
|
341
345
|
): boolean {
|
|
342
346
|
switch (condition) {
|
|
343
|
-
case
|
|
347
|
+
case ParamOperator.EQUAL:
|
|
344
348
|
return dataParam === ruleParam;
|
|
345
|
-
case
|
|
349
|
+
case ParamOperator.GREATER_THAN:
|
|
346
350
|
return dataParam > ruleParam;
|
|
347
|
-
case
|
|
351
|
+
case ParamOperator.LESS_THAN:
|
|
348
352
|
return dataParam < ruleParam;
|
|
349
|
-
case
|
|
353
|
+
case ParamOperator.GREATER_THAN_OR_EQUAL:
|
|
350
354
|
return dataParam >= ruleParam;
|
|
351
|
-
case
|
|
355
|
+
case ParamOperator.LESS_THAN_OR_EQUAL:
|
|
352
356
|
return dataParam <= ruleParam;
|
|
353
|
-
case
|
|
357
|
+
case ParamOperator.NOT_EQUAL:
|
|
354
358
|
return dataParam !== ruleParam;
|
|
355
359
|
default:
|
|
356
360
|
return false;
|
|
@@ -30,7 +30,7 @@ import type {
|
|
|
30
30
|
Permission,
|
|
31
31
|
SessionKeyData,
|
|
32
32
|
SessionKeyParams,
|
|
33
|
-
|
|
33
|
+
ParamOperator,
|
|
34
34
|
} from "./session-key-validator.js";
|
|
35
35
|
import type { Abi, InferFunctionName, Narrow } from "viem";
|
|
36
36
|
|
|
@@ -75,36 +75,43 @@ export type AbiParametersToPrimitiveTypes<
|
|
|
75
75
|
[K in keyof TAbiParameters]: AbiParameterToPrimitiveType<
|
|
76
76
|
TAbiParameters[K],
|
|
77
77
|
TAbiParameterKind
|
|
78
|
-
|
|
78
|
+
>;
|
|
79
79
|
}>;
|
|
80
80
|
|
|
81
81
|
export type AbiParametersToConditons<
|
|
82
82
|
TAbiParameters extends readonly AbiParameter[]
|
|
83
83
|
> = Pretty<{
|
|
84
|
-
[K in keyof TAbiParameters]:
|
|
84
|
+
[K in keyof TAbiParameters]: ParamOperator;
|
|
85
85
|
}>;
|
|
86
86
|
|
|
87
|
+
export type CombinedArgs<
|
|
88
|
+
TAbiParameters extends readonly AbiParameter[],
|
|
89
|
+
TAbiParameterKind extends AbiParameterKind = AbiParameterKind
|
|
90
|
+
> = {
|
|
91
|
+
[K in keyof TAbiParameters]: {
|
|
92
|
+
operator: ParamOperator;
|
|
93
|
+
value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;
|
|
94
|
+
} | null;
|
|
95
|
+
};
|
|
96
|
+
|
|
87
97
|
export type GetFunctionArgs<
|
|
88
98
|
TAbi extends Abi | readonly unknown[],
|
|
89
99
|
TFunctionName extends string,
|
|
90
100
|
TAbiFunction extends AbiFunction = TAbi extends Abi
|
|
91
101
|
? ExtractAbiFunction<TAbi, TFunctionName>
|
|
92
102
|
: AbiFunction,
|
|
93
|
-
TArgs =
|
|
94
|
-
TConditions = AbiParametersToConditons<TAbiFunction["inputs"]>,
|
|
103
|
+
TArgs = CombinedArgs<TAbiFunction["inputs"]>,
|
|
95
104
|
FailedToParseArgs =
|
|
96
105
|
| ([TArgs] extends [never] ? true : false)
|
|
97
106
|
| (readonly unknown[] extends TArgs ? true : false)
|
|
98
107
|
> = true extends FailedToParseArgs
|
|
99
108
|
? {
|
|
100
109
|
args?: readonly unknown[];
|
|
101
|
-
conditions?: readonly unknown[];
|
|
102
110
|
}
|
|
103
111
|
: TArgs extends readonly []
|
|
104
|
-
? { args?: never
|
|
112
|
+
? { args?: never }
|
|
105
113
|
: {
|
|
106
114
|
args?: TArgs;
|
|
107
|
-
conditions?: TConditions;
|
|
108
115
|
};
|
|
109
116
|
|
|
110
117
|
export type GeneratePermissionFromArgsParameters<
|