@zerodev/permissions 5.4.9 → 5.5.0-beta.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.
Files changed (52) hide show
  1. package/_cjs/deserializePermissionAccount.js +8 -11
  2. package/_cjs/deserializePermissionAccount.js.map +1 -1
  3. package/_cjs/index.js.map +1 -1
  4. package/_cjs/serializeMultiChainPermissionAccounts.js.map +1 -1
  5. package/_cjs/serializePermissionAccount.js +4 -3
  6. package/_cjs/serializePermissionAccount.js.map +1 -1
  7. package/_cjs/signers/toECDSASigner.js +4 -5
  8. package/_cjs/signers/toECDSASigner.js.map +1 -1
  9. package/_cjs/signers/toWebAuthnSigner.js +3 -4
  10. package/_cjs/signers/toWebAuthnSigner.js.map +1 -1
  11. package/_cjs/toPermissionValidator.js +11 -8
  12. package/_cjs/toPermissionValidator.js.map +1 -1
  13. package/_cjs/utils.js.map +1 -1
  14. package/_esm/deserializePermissionAccount.js +8 -11
  15. package/_esm/deserializePermissionAccount.js.map +1 -1
  16. package/_esm/index.js.map +1 -1
  17. package/_esm/serializeMultiChainPermissionAccounts.js.map +1 -1
  18. package/_esm/serializePermissionAccount.js +4 -3
  19. package/_esm/serializePermissionAccount.js.map +1 -1
  20. package/_esm/signers/toECDSASigner.js +2 -3
  21. package/_esm/signers/toECDSASigner.js.map +1 -1
  22. package/_esm/signers/toWebAuthnSigner.js +1 -2
  23. package/_esm/signers/toWebAuthnSigner.js.map +1 -1
  24. package/_esm/toPermissionValidator.js +10 -7
  25. package/_esm/toPermissionValidator.js.map +1 -1
  26. package/_esm/utils.js.map +1 -1
  27. package/_types/deserializePermissionAccount.d.ts +264 -3
  28. package/_types/deserializePermissionAccount.d.ts.map +1 -1
  29. package/_types/index.d.ts.map +1 -1
  30. package/_types/serializeMultiChainPermissionAccounts.d.ts +5 -5
  31. package/_types/serializeMultiChainPermissionAccounts.d.ts.map +1 -1
  32. package/_types/serializePermissionAccount.d.ts +3 -3
  33. package/_types/serializePermissionAccount.d.ts.map +1 -1
  34. package/_types/signers/toECDSASigner.d.ts +4 -5
  35. package/_types/signers/toECDSASigner.d.ts.map +1 -1
  36. package/_types/signers/toWebAuthnSigner.d.ts.map +1 -1
  37. package/_types/toPermissionValidator.d.ts +3 -3
  38. package/_types/toPermissionValidator.d.ts.map +1 -1
  39. package/_types/types.d.ts +8 -5
  40. package/_types/types.d.ts.map +1 -1
  41. package/_types/utils.d.ts +1 -2
  42. package/_types/utils.d.ts.map +1 -1
  43. package/deserializePermissionAccount.ts +16 -40
  44. package/index.ts +4 -1
  45. package/package.json +4 -5
  46. package/serializeMultiChainPermissionAccounts.ts +9 -12
  47. package/serializePermissionAccount.ts +11 -9
  48. package/signers/toECDSASigner.ts +11 -17
  49. package/signers/toWebAuthnSigner.ts +3 -2
  50. package/toPermissionValidator.ts +18 -16
  51. package/types.ts +7 -8
  52. package/utils.ts +2 -3
@@ -1,6 +1,4 @@
1
- import type { KernelSmartAccount } from "@zerodev/sdk"
2
1
  import { MerkleTree } from "merkletreejs"
