@debridge-finance/borderless-validation-sdk 0.0.0-dev-dee2389 → 0.0.0-dev-25d2153
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -0
- package/dist/cjs/helpers/address.js +31 -18
- package/dist/cjs/helpers/address.js.map +1 -1
- package/dist/cjs/helpers/evm-action.js +3 -3
- package/dist/cjs/helpers/evm-action.js.map +1 -1
- package/dist/cjs/helpers/evm-gas-compensation-tx.js +102 -0
- package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +1 -0
- package/dist/cjs/helpers/evm-intent-id.js +1 -1
- package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
- package/dist/cjs/helpers/gas-compensation.js +36 -0
- package/dist/cjs/helpers/gas-compensation.js.map +1 -0
- package/dist/cjs/helpers/placeholder.js +174 -0
- package/dist/cjs/helpers/placeholder.js.map +1 -0
- package/dist/cjs/helpers/sets.js +13 -0
- package/dist/cjs/helpers/sets.js.map +1 -0
- package/dist/cjs/types/enums.js +26 -2
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/request.js +25 -2
- package/dist/cjs/types/request.js.map +1 -1
- package/dist/cjs/types/response.js +119 -3
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +72 -8
- package/dist/cjs/types/validation.js.map +1 -1
- package/dist/cjs/validations/compensation-hook.js +203 -0
- package/dist/cjs/validations/compensation-hook.js.map +1 -0
- package/dist/cjs/validations/evm-caveats.js +4 -14
- package/dist/cjs/validations/evm-caveats.js.map +1 -1
- package/dist/cjs/validations/evm-op-budget.js +3 -3
- package/dist/cjs/validations/evm-op-budget.js.map +1 -1
- package/dist/cjs/validations/evm-op-hook.js +410 -3
- package/dist/cjs/validations/evm-op-hook.js.map +1 -1
- package/dist/cjs/validations/evm-op-wrap.js +3 -3
- package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +4 -6
- package/dist/cjs/validations/evm-required-actions.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-metamask.js +17 -94
- package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-shared.js +116 -0
- package/dist/cjs/validations/evm-sign712-shared.js.map +1 -0
- package/dist/cjs/validations/evm-sign7702.js +34 -22
- package/dist/cjs/validations/evm-sign7702.js.map +1 -1
- package/dist/cjs/validations/hooks-common.js +247 -35
- package/dist/cjs/validations/hooks-common.js.map +1 -1
- package/dist/cjs/validations/intent-destinations.js +197 -0
- package/dist/cjs/validations/intent-destinations.js.map +1 -0
- package/dist/cjs/validations/intent-tokens.js +341 -0
- package/dist/cjs/validations/intent-tokens.js.map +1 -0
- package/dist/cjs/validations/intent.js +288 -0
- package/dist/cjs/validations/intent.js.map +1 -0
- package/dist/cjs/validations/required-actions.js +2 -5
- package/dist/cjs/validations/required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-hook.js +32 -18
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/trades.js +5 -0
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +8 -1
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +47 -15
- package/dist/cjs/whitelists/environment-config.js.map +1 -1
- package/dist/cjs/whitelists/evm/caveat-enforcers.js +21 -5
- package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -1
- package/dist/cjs/whitelists/evm/delegation-manager.js +7 -2
- package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -1
- package/dist/cjs/whitelists/evm/eip7702-delegation.js +7 -2
- package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -1
- package/dist/cjs/whitelists/evm/index.js +14 -1
- package/dist/cjs/whitelists/evm/index.js.map +1 -1
- package/dist/cjs/whitelists/evm/metamask-delegation-chains.js +16 -0
- package/dist/cjs/whitelists/evm/metamask-delegation-chains.js.map +1 -0
- package/dist/cjs/whitelists/evm/permit2.js +16 -12
- package/dist/cjs/whitelists/evm/permit2.js.map +1 -1
- package/dist/cjs/whitelists/evm/weth.js +16 -5
- package/dist/cjs/whitelists/evm/weth.js.map +1 -1
- package/dist/cjs/whitelists/solana/intent-signature.js +0 -1
- package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/cjs/whitelists/subscription-to-chain-id.js +10 -0
- package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -1
- package/dist/cjs/whitelists/types.js +13 -3
- package/dist/cjs/whitelists/types.js.map +1 -1
- package/dist/esm/helpers/address.js +28 -17
- package/dist/esm/helpers/address.js.map +1 -1
- package/dist/esm/helpers/evm-action.js +3 -3
- package/dist/esm/helpers/evm-action.js.map +1 -1
- package/dist/esm/helpers/evm-gas-compensation-tx.js +99 -0
- package/dist/esm/helpers/evm-gas-compensation-tx.js.map +1 -0
- package/dist/esm/helpers/evm-intent-id.js +1 -1
- package/dist/esm/helpers/evm-intent-id.js.map +1 -1
- package/dist/esm/helpers/gas-compensation.js +33 -0
- package/dist/esm/helpers/gas-compensation.js.map +1 -0
- package/dist/esm/helpers/placeholder.js +168 -0
- package/dist/esm/helpers/placeholder.js.map +1 -0
- package/dist/esm/helpers/sets.js +10 -0
- package/dist/esm/helpers/sets.js.map +1 -0
- package/dist/esm/types/enums.js +25 -1
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/request.js +26 -3
- package/dist/esm/types/request.js.map +1 -1
- package/dist/esm/types/response.js +118 -2
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +72 -8
- package/dist/esm/types/validation.js.map +1 -1
- package/dist/esm/validations/compensation-hook.js +200 -0
- package/dist/esm/validations/compensation-hook.js.map +1 -0
- package/dist/esm/validations/evm-caveats.js +4 -14
- package/dist/esm/validations/evm-caveats.js.map +1 -1
- package/dist/esm/validations/evm-op-budget.js +3 -3
- package/dist/esm/validations/evm-op-budget.js.map +1 -1
- package/dist/esm/validations/evm-op-hook.js +409 -2
- package/dist/esm/validations/evm-op-hook.js.map +1 -1
- package/dist/esm/validations/evm-op-wrap.js +3 -3
- package/dist/esm/validations/evm-op-wrap.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +4 -6
- package/dist/esm/validations/evm-required-actions.js.map +1 -1
- package/dist/esm/validations/evm-sign712-metamask.js +17 -94
- package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/esm/validations/evm-sign712-shared.js +110 -0
- package/dist/esm/validations/evm-sign712-shared.js.map +1 -0
- package/dist/esm/validations/evm-sign7702.js +33 -22
- package/dist/esm/validations/evm-sign7702.js.map +1 -1
- package/dist/esm/validations/hooks-common.js +246 -36
- package/dist/esm/validations/hooks-common.js.map +1 -1
- package/dist/esm/validations/intent-destinations.js +194 -0
- package/dist/esm/validations/intent-destinations.js.map +1 -0
- package/dist/esm/validations/intent-tokens.js +338 -0
- package/dist/esm/validations/intent-tokens.js.map +1 -0
- package/dist/esm/validations/intent.js +285 -0
- package/dist/esm/validations/intent.js.map +1 -0
- package/dist/esm/validations/required-actions.js +2 -5
- package/dist/esm/validations/required-actions.js.map +1 -1
- package/dist/esm/validations/solana-hook.js +34 -20
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/trades.js +5 -0
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +8 -1
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +47 -15
- package/dist/esm/whitelists/environment-config.js.map +1 -1
- package/dist/esm/whitelists/evm/caveat-enforcers.js +20 -4
- package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -1
- package/dist/esm/whitelists/evm/delegation-manager.js +6 -1
- package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -1
- package/dist/esm/whitelists/evm/eip7702-delegation.js +6 -1
- package/dist/esm/whitelists/evm/eip7702-delegation.js.map +1 -1
- package/dist/esm/whitelists/evm/index.js +4 -4
- package/dist/esm/whitelists/evm/index.js.map +1 -1
- package/dist/esm/whitelists/evm/metamask-delegation-chains.js +13 -0
- package/dist/esm/whitelists/evm/metamask-delegation-chains.js.map +1 -0
- package/dist/esm/whitelists/evm/permit2.js +9 -5
- package/dist/esm/whitelists/evm/permit2.js.map +1 -1
- package/dist/esm/whitelists/evm/weth.js +16 -5
- package/dist/esm/whitelists/evm/weth.js.map +1 -1
- package/dist/esm/whitelists/solana/intent-signature.js +0 -1
- package/dist/esm/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/esm/whitelists/subscription-to-chain-id.js +9 -0
- package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -1
- package/dist/esm/whitelists/types.js +14 -5
- package/dist/esm/whitelists/types.js.map +1 -1
- package/dist/types/helpers/address.d.ts +5 -7
- package/dist/types/helpers/address.d.ts.map +1 -1
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts +13 -0
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +1 -0
- package/dist/types/helpers/gas-compensation.d.ts +10 -0
- package/dist/types/helpers/gas-compensation.d.ts.map +1 -0
- package/dist/types/helpers/placeholder.d.ts +41 -0
- package/dist/types/helpers/placeholder.d.ts.map +1 -0
- package/dist/types/helpers/sets.d.ts +2 -0
- package/dist/types/helpers/sets.d.ts.map +1 -0
- package/dist/types/types/enums.d.ts +19 -1
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/request.d.ts +19 -9
- package/dist/types/types/request.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +365 -9
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +64 -8
- package/dist/types/types/validation.d.ts.map +1 -1
- package/dist/types/validations/compensation-hook.d.ts +3 -0
- package/dist/types/validations/compensation-hook.d.ts.map +1 -0
- package/dist/types/validations/evm-caveats.d.ts.map +1 -1
- package/dist/types/validations/evm-op-hook.d.ts +4 -2
- package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
- package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
- package/dist/types/validations/evm-sign712-shared.d.ts +7 -0
- package/dist/types/validations/evm-sign712-shared.d.ts.map +1 -0
- package/dist/types/validations/evm-sign7702.d.ts +2 -1
- package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
- package/dist/types/validations/hooks-common.d.ts +1 -0
- package/dist/types/validations/hooks-common.d.ts.map +1 -1
- package/dist/types/validations/intent-destinations.d.ts +4 -0
- package/dist/types/validations/intent-destinations.d.ts.map +1 -0
- package/dist/types/validations/intent-tokens.d.ts +4 -0
- package/dist/types/validations/intent-tokens.d.ts.map +1 -0
- package/dist/types/validations/intent.d.ts +5 -0
- package/dist/types/validations/intent.d.ts.map +1 -0
- package/dist/types/validations/required-actions.d.ts +2 -1
- package/dist/types/validations/required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-hook.d.ts +4 -2
- package/dist/types/validations/solana-hook.d.ts.map +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/dist/types/whitelists/environment-config.d.ts.map +1 -1
- package/dist/types/whitelists/evm/caveat-enforcers.d.ts +8 -0
- package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -1
- package/dist/types/whitelists/evm/delegation-manager.d.ts +2 -0
- package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -1
- package/dist/types/whitelists/evm/eip7702-delegation.d.ts +2 -0
- package/dist/types/whitelists/evm/eip7702-delegation.d.ts.map +1 -1
- package/dist/types/whitelists/evm/index.d.ts +4 -4
- package/dist/types/whitelists/evm/index.d.ts.map +1 -1
- package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts +3 -0
- package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts.map +1 -0
- package/dist/types/whitelists/evm/permit2.d.ts +1 -0
- package/dist/types/whitelists/evm/permit2.d.ts.map +1 -1
- package/dist/types/whitelists/evm/weth.d.ts.map +1 -1
- package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -1
- package/dist/types/whitelists/subscription-to-chain-id.d.ts +1 -0
- package/dist/types/whitelists/subscription-to-chain-id.d.ts.map +1 -1
- package/dist/types/whitelists/types.d.ts +1 -0
- package/dist/types/whitelists/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/validations/evm-op-gas-compensation.js +0 -152
- package/dist/cjs/validations/evm-op-gas-compensation.js.map +0 -1
- package/dist/esm/validations/evm-op-gas-compensation.js +0 -149
- package/dist/esm/validations/evm-op-gas-compensation.js.map +0 -1
- package/dist/types/validations/evm-op-gas-compensation.d.ts +0 -3
- package/dist/types/validations/evm-op-gas-compensation.d.ts.map +0 -1
|
@@ -2,10 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validateSign712MetaMaskActions = validateSign712MetaMaskActions;
|
|
4
4
|
const types_1 = require("../types");
|
|
5
|
-
const
|
|
6
|
-
const evm_1 = require("../whitelists/evm");
|
|
7
|
-
const address_1 = require("../helpers/address");
|
|
8
|
-
const evm_caveats_1 = require("./evm-caveats");
|
|
5
|
+
const evm_sign712_shared_1 = require("./evm-sign712-shared");
|
|
9
6
|
const SIGN712_METAMASK_ALLOWED_ACTIONS = [
|
|
10
7
|
types_1.EvmActionOperation.Budget,
|
|
11
8
|
types_1.EvmActionOperation.Wrap,
|
|
@@ -16,23 +13,28 @@ function validateSign712MetaMaskActions(actions, basePath, realChainId, quoteMod
|
|
|
16
13
|
const violations = [];
|
|
17
14
|
for (let i = 0; i < actions.length; i++) {
|
|
18
15
|
const action = actions[i];
|
|
19
|
-
if (action.type !== types_1.EvmActionKind.
|
|
16
|
+
if (action.type !== types_1.EvmActionKind.Sign712MetaMaskCaveats)
|
|
20
17
|
continue;
|
|
21
18
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
22
19
|
const data = action.data;
|
|
23
|
-
// CRITICAL:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
path: `${actionPath}.data`,
|
|
29
|
-
actual: data,
|
|
30
|
-
});
|
|
20
|
+
// CRITICAL: data structural presence — downstream content checks
|
|
21
|
+
// assume `data.domain` and `data.message` exist.
|
|
22
|
+
const presenceErrors = (0, evm_sign712_shared_1.validateSign712DataPresent)(data, actionPath);
|
|
23
|
+
if (presenceErrors.length > 0) {
|
|
24
|
+
violations.push(...presenceErrors);
|
|
31
25
|
continue;
|
|
32
26
|
}
|
|
33
|
-
violations.push(...validateSign712TransactionCalls(action, actionPath), ...validateSign712AllowedActions(action, actionPath), ...
|
|
27
|
+
violations.push(...validateSign712TransactionCalls(action, actionPath), ...validateSign712AllowedActions(action, actionPath), ...(0, evm_sign712_shared_1.validateSign712Domain)(data, actionPath, realChainId),
|
|
28
|
+
// Delegator: in quote mode we cannot determine the trust source —
|
|
29
|
+
// skip the check entirely. In execution mode the helper compares
|
|
30
|
+
// against `srcChainAuthorityAddress` (which may itself be
|
|
31
|
+
// `undefined` as a defensive check — preserved by passing through).
|
|
32
|
+
...(quoteMode
|
|
33
|
+
? []
|
|
34
|
+
: (0, evm_sign712_shared_1.validateSign712Delegator)(data, actionPath, realChainId, srcChainAuthorityAddress, "srcChainAuthorityAddress")));
|
|
34
35
|
const caveats = (data.message.caveats ?? []);
|
|
35
|
-
|
|
36
|
+
const txCalls = action.details?.transactionCalls ?? [];
|
|
37
|
+
violations.push(...(0, evm_sign712_shared_1.validateSign712Caveats)(caveats, action.actionId, txCalls, actionPath, realChainId, expirationTimestamp));
|
|
36
38
|
}
|
|
37
39
|
return violations;
|
|
38
40
|
}
|
|
@@ -65,83 +67,4 @@ function validateSign712AllowedActions(action, actionPath) {
|
|
|
65
67
|
}
|
|
66
68
|
return violations;
|
|
67
69
|
}
|
|
68
|
-
// CRITICAL: domain.name must be "DelegationManager"
|
|
69
|
-
// CRITICAL: domain.chainId must equal the real chainId
|
|
70
|
-
// CRITICAL: domain.verifyingContract must be in the DelegationManager whitelist
|
|
71
|
-
function validateSign712Domain(data, actionPath, realChainId) {
|
|
72
|
-
const violations = [];
|
|
73
|
-
if (data.domain.name !== "DelegationManager") {
|
|
74
|
-
violations.push({
|
|
75
|
-
code: types_1.ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
76
|
-
message: `Sign712MetaMask domain.name must be "DelegationManager"`,
|
|
77
|
-
path: `${actionPath}.data.domain.name`,
|
|
78
|
-
expected: "DelegationManager",
|
|
79
|
-
actual: data.domain.name,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (data.domain.chainId !== realChainId) {
|
|
83
|
-
violations.push({
|
|
84
|
-
code: types_1.ViolationCode.Sign712MetaMaskChainIdMismatch,
|
|
85
|
-
message: `Sign712MetaMask domain.chainId does not match the real chainId`,
|
|
86
|
-
path: `${actionPath}.data.domain.chainId`,
|
|
87
|
-
expected: realChainId,
|
|
88
|
-
actual: data.domain.chainId,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (data.domain.verifyingContract === undefined ||
|
|
92
|
-
!(0, types_2.isWhitelisted)(evm_1.DELEGATION_MANAGER_CONTRACTS, realChainId, data.domain.verifyingContract)) {
|
|
93
|
-
violations.push({
|
|
94
|
-
code: types_1.ViolationCode.Sign712MetaMaskVerifyingContractNotWhitelisted,
|
|
95
|
-
message: `Sign712MetaMask domain.verifyingContract is not whitelisted`,
|
|
96
|
-
path: `${actionPath}.data.domain.verifyingContract`,
|
|
97
|
-
actual: data.domain.verifyingContract,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return violations;
|
|
101
|
-
}
|
|
102
|
-
// LOW: in execution mode, message.delegator must match srcChainAuthorityAddress
|
|
103
|
-
function validateSign712Delegator(data, actionPath, realChainId, quoteMode, srcChainAuthorityAddress) {
|
|
104
|
-
if (quoteMode)
|
|
105
|
-
return [];
|
|
106
|
-
const delegator = data.message.delegator;
|
|
107
|
-
if (srcChainAuthorityAddress === undefined ||
|
|
108
|
-
delegator === undefined ||
|
|
109
|
-
!(0, address_1.addressEquals)(realChainId, delegator, srcChainAuthorityAddress)) {
|
|
110
|
-
return [{
|
|
111
|
-
code: types_1.ViolationCode.Sign712MetaMaskDelegatorMismatch,
|
|
112
|
-
message: `Sign712MetaMask message.delegator must match srcChainAuthorityAddress`,
|
|
113
|
-
path: `${actionPath}.data.message.delegator`,
|
|
114
|
-
expected: srcChainAuthorityAddress,
|
|
115
|
-
actual: delegator,
|
|
116
|
-
}];
|
|
117
|
-
}
|
|
118
|
-
return [];
|
|
119
|
-
}
|
|
120
|
-
function validateSign712MetaMaskCaveats(caveats, action, actionPath, realChainId, expirationTimestamp) {
|
|
121
|
-
const violations = [];
|
|
122
|
-
const classified = (0, evm_caveats_1.classifyCaveats)(caveats, action.actionId, actionPath, realChainId, violations);
|
|
123
|
-
const txCalls = action.details?.transactionCalls ?? [];
|
|
124
|
-
violations.push(...(0, evm_caveats_1.validateExactExecutionPresence)(classified, txCalls, actionPath));
|
|
125
|
-
(0, evm_caveats_1.validateExactExecutionContent)(classified, txCalls, actionPath, violations);
|
|
126
|
-
// CRITICAL: must have at least one IdEnforcer caveat (replay protection)
|
|
127
|
-
if (!classified.hasIdEnforcer) {
|
|
128
|
-
violations.push({
|
|
129
|
-
code: types_1.ViolationCode.Sign712MetaMaskMissingIdEnforcerCaveat,
|
|
130
|
-
message: `Sign712MetaMask must have an IdEnforcer caveat`,
|
|
131
|
-
path: `${actionPath}.data.message.caveats`,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
// CRITICAL: must have exactly one TimestampEnforcer caveat
|
|
135
|
-
if (classified.timestampCount === 0) {
|
|
136
|
-
violations.push({
|
|
137
|
-
code: types_1.ViolationCode.Sign712MetaMaskMissingTimestampEnforcerCaveat,
|
|
138
|
-
message: `Sign712MetaMask must have a TimestampEnforcer caveat`,
|
|
139
|
-
path: `${actionPath}.data.message.caveats`,
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
if (classified.firstTimestamp) {
|
|
143
|
-
(0, evm_caveats_1.validateTimestampEnforcerValue)(classified.firstTimestamp.caveat, expirationTimestamp, classified.firstTimestamp.index, actionPath, violations);
|
|
144
|
-
}
|
|
145
|
-
return violations;
|
|
146
|
-
}
|
|
147
70
|
//# sourceMappingURL=evm-sign712-metamask.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-sign712-metamask.js","sourceRoot":"","sources":["../../../src/validations/evm-sign712-metamask.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"evm-sign712-metamask.js","sourceRoot":"","sources":["../../../src/validations/evm-sign712-metamask.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSign712DataPresent = validateSign712DataPresent;
|
|
4
|
+
exports.validateSign712Domain = validateSign712Domain;
|
|
5
|
+
exports.validateSign712Delegator = validateSign712Delegator;
|
|
6
|
+
exports.validateSign712Caveats = validateSign712Caveats;
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const types_2 = require("../whitelists/types");
|
|
9
|
+
const evm_1 = require("../whitelists/evm");
|
|
10
|
+
const address_1 = require("../helpers/address");
|
|
11
|
+
const evm_caveats_1 = require("./evm-caveats");
|
|
12
|
+
// Shared content-validators for `Sign712MetaMaskCaveats` /
|
|
13
|
+
// `Sign712MetaMaskCaveatsWithPlaceholders` payloads. Used both in intent-scope
|
|
14
|
+
// and hook-scope.
|
|
15
|
+
// CRITICAL: `data` must be present and contain `domain` and `message`. If this
|
|
16
|
+
// fails, downstream content-validators must not run (they assume `data.domain`
|
|
17
|
+
// and `data.message` exist).
|
|
18
|
+
function validateSign712DataPresent(data, actionPath) {
|
|
19
|
+
if (!data || !data.domain || !data.message) {
|
|
20
|
+
return [{
|
|
21
|
+
code: types_1.ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
22
|
+
message: "Sign712MetaMask data is missing domain or message",
|
|
23
|
+
path: `${actionPath}.data`,
|
|
24
|
+
actual: data,
|
|
25
|
+
}];
|
|
26
|
+
}
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
// CRITICAL: domain.name must be "DelegationManager"
|
|
30
|
+
// CRITICAL: domain.chainId must equal the real chainId
|
|
31
|
+
// CRITICAL: domain.verifyingContract must be in the DelegationManager whitelist
|
|
32
|
+
function validateSign712Domain(data, actionPath, realChainId) {
|
|
33
|
+
const violations = [];
|
|
34
|
+
if (data.domain.name !== "DelegationManager") {
|
|
35
|
+
violations.push({
|
|
36
|
+
code: types_1.ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
37
|
+
message: `Sign712MetaMask domain.name must be "DelegationManager"`,
|
|
38
|
+
path: `${actionPath}.data.domain.name`,
|
|
39
|
+
expected: "DelegationManager",
|
|
40
|
+
actual: data.domain.name,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (data.domain.chainId !== realChainId) {
|
|
44
|
+
violations.push({
|
|
45
|
+
code: types_1.ViolationCode.Sign712MetaMaskChainIdMismatch,
|
|
46
|
+
message: `Sign712MetaMask domain.chainId does not match the real chainId`,
|
|
47
|
+
path: `${actionPath}.data.domain.chainId`,
|
|
48
|
+
expected: realChainId,
|
|
49
|
+
actual: data.domain.chainId,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (data.domain.verifyingContract === undefined
|
|
53
|
+
|| !(0, types_2.isWhitelisted)(evm_1.DELEGATION_MANAGER_CONTRACTS, realChainId, data.domain.verifyingContract)) {
|
|
54
|
+
violations.push({
|
|
55
|
+
code: types_1.ViolationCode.Sign712MetaMaskVerifyingContractNotWhitelisted,
|
|
56
|
+
message: `Sign712MetaMask domain.verifyingContract is not whitelisted`,
|
|
57
|
+
path: `${actionPath}.data.domain.verifyingContract`,
|
|
58
|
+
actual: data.domain.verifyingContract,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return violations;
|
|
62
|
+
}
|
|
63
|
+
// CRITICAL: message.delegator must match the address that requested the
|
|
64
|
+
// delegation. The trust source differs per scope (intent uses the trade's
|
|
65
|
+
// `srcChainAuthorityAddress`, hook uses `hook.from`); the comparison itself is
|
|
66
|
+
// shared. Caller passes `expectedDelegator = undefined` to record the violation
|
|
67
|
+
// without an expected value.
|
|
68
|
+
function validateSign712Delegator(data, actionPath, realChainId, expectedDelegator, expectedSourceLabel) {
|
|
69
|
+
const delegator = data.message.delegator;
|
|
70
|
+
if (expectedDelegator === undefined
|
|
71
|
+
|| delegator === undefined
|
|
72
|
+
|| !(0, address_1.addressEquals)(realChainId, delegator, expectedDelegator)) {
|
|
73
|
+
return [{
|
|
74
|
+
code: types_1.ViolationCode.Sign712MetaMaskDelegatorMismatch,
|
|
75
|
+
message: `Sign712MetaMask message.delegator must match ${expectedSourceLabel}`,
|
|
76
|
+
path: `${actionPath}.data.message.delegator`,
|
|
77
|
+
expected: expectedDelegator,
|
|
78
|
+
actual: delegator,
|
|
79
|
+
}];
|
|
80
|
+
}
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
// CRITICAL: caveats must contain valid IdEnforcer (replay protection),
|
|
84
|
+
// TimestampEnforcer (with correct beforeThreshold), and ExactExecution /
|
|
85
|
+
// ExactExecutionBatch caveats whose content matches `transactionCalls[]`.
|
|
86
|
+
function validateSign712Caveats(caveats, actionId, transactionCalls, actionPath, realChainId, expirationTimestamp) {
|
|
87
|
+
const violations = [];
|
|
88
|
+
const classified = (0, evm_caveats_1.classifyCaveats)(caveats, actionId, actionPath, realChainId, violations);
|
|
89
|
+
violations.push(...(0, evm_caveats_1.validateExactExecutionPresence)(classified, transactionCalls, actionPath));
|
|
90
|
+
(0, evm_caveats_1.validateExactExecutionContent)(classified, transactionCalls, actionPath, violations);
|
|
91
|
+
// CRITICAL: must have at least one IdEnforcer caveat (replay protection)
|
|
92
|
+
if (!classified.hasIdEnforcer) {
|
|
93
|
+
violations.push({
|
|
94
|
+
code: types_1.ViolationCode.Sign712MetaMaskMissingIdEnforcerCaveat,
|
|
95
|
+
message: "Sign712MetaMask must have an IdEnforcer caveat",
|
|
96
|
+
path: `${actionPath}.data.message.caveats`,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// CRITICAL: must have exactly one TimestampEnforcer caveat.
|
|
100
|
+
if (classified.timestampCount !== 1) {
|
|
101
|
+
violations.push({
|
|
102
|
+
code: classified.timestampCount === 0
|
|
103
|
+
? types_1.ViolationCode.Sign712MetaMaskMissingTimestampEnforcerCaveat
|
|
104
|
+
: types_1.ViolationCode.Sign712MetaMaskDuplicateTimestampEnforcerCaveat,
|
|
105
|
+
message: "Sign712MetaMask must have exactly one TimestampEnforcer",
|
|
106
|
+
path: `${actionPath}.data.message.caveats`,
|
|
107
|
+
expected: 1,
|
|
108
|
+
actual: classified.timestampCount,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (classified.firstTimestamp) {
|
|
112
|
+
(0, evm_caveats_1.validateTimestampEnforcerValue)(classified.firstTimestamp.caveat, expirationTimestamp, classified.firstTimestamp.index, actionPath, violations);
|
|
113
|
+
}
|
|
114
|
+
return violations;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=evm-sign712-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-sign712-shared.js","sourceRoot":"","sources":["../../../src/validations/evm-sign712-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSign7702Action = validateSign7702Action;
|
|
3
4
|
exports.validateSign7702Actions = validateSign7702Actions;
|
|
4
5
|
const types_1 = require("../types");
|
|
5
6
|
const types_2 = require("../whitelists/types");
|
|
@@ -7,6 +8,38 @@ const evm_1 = require("../whitelists/evm");
|
|
|
7
8
|
// =============================================
|
|
8
9
|
// Sign7702Authorization constraints
|
|
9
10
|
// =============================================
|
|
11
|
+
// CRITICAL: per-action checks for a `Sign7702Authorization` action.
|
|
12
|
+
// Shared between intent-scope (`validateSign7702Actions`) and hook-scope
|
|
13
|
+
// (`validateHookSign7702Binding`); both wrap this with their scope-specific
|
|
14
|
+
// constraints (intent: position+duplicate; hook: type↔actions binding +
|
|
15
|
+
// `validateHookDelegateOp` for position/count).
|
|
16
|
+
function validateSign7702Action(action, actionPath, realChainId) {
|
|
17
|
+
const violations = [];
|
|
18
|
+
// HIGH: actions[] must contain exactly one element — Delegate
|
|
19
|
+
const ops = action.actions;
|
|
20
|
+
if (ops.length !== 1 || ops[0] !== types_1.EvmActionOperation.Delegate) {
|
|
21
|
+
violations.push({
|
|
22
|
+
code: types_1.ViolationCode.Sign7702ActionsNotSingleDelegate,
|
|
23
|
+
message: `Sign7702Authorization actions must contain exactly [Delegate]`,
|
|
24
|
+
path: `${actionPath}.actions`,
|
|
25
|
+
expected: [types_1.EvmActionOperation.Delegate],
|
|
26
|
+
actual: action.actions,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// CRITICAL: data.contractAddress must be in the whitelist
|
|
30
|
+
const data = action.data;
|
|
31
|
+
const contractAddress = data?.contractAddress;
|
|
32
|
+
if (!contractAddress
|
|
33
|
+
|| !(0, types_2.isWhitelisted)(evm_1.EIP7702_DELEGATION_CONTRACTS, realChainId, contractAddress)) {
|
|
34
|
+
violations.push({
|
|
35
|
+
code: types_1.ViolationCode.Sign7702ContractAddressNotWhitelisted,
|
|
36
|
+
message: `Sign7702Authorization contractAddress is not in the whitelist`,
|
|
37
|
+
path: `${actionPath}.data.contractAddress`,
|
|
38
|
+
actual: contractAddress,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return violations;
|
|
42
|
+
}
|
|
10
43
|
function validateSign7702Actions(actions, basePath, realChainId) {
|
|
11
44
|
const violations = [];
|
|
12
45
|
let sign7702Count = 0;
|
|
@@ -16,28 +49,7 @@ function validateSign7702Actions(actions, basePath, realChainId) {
|
|
|
16
49
|
if (action.type !== types_1.EvmActionKind.Sign7702Authorization)
|
|
17
50
|
continue;
|
|
18
51
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
19
|
-
|
|
20
|
-
if (action.actions.length !== 1 ||
|
|
21
|
-
action.actions[0] !== types_1.EvmActionOperation.Delegate) {
|
|
22
|
-
violations.push({
|
|
23
|
-
code: types_1.ViolationCode.Sign7702ActionsNotSingleDelegate,
|
|
24
|
-
message: `Sign7702Authorization actions must contain exactly [Delegate]`,
|
|
25
|
-
path: `${actionPath}.actions`,
|
|
26
|
-
expected: [types_1.EvmActionOperation.Delegate],
|
|
27
|
-
actual: action.actions,
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
// CRITICAL: data.contractAddress must be in the whitelist
|
|
31
|
-
const data = action.data;
|
|
32
|
-
const contractAddress = data?.contractAddress;
|
|
33
|
-
if (!contractAddress || !(0, types_2.isWhitelisted)(evm_1.EIP7702_DELEGATION_CONTRACTS, realChainId, contractAddress)) {
|
|
34
|
-
violations.push({
|
|
35
|
-
code: types_1.ViolationCode.Sign7702ContractAddressNotWhitelisted,
|
|
36
|
-
message: `Sign7702Authorization contractAddress is not in the whitelist`,
|
|
37
|
-
path: `${actionPath}.data.contractAddress`,
|
|
38
|
-
actual: contractAddress,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
52
|
+
violations.push(...validateSign7702Action(action, actionPath, realChainId));
|
|
41
53
|
// HIGH: at most one Sign7702Authorization per intent
|
|
42
54
|
// Note: only the first duplicate will be reported, subsequent ones will be ignored
|
|
43
55
|
sign7702Count++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-sign7702.js","sourceRoot":"","sources":["../../../src/validations/evm-sign7702.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"evm-sign7702.js","sourceRoot":"","sources":["../../../src/validations/evm-sign7702.ts"],"names":[],"mappings":";;AAsBA,wDAmCC;AAED,0DAiCC;AA5FD,oCASkB;AAClB,+CAAoD;AACpD,2CAAiE;AAEjE,gDAAgD;AAChD,oCAAoC;AACpC,gDAAgD;AAEhD,oEAAoE;AACpE,yEAAyE;AACzE,4EAA4E;AAC5E,wEAAwE;AACxE,gDAAgD;AAChD,SAAgB,sBAAsB,CAClC,MAA0E,EAC1E,UAAkB,EAClB,WAAoB;IAEpB,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,8DAA8D;IAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAmB,CAAC;IACvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,0BAAkB,CAAC,QAAQ,EAAE,CAAC;QAC7D,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,gCAAgC;YACpD,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,GAAG,UAAU,UAAU;YAC7B,QAAQ,EAAE,CAAC,0BAAkB,CAAC,QAAQ,CAAC;YACvC,MAAM,EAAE,MAAM,CAAC,OAAO;SACzB,CAAC,CAAC;IACP,CAAC;IAED,0DAA0D;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAgD,CAAC;IACrE,MAAM,eAAe,GAAG,IAAI,EAAE,eAAe,CAAC;IAC9C,IACI,CAAC,eAAe;WACb,CAAC,IAAA,qBAAa,EAAC,kCAA4B,EAAE,WAAW,EAAE,eAAe,CAAC,EAC/E,CAAC;QACC,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,qBAAa,CAAC,qCAAqC;YACzD,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,GAAG,UAAU,uBAAuB;YAC1C,MAAM,EAAE,eAAe;SAC1B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAgB,uBAAuB,CACnC,OAA4B,EAC5B,QAAgB,EAChB,WAAoB;IAEpB,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAa,CAAC,qBAAqB;YAAE,SAAS;QAElE,MAAM,UAAU,GAAG,GAAG,QAAQ,oBAAoB,CAAC,GAAG,CAAC;QACvD,UAAU,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAE5E,qDAAqD;QACrD,mFAAmF;QACnF,aAAa,EAAE,CAAC;QAChB,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACtB,kBAAkB,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,qBAAa,CAAC,8BAA8B;gBAClD,OAAO,EAAE,kEAAkE,kBAAkB,QAAQ,CAAC,EAAE;gBACxG,IAAI,EAAE,GAAG,UAAU,OAAO;gBAC1B,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,aAAa;aACxB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
|