@debridge-finance/borderless-validation-sdk 0.0.0-dev-4a73f49 → 0.0.1
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/dist/cjs/helpers/address.js +18 -53
- package/dist/cjs/helpers/address.js.map +1 -1
- package/dist/cjs/helpers/constants.js +6 -0
- package/dist/cjs/helpers/constants.js.map +1 -0
- package/dist/cjs/helpers/evm-action.js +3 -3
- package/dist/cjs/helpers/evm-action.js.map +1 -1
- package/dist/cjs/helpers/evm-intent-id.js +13 -27
- package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
- package/dist/cjs/helpers/evm-trade-amounts.js +1 -36
- package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/cjs/types/enums.js +2 -32
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/request.js +2 -25
- package/dist/cjs/types/request.js.map +1 -1
- package/dist/cjs/types/response.js +5 -125
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +10 -81
- package/dist/cjs/types/validation.js.map +1 -1
- package/dist/cjs/validations/evm-caveats.js +14 -4
- package/dist/cjs/validations/evm-caveats.js.map +1 -1
- package/dist/cjs/validations/evm-op-budget.js +10 -13
- package/dist/cjs/validations/evm-op-budget.js.map +1 -1
- package/dist/cjs/validations/evm-op-gas-compensation.js +152 -0
- package/dist/cjs/validations/evm-op-gas-compensation.js.map +1 -0
- package/dist/cjs/validations/evm-op-hook.js +3 -410
- package/dist/cjs/validations/evm-op-hook.js.map +1 -1
- package/dist/cjs/validations/evm-op-wrap.js +7 -10
- package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +9 -7
- package/dist/cjs/validations/evm-required-actions.js.map +1 -1
- package/dist/cjs/validations/evm-sign712-metamask.js +94 -17
- package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/cjs/validations/evm-sign7702.js +22 -34
- package/dist/cjs/validations/evm-sign7702.js.map +1 -1
- package/dist/cjs/validations/hooks-common.js +37 -252
- package/dist/cjs/validations/hooks-common.js.map +1 -1
- package/dist/cjs/validations/required-actions.js +7 -7
- package/dist/cjs/validations/required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-hook.js +22 -33
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/solana-op-budget.js +18 -56
- package/dist/cjs/validations/solana-op-budget.js.map +1 -1
- package/dist/cjs/validations/solana-op-wrap.js +13 -46
- package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
- package/dist/cjs/validations/solana-required-actions.js +3 -3
- package/dist/cjs/validations/solana-required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-transaction.js +5 -5
- package/dist/cjs/validations/solana-transaction.js.map +1 -1
- package/dist/cjs/validations/trade-grouping.js +1 -139
- package/dist/cjs/validations/trade-grouping.js.map +1 -1
- package/dist/cjs/validations/trades.js +40 -162
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +16 -11
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/environment-config.js +28 -47
- package/dist/cjs/whitelists/environment-config.js.map +1 -1
- package/dist/cjs/whitelists/evm/caveat-enforcers.js +5 -21
- package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -1
- package/dist/cjs/whitelists/evm/delegation-manager.js +2 -7
- package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -1
- package/dist/cjs/whitelists/evm/eip7702-delegation.js +2 -7
- package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -1
- package/dist/cjs/whitelists/evm/index.js +1 -14
- package/dist/cjs/whitelists/evm/index.js.map +1 -1
- package/dist/cjs/whitelists/evm/permit2.js +12 -16
- package/dist/cjs/whitelists/evm/permit2.js.map +1 -1
- package/dist/cjs/whitelists/evm/weth.js +5 -16
- package/dist/cjs/whitelists/evm/weth.js.map +1 -1
- package/dist/cjs/whitelists/solana/intent-signature.js +1 -0
- package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/cjs/whitelists/subscription-to-chain-id.js +0 -10
- package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -1
- package/dist/cjs/whitelists/types.js +3 -13
- package/dist/cjs/whitelists/types.js.map +1 -1
- package/dist/esm/helpers/address.js +17 -48
- package/dist/esm/helpers/address.js.map +1 -1
- package/dist/esm/helpers/constants.js +3 -0
- package/dist/esm/helpers/constants.js.map +1 -0
- package/dist/esm/helpers/evm-action.js +3 -3
- package/dist/esm/helpers/evm-action.js.map +1 -1
- package/dist/esm/helpers/evm-intent-id.js +13 -27
- package/dist/esm/helpers/evm-intent-id.js.map +1 -1
- package/dist/esm/helpers/evm-trade-amounts.js +1 -36
- package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
- package/dist/esm/types/enums.js +1 -31
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/request.js +3 -26
- package/dist/esm/types/request.js.map +1 -1
- package/dist/esm/types/response.js +4 -124
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +10 -81
- package/dist/esm/types/validation.js.map +1 -1
- package/dist/esm/validations/evm-caveats.js +14 -4
- package/dist/esm/validations/evm-caveats.js.map +1 -1
- package/dist/esm/validations/evm-op-budget.js +10 -13
- package/dist/esm/validations/evm-op-budget.js.map +1 -1
- package/dist/esm/validations/evm-op-gas-compensation.js +149 -0
- package/dist/esm/validations/evm-op-gas-compensation.js.map +1 -0
- package/dist/esm/validations/evm-op-hook.js +2 -409
- package/dist/esm/validations/evm-op-hook.js.map +1 -1
- package/dist/esm/validations/evm-op-wrap.js +7 -10
- package/dist/esm/validations/evm-op-wrap.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +9 -7
- package/dist/esm/validations/evm-required-actions.js.map +1 -1
- package/dist/esm/validations/evm-sign712-metamask.js +94 -17
- package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
- package/dist/esm/validations/evm-sign7702.js +22 -33
- package/dist/esm/validations/evm-sign7702.js.map +1 -1
- package/dist/esm/validations/hooks-common.js +38 -251
- package/dist/esm/validations/hooks-common.js.map +1 -1
- package/dist/esm/validations/required-actions.js +7 -7
- package/dist/esm/validations/required-actions.js.map +1 -1
- package/dist/esm/validations/solana-hook.js +24 -35
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/solana-op-budget.js +18 -56
- package/dist/esm/validations/solana-op-budget.js.map +1 -1
- package/dist/esm/validations/solana-op-wrap.js +14 -47
- package/dist/esm/validations/solana-op-wrap.js.map +1 -1
- package/dist/esm/validations/solana-required-actions.js +3 -3
- package/dist/esm/validations/solana-required-actions.js.map +1 -1
- package/dist/esm/validations/solana-transaction.js +7 -7
- package/dist/esm/validations/solana-transaction.js.map +1 -1
- package/dist/esm/validations/trade-grouping.js +1 -139
- package/dist/esm/validations/trade-grouping.js.map +1 -1
- package/dist/esm/validations/trades.js +41 -163
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +16 -11
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/environment-config.js +28 -47
- package/dist/esm/whitelists/environment-config.js.map +1 -1
- package/dist/esm/whitelists/evm/caveat-enforcers.js +4 -20
- package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -1
- package/dist/esm/whitelists/evm/delegation-manager.js +1 -6
- package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -1
- package/dist/esm/whitelists/evm/eip7702-delegation.js +1 -6
- 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/permit2.js +5 -9
- package/dist/esm/whitelists/evm/permit2.js.map +1 -1
- package/dist/esm/whitelists/evm/weth.js +5 -16
- package/dist/esm/whitelists/evm/weth.js.map +1 -1
- package/dist/esm/whitelists/solana/intent-signature.js +1 -0
- package/dist/esm/whitelists/solana/intent-signature.js.map +1 -1
- package/dist/esm/whitelists/subscription-to-chain-id.js +0 -9
- package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -1
- package/dist/esm/whitelists/types.js +5 -14
- package/dist/esm/whitelists/types.js.map +1 -1
- package/dist/types/helpers/address.d.ts +7 -7
- package/dist/types/helpers/address.d.ts.map +1 -1
- package/dist/types/helpers/constants.d.ts +2 -0
- package/dist/types/helpers/constants.d.ts.map +1 -0
- package/dist/types/helpers/evm-intent-id.d.ts.map +1 -1
- package/dist/types/helpers/evm-trade-amounts.d.ts +2 -2
- package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -1
- package/dist/types/types/enums.d.ts +1 -24
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/request.d.ts +9 -19
- package/dist/types/types/request.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +17 -1015
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +11 -73
- package/dist/types/types/validation.d.ts.map +1 -1
- package/dist/types/validations/evm-caveats.d.ts.map +1 -1
- package/dist/types/validations/evm-op-budget.d.ts +2 -2
- package/dist/types/validations/evm-op-budget.d.ts.map +1 -1
- package/dist/types/validations/evm-op-gas-compensation.d.ts +3 -0
- package/dist/types/validations/evm-op-gas-compensation.d.ts.map +1 -0
- package/dist/types/validations/evm-op-hook.d.ts +2 -4
- package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
- package/dist/types/validations/evm-op-wrap.d.ts +2 -2
- package/dist/types/validations/evm-op-wrap.d.ts.map +1 -1
- package/dist/types/validations/evm-required-actions.d.ts +2 -2
- 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-sign7702.d.ts +1 -2
- package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
- package/dist/types/validations/hooks-common.d.ts +0 -1
- package/dist/types/validations/hooks-common.d.ts.map +1 -1
- package/dist/types/validations/required-actions.d.ts +1 -2
- package/dist/types/validations/required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-hook.d.ts +2 -4
- package/dist/types/validations/solana-hook.d.ts.map +1 -1
- package/dist/types/validations/solana-op-budget.d.ts +2 -2
- package/dist/types/validations/solana-op-budget.d.ts.map +1 -1
- package/dist/types/validations/solana-op-wrap.d.ts +2 -2
- package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
- package/dist/types/validations/solana-required-actions.d.ts +2 -2
- package/dist/types/validations/solana-required-actions.d.ts.map +1 -1
- package/dist/types/validations/solana-transaction.d.ts +3 -3
- package/dist/types/validations/solana-transaction.d.ts.map +1 -1
- package/dist/types/validations/trade-grouping.d.ts +2 -6
- package/dist/types/validations/trade-grouping.d.ts.map +1 -1
- package/dist/types/validations/trades.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 +0 -8
- package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -1
- package/dist/types/whitelists/evm/delegation-manager.d.ts +0 -2
- package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -1
- package/dist/types/whitelists/evm/eip7702-delegation.d.ts +0 -2
- 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/permit2.d.ts +0 -1
- 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 +0 -1
- 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 +3 -4
- package/README.md +0 -164
- package/dist/cjs/helpers/evm-dln-hook-pack.js +0 -87
- package/dist/cjs/helpers/evm-dln-hook-pack.js.map +0 -1
- package/dist/cjs/helpers/evm-gas-compensation-tx.js +0 -102
- package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +0 -1
- package/dist/cjs/helpers/gas-compensation.js +0 -36
- package/dist/cjs/helpers/gas-compensation.js.map +0 -1
- package/dist/cjs/helpers/hex.js +0 -24
- package/dist/cjs/helpers/hex.js.map +0 -1
- package/dist/cjs/helpers/placeholder.js +0 -174
- package/dist/cjs/helpers/placeholder.js.map +0 -1
- package/dist/cjs/helpers/sets.js +0 -13
- package/dist/cjs/helpers/sets.js.map +0 -1
- package/dist/cjs/validations/compensation-hook.js +0 -203
- package/dist/cjs/validations/compensation-hook.js.map +0 -1
- package/dist/cjs/validations/evm-sign712-shared.js +0 -116
- package/dist/cjs/validations/evm-sign712-shared.js.map +0 -1
- package/dist/cjs/validations/intent-destinations.js +0 -197
- package/dist/cjs/validations/intent-destinations.js.map +0 -1
- package/dist/cjs/validations/intent-tokens.js +0 -347
- package/dist/cjs/validations/intent-tokens.js.map +0 -1
- package/dist/cjs/validations/intent.js +0 -288
- package/dist/cjs/validations/intent.js.map +0 -1
- package/dist/cjs/whitelists/evm/metamask-delegation-chains.js +0 -16
- package/dist/cjs/whitelists/evm/metamask-delegation-chains.js.map +0 -1
- package/dist/esm/helpers/evm-dln-hook-pack.js +0 -82
- package/dist/esm/helpers/evm-dln-hook-pack.js.map +0 -1
- package/dist/esm/helpers/evm-gas-compensation-tx.js +0 -99
- package/dist/esm/helpers/evm-gas-compensation-tx.js.map +0 -1
- package/dist/esm/helpers/gas-compensation.js +0 -33
- package/dist/esm/helpers/gas-compensation.js.map +0 -1
- package/dist/esm/helpers/hex.js +0 -20
- package/dist/esm/helpers/hex.js.map +0 -1
- package/dist/esm/helpers/placeholder.js +0 -168
- package/dist/esm/helpers/placeholder.js.map +0 -1
- package/dist/esm/helpers/sets.js +0 -10
- package/dist/esm/helpers/sets.js.map +0 -1
- package/dist/esm/validations/compensation-hook.js +0 -200
- package/dist/esm/validations/compensation-hook.js.map +0 -1
- package/dist/esm/validations/evm-sign712-shared.js +0 -110
- package/dist/esm/validations/evm-sign712-shared.js.map +0 -1
- package/dist/esm/validations/intent-destinations.js +0 -194
- package/dist/esm/validations/intent-destinations.js.map +0 -1
- package/dist/esm/validations/intent-tokens.js +0 -344
- package/dist/esm/validations/intent-tokens.js.map +0 -1
- package/dist/esm/validations/intent.js +0 -285
- package/dist/esm/validations/intent.js.map +0 -1
- package/dist/esm/whitelists/evm/metamask-delegation-chains.js +0 -13
- package/dist/esm/whitelists/evm/metamask-delegation-chains.js.map +0 -1
- package/dist/types/helpers/evm-dln-hook-pack.d.ts +0 -19
- package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +0 -1
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts +0 -13
- package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +0 -1
- package/dist/types/helpers/gas-compensation.d.ts +0 -10
- package/dist/types/helpers/gas-compensation.d.ts.map +0 -1
- package/dist/types/helpers/hex.d.ts +0 -3
- package/dist/types/helpers/hex.d.ts.map +0 -1
- package/dist/types/helpers/placeholder.d.ts +0 -41
- package/dist/types/helpers/placeholder.d.ts.map +0 -1
- package/dist/types/helpers/sets.d.ts +0 -2
- package/dist/types/helpers/sets.d.ts.map +0 -1
- package/dist/types/validations/compensation-hook.d.ts +0 -3
- package/dist/types/validations/compensation-hook.d.ts.map +0 -1
- package/dist/types/validations/evm-sign712-shared.d.ts +0 -7
- package/dist/types/validations/evm-sign712-shared.d.ts.map +0 -1
- package/dist/types/validations/intent-destinations.d.ts +0 -4
- package/dist/types/validations/intent-destinations.d.ts.map +0 -1
- package/dist/types/validations/intent-tokens.d.ts +0 -4
- package/dist/types/validations/intent-tokens.d.ts.map +0 -1
- package/dist/types/validations/intent.d.ts +0 -5
- package/dist/types/validations/intent.d.ts.map +0 -1
- package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts +0 -3
- package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts.map +0 -1
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { ViolationCode, BundleHookType, ChainEngine, EvmActionOperation, SolanaActionOperation, } from "../types/index.js";
|
|
2
|
-
import { addressEquals, getChainEngine } from "../helpers/address.js";
|
|
3
|
-
import { extractGasCompensationGroups, } from "../helpers/gas-compensation.js";
|
|
4
|
-
import { validateEvmGasCompensationTx } from "../helpers/evm-gas-compensation-tx.js";
|
|
5
|
-
import { resolveChainIdOrSelf } from "../whitelists/subscription-to-chain-id.js";
|
|
6
|
-
// Validates `response.preHooks[i].hook` for a compensation hook
|
|
7
|
-
// (i.e. `i >= request.preHooks.length`). This is the primary MITM defense for
|
|
8
|
-
// surplus preHooks — `validateHookEcho` cannot help here because there is no
|
|
9
|
-
// matching request entry to compare against.
|
|
10
|
-
export function validateCompensationHookStructure(hookPayload, basePath, request) {
|
|
11
|
-
const hook = hookPayload.hook;
|
|
12
|
-
const hookPath = `${basePath}.hook`;
|
|
13
|
-
// Resolve the hook's subscriptionId into a real chainId once; every
|
|
14
|
-
// chain-aware helper downstream takes real. Fall back to the subscriptionId
|
|
15
|
-
// value for unknown chains.
|
|
16
|
-
const realHookChainId = resolveChainIdOrSelf(hook.chainId);
|
|
17
|
-
const violations = [
|
|
18
|
-
...validateCommonFields(hook, hookPath),
|
|
19
|
-
...validateCompensationRequiredActionsOps(hookPayload, basePath, realHookChainId),
|
|
20
|
-
];
|
|
21
|
-
const allGroups = extractGasCompensationGroups(request);
|
|
22
|
-
const matchingGroups = findGroupsMatchingFrom(hook, realHookChainId, allGroups);
|
|
23
|
-
if (matchingGroups.length === 0) {
|
|
24
|
-
violations.push({
|
|
25
|
-
code: ViolationCode.CompensationHookFromMismatch,
|
|
26
|
-
message: "compensation hook.from does not match any request"
|
|
27
|
-
+ " gasCompensationInfo.sender on the same chain",
|
|
28
|
-
path: `${hookPath}.from`,
|
|
29
|
-
expected: allGroups.map(g => ({ chainId: g.chainId, sender: g.sender })),
|
|
30
|
-
actual: { chainId: hook.chainId, from: hook.from },
|
|
31
|
-
});
|
|
32
|
-
// Without a matching group we cannot meaningfully run chain-specific
|
|
33
|
-
// structural checks (token address comparison, etc.).
|
|
34
|
-
return violations;
|
|
35
|
-
}
|
|
36
|
-
const isSolana = getChainEngine(realHookChainId) === ChainEngine.Solana;
|
|
37
|
-
violations.push(...(isSolana
|
|
38
|
-
? validateSolanaCompensationStructure(hook, matchingGroups, hookPath)
|
|
39
|
-
: validateEvmCompensationStructure(hook, matchingGroups, realHookChainId, hookPath)));
|
|
40
|
-
return violations;
|
|
41
|
-
}
|
|
42
|
-
function validateCommonFields(hook, hookPath) {
|
|
43
|
-
const violations = [];
|
|
44
|
-
// HIGH: compensation hooks always carry empty placeHolders.
|
|
45
|
-
if (hook.placeHolders.length !== 0) {
|
|
46
|
-
violations.push({
|
|
47
|
-
code: ViolationCode.CompensationHookPlaceHoldersNotEmpty,
|
|
48
|
-
message: "compensation hook must have empty placeHolders",
|
|
49
|
-
path: `${hookPath}.placeHolders`,
|
|
50
|
-
expected: [],
|
|
51
|
-
actual: hook.placeHolders,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
// HIGH: API always emits isAtomic=false for compensation hooks.
|
|
55
|
-
if (hook.isAtomic !== false) {
|
|
56
|
-
violations.push({
|
|
57
|
-
code: ViolationCode.CompensationHookIsAtomicInvalid,
|
|
58
|
-
message: "compensation hook must have isAtomic=false",
|
|
59
|
-
path: `${hookPath}.isAtomic`,
|
|
60
|
-
expected: false,
|
|
61
|
-
actual: hook.isAtomic,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
// MEDIUM: API never sets hook.type='direct' for compensation; delegated or
|
|
65
|
-
// omitted is allowed.
|
|
66
|
-
if (hook.type !== undefined && hook.type !== BundleHookType.Delegated) {
|
|
67
|
-
violations.push({
|
|
68
|
-
code: ViolationCode.CompensationHookTypeInvalid,
|
|
69
|
-
message: "compensation hook must have type=delegated (or omitted)",
|
|
70
|
-
path: `${hookPath}.type`,
|
|
71
|
-
expected: BundleHookType.Delegated,
|
|
72
|
-
actual: hook.type,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
return violations;
|
|
76
|
-
}
|
|
77
|
-
function findGroupsMatchingFrom(hook, realHookChainId, groups) {
|
|
78
|
-
return groups.filter(g => g.realChainId === realHookChainId
|
|
79
|
-
&& addressEquals(realHookChainId, g.sender, hook.from));
|
|
80
|
-
}
|
|
81
|
-
// CRITICAL: a compensation hook must emit GasCompensation ops and must not
|
|
82
|
-
// emit Hook ops. `validateHookActionsList` already enforces that each action
|
|
83
|
-
// carries exactly one op from {Hook, GasCompensation}; this rule narrows further.
|
|
84
|
-
function validateCompensationRequiredActionsOps(hookPayload, basePath, realHookChainId) {
|
|
85
|
-
const isSolana = getChainEngine(realHookChainId) === ChainEngine.Solana;
|
|
86
|
-
const hookOp = isSolana
|
|
87
|
-
? SolanaActionOperation.Hook
|
|
88
|
-
: EvmActionOperation.Hook;
|
|
89
|
-
const gasCompensationOp = isSolana
|
|
90
|
-
? SolanaActionOperation.GasCompensation
|
|
91
|
-
: EvmActionOperation.GasCompensation;
|
|
92
|
-
const ops = hookPayload.requiredActions
|
|
93
|
-
.flatMap(a => a.actions);
|
|
94
|
-
const violations = [];
|
|
95
|
-
if (ops.includes(hookOp)) {
|
|
96
|
-
violations.push({
|
|
97
|
-
code: ViolationCode.CompensationHookRequiredActionsInvalid,
|
|
98
|
-
message: "compensation hook requiredActions must not contain"
|
|
99
|
-
+ " the `Hook` operation",
|
|
100
|
-
path: `${basePath}.requiredActions`,
|
|
101
|
-
actual: ops,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
if (!ops.includes(gasCompensationOp)) {
|
|
105
|
-
violations.push({
|
|
106
|
-
code: ViolationCode.CompensationHookRequiredActionsInvalid,
|
|
107
|
-
message: "compensation hook requiredActions must contain at least one"
|
|
108
|
-
+ " `GasCompensation` operation",
|
|
109
|
-
path: `${basePath}.requiredActions`,
|
|
110
|
-
actual: ops,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
return violations;
|
|
114
|
-
}
|
|
115
|
-
// =============================================
|
|
116
|
-
// EVM compensation hook structure
|
|
117
|
-
// =============================================
|
|
118
|
-
function validateEvmCompensationStructure(hook, groups, realHookChainId, hookPath) {
|
|
119
|
-
const violations = [];
|
|
120
|
-
// MEDIUM: API builds EVM compensation hooks without gasCompensationInfo
|
|
121
|
-
// (only Solana compensation hooks carry it for two-pass grouping).
|
|
122
|
-
if (hook.gasCompensationInfo !== undefined) {
|
|
123
|
-
violations.push({
|
|
124
|
-
code: ViolationCode.CompensationHookEvmGasCompensationInfoPresent,
|
|
125
|
-
message: "EVM compensation hook must not include gasCompensationInfo",
|
|
126
|
-
path: `${hookPath}.gasCompensationInfo`,
|
|
127
|
-
actual: hook.gasCompensationInfo,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
// HIGH: `to` is required for EVM hooks.
|
|
131
|
-
if (hook.to === undefined) {
|
|
132
|
-
violations.push({
|
|
133
|
-
code: ViolationCode.CompensationHookEvmToMissing,
|
|
134
|
-
message: "EVM compensation hook must have `to`",
|
|
135
|
-
path: `${hookPath}.to`,
|
|
136
|
-
});
|
|
137
|
-
return violations;
|
|
138
|
-
}
|
|
139
|
-
// Native vs ERC20 classification + value/data form is shared with
|
|
140
|
-
// hook-scope `transactionCalls[0]` validation; the helper handles both.
|
|
141
|
-
violations.push(...validateEvmGasCompensationTx({ to: hook.to, data: hook.data, value: hook.value ?? "0" }, groups, realHookChainId, hookPath, {
|
|
142
|
-
toMismatch: ViolationCode.CompensationHookEvmToMismatch,
|
|
143
|
-
dataInvalid: ViolationCode.CompensationHookEvmDataInvalid,
|
|
144
|
-
valueInvalid: ViolationCode.CompensationHookEvmValueInvalid,
|
|
145
|
-
}));
|
|
146
|
-
return violations;
|
|
147
|
-
}
|
|
148
|
-
// =============================================
|
|
149
|
-
// Solana compensation hook structure
|
|
150
|
-
// =============================================
|
|
151
|
-
function validateSolanaCompensationStructure(hook, groups, hookPath) {
|
|
152
|
-
const violations = [];
|
|
153
|
-
// LOW: API deletes `to` and `value` from Solana hook echoes.
|
|
154
|
-
if (hook.to !== undefined) {
|
|
155
|
-
violations.push({
|
|
156
|
-
code: ViolationCode.CompensationHookSolanaToOrValuePresent,
|
|
157
|
-
message: "Solana compensation hook must not include `to`",
|
|
158
|
-
path: `${hookPath}.to`,
|
|
159
|
-
actual: hook.to,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
if (hook.value !== undefined) {
|
|
163
|
-
violations.push({
|
|
164
|
-
code: ViolationCode.CompensationHookSolanaToOrValuePresent,
|
|
165
|
-
message: "Solana compensation hook must not include `value`",
|
|
166
|
-
path: `${hookPath}.value`,
|
|
167
|
-
actual: hook.value,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
// HIGH: Solana compensation hooks must carry gasCompensationInfo (API uses
|
|
171
|
-
// it for two-pass grouping to include the comp transaction's own cost).
|
|
172
|
-
const info = hook.gasCompensationInfo;
|
|
173
|
-
if (info === undefined) {
|
|
174
|
-
violations.push({
|
|
175
|
-
code: ViolationCode.CompensationHookSolanaGasCompensationInfoMissing,
|
|
176
|
-
message: "Solana compensation hook must include gasCompensationInfo",
|
|
177
|
-
path: `${hookPath}.gasCompensationInfo`,
|
|
178
|
-
});
|
|
179
|
-
return violations;
|
|
180
|
-
}
|
|
181
|
-
// CRITICAL: all three fields must match some request group.
|
|
182
|
-
const matches = groups.some(g => g.chainId === info.chainId
|
|
183
|
-
&& addressEquals(g.realChainId, g.tokenAddress, info.tokenAddress)
|
|
184
|
-
&& addressEquals(g.realChainId, g.sender, info.sender));
|
|
185
|
-
if (!matches) {
|
|
186
|
-
violations.push({
|
|
187
|
-
code: ViolationCode.CompensationHookSolanaGasCompensationInfoMismatch,
|
|
188
|
-
message: "Solana compensation hook.gasCompensationInfo does not match"
|
|
189
|
-
+ " any request group",
|
|
190
|
-
path: `${hookPath}.gasCompensationInfo`,
|
|
191
|
-
expected: groups,
|
|
192
|
-
actual: info,
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
// Note: the compensation transaction's inner bytes (programs, transfer,
|
|
196
|
-
// fee-payer, etc.) are already validated by validateSolanaGasCompensationAction
|
|
197
|
-
// running against the single [GasCompensation] required action in this hook.
|
|
198
|
-
return violations;
|
|
199
|
-
}
|
|
200
|
-
//# sourceMappingURL=compensation-hook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compensation-hook.js","sourceRoot":"","sources":["../../../src/validations/compensation-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,110 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evm-sign712-shared.js","sourceRoot":"","sources":["../../../src/validations/evm-sign712-shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { ViolationCode, SpecialChainId, ChainEngine, } from "../types/index.js";
|
|
2
|
-
import { detectChainEngine, getChainEngine, normalizeAddress, normalizeAddressByValue, } from "../helpers/address.js";
|
|
3
|
-
import { setsEqual } from "../helpers/sets.js";
|
|
4
|
-
import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
|
|
5
|
-
export function validateIntentDestinations(intent, group, basePath, quoteMode) {
|
|
6
|
-
// Safe skip: in quote mode receiverDetails/dstAuthorityAddress contain
|
|
7
|
-
// placeholder values per the API contract
|
|
8
|
-
if (quoteMode)
|
|
9
|
-
return [];
|
|
10
|
-
return [
|
|
11
|
-
...validateDestinationList(intent.receiverDetails, group, trade => trade.dstChainTokenOutRecipient, `${basePath}.receiverDetails`, {
|
|
12
|
-
addressInvalid: ViolationCode.IntentReceiverDetailsAddressInvalid,
|
|
13
|
-
chainIdsMismatch: ViolationCode.IntentReceiverDetailsChainIdsMismatch,
|
|
14
|
-
missing: ViolationCode.IntentReceiverDetailsMissing,
|
|
15
|
-
duplicate: ViolationCode.IntentReceiverDetailsDuplicate,
|
|
16
|
-
addressChainMismatch: ViolationCode.IntentReceiverDetailsAddressChainMismatch,
|
|
17
|
-
}, "receiverDetails"),
|
|
18
|
-
...validateDestinationList(intent.dstAuthorityAddress, group, trade => trade.dstChainAuthorityAddress, `${basePath}.dstAuthorityAddress`, {
|
|
19
|
-
addressInvalid: ViolationCode.IntentDstAuthorityAddressInvalid,
|
|
20
|
-
chainIdsMismatch: ViolationCode.IntentDstAuthorityChainIdsMismatch,
|
|
21
|
-
missing: ViolationCode.IntentDstAuthorityMissing,
|
|
22
|
-
duplicate: ViolationCode.IntentDstAuthorityDuplicate,
|
|
23
|
-
addressChainMismatch: ViolationCode.IntentDstAuthorityAddressChainMismatch,
|
|
24
|
-
}, "dstAuthorityAddress"),
|
|
25
|
-
];
|
|
26
|
-
}
|
|
27
|
-
// CRITICAL: the set of unique addresses in intent.<field>[] must exactly match
|
|
28
|
-
// the set of unique addresses in request.trades[].<pick>, with destinationChainIds
|
|
29
|
-
// containing exactly the chainIds where that address was used.
|
|
30
|
-
function validateDestinationList(details, group, pick, basePath, codes, fieldLabel) {
|
|
31
|
-
const violations = [];
|
|
32
|
-
const list = details ?? [];
|
|
33
|
-
const expected = collectExpectedByAddress(group, pick);
|
|
34
|
-
for (let i = 0; i < list.length; i++) {
|
|
35
|
-
violations.push(...validateAddressChainConsistency(list[i], `${basePath}[${i}]`, codes.addressChainMismatch, fieldLabel));
|
|
36
|
-
}
|
|
37
|
-
const firstOccurrence = buildFirstOccurrence(list, basePath, codes.duplicate, fieldLabel, violations);
|
|
38
|
-
violations.push(...reportMissingAddresses(expected, firstOccurrence, basePath, codes.missing, fieldLabel));
|
|
39
|
-
violations.push(...validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel));
|
|
40
|
-
return violations;
|
|
41
|
-
}
|
|
42
|
-
// Builds address → chainIds map from request trades, mirroring the API's
|
|
43
|
-
// grouping by address.toHexAddress(). Each address gets the full set of
|
|
44
|
-
// chainIds where it was used.
|
|
45
|
-
function collectExpectedByAddress(group, pick) {
|
|
46
|
-
const byAddress = new Map();
|
|
47
|
-
for (const trade of group.trades) {
|
|
48
|
-
const address = pick(trade);
|
|
49
|
-
if (address === undefined)
|
|
50
|
-
continue;
|
|
51
|
-
const dstRealChainId = resolveChainId(trade.dstChainId);
|
|
52
|
-
// Safe skip: unknown dstChainId is reported by validateTrades
|
|
53
|
-
if (dstRealChainId === undefined)
|
|
54
|
-
continue;
|
|
55
|
-
const normalized = normalizeAddress(dstRealChainId, address);
|
|
56
|
-
const existing = byAddress.get(normalized) ?? new Set();
|
|
57
|
-
existing.add(trade.dstChainId);
|
|
58
|
-
byAddress.set(normalized, existing);
|
|
59
|
-
}
|
|
60
|
-
return byAddress;
|
|
61
|
-
}
|
|
62
|
-
// First pass over the response list: detects duplicates and records the
|
|
63
|
-
// first occurrence index per normalized address. Duplicate violations are
|
|
64
|
-
// appended directly to the caller's violations array.
|
|
65
|
-
function buildFirstOccurrence(list, basePath, duplicateCode, fieldLabel, violations) {
|
|
66
|
-
const firstOccurrence = new Map();
|
|
67
|
-
for (let i = 0; i < list.length; i++) {
|
|
68
|
-
const normalized = normalizeAddressByValue(list[i].address);
|
|
69
|
-
const earlier = firstOccurrence.get(normalized);
|
|
70
|
-
if (earlier === undefined) {
|
|
71
|
-
firstOccurrence.set(normalized, i);
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
violations.push({
|
|
75
|
-
code: duplicateCode,
|
|
76
|
-
message: `intent.${fieldLabel}[${i}] duplicates the entry at`
|
|
77
|
-
+ ` index ${earlier} — each address must appear once`,
|
|
78
|
-
path: `${basePath}[${i}].address`,
|
|
79
|
-
actual: normalized,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
return firstOccurrence;
|
|
83
|
-
}
|
|
84
|
-
function reportMissingAddresses(expected, firstOccurrence, basePath, missingCode, fieldLabel) {
|
|
85
|
-
const violations = [];
|
|
86
|
-
for (const address of expected.keys()) {
|
|
87
|
-
if (!firstOccurrence.has(address)) {
|
|
88
|
-
violations.push({
|
|
89
|
-
code: missingCode,
|
|
90
|
-
message: `an expected intent.${fieldLabel}[].address is missing`
|
|
91
|
-
+ ` from the response`,
|
|
92
|
-
path: basePath,
|
|
93
|
-
expected: address,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return violations;
|
|
98
|
-
}
|
|
99
|
-
function validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel) {
|
|
100
|
-
const violations = [];
|
|
101
|
-
// Validate each unique entry (duplicates are already reported above)
|
|
102
|
-
for (const [address, i] of firstOccurrence) {
|
|
103
|
-
const entry = list[i];
|
|
104
|
-
const expectedChainIds = expected.get(address);
|
|
105
|
-
if (expectedChainIds === undefined) {
|
|
106
|
-
violations.push({
|
|
107
|
-
code: codes.addressInvalid,
|
|
108
|
-
message: `intent.${fieldLabel}[].address is not present in`
|
|
109
|
-
+ ` any request trade for this group`,
|
|
110
|
-
path: `${basePath}[${i}].address`,
|
|
111
|
-
expected: Array.from(expected.keys()),
|
|
112
|
-
actual: address,
|
|
113
|
-
});
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
violations.push(...validateEntryChainIds(entry, expectedChainIds, `${basePath}[${i}].destinationChainIds`, codes.chainIdsMismatch, fieldLabel));
|
|
117
|
-
}
|
|
118
|
-
return violations;
|
|
119
|
-
}
|
|
120
|
-
// CRITICAL: destinationChainIds must be exactly the set of chainIds where
|
|
121
|
-
// this address was used in the request. The protocol reserves SpecialChainId.Any
|
|
122
|
-
// but the API does not emit it today, so we reject it for now — support will
|
|
123
|
-
// be added when the API starts producing it.
|
|
124
|
-
function validateEntryChainIds(entry, expectedChainIds, path, code, fieldLabel) {
|
|
125
|
-
if (entry.destinationChainIds === SpecialChainId.Any) {
|
|
126
|
-
return [{
|
|
127
|
-
code,
|
|
128
|
-
message: `intent.${fieldLabel}[].destinationChainIds must be a concrete`
|
|
129
|
-
+ ` list of chainIds. SpecialChainId.Any is reserved by the`
|
|
130
|
-
+ ` protocol but not yet emitted by the API.`,
|
|
131
|
-
path,
|
|
132
|
-
expected: sortChainIds(expectedChainIds),
|
|
133
|
-
actual: entry.destinationChainIds,
|
|
134
|
-
}];
|
|
135
|
-
}
|
|
136
|
-
const actualChainIds = new Set(entry.destinationChainIds);
|
|
137
|
-
if (setsEqual(actualChainIds, expectedChainIds))
|
|
138
|
-
return [];
|
|
139
|
-
return [{
|
|
140
|
-
code,
|
|
141
|
-
message: `intent.${fieldLabel}[].destinationChainIds must contain exactly`
|
|
142
|
-
+ ` the chainIds where this address was used in request`
|
|
143
|
-
+ ` (no missing, no extras)`,
|
|
144
|
-
path,
|
|
145
|
-
expected: sortChainIds(expectedChainIds),
|
|
146
|
-
actual: entry.destinationChainIds,
|
|
147
|
-
}];
|
|
148
|
-
}
|
|
149
|
-
function sortChainIds(set) {
|
|
150
|
-
return Array.from(set).sort((a, b) => a - b);
|
|
151
|
-
}
|
|
152
|
-
// CRITICAL: all chainIds in destinationChainIds (unless set to "any") must
|
|
153
|
-
// share the same address format (engine), and entry.address must be in that format.
|
|
154
|
-
// MITM could otherwise return, e.g., destinationChainIds=[Ethereum, Solana]
|
|
155
|
-
// with an EVM address, which is impossible because one string can't be valid on both.
|
|
156
|
-
function validateAddressChainConsistency(entry, basePath, code, fieldLabel) {
|
|
157
|
-
if (entry.destinationChainIds === SpecialChainId.Any)
|
|
158
|
-
return [];
|
|
159
|
-
const engines = new Set();
|
|
160
|
-
for (const chainId of entry.destinationChainIds) {
|
|
161
|
-
const realChainId = resolveChainId(chainId);
|
|
162
|
-
// Safe skip: unknown dstChainId is reported by validateTrades
|
|
163
|
-
if (realChainId === undefined)
|
|
164
|
-
continue;
|
|
165
|
-
engines.add(getChainEngine(realChainId));
|
|
166
|
-
}
|
|
167
|
-
if (engines.size === 0)
|
|
168
|
-
return [];
|
|
169
|
-
if (engines.size > 1) {
|
|
170
|
-
return [{
|
|
171
|
-
code,
|
|
172
|
-
message: `intent.${fieldLabel}[].destinationChainIds spans multiple`
|
|
173
|
-
+ ` chain engines — a single address cannot be valid across`
|
|
174
|
-
+ ` different engines (EVM / Solana / Tron / etc.)`,
|
|
175
|
-
path: `${basePath}.destinationChainIds`,
|
|
176
|
-
actual: entry.destinationChainIds,
|
|
177
|
-
}];
|
|
178
|
-
}
|
|
179
|
-
const expectedEngine = engines.values().next().value;
|
|
180
|
-
const actualEngine = detectChainEngine(entry.address);
|
|
181
|
-
if (expectedEngine !== actualEngine) {
|
|
182
|
-
return [{
|
|
183
|
-
code,
|
|
184
|
-
message: `intent.${fieldLabel}[].address format (${ChainEngine[actualEngine]})`
|
|
185
|
-
+ ` does not match the chain engine of destinationChainIds`
|
|
186
|
-
+ ` (${ChainEngine[expectedEngine]})`,
|
|
187
|
-
path: `${basePath}.address`,
|
|
188
|
-
expected: { format: ChainEngine[expectedEngine] },
|
|
189
|
-
actual: { address: entry.address, format: ChainEngine[actualEngine] },
|
|
190
|
-
}];
|
|
191
|
-
}
|
|
192
|
-
return [];
|
|
193
|
-
}
|
|
194
|
-
//# sourceMappingURL=intent-destinations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"intent-destinations.js","sourceRoot":"","sources":["../../../src/validations/intent-destinations.ts"],"names":[],"mappings":"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"}
|