3
- import type { EntryPoint } from "permissionless/types"
4
2
  import {
5
3
  type Hex,
6
4
  concatHex,
@@ -14,17 +12,16 @@ import {
14
12
  isPermissionValidatorPlugin,
15
13
  serializePermissionAccountParams
16
14
  } from "./utils.js"
15
+ import type { SmartAccount } from "viem/account-abstraction"
16
+ import type { KernelSmartAccountImplementation } from "@zerodev/sdk"
17
17
 
18
- export type MultiChainPermissionAccountsParams<entryPoint extends EntryPoint> =
19
- {
20
- account: KernelSmartAccount<entryPoint>
21
- privateKey?: Hex
22
- }
18
+ export type MultiChainPermissionAccountsParams = {
19
+ account: SmartAccount<KernelSmartAccountImplementation>
20
+ privateKey?: Hex
21
+ }
23
22
 
24
- export const serializeMultiChainPermissionAccounts = async <
25
- entryPoint extends EntryPoint
26
- >(
27
- params: MultiChainPermissionAccountsParams<entryPoint>[]
23
+ export const serializeMultiChainPermissionAccounts = async (
24
+ params: MultiChainPermissionAccountsParams[]
28
25
  ): Promise<string[]> => {
29
26
  if (params.length === 0) return []
30
27
 
@@ -33,7 +30,7 @@ export const serializeMultiChainPermissionAccounts = async <
33
30
  throw new Error("Account plugin is not a permission validator")
34
31
  }
35
32
  return (
36
- param.account.kernelPluginManager as PermissionPlugin<entryPoint>
33
+ param.account.kernelPluginManager as PermissionPlugin
37
34
  ).getPluginSerializationParams()
38
35
  })
39
36
 
@@ -1,14 +1,15 @@
1
- import type { KernelSmartAccount } from "@zerodev/sdk"
2
- import type { EntryPoint } from "permissionless/types"
3
1
  import type { Hex } from "viem"
4
2
  import {
5
3
  isPermissionValidatorPlugin,
6
4
  serializePermissionAccountParams
7
5
  } from "./utils.js"
6
+ import type { SmartAccount } from "viem/account-abstraction"
7
+ import type { KernelSmartAccountImplementation } from "@zerodev/sdk"
8
8
 
