@debridge-finance/borderless-validation-sdk 0.0.0-dev-dee2389 → 0.0.0-dev-58fb7d3
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 -9
- 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 +11 -16
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +47 -28
- 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 -9
- 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 +11 -16
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +47 -28
- 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 +65 -10
- 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 -1
- 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
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { ViolationCode, EvmActionKind, EvmActionOperation, } from "../types/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import { DELEGATION_MANAGER_CONTRACTS } from "../whitelists/evm/index.js";
|
|
4
|
-
import { addressEquals } from "../helpers/address.js";
|
|
5
|
-
import { classifyCaveats, validateExactExecutionPresence, validateExactExecutionContent, validateTimestampEnforcerValue, } from "./evm-caveats.js";
|
|
2
|
+
import { validateSign712DataPresent, validateSign712Domain, validateSign712Delegator, validateSign712Caveats, } from "./evm-sign712-shared.js";
|
|
6
3
|
const SIGN712_METAMASK_ALLOWED_ACTIONS = [
|
|
7
4
|
EvmActionOperation.Budget,
|
|
8
5
|
EvmActionOperation.Wrap,
|
|
@@ -13,23 +10,28 @@ export function validateSign712MetaMaskActions(actions, basePath, realChainId, q
|
|
|
13
10
|
const violations = [];
|
|
14
11
|
for (let i = 0; i < actions.length; i++) {
|
|
15
12
|
const action = actions[i];
|
|
16
|
-
if (action.type !== EvmActionKind.
|
|
13
|
+
if (action.type !== EvmActionKind.Sign712MetaMaskCaveats)
|
|
17
14
|
continue;
|
|
18
15
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
19
16
|
const data = action.data;
|
|
20
|
-
// CRITICAL:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
path: `${actionPath}.data`,
|
|
26
|
-
actual: data,
|
|
27
|
-
});
|
|
17
|
+
// CRITICAL: data structural presence — downstream content checks
|
|
18
|
+
// assume `data.domain` and `data.message` exist.
|
|
19
|
+
const presenceErrors = validateSign712DataPresent(data, actionPath);
|
|
20
|
+
if (presenceErrors.length > 0) {
|
|
21
|
+
violations.push(...presenceErrors);
|
|
28
22
|
continue;
|
|
29
23
|
}
|
|
30
|
-
violations.push(...validateSign712TransactionCalls(action, actionPath), ...validateSign712AllowedActions(action, actionPath), ...validateSign712Domain(data, actionPath, realChainId),
|
|
24
|
+
violations.push(...validateSign712TransactionCalls(action, actionPath), ...validateSign712AllowedActions(action, actionPath), ...validateSign712Domain(data, actionPath, realChainId),
|
|
25
|
+
// Delegator: in quote mode we cannot determine the trust source —
|
|
26
|
+
// skip the check entirely. In execution mode the helper compares
|
|
27
|
+
// against `srcChainAuthorityAddress` (which may itself be
|
|
28
|
+
// `undefined` as a defensive check — preserved by passing through).
|
|
29
|
+
...(quoteMode
|
|
30
|
+
? []
|
|
31
|
+
: validateSign712Delegator(data, actionPath, realChainId, srcChainAuthorityAddress, "srcChainAuthorityAddress")));
|
|
31
32
|
const caveats = (data.message.caveats ?? []);
|
|
32
|
-
|
|
33
|
+
const txCalls = action.details?.transactionCalls ?? [];
|
|
34
|
+
violations.push(...validateSign712Caveats(caveats, action.actionId, txCalls, actionPath, realChainId, expirationTimestamp));
|
|
33
35
|
}
|
|
34
36
|
return violations;
|
|
35
37
|
}
|
|
@@ -62,83 +64,4 @@ function validateSign712AllowedActions(action, actionPath) {
|
|
|
62
64
|
}
|
|
63
65
|
return violations;
|
|
64
66
|
}
|
|
65
|
-
// CRITICAL: domain.name must be "DelegationManager"
|
|
66
|
-
// CRITICAL: domain.chainId must equal the real chainId
|
|
67
|
-
// CRITICAL: domain.verifyingContract must be in the DelegationManager whitelist
|
|
68
|
-
function validateSign712Domain(data, actionPath, realChainId) {
|
|
69
|
-
const violations = [];
|
|
70
|
-
if (data.domain.name !== "DelegationManager") {
|
|
71
|
-
violations.push({
|
|
72
|
-
code: ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
73
|
-
message: `Sign712MetaMask domain.name must be "DelegationManager"`,
|
|
74
|
-
path: `${actionPath}.data.domain.name`,
|
|
75
|
-
expected: "DelegationManager",
|
|
76
|
-
actual: data.domain.name,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
if (data.domain.chainId !== realChainId) {
|
|
80
|
-
violations.push({
|
|
81
|
-
code: ViolationCode.Sign712MetaMaskChainIdMismatch,
|
|
82
|
-
message: `Sign712MetaMask domain.chainId does not match the real chainId`,
|
|
83
|
-
path: `${actionPath}.data.domain.chainId`,
|
|
84
|
-
expected: realChainId,
|
|
85
|
-
actual: data.domain.chainId,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
if (data.domain.verifyingContract === undefined ||
|
|
89
|
-
!isWhitelisted(DELEGATION_MANAGER_CONTRACTS, realChainId, data.domain.verifyingContract)) {
|
|
90
|
-
violations.push({
|
|
91
|
-
code: ViolationCode.Sign712MetaMaskVerifyingContractNotWhitelisted,
|
|
92
|
-
message: `Sign712MetaMask domain.verifyingContract is not whitelisted`,
|
|
93
|
-
path: `${actionPath}.data.domain.verifyingContract`,
|
|
94
|
-
actual: data.domain.verifyingContract,
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
return violations;
|
|
98
|
-
}
|
|
99
|
-
// LOW: in execution mode, message.delegator must match srcChainAuthorityAddress
|
|
100
|
-
function validateSign712Delegator(data, actionPath, realChainId, quoteMode, srcChainAuthorityAddress) {
|
|
101
|
-
if (quoteMode)
|
|
102
|
-
return [];
|
|
103
|
-
const delegator = data.message.delegator;
|
|
104
|
-
if (srcChainAuthorityAddress === undefined ||
|
|
105
|
-
delegator === undefined ||
|
|
106
|
-
!addressEquals(realChainId, delegator, srcChainAuthorityAddress)) {
|
|
107
|
-
return [{
|
|
108
|
-
code: ViolationCode.Sign712MetaMaskDelegatorMismatch,
|
|
109
|
-
message: `Sign712MetaMask message.delegator must match srcChainAuthorityAddress`,
|
|
110
|
-
path: `${actionPath}.data.message.delegator`,
|
|
111
|
-
expected: srcChainAuthorityAddress,
|
|
112
|
-
actual: delegator,
|
|
113
|
-
}];
|
|
114
|
-
}
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
function validateSign712MetaMaskCaveats(caveats, action, actionPath, realChainId, expirationTimestamp) {
|
|
118
|
-
const violations = [];
|
|
119
|
-
const classified = classifyCaveats(caveats, action.actionId, actionPath, realChainId, violations);
|
|
120
|
-
const txCalls = action.details?.transactionCalls ?? [];
|
|
121
|
-
violations.push(...validateExactExecutionPresence(classified, txCalls, actionPath));
|
|
122
|
-
validateExactExecutionContent(classified, txCalls, actionPath, violations);
|
|
123
|
-
// CRITICAL: must have at least one IdEnforcer caveat (replay protection)
|
|
124
|
-
if (!classified.hasIdEnforcer) {
|
|
125
|
-
violations.push({
|
|
126
|
-
code: ViolationCode.Sign712MetaMaskMissingIdEnforcerCaveat,
|
|
127
|
-
message: `Sign712MetaMask must have an IdEnforcer caveat`,
|
|
128
|
-
path: `${actionPath}.data.message.caveats`,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
// CRITICAL: must have exactly one TimestampEnforcer caveat
|
|
132
|
-
if (classified.timestampCount === 0) {
|
|
133
|
-
violations.push({
|
|
134
|
-
code: ViolationCode.Sign712MetaMaskMissingTimestampEnforcerCaveat,
|
|
135
|
-
message: `Sign712MetaMask must have a TimestampEnforcer caveat`,
|
|
136
|
-
path: `${actionPath}.data.message.caveats`,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
if (classified.firstTimestamp) {
|
|
140
|
-
validateTimestampEnforcerValue(classified.firstTimestamp.caveat, expirationTimestamp, classified.firstTimestamp.index, actionPath, violations);
|
|
141
|
-
}
|
|
142
|
-
return violations;
|
|
143
|
-
}
|
|
144
67
|
//# 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":"AAAA,OAAO,EAEH,aAAa,EAEb,aAAa,EACb,kBAAkB,GAGrB,MAAM,UAAU,CAAC;
|
|
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,110 @@
|
|
|
1
|
+
import { ViolationCode, } from "../types/index.js";
|
|
2
|
+
import { isWhitelisted } from "../whitelists/types.js";
|
|
3
|
+
import { DELEGATION_MANAGER_CONTRACTS } from "../whitelists/evm/index.js";
|
|
4
|
+
import { addressEquals } from "../helpers/address.js";
|
|
5
|
+
import { classifyCaveats, validateExactExecutionPresence, validateExactExecutionContent, validateTimestampEnforcerValue, } from "./evm-caveats.js";
|
|
6
|
+
// Shared content-validators for `Sign712MetaMaskCaveats` /
|
|
7
|
+
// `Sign712MetaMaskCaveatsWithPlaceholders` payloads. Used both in intent-scope
|
|
8
|
+
// and hook-scope.
|
|
9
|
+
// CRITICAL: `data` must be present and contain `domain` and `message`. If this
|
|
10
|
+
// fails, downstream content-validators must not run (they assume `data.domain`
|
|
11
|
+
// and `data.message` exist).
|
|
12
|
+
export function validateSign712DataPresent(data, actionPath) {
|
|
13
|
+
if (!data || !data.domain || !data.message) {
|
|
14
|
+
return [{
|
|
15
|
+
code: ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
16
|
+
message: "Sign712MetaMask data is missing domain or message",
|
|
17
|
+
path: `${actionPath}.data`,
|
|
18
|
+
actual: data,
|
|
19
|
+
}];
|
|
20
|
+
}
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
// CRITICAL: domain.name must be "DelegationManager"
|
|
24
|
+
// CRITICAL: domain.chainId must equal the real chainId
|
|
25
|
+
// CRITICAL: domain.verifyingContract must be in the DelegationManager whitelist
|
|
26
|
+
export function validateSign712Domain(data, actionPath, realChainId) {
|
|
27
|
+
const violations = [];
|
|
28
|
+
if (data.domain.name !== "DelegationManager") {
|
|
29
|
+
violations.push({
|
|
30
|
+
code: ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
|
|
31
|
+
message: `Sign712MetaMask domain.name must be "DelegationManager"`,
|
|
32
|
+
path: `${actionPath}.data.domain.name`,
|
|
33
|
+
expected: "DelegationManager",
|
|
34
|
+
actual: data.domain.name,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
if (data.domain.chainId !== realChainId) {
|
|
38
|
+
violations.push({
|
|
39
|
+
code: ViolationCode.Sign712MetaMaskChainIdMismatch,
|
|
40
|
+
message: `Sign712MetaMask domain.chainId does not match the real chainId`,
|
|
41
|
+
path: `${actionPath}.data.domain.chainId`,
|
|
42
|
+
expected: realChainId,
|
|
43
|
+
actual: data.domain.chainId,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (data.domain.verifyingContract === undefined
|
|
47
|
+
|| !isWhitelisted(DELEGATION_MANAGER_CONTRACTS, realChainId, data.domain.verifyingContract)) {
|
|
48
|
+
violations.push({
|
|
49
|
+
code: ViolationCode.Sign712MetaMaskVerifyingContractNotWhitelisted,
|
|
50
|
+
message: `Sign712MetaMask domain.verifyingContract is not whitelisted`,
|
|
51
|
+
path: `${actionPath}.data.domain.verifyingContract`,
|
|
52
|
+
actual: data.domain.verifyingContract,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return violations;
|
|
56
|
+
}
|
|
57
|
+
// CRITICAL: message.delegator must match the address that requested the
|
|
58
|
+
// delegation. The trust source differs per scope (intent uses the trade's
|
|
59
|
+
// `srcChainAuthorityAddress`, hook uses `hook.from`); the comparison itself is
|
|
60
|
+
// shared. Caller passes `expectedDelegator = undefined` to record the violation
|
|
61
|
+
// without an expected value.
|
|
62
|
+
export function validateSign712Delegator(data, actionPath, realChainId, expectedDelegator, expectedSourceLabel) {
|
|
63
|
+
const delegator = data.message.delegator;
|
|
64
|
+
if (expectedDelegator === undefined
|
|
65
|
+
|| delegator === undefined
|
|
66
|
+
|| !addressEquals(realChainId, delegator, expectedDelegator)) {
|
|
67
|
+
return [{
|
|
68
|
+
code: ViolationCode.Sign712MetaMaskDelegatorMismatch,
|
|
69
|
+
message: `Sign712MetaMask message.delegator must match ${expectedSourceLabel}`,
|
|
70
|
+
path: `${actionPath}.data.message.delegator`,
|
|
71
|
+
expected: expectedDelegator,
|
|
72
|
+
actual: delegator,
|
|
73
|
+
}];
|
|
74
|
+
}
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
// CRITICAL: caveats must contain valid IdEnforcer (replay protection),
|
|
78
|
+
// TimestampEnforcer (with correct beforeThreshold), and ExactExecution /
|
|
79
|
+
// ExactExecutionBatch caveats whose content matches `transactionCalls[]`.
|
|
80
|
+
export function validateSign712Caveats(caveats, actionId, transactionCalls, actionPath, realChainId, expirationTimestamp) {
|
|
81
|
+
const violations = [];
|
|
82
|
+
const classified = classifyCaveats(caveats, actionId, actionPath, realChainId, violations);
|
|
83
|
+
violations.push(...validateExactExecutionPresence(classified, transactionCalls, actionPath));
|
|
84
|
+
validateExactExecutionContent(classified, transactionCalls, actionPath, violations);
|
|
85
|
+
// CRITICAL: must have at least one IdEnforcer caveat (replay protection)
|
|
86
|
+
if (!classified.hasIdEnforcer) {
|
|
87
|
+
violations.push({
|
|
88
|
+
code: ViolationCode.Sign712MetaMaskMissingIdEnforcerCaveat,
|
|
89
|
+
message: "Sign712MetaMask must have an IdEnforcer caveat",
|
|
90
|
+
path: `${actionPath}.data.message.caveats`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// CRITICAL: must have exactly one TimestampEnforcer caveat.
|
|
94
|
+
if (classified.timestampCount !== 1) {
|
|
95
|
+
violations.push({
|
|
96
|
+
code: classified.timestampCount === 0
|
|
97
|
+
? ViolationCode.Sign712MetaMaskMissingTimestampEnforcerCaveat
|
|
98
|
+
: ViolationCode.Sign712MetaMaskDuplicateTimestampEnforcerCaveat,
|
|
99
|
+
message: "Sign712MetaMask must have exactly one TimestampEnforcer",
|
|
100
|
+
path: `${actionPath}.data.message.caveats`,
|
|
101
|
+
expected: 1,
|
|
102
|
+
actual: classified.timestampCount,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (classified.firstTimestamp) {
|
|
106
|
+
validateTimestampEnforcerValue(classified.firstTimestamp.caveat, expirationTimestamp, classified.firstTimestamp.index, actionPath, violations);
|
|
107
|
+
}
|
|
108
|
+
return violations;
|
|
109
|
+
}
|
|
110
|
+
//# 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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"}
|
|
@@ -4,6 +4,38 @@ import { EIP7702_DELEGATION_CONTRACTS } from "../whitelists/evm/index.js";
|
|
|
4
4
|
// =============================================
|
|
5
5
|
// Sign7702Authorization constraints
|
|
6
6
|
// =============================================
|
|
7
|
+
// CRITICAL: per-action checks for a `Sign7702Authorization` action.
|
|
8
|
+
// Shared between intent-scope (`validateSign7702Actions`) and hook-scope
|
|
9
|
+
// (`validateHookSign7702Binding`); both wrap this with their scope-specific
|
|
10
|
+
// constraints (intent: position+duplicate; hook: type↔actions binding +
|
|
11
|
+
// `validateHookDelegateOp` for position/count).
|
|
12
|
+
export function validateSign7702Action(action, actionPath, realChainId) {
|
|
13
|
+
const violations = [];
|
|
14
|
+
// HIGH: actions[] must contain exactly one element — Delegate
|
|
15
|
+
const ops = action.actions;
|
|
16
|
+
if (ops.length !== 1 || ops[0] !== EvmActionOperation.Delegate) {
|
|
17
|
+
violations.push({
|
|
18
|
+
code: ViolationCode.Sign7702ActionsNotSingleDelegate,
|
|
19
|
+
message: `Sign7702Authorization actions must contain exactly [Delegate]`,
|
|
20
|
+
path: `${actionPath}.actions`,
|
|
21
|
+
expected: [EvmActionOperation.Delegate],
|
|
22
|
+
actual: action.actions,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
// CRITICAL: data.contractAddress must be in the whitelist
|
|
26
|
+
const data = action.data;
|
|
27
|
+
const contractAddress = data?.contractAddress;
|
|
28
|
+
if (!contractAddress
|
|
29
|
+
|| !isWhitelisted(EIP7702_DELEGATION_CONTRACTS, realChainId, contractAddress)) {
|
|
30
|
+
violations.push({
|
|
31
|
+
code: ViolationCode.Sign7702ContractAddressNotWhitelisted,
|
|
32
|
+
message: `Sign7702Authorization contractAddress is not in the whitelist`,
|
|
33
|
+
path: `${actionPath}.data.contractAddress`,
|
|
34
|
+
actual: contractAddress,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return violations;
|
|
38
|
+
}
|
|
7
39
|
export function validateSign7702Actions(actions, basePath, realChainId) {
|
|
8
40
|
const violations = [];
|
|
9
41
|
let sign7702Count = 0;
|
|
@@ -13,28 +45,7 @@ export function validateSign7702Actions(actions, basePath, realChainId) {
|
|
|
13
45
|
if (action.type !== EvmActionKind.Sign7702Authorization)
|
|
14
46
|
continue;
|
|
15
47
|
const actionPath = `${basePath}.requiredActions[${i}]`;
|
|
16
|
-
|
|
17
|
-
if (action.actions.length !== 1 ||
|
|
18
|
-
action.actions[0] !== EvmActionOperation.Delegate) {
|
|
19
|
-
violations.push({
|
|
20
|
-
code: ViolationCode.Sign7702ActionsNotSingleDelegate,
|
|
21
|
-
message: `Sign7702Authorization actions must contain exactly [Delegate]`,
|
|
22
|
-
path: `${actionPath}.actions`,
|
|
23
|
-
expected: [EvmActionOperation.Delegate],
|
|
24
|
-
actual: action.actions,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
// CRITICAL: data.contractAddress must be in the whitelist
|
|
28
|
-
const data = action.data;
|
|
29
|
-
const contractAddress = data?.contractAddress;
|
|
30
|
-
if (!contractAddress || !isWhitelisted(EIP7702_DELEGATION_CONTRACTS, realChainId, contractAddress)) {
|
|
31
|
-
violations.push({
|
|
32
|
-
code: ViolationCode.Sign7702ContractAddressNotWhitelisted,
|
|
33
|
-
message: `Sign7702Authorization contractAddress is not in the whitelist`,
|
|
34
|
-
path: `${actionPath}.data.contractAddress`,
|
|
35
|
-
actual: contractAddress,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
48
|
+
violations.push(...validateSign7702Action(action, actionPath, realChainId));
|
|
38
49
|
// HIGH: at most one Sign7702Authorization per intent
|
|
39
50
|
// Note: only the first duplicate will be reported, subsequent ones will be ignored
|
|
40
51
|
sign7702Count++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-sign7702.js","sourceRoot":"","sources":["../../../src/validations/evm-sign7702.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,EAEb,aAAa,EACb,kBAAkB,
|
|
1
|
+
{"version":3,"file":"evm-sign7702.js","sourceRoot":"","sources":["../../../src/validations/evm-sign7702.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,EAEb,aAAa,EACb,kBAAkB,GAIrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE,gDAAgD;AAChD,oCAAoC;AACpC,gDAAgD;AAEhD,oEAAoE;AACpE,yEAAyE;AACzE,4EAA4E;AAC5E,wEAAwE;AACxE,gDAAgD;AAChD,MAAM,UAAU,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,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QAC7D,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,aAAa,CAAC,gCAAgC;YACpD,OAAO,EAAE,+DAA+D;YACxE,IAAI,EAAE,GAAG,UAAU,UAAU;YAC7B,QAAQ,EAAE,CAAC,kBAAkB,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,aAAa,CAAC,4BAA4B,EAAE,WAAW,EAAE,eAAe,CAAC,EAC/E,CAAC;QACC,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,aAAa,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,MAAM,UAAU,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,aAAa,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,aAAa,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"}
|