@zerodev/permissions 5.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.
Files changed (171) hide show
  1. package/_cjs/constants.js +18 -0
  2. package/_cjs/constants.js.map +1 -0
  3. package/_cjs/deserializePermissionAccount.js +99 -0
  4. package/_cjs/deserializePermissionAccount.js.map +1 -0
  5. package/_cjs/index.js +12 -0
  6. package/_cjs/index.js.map +1 -0
  7. package/_cjs/package.json +1 -0
  8. package/_cjs/policies/callPolicyUtils.js +87 -0
  9. package/_cjs/policies/callPolicyUtils.js.map +1 -0
  10. package/_cjs/policies/index.js +21 -0
  11. package/_cjs/policies/index.js.map +1 -0
  12. package/_cjs/policies/toCallPolicy.js +42 -0
  13. package/_cjs/policies/toCallPolicy.js.map +1 -0
  14. package/_cjs/policies/toGasPolicy.js +30 -0
  15. package/_cjs/policies/toGasPolicy.js.map +1 -0
  16. package/_cjs/policies/toRateLimitPolicy.js +30 -0
  17. package/_cjs/policies/toRateLimitPolicy.js.map +1 -0
  18. package/_cjs/policies/toSignatureCallerPolicy.js +24 -0
  19. package/_cjs/policies/toSignatureCallerPolicy.js.map +1 -0
  20. package/_cjs/policies/toSudoPolicy.js +22 -0
  21. package/_cjs/policies/toSudoPolicy.js.map +1 -0
  22. package/_cjs/policies/toTimestampPolicy.js +27 -0
  23. package/_cjs/policies/toTimestampPolicy.js.map +1 -0
  24. package/_cjs/policies/types.js +19 -0
  25. package/_cjs/policies/types.js.map +1 -0
  26. package/_cjs/policies/utils/toPolicyId.js +11 -0
  27. package/_cjs/policies/utils/toPolicyId.js.map +1 -0
  28. package/_cjs/serializePermissionAccount.js +27 -0
  29. package/_cjs/serializePermissionAccount.js.map +1 -0
  30. package/_cjs/signers/index.js +14 -0
  31. package/_cjs/signers/index.js.map +1 -0
  32. package/_cjs/signers/toECDSASigner.js +39 -0
  33. package/_cjs/signers/toECDSASigner.js.map +1 -0
  34. package/_cjs/signers/toEmptyECDSASigner.js +30 -0
  35. package/_cjs/signers/toEmptyECDSASigner.js.map +1 -0
  36. package/_cjs/signers/toWebAuthnPubKey.js +98 -0
  37. package/_cjs/signers/toWebAuthnPubKey.js.map +1 -0
  38. package/_cjs/signers/toWebAuthnSigner.js +154 -0
  39. package/_cjs/signers/toWebAuthnSigner.js.map +1 -0
  40. package/_cjs/signers/utils/toSignerId.js +9 -0
  41. package/_cjs/signers/utils/toSignerId.js.map +1 -0
  42. package/_cjs/signers/webAuthnUtils.js +45 -0
  43. package/_cjs/signers/webAuthnUtils.js.map +1 -0
  44. package/_cjs/toPermissionValidator.js +98 -0
  45. package/_cjs/toPermissionValidator.js.map +1 -0
  46. package/_cjs/types.js +3 -0
  47. package/_cjs/types.js.map +1 -0
  48. package/_cjs/utils.js +37 -0
  49. package/_cjs/utils.js.map +1 -0
  50. package/_esm/constants.js +15 -0
  51. package/_esm/constants.js.map +1 -0
  52. package/_esm/deserializePermissionAccount.js +94 -0
  53. package/_esm/deserializePermissionAccount.js.map +1 -0
  54. package/_esm/index.js +5 -0
  55. package/_esm/index.js.map +1 -0
  56. package/_esm/package.json +1 -0
  57. package/_esm/policies/callPolicyUtils.js +82 -0
  58. package/_esm/policies/callPolicyUtils.js.map +1 -0
  59. package/_esm/policies/index.js +9 -0
  60. package/_esm/policies/index.js.map +1 -0
  61. package/_esm/policies/toCallPolicy.js +38 -0
  62. package/_esm/policies/toCallPolicy.js.map +1 -0
  63. package/_esm/policies/toGasPolicy.js +26 -0
  64. package/_esm/policies/toGasPolicy.js.map +1 -0
  65. package/_esm/policies/toRateLimitPolicy.js +26 -0
  66. package/_esm/policies/toRateLimitPolicy.js.map +1 -0
  67. package/_esm/policies/toSignatureCallerPolicy.js +20 -0
  68. package/_esm/policies/toSignatureCallerPolicy.js.map +1 -0
  69. package/_esm/policies/toSudoPolicy.js +18 -0
  70. package/_esm/policies/toSudoPolicy.js.map +1 -0
  71. package/_esm/policies/toTimestampPolicy.js +23 -0
  72. package/_esm/policies/toTimestampPolicy.js.map +1 -0
  73. package/_esm/policies/types.js +17 -0
  74. package/_esm/policies/types.js.map +1 -0
  75. package/_esm/policies/utils/toPolicyId.js +7 -0
  76. package/_esm/policies/utils/toPolicyId.js.map +1 -0
  77. package/_esm/serializePermissionAccount.js +23 -0
  78. package/_esm/serializePermissionAccount.js.map +1 -0
  79. package/_esm/signers/index.js +6 -0
  80. package/_esm/signers/index.js.map +1 -0
  81. package/_esm/signers/toECDSASigner.js +36 -0
  82. package/_esm/signers/toECDSASigner.js.map +1 -0
  83. package/_esm/signers/toEmptyECDSASigner.js +27 -0
  84. package/_esm/signers/toEmptyECDSASigner.js.map +1 -0
  85. package/_esm/signers/toWebAuthnPubKey.js +108 -0
  86. package/_esm/signers/toWebAuthnPubKey.js.map +1 -0
  87. package/_esm/signers/toWebAuthnSigner.js +164 -0
  88. package/_esm/signers/toWebAuthnSigner.js.map +1 -0
  89. package/_esm/signers/utils/toSignerId.js +5 -0
  90. package/_esm/signers/utils/toSignerId.js.map +1 -0
  91. package/_esm/signers/webAuthnUtils.js +41 -0
  92. package/_esm/signers/webAuthnUtils.js.map +1 -0
  93. package/_esm/toPermissionValidator.js +94 -0
  94. package/_esm/toPermissionValidator.js.map +1 -0
  95. package/_esm/types.js +3 -0
  96. package/_esm/types.js.map +1 -0
  97. package/_esm/utils.js +32 -0
  98. package/_esm/utils.js.map +1 -0
  99. package/_types/constants.d.ts +14 -0
  100. package/_types/constants.d.ts.map +1 -0
  101. package/_types/deserializePermissionAccount.d.ts +13 -0
  102. package/_types/deserializePermissionAccount.d.ts.map +1 -0
  103. package/_types/index.d.ts +6 -0
  104. package/_types/index.d.ts.map +1 -0
  105. package/_types/policies/callPolicyUtils.d.ts +5 -0
  106. package/_types/policies/callPolicyUtils.d.ts.map +1 -0
  107. package/_types/policies/index.d.ts +9 -0
  108. package/_types/policies/index.d.ts.map +1 -0
  109. package/_types/policies/toCallPolicy.d.ts +8 -0
  110. package/_types/policies/toCallPolicy.d.ts.map +1 -0
  111. package/_types/policies/toGasPolicy.d.ts +9 -0
  112. package/_types/policies/toGasPolicy.d.ts.map +1 -0
  113. package/_types/policies/toRateLimitPolicy.d.ts +8 -0
  114. package/_types/policies/toRateLimitPolicy.d.ts.map +1 -0
  115. package/_types/policies/toSignatureCallerPolicy.d.ts +7 -0
  116. package/_types/policies/toSignatureCallerPolicy.d.ts.map +1 -0
  117. package/_types/policies/toSudoPolicy.d.ts +4 -0
  118. package/_types/policies/toSudoPolicy.d.ts.map +1 -0
  119. package/_types/policies/toTimestampPolicy.d.ts +7 -0
  120. package/_types/policies/toTimestampPolicy.d.ts.map +1 -0
  121. package/_types/policies/types.d.ts +56 -0
  122. package/_types/policies/types.d.ts.map +1 -0
  123. package/_types/policies/utils/toPolicyId.d.ts +4 -0
  124. package/_types/policies/utils/toPolicyId.d.ts.map +1 -0
  125. package/_types/serializePermissionAccount.d.ts +5 -0
  126. package/_types/serializePermissionAccount.d.ts.map +1 -0
  127. package/_types/signers/index.d.ts +6 -0
  128. package/_types/signers/index.d.ts.map +1 -0
  129. package/_types/signers/toECDSASigner.d.ts +8 -0
  130. package/_types/signers/toECDSASigner.d.ts.map +1 -0
  131. package/_types/signers/toEmptyECDSASigner.d.ts +4 -0
  132. package/_types/signers/toEmptyECDSASigner.d.ts.map +1 -0
  133. package/_types/signers/toWebAuthnPubKey.d.ts +11 -0
  134. package/_types/signers/toWebAuthnPubKey.d.ts.map +1 -0
  135. package/_types/signers/toWebAuthnSigner.d.ts +16 -0
  136. package/_types/signers/toWebAuthnSigner.d.ts.map +1 -0
  137. package/_types/signers/utils/toSignerId.d.ts +4 -0
  138. package/_types/signers/utils/toSignerId.d.ts.map +1 -0
  139. package/_types/signers/webAuthnUtils.d.ts +13 -0
  140. package/_types/signers/webAuthnUtils.d.ts.map +1 -0
  141. package/_types/toPermissionValidator.d.ts +5 -0
  142. package/_types/toPermissionValidator.d.ts.map +1 -0
  143. package/_types/types.d.ts +61 -0
  144. package/_types/types.d.ts.map +1 -0
  145. package/_types/utils.d.ts +8 -0
  146. package/_types/utils.d.ts.map +1 -0
  147. package/constants.ts +19 -0
  148. package/deserializePermissionAccount.ts +130 -0
  149. package/index.ts +5 -0
  150. package/package.json +63 -0
  151. package/policies/callPolicyUtils.ts +122 -0
  152. package/policies/index.ts +17 -0
  153. package/policies/toCallPolicy.ts +65 -0
  154. package/policies/toGasPolicy.ts +42 -0
  155. package/policies/toRateLimitPolicy.ts +41 -0
  156. package/policies/toSignatureCallerPolicy.ts +32 -0
  157. package/policies/toSudoPolicy.ts +24 -0
  158. package/policies/toTimestampPolicy.ts +37 -0
  159. package/policies/types.ts +118 -0
  160. package/policies/utils/toPolicyId.ts +13 -0
  161. package/serializePermissionAccount.ts +38 -0
  162. package/signers/index.ts +11 -0
  163. package/signers/toECDSASigner.ts +61 -0
  164. package/signers/toEmptyECDSASigner.ts +34 -0
  165. package/signers/toWebAuthnPubKey.ts +153 -0
  166. package/signers/toWebAuthnSigner.ts +246 -0
  167. package/signers/utils/toSignerId.ts +9 -0
  168. package/signers/webAuthnUtils.ts +54 -0
  169. package/toPermissionValidator.ts +151 -0
  170. package/types.ts +75 -0
  171. package/utils.ts +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializePermissionAccount.d.ts","sourceRoot":"","sources":["../serializePermissionAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAM/B,eAAO,MAAM,0BAA0B,wFAEtB,GAAG,KACjB,QAAQ,MAAM,CA0BhB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export { toECDSASigner, type ECDSAModularSignerParams } from "./toECDSASigner.js";