9
- export const serializePermissionAccount = async <entryPoint extends EntryPoint>(
10
- account: KernelSmartAccount<entryPoint>,
11
- privateKey?: Hex
9
+ export const serializePermissionAccount = async (
10
+ account: SmartAccount<KernelSmartAccountImplementation>,
11
+ privateKey?: Hex,
12
+ enableSignature?: Hex
12
13
  ): Promise<string> => {
13
14
  if (!isPermissionValidatorPlugin(account.kernelPluginManager))
14
15
  throw new Error("Account plugin is not a permission validator")
@@ -16,10 +17,11 @@ export const serializePermissionAccount = async <entryPoint extends EntryPoint>(
16
17
  account.kernelPluginManager.getPluginSerializationParams()
17
18
  const action = account.kernelPluginManager.getAction()
18
19
  const validityData = account.kernelPluginManager.getValidityData()
19
- const enableSignature =
20
- await account.kernelPluginManager.getPluginEnableSignature(
20
+ const _enableSignature =
21
+ enableSignature ??
22
+ (await account.kernelPluginManager.getPluginEnableSignature(
21
23
  account.address
22
- )
24
+ ))
23
25
  const accountParams = {
24
26
  initCode: await account.generateInitCode(),
25
27
  accountAddress: account.address
@@ -30,7 +32,7 @@ export const serializePermissionAccount = async <entryPoint extends EntryPoint>(
30
32
  action,
31
33
  validityData,
32
34
  accountParams,
33
- enableSignature,
35
+ enableSignature: _enableSignature,
34
36
  privateKey
35
37
  }
36
38
 
@@ -1,32 +1,24 @@
1
1
  import { constants, fixSignedData } from "@zerodev/sdk"
2
2
  import type { TypedData } from "abitype"
3
- import {
4
- SignTransactionNotSupportedBySmartAccount,
5
- type SmartAccountSigner
6
- } from "permissionless/accounts"
7
- import type { Address, LocalAccount, TypedDataDefinition } from "viem"
3
+ import type { LocalAccount, TypedDataDefinition } from "viem"
8
4
  import { toAccount } from "viem/accounts"
9
5
  import { ECDSA_SIGNER_CONTRACT } from "../constants.js"
10
6
  import type { ModularSigner, ModularSignerParams } from "../types.js"
11
7
 
12
- export type ECDSAModularSignerParams<
13
- TSource extends string = "custom",
14
- TAddress extends Address = Address
15
- > = ModularSignerParams & {
16
- signer: SmartAccountSigner<TSource, TAddress>
8
+ export type ECDSAModularSignerParams = ModularSignerParams & {
9
+ signer: LocalAccount
17
10
  }
18
11
 
19
- export function toECDSASigner<
20
- TSource extends string = "custom",
21
- TAddress extends Address = Address
22
- >({
12
+ export function toECDSASigner({
23
13
  signer,
24
14
  signerContractAddress = ECDSA_SIGNER_CONTRACT
25
- }: ECDSAModularSignerParams<TSource, TAddress>): ModularSigner {
15
+ }: ECDSAModularSignerParams): ModularSigner {
26
16
  const viemSigner: LocalAccount = {
27
17
  ...signer,
28
18
  signTransaction: (_, __) => {
29
- throw new SignTransactionNotSupportedBySmartAccount()
19
+ throw new Error(
20
+ "Smart account signer doesn't need to sign transactions"
21
+ )
30
22
  }
31
23
  } as LocalAccount
32
24
  const account = toAccount({
@@ -35,7 +27,9 @@ export function toECDSASigner<
35
27
  return fixSignedData(await viemSigner.signMessage({ message }))
36
28
  },
37
29
  async signTransaction(_, __) {
38
- throw new SignTransactionNotSupportedBySmartAccount()
30
+ throw new Error(
31
+ "Smart account signer doesn't need to sign transactions"
32
+ )
39
33
  },
40
34
  async signTypedData<
41
35
  const TTypedData extends TypedData | Record<string, unknown>,
@@ -10,7 +10,6 @@ import {
10
10
  uint8ArrayToHexString
11
11
  } from "@zerodev/webauthn-key"
12
12
  import type { TypedData } from "abitype"
13
- import { SignTransactionNotSupportedBySmartAccount } from "permissionless/accounts"
14
13
  import {
15
14
  type Address,
16
15
  type Chain,
@@ -161,7 +160,9 @@ export const toWebAuthnSigner = async <
161
160
  ])
162
161
  },
163
162
  async signTransaction(_, __) {
164
- throw new SignTransactionNotSupportedBySmartAccount()
163
+ throw new Error(
164
+ "Smart account signer doesn't need to sign transactions"
165
+ )
165
166
  },
166
167
  async signTypedData<
167
168
  const TTypedData extends TypedData | Record<string, unknown>,
@@ -1,12 +1,8 @@
1
1
  import { KernelV3AccountAbi } from "@zerodev/sdk"
2
- import { getEntryPointVersion, getUserOperationHash } from "permissionless"
3
- import type { EntryPoint } from "permissionless/types/entrypoint"
4
2
  import {
5
3
  type Address,
6
- type Chain,
7
4
  type Client,
8
5
  type Hex,
9
- type Transport,
10
6
  concat,
11
7
  encodeAbiParameters,
12
8
  keccak256,
@@ -23,25 +19,27 @@ import type {
23
19
  PermissionPlugin,
24
20
  PermissionPluginParams
25
21
  } from "./types.js"
22
+ import {
23
+ getUserOperationHash,
24
+ type UserOperation,
25
+ type EntryPointVersion
26
+ } from "viem/account-abstraction"
26
27
 
27
28
  export async function toPermissionValidator<
28
- entryPoint extends EntryPoint,
29
- TTransport extends Transport = Transport,
30
- TChain extends Chain | undefined = Chain | undefined
29
+ entryPointVersion extends EntryPointVersion
31
30
  >(
32
- client: Client<TTransport, TChain, undefined>,
31
+ client: Client,
33
32
  {
34
33
  signer,
35
34
  policies,
36
- entryPoint: entryPointAddress,
35
+ entryPoint,
37
36
  kernelVersion: _,
38
37
  flag = PolicyFlags.FOR_ALL_VALIDATION
39
- }: PermissionPluginParams<entryPoint>
40
- ): Promise<PermissionPlugin<entryPoint>> {
38
+ }: PermissionPluginParams<entryPointVersion>
39
+ ): Promise<PermissionPlugin> {
41
40
  const chainId = await getChainId(client)
42
- const entryPointVersion = getEntryPointVersion(entryPointAddress)
43
41
 
44
- if (entryPointVersion !== "v0.7") {
42
+ if (entryPoint.version !== "0.7") {
45
43
  throw new Error("Only EntryPoint 0.7 is supported")
46
44
  }
47
45
 
@@ -101,8 +99,12 @@ export async function toPermissionValidator<
101
99
 
102
100
  signUserOperation: async (userOperation): Promise<Hex> => {
103
101
  const userOpHash = getUserOperationHash({
104
- userOperation: { ...userOperation, signature: "0x" },
105
- entryPoint: entryPointAddress,
102
+ userOperation: {
103
+ ...userOperation,
104
+ signature: "0x"
105
+ } as UserOperation<entryPointVersion>,
106
+ entryPointAddress: entryPoint.address,
107
+ entryPointVersion: entryPoint.version,
106
108
  chainId
107
109
  })
108
110
 
@@ -119,7 +121,7 @@ export async function toPermissionValidator<
119
121
  return 0n
120
122
  },
121
123
 
122
- async getDummySignature(_userOperation) {
124
+ async getStubSignature(_userOperation) {
123
125
  return concat(["0xff", signer.getDummySignature()])
124
126
  },
125
127
  getPluginSerializationParams: (): PermissionData => {
package/types.ts CHANGED
@@ -4,7 +4,6 @@ import type {
4
4
  GetKernelVersion,
5
5
  PluginValidityData
6
6
  } from "@zerodev/sdk/types"
7
- import type { EntryPoint } from "permissionless/types/entrypoint"
8
7
  import type { Abi, Address, Hex, LocalAccount } from "viem"
9
8
  import type { PolicyFlags } from "./constants.js"
10
9
  import type {
@@ -15,11 +14,9 @@ import type {
15
14
  SudoPolicyParams,
16
15
  TimestampPolicyParams
17
16
  } from "./policies/index.js"
17
+ import type { EntryPointVersion } from "viem/account-abstraction"
18
18
 
19
- export type PermissionPlugin<entryPoint extends EntryPoint> = KernelValidator<
20
- entryPoint,
21
- "PermissionValidator"
22
- > & {
19
+ export type PermissionPlugin = KernelValidator<"PermissionValidator"> & {
23
20
  getPluginSerializationParams: () => PermissionData
24
21
  }
25
22
 
@@ -53,11 +50,13 @@ export type Policy = {
53
50
  | (TimestampPolicyParams & { type: "timestamp" })
54
51
  }
55
52
 
56
- export type PermissionPluginParams<entryPoint extends EntryPoint> = {
53
+ export type PermissionPluginParams<
54
+ entryPointVersion extends EntryPointVersion
55
+ > = {
57
56
  signer: ModularSigner
58
57
  policies: Policy[]
59
- entryPoint: entryPoint
60
- kernelVersion: GetKernelVersion<entryPoint>
58
+ entryPoint: { address: Address; version: entryPointVersion }
59
+ kernelVersion: GetKernelVersion<entryPointVersion>
61
60
  flag?: PolicyFlags
62
61
  }
63
62
 
package/utils.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { EntryPoint } from "permissionless/types"
2
1
  import type { PermissionAccountParams, PermissionPlugin } from "./types.js"
3
2
 
4
3
  export function base64ToBytes(base64: string) {
@@ -11,10 +10,10 @@ export function bytesToBase64(bytes: Uint8Array) {
11
10
  return btoa(binString)
12
11
  }
13
12
 
14
- export function isPermissionValidatorPlugin<entryPoint extends EntryPoint>(
13
+ export function isPermissionValidatorPlugin(
15
14
  // biome-ignore lint/suspicious/noExplicitAny: <explanation>
16
15
  plugin: any
17
- ): plugin is PermissionPlugin<entryPoint> {
16
+ ): plugin is PermissionPlugin {
18
17
  return plugin?.getPluginSerializationParams !== undefined
19
18
  }
20
19