@zerodev/permissions 5.3.2-alpha-2 → 5.4.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 (36) hide show
  1. package/_cjs/constants.js +3 -2
  2. package/_cjs/constants.js.map +1 -1
  3. package/_cjs/policies/callPolicyUtils.js +41 -10
  4. package/_cjs/policies/callPolicyUtils.js.map +1 -1
  5. package/_cjs/policies/index.js +2 -1
  6. package/_cjs/policies/index.js.map +1 -1
  7. package/_cjs/policies/toCallPolicy.js +24 -6
  8. package/_cjs/policies/toCallPolicy.js.map +1 -1
  9. package/_cjs/policies/types.js +1 -0
  10. package/_cjs/policies/types.js.map +1 -1
  11. package/_esm/constants.js +8 -1
  12. package/_esm/constants.js.map +1 -1
  13. package/_esm/policies/callPolicyUtils.js +41 -10
  14. package/_esm/policies/callPolicyUtils.js.map +1 -1
  15. package/_esm/policies/index.js +1 -1
  16. package/_esm/policies/index.js.map +1 -1
  17. package/_esm/policies/toCallPolicy.js +23 -6
  18. package/_esm/policies/toCallPolicy.js.map +1 -1
  19. package/_esm/policies/types.js +1 -0
  20. package/_esm/policies/types.js.map +1 -1
  21. package/_types/constants.d.ts +8 -1
  22. package/_types/constants.d.ts.map +1 -1
  23. package/_types/policies/callPolicyUtils.d.ts +4 -4
  24. package/_types/policies/callPolicyUtils.d.ts.map +1 -1
  25. package/_types/policies/index.d.ts +1 -1
  26. package/_types/policies/index.d.ts.map +1 -1
  27. package/_types/policies/toCallPolicy.d.ts +8 -2
  28. package/_types/policies/toCallPolicy.d.ts.map +1 -1
  29. package/_types/policies/types.d.ts +15 -6
  30. package/_types/policies/types.d.ts.map +1 -1
  31. package/constants.ts +10 -1
  32. package/package.json +1 -14
  33. package/policies/callPolicyUtils.ts +60 -16
  34. package/policies/index.ts +5 -1
  35. package/policies/toCallPolicy.ts +37 -7
  36. package/policies/types.ts +27 -6
package/_cjs/constants.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PolicyFlags = exports.TIMESTAMP_POLICY_CONTRACT = exports.SUDO_POLICY_CONTRACT = exports.SIGNATURE_POLICY_CONTRACT = exports.RATE_LIMIT_POLICY_CONTRACT = exports.GAS_POLICY_CONTRACT = exports.CALL_POLICY_CONTRACT = exports.WEBAUTHN_SIGNER_CONTRACT = exports.ECDSA_SIGNER_CONTRACT = void 0;
3
+ exports.PolicyFlags = exports.TIMESTAMP_POLICY_CONTRACT = exports.SUDO_POLICY_CONTRACT = exports.SIGNATURE_POLICY_CONTRACT = exports.RATE_LIMIT_POLICY_CONTRACT = exports.GAS_POLICY_CONTRACT = exports.CALL_POLICY_CONTRACT_V0_0_2 = exports.CALL_POLICY_CONTRACT_V0_0_1 = exports.WEBAUTHN_SIGNER_CONTRACT = exports.ECDSA_SIGNER_CONTRACT = void 0;
4
4
  exports.ECDSA_SIGNER_CONTRACT = "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF";
5
5
  exports.WEBAUTHN_SIGNER_CONTRACT = "0x8AA55d4BfAE101609078681A69B5bc3181516612";
6
- exports.CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
6
+ exports.CALL_POLICY_CONTRACT_V0_0_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
7
+ exports.CALL_POLICY_CONTRACT_V0_0_2 = "0x67Fa43ca2D689beA4d10b9F2C96828828A2Ab275";
7
8
  exports.GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23";
8
9
  exports.RATE_LIMIT_POLICY_CONTRACT = "0xf63d4139B25c836334edD76641356c6b74C86873";
9
10
  exports.SIGNATURE_POLICY_CONTRACT = "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAC9B,4CAA4C,CAAA;AACnC,QAAA,wBAAwB,GACjC,4CAA4C,CAAA;AACnC,QAAA,oBAAoB,GAAG,4CAA4C,CAAA;AACnE,QAAA,mBAAmB,GAAG,4CAA4C,CAAA;AAClE,QAAA,0BAA0B,GACnC,4CAA4C,CAAA;AACnC,QAAA,yBAAyB,GAClC,4CAA4C,CAAA;AACnC,QAAA,oBAAoB,GAAG,4CAA4C,CAAA;AACnE,QAAA,yBAAyB,GAClC,4CAA4C,CAAA;AAEhD,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,4CAA6B,CAAA;IAC7B,iDAAkC,CAAA;IAClC,8CAA+B,CAAA;AACnC,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAC9B,4CAA4C,CAAA;AACnC,QAAA,wBAAwB,GACjC,4CAA4C,CAAA;AACnC,QAAA,2BAA2B,GACpC,4CAA4C,CAAA;AAOnC,QAAA,2BAA2B,GACpC,4CAA4C,CAAA;AACnC,QAAA,mBAAmB,GAAG,4CAA4C,CAAA;AAClE,QAAA,0BAA0B,GACnC,4CAA4C,CAAA;AACnC,QAAA,yBAAyB,GAClC,4CAA4C,CAAA;AACnC,QAAA,oBAAoB,GAAG,4CAA4C,CAAA;AACnE,QAAA,yBAAyB,GAClC,4CAA4C,CAAA;AAEhD,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,4CAA6B,CAAA;IAC7B,iDAAkC,CAAA;IAClC,8CAA+B,CAAA;AACnC,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"}
@@ -2,7 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.encodePermissionData = exports.getPermissionFromABI = void 0;
4
4
  const viem_1 = require("viem");
