@zerodev/permissions 5.3.1-alpha-0 → 5.3.2-alpha-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_cjs/constants.js +3 -2
- package/_cjs/constants.js.map +1 -1
- package/_cjs/policies/callPolicyUtils.js +25 -13
- package/_cjs/policies/callPolicyUtils.js.map +1 -1
- package/_cjs/policies/toCallPolicy.js +1 -2
- package/_cjs/policies/toCallPolicy.js.map +1 -1
- package/_cjs/policies/types.js +1 -0
- package/_cjs/policies/types.js.map +1 -1
- package/_esm/constants.js +8 -1
- package/_esm/constants.js.map +1 -1
- package/_esm/policies/callPolicyUtils.js +24 -11
- package/_esm/policies/callPolicyUtils.js.map +1 -1
- package/_esm/policies/toCallPolicy.js +1 -2
- package/_esm/policies/toCallPolicy.js.map +1 -1
- package/_esm/policies/types.js +1 -0
- package/_esm/policies/types.js.map +1 -1
- package/_types/constants.d.ts +8 -1
- package/_types/constants.d.ts.map +1 -1
- package/_types/policies/callPolicyUtils.d.ts +1 -2
- package/_types/policies/callPolicyUtils.d.ts.map +1 -1
- package/_types/policies/toCallPolicy.d.ts +3 -3
- package/_types/policies/toCallPolicy.d.ts.map +1 -1
- package/_types/policies/types.d.ts +12 -6
- package/_types/policies/types.d.ts.map +1 -1
- package/_types/types.d.ts +3 -3
- package/_types/types.d.ts.map +1 -1
- package/constants.ts +10 -1
- package/package.json +2 -2
- package/policies/callPolicyUtils.ts +32 -24
- package/policies/index.ts +0 -1
- package/policies/toCallPolicy.ts +12 -7
- package/policies/types.ts +20 -6
- package/types.ts +3 -3
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.
|
|
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_V5_3_2 = exports.CALL_POLICY_CONTRACT_V5_3_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.
|
|
6
|
+
exports.CALL_POLICY_CONTRACT_V5_3_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
|
|
7
|
+
exports.CALL_POLICY_CONTRACT_V5_3_2 = "0x09dc5ca0d9e5bd4330b45b40585126519d82b6cc";
|
|
7
8
|
exports.GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23";
|
|
8
9
|
exports.RATE_LIMIT_POLICY_CONTRACT = "0xf63d4139B25c836334edD76641356c6b74C86873";
|
|
9
10
|
exports.SIGNATURE_POLICY_CONTRACT = "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d";
|
package/_cjs/constants.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.encodePermissionData = exports.getPermissionFromABI =
|
|
3
|
+
exports.encodePermissionData = exports.getPermissionFromABI = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
|
-
|
|
6
|
-
return permission;
|
|
7
|
-
}
|
|
8
|
-
exports.toPermission = toPermission;
|
|
5
|
+
const types_js_1 = require("./types.js");
|
|
9
6
|
function getPermissionFromABI({ abi, args, functionName }) {
|
|
10
7
|
if (!abi || !functionName) {
|
|
11
8
|
return {
|
|
@@ -25,12 +22,27 @@ function getPermissionFromABI({ abi, args, functionName }) {
|
|
|
25
22
|
let paramRules = [];
|
|
26
23
|
if (args && Array.isArray(args)) {
|
|
27
24
|
paramRules = args
|
|
28
|
-
.map((arg, i) =>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
.map((arg, i) => {
|
|
26
|
+
if (!arg)
|
|
27
|
+
return null;
|
|
28
|
+
let params;
|
|
29
|
+
if (arg.condition === types_js_1.ParamCondition.ONE_OF) {
|
|
30
|
+
params = arg.value.map((value) => (0, viem_1.pad)((0, viem_1.isHex)(value)
|
|
31
|
+
? value
|
|
32
|
+
: (0, viem_1.toHex)(value), { size: 32 }));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
params = [
|
|
36
|
+
(0, viem_1.pad)((0, viem_1.isHex)(arg.value)
|
|
37
|
+
? arg.value
|
|
38
|
+
: (0, viem_1.toHex)(arg.value), { size: 32 })
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
params,
|
|
43
|
+
offset: i * 32,
|
|
44
|
+
condition: arg.condition
|
|
45
|
+
};
|
|
34
46
|
})
|
|
35
47
|
.filter((rule) => rule);
|
|
36
48
|
}
|
|
@@ -72,8 +84,8 @@ const encodePermissionData = (permission) => {
|
|
|
72
84
|
type: "uint64"
|
|
73
85
|
},
|
|
74
86
|
{
|
|
75
|
-
name: "
|
|
76
|
-
type: "bytes32"
|
|
87
|
+
name: "params",
|
|
88
|
+
type: "bytes32[]"
|
|
77
89
|
}
|
|
78
90
|
],
|
|
79
91
|
name: "rules",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":";;;AAAA,+BAWa;
|
|
1
|
+
{"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.toCallPolicy = 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
|
|
8
|
+
function toCallPolicy({ policyAddress, policyFlag = constants_js_1.PolicyFlags.FOR_ALL_VALIDATION, permissions = [] }) {
|
|
10
9
|
const generatedPermissionParams = permissions?.map((perm) => (0, callPolicyUtils_js_1.getPermissionFromABI)({
|
|
11
10
|
abi: perm.abi,
|
|
12
11
|
functionName: perm.functionName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":";;;AACA,+BAAqC;AACrC,kDAA6C;
|
|
1
|
+
{"version":3,"file":"toCallPolicy.js","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":";;;AACA,+BAAqC;AACrC,kDAA6C;AAE7C,6DAG6B;AAC7B,yCAAsD;AAStD,SAAgB,YAAY,CAG1B,EACE,aAAa,EACb,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"}
|
package/_cjs/policies/types.js
CHANGED
|
@@ -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,
|
|
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
|
|
3
|
+
export const CALL_POLICY_CONTRACT_V5_3_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
|
|
4
|
+
/**
|
|
5
|
+
* @dev CALL_POLICY_CONTRACT_V5_3_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_V5_3_2 = "0x09dc5ca0d9e5bd4330b45b40585126519d82b6cc"; // TODO: need to confirm the address after review
|
|
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";
|
package/_esm/constants.js.map
CHANGED
|
@@ -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,
|
|
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,CAAC,iDAAiD;AAClG,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,7 +1,5 @@
|
|
|
1
1
|
import { encodeAbiParameters, getAbiItem, isHex, pad, toFunctionSelector, toHex } from "viem";
|
|
2
|
-
|
|
3
|
-
return permission;
|
|
4
|
-
}
|
|
2
|
+
import { ParamCondition } from "./types.js";
|
|
5
3
|
export function getPermissionFromABI({ abi, args, functionName }) {
|
|
6
4
|
if (!abi || !functionName) {
|
|
7
5
|
return {
|
|
@@ -21,12 +19,27 @@ export function getPermissionFromABI({ abi, args, functionName }) {
|
|
|
21
19
|
let paramRules = [];
|
|
22
20
|
if (args && Array.isArray(args)) {
|
|
23
21
|
paramRules = args
|
|
24
|
-
.map((arg, i) =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
.map((arg, i) => {
|
|
23
|
+
if (!arg)
|
|
24
|
+
return null;
|
|
25
|
+
let params;
|
|
26
|
+
if (arg.condition === ParamCondition.ONE_OF) {
|
|
27
|
+
params = arg.value.map((value) => pad(isHex(value)
|
|
28
|
+
? value
|
|
29
|
+
: toHex(value), { size: 32 }));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
params = [
|
|
33
|
+
pad(isHex(arg.value)
|
|
34
|
+
? arg.value
|
|
35
|
+
: toHex(arg.value), { size: 32 })
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
params,
|
|
40
|
+
offset: i * 32,
|
|
41
|
+
condition: arg.condition
|
|
42
|
+
};
|
|
30
43
|
})
|
|
31
44
|
.filter((rule) => rule);
|
|
32
45
|
}
|
|
@@ -67,8 +80,8 @@ export const encodePermissionData = (permission) => {
|
|
|
67
80
|
type: "uint64"
|
|
68
81
|
},
|
|
69
82
|
{
|
|
70
|
-
name: "
|
|
71
|
-
type: "bytes32"
|
|
83
|
+
name: "params",
|
|
84
|
+
type: "bytes32[]"
|
|
72
85
|
}
|
|
73
86
|
],
|
|
74
87
|
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;
|
|
1
|
+
{"version":3,"file":"callPolicyUtils.js","sourceRoot":"","sources":["../../policies/callPolicyUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { concatHex, pad } from "viem";
|
|
2
2
|
import { PolicyFlags } from "../constants.js";
|
|
3
|
-
import { CALL_POLICY_CONTRACT } from "../constants.js";
|
|
4
3
|
import { encodePermissionData, getPermissionFromABI } from "./callPolicyUtils.js";
|
|
5
4
|
import { CallType } from "./types.js";
|
|
6
|
-
export function toCallPolicy({ policyAddress
|
|
5
|
+
export function toCallPolicy({ policyAddress, policyFlag = PolicyFlags.FOR_ALL_VALIDATION, permissions = [] }) {
|
|
7
6
|
const generatedPermissionParams = permissions?.map((perm) => getPermissionFromABI({
|
|
8
7
|
abi: perm.abi,
|
|
9
8
|
functionName: perm.functionName,
|
|
@@ -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;
|
|
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;AAE7C,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAA;AAStD,MAAM,UAAU,YAAY,CAG1B,EACE,aAAa,EACb,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"}
|
package/_esm/policies/types.js
CHANGED
|
@@ -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,
|
|
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"}
|
package/_types/constants.d.ts
CHANGED
|
@@ -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
|
|
3
|
+
export declare const CALL_POLICY_CONTRACT_V5_3_1 = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
|
|
4
|
+
/**
|
|
5
|
+
* @dev CALL_POLICY_CONTRACT_V5_3_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_V5_3_2 = "0x09dc5ca0d9e5bd4330b45b40585126519d82b6cc";
|
|
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,
|
|
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,6 +1,5 @@
|
|
|
1
1
|
import { type Abi, type Hex } from "viem";
|
|
2
|
-
import type
|
|
3
|
-
export declare function toPermission<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>(permission: Permission<TAbi, TFunctionName>): Permission<TAbi, TFunctionName>;
|
|
2
|
+
import { type GeneratePermissionFromArgsParameters, type PermissionCore } from "./types.js";
|
|
4
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">;
|
|
5
4
|
export declare const encodePermissionData: (permission: PermissionCore | PermissionCore[]) => Hex;
|
|
6
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,
|
|
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,EAGH,KAAK,oCAAoC,EAEzC,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,EACf,EAAE,oCAAoC,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,IAAI,CAC/D,cAAc,EACd,UAAU,GAAG,OAAO,CACvB,CAuDA;AAED,eAAO,MAAM,oBAAoB,eACjB,cAAc,GAAG,cAAc,EAAE,KAC9C,GAgDF,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Abi } from "viem";
|
|
2
2
|
import type { Policy, PolicyParams } from "../types.js";
|
|
3
3
|
import { type Permission } from "./types.js";
|
|
4
|
-
export type CallPolicyParams = PolicyParams & {
|
|
5
|
-
permissions?: Permission<
|
|
4
|
+
export type CallPolicyParams<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string> = PolicyParams & {
|
|
5
|
+
permissions?: Permission<TAbi, TFunctionName>[];
|
|
6
6
|
};
|
|
7
|
-
export declare function toCallPolicy({ policyAddress, policyFlag, permissions }: CallPolicyParams): Policy;
|
|
7
|
+
export declare function toCallPolicy<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string>({ policyAddress, policyFlag, permissions }: CallPolicyParams<TAbi, TFunctionName>): Policy;
|
|
8
8
|
//# 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;
|
|
1
|
+
{"version":3,"file":"toCallPolicy.d.ts","sourceRoot":"","sources":["../../policies/toCallPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAG/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,aAAa,EACb,UAA2C,EAC3C,WAAgB,EACnB,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,MAAM,CAuChD"}
|
|
@@ -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
|
-
|
|
20
|
+
params: Hex[];
|
|
20
21
|
}
|
|
21
22
|
export type PermissionCore = {
|
|
22
23
|
callType?: CallType;
|
|
@@ -40,11 +41,15 @@ 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;
|
|
48
53
|
};
|
|
49
54
|
export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unknown[], TFunctionName extends string | undefined = string, _FunctionName = TAbi extends Abi ? InferFunctionName<TAbi, TFunctionName> : never> = {
|
|
50
55
|
functionName?: _FunctionName;
|
|
@@ -53,4 +58,5 @@ export type GeneratePermissionFromArgsParameters<TAbi extends Abi | readonly unk
|
|
|
53
58
|
} & GetFunctionArgs<TAbi, TFunctionName> : _FunctionName extends string ? {
|
|
54
59
|
abi: [Narrow<TAbi[number]>];
|
|
55
60
|
} & GetFunctionArgs<TAbi, _FunctionName> : never);
|
|
61
|
+
export {};
|
|
56
62
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,KAAK,EACR,GAAG,EACH,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,OAAO,EACP,GAAG,EACH,MAAM,EACT,MAAM,MAAM,CAAA;AAEb,oBAAY,QAAQ;IAChB,IAAI,SAAS;IACb,UAAU,SAAS;IACnB,aAAa,SAAS;CACzB;AAED,oBAAY,cAAc;IACtB,KAAK,IAAI;IACT,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,qBAAqB,IAAI;IACzB,kBAAkB,IAAI;IACtB,SAAS,IAAI;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../policies/types.ts"],"names":[],"mappings":"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"}
|
package/_types/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { KernelValidator } from "@zerodev/sdk";
|
|
2
2
|
import type { Action, GetKernelVersion, PluginValidityData } from "@zerodev/sdk/types";
|
|
3
3
|
import type { EntryPoint } from "permissionless/types/entrypoint";
|
|
4
|
-
import type { Address, Hex, LocalAccount } from "viem";
|
|
4
|
+
import type { Abi, Address, Hex, LocalAccount } from "viem";
|
|
5
5
|
import type { PolicyFlags } from "./constants.js";
|
|
6
6
|
import type { CallPolicyParams, GasPolicyParams, RateLimitPolicyParams, SignatureCallerPolicyParams, SudoPolicyParams, TimestampPolicyParams } from "./policies/index.js";
|
|
7
7
|
export type PermissionPlugin<entryPoint extends EntryPoint> = KernelValidator<entryPoint, "PermissionValidator"> & {
|
|
@@ -11,7 +11,7 @@ export type ModularSignerParams = {
|
|
|
11
11
|
signerContractAddress?: Address;
|
|
12
12
|
};
|
|
13
13
|
export type PolicyParams = {
|
|
14
|
-
policyAddress
|
|
14
|
+
policyAddress: Address;
|
|
15
15
|
policyFlag?: PolicyFlags;
|
|
16
16
|
};
|
|
17
17
|
export type ModularSigner = {
|
|
@@ -23,7 +23,7 @@ export type ModularSigner = {
|
|
|
23
23
|
export type Policy = {
|
|
24
24
|
getPolicyData: () => Hex;
|
|
25
25
|
getPolicyInfoInBytes: () => Hex;
|
|
26
|
-
policyParams: (CallPolicyParams & {
|
|
26
|
+
policyParams: (CallPolicyParams<Abi | readonly unknown[], string> & {
|
|
27
27
|
type: "call";
|
|
28
28
|
}) | (GasPolicyParams & {
|
|
29
29
|
type: "gas";
|
package/_types/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EACR,MAAM,EACN,gBAAgB,EAChB,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EACR,MAAM,EACN,gBAAgB,EAChB,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAC3B,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,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,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,EAAE,OAAO,CAAA;IACtB,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,CAAC,UAAU,SAAS,UAAU,IAAI;IAChE,MAAM,EAAE,aAAa,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAC3C,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"}
|
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
|
|
5
|
+
export const CALL_POLICY_CONTRACT_V5_3_1 =
|
|
6
|
+
"0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8"
|
|
7
|
+
/**
|
|
8
|
+
* @dev CALL_POLICY_CONTRACT_V5_3_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_V5_3_2 =
|
|
14
|
+
"0x09dc5ca0d9e5bd4330b45b40585126519d82b6cc" // TODO: need to confirm the address after review
|
|
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.
|
|
3
|
+
"version": "5.3.2-alpha-0",
|
|
4
4
|
"author": "ZeroDev",
|
|
5
5
|
"main": "./_cjs/index.js",
|
|
6
6
|
"module": "./_esm/index.js",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@simplewebauthn/browser": "^9.0.1"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"viem": "^2.
|
|
59
|
+
"viem": "^2.16.3",
|
|
60
60
|
"@zerodev/sdk": "^5.2.13",
|
|
61
61
|
"permissionless": "^0.1.18"
|
|
62
62
|
}
|
|
@@ -10,21 +10,14 @@ import {
|
|
|
10
10
|
toFunctionSelector,
|
|
11
11
|
toHex
|
|
12
12
|
} from "viem"
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
PermissionCore
|
|
13
|
+
import {
|
|
14
|
+
ParamCondition,
|
|
15
|
+
type CombinedArgs,
|
|
16
|
+
type GeneratePermissionFromArgsParameters,
|
|
17
|
+
type ParamRule,
|
|
18
|
+
type PermissionCore
|
|
19
19
|
} from "./types.js"
|
|
20
20
|
|
|
21
|
-
export function toPermission<
|
|
22
|
-
TAbi extends Abi | readonly unknown[],
|
|
23
|
-
TFunctionName extends string | undefined = string
|
|
24
|
-
>(permission: Permission<TAbi, TFunctionName>) {
|
|
25
|
-
return permission
|
|
26
|
-
}
|
|
27
|
-
|
|
28
21
|
export function getPermissionFromABI<
|
|
29
22
|
TAbi extends Abi | readonly unknown[],
|
|
30
23
|
TFunctionName extends string | undefined = string
|
|
@@ -54,21 +47,36 @@ export function getPermissionFromABI<
|
|
|
54
47
|
let paramRules: ParamRule[] = []
|
|
55
48
|
if (args && Array.isArray(args)) {
|
|
56
49
|
paramRules = (args as CombinedArgs<AbiFunction["inputs"]>)
|
|
57
|
-
.map(
|
|
58
|
-
(arg
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
.map((arg, i) => {
|
|
51
|
+
if (!arg) return null
|
|
52
|
+
let params: Hex[]
|
|
53
|
+
if (arg.condition === ParamCondition.ONE_OF) {
|
|
54
|
+
params = arg.value.map((value) =>
|
|
55
|
+
pad(
|
|
56
|
+
isHex(value)
|
|
57
|
+
? value
|
|
58
|
+
: toHex(value as Parameters<typeof toHex>[0]),
|
|
59
|
+
{ size: 32 }
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
} else {
|
|
63
|
+
params = [
|
|
64
|
+
pad(
|
|
61
65
|
isHex(arg.value)
|
|
62
66
|
? arg.value
|
|
63
67
|
: toHex(
|
|
64
68
|
arg.value as Parameters<typeof toHex>[0]
|
|
65
69
|
),
|
|
66
70
|
{ size: 32 }
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
params,
|
|
76
|
+
offset: i * 32,
|
|
77
|
+
condition: arg.condition
|
|
78
|
+
}
|
|
79
|
+
})
|
|
72
80
|
.filter((rule) => rule) as ParamRule[]
|
|
73
81
|
}
|
|
74
82
|
return {
|
|
@@ -112,8 +120,8 @@ export const encodePermissionData = (
|
|
|
112
120
|
},
|
|
113
121
|
|
|
114
122
|
{
|
|
115
|
-
name: "
|
|
116
|
-
type: "bytes32"
|
|
123
|
+
name: "params",
|
|
124
|
+
type: "bytes32[]"
|
|
117
125
|
}
|
|
118
126
|
],
|
|
119
127
|
name: "rules",
|
package/policies/index.ts
CHANGED
|
@@ -8,7 +8,6 @@ export {
|
|
|
8
8
|
type RateLimitPolicyParams
|
|
9
9
|
} from "./toRateLimitPolicy.js"
|
|
10
10
|
export { toCallPolicy, type CallPolicyParams } from "./toCallPolicy.js"
|
|
11
|
-
export { toPermission } from "./callPolicyUtils.js"
|
|
12
11
|
export { toPolicyId } from "./utils/toPolicyId.js"
|
|
13
12
|
export { toSudoPolicy, type SudoPolicyParams } from "./toSudoPolicy.js"
|
|
14
13
|
export { CallType, ParamCondition } from "./types.js"
|
package/policies/toCallPolicy.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Abi } from "viem"
|
|
2
2
|
import { concatHex, pad } from "viem"
|
|
3
3
|
import { PolicyFlags } from "../constants.js"
|
|
4
|
-
import { CALL_POLICY_CONTRACT } from "../constants.js"
|
|
5
4
|
import type { Policy, PolicyParams } from "../types.js"
|
|
6
5
|
import {
|
|
7
6
|
encodePermissionData,
|
|
@@ -9,15 +8,21 @@ import {
|
|
|
9
8
|
} from "./callPolicyUtils.js"
|
|
10
9
|
import { CallType, type Permission } from "./types.js"
|
|
11
10
|
|
|
12
|
-
export type CallPolicyParams
|
|
13
|
-
|
|
11
|
+
export type CallPolicyParams<
|
|
12
|
+
TAbi extends Abi | readonly unknown[],
|
|
13
|
+
TFunctionName extends string | undefined = string
|
|
14
|
+
> = PolicyParams & {
|
|
15
|
+
permissions?: Permission<TAbi, TFunctionName>[]
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
export function toCallPolicy
|
|
17
|
-
|
|
18
|
+
export function toCallPolicy<
|
|
19
|
+
TAbi extends Abi | readonly unknown[],
|
|
20
|
+
TFunctionName extends string | undefined = string
|
|
21
|
+
>({
|
|
22
|
+
policyAddress,
|
|
18
23
|
policyFlag = PolicyFlags.FOR_ALL_VALIDATION,
|
|
19
24
|
permissions = []
|
|
20
|
-
}: CallPolicyParams): Policy {
|
|
25
|
+
}: CallPolicyParams<TAbi, TFunctionName>): Policy {
|
|
21
26
|
const generatedPermissionParams = permissions?.map((perm) =>
|
|
22
27
|
getPermissionFromABI({
|
|
23
28
|
abi: perm.abi as Abi,
|
|
@@ -52,7 +57,7 @@ export function toCallPolicy({
|
|
|
52
57
|
policyAddress,
|
|
53
58
|
policyFlag,
|
|
54
59
|
permissions
|
|
55
|
-
} as unknown as CallPolicyParams & {
|
|
60
|
+
} as unknown as CallPolicyParams<Abi | readonly unknown[], string> & {
|
|
56
61
|
type: "call"
|
|
57
62
|
}
|
|
58
63
|
}
|
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
|
-
|
|
33
|
+
params: Hex[]
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export type PermissionCore = {
|
|
@@ -93,14 +94,27 @@ 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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
114
|
+
[K in keyof TAbiParameters]: ConditionValue<
|
|
115
|
+
TAbiParameters[K],
|
|
116
|
+
TAbiParameterKind
|
|
117
|
+
> | null
|
|
104
118
|
}
|
|
105
119
|
|
|
106
120
|
export type GeneratePermissionFromArgsParameters<
|
package/types.ts
CHANGED
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
PluginValidityData
|
|
6
6
|
} from "@zerodev/sdk/types"
|
|
7
7
|
import type { EntryPoint } from "permissionless/types/entrypoint"
|
|
8
|
-
import type { Address, Hex, LocalAccount } from "viem"
|
|
8
|
+
import type { Abi, Address, Hex, LocalAccount } from "viem"
|
|
9
9
|
import type { PolicyFlags } from "./constants.js"
|
|
10
10
|
import type {
|
|
11
11
|
CallPolicyParams,
|
|
@@ -27,7 +27,7 @@ export type ModularSignerParams = {
|
|
|
27
27
|
signerContractAddress?: Address
|
|
28
28
|
}
|
|
29
29
|
export type PolicyParams = {
|
|
30
|
-
policyAddress
|
|
30
|
+
policyAddress: Address
|
|
31
31
|
policyFlag?: PolicyFlags
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -43,7 +43,7 @@ export type Policy = {
|
|
|
43
43
|
getPolicyInfoInBytes: () => Hex
|
|
44
44
|
// return params directly to serialize/deserialize Policy
|
|
45
45
|
policyParams:
|
|
46
|
-
| (CallPolicyParams & {
|
|
46
|
+
| (CallPolicyParams<Abi | readonly unknown[], string> & {
|
|
47
47
|
type: "call"
|
|
48
48
|
})
|
|
49
49
|
| (GasPolicyParams & { type: "gas" })
|