2
+ export { toWebAuthnSigner, type WebAuthnModularSignerParams } from "./toWebAuthnSigner.js";
3
+ export { WebAuthnMode } from "./toWebAuthnPubKey.js";
4
+ export { toSignerId } from "./utils/toSignerId.js";
5
+ export { toEmptyECDSASigner } from "./toEmptyECDSASigner.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../signers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,KAAK,wBAAwB,EAChC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACH,gBAAgB,EAChB,KAAK,2BAA2B,EACnC,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { type SmartAccountSigner } from "permissionless/accounts";
2
+ import { type Address } from "viem";
3
+ import type { ModularSigner, ModularSignerParams } from "../types.js";
4
+ export type ECDSAModularSignerParams<TSource extends string = "custom", TAddress extends Address = Address> = ModularSignerParams & {
5
+ signer: SmartAccountSigner<TSource, TAddress>;
6
+ };
7
+ export declare function toECDSASigner<TSource extends string = "custom", TAddress extends Address = Address>({ signer, signerContractAddress }: ECDSAModularSignerParams<TSource, TAddress>): ModularSigner;
8
+ //# sourceMappingURL=toECDSASigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toECDSASigner.d.ts","sourceRoot":"","sources":["../../signers/toECDSASigner.ts"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,kBAAkB,EAC1B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,KAAK,OAAO,EAA+C,MAAM,MAAM,CAAA;AAGhF,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAErE,MAAM,MAAM,wBAAwB,CAChC,OAAO,SAAS,MAAM,GAAG,QAAQ,EACjC,QAAQ,SAAS,OAAO,GAAG,OAAO,IAClC,mBAAmB,GAAG;IACtB,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;CAChD,CAAA;AAED,wBAAgB,aAAa,CACzB,OAAO,SAAS,MAAM,GAAG,QAAQ,EACjC,QAAQ,SAAS,OAAO,GAAG,OAAO,EACpC,EACE,MAAM,EACN,qBAA6C,EAChD,EAAE,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,aAAa,CAoC7D"}
@@ -0,0 +1,4 @@
1
+ import { type Address } from "viem";
2
+ import type { ModularSigner } from "../types.js";
3
+ export declare function toEmptyECDSASigner(address: Address): ModularSigner;
4
+ //# sourceMappingURL=toEmptyECDSASigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toEmptyECDSASigner.d.ts","sourceRoot":"","sources":["../../signers/toEmptyECDSASigner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAA4B,MAAM,MAAM,CAAA;AAG7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CA0BlE"}
@@ -0,0 +1,11 @@
1
+ import { type WebAuthnKey } from "./toWebAuthnSigner.js";
2
+ export declare enum WebAuthnMode {
3
+ Register = "register",
4
+ Login = "login"
5
+ }
6
+ export declare const toWebAuthnPubKey: ({ passkeyName, passkeyServerUrl, mode }: {
7
+ passkeyName: string;
8
+ passkeyServerUrl: string;
9
+ mode: WebAuthnMode;
10
+ }) => Promise<WebAuthnKey>;
11
+ //# sourceMappingURL=toWebAuthnPubKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toWebAuthnPubKey.d.ts","sourceRoot":"","sources":["../../signers/toWebAuthnPubKey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGxD,oBAAY,YAAY;IACpB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAClB;AAED,eAAO,MAAM,gBAAgB;iBAKZ,MAAM;sBACD,MAAM;UAClB,YAAY;MAClB,QAAQ,WAAW,CAsItB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { type Chain, type Client, type Hex, type Transport } from "viem";
2
+ import type { ModularSigner, ModularSignerParams } from "../types.js";
3
+ import { WebAuthnMode } from "./toWebAuthnPubKey.js";
4
+ export type WebAuthnKey = {
5
+ pubX: bigint;
6
+ pubY: bigint;
7
+ authenticatorIdHash: Hex;
8
+ };
9
+ export type WebAuthnModularSignerParams = ModularSignerParams & {
10
+ passkeyName: string;
11
+ passkeyServerUrl: string;
12
+ pubKey?: WebAuthnKey;
13
+ mode?: WebAuthnMode;
14
+ };
15
+ export declare const toWebAuthnSigner: <TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined>(client: Client<TTransport, TChain, undefined>, { signerContractAddress, pubKey, passkeyServerUrl, passkeyName, mode }: WebAuthnModularSignerParams) => Promise<ModularSigner>;
16
+ //# sourceMappingURL=toWebAuthnSigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toWebAuthnSigner.d.ts","sourceRoot":"","sources":["../../signers/toWebAuthnSigner.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,GAAG,EAGR,KAAK,SAAS,EAKjB,MAAM,MAAM,CAAA;AAKb,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAA;AAStE,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,GAAG,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG;IAC5D,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,IAAI,CAAC,EAAE,YAAY,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,gBAAgB,0NAWtB,2BAA2B,KAC/B,QAAQ,aAAa,CA+LvB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { type Hex } from "viem";
2
+ import type { ModularSigner } from "../../types.js";
3
+ export declare const toSignerId: (signer: ModularSigner) => Hex;
4
+ //# sourceMappingURL=toSignerId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSignerId.d.ts","sourceRoot":"","sources":["../../../signers/utils/toSignerId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAA+B,MAAM,MAAM,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,GAKlD,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { type Hex } from "viem";
2
+ export declare const uint8ArrayToHexString: (array: Uint8Array) => `0x${string}`;
3
+ export declare const b64ToBytes: (base64: string) => Uint8Array;
4
+ export declare const findQuoteIndices: (input: string) => {
5
+ beforeType: bigint;
6
+ beforeChallenge: bigint;
7
+ };
8
+ export declare function parseAndNormalizeSig(derSig: Hex): {
9
+ r: bigint;
10
+ s: bigint;
11
+ };
12
+ export declare const isRIP7212SupportedNetwork: (chainId: number) => boolean;
13
+ //# sourceMappingURL=webAuthnUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webAuthnUtils.d.ts","sourceRoot":"","sources":["../../signers/webAuthnUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAA6B,MAAM,MAAM,CAAA;AAI1D,eAAO,MAAM,qBAAqB,UAAW,UAAU,KAAG,KAAK,MAAM,EAIpE,CAAA;AAED,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,UAO3C,CAAA;AAED,eAAO,MAAM,gBAAgB,UAClB,MAAM,KACd;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAO/C,CAAA;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiB1E;AAED,eAAO,MAAM,yBAAyB,YAAa,MAAM,KAAG,OACZ,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { EntryPoint } from "permissionless/types/entrypoint";
2
+ import { type Chain, type Client, type Transport } from "viem";
3
+ import type { PermissionPlugin, PermissionPluginParams } from "./types.js";
4
+ export declare function toPermissionValidator<entryPoint extends EntryPoint, TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined>(client: Client<TTransport, TChain, undefined>, { signer, policies, entryPoint: entryPointAddress, flag }: PermissionPluginParams): Promise<PermissionPlugin<entryPoint>>;
5
+ //# sourceMappingURL=toPermissionValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toPermissionValidator.d.ts","sourceRoot":"","sources":["../toPermissionValidator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,MAAM,EAEX,KAAK,SAAS,EAMjB,MAAM,MAAM,CAAA;AAKb,OAAO,KAAK,EAER,gBAAgB,EAChB,sBAAsB,EACzB,MAAM,YAAY,CAAA;AAEnB,wBAAsB,qBAAqB,CACvC,UAAU,SAAS,UAAU,EAC7B,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EAEpD,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAC7C,EACI,MAAM,EACN,QAAQ,EACR,UAAU,EAAE,iBAAiB,EAC7B,IAAqC,EACxC,EAAE,sBAAsB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CA6GvC"}
@@ -0,0 +1,61 @@
1
+ import { type KernelValidator } from "@zerodev/sdk";
2
+ import type { Action, PluginValidityData } from "@zerodev/sdk/types";
3
+ import type { EntryPoint } from "permissionless/types/entrypoint";
4
+ import type { Abi, Address, Hex, LocalAccount } from "viem";
5
+ import { PolicyFlags } from "./constants.js";
6
+ import type { CallPolicyParams, GasPolicyParams, RateLimitPolicyParams, SignatureCallerPolicyParams, SudoPolicyParams, TimestampPolicyParams } from "./policies/index.js";
7
+ export type PermissionPlugin<entryPoint extends EntryPoint> = KernelValidator<entryPoint, "PermissionValidator"> & {
8
+ getPluginSerializationParams: () => PermissionData;
9
+ };
10
+ export type ModularSignerParams = {
11
+ signerContractAddress?: Address;
12
+ };
13
+ export type PolicyParams = {
14
+ policyAddress?: Address;
15
+ policyFlag?: PolicyFlags;
16
+ };
17
+ export type ModularSigner = {
18
+ account: LocalAccount;
19
+ signerContractAddress: Address;
20
+ getSignerData: () => Hex;
21
+ getDummySignature: () => Hex;
22
+ };
23
+ export type Policy = {
24
+ getPolicyData: () => Hex;
25
+ getPolicyInfoInBytes: () => Hex;
26
+ policyParams: (CallPolicyParams<Abi | readonly unknown[], string> & {
27
+ type: "call";
28
+ }) | (GasPolicyParams & {
29
+ type: "gas";
30
+ }) | (RateLimitPolicyParams & {
31
+ type: "rate-limit";
32
+ }) | (SignatureCallerPolicyParams & {
33
+ type: "signature-caller";
34
+ }) | (SudoPolicyParams & {
35
+ type: "sudo";
36
+ }) | (TimestampPolicyParams & {
37
+ type: "timestamp";
38
+ });
39
+ };
40
+ export type PermissionPluginParams = {
41
+ signer: ModularSigner;
42
+ policies: Policy[];
43
+ entryPoint: EntryPoint;
44
+ flag?: PolicyFlags;
45
+ };
46
+ export interface PermissionData {
47
+ policies?: Policy[];
48
+ }
49
+ export type ExportPermissionAccountParams = {
50
+ initCode: Hex;
51
+ accountAddress: Address;
52
+ };
53
+ export type PermissionAccountParams = {
54
+ permissionParams: PermissionData;
55
+ action: Action;
56
+ validityData: PluginValidityData;
57
+ accountParams: ExportPermissionAccountParams;
58
+ enableSignature?: Hex;
59
+ privateKey?: Hex;
60
+ };
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EACR,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,EAChB,qBAAqB,EACxB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,UAAU,IAAI,eAAe,CACzE,UAAU,EACV,qBAAqB,CACxB,GAAG;IACA,4BAA4B,EAAE,MAAM,cAAc,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AACD,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,UAAU,CAAC,EAAE,WAAW,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IACxB,OAAO,EAAE,YAAY,CAAA;IACrB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,aAAa,EAAE,MAAM,GAAG,CAAA;IACxB,iBAAiB,EAAE,MAAM,GAAG,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,aAAa,EAAE,MAAM,GAAG,CAAA;IACxB,oBAAoB,EAAE,MAAM,GAAG,CAAA;IAE/B,YAAY,EACN,CAAC,gBAAgB,CAAC,GAAG,GAAG,SAAS,OAAO,EAAE,EAAE,MAAM,CAAC,GAAG;QAClD,IAAI,EAAE,MAAM,CAAA;KACf,CAAC,GACF,CAAC,eAAe,GAAG;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,GACnC,CAAC,qBAAqB,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,GAChD,CAAC,2BAA2B,GAAG;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE,CAAC,GAC5D,CAAC,gBAAgB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GACrC,CAAC,qBAAqB,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACjC,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,MAAM,6BAA6B,GAAG;IACxC,QAAQ,EAAE,GAAG,CAAA;IACb,cAAc,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IAClC,gBAAgB,EAAE,cAAc,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,kBAAkB,CAAA;IAChC,aAAa,EAAE,6BAA6B,CAAA;IAC5C,eAAe,CAAC,EAAE,GAAG,CAAA;IACrB,UAAU,CAAC,EAAE,GAAG,CAAA;CACnB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { EntryPoint } from "permissionless/types";
2
+ import type { PermissionAccountParams, PermissionPlugin } from "./types.js";
3
+ export declare function base64ToBytes(base64: string): Uint8Array;
4
+ export declare function bytesToBase64(bytes: Uint8Array): string;
5
+ export declare function isPermissionValidatorPlugin<entryPoint extends EntryPoint>(plugin: any): plugin is PermissionPlugin<entryPoint>;
6
+ export declare const serializePermissionAccountParams: (params: PermissionAccountParams) => string;
7
+ export declare const deserializePermissionAccountParams: (params: string) => PermissionAccountParams;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE3E,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,cAG3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,UAG9C;AAED,wBAAgB,2BAA2B,CAAC,UAAU,SAAS,UAAU,EAErE,MAAM,EAAE,GAAG,GACZ,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAExC;AAED,eAAO,MAAM,gCAAgC,WACjC,uBAAuB,WAclC,CAAA;AAED,eAAO,MAAM,kCAAkC,WAAY,MAAM,4BAIhE,CAAA"}
package/constants.ts ADDED
@@ -0,0 +1,19 @@
1
+ export const ECDSA_SIGNER_CONTRACT =
2
+ "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF"
3
+ export const WEBAUTHN_SIGNER_CONTRACT =
4
+ "0x8AA55d4BfAE101609078681A69B5bc3181516612"
5
+ export const CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8"
6
+ export const GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23"
7
+ export const RATE_LIMIT_POLICY_CONTRACT =
8
+ "0xf63d4139B25c836334edD76641356c6b74C86873"
9
+ export const SIGNATURE_POLICY_CONTRACT =
10
+ "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d"
11
+ export const SUDO_POLICY_CONTRACT = "0x67b436caD8a6D025DF6C82C5BB43fbF11fC5B9B7"
12
+ export const TIMESTAMP_POLICY_CONTRACT =
13
+ "0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F"
14
+
15
+ export enum PolicyFlags {
16
+ FOR_ALL_VALIDATION = "0x0000",
17
+ NOT_FOR_VALIDATE_USEROP = "0x0001",
18
+ NOT_FOR_VALIDATE_SIG = "0x0002"
19
+ }
@@ -0,0 +1,130 @@
1
+ import {
2
+ KernelFactoryStakerAbi,
3
+ KernelV3AccountAbi,
4
+ createKernelAccount
5
+ } from "@zerodev/sdk"
6
+ import { toKernelPluginManager } from "@zerodev/sdk/accounts"
7
+ import type { ValidatorInitData } from "@zerodev/sdk/types"
8
+ import { getEntryPointVersion } from "permissionless"
9
+ import type { EntryPoint } from "permissionless/types"
10
+ import type { Hex } from "viem"
11
+ import { decodeFunctionData } from "viem"
12
+ import { privateKeyToAccount } from "viem/accounts"
13
+ import {
14
+ toCallPolicy,
15
+ toGasPolicy,
16
+ toRateLimitPolicy,
17
+ toSignatureCallerPolicy,
18
+ toSudoPolicy,
19
+ toTimestampPolicy
20
+ } from "./policies/index.js"
21
+ import { toECDSASigner } from "./signers/toECDSASigner.js"
22
+ import { toPermissionValidator } from "./toPermissionValidator.js"
23
+ import { type Policy } from "./types.js"
24
+ import type { ModularSigner } from "./types.js"
25
+ import { deserializePermissionAccountParams } from "./utils.js"
26
+
27
+ export const deserializePermissionAccount = async <
28
+ entryPoint extends EntryPoint
29
+ >(
30
+ client: Parameters<typeof createKernelAccount>[0],
31
+ entryPointAddress: entryPoint,
32
+ modularPermissionAccountParams: string,
33
+ modularSigner?: ModularSigner
34
+ ) => {
35
+ const entryPointVersion = getEntryPointVersion(entryPointAddress)
36
+
37
+ if (entryPointVersion !== "v0.7") {
38
+ throw new Error("Only EntryPoint 0.7 is supported")
39
+ }
40
+ const params = deserializePermissionAccountParams(
41
+ modularPermissionAccountParams
42
+ )
43
+ let signer: ModularSigner
44
+ if (params.privateKey)
45
+ signer = toECDSASigner({
46
+ signer: privateKeyToAccount(params.privateKey)
47
+ })
48
+ else if (modularSigner) signer = modularSigner
49
+ else throw new Error("No signer or serialized sessionKey provided")
50
+
51
+ const modularPermissionPlugin = await toPermissionValidator(client, {
52
+ signer,
53
+ policies: await Promise.all(
54
+ params.permissionParams.policies?.map((policy) =>
55
+ createPolicyFromParams(policy)
56
+ ) || []
57
+ ),
58
+ entryPoint: entryPointAddress
59
+ })
60
+
61
+ const { index, validatorInitData } = decodeParamsFromInitCode(
62
+ params.accountParams.initCode
63
+ )
64
+
65
+ const kernelPluginManager = await toKernelPluginManager<entryPoint>(
66
+ client,
67
+ {
68
+ regular: modularPermissionPlugin,
69
+ pluginEnableSignature: params.enableSignature,
70
+ validatorInitData,
71
+ action: params.action,
72
+ entryPoint: entryPointAddress,
73
+ ...params.validityData
74
+ }
75
+ )
76
+
77
+ return createKernelAccount<entryPoint>(client, {
78
+ plugins: kernelPluginManager,
79
+ index,
80
+ deployedAccountAddress: params.accountParams.accountAddress,
81
+ entryPoint: entryPointAddress
82
+ })
83
+ }
84
+
85
+ export const createPolicyFromParams = async (policy: Policy) => {
86
+ switch (policy.policyParams.type) {
87
+ case "call":
88
+ return await toCallPolicy(policy.policyParams)
89
+ case "gas":
90
+ return await toGasPolicy(policy.policyParams)
91
+ case "rate-limit":
92
+ return await toRateLimitPolicy(policy.policyParams)
93
+ case "signature-caller":
94
+ return await toSignatureCallerPolicy(policy.policyParams)
95
+ case "sudo":
96
+ return await toSudoPolicy(policy.policyParams)
97
+ case "timestamp":
98
+ return await toTimestampPolicy(policy.policyParams)
99
+ default:
100
+ throw new Error("Unsupported policy type")
101
+ }
102
+ }
103
+
104
+ export const decodeParamsFromInitCode = (initCode: Hex) => {
105
+ let index: bigint | undefined
106
+ let validatorInitData: ValidatorInitData | undefined
107
+ const deployWithFactoryFunctionData = decodeFunctionData({
108
+ abi: KernelFactoryStakerAbi,
109
+ data: `0x${initCode.slice(42)}`
110
+ })
111
+ if (!deployWithFactoryFunctionData) throw new Error("Invalid initCode")
112
+ if (deployWithFactoryFunctionData.functionName === "deployWithFactory") {
113
+ index = BigInt(deployWithFactoryFunctionData.args[2])
114
+ const initializeFunctionData = decodeFunctionData({
115
+ abi: KernelV3AccountAbi,
116
+ data: deployWithFactoryFunctionData.args[1]
117
+ })
118
+ if (!initializeFunctionData) throw new Error("Invalid initCode")
119
+ if (initializeFunctionData.functionName === "initialize") {
120
+ validatorInitData = {
121
+ validatorAddress: initializeFunctionData.args[0],
122
+ identifier: initializeFunctionData.args[0],
123
+ enableData: initializeFunctionData.args[2]
124
+ }
125
+ }
126
+ }
127
+ if (index === undefined || validatorInitData === undefined)
128
+ throw new Error("Invalid initCode")
129
+ return { index, validatorInitData }
130
+ }
package/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export type * from "./types.js"
2
+ export { toPermissionValidator } from "./toPermissionValidator.js"
3
+ export { serializePermissionAccount } from "./serializePermissionAccount.js"
4
+ export { deserializePermissionAccount } from "./deserializePermissionAccount.js"
5
+ export * from "./constants.js"
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@zerodev/permissions",
3
+ "version": "5.2.0",
4
+ "author": "ZeroDev",
5
+ "main": "./_cjs/index.js",
6
+ "module": "./_esm/index.js",
7
+ "types": "./_types/index.d.ts",
8
+ "typings": "./_types/index.d.ts",
9
+ "type": "module",
10
+ "sideEffects": false,
11
+ "license": "MIT",
12
+ "files": [
13
+ "_esm",
14
+ "_cjs",
15
+ "_types",
16
+ "./**/*.ts",
17
+ "!_esm/**/*.tsbuildinfo",
18
+ "!_cjs/**/*.tsbuildinfo",
19
+ "!_types/**/*.tsbuildinfo",
20
+ "!.env",
21
+ "!./**/*.test.ts",
22
+ "!.changeset"
23
+ ],
24
+ "scripts": {
25
+ "build": "bun run clean && bun run build:cjs && bun run build:esm && bun run build:types",
26
+ "build:cjs": "tsc --project ./tsconfig.build.json --module commonjs --outDir ./_cjs --removeComments --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./_cjs/package.json",
27
+ "build:esm": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./_esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./_esm/package.json",
28
+ "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./_types --emitDeclarationOnly --declaration --declarationMap",
29
+ "clean": "rimraf _esm _cjs _types",
30
+ "changeset": "changeset",
31
+ "changeset:release": "bun run build && changeset publish",
32
+ "changeset:version": "changeset version && bun install --lockfile-only",
33
+ "format": "biome format . --write",
34
+ "lint": "biome check .",
35
+ "lint:fix": "bun run lint --apply"
36
+ },
37
+ "exports": {
38
+ ".": {
39
+ "types": "./_types/index.d.ts",
40
+ "import": "./_esm/index.js",
41
+ "default": "./_cjs/index.js"
42
+ },
43
+ "./policies": {
44
+ "types": "./_types/policies/index.d.ts",
45
+ "import": "./_esm/policies/index.js",
46
+ "default": "./_cjs/policies/index.js"
47
+ },
48
+ "./signers": {
49
+ "types": "./_types/signers/index.d.ts",
50
+ "import": "./_esm/signers/index.js",
51
+ "default": "./_cjs/signers/index.js"
52
+ }
53
+ },
54
+ "dependencies": {
55
+ "merkletreejs": "^0.3.11",
56
+ "@simplewebauthn/browser": "^9.0.1"
57
+ },
58
+ "peerDependencies": {
59
+ "viem": "^2.0.0",
60
+ "@zerodev/sdk": "^5.2.0",
61
+ "permissionless": "^0.1.16"
62
+ }
63
+ }
@@ -0,0 +1,122 @@
1
+ import {
2
+ type Abi,
3
+ type AbiFunction,
4
+ type GetAbiItemParameters,
5
+ type Hex,
6
+ encodeAbiParameters,
7
+ getAbiItem,
8
+ isHex,
9
+ pad,
10
+ toFunctionSelector,
11
+ toHex
12
+ } from "viem"
13
+ import type {
14
+ CombinedArgs,
15
+ GeneratePermissionFromArgsParameters,
16
+ ParamRule,
17
+ PermissionCore
18
+ } from "./types.js"
19
+
20
+ export function getPermissionFromABI<
21
+ TAbi extends Abi | readonly unknown[],
22
+ TFunctionName extends string | undefined = string
23
+ >({
24
+ abi,
25
+ args,
26
+ functionName
27
+ }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Pick<
28
+ PermissionCore,
29
+ "selector" | "rules"
30
+ > {
31
+ if (!abi || !functionName) {
32
+ return {
33
+ selector: undefined,
34
+ rules: undefined
35
+ }
36
+ }
37
+ const abiItem = getAbiItem({
38
+ abi,
39
+ args,
40
+ name: functionName
41
+ } as GetAbiItemParameters)
42
+ if (abiItem?.type !== "function") {
43
+ throw Error(`${functionName} not found in abi`)
44
+ }
45
+ const functionSelector = toFunctionSelector(abiItem)
46
+ let paramRules: ParamRule[] = []
47
+ if (args && Array.isArray(args)) {
48
+ paramRules = (args as CombinedArgs<AbiFunction["inputs"]>)
49
+ .map(
50
+ (arg, i) =>
51
+ arg && {
52
+ param: pad(
53
+ isHex(arg.value)
54
+ ? arg.value
55
+ : toHex(
56
+ arg.value as Parameters<typeof toHex>[0]
57
+ ),
58
+ { size: 32 }
59
+ ),
60
+ offset: i * 32,
61
+ condition: arg.condition
62
+ }
63
+ )
64
+ .filter((rule) => rule) as ParamRule[]
65
+ }
66
+ return {
67
+ selector: functionSelector,
68
+ rules: paramRules
69
+ }
70
+ }
71
+
72
+ export const encodePermissionData = (
73
+ permission: PermissionCore | PermissionCore[]
74
+ ): Hex => {
75
+ const permissionParam = {
76
+ components: [
77
+ {
78
+ internalType: "enum CallType",
79
+ name: "callType",
80
+ type: "bytes1"
81
+ },
82
+ {
83
+ name: "target",
84
+ type: "address"
85
+ },
86
+ {
87
+ name: "selector",
88
+ type: "bytes4"
89
+ },
90
+ {
91
+ name: "valueLimit",
92
+ type: "uint256"
93
+ },
94
+ {
95
+ components: [
96
+ {
97
+ internalType: "enum ParamCondition",
98
+ name: "condition",
99
+ type: "uint8"
100
+ },
101
+ {
102
+ name: "offset",
103
+ type: "uint64"
104
+ },
105
+
106
+ {
107
+ name: "param",
108
+ type: "bytes32"
109
+ }
110
+ ],
111
+ name: "rules",
112
+ type: "tuple[]"
113
+ }
114
+ ],
115
+ name: "permission",
116
+ type: "tuple[]"
117
+ }
118
+ const params = [permissionParam]
119
+ const values = [permission]
120
+
121
+ return encodeAbiParameters(params, values)
122
+ }
@@ -0,0 +1,17 @@
1
+ export { toGasPolicy, type GasPolicyParams } from "./toGasPolicy.js"
2
+ export {
3
+ toSignatureCallerPolicy,
4
+ type SignatureCallerPolicyParams
5
+ } from "./toSignatureCallerPolicy.js"
6
+ export {
7
+ toRateLimitPolicy,
8
+ type RateLimitPolicyParams
9
+ } from "./toRateLimitPolicy.js"
10
+ export { toCallPolicy, type CallPolicyParams } from "./toCallPolicy.js"
11
+ export { toPolicyId } from "./utils/toPolicyId.js"
12
+ export { toSudoPolicy, type SudoPolicyParams } from "./toSudoPolicy.js"
13
+ export { CallType, ParamCondition } from "./types.js"
14
+ export {
15
+ toTimestampPolicy,
16
+ type TimestampPolicyParams
17
+ } from "./toTimestampPolicy.js"
@@ -0,0 +1,65 @@
1
+ import type { Abi } from "viem"
2
+ import { concatHex, pad } from "viem"
3
+ import { PolicyFlags } from "../constants.js"
4
+ import { CALL_POLICY_CONTRACT } from "../constants.js"
5
+ import type { Policy, PolicyParams } from "../types.js"
6
+ import {
7
+ encodePermissionData,
8
+ getPermissionFromABI
9
+ } from "./callPolicyUtils.js"
10
+ import { CallType, type Permission } from "./types.js"
11
+
12
+ export type CallPolicyParams<
13
+ TAbi extends Abi | readonly unknown[],
14
+ TFunctionName extends string | undefined = string
15
+ > = PolicyParams & {
16
+ permissions?: Permission<TAbi, TFunctionName>[]
17
+ }
18
+
19
+ export function toCallPolicy<
20
+ TAbi extends Abi | readonly unknown[],
21
+ TFunctionName extends string | undefined = string
22
+ >({
23
+ policyAddress = CALL_POLICY_CONTRACT,
24
+ policyFlag = PolicyFlags.FOR_ALL_VALIDATION,
25
+ permissions = []
26
+ }: CallPolicyParams<TAbi, TFunctionName>): Policy {
27
+ const generatedPermissionParams = permissions?.map((perm) =>
28
+ getPermissionFromABI({
29
+ abi: perm.abi as Abi,
30
+ functionName: perm.functionName as string,
31
+ args: perm.args as []
32
+ })
33
+ )
34
+
35
+ permissions =
36
+ permissions?.map((perm, index) => ({
37
+ ...perm,
38
+ callType: perm.callType ?? CallType.CALL,
39
+ selector:
40
+ perm.selector ??
41
+ generatedPermissionParams?.[index]?.selector ??
42
+ pad("0x", { size: 4 }),
43
+ valueLimit: perm.valueLimit ?? 0n,
44
+ rules: perm.rules ?? generatedPermissionParams?.[index]?.rules ?? []
45
+ })) ?? []
46
+
47
+ const encodedPermissionData = encodePermissionData(permissions)
48
+
49
+ return {
50
+ getPolicyData: () => {
51
+ return encodedPermissionData
52
+ },
53
+ getPolicyInfoInBytes: () => {
54
+ return concatHex([policyFlag, policyAddress])
55
+ },
56
+ policyParams: {
57
+ type: "call",
58
+ policyAddress,
59
+ policyFlag,
60
+ permissions
61
+ } as unknown as CallPolicyParams<Abi | readonly unknown[], string> & {
62
+ type: "call"
63
+ }
64
+ }
65
+ }