@zerodev/sdk 4.0.26 → 4.0.28
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 +1 -693
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/account.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/account.js +27 -5
- package/dist/cjs/kernel-zerodev/account.js.map +1 -1
- package/dist/cjs/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/cjs/kernel-zerodev/api/index.js +18 -1
- package/dist/cjs/kernel-zerodev/api/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +6 -0
- package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/exceptions.js +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/exceptions.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js +3 -3
- package/dist/cjs/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +4 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/index.js.map +1 -1
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +3 -1
- package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
- package/dist/cjs/kernel-zerodev/provider.js +2 -2
- package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js +50 -9
- package/dist/cjs/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js +20 -32
- package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/account.d.ts +1 -0
- package/dist/esm/kernel-zerodev/account.js +29 -7
- package/dist/esm/kernel-zerodev/account.js.map +1 -1
- package/dist/esm/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/esm/kernel-zerodev/api/index.js +16 -0
- package/dist/esm/kernel-zerodev/api/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +6 -0
- package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/exceptions.js +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/exceptions.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js +3 -3
- package/dist/esm/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +4 -2
- package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.js +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/index.js.map +1 -1
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js +2 -2
- package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -1
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +4 -2
- package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
- package/dist/esm/kernel-zerodev/provider.js +2 -2
- package/dist/esm/kernel-zerodev/provider.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js +52 -11
- package/dist/esm/kernel-zerodev/validator/recovery-validator.js.map +1 -1
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js +23 -32
- package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/account.d.ts +1 -0
- package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/api/index.d.ts +2 -0
- package/dist/types/kernel-zerodev/api/index.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
- package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/exceptions.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/index.d.ts +1 -1
- package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts +8 -5
- package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts.map +1 -1
- package/dist/types/kernel-zerodev/validator-provider/recovery-provider.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/kernel-zerodev/account.ts +30 -9
- package/src/kernel-zerodev/api/index.ts +27 -0
- package/src/kernel-zerodev/ethers-provider/account-signer.ts +9 -0
- package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +4 -4
- package/src/kernel-zerodev/owner/passkey/exceptions.ts +2 -2
- package/src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts +11 -9
- package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +5 -3
- package/src/kernel-zerodev/owner/passkey/index.ts +1 -1
- package/src/kernel-zerodev/owner/passkey/utils.ts +11 -6
- package/src/kernel-zerodev/paymaster/token-paymaster.ts +12 -2
- package/src/kernel-zerodev/provider.ts +2 -2
- package/src/kernel-zerodev/validator/recovery-validator.ts +59 -12
- package/src/kernel-zerodev/validator-provider/recovery-provider.ts +38 -36
|
@@ -16,6 +16,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
|
|
|
16
16
|
signTypedData(params: SignTypedDataParams): Promise<string>;
|
|
17
17
|
_signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
|
|
18
18
|
signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
|
|
19
|
+
signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
|
|
19
20
|
withPaymasterMiddleware: (overrides: {
|
|
20
21
|
dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
21
22
|
paymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-signer.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAUhC,qBAAa,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,CAC7D,SAAQ,MACR,YAAW,eAAe;IAOd,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IALvD,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C,iBAAiB,i8EAAC;IAClB,+BAA+B,kDAAC;gBAEX,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAcvD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAU7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU1D,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IAkBZ,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"account-signer.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAUhC,qBAAa,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,CAC7D,SAAQ,MACR,YAAW,eAAe;IAOd,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IALvD,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C,iBAAiB,i8EAAC;IAClB,+BAA+B,kDAAC;gBAEX,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAcvD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAU7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU1D,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IAkBZ,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAS5D,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAStE,uBAAuB,cAAe;QACpC,4BAA4B,CAAC,EAAE,0BAA0B,CAAC;QAC1D,uBAAuB,CAAC,EAAE,0BAA0B,CAAC;KACtD,KAAG,IAAI,CAGN;IAEF,gBAAgB,aAAc,sBAAsB,KAAG,IAAI,CAGzD;IAEF,iBAAiB,aAAc,iBAAiB,KAAG,IAAI,CAGrD;IAEF,oBAAoB,aAAc,mBAAmB,KAAG,IAAI,CAG1D;IAEI,eAAe,CACnB,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,mBAAmB,CAAC;IAY/B,eAAe,CACb,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC;IAMlB,sBAAsB,IAAI,mBAAmB;IAI7C,OAAO,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;CAGrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/exceptions.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/exceptions.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,OAAO,EAAE,MAAM,CAA+B;CAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAutocompletePasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWhF,wBAAsB,2BAA2B,CAAC,EAChD,SAAS,EACT,MAAgB,GACjB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"getAutocompletePasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getAutocompletePasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWhF,wBAAsB,2BAA2B,CAAC,EAChD,SAAS,EACT,MAAgB,GACjB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CA8D1C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SmartAccountSigner } from "@alchemy/aa-core";
|
|
2
|
-
export declare function getPasskeyOwner({ projectId, name, apiUrl, withCredentials }: {
|
|
2
|
+
export declare function getPasskeyOwner({ projectId, name, apiUrl, withCredentials, }: {
|
|
3
3
|
projectId: string;
|
|
4
4
|
name?: string;
|
|
5
5
|
apiUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWhF,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,MAAgB,EAChB,eAAuB,
|
|
1
|
+
{"version":3,"file":"getPasskeyOwner.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWhF,wBAAsB,eAAe,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,MAAgB,EAChB,eAAuB,GACxB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAqD1C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { abortWebauthn } from
|
|
1
|
+
export { abortWebauthn } from "./utils.js";
|
|
2
2
|
export { getPasskeyOwner } from "./getPasskeyOwner.js";
|
|
3
3
|
export { createPasskeyOwner } from "./createPasskeyOwner.js";
|
|
4
4
|
export { getAutocompletePasskeyOwner } from "./getAutocompletePasskeyOwner.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/utils.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAO5D,eAAO,MAAM,eAAe;;CAE3B,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/kernel-zerodev/owner/passkey/utils.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAO5D,eAAO,MAAM,eAAe;;CAE3B,CAAC;AAEF,wBAAgB,aAAa,SAG5B;AAED,eAAO,MAAM,SAAS,eAAe,CAAC;AAEtC,eAAO,MAAM,KAAK,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB,QAAO,WAKvC,CAAC;AAEF,eAAO,MAAM,eAAe,cAAe,WAAW,KAAG,MAMxD,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAC/B,MAAM,MACP,MAAM,YACA,MAAM,aACL,MAAM,gBACH,MAAM,4CAmDrB,CAAC;AAEF,eAAO,MAAM,WAAW,QACjB,MAAM,GAAG,UAAU,MACpB,MAAM,YACA,MAAM,aACL,MAAM,gBACH,MAAM,4CAWrB,CAAC;AAEF,eAAO,MAAM,aAAa,WAChB,mBAAmB,MACvB,MAAM,YACA,MAAM,aACL,MAAM,gBACH,MAAM,4CAYrB,CAAC;AAEF,eAAO,MAAM,cAAc,cACd,MAAM,SACV,MAAM,kCAWd,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,CAyB5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-paymaster.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,
|
|
1
|
+
{"version":3,"file":"token-paymaster.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,KAAK,GAAG,EAKT,MAAM,MAAM,CAAC;AAcd,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAe,SAAQ,SAAS;IAGzC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;gBAD7D,QAAQ,EAAE,eAAe,EACf,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;IAIzD,mBAAmB,CACvB,iBAAiB,CAAC,EAAE,4BAA4B,GAC/C,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAmBrB,0BAA0B,CAC9B,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,GAClC,OAAO,CAAC,iCAAiC,GAAG,SAAS,CAAC;IA2DnD,cAAc,CAClB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,iCAAiC,EAC3C,eAAe,EAAE,GAAG,EACpB,gBAAgB,EAAE,GAAG,GACpB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAgCrC,oBAAoB,CACxB,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;CAkD5C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest, type SignTypedDataParams } from "@alchemy/aa-core";
|
|
2
2
|
import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
|
|
3
|
-
import { type LocalAccount, type WalletClient, type Transport, type Chain, type Account } from "viem";
|
|
3
|
+
import { type LocalAccount, type WalletClient, type Transport, type Chain, type Account, type PublicClient } from "viem";
|
|
4
4
|
import type { EthereumProvider } from "./types.js";
|
|
5
5
|
interface WeightedGuardians {
|
|
6
6
|
[guardian: Address]: number;
|
|
@@ -10,9 +10,10 @@ export interface RecoveryValidatorParams extends KernelBaseValidatorParams {
|
|
|
10
10
|
threshold?: number;
|
|
11
11
|
delaySeconds?: number;
|
|
12
12
|
accountSigner?: SmartAccountSigner;
|
|
13
|
-
|
|
13
|
+
localAccountOrProvider?: LocalAccount<string> | EthereumProvider;
|
|
14
14
|
walletClient?: WalletClient<Transport, Chain>;
|
|
15
15
|
signatures?: Hex;
|
|
16
|
+
recoveryId?: string;
|
|
16
17
|
}
|
|
17
18
|
export type RecoveryConfig = Required<Pick<RecoveryValidatorParams, "guardians" | "threshold" | "delaySeconds">>;
|
|
18
19
|
export declare function isLocalAccount(account: any): account is LocalAccount<string>;
|
|
@@ -24,14 +25,15 @@ export declare class RecoveryValidator extends KernelBaseValidator {
|
|
|
24
25
|
protected threshold?: number;
|
|
25
26
|
protected delaySeconds: number;
|
|
26
27
|
protected accountSigner?: SmartAccountSigner;
|
|
27
|
-
protected
|
|
28
|
+
protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;
|
|
28
29
|
protected signatures?: Hex;
|
|
29
|
-
|
|
30
|
+
protected recoveryId?: string;
|
|
31
|
+
walletClient?: WalletClient<Transport, Chain, WalletClientAccountType<typeof this.localAccountOrProvider>>;
|
|
30
32
|
constructor(params: RecoveryValidatorParams);
|
|
31
33
|
static init(params: RecoveryValidatorParams): Promise<RecoveryValidator>;
|
|
32
34
|
getNonceKey(): bigint;
|
|
33
35
|
setRecoverySignatures(signatures: Hex): void;
|
|
34
|
-
getRecoverySignatures(): Hex | undefined
|
|
36
|
+
getRecoverySignatures(): Promise<Hex | undefined>;
|
|
35
37
|
getRecoveryConfig(): RecoveryConfig;
|
|
36
38
|
signer(): Promise<SmartAccountSigner>;
|
|
37
39
|
getEnableData(): Promise<Hex>;
|
|
@@ -41,6 +43,7 @@ export declare class RecoveryValidator extends KernelBaseValidator {
|
|
|
41
43
|
encodeApproveWithSig(callDataAndNonceHash: Hex, kernelAccountAddress: Address, sigs: Hex): Hex;
|
|
42
44
|
encodeVeto(callDataAndNonceHash: Hex): Hex;
|
|
43
45
|
encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex;
|
|
46
|
+
static fetchRecoveryConfigFromContract(kernelAccountAddress: Address, publicClient: PublicClient<Transport, Chain>): Promise<RecoveryConfig>;
|
|
44
47
|
isPluginEnabled(kernelAccountAddress: Address, selector: Hex): Promise<boolean>;
|
|
45
48
|
isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean>;
|
|
46
49
|
getDummyUserOpSignature(): Promise<Hex>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EAEnB,KAAK,yBAAyB,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAML,KAAK,YAAY,EAEjB,KAAK,YAAY,EAGjB,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"recovery-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recovery-provider.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,+BAA+B,EACrC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"recovery-provider.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,+BAA+B,EACrC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAIL,KAAK,GAAG,EAGR,KAAK,kBAAkB,EAGxB,MAAM,MAAM,CAAC;AAKd,MAAM,WAAW,sBACf,SAAQ,+BAA+B,CAAC,uBAAuB,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;AAED,qBAAa,gBAAiB,SAAQ,iBAAiB,CACrD,iBAAiB,EACjB,uBAAuB,CACxB;IACC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,GAAG,CAAC;gBACL,MAAM,EAAE,sBAAsB;WA4BtB,IAAI,CACtB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IA2DtB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUvC,sBAAsB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAerD,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAkBlD,gBAAgB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAexD,uBAAuB,IAAI,MAAM;WAQnB,yBAAyB,CACrC,cAAc,EAAE,MAAM,GACrB,cAAc;IAMX,eAAe,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+B9D,YAAY,CAAC,UAAU,CAAC,EAAE,GAAG;IAyB7B,sBAAsB,CAC1B,UAAU,CAAC,EAAE,GAAG,EAChB,IAAI,CAAC,EAAE,GAAG,GACT,OAAO,CAAC,kBAAkB,CAAC;IAqCxB,cAAc,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqBlE,cAAc,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqBxE,kBAAkB,oEAAiC;CACpD"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -37,6 +37,7 @@ export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-p
|
|
|
37
37
|
export { ZeroDevAccountSigner } from "./kernel-zerodev/ethers-provider/account-signer.js";
|
|
38
38
|
export { EmptyAccountSigner } from "./kernel-zerodev/signer/empty-account.js";
|
|
39
39
|
|
|
40
|
+
// Constant exports
|
|
40
41
|
export * as constants from "./kernel-zerodev/constants.js";
|
|
41
42
|
|
|
42
43
|
// Owner exports
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Address } from "abitype";
|
|
2
2
|
import {
|
|
3
3
|
concatHex,
|
|
4
|
-
encodeAbiParameters,
|
|
5
4
|
encodeFunctionData,
|
|
6
5
|
type FallbackTransport,
|
|
7
6
|
hashMessage,
|
|
@@ -9,7 +8,6 @@ import {
|
|
|
9
8
|
toBytes,
|
|
10
9
|
type Transport,
|
|
11
10
|
} from "viem";
|
|
12
|
-
import { parseAbiParameters } from "abitype";
|
|
13
11
|
import { KernelBaseValidator } from "./validator/base.js";
|
|
14
12
|
import { KernelAccountAbi } from "./abis/KernelAccountAbi.js";
|
|
15
13
|
import { KernelFactoryAbi } from "./abis/KernelFactoryAbi.js";
|
|
@@ -21,6 +19,7 @@ import {
|
|
|
21
19
|
defineReadOnly,
|
|
22
20
|
getChain,
|
|
23
21
|
type SignTypedDataParams,
|
|
22
|
+
wrapWith6492,
|
|
24
23
|
} from "@alchemy/aa-core";
|
|
25
24
|
import {
|
|
26
25
|
BUNDLER_URL,
|
|
@@ -228,19 +227,41 @@ export class KernelSmartContractAccount<
|
|
|
228
227
|
throw new Error("Validator not connected");
|
|
229
228
|
}
|
|
230
229
|
const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
|
|
231
|
-
let
|
|
230
|
+
let signature = await this.validator.signMessage(
|
|
232
231
|
toBytes(hashMessage({ raw: formattedMessage }))
|
|
233
232
|
);
|
|
234
233
|
// If the account is undeployed, use ERC-6492
|
|
235
234
|
if (!(await this.isAccountDeployed())) {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
235
|
+
signature = wrapWith6492({
|
|
236
|
+
factoryAddress: this.factoryAddress,
|
|
237
|
+
initCode: await this.getFactoryInitCode(),
|
|
238
|
+
signature,
|
|
239
|
+
});
|
|
241
240
|
}
|
|
242
241
|
|
|
243
|
-
return
|
|
242
|
+
return signature;
|
|
243
|
+
} catch (err: any) {
|
|
244
|
+
console.error("Got Error - ", err.message);
|
|
245
|
+
throw new Error("Message Signing with EIP6492 failed");
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {
|
|
250
|
+
try {
|
|
251
|
+
if (!this.validator) {
|
|
252
|
+
throw new Error("Validator not connected");
|
|
253
|
+
}
|
|
254
|
+
let signature = await this.validator.signTypedData(params);
|
|
255
|
+
// If the account is undeployed, use ERC-6492
|
|
256
|
+
if (!(await this.isAccountDeployed())) {
|
|
257
|
+
signature = wrapWith6492({
|
|
258
|
+
factoryAddress: this.factoryAddress,
|
|
259
|
+
initCode: await this.getFactoryInitCode(),
|
|
260
|
+
signature,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return signature;
|
|
244
265
|
} catch (err: any) {
|
|
245
266
|
console.error("Got Error - ", err.message);
|
|
246
267
|
throw new Error("Message Signing with EIP6492 failed");
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
import { BACKEND_URL } from "../constants.js";
|
|
3
|
+
import type { Hex } from "viem";
|
|
3
4
|
|
|
4
5
|
export const getChainId = async (
|
|
5
6
|
projectId: string,
|
|
@@ -39,6 +40,32 @@ export const getRecoveryData = async (recoveryId: string) => {
|
|
|
39
40
|
}
|
|
40
41
|
};
|
|
41
42
|
|
|
43
|
+
export const postRecoveryData = async (
|
|
44
|
+
enableData: Hex,
|
|
45
|
+
scwAddress: Hex,
|
|
46
|
+
recoveryConfig: string
|
|
47
|
+
): Promise<string | undefined> => {
|
|
48
|
+
try {
|
|
49
|
+
const {
|
|
50
|
+
data: { recoveryId },
|
|
51
|
+
} = await axios.post(
|
|
52
|
+
`${BACKEND_URL}/v1/recovery`,
|
|
53
|
+
{
|
|
54
|
+
enableData,
|
|
55
|
+
scwAddress,
|
|
56
|
+
recoveryConfig,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
headers: { "Content-Type": "application/json" },
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
return recoveryId;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
console.log(error);
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
42
69
|
export const setSignatures = async (recoveryId: string, signatures: string) => {
|
|
43
70
|
try {
|
|
44
71
|
const { data } = await axios.patch(
|
|
@@ -120,6 +120,15 @@ export class ZeroDevAccountSigner<V extends SupportedValidators>
|
|
|
120
120
|
return this.account.signMessageWith6492(_msg);
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {
|
|
124
|
+
if (!this.account) {
|
|
125
|
+
throw new Error(
|
|
126
|
+
"connect the signer to a provider that has a connected account"
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return this.account.signTypedDataWith6492(params);
|
|
130
|
+
}
|
|
131
|
+
|
|
123
132
|
withPaymasterMiddleware = (overrides: {
|
|
124
133
|
dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
125
134
|
paymasterDataMiddleware?: PaymasterAndDataMiddleware;
|
|
@@ -30,16 +30,16 @@ export async function createPasskeyOwner({
|
|
|
30
30
|
//@ts-expect-error
|
|
31
31
|
if (typeof window !== "undefined") {
|
|
32
32
|
const challenge = generateRandomBuffer();
|
|
33
|
-
let credentials = undefined
|
|
33
|
+
let credentials = undefined;
|
|
34
34
|
if (withCredentials) {
|
|
35
|
-
credentials = await getCredentials(projectId, name)
|
|
35
|
+
credentials = await getCredentials(projectId, name);
|
|
36
36
|
}
|
|
37
37
|
if (credentials && credentials?.length >= 64) {
|
|
38
|
-
throw new UsernameIsAlreadyUsed()
|
|
38
|
+
throw new UsernameIsAlreadyUsed();
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
try {
|
|
42
|
-
abortWebauthn()
|
|
42
|
+
abortWebauthn();
|
|
43
43
|
const attestation = await getWebAuthnAttestation({
|
|
44
44
|
publicKey: {
|
|
45
45
|
rp: {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export class UsernameIsAlreadyUsed extends Error {
|
|
2
|
-
|
|
3
|
-
}
|
|
2
|
+
message: string = "Username is already used.";
|
|
3
|
+
}
|
|
@@ -19,27 +19,29 @@ export async function getAutocompletePasskeyOwner({
|
|
|
19
19
|
name?: string;
|
|
20
20
|
apiUrl?: string;
|
|
21
21
|
}): Promise<SmartAccountSigner | undefined> {
|
|
22
|
-
|
|
23
|
-
if (!PublicKeyCredential?.isConditionalMediationAvailable ||
|
|
22
|
+
if (
|
|
24
23
|
//@ts-ignore
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
!PublicKeyCredential?.isConditionalMediationAvailable ||
|
|
25
|
+
//@ts-ignore
|
|
26
|
+
!PublicKeyCredential?.isConditionalMediationAvailable()
|
|
27
|
+
) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
28
30
|
|
|
29
31
|
//@ts-expect-error
|
|
30
32
|
if (typeof window !== "undefined") {
|
|
31
33
|
const challenge = generateRandomBuffer();
|
|
32
34
|
try {
|
|
33
|
-
abortWebauthn()
|
|
35
|
+
abortWebauthn();
|
|
34
36
|
const assertion = JSON.parse(
|
|
35
37
|
await getWebAuthnAssertion(base64UrlEncode(challenge), {
|
|
36
|
-
mediation:
|
|
38
|
+
mediation: "conditional",
|
|
37
39
|
publicKey: {
|
|
38
40
|
//@ts-expect-error
|
|
39
41
|
rpId: window.location.hostname,
|
|
40
42
|
userVerification: "required",
|
|
41
43
|
},
|
|
42
|
-
signal: abortController.controller.signal
|
|
44
|
+
signal: abortController.controller.signal,
|
|
43
45
|
})
|
|
44
46
|
);
|
|
45
47
|
const response = await axios.post(
|
|
@@ -50,7 +52,7 @@ export async function getAutocompletePasskeyOwner({
|
|
|
50
52
|
}
|
|
51
53
|
);
|
|
52
54
|
const { id, walletId, address } = await response.data;
|
|
53
|
-
console.log(
|
|
55
|
+
console.log("owner", id, walletId, address);
|
|
54
56
|
const owner: SmartAccountSigner = {
|
|
55
57
|
getAddress: async () => address,
|
|
56
58
|
signMessage: (msg) =>
|
|
@@ -15,7 +15,7 @@ export async function getPasskeyOwner({
|
|
|
15
15
|
projectId,
|
|
16
16
|
name,
|
|
17
17
|
apiUrl = API_URL,
|
|
18
|
-
withCredentials = false
|
|
18
|
+
withCredentials = false,
|
|
19
19
|
}: {
|
|
20
20
|
projectId: string;
|
|
21
21
|
name?: string;
|
|
@@ -26,14 +26,16 @@ export async function getPasskeyOwner({
|
|
|
26
26
|
if (typeof window !== "undefined") {
|
|
27
27
|
const challenge = generateRandomBuffer();
|
|
28
28
|
try {
|
|
29
|
-
abortWebauthn()
|
|
29
|
+
abortWebauthn();
|
|
30
30
|
const assertion = JSON.parse(
|
|
31
31
|
await getWebAuthnAssertion(base64UrlEncode(challenge), {
|
|
32
32
|
publicKey: {
|
|
33
33
|
//@ts-expect-error
|
|
34
34
|
rpId: window.location.hostname,
|
|
35
35
|
userVerification: "required",
|
|
36
|
-
allowCredentials: withCredentials
|
|
36
|
+
allowCredentials: withCredentials
|
|
37
|
+
? await getCredentials(projectId, name)
|
|
38
|
+
: undefined,
|
|
37
39
|
},
|
|
38
40
|
})
|
|
39
41
|
);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { abortWebauthn } from
|
|
1
|
+
export { abortWebauthn } from "./utils.js";
|
|
2
2
|
export { getPasskeyOwner } from "./getPasskeyOwner.js";
|
|
3
3
|
export { createPasskeyOwner } from "./createPasskeyOwner.js";
|
|
4
4
|
export { getAutocompletePasskeyOwner } from "./getAutocompletePasskeyOwner.js";
|
|
@@ -10,11 +10,11 @@ browserInit({
|
|
|
10
10
|
|
|
11
11
|
export const abortController = {
|
|
12
12
|
controller: new AbortController(),
|
|
13
|
-
}
|
|
13
|
+
};
|
|
14
14
|
|
|
15
15
|
export function abortWebauthn() {
|
|
16
|
-
abortController.controller.abort(
|
|
17
|
-
abortController.controller = new AbortController()
|
|
16
|
+
abortController.controller.abort("ZeroDev: Reset previous Webauthn request");
|
|
17
|
+
abortController.controller = new AbortController();
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export const publicKey = "public-key";
|
|
@@ -44,7 +44,7 @@ export const signMessageImplementation = async (
|
|
|
44
44
|
credentialId: string,
|
|
45
45
|
apiUrl = API_URL
|
|
46
46
|
) => {
|
|
47
|
-
abortWebauthn()
|
|
47
|
+
abortWebauthn();
|
|
48
48
|
const signedRequest = await TurnkeyApi.signSignRawPayload(
|
|
49
49
|
{
|
|
50
50
|
body: {
|
|
@@ -131,8 +131,13 @@ export const signTypedData = async (
|
|
|
131
131
|
);
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
export const getCredentials = async (
|
|
135
|
-
|
|
134
|
+
export const getCredentials = async (
|
|
135
|
+
projectId: string,
|
|
136
|
+
name?: string,
|
|
137
|
+
apiUrl = API_URL
|
|
138
|
+
) => {
|
|
139
|
+
const url =
|
|
140
|
+
`${apiUrl}/projects/${projectId}/wallets` + (name ? `/${name}` : "");
|
|
136
141
|
const response = await axios.get(url);
|
|
137
142
|
const credentials = response.data;
|
|
138
143
|
return credentials.map((credential: string) => ({
|
|
@@ -5,7 +5,13 @@ import {
|
|
|
5
5
|
type UserOperationStruct,
|
|
6
6
|
} from "@alchemy/aa-core";
|
|
7
7
|
import axios from "axios";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
type Hex,
|
|
10
|
+
toHex,
|
|
11
|
+
decodeFunctionData,
|
|
12
|
+
encodeFunctionData,
|
|
13
|
+
isAddress,
|
|
14
|
+
} from "viem";
|
|
9
15
|
import { ERC20Abi } from "../abis/ERC20Abi.js";
|
|
10
16
|
import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
|
|
11
17
|
import { MultiSendAbi } from "../abis/MultiSendAbi.js";
|
|
@@ -180,7 +186,11 @@ export class TokenPaymaster extends Paymaster {
|
|
|
180
186
|
chainId
|
|
181
187
|
);
|
|
182
188
|
let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
|
|
183
|
-
if (
|
|
189
|
+
if (
|
|
190
|
+
gasTokenAddress !== undefined &&
|
|
191
|
+
paymasterAddress !== undefined &&
|
|
192
|
+
isAddress(paymasterAddress)
|
|
193
|
+
) {
|
|
184
194
|
const erc20UserOp = await this.getERC20UserOp(
|
|
185
195
|
struct,
|
|
186
196
|
mainCall,
|
|
@@ -331,13 +331,13 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
|
|
|
331
331
|
throw new Error("account not connected!");
|
|
332
332
|
}
|
|
333
333
|
const [data, address] = params!;
|
|
334
|
-
if (address !== (await this.getAddress())) {
|
|
334
|
+
if (address.toLowerCase() !== (await this.getAddress()).toLowerCase()) {
|
|
335
335
|
throw new Error(
|
|
336
336
|
"cannot sign for address that is not the current account"
|
|
337
337
|
);
|
|
338
338
|
}
|
|
339
339
|
// @ts-ignore
|
|
340
|
-
return this.account.
|
|
340
|
+
return this.account.signMessageWith6492(data);
|
|
341
341
|
default:
|
|
342
342
|
// @ts-ignore
|
|
343
343
|
return this.rpcClient.request(args);
|
|
@@ -27,13 +27,15 @@ import {
|
|
|
27
27
|
type Account,
|
|
28
28
|
publicActions,
|
|
29
29
|
getFunctionSelector,
|
|
30
|
+
type PublicClient,
|
|
30
31
|
} from "viem";
|
|
31
32
|
import { WeightedValidatorAbi } from "../abis/WeightedValidatorAbi.js";
|
|
32
|
-
import { getChainId } from "../api/index.js";
|
|
33
|
+
import { getChainId, getRecoveryData } from "../api/index.js";
|
|
33
34
|
import {
|
|
34
35
|
CHAIN_ID_TO_NODE,
|
|
35
36
|
DUMMY_ECDSA_SIG,
|
|
36
37
|
RECOVERY_ACTION,
|
|
38
|
+
RECOVERY_VALIDATOR_ADDRESS,
|
|
37
39
|
} from "../constants.js";
|
|
38
40
|
import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
|
|
39
41
|
import { fixSignedData } from "../utils.js";
|
|
@@ -49,9 +51,10 @@ export interface RecoveryValidatorParams extends KernelBaseValidatorParams {
|
|
|
49
51
|
threshold?: number;
|
|
50
52
|
delaySeconds?: number;
|
|
51
53
|
accountSigner?: SmartAccountSigner;
|
|
52
|
-
|
|
54
|
+
localAccountOrProvider?: LocalAccount<string> | EthereumProvider;
|
|
53
55
|
walletClient?: WalletClient<Transport, Chain>;
|
|
54
56
|
signatures?: Hex;
|
|
57
|
+
recoveryId?: string;
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
export type RecoveryConfig = Required<
|
|
@@ -83,12 +86,13 @@ export class RecoveryValidator extends KernelBaseValidator {
|
|
|
83
86
|
protected threshold?: number;
|
|
84
87
|
protected delaySeconds: number;
|
|
85
88
|
protected accountSigner?: SmartAccountSigner;
|
|
86
|
-
protected
|
|
89
|
+
protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;
|
|
87
90
|
protected signatures?: Hex;
|
|
91
|
+
protected recoveryId?: string;
|
|
88
92
|
walletClient?: WalletClient<
|
|
89
93
|
Transport,
|
|
90
94
|
Chain,
|
|
91
|
-
WalletClientAccountType<typeof this.
|
|
95
|
+
WalletClientAccountType<typeof this.localAccountOrProvider>
|
|
92
96
|
>;
|
|
93
97
|
|
|
94
98
|
constructor(params: RecoveryValidatorParams) {
|
|
@@ -98,27 +102,28 @@ export class RecoveryValidator extends KernelBaseValidator {
|
|
|
98
102
|
this.delaySeconds = params.delaySeconds ?? 0;
|
|
99
103
|
this.accountSigner = params.accountSigner;
|
|
100
104
|
this.mode = params.mode ?? ValidatorMode.plugin;
|
|
101
|
-
this.
|
|
105
|
+
this.localAccountOrProvider = params.localAccountOrProvider;
|
|
102
106
|
this.signatures = params.signatures;
|
|
103
107
|
this.validAfter = params.validAfter ?? 0;
|
|
104
108
|
this.validUntil = params.validUntil ?? 0;
|
|
105
109
|
this.executor = params.executor ?? RECOVERY_ACTION;
|
|
106
110
|
this.selector = params.selector ?? recoverySelector;
|
|
107
|
-
|
|
111
|
+
this.recoveryId = params.recoveryId;
|
|
112
|
+
if (isLocalAccount(params.localAccountOrProvider)) {
|
|
108
113
|
this.walletClient = createWalletClient({
|
|
109
|
-
account: params.
|
|
114
|
+
account: params.localAccountOrProvider,
|
|
110
115
|
chain: this.chain ?? polygonMumbai,
|
|
111
116
|
transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),
|
|
112
117
|
}).extend(publicActions);
|
|
113
|
-
} else if (isEthereumProvider(params.
|
|
118
|
+
} else if (isEthereumProvider(params.localAccountOrProvider)) {
|
|
114
119
|
this.walletClient = createWalletClient({
|
|
115
120
|
chain: this.chain ?? polygonMumbai,
|
|
116
|
-
transport: custom(params.
|
|
121
|
+
transport: custom(params.localAccountOrProvider),
|
|
117
122
|
}).extend(publicActions);
|
|
118
123
|
} else if (params.walletClient) {
|
|
119
124
|
this.walletClient = params.walletClient.extend(publicActions);
|
|
120
|
-
} else if (params.
|
|
121
|
-
throw Error("Incorrect
|
|
125
|
+
} else if (params.localAccountOrProvider) {
|
|
126
|
+
throw Error("Incorrect localAccountOrProvider type");
|
|
122
127
|
}
|
|
123
128
|
}
|
|
124
129
|
|
|
@@ -142,7 +147,11 @@ export class RecoveryValidator extends KernelBaseValidator {
|
|
|
142
147
|
this.signatures = signatures;
|
|
143
148
|
}
|
|
144
149
|
|
|
145
|
-
getRecoverySignatures(): Hex | undefined {
|
|
150
|
+
async getRecoverySignatures(): Promise<Hex | undefined> {
|
|
151
|
+
if (this.recoveryId) {
|
|
152
|
+
const { signatures } = await getRecoveryData(this.recoveryId);
|
|
153
|
+
this.setRecoverySignatures(signatures);
|
|
154
|
+
}
|
|
146
155
|
return this.signatures;
|
|
147
156
|
}
|
|
148
157
|
|
|
@@ -243,6 +252,44 @@ export class RecoveryValidator extends KernelBaseValidator {
|
|
|
243
252
|
});
|
|
244
253
|
}
|
|
245
254
|
|
|
255
|
+
static async fetchRecoveryConfigFromContract(
|
|
256
|
+
kernelAccountAddress: Address,
|
|
257
|
+
publicClient: PublicClient<Transport, Chain>
|
|
258
|
+
): Promise<RecoveryConfig> {
|
|
259
|
+
try {
|
|
260
|
+
const [, threshold, delaySeconds, firstGuardian] =
|
|
261
|
+
await publicClient.readContract({
|
|
262
|
+
abi: WeightedValidatorAbi,
|
|
263
|
+
address: RECOVERY_VALIDATOR_ADDRESS,
|
|
264
|
+
functionName: "weightedStorage",
|
|
265
|
+
args: [kernelAccountAddress],
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
const guardians: WeightedGuardians = {};
|
|
269
|
+
|
|
270
|
+
let nextGuardian = firstGuardian;
|
|
271
|
+
while (
|
|
272
|
+
nextGuardian.toLowerCase() !== kernelAccountAddress.toLowerCase()
|
|
273
|
+
) {
|
|
274
|
+
const guardianStorage = await publicClient.readContract({
|
|
275
|
+
abi: WeightedValidatorAbi,
|
|
276
|
+
address: RECOVERY_VALIDATOR_ADDRESS,
|
|
277
|
+
functionName: "guardian",
|
|
278
|
+
args: [nextGuardian, kernelAccountAddress],
|
|
279
|
+
});
|
|
280
|
+
guardians[nextGuardian] = guardianStorage[0];
|
|
281
|
+
nextGuardian = guardianStorage[1];
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
threshold,
|
|
285
|
+
delaySeconds,
|
|
286
|
+
guardians,
|
|
287
|
+
};
|
|
288
|
+
} catch (error) {
|
|
289
|
+
throw Error("Failed to fetch config from contract");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
246
293
|
async isPluginEnabled(
|
|
247
294
|
kernelAccountAddress: Address,
|
|
248
295
|
selector: Hex
|