5
- function getPermissionFromABI({ abi, args, functionName }) {
5
+ const constants_js_1 = require("../constants.js");
6
+ const types_js_1 = require("./types.js");
7
+ function getPermissionFromABI({ abi, args, functionName, policyAddress }) {
6
8
  if (!abi || !functionName) {
7
9
  return {
8
10
  selector: undefined,
@@ -21,12 +23,39 @@ function getPermissionFromABI({ abi, args, functionName }) {
21
23
  let paramRules = [];
22
24
  if (args && Array.isArray(args)) {
23
25
  paramRules = args
24
- .map((arg, i) => arg && {
25
- param: (0, viem_1.pad)((0, viem_1.isHex)(arg.value)
26
- ? arg.value
27
- : (0, viem_1.toHex)(arg.value), { size: 32 }),
28
- offset: i * 32,
29
- condition: arg.condition
26
+ .map((arg, i) => {
27
+ if (!arg)
28
+ return null;
29
+ if (policyAddress === constants_js_1.CALL_POLICY_CONTRACT_V0_0_1) {
30
+ if (arg.condition === types_js_1.ParamCondition.ONE_OF) {
31
+ throw Error("The ONE_OF condition is only supported from CALL_POLICY_CONTRACT_V0_0_2 onwards. Please use CALL_POLICY_CONTRACT_V0_0_2 or a later version.");
32
+ }
33
+ return {
34
+ params: (0, viem_1.pad)((0, viem_1.isHex)(arg.value)
35
+ ? arg.value
36
+ : (0, viem_1.toHex)(arg.value), { size: 32 }),
37
+ offset: i * 32,
38
+ condition: arg.condition
39
+ };
40
+ }
41
+ let params;
42
+ if (arg.condition === types_js_1.ParamCondition.ONE_OF) {
43
+ params = arg.value.map((value) => (0, viem_1.pad)((0, viem_1.isHex)(value)
44
+ ? value
45
+ : (0, viem_1.toHex)(value), { size: 32 }));
46
+ }
47
+ else {
48
+ params = [
49
+ (0, viem_1.pad)((0, viem_1.isHex)(arg.value)
50
+ ? arg.value
51
+ : (0, viem_1.toHex)(arg.value), { size: 32 })
52
+ ];
53
+ }
54
+ return {
55
+ params,
56
+ offset: i * 32,
57
+ condition: arg.condition
58
+ };
30
59
  })
31
60
  .filter((rule) => rule);
32
61
  }
@@ -36,7 +65,7 @@ function getPermissionFromABI({ abi, args, functionName }) {
36
65
  };
37
66
  }
38
67
  exports.getPermissionFromABI = getPermissionFromABI;
39
- const encodePermissionData = (permission) => {
68
+ const encodePermissionData = (permission, policyAddress) => {
40
69
  const permissionParam = {
41
70
  components: [
42
71
  {
@@ -68,8 +97,10 @@ const encodePermissionData = (permission) => {
68
97
  type: "uint64"
69
98
  },
70
99
  {
71
- name: "param",
72
- type: "bytes32"
100
+ name: "params",
101
+ type: policyAddress === constants_js_1.CALL_POLICY_CONTRACT_V0_0_2
102
+ ? "bytes32[]"
103
+ : "bytes32"
73
104
  }
74
105
  ],
75
106
  name: "rules",
@@ -1 +1 @@
1
- {"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":";;;AAAA,+BAWa;AAQb,SAAgB,oBAAoB,CAGlC,EACE,GAAG,EACH,IAAI,EACJ,YAAY,EAC4C;IAIxD,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO;YACH,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,SAAS;SACnB,CAAA;IACL,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,iBAAU,EAAC;QACvB,GAAG;QACH,IAAI;QACJ,IAAI,EAAE,YAAY;KACG,CAAC,CAAA;IAC1B,IAAI,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAA;IACpD,IAAI,UAAU,GAAgB,EAAE,CAAA;IAChC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,UAAU,GAAI,IAA4C;aACrD,GAAG,CACA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACP,GAAG,IAAI;YACH,KAAK,EAAE,IAAA,UAAG,EACN,IAAA,YAAK,EAAC,GAAG,CAAC,KAAK,CAAC;gBACZ,CAAC,CAAC,GAAG,CAAC,KAAK;gBACX,CAAC,CAAC,IAAA,YAAK,EACD,GAAG,CAAC,KAAoC,CAC3C,EACP,EAAE,IAAI,EAAE,EAAE,EAAE,CACf;YACD,MAAM,EAAE,CAAC,GAAG,EAAE;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CACR;aACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAgB,CAAA;IAC9C,CAAC;IACD,OAAO;QACH,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,UAAU;KACpB,CAAA;AACL,CAAC;AAlDD,oDAkDC;AAEM,MAAM,oBAAoB,GAAG,CAChC,UAA6C,EAC1C,EAAE;IACL,MAAM,eAAe,GAAG;QACpB,UAAU,EAAE;YACR;gBACI,YAAY,EAAE,eAAe;gBAC7B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;aACjB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;aACjB;YACD;gBACI,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,UAAU,EAAE;oBACR;wBACI,YAAY,EAAE,qBAAqB;wBACnC,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,QAAQ;qBACjB;oBAED;wBACI,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,SAAS;qBAClB;iBACJ;gBACD,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;KAClB,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,eAAe,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;IAE3B,OAAO,IAAA,0BAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC,CAAA;AAlDY,QAAA,oBAAoB,wBAkDhC"}
1
+ {"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toTimestampPolicy = exports.ParamCondition = exports.CallType = exports.toSudoPolicy = exports.toPolicyId = exports.toCallPolicy = exports.toRateLimitPolicy = exports.toSignatureCallerPolicy = exports.toGasPolicy = void 0;
3
+ exports.toTimestampPolicy = exports.ParamCondition = exports.CallType = exports.toSudoPolicy = exports.toPolicyId = exports.CallPolicyVersion = exports.toCallPolicy = exports.toRateLimitPolicy = exports.toSignatureCallerPolicy = exports.toGasPolicy = void 0;
4
4
  var toGasPolicy_js_1 = require("./toGasPolicy.js");
5
5
  Object.defineProperty(exports, "toGasPolicy", { enumerable: true, get: function () { return toGasPolicy_js_1.toGasPolicy; } });
6
6
  var toSignatureCallerPolicy_js_1 = require("./toSignatureCallerPolicy.js");
@@ -9,6 +9,7 @@ var toRateLimitPolicy_js_1 = require("./toRateLimitPolicy.js");
9
9
  Object.defineProperty(exports, "toRateLimitPolicy", { enumerable: true, get: function () { return toRateLimitPolicy_js_1.toRateLimitPolicy; } });
10
10
  var toCallPolicy_js_1 = require("./toCallPolicy.js");
11
11
  Object.defineProperty(exports, "toCallPolicy", { enumerable: true, get: function () { return toCallPolicy_js_1.toCallPolicy; } });
12
+ Object.defineProperty(exports, "CallPolicyVersion", { enumerable: true, get: function () { return toCallPolicy_js_1.CallPolicyVersion; } });
12
13
  var toPolicyId_js_1 = require("./utils/toPolicyId.js");
13
14
  Object.defineProperty(exports, "toPolicyId", { enumerable: true, get: function () { return toPolicyId_js_1.toPolicyId; } });
14
15
  var toSudoPolicy_js_1 = require("./toSudoPolicy.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AAA3D,6GAAA,WAAW,OAAA;AACpB,2EAGqC;AAFjC,qIAAA,uBAAuB,OAAA;AAG3B,+DAG+B;AAF3B,yHAAA,iBAAiB,OAAA;AAGrB,qDAAuE;AAA9D,+GAAA,YAAY,OAAA;AACrB,uDAAkD;AAAzC,2GAAA,UAAU,OAAA;AACnB,qDAAuE;AAA9D,+GAAA,YAAY,OAAA;AACrB,uCAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,+DAG+B;AAF3B,yHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AAA3D,6GAAA,WAAW,OAAA;AACpB,2EAGqC;AAFjC,qIAAA,uBAAuB,OAAA;AAG3B,+DAG+B;AAF3B,yHAAA,iBAAiB,OAAA;AAGrB,qDAI0B;AAHtB,+GAAA,YAAY,OAAA;AAEZ,oHAAA,iBAAiB,OAAA;AAErB,uDAAkD;AAAzC,2GAAA,UAAU,OAAA;AACnB,qDAAuE;AAA9D,+GAAA,YAAY,OAAA;AACrB,uCAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,+DAG+B;AAF3B,yHAAA,iBAAiB,OAAA"}
@@ -1,16 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toCallPolicy = void 0;
3
+ exports.toCallPolicy = exports.getCallPolicyAddress = exports.CallPolicyVersion = void 0;
4
4
  const viem_1 = require("viem");
5
5
  const constants_js_1 = require("../constants.js");
6
- const constants_js_2 = require("../constants.js");
7
6
  const callPolicyUtils_js_1 = require("./callPolicyUtils.js");
8
7
  const types_js_1 = require("./types.js");
9
- function toCallPolicy({ policyAddress = constants_js_2.CALL_POLICY_CONTRACT, policyFlag = constants_js_1.PolicyFlags.FOR_ALL_VALIDATION, permissions = [] }) {
8
+ var CallPolicyVersion;
9
+ (function (CallPolicyVersion) {
10
+ CallPolicyVersion["V0_0_1"] = "0.0.1";
11
+ CallPolicyVersion["V0_0_2"] = "0.0.2";
12
+ })(CallPolicyVersion || (exports.CallPolicyVersion = CallPolicyVersion = {}));
13
+ const getCallPolicyAddress = (policyVersion, policyAddress) => {
14
+ if (policyAddress)
15
+ return policyAddress;
16
+ switch (policyVersion) {
17
+ case CallPolicyVersion.V0_0_1:
18
+ return constants_js_1.CALL_POLICY_CONTRACT_V0_0_1;
19
+ case CallPolicyVersion.V0_0_2:
20
+ return constants_js_1.CALL_POLICY_CONTRACT_V0_0_2;
21
+ }
22
+ };
23
+ exports.getCallPolicyAddress = getCallPolicyAddress;
24
+ function toCallPolicy({ policyAddress, policyFlag = constants_js_1.PolicyFlags.FOR_ALL_VALIDATION, policyVersion, permissions = [] }) {
25
+ const callPolicyAddress = (0, exports.getCallPolicyAddress)(policyVersion, policyAddress);
10
26
  const generatedPermissionParams = permissions?.map((perm) => (0, callPolicyUtils_js_1.getPermissionFromABI)({
11
27
  abi: perm.abi,
12
28
  functionName: perm.functionName,
13
- args: perm.args
29
+ args: perm.args,
30
+ policyAddress: callPolicyAddress
14
31
  }));
15
32
  permissions =
16
33
  permissions?.map((perm, index) => ({
@@ -22,16 +39,17 @@ function toCallPolicy({ policyAddress = constants_js_2.CALL_POLICY_CONTRACT, pol
22
39
  valueLimit: perm.valueLimit ?? 0n,
23
40
  rules: perm.rules ?? generatedPermissionParams?.[index]?.rules ?? []
24
41
  })) ?? [];
25
- const encodedPermissionData = (0, callPolicyUtils_js_1.encodePermissionData)(permissions);
42
+ const encodedPermissionData = (0, callPolicyUtils_js_1.encodePermissionData)(permissions, callPolicyAddress);
26
43
  return {
27
44
  getPolicyData: () => {
28
45
  return encodedPermissionData;
29
46
  },
30
47
  getPolicyInfoInBytes: () => {
31
- return (0, viem_1.concatHex)([policyFlag, policyAddress]);
48
+ return (0, viem_1.concatHex)([policyFlag, callPolicyAddress]);
32
49
  },
33
50
  policyParams: {
34
51
  type: "call",
52
+ policyVersion,
35
53
  policyAddress,
36
54
  policyFlag,
37
55
  permissions
@@ -1 +1 @@
1
- {"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":";;;AACA,+BAAqC;AACrC,kDAA6C;AAC7C,kDAAsD;AAEtD,6DAG6B;AAC7B,yCAAsD;AAStD,SAAgB,YAAY,CAG1B,EACE,aAAa,GAAG,mCAAoB,EACpC,UAAU,GAAG,0BAAW,CAAC,kBAAkB,EAC3C,WAAW,GAAG,EAAE,EACoB;IACpC,MAAM,yBAAyB,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,IAAA,yCAAoB,EAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAU;QACpB,YAAY,EAAE,IAAI,CAAC,YAAsB;QACzC,IAAI,EAAE,IAAI,CAAC,IAAU;KACxB,CAAC,CACL,CAAA;IAED,WAAW;QACP,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,mBAAQ,CAAC,IAAI;YACxC,QAAQ,EACJ,IAAI,CAAC,QAAQ;gBACb,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ;gBAC5C,IAAA,UAAG,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;SACvE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEb,MAAM,qBAAqB,GAAG,IAAA,yCAAoB,EAAC,WAAW,CAAC,CAAA;IAE/D,OAAO;QACH,aAAa,EAAE,GAAG,EAAE;YAChB,OAAO,qBAAqB,CAAA;QAChC,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACvB,OAAO,IAAA,gBAAS,EAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAA;QACjD,CAAC;QACD,YAAY,EAAE;YACV,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,UAAU;YACV,WAAW;SAGd;KACJ,CAAA;AACL,CAAC;AA9CD,oCA8CC"}
1
+ {"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":";;;AACA,+BAAqC;AACrC,kDAIwB;AAExB,6DAG6B;AAC7B,yCAAsD;AAEtD,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,qCAAgB,CAAA;IAChB,qCAAgB,CAAA;AACpB,CAAC,EAHW,iBAAiB,iCAAjB,iBAAiB,QAG5B;AAEM,MAAM,oBAAoB,GAAG,CAChC,aAAgC,EAChC,aAAuB,EAChB,EAAE;IACT,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,QAAQ,aAAa,EAAE,CAAC;QACpB,KAAK,iBAAiB,CAAC,MAAM;YACzB,OAAO,0CAA2B,CAAA;QACtC,KAAK,iBAAiB,CAAC,MAAM;YACzB,OAAO,0CAA2B,CAAA;IAC1C,CAAC;AACL,CAAC,CAAA;AAXY,QAAA,oBAAoB,wBAWhC;AAUD,SAAgB,YAAY,CAG1B,EACE,aAAa,EACb,UAAU,GAAG,0BAAW,CAAC,kBAAkB,EAC3C,aAAa,EACb,WAAW,GAAG,EAAE,EACoB;IACpC,MAAM,iBAAiB,GAAG,IAAA,4BAAoB,EAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IAE5E,MAAM,yBAAyB,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,IAAA,yCAAoB,EAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAU;QACpB,YAAY,EAAE,IAAI,CAAC,YAAsB;QACzC,IAAI,EAAE,IAAI,CAAC,IAAU;QACrB,aAAa,EAAE,iBAAiB;KACnC,CAAC,CACL,CAAA;IAED,WAAW;QACP,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,mBAAQ,CAAC,IAAI;YACxC,QAAQ,EACJ,IAAI,CAAC,QAAQ;gBACb,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ;gBAC5C,IAAA,UAAG,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;SACvE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEb,MAAM,qBAAqB,GAAG,IAAA,yCAAoB,EAC9C,WAAW,EACX,iBAAiB,CACpB,CAAA;IAED,OAAO;QACH,aAAa,EAAE,GAAG,EAAE;YAChB,OAAO,qBAAqB,CAAA;QAChC,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACvB,OAAO,IAAA,gBAAS,EAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,YAAY,EAAE;YACV,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,aAAa;YACb,UAAU;YACV,WAAW;SAGd;KACJ,CAAA;AACL,CAAC;AAtDD,oCAsDC"}
@@ -15,5 +15,6 @@ var ParamCondition;
15
15
  ParamCondition[ParamCondition["GREATER_THAN_OR_EQUAL"] = 3] = "GREATER_THAN_OR_EQUAL";
16
16
  ParamCondition[ParamCondition["LESS_THAN_OR_EQUAL"] = 4] = "LESS_THAN_OR_EQUAL";
17
17
  ParamCondition[ParamCondition["NOT_EQUAL"] = 5] = "NOT_EQUAL";
18
+ ParamCondition[ParamCondition["ONE_OF"] = 6] = "ONE_OF";
18
19
  })(ParamCondition || (exports.ParamCondition = ParamCondition = {}));
19
20
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":";;;AAaA,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,kCAAsB,CAAA;AAC1B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,IAAY,cAOX;AAPD,WAAY,cAAc;IACtB,qDAAS,CAAA;IACT,mEAAgB,CAAA;IAChB,6DAAa,CAAA;IACb,qFAAyB,CAAA;IACzB,+EAAsB,CAAA;IACtB,6DAAa,CAAA;AACjB,CAAC,EAPW,cAAc,8BAAd,cAAc,QAOzB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":";;;AAaA,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,kCAAsB,CAAA;AAC1B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,IAAY,cAQX;AARD,WAAY,cAAc;IACtB,qDAAS,CAAA;IACT,mEAAgB,CAAA;IAChB,6DAAa,CAAA;IACb,qFAAyB,CAAA;IACzB,+EAAsB,CAAA;IACtB,6DAAa,CAAA;IACb,uDAAU,CAAA;AACd,CAAC,EARW,cAAc,8BAAd,cAAc,QAQzB"}
package/_esm/constants.js CHANGED
@@ -1,6 +1,13 @@
1
1
  export const ECDSA_SIGNER_CONTRACT = "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF";
2
2
  export const WEBAUTHN_SIGNER_CONTRACT = "0x8AA55d4BfAE101609078681A69B5bc3181516612";
3
- export const CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
3
+ export const CALL_POLICY_CONTRACT_V0_0_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
4
+ /**
5
+ * @dev CALL_POLICY_CONTRACT_V0_0_2 updates
6
+ * - Added ONE_OF condition
7
+ * - Added native ETH transfer support
8
+ * - Added `zeroAddress` target address support, which means you can approve any contracts with specific selector. (e.g. approve any ERC20 transfer)
9
+ */
10
+ export const CALL_POLICY_CONTRACT_V0_0_2 = "0x67Fa43ca2D689beA4d10b9F2C96828828A2Ab275";
4
11
  export const GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23";
5
12
  export const RATE_LIMIT_POLICY_CONTRACT = "0xf63d4139B25c836334edD76641356c6b74C86873";
6
13
  export const SIGNATURE_POLICY_CONTRACT = "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAC9B,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,wBAAwB,GACjC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAA;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAA;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GACnC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAA;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAEhD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,4CAA6B,CAAA;IAC7B,iDAAkC,CAAA;IAClC,8CAA+B,CAAA;AACnC,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAC9B,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,wBAAwB,GACjC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,2BAA2B,GACpC,4CAA4C,CAAA;AAChD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GACpC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAA;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GACnC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAA;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAEhD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,4CAA6B,CAAA;IAC7B,iDAAkC,CAAA;IAClC,8CAA+B,CAAA;AACnC,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
@@ -1,5 +1,7 @@
1
1
  import { encodeAbiParameters, getAbiItem, isHex, pad, toFunctionSelector, toHex } from "viem";
2
- export function getPermissionFromABI({ abi, args, functionName }) {
2
+ import { CALL_POLICY_CONTRACT_V0_0_1, CALL_POLICY_CONTRACT_V0_0_2 } from "../constants.js";
3
+ import { ParamCondition } from "./types.js";
4
+ export function getPermissionFromABI({ abi, args, functionName, policyAddress }) {
3
5
  if (!abi || !functionName) {
4
6
  return {
5
7
  selector: undefined,
@@ -18,12 +20,39 @@ export function getPermissionFromABI({ abi, args, functionName }) {
18
20
  let paramRules = [];
19
21
  if (args && Array.isArray(args)) {
20
22
  paramRules = args
21
- .map((arg, i) => arg && {
22
- param: pad(isHex(arg.value)
23
- ? arg.value
24
- : toHex(arg.value), { size: 32 }),
25
- offset: i * 32,
26
- condition: arg.condition
23
+ .map((arg, i) => {
24
+ if (!arg)
25
+ return null;
26
+ if (policyAddress === CALL_POLICY_CONTRACT_V0_0_1) {
27
+ if (arg.condition === ParamCondition.ONE_OF) {
28
+ throw Error("The ONE_OF condition is only supported from CALL_POLICY_CONTRACT_V0_0_2 onwards. Please use CALL_POLICY_CONTRACT_V0_0_2 or a later version.");
29
+ }
30
+ return {
31
+ params: pad(isHex(arg.value)
32
+ ? arg.value
33
+ : toHex(arg.value), { size: 32 }),
34
+ offset: i * 32,
35
+ condition: arg.condition
36
+ };
37
+ }
38
+ let params;
39
+ if (arg.condition === ParamCondition.ONE_OF) {
40
+ params = arg.value.map((value) => pad(isHex(value)
41
+ ? value
42
+ : toHex(value), { size: 32 }));
43
+ }
44
+ else {
45
+ params = [
46
+ pad(isHex(arg.value)
47
+ ? arg.value
48
+ : toHex(arg.value), { size: 32 })
49
+ ];
50
+ }
51
+ return {
52
+ params,
53
+ offset: i * 32,
54
+ condition: arg.condition
55
+ };
27
56
  })
28
57
  .filter((rule) => rule);
29
58
  }
@@ -32,7 +61,7 @@ export function getPermissionFromABI({ abi, args, functionName }) {
32
61
  rules: paramRules
33
62
  };
34
63
  }
35
- export const encodePermissionData = (permission) => {
64
+ export const encodePermissionData = (permission, policyAddress) => {
36
65
  const permissionParam = {
37
66
  components: [
38
67
  {
@@ -64,8 +93,10 @@ export const encodePermissionData = (permission) => {
64
93
  type: "uint64"
65
94
  },
66
95
  {
67
- name: "param",
68
- type: "bytes32"
96
+ name: "params",
97
+ type: policyAddress === CALL_POLICY_CONTRACT_V0_0_2
98
+ ? "bytes32[]"
99
+ : "bytes32"
69
100
  }
70
101
  ],
71
102
  name: "rules",
@@ -1 +1 @@
1
- {"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,mBAAmB,EACnB,UAAU,EACV,KAAK,EACL,GAAG,EACH,kBAAkB,EAClB,KAAK,EACR,MAAM,MAAM,CAAA;AAQb,MAAM,UAAU,oBAAoB,CAGlC,EACE,GAAG,EACH,IAAI,EACJ,YAAY,EAC4C;IAIxD,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO;YACH,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,SAAS;SACnB,CAAA;IACL,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC;QACvB,GAAG;QACH,IAAI;QACJ,IAAI,EAAE,YAAY;KACG,CAAC,CAAA;IAC1B,IAAI,OAAO,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IACpD,IAAI,UAAU,GAAgB,EAAE,CAAA;IAChC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,UAAU,GAAI,IAA4C;aACrD,GAAG,CACA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACP,GAAG,IAAI;YACH,KAAK,EAAE,GAAG,CACN,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBACZ,CAAC,CAAC,GAAG,CAAC,KAAK;gBACX,CAAC,CAAC,KAAK,CACD,GAAG,CAAC,KAAoC,CAC3C,EACP,EAAE,IAAI,EAAE,EAAE,EAAE,CACf;YACD,MAAM,EAAE,CAAC,GAAG,EAAE;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CACR;aACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAgB,CAAA;IAC9C,CAAC;IACD,OAAO;QACH,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,UAAU;KACpB,CAAA;AACL,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,UAA6C,EAC1C,EAAE;IACL,MAAM,eAAe,GAAG;QACpB,UAAU,EAAE;YACR;gBACI,YAAY,EAAE,eAAe;gBAC7B,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;aACjB;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;aACjB;YACD;gBACI,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,UAAU,EAAE;oBACR;wBACI,YAAY,EAAE,qBAAqB;wBACnC,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO;qBAChB;oBACD;wBACI,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,QAAQ;qBACjB;oBAED;wBACI,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,SAAS;qBAClB;iBACJ;gBACD,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;aAClB;SACJ;QACD,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,SAAS;KAClB,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,eAAe,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;IAE3B,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC,CAAA"}
1
+ {"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export { toGasPolicy } from "./toGasPolicy.js";
2
2
  export { toSignatureCallerPolicy } from "./toSignatureCallerPolicy.js";
3
3
  export { toRateLimitPolicy } from "./toRateLimitPolicy.js";
4
- export { toCallPolicy } from "./toCallPolicy.js";
4
+ export { toCallPolicy, CallPolicyVersion } from "./toCallPolicy.js";
5
5
  export { toPolicyId } from "./utils/toPolicyId.js";
6
6
  export { toSudoPolicy } from "./toSudoPolicy.js";
7
7
  export { CallType, ParamCondition } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACH,uBAAuB,EAE1B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,iBAAiB,EAEpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAyB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAyB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EACH,iBAAiB,EAEpB,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACH,uBAAuB,EAE1B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,iBAAiB,EAEpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACH,YAAY,EAEZ,iBAAiB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAyB,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EACH,iBAAiB,EAEpB,MAAM,wBAAwB,CAAA"}
@@ -1,13 +1,29 @@
1
1
  import { concatHex, pad } from "viem";
2
- import { PolicyFlags } from "../constants.js";
3
- import { CALL_POLICY_CONTRACT } from "../constants.js";
2
+ import { CALL_POLICY_CONTRACT_V0_0_1, CALL_POLICY_CONTRACT_V0_0_2, PolicyFlags } from "../constants.js";
4
3
  import { encodePermissionData, getPermissionFromABI } from "./callPolicyUtils.js";
5
4
  import { CallType } from "./types.js";
6
- export function toCallPolicy({ policyAddress = CALL_POLICY_CONTRACT, policyFlag = PolicyFlags.FOR_ALL_VALIDATION, permissions = [] }) {
5
+ export var CallPolicyVersion;
6
+ (function (CallPolicyVersion) {
7
+ CallPolicyVersion["V0_0_1"] = "0.0.1";
8
+ CallPolicyVersion["V0_0_2"] = "0.0.2";
9
+ })(CallPolicyVersion || (CallPolicyVersion = {}));
10
+ export const getCallPolicyAddress = (policyVersion, policyAddress) => {
11
+ if (policyAddress)
12
+ return policyAddress;
13
+ switch (policyVersion) {
14
+ case CallPolicyVersion.V0_0_1:
15
+ return CALL_POLICY_CONTRACT_V0_0_1;
16
+ case CallPolicyVersion.V0_0_2:
17
+ return CALL_POLICY_CONTRACT_V0_0_2;
18
+ }
19
+ };
20
+ export function toCallPolicy({ policyAddress, policyFlag = PolicyFlags.FOR_ALL_VALIDATION, policyVersion, permissions = [] }) {
21
+ const callPolicyAddress = getCallPolicyAddress(policyVersion, policyAddress);
7
22
  const generatedPermissionParams = permissions?.map((perm) => getPermissionFromABI({
8
23
  abi: perm.abi,
9
24
  functionName: perm.functionName,
10
- args: perm.args
25
+ args: perm.args,
26
+ policyAddress: callPolicyAddress
11
27
  }));
12
28
  permissions =
13
29
  permissions?.map((perm, index) => ({
@@ -19,16 +35,17 @@ export function toCallPolicy({ policyAddress = CALL_POLICY_CONTRACT, policyFlag
19
35
  valueLimit: perm.valueLimit ?? 0n,
20
36
  rules: perm.rules ?? generatedPermissionParams?.[index]?.rules ?? []
21
37
  })) ?? [];
22
- const encodedPermissionData = encodePermissionData(permissions);
38
+ const encodedPermissionData = encodePermissionData(permissions, callPolicyAddress);
23
39
  return {
24
40
  getPolicyData: () => {
25
41
  return encodedPermissionData;
26
42
  },
27
43
  getPolicyInfoInBytes: () => {
28
- return concatHex([policyFlag, policyAddress]);
44
+ return concatHex([policyFlag, callPolicyAddress]);
29
45
  },
30
46
  policyParams: {
31
47
  type: "call",
48
+ policyVersion,
32
49
  policyAddress,
33
50
  policyFlag,
34
51
  permissions
@@ -1 +1 @@
1
- {"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAA;AAStD,MAAM,UAAU,YAAY,CAG1B,EACE,aAAa,GAAG,oBAAoB,EACpC,UAAU,GAAG,WAAW,CAAC,kBAAkB,EAC3C,WAAW,GAAG,EAAE,EACoB;IACpC,MAAM,yBAAyB,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,oBAAoB,CAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAU;QACpB,YAAY,EAAE,IAAI,CAAC,YAAsB;QACzC,IAAI,EAAE,IAAI,CAAC,IAAU;KACxB,CAAC,CACL,CAAA;IAED,WAAW;QACP,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI;YACxC,QAAQ,EACJ,IAAI,CAAC,QAAQ;gBACb,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ;gBAC5C,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;SACvE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEb,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAE/D,OAAO;QACH,aAAa,EAAE,GAAG,EAAE;YAChB,OAAO,qBAAqB,CAAA;QAChC,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACvB,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAA;QACjD,CAAC;QACD,YAAY,EAAE;YACV,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,UAAU;YACV,WAAW;SAGd;KACJ,CAAA;AACL,CAAC"}
1
+ {"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EACH,2BAA2B,EAC3B,2BAA2B,EAC3B,WAAW,EACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAA;AAEtD,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,qCAAgB,CAAA;IAChB,qCAAgB,CAAA;AACpB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,aAAgC,EAChC,aAAuB,EAChB,EAAE;IACT,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,QAAQ,aAAa,EAAE,CAAC;QACpB,KAAK,iBAAiB,CAAC,MAAM;YACzB,OAAO,2BAA2B,CAAA;QACtC,KAAK,iBAAiB,CAAC,MAAM;YACzB,OAAO,2BAA2B,CAAA;IAC1C,CAAC;AACL,CAAC,CAAA;AAUD,MAAM,UAAU,YAAY,CAG1B,EACE,aAAa,EACb,UAAU,GAAG,WAAW,CAAC,kBAAkB,EAC3C,aAAa,EACb,WAAW,GAAG,EAAE,EACoB;IACpC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IAE5E,MAAM,yBAAyB,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,oBAAoB,CAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAU;QACpB,YAAY,EAAE,IAAI,CAAC,YAAsB;QACzC,IAAI,EAAE,IAAI,CAAC,IAAU;QACrB,aAAa,EAAE,iBAAiB;KACnC,CAAC,CACL,CAAA;IAED,WAAW;QACP,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,IAAI;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI;YACxC,QAAQ,EACJ,IAAI,CAAC,QAAQ;gBACb,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ;gBAC5C,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,yBAAyB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;SACvE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEb,MAAM,qBAAqB,GAAG,oBAAoB,CAC9C,WAAW,EACX,iBAAiB,CACpB,CAAA;IAED,OAAO;QACH,aAAa,EAAE,GAAG,EAAE;YAChB,OAAO,qBAAqB,CAAA;QAChC,CAAC;QACD,oBAAoB,EAAE,GAAG,EAAE;YACvB,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACrD,CAAC;QACD,YAAY,EAAE;YACV,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,aAAa;YACb,UAAU;YACV,WAAW;SAGd;KACJ,CAAA;AACL,CAAC"}
@@ -12,5 +12,6 @@ export var ParamCondition;
12
12
  ParamCondition[ParamCondition["GREATER_THAN_OR_EQUAL"] = 3] = "GREATER_THAN_OR_EQUAL";
13
13
  ParamCondition[ParamCondition["LESS_THAN_OR_EQUAL"] = 4] = "LESS_THAN_OR_EQUAL";
14
14
  ParamCondition[ParamCondition["NOT_EQUAL"] = 5] = "NOT_EQUAL";
15
+ ParamCondition[ParamCondition["ONE_OF"] = 6] = "ONE_OF";
15
16
  })(ParamCondition || (ParamCondition = {}));
16
17
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"AAaA,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,kCAAsB,CAAA;AAC1B,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,CAAN,IAAY,cAOX;AAPD,WAAY,cAAc;IACtB,qDAAS,CAAA;IACT,mEAAgB,CAAA;IAChB,6DAAa,CAAA;IACb,qFAAyB,CAAA;IACzB,+EAAsB,CAAA;IACtB,6DAAa,CAAA;AACjB,CAAC,EAPW,cAAc,KAAd,cAAc,QAOzB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"AAaA,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,kCAAsB,CAAA;AAC1B,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,MAAM,CAAN,IAAY,cAQX;AARD,WAAY,cAAc;IACtB,qDAAS,CAAA;IACT,mEAAgB,CAAA;IAChB,6DAAa,CAAA;IACb,qFAAyB,CAAA;IACzB,+EAAsB,CAAA;IACtB,6DAAa,CAAA;IACb,uDAAU,CAAA;AACd,CAAC,EARW,cAAc,KAAd,cAAc,QAQzB"}
@@ -1,6 +1,13 @@
1
1
  export declare const ECDSA_SIGNER_CONTRACT = "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF";
2
2
  export declare const WEBAUTHN_SIGNER_CONTRACT = "0x8AA55d4BfAE101609078681A69B5bc3181516612";
3
- export declare const CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
3
+ export declare const CALL_POLICY_CONTRACT_V0_0_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
4
+ /**
5
+ * @dev CALL_POLICY_CONTRACT_V0_0_2 updates
6
+ * - Added ONE_OF condition
7
+ * - Added native ETH transfer support
8
+ * - Added `zeroAddress` target address support, which means you can approve any contracts with specific selector. (e.g. approve any ERC20 transfer)
9
+ */
10
+ export declare const CALL_POLICY_CONTRACT_V0_0_2 = "0x67Fa43ca2D689beA4d10b9F2C96828828A2Ab275";
4
11
  export declare const GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23";
5
12
  export declare const RATE_LIMIT_POLICY_CONTRACT = "0xf63d4139B25c836334edD76641356c6b74C86873";
6
13
  export declare const SIGNATURE_POLICY_CONTRACT = "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,+CACc,CAAA;AAChD,eAAO,MAAM,wBAAwB,+CACW,CAAA;AAChD,eAAO,MAAM,oBAAoB,+CAA+C,CAAA;AAChF,eAAO,MAAM,mBAAmB,+CAA+C,CAAA;AAC/E,eAAO,MAAM,0BAA0B,+CACS,CAAA;AAChD,eAAO,MAAM,yBAAyB,+CACU,CAAA;AAChD,eAAO,MAAM,oBAAoB,+CAA+C,CAAA;AAChF,eAAO,MAAM,yBAAyB,+CACU,CAAA;AAEhD,oBAAY,WAAW;IACnB,kBAAkB,WAAW;IAC7B,uBAAuB,WAAW;IAClC,oBAAoB,WAAW;CAClC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,+CACc,CAAA;AAChD,eAAO,MAAM,wBAAwB,+CACW,CAAA;AAChD,eAAO,MAAM,2BAA2B,+CACQ,CAAA;AAChD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,+CACQ,CAAA;AAChD,eAAO,MAAM,mBAAmB,+CAA+C,CAAA;AAC/E,eAAO,MAAM,0BAA0B,+CACS,CAAA;AAChD,eAAO,MAAM,yBAAyB,+CACU,CAAA;AAChD,eAAO,MAAM,oBAAoB,+CAA+C,CAAA;AAChF,eAAO,MAAM,yBAAyB,+CACU,CAAA;AAEhD,oBAAY,WAAW;IACnB,kBAAkB,WAAW;IAC7B,uBAAuB,WAAW;IAClC,oBAAoB,WAAW;CAClC"}
@@ -1,5 +1,5 @@
1
- import { type Abi, type Hex } from "viem";
2
- import type { GeneratePermissionFromArgsParameters, PermissionCore } from "./types.js";
3
- export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, args, functionName }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Pick<PermissionCore, "selector" | "rules">;
4
- export declare const encodePermissionData: (permission: PermissionCore | PermissionCore[]) => Hex;
1
+ import { type Abi, type Address, type Hex } from "viem";
2
+ import { type GeneratePermissionWithPolicyAddressParameters, type PermissionCore } from "./types.js";
3
+ export declare function getPermissionFromABI<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ abi, args, functionName, policyAddress }: GeneratePermissionWithPolicyAddressParameters<TAbi, TFunctionName>): Pick<PermissionCore, "selector" | "rules">;
4
+ export declare const encodePermissionData: (permission: PermissionCore | PermissionCore[], policyAddress: Address) => Hex;
5
5
  //# sourceMappingURL=callPolicyUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"callPolicyUtils.d.ts","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,GAAG,EAGR,KAAK,GAAG,EAOX,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAER,oCAAoC,EAEpC,cAAc,EACjB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,oBAAoB,CAChC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,EACnD,EACE,GAAG,EACH,IAAI,EACJ,YAAY,EACf,EAAE,oCAAoC,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,IAAI,CAC/D,cAAc,EACd,UAAU,GAAG,OAAO,CACvB,CAwCA;AAED,eAAO,MAAM,oBAAoB,eACjB,cAAc,GAAG,cAAc,EAAE,KAC9C,GAgDF,CAAA"}
1
+ {"version":3,"file":"callPolicyUtils.d.ts","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,GAAG,EAER,KAAK,OAAO,EAEZ,KAAK,GAAG,EAOX,MAAM,MAAM,CAAA;AAKb,OAAO,EAEH,KAAK,6CAA6C,EAGlD,KAAK,cAAc,EACtB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,oBAAoB,CAChC,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,EACnD,EACE,GAAG,EACH,IAAI,EACJ,YAAY,EACZ,aAAa,EAChB,EAAE,6CAA6C,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,IAAI,CACxE,cAAc,EACd,UAAU,GAAG,OAAO,CACvB,CA0EA;AAED,eAAO,MAAM,oBAAoB,eACjB,cAAc,GAAG,cAAc,EAAE,iBAC9B,OAAO,KACvB,GAkDF,CAAA"}
@@ -1,7 +1,7 @@
1
1
  export { toGasPolicy, type GasPolicyParams } from "./toGasPolicy.js";
2
2
  export { toSignatureCallerPolicy, type SignatureCallerPolicyParams } from "./toSignatureCallerPolicy.js";
3
3
  export { toRateLimitPolicy, type RateLimitPolicyParams } from "./toRateLimitPolicy.js";
4
- export { toCallPolicy, type CallPolicyParams } from "./toCallPolicy.js";
4
+ export { toCallPolicy, type CallPolicyParams, CallPolicyVersion } from "./toCallPolicy.js";
5
5
  export { toPolicyId } from "./utils/toPolicyId.js";
6
6
  export { toSudoPolicy, type SudoPolicyParams } from "./toSudoPolicy.js";
7
7
  export { CallType, ParamCondition } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACH,uBAAuB,EACvB,KAAK,2BAA2B,EACnC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,iBAAiB,EACjB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EACH,iBAAiB,EACjB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../policies/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EACH,uBAAuB,EACvB,KAAK,2BAA2B,EACnC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACH,iBAAiB,EACjB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACH,YAAY,EACZ,KAAK,gBAAgB,EACrB,iBAAiB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EACH,iBAAiB,EACjB,KAAK,qBAAqB,EAC7B,MAAM,wBAAwB,CAAA"}
@@ -1,8 +1,14 @@
1
- import type { Abi } from "viem";
1
+ import type { Abi, Address } from "viem";
2
2
  import type { Policy, PolicyParams } from "../types.js";
3
3
  import { type Permission } from "./types.js";
4
+ export declare enum CallPolicyVersion {
5
+ V0_0_1 = "0.0.1",
6
+ V0_0_2 = "0.0.2"
7
+ }
8
+ export declare const getCallPolicyAddress: (policyVersion: CallPolicyVersion, policyAddress?: Address) => Address;
4
9
  export type CallPolicyParams<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string> = PolicyParams & {
10
+ policyVersion: CallPolicyVersion;
5
11
  permissions?: Permission<TAbi, TFunctionName>[];
6
12
  };
7
- export declare function toCallPolicy<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ policyAddress, policyFlag, permissions }: CallPolicyParams<TAbi, TFunctionName>): Policy;
13
+ export declare function toCallPolicy<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ policyAddress, policyFlag, policyVersion, permissions }: CallPolicyParams<TAbi, TFunctionName>): Policy;
8
14
  //# sourceMappingURL=toCallPolicy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toCallPolicy.d.ts","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAI/B,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKvD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,MAAM,gBAAgB,CACxB,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,IACjD,YAAY,GAAG;IACf,WAAW,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAA;CAClD,CAAA;AAED,wBAAgB,YAAY,CACxB,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,EACnD,EACE,aAAoC,EACpC,UAA2C,EAC3C,WAAgB,EACnB,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,MAAM,CAuChD"}
1
+ {"version":3,"file":"toCallPolicy.d.ts","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAOxC,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKvD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAEtD,oBAAY,iBAAiB;IACzB,MAAM,UAAU;IAChB,MAAM,UAAU;CACnB;AAED,eAAO,MAAM,oBAAoB,kBACd,iBAAiB,kBAChB,OAAO,KACxB,OAQF,CAAA;AAED,MAAM,MAAM,gBAAgB,CACxB,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,IACjD,YAAY,GAAG;IACf,aAAa,EAAE,iBAAiB,CAAA;IAChC,WAAW,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAA;CAClD,CAAA;AAED,wBAAgB,YAAY,CACxB,IAAI,SAAS,GAAG,GAAG,SAAS,OAAO,EAAE,EACrC,aAAa,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,EACnD,EACE,aAAa,EACb,UAA2C,EAC3C,aAAa,EACb,WAAgB,EACnB,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,MAAM,CA8ChD"}
@@ -11,12 +11,13 @@ export declare enum ParamCondition {
11
11
  LESS_THAN = 2,
12
12
  GREATER_THAN_OR_EQUAL = 3,
13
13
  LESS_THAN_OR_EQUAL = 4,
14
- NOT_EQUAL = 5
14
+ NOT_EQUAL = 5,
15
+ ONE_OF = 6
15
16
  }
16
17
  export interface ParamRule {
17
18
  condition: ParamCondition;
18
19
  offset: number;
19
- param: Hex;
20
+ params: Hex | Hex[];
20
21
  }
21
22
  export type PermissionCore = {
22
23
  callType?: CallType;
@@ -40,11 +41,18 @@ export type Permission<TAbi extends Abi | readonly unknown[], TFunctionName exte
40
41
  } & GetFunctionArgs<TAbi, TFunctionName> : _FunctionName extends string ? {
41
42
  abi?: [Narrow<TAbi[number]>];
42
43
  } & GetFunctionArgs<TAbi, _FunctionName> : never);
44
+ type ConditionValue<TAbiParameter extends AbiParameter, TAbiParameterKind extends AbiParameterKind> = {
45
+ condition: ParamCondition.ONE_OF;
46
+ value: AbiParameterToPrimitiveType<TAbiParameter, TAbiParameterKind>[];
47
+ } | {
48
+ condition: Exclude<ParamCondition, ParamCondition.ONE_OF>;
49
+ value: AbiParameterToPrimitiveType<TAbiParameter, TAbiParameterKind>;
50
+ };
43
51
  export type CombinedArgs<TAbiParameters extends readonly AbiParameter[], TAbiParameterKind extends AbiParameterKind = AbiParameterKind> = {
44
- [K in keyof TAbiParameters]: {
45
- condition: ParamCondition;
46
- value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>;
47
- } | null;
52
+ [K in keyof TAbiParameters]: ConditionValue<TAbiParameters[K], TAbiParameterKind> | null;
53
+ };
54
+ export type GeneratePermissionWithPolicyAddressParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string> = GeneratePermissionFromArgsParameters<TAbi, TFunctionName> & {
55
+ policyAddress: Address;
48
56
  };
49
57
  export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = {
50
58
  functionName?: _FunctionName;
@@ -53,4 +61,5 @@ export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unk
53
61
  } & GetFunctionArgs<TAbi, TFunctionName> : _FunctionName extends string ? {
54
62
  abi: [Narrow<TAbi[number]>];
55
63
  } & GetFunctionArgs<TAbi, _FunctionName> : never);
64
+ export {};
56
65
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"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"}
package/constants.ts CHANGED
@@ -2,7 +2,16 @@ export const ECDSA_SIGNER_CONTRACT =
2
2
  "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF"
3
3
  export const WEBAUTHN_SIGNER_CONTRACT =
4
4
  "0x8AA55d4BfAE101609078681A69B5bc3181516612"
5
- export const CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8"
5
+ export const CALL_POLICY_CONTRACT_V0_0_1 =
6
+ "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8"
7
+ /**
8
+ * @dev CALL_POLICY_CONTRACT_V0_0_2 updates
9
+ * - Added ONE_OF condition
10
+ * - Added native ETH transfer support
11
+ * - Added `zeroAddress` target address support, which means you can approve any contracts with specific selector. (e.g. approve any ERC20 transfer)
12
+ */
13
+ export const CALL_POLICY_CONTRACT_V0_0_2 =
14
+ "0x67Fa43ca2D689beA4d10b9F2C96828828A2Ab275"
6
15
  export const GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23"
7
16
  export const RATE_LIMIT_POLICY_CONTRACT =
8
17
  "0xf63d4139B25c836334edD76641356c6b74C86873"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/permissions",
3
- "version": "5.3.2-alpha-2",
3
+ "version": "5.4.0",
4
4
  "author": "ZeroDev",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
@@ -51,19 +51,6 @@
51
51
  "default": "./_cjs/signers/index.js"
52
52
  }
53
53
  },
54
- "typesVersions": {
55
- "*": {
56
- "policies": [
57
- "./_types/policies/index.d.ts"
58
- ],
59
- "signers": [
60
- "./_types/signers/index.d.ts"
61
- ],
62
- "types": [
63
- "./_types/types/index.d.ts"
64
- ]
65
- }
66
- },
67
54
  "dependencies": {
68
55
  "merkletreejs": "^0.3.11",
69
56
  "@simplewebauthn/browser": "^9.0.1"
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  type Abi,
3
3
  type AbiFunction,
4
+ type Address,
4
5
  type GetAbiItemParameters,
5
6
  type Hex,
6
7
  encodeAbiParameters,
@@ -10,11 +11,16 @@ import {
10
11
  toFunctionSelector,
11
12
  toHex
12
13
  } from "viem"
13
- import type {
14
- CombinedArgs,
15
- GeneratePermissionFromArgsParameters,
16
- ParamRule,
17
- PermissionCore
14
+ import {
15
+ CALL_POLICY_CONTRACT_V0_0_1,
16
+ CALL_POLICY_CONTRACT_V0_0_2
17
+ } from "../constants.js"
18
+ import {
19
+ type CombinedArgs,
20
+ type GeneratePermissionWithPolicyAddressParameters,
21
+ ParamCondition,
22
+ type ParamRule,
23
+ type PermissionCore
18
24
  } from "./types.js"
19
25
 
20
26
  export function getPermissionFromABI<
@@ -23,8 +29,9 @@ export function getPermissionFromABI<
23
29
  >({
24
30
  abi,
25
31
  args,
26
- functionName
27
- }: GeneratePermissionFromArgsParameters<TAbi, TFunctionName>): Pick<
32
+ functionName,
33
+ policyAddress
34
+ }: GeneratePermissionWithPolicyAddressParameters<TAbi, TFunctionName>): Pick<
28
35
  PermissionCore,
29
36
  "selector" | "rules"
30
37
  > {
@@ -46,10 +53,16 @@ export function getPermissionFromABI<
46
53
  let paramRules: ParamRule[] = []
47
54
  if (args && Array.isArray(args)) {
48
55
  paramRules = (args as CombinedArgs<AbiFunction["inputs"]>)
49
- .map(
50
- (arg, i) =>
51
- arg && {
52
- param: pad(
56
+ .map((arg, i) => {
57
+ if (!arg) return null
58
+ if (policyAddress === CALL_POLICY_CONTRACT_V0_0_1) {
59
+ if (arg.condition === ParamCondition.ONE_OF) {
60
+ throw Error(
61
+ "The ONE_OF condition is only supported from CALL_POLICY_CONTRACT_V0_0_2 onwards. Please use CALL_POLICY_CONTRACT_V0_0_2 or a later version."
62
+ )
63
+ }
64
+ return {
65
+ params: pad(
53
66
  isHex(arg.value)
54
67
  ? arg.value
55
68
  : toHex(
@@ -60,7 +73,35 @@ export function getPermissionFromABI<
60
73
  offset: i * 32,
61
74
  condition: arg.condition
62
75
  }
63
- )
76
+ }
77
+ let params: Hex[]
78
+ if (arg.condition === ParamCondition.ONE_OF) {
79
+ params = arg.value.map((value) =>
80
+ pad(
81
+ isHex(value)
82
+ ? value
83
+ : toHex(value as Parameters<typeof toHex>[0]),
84
+ { size: 32 }
85
+ )
86
+ )
87
+ } else {
88
+ params = [
89
+ pad(
90
+ isHex(arg.value)
91
+ ? arg.value
92
+ : toHex(
93
+ arg.value as Parameters<typeof toHex>[0]
94
+ ),
95
+ { size: 32 }
96
+ )
97
+ ]
98
+ }
99
+ return {
100
+ params,
101
+ offset: i * 32,
102
+ condition: arg.condition
103
+ }
104
+ })
64
105
  .filter((rule) => rule) as ParamRule[]
65
106
  }
66
107
  return {
@@ -70,7 +111,8 @@ export function getPermissionFromABI<
70
111
  }
71
112
 
72
113
  export const encodePermissionData = (
73
- permission: PermissionCore | PermissionCore[]
114
+ permission: PermissionCore | PermissionCore[],
115
+ policyAddress: Address
74
116
  ): Hex => {
75
117
  const permissionParam = {
76
118
  components: [
@@ -102,10 +144,12 @@ export const encodePermissionData = (
102
144
  name: "offset",
103
145
  type: "uint64"
104
146
  },
105
-
106
147
  {
107
- name: "param",
108
- type: "bytes32"
148
+ name: "params",
149
+ type:
150
+ policyAddress === CALL_POLICY_CONTRACT_V0_0_2
151
+ ? "bytes32[]"
152
+ : "bytes32"
109
153
  }
110
154
  ],
111
155
  name: "rules",
package/policies/index.ts CHANGED
@@ -7,7 +7,11 @@ export {
7
7
  toRateLimitPolicy,
8
8
  type RateLimitPolicyParams
9
9
  } from "./toRateLimitPolicy.js"
10
- export { toCallPolicy, type CallPolicyParams } from "./toCallPolicy.js"
10
+ export {
11
+ toCallPolicy,
12
+ type CallPolicyParams,
13
+ CallPolicyVersion
14
+ } from "./toCallPolicy.js"
11
15
  export { toPolicyId } from "./utils/toPolicyId.js"
12
16
  export { toSudoPolicy, type SudoPolicyParams } from "./toSudoPolicy.js"
13
17
  export { CallType, ParamCondition } from "./types.js"
@@ -1,7 +1,10 @@
1
- import type { Abi } from "viem"
1
+ import type { Abi, Address } from "viem"
2
2
  import { concatHex, pad } from "viem"
3
- import { PolicyFlags } from "../constants.js"
4
- import { CALL_POLICY_CONTRACT } from "../constants.js"
3
+ import {
4
+ CALL_POLICY_CONTRACT_V0_0_1,
5
+ CALL_POLICY_CONTRACT_V0_0_2,
6
+ PolicyFlags
7
+ } from "../constants.js"
5
8
  import type { Policy, PolicyParams } from "../types.js"
6
9
  import {
7
10
  encodePermissionData,
@@ -9,10 +12,29 @@ import {
9
12
  } from "./callPolicyUtils.js"
10
13
  import { CallType, type Permission } from "./types.js"
11
14
 
15
+ export enum CallPolicyVersion {
16
+ V0_0_1 = "0.0.1",
17
+ V0_0_2 = "0.0.2"
18
+ }
19
+
20
+ export const getCallPolicyAddress = (
21
+ policyVersion: CallPolicyVersion,
22
+ policyAddress?: Address
23
+ ): Address => {
24
+ if (policyAddress) return policyAddress
25
+ switch (policyVersion) {
26
+ case CallPolicyVersion.V0_0_1:
27
+ return CALL_POLICY_CONTRACT_V0_0_1
28
+ case CallPolicyVersion.V0_0_2:
29
+ return CALL_POLICY_CONTRACT_V0_0_2
30
+ }
31
+ }
32
+
12
33
  export type CallPolicyParams<
13
34
  TAbi extends Abi | readonly unknown[],
14
35
  TFunctionName extends string | undefined = string
15
36
  > = PolicyParams & {
37
+ policyVersion: CallPolicyVersion
16
38
  permissions?: Permission<TAbi, TFunctionName>[]
17
39
  }
18
40
 
@@ -20,15 +42,19 @@ export function toCallPolicy<
20
42
  TAbi extends Abi | readonly unknown[],
21
43
  TFunctionName extends string | undefined = string
22
44
  >({
23
- policyAddress = CALL_POLICY_CONTRACT,
45
+ policyAddress,
24
46
  policyFlag = PolicyFlags.FOR_ALL_VALIDATION,
47
+ policyVersion,
25
48
  permissions = []
26
49
  }: CallPolicyParams<TAbi, TFunctionName>): Policy {
50
+ const callPolicyAddress = getCallPolicyAddress(policyVersion, policyAddress)
51
+
27
52
  const generatedPermissionParams = permissions?.map((perm) =>
28
53
  getPermissionFromABI({
29
54
  abi: perm.abi as Abi,
30
55
  functionName: perm.functionName as string,
31
- args: perm.args as []
56
+ args: perm.args as [],
57
+ policyAddress: callPolicyAddress
32
58
  })
33
59
  )
34
60
 
@@ -44,17 +70,21 @@ export function toCallPolicy<
44
70
  rules: perm.rules ?? generatedPermissionParams?.[index]?.rules ?? []
45
71
  })) ?? []
46
72
 
47
- const encodedPermissionData = encodePermissionData(permissions)
73
+ const encodedPermissionData = encodePermissionData(
74
+ permissions,
75
+ callPolicyAddress
76
+ )
48
77
 
49
78
  return {
50
79
  getPolicyData: () => {
51
80
  return encodedPermissionData
52
81
  },
53
82
  getPolicyInfoInBytes: () => {
54
- return concatHex([policyFlag, policyAddress])
83
+ return concatHex([policyFlag, callPolicyAddress])
55
84
  },
56
85
  policyParams: {
57
86
  type: "call",
87
+ policyVersion,
58
88
  policyAddress,
59
89
  policyFlag,
60
90
  permissions
package/policies/types.ts CHANGED
@@ -23,13 +23,14 @@ export enum ParamCondition {
23
23
  LESS_THAN = 2,
24
24
  GREATER_THAN_OR_EQUAL = 3,
25
25
  LESS_THAN_OR_EQUAL = 4,
26
- NOT_EQUAL = 5
26
+ NOT_EQUAL = 5,
27
+ ONE_OF = 6
27
28
  }
28
29
 
29
30
  export interface ParamRule {
30
31
  condition: ParamCondition
31
32
  offset: number
32
- param: Hex
33
+ params: Hex | Hex[]
33
34
  }
34
35
 
35
36
  export type PermissionCore = {
@@ -93,14 +94,34 @@ export type Permission<
93
94
  >
94
95
  : never)
95
96
 
97
+ type ConditionValue<
98
+ TAbiParameter extends AbiParameter,
99
+ TAbiParameterKind extends AbiParameterKind
100
+ > =
101
+ | {
102
+ condition: ParamCondition.ONE_OF
103
+ value: AbiParameterToPrimitiveType<TAbiParameter, TAbiParameterKind>[]
104
+ }
105
+ | {
106
+ condition: Exclude<ParamCondition, ParamCondition.ONE_OF>
107
+ value: AbiParameterToPrimitiveType<TAbiParameter, TAbiParameterKind>
108
+ }
109
+
96
110
  export type CombinedArgs<
97
111
  TAbiParameters extends readonly AbiParameter[],
98
112
  TAbiParameterKind extends AbiParameterKind = AbiParameterKind
99
113
  > = {
100
- [K in keyof TAbiParameters]: {
101
- condition: ParamCondition
102
- value: AbiParameterToPrimitiveType<TAbiParameters[K], TAbiParameterKind>
103
- } | null
114
+ [K in keyof TAbiParameters]: ConditionValue<
115
+ TAbiParameters[K],
116
+ TAbiParameterKind
117
+ > | null
118
+ }
119
+
120
+ export type GeneratePermissionWithPolicyAddressParameters<
121
+ TAbi extends Abi | readonly unknown[],
122
+ TFunctionName extends string | undefined = string
123
+ > = GeneratePermissionFromArgsParameters<TAbi, TFunctionName> & {
124
+ policyAddress: Address
104
125
  }
105
126
 
106
127
  export type GeneratePermissionFromArgsParameters<