@debridge-finance/borderless-validation-sdk 0.0.1 → 0.0.3
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 +53 -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-dln-hook-pack.js +87 -0
- package/dist/cjs/helpers/evm-dln-hook-pack.js.map +1 -0
- 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 +27 -13
- package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
- package/dist/cjs/helpers/evm-trade-amounts.js +36 -1
- package/dist/cjs/helpers/evm-trade-amounts.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/hex.js +24 -0
- package/dist/cjs/helpers/hex.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 +51 -2
- package/dist/cjs/types/enums.js.map +1 -1
- package/dist/cjs/types/request.js +36 -3
- package/dist/cjs/types/request.js.map +1 -1
- package/dist/cjs/types/response.js +126 -6
- package/dist/cjs/types/response.js.map +1 -1
- package/dist/cjs/types/validation.js +82 -10
- 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 +13 -10
- 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 +10 -7
- package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
- package/dist/cjs/validations/evm-required-actions.js +7 -9
- 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 +252 -37
- 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 +357 -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 +7 -7
- package/dist/cjs/validations/required-actions.js.map +1 -1
- package/dist/cjs/validations/solana-hook.js +33 -22
- package/dist/cjs/validations/solana-hook.js.map +1 -1
- package/dist/cjs/validations/solana-op-budget.js +56 -18
- package/dist/cjs/validations/solana-op-budget.js.map +1 -1
- package/dist/cjs/validations/solana-op-wrap.js +46 -13
- 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 +139 -1
- package/dist/cjs/validations/trade-grouping.js.map +1 -1
- package/dist/cjs/validations/trades.js +168 -40
- package/dist/cjs/validations/trades.js.map +1 -1
- package/dist/cjs/validator.js +41 -15
- package/dist/cjs/validator.js.map +1 -1
- package/dist/cjs/whitelists/api-endpoints.js +10 -0
- package/dist/cjs/whitelists/api-endpoints.js.map +1 -0
- 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 +48 -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-dln-hook-pack.js +82 -0
- package/dist/esm/helpers/evm-dln-hook-pack.js.map +1 -0
- 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 +27 -13
- package/dist/esm/helpers/evm-intent-id.js.map +1 -1
- package/dist/esm/helpers/evm-trade-amounts.js +36 -1
- package/dist/esm/helpers/evm-trade-amounts.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/hex.js +20 -0
- package/dist/esm/helpers/hex.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 +50 -1
- package/dist/esm/types/enums.js.map +1 -1
- package/dist/esm/types/request.js +37 -4
- package/dist/esm/types/request.js.map +1 -1
- package/dist/esm/types/response.js +126 -6
- package/dist/esm/types/response.js.map +1 -1
- package/dist/esm/types/validation.js +82 -10
- 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 +13 -10
- 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 +10 -7
- package/dist/esm/validations/evm-op-wrap.js.map +1 -1
- package/dist/esm/validations/evm-required-actions.js +7 -9
- 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 +251 -38
- 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 +354 -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 +7 -7
- package/dist/esm/validations/required-actions.js.map +1 -1
- package/dist/esm/validations/solana-hook.js +35 -24
- package/dist/esm/validations/solana-hook.js.map +1 -1
- package/dist/esm/validations/solana-op-budget.js +56 -18
- package/dist/esm/validations/solana-op-budget.js.map +1 -1
- package/dist/esm/validations/solana-op-wrap.js +47 -14
- 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 +139 -1
- package/dist/esm/validations/trade-grouping.js.map +1 -1
- package/dist/esm/validations/trades.js +169 -41
- package/dist/esm/validations/trades.js.map +1 -1
- package/dist/esm/validator.js +41 -15
- package/dist/esm/validator.js.map +1 -1
- package/dist/esm/whitelists/api-endpoints.js +7 -0
- package/dist/esm/whitelists/api-endpoints.js.map +1 -0
- 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 +7 -7
- package/dist/types/helpers/address.d.ts.map +1 -1
- package/dist/types/helpers/evm-dln-hook-pack.d.ts +19 -0
- package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +1 -0
- 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/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/helpers/gas-compensation.d.ts +10 -0
- package/dist/types/helpers/gas-compensation.d.ts.map +1 -0
- package/dist/types/helpers/hex.d.ts +3 -0
- package/dist/types/helpers/hex.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 +39 -1
- package/dist/types/types/enums.d.ts.map +1 -1
- package/dist/types/types/request.d.ts +21 -11
- package/dist/types/types/request.d.ts.map +1 -1
- package/dist/types/types/response.d.ts +1019 -21
- package/dist/types/types/response.d.ts.map +1 -1
- package/dist/types/types/validation.d.ts +74 -11
- 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-budget.d.ts +2 -2
- package/dist/types/validations/evm-op-budget.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-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-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/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 +6 -2
- 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/api-endpoints.d.ts +2 -0
- package/dist/types/whitelists/api-endpoints.d.ts.map +1 -0
- 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 +4 -3
- package/dist/cjs/helpers/constants.js +0 -6
- package/dist/cjs/helpers/constants.js.map +0 -1
- 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/helpers/constants.js +0 -3
- package/dist/esm/helpers/constants.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/helpers/constants.d.ts +0 -2
- package/dist/types/helpers/constants.d.ts.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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { decodeTransferCalldata } from "./evm-calldata.js";
|
|
2
|
+
import { isNativeToken } from "./evm-token.js";
|
|
3
|
+
import { normalizeAddress } from "./address.js";
|
|
4
|
+
// Validates an EVM `{to, data, value}` triplet that is expected to encode a
|
|
5
|
+
// gas-compensation transfer. `groups` are the gas-compensation groups
|
|
6
|
+
// associated with this triplet's source (already filtered to the relevant
|
|
7
|
+
// `(chainId, sender)` pair by the caller).
|
|
8
|
+
//
|
|
9
|
+
// Classification: dispatched on `triplet.data`:
|
|
10
|
+
// - `data === "0x"` → native compensation (data="0x", value > 0,
|
|
11
|
+
// and at least one group must carry a native token).
|
|
12
|
+
// - otherwise → ERC20 compensation (`triplet.to` matches some non-native
|
|
13
|
+
// group's tokenAddress, data is `transfer(...)`, value === "0").
|
|
14
|
+
export function validateEvmGasCompensationTx(triplet, groups, realChainId, basePath, codes) {
|
|
15
|
+
if (triplet.data === "0x") {
|
|
16
|
+
return validateNativeCompensation(triplet, groups, basePath, codes);
|
|
17
|
+
}
|
|
18
|
+
return validateErc20Compensation(triplet, groups, realChainId, basePath, codes);
|
|
19
|
+
}
|
|
20
|
+
function validateNativeCompensation(triplet, groups, basePath, codes) {
|
|
21
|
+
const violations = [];
|
|
22
|
+
// CRITICAL: data="0x" implies native — must have at least one native group.
|
|
23
|
+
const hasNativeGroup = groups.some(g => isNativeToken(g.tokenAddress, g.realChainId));
|
|
24
|
+
if (!hasNativeGroup) {
|
|
25
|
+
violations.push({
|
|
26
|
+
code: codes.dataInvalid,
|
|
27
|
+
message: "data=\"0x\" implies native compensation but no group has a native token",
|
|
28
|
+
path: `${basePath}.data`,
|
|
29
|
+
expected: groups.map(g => g.tokenAddress),
|
|
30
|
+
actual: "0x",
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// HIGH: native compensation value must parse and be > 0.
|
|
34
|
+
violations.push(...validateNativeValue(triplet.value, basePath, codes));
|
|
35
|
+
return violations;
|
|
36
|
+
}
|
|
37
|
+
function validateNativeValue(rawValue, basePath, codes) {
|
|
38
|
+
try {
|
|
39
|
+
if (BigInt(rawValue) <= 0n) {
|
|
40
|
+
return [{
|
|
41
|
+
code: codes.valueInvalid,
|
|
42
|
+
message: "native compensation must have value > 0",
|
|
43
|
+
path: `${basePath}.value`,
|
|
44
|
+
actual: rawValue,
|
|
45
|
+
}];
|
|
46
|
+
}
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return [{
|
|
51
|
+
code: codes.valueInvalid,
|
|
52
|
+
message: "native compensation value is not a valid number",
|
|
53
|
+
path: `${basePath}.value`,
|
|
54
|
+
actual: rawValue,
|
|
55
|
+
details: error,
|
|
56
|
+
}];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function validateErc20Compensation(triplet, groups, realChainId, basePath, codes) {
|
|
60
|
+
const violations = [];
|
|
61
|
+
// CRITICAL: `to` must equal some non-native group's tokenAddress.
|
|
62
|
+
const erc20Groups = groups.filter(g => !isNativeToken(g.tokenAddress, g.realChainId));
|
|
63
|
+
const matches = erc20Groups.some(g => normalizeAddress(g.realChainId, g.tokenAddress)
|
|
64
|
+
=== normalizeAddress(realChainId, triplet.to));
|
|
65
|
+
if (!matches) {
|
|
66
|
+
violations.push({
|
|
67
|
+
code: codes.toMismatch,
|
|
68
|
+
message: "ERC20 compensation `to` does not match any group's tokenAddress",
|
|
69
|
+
path: `${basePath}.to`,
|
|
70
|
+
expected: erc20Groups.map(g => g.tokenAddress),
|
|
71
|
+
actual: triplet.to,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// CRITICAL: data must be a valid ERC20 transfer calldata.
|
|
75
|
+
try {
|
|
76
|
+
decodeTransferCalldata(triplet.data);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
violations.push({
|
|
80
|
+
code: codes.dataInvalid,
|
|
81
|
+
message: "ERC20 compensation data is not a valid transfer calldata",
|
|
82
|
+
path: `${basePath}.data`,
|
|
83
|
+
actual: triplet.data,
|
|
84
|
+
details: error,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// HIGH: ERC20 compensation must have value="0".
|
|
88
|
+
if (triplet.value !== "0") {
|
|
89
|
+
violations.push({
|
|
90
|
+
code: codes.valueInvalid,
|
|
91
|
+
message: "ERC20 compensation must have value=\"0\"",
|
|
92
|
+
path: `${basePath}.value`,
|
|
93
|
+
expected: "0",
|
|
94
|
+
actual: triplet.value,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return violations;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=evm-gas-compensation-tx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-gas-compensation-tx.js","sourceRoot":"","sources":["../../../src/helpers/evm-gas-compensation-tx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAW7C,4EAA4E;AAC5E,sEAAsE;AACtE,0EAA0E;AAC1E,2CAA2C;AAC3C,EAAE;AACF,gDAAgD;AAChD,mEAAmE;AACnE,yDAAyD;AACzD,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,UAAU,4BAA4B,CACxC,OAAoD,EACpD,MAA8B,EAC9B,WAAoB,EACpB,QAAgB,EAChB,KAA+B;IAE/B,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,0BAA0B,CAC/B,OAAoD,EACpD,MAA8B,EAC9B,QAAgB,EAChB,KAA+B;IAE/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,4EAA4E;IAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CACpD,CAAC;IACF,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,OAAO,EACH,yEAAyE;YAC7E,IAAI,EAAE,GAAG,QAAQ,OAAO;YACxB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YACzC,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;IACP,CAAC;IAED,yDAAyD;IACzD,UAAU,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAExE,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CACxB,QAAgB,EAChB,QAAgB,EAChB,KAA+B;IAE/B,IAAI,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,OAAO,CAAC;oBACJ,IAAI,EAAE,KAAK,CAAC,YAAY;oBACxB,OAAO,EAAE,yCAAyC;oBAClD,IAAI,EAAE,GAAG,QAAQ,QAAQ;oBACzB,MAAM,EAAE,QAAQ;iBACnB,CAAC,CAAC;QACP,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC;gBACJ,IAAI,EAAE,KAAK,CAAC,YAAY;gBACxB,OAAO,EAAE,iDAAiD;gBAC1D,IAAI,EAAE,GAAG,QAAQ,QAAQ;gBACzB,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,KAAK;aACjB,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAC9B,OAAoD,EACpD,MAA8B,EAC9B,WAAoB,EACpB,QAAgB,EAChB,KAA+B;IAE/B,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,kEAAkE;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAC7B,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,CACrD,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACjC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YACvC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CACpD,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,OAAO,EACH,iEAAiE;YACrE,IAAI,EAAE,GAAG,QAAQ,KAAK;YACtB,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YAC9C,MAAM,EAAE,OAAO,CAAC,EAAE;SACrB,CAAC,CAAC;IACP,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC;QACD,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,OAAO,EAAE,0DAA0D;YACnE,IAAI,EAAE,GAAG,QAAQ,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,IAAI;YACpB,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;IACP,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,KAAK,CAAC,YAAY;YACxB,OAAO,EAAE,0CAA0C;YACnD,IAAI,EAAE,GAAG,QAAQ,QAAQ;YACzB,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,OAAO,CAAC,KAAK;SACxB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { encodeAbiParameters, keccak256, zeroAddress, zeroHash } from "viem";
|
|
2
2
|
import { SUBMIT_INTENT_ABI_PARAMS } from "./evm-intent-id-abi.js";
|
|
3
|
+
import { addressToHex, addressToHexByValue } from "./address.js";
|
|
4
|
+
import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
|
|
3
5
|
export function computeIntentId(intent) {
|
|
4
6
|
const struct = convertToIntentStruct(intent);
|
|
5
7
|
const encoded = encodeAbiParameters(SUBMIT_INTENT_ABI_PARAMS, [struct]);
|
|
@@ -17,7 +19,7 @@ function convertToIntentStruct(intent) {
|
|
|
17
19
|
intentTimestamp: BigInt(intent.intentTimestamp),
|
|
18
20
|
srcAllowedSender: (intent.srcAllowedSender ?? []),
|
|
19
21
|
executionMetadata: (intent.executionMetadata ?? zeroHash),
|
|
20
|
-
isAnyDlnMetadataAllowed:
|
|
22
|
+
isAnyDlnMetadataAllowed: !intent.dlnMetadata,
|
|
21
23
|
dlnMetadata: (intent.dlnMetadata ?? "0x"),
|
|
22
24
|
externalCallHash: (intent.externalCallHash ?? zeroHash),
|
|
23
25
|
combinedInteractions: "0x",
|
|
@@ -26,14 +28,22 @@ function convertToIntentStruct(intent) {
|
|
|
26
28
|
intentAuthority: intent.intentAuthority,
|
|
27
29
|
};
|
|
28
30
|
}
|
|
31
|
+
// Encodes addresses as raw bytes — non-EVM strings can't be passed as-is.
|
|
29
32
|
function convertAllowedAddresses(details) {
|
|
30
33
|
if (!details)
|
|
31
34
|
return [];
|
|
32
|
-
return details.map(d =>
|
|
33
|
-
|
|
34
|
-
chains
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
return details.map(d => {
|
|
36
|
+
const isAnyChain = d.destinationChainIds === "any";
|
|
37
|
+
const chains = isAnyChain ? [] : d.destinationChainIds;
|
|
38
|
+
// All chains within one entry share the same address family (validated
|
|
39
|
+
// elsewhere), so any chainId in the list resolves the address family
|
|
40
|
+
// identically. For "any" / empty chains, the family is inferred from
|
|
41
|
+
// the address itself.
|
|
42
|
+
const allowedAddress = chains.length > 0
|
|
43
|
+
? addressToHex(resolveChainId(chains[0]) ?? chains[0], d.address)
|
|
44
|
+
: addressToHexByValue(d.address);
|
|
45
|
+
return { allowedAddress, chains, isAnyChain };
|
|
46
|
+
});
|
|
37
47
|
}
|
|
38
48
|
function convertInputTokens(tokens) {
|
|
39
49
|
if (!tokens)
|
|
@@ -55,13 +65,17 @@ function convertGiveTokens(tokens) {
|
|
|
55
65
|
denominator: Number(t.denominator),
|
|
56
66
|
}));
|
|
57
67
|
}
|
|
68
|
+
// Encode addresses as raw bytes — non-EVM strings can't be passed as-is.
|
|
58
69
|
function convertTakeTokens(tokens) {
|
|
59
|
-
return tokens.map(t =>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
return tokens.map(t => {
|
|
71
|
+
const realChainId = resolveChainId(t.takeTokenChainId) ?? t.takeTokenChainId;
|
|
72
|
+
return {
|
|
73
|
+
giveToken: t.fromTokenAddress,
|
|
74
|
+
takeTokenChain: t.takeTokenChainId,
|
|
75
|
+
takeToken: addressToHex(realChainId, t.takeTokenAddress),
|
|
76
|
+
numerator: BigInt(t.numerator),
|
|
77
|
+
denominator: Number(t.denominator),
|
|
78
|
+
};
|
|
79
|
+
});
|
|
66
80
|
}
|
|
67
81
|
//# sourceMappingURL=evm-intent-id.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-intent-id.js","sourceRoot":"","sources":["../../../src/helpers/evm-intent-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAE7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"evm-intent-id.js","sourceRoot":"","sources":["../../../src/helpers/evm-intent-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,13 @@ import { resolveWrappedTokenAddress } from "./evm-token.js";
|
|
|
4
4
|
// Sums srcChainTokenInAmount for trades matching a given token address.
|
|
5
5
|
// Returns skip=true if any matching trade has max/auto amount.
|
|
6
6
|
// Returns violations if any matching trade has an invalid (non-numeric) amount.
|
|
7
|
-
|
|
7
|
+
//
|
|
8
|
+
// When `responseTrades` is provided, trades with `prependOperatingExpenses=true`
|
|
9
|
+
// also contribute `response.trades[i].srcChainTokenIn.approximateOperatingExpense`
|
|
10
|
+
// to the sum. This reflects how the API computes `intent.inputToken[].constraintBudget`
|
|
11
|
+
// (= mutated amount with prepended expense), which is the value used for Wrap.value
|
|
12
|
+
// and Budget approve amount on the same input token.
|
|
13
|
+
export function sumTradeAmounts(trades, tokenAddress, realChainId, responseTrades) {
|
|
8
14
|
let sum = 0n;
|
|
9
15
|
// Resolve native → WETH so Budget for WETH matches trades with native input (and vice versa)
|
|
10
16
|
const resolvedToken = resolveWrappedTokenAddress(tokenAddress, realChainId) ?? tokenAddress;
|
|
@@ -33,7 +39,36 @@ export function sumTradeAmounts(trades, tokenAddress, realChainId) {
|
|
|
33
39
|
}],
|
|
34
40
|
};
|
|
35
41
|
}
|
|
42
|
+
if (responseTrades && (trade.prependOperatingExpenses ?? false)) {
|
|
43
|
+
const expenseResult = parsePrependedExpense(responseTrades, i);
|
|
44
|
+
if (expenseResult.violations)
|
|
45
|
+
return expenseResult;
|
|
46
|
+
sum += expenseResult.value;
|
|
47
|
+
}
|
|
36
48
|
}
|
|
37
49
|
return { sum };
|
|
38
50
|
}
|
|
51
|
+
// Reads response.trades[i].srcChainTokenIn.approximateOperatingExpense as bigint.
|
|
52
|
+
// If responseTrades has no matching index, treat as 0 — the trade-count mismatch
|
|
53
|
+
// is reported by `validateTrades` and we should not add a duplicate violation here.
|
|
54
|
+
function parsePrependedExpense(responseTrades, tradeIndex) {
|
|
55
|
+
const responseTrade = responseTrades[tradeIndex];
|
|
56
|
+
if (!responseTrade)
|
|
57
|
+
return { value: 0n };
|
|
58
|
+
const raw = responseTrade.srcChainTokenIn.approximateOperatingExpense;
|
|
59
|
+
try {
|
|
60
|
+
return { value: BigInt(raw) };
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
return {
|
|
64
|
+
violations: [{
|
|
65
|
+
code: ViolationCode.TradeOperatingExpenseInvalid,
|
|
66
|
+
message: "approximateOperatingExpense is not a valid number",
|
|
67
|
+
path: `response.trades[${tradeIndex}].srcChainTokenIn.approximateOperatingExpense`,
|
|
68
|
+
actual: raw,
|
|
69
|
+
details: e,
|
|
70
|
+
}],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
39
74
|
//# sourceMappingURL=evm-trade-amounts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-trade-amounts.js","sourceRoot":"","sources":["../../../src/helpers/evm-trade-amounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,
|
|
1
|
+
{"version":3,"file":"evm-trade-amounts.js","sourceRoot":"","sources":["../../../src/helpers/evm-trade-amounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,aAAa,EAGb,aAAa,GAEhB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAOzD,wEAAwE;AACxE,+DAA+D;AAC/D,gFAAgF;AAChF,EAAE;AACF,iFAAiF;AACjF,mFAAmF;AACnF,wFAAwF;AACxF,oFAAoF;AACpF,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAC3B,MAAsB,EACtB,YAAoB,EACpB,WAAoB,EACpB,cAA8C;IAE9C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,6FAA6F;IAC7F,MAAM,aAAa,GAAG,0BAA0B,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC;IAC5F,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,KAAK,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC1F,MAAM,oBAAoB,GAAG,gBAAgB,CACzC,WAAW,EAAE,kBAAkB,IAAI,KAAK,CAAC,eAAe,CAC3D,CAAC;QACF,IAAI,oBAAoB,KAAK,UAAU,EAAE,CAAC;YACtC,SAAS;QACb,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,CAAC;QAC3C,IAAI,MAAM,KAAK,aAAa,CAAC,GAAG,IAAI,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACD,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO;gBACH,UAAU,EAAE,CAAC;wBACT,IAAI,EAAE,aAAa,CAAC,kBAAkB;wBACtC,OAAO,EAAE,mDAAmD;wBAC5D,IAAI,EAAE,kBAAkB,CAAC,yBAAyB;wBAClD,MAAM,EAAE,MAAM;qBACjB,CAAC;aACL,CAAC;QACN,CAAC;QAED,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,wBAAwB,IAAI,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,aAAa,GAAG,qBAAqB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC/D,IAAI,aAAa,CAAC,UAAU;gBAAE,OAAO,aAAa,CAAC;YACnD,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC;AAMD,kFAAkF;AAClF,iFAAiF;AACjF,oFAAoF;AACpF,SAAS,qBAAqB,CAC1B,cAA6C,EAC7C,UAAkB;IAElB,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEzC,MAAM,GAAG,GAAG,aAAa,CAAC,eAAe,CAAC,2BAA2B,CAAC;IACtE,IAAI,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO;YACH,UAAU,EAAE,CAAC;oBACT,IAAI,EAAE,aAAa,CAAC,4BAA4B;oBAChD,OAAO,EAAE,mDAAmD;oBAC5D,IAAI,EAAE,mBAAmB,UAAU,+CAA+C;oBAClF,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,CAAC;iBACb,CAAC;SACL,CAAC;IACN,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { normalizeAddress } from "./address.js";
|
|
2
|
+
import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
|
|
3
|
+
// Groups `gasCompensationInfo` entries from request.preHooks by
|
|
4
|
+
// (chainId, tokenAddress, sender). One compensation hook per
|
|
5
|
+
// unique group is expected to be appended to response.preHooks.
|
|
6
|
+
// Groups with an unknown subscription chainId are skipped — they'll surface as
|
|
7
|
+
// `UnknownSubscriptionId` via the trade-grouping pass.
|
|
8
|
+
export function extractGasCompensationGroups(request) {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
const groups = [];
|
|
11
|
+
for (const hook of request.preHooks ?? []) {
|
|
12
|
+
const info = hook.gasCompensationInfo;
|
|
13
|
+
if (!info)
|
|
14
|
+
continue;
|
|
15
|
+
const realChainId = resolveChainId(info.chainId);
|
|
16
|
+
if (realChainId === undefined)
|
|
17
|
+
continue;
|
|
18
|
+
const key = `${realChainId}`
|
|
19
|
+
+ `:${normalizeAddress(realChainId, info.tokenAddress)}`
|
|
20
|
+
+ `:${normalizeAddress(realChainId, info.sender)}`;
|
|
21
|
+
if (seen.has(key))
|
|
22
|
+
continue;
|
|
23
|
+
seen.add(key);
|
|
24
|
+
groups.push({
|
|
25
|
+
chainId: info.chainId,
|
|
26
|
+
realChainId,
|
|
27
|
+
tokenAddress: info.tokenAddress,
|
|
28
|
+
sender: info.sender,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return groups;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=gas-compensation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gas-compensation.js","sourceRoot":"","sources":["../../../src/helpers/gas-compensation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AASxE,gEAAgE;AAChE,6DAA6D;AAC7D,gEAAgE;AAChE,+EAA+E;AAC/E,uDAAuD;AACvD,MAAM,UAAU,4BAA4B,CACxC,OAA8B;IAE9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACtC,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,WAAW,KAAK,SAAS;YAAE,SAAS;QAExC,MAAM,GAAG,GAAG,GAAG,WAAW,EAAE;cACtB,IAAI,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;cACtD,IAAI,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAEvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAE5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,IAAI,CAAC;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW;YACX,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { zeroHash } from "viem";
|
|
2
|
+
// Treats undefined, "0x" and `zeroHash` (`0x000...0`) as the same empty value.
|
|
3
|
+
export function isEmptyHex(value) {
|
|
4
|
+
if (value === undefined)
|
|
5
|
+
return true;
|
|
6
|
+
const normalized = value.toLowerCase();
|
|
7
|
+
return normalized === "0x" || normalized === zeroHash;
|
|
8
|
+
}
|
|
9
|
+
// Case-insensitive comparison of two hex strings, with `undefined` / `0x` /
|
|
10
|
+
// `zeroHash` treated as a single equivalence class. Use whenever an API field
|
|
11
|
+
// can be omitted, empty, or zero-padded interchangeably.
|
|
12
|
+
export function hexEquals(a, b) {
|
|
13
|
+
if (isEmptyHex(a) && isEmptyHex(b))
|
|
14
|
+
return true;
|
|
15
|
+
// If one is `undefined` and the other is not, they are not equal.
|
|
16
|
+
if (a === undefined || b === undefined)
|
|
17
|
+
return false;
|
|
18
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=hex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../src/helpers/hex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,+EAA+E;AAC/E,MAAM,UAAU,UAAU,CAAC,KAAyB;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,yDAAyD;AACzD,MAAM,UAAU,SAAS,CACrB,CAAqB,EACrB,CAAqB;IAErB,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,kEAAkE;IAClE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAErD,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { ChainEngine, PlaceholderType } from "../types/enums.js";
|
|
2
|
+
import { addressEquals, getChainEngine } from "./address.js";
|
|
3
|
+
const MIN_PLACEHOLDER_BYTE_COUNT = 1;
|
|
4
|
+
const MAX_PLACEHOLDER_BYTE_COUNT = 32;
|
|
5
|
+
export const EVM_DEFAULT_PLACEHOLDER_BYTE_COUNT = MAX_PLACEHOLDER_BYTE_COUNT;
|
|
6
|
+
export const SOLANA_DEFAULT_PLACEHOLDER_BYTE_COUNT = 8;
|
|
7
|
+
export var HookMode;
|
|
8
|
+
(function (HookMode) {
|
|
9
|
+
HookMode[HookMode["PreHooks"] = 0] = "PreHooks";
|
|
10
|
+
HookMode[HookMode["PostHooks"] = 1] = "PostHooks";
|
|
11
|
+
})(HookMode || (HookMode = {}));
|
|
12
|
+
export var PlaceholderResolutionErrorReason;
|
|
13
|
+
(function (PlaceholderResolutionErrorReason) {
|
|
14
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["MissingTokenOrAddress"] = 0] = "MissingTokenOrAddress";
|
|
15
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["NegativeAmount"] = 1] = "NegativeAmount";
|
|
16
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["Overflow"] = 2] = "Overflow";
|
|
17
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["InvalidByteCount"] = 3] = "InvalidByteCount";
|
|
18
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["InvalidAdditionalAmount"] = 4] = "InvalidAdditionalAmount";
|
|
19
|
+
PlaceholderResolutionErrorReason[PlaceholderResolutionErrorReason["NoMatchingTradeOrAdditional"] = 5] = "NoMatchingTradeOrAdditional";
|
|
20
|
+
})(PlaceholderResolutionErrorReason || (PlaceholderResolutionErrorReason = {}));
|
|
21
|
+
// Encodes a non-negative integer as a zero-padded hex string (no "0x" prefix),
|
|
22
|
+
// fitting exactly `byteCount` bytes, using the chain engine's endianness.
|
|
23
|
+
// Solana: little-endian. EVM/Tron: big-endian.
|
|
24
|
+
// `byteCount` must be an integer in
|
|
25
|
+
// [MIN_PLACEHOLDER_BYTE_COUNT, MAX_PLACEHOLDER_BYTE_COUNT].
|
|
26
|
+
export function encodePlaceholderAmount(amount, byteCount, engine) {
|
|
27
|
+
if (!isValidByteCount(byteCount)) {
|
|
28
|
+
return { ok: false, reason: PlaceholderResolutionErrorReason.InvalidByteCount };
|
|
29
|
+
}
|
|
30
|
+
if (amount < 0n) {
|
|
31
|
+
return { ok: false, reason: PlaceholderResolutionErrorReason.NegativeAmount };
|
|
32
|
+
}
|
|
33
|
+
const maxValue = (1n << BigInt(byteCount * 8)) - 1n;
|
|
34
|
+
if (amount > maxValue) {
|
|
35
|
+
return { ok: false, reason: PlaceholderResolutionErrorReason.Overflow };
|
|
36
|
+
}
|
|
37
|
+
if (engine === ChainEngine.Solana) { // Use little-endian for Solana
|
|
38
|
+
const bytes = [];
|
|
39
|
+
let value = amount;
|
|
40
|
+
for (let i = 0; i < byteCount; i++) {
|
|
41
|
+
bytes.push((value & 0xffn).toString(16).padStart(2, "0"));
|
|
42
|
+
value >>= 8n;
|
|
43
|
+
}
|
|
44
|
+
return { ok: true, hex: bytes.join("") };
|
|
45
|
+
}
|
|
46
|
+
// Use big-endian (EVM/Tron): simple hex conversion with left-padding.
|
|
47
|
+
return { ok: true, hex: amount.toString(16).padStart(byteCount * 2, "0") };
|
|
48
|
+
}
|
|
49
|
+
function isValidByteCount(byteCount) {
|
|
50
|
+
return Number.isInteger(byteCount)
|
|
51
|
+
&& byteCount >= MIN_PLACEHOLDER_BYTE_COUNT
|
|
52
|
+
&& byteCount <= MAX_PLACEHOLDER_BYTE_COUNT;
|
|
53
|
+
}
|
|
54
|
+
// Sums the trade amount matching the placeholder's (chainId, tokenAddress, address).
|
|
55
|
+
// preHooks: sums trade.srcChainTokenIn.amount across trades where
|
|
56
|
+
// trade.srcChainTokenIn.{chainId,address} and trade.srcChainAuthorityAddress match.
|
|
57
|
+
// postHooks: sums trade.dstChainTokenOut.amount across trades where
|
|
58
|
+
// trade.dstChainTokenOut.{chainId,address} and trade.dstChainTokenOutRecipient match.
|
|
59
|
+
// In quote mode authority/recipient is undefined — such trades are skipped.
|
|
60
|
+
export function computeCumulativeTradeAmount(trades, mode, chainId, tokenAddress, address) {
|
|
61
|
+
let sum = 0n;
|
|
62
|
+
let matchCount = 0;
|
|
63
|
+
for (const trade of trades) {
|
|
64
|
+
const tradeChainId = mode === HookMode.PreHooks
|
|
65
|
+
? trade.srcChainTokenIn.chainId
|
|
66
|
+
: trade.dstChainTokenOut.chainId;
|
|
67
|
+
if (tradeChainId !== chainId)
|
|
68
|
+
continue;
|
|
69
|
+
const tradeAuthority = mode === HookMode.PreHooks
|
|
70
|
+
? trade.srcChainAuthorityAddress
|
|
71
|
+
: trade.dstChainTokenOutRecipient;
|
|
72
|
+
if (tradeAuthority === undefined)
|
|
73
|
+
continue;
|
|
74
|
+
const tradeToken = mode === HookMode.PreHooks
|
|
75
|
+
? trade.srcChainTokenIn.address
|
|
76
|
+
: trade.dstChainTokenOut.address;
|
|
77
|
+
if (!addressEquals(chainId, tradeToken, tokenAddress))
|
|
78
|
+
continue;
|
|
79
|
+
if (!addressEquals(chainId, tradeAuthority, address))
|
|
80
|
+
continue;
|
|
81
|
+
const amount = mode === HookMode.PreHooks
|
|
82
|
+
? trade.srcChainTokenIn.amount
|
|
83
|
+
: trade.dstChainTokenOut.amount;
|
|
84
|
+
sum += BigInt(amount);
|
|
85
|
+
matchCount++;
|
|
86
|
+
}
|
|
87
|
+
return { cumulative: sum, matchCount };
|
|
88
|
+
}
|
|
89
|
+
// Applies eager-placeholder substitution to a hex string (calldata or value).
|
|
90
|
+
// Markers: `{name}` or `{name.N}` (N = byte count).
|
|
91
|
+
// Deferred placeholders are not touched — their markers remain in the output.
|
|
92
|
+
// If any eager placeholder cannot be resolved, its marker is left intact and the
|
|
93
|
+
// error is collected into `errors`; callers decide how to report it.
|
|
94
|
+
export function resolveEagerPlaceholders(data, hookChainId, placeholders, trades, mode) {
|
|
95
|
+
const engine = getChainEngine(hookChainId);
|
|
96
|
+
const defaultByteCount = engine === ChainEngine.Solana
|
|
97
|
+
? SOLANA_DEFAULT_PLACEHOLDER_BYTE_COUNT
|
|
98
|
+
: EVM_DEFAULT_PLACEHOLDER_BYTE_COUNT;
|
|
99
|
+
let result = data;
|
|
100
|
+
const errors = [];
|
|
101
|
+
for (const placeholder of placeholders) {
|
|
102
|
+
if (placeholder.type === PlaceholderType.Deferred)
|
|
103
|
+
continue;
|
|
104
|
+
// Eager placeholder — type is either explicitly 'eager' or undefined (default).
|
|
105
|
+
if (placeholder.tokenAddress === undefined
|
|
106
|
+
|| placeholder.address === undefined) {
|
|
107
|
+
// Zod guards this at the schema level; defensive branch for callers
|
|
108
|
+
// that bypass structural validation.
|
|
109
|
+
errors.push({
|
|
110
|
+
nameVariable: placeholder.nameVariable,
|
|
111
|
+
reason: PlaceholderResolutionErrorReason.MissingTokenOrAddress,
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
let additional = 0n;
|
|
116
|
+
if (placeholder.additionalAmount !== undefined) {
|
|
117
|
+
try {
|
|
118
|
+
additional = BigInt(placeholder.additionalAmount);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
errors.push({
|
|
122
|
+
nameVariable: placeholder.nameVariable,
|
|
123
|
+
reason: PlaceholderResolutionErrorReason.InvalidAdditionalAmount,
|
|
124
|
+
details: error,
|
|
125
|
+
});
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const { cumulative, matchCount } = computeCumulativeTradeAmount(trades, mode, hookChainId, placeholder.tokenAddress, placeholder.address);
|
|
130
|
+
const expectedAmount = cumulative + additional;
|
|
131
|
+
const nameEscaped = escapeRegex(placeholder.nameVariable);
|
|
132
|
+
const markerRegex = new RegExp(`\\{${nameEscaped}(?:\\.(\\d+))?\\}`, "g");
|
|
133
|
+
// MEDIUM: when no trade matches and no `additionalAmount` is supplied,
|
|
134
|
+
// the API rejects the request. Here we are mirroring this logic.
|
|
135
|
+
if (matchCount === 0
|
|
136
|
+
&& placeholder.additionalAmount === undefined
|
|
137
|
+
&& markerRegex.test(result)) {
|
|
138
|
+
errors.push({
|
|
139
|
+
nameVariable: placeholder.nameVariable,
|
|
140
|
+
reason: PlaceholderResolutionErrorReason.NoMatchingTradeOrAdditional,
|
|
141
|
+
});
|
|
142
|
+
// Reset RegExp.lastIndex before the `replace` below.
|
|
143
|
+
markerRegex.lastIndex = 0;
|
|
144
|
+
// Skip substitution — leave marker in `result` so calldata comparison
|
|
145
|
+
// surfaces any mutated value as a separate violation.
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
result = result.replace(markerRegex, (match, byteCountStr) => {
|
|
149
|
+
const byteCount = byteCountStr
|
|
150
|
+
? parseInt(byteCountStr, 10)
|
|
151
|
+
: defaultByteCount;
|
|
152
|
+
const encoded = encodePlaceholderAmount(expectedAmount, byteCount, engine);
|
|
153
|
+
if (!encoded.ok) {
|
|
154
|
+
errors.push({
|
|
155
|
+
nameVariable: placeholder.nameVariable,
|
|
156
|
+
reason: encoded.reason,
|
|
157
|
+
});
|
|
158
|
+
return match;
|
|
159
|
+
}
|
|
160
|
+
return encoded.hex;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return { resolved: result, errors };
|
|
164
|
+
}
|
|
165
|
+
function escapeRegex(s) {
|
|
166
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/helpers/placeholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sets.js","sourceRoot":"","sources":["../../../src/helpers/sets.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAI,CAAiB,EAAE,CAAiB;IAC7D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/dist/esm/types/enums.js
CHANGED
|
@@ -20,18 +20,40 @@ export var ApprovalMode;
|
|
|
20
20
|
ApprovalMode["Approve"] = "approve";
|
|
21
21
|
ApprovalMode["Permit"] = "permit";
|
|
22
22
|
})(ApprovalMode || (ApprovalMode = {}));
|
|
23
|
+
export var BundleHookType;
|
|
24
|
+
(function (BundleHookType) {
|
|
25
|
+
BundleHookType["Delegated"] = "delegated";
|
|
26
|
+
BundleHookType["Direct"] = "direct";
|
|
27
|
+
})(BundleHookType || (BundleHookType = {}));
|
|
28
|
+
export var PlaceholderType;
|
|
29
|
+
(function (PlaceholderType) {
|
|
30
|
+
PlaceholderType["Eager"] = "eager";
|
|
31
|
+
PlaceholderType["Deferred"] = "deferred";
|
|
32
|
+
})(PlaceholderType || (PlaceholderType = {}));
|
|
23
33
|
export var SpecialAmount;
|
|
24
34
|
(function (SpecialAmount) {
|
|
25
35
|
SpecialAmount["Max"] = "max";
|
|
26
36
|
SpecialAmount["Auto"] = "auto";
|
|
27
37
|
})(SpecialAmount || (SpecialAmount = {}));
|
|
38
|
+
export var SpecialChainId;
|
|
39
|
+
(function (SpecialChainId) {
|
|
40
|
+
SpecialChainId["Any"] = "any";
|
|
41
|
+
})(SpecialChainId || (SpecialChainId = {}));
|
|
42
|
+
export var DlnHookType;
|
|
43
|
+
(function (DlnHookType) {
|
|
44
|
+
DlnHookType["SolanaSerializedInstructions"] = "solana_serialized_instructions";
|
|
45
|
+
DlnHookType["EvmTransactionCall"] = "evm_transaction_call";
|
|
46
|
+
DlnHookType["EvmHookV1"] = "evm_hook_data_v1";
|
|
47
|
+
})(DlnHookType || (DlnHookType = {}));
|
|
28
48
|
// --- EVM Action enums ---
|
|
29
49
|
export var EvmActionKind;
|
|
30
50
|
(function (EvmActionKind) {
|
|
31
51
|
EvmActionKind["Transaction"] = "Transaction";
|
|
32
52
|
EvmActionKind["Sign7702Authorization"] = "Sign7702Authorization";
|
|
33
53
|
EvmActionKind["Sign712"] = "Sign712";
|
|
34
|
-
EvmActionKind["
|
|
54
|
+
EvmActionKind["Sign712MetaMaskCaveats"] = "Sign712MetaMask";
|
|
55
|
+
EvmActionKind["Sign712MetaMaskCaveatsWithPlaceholders"] = "Sign712MetaMaskWithPlaceholders";
|
|
56
|
+
EvmActionKind["ProvidePlaceholders"] = "ProvidePlaceholders";
|
|
35
57
|
EvmActionKind["Permit"] = "Permit";
|
|
36
58
|
EvmActionKind["Permit2"] = "Permit2";
|
|
37
59
|
})(EvmActionKind || (EvmActionKind = {}));
|
|
@@ -71,6 +93,33 @@ export var CostItemType;
|
|
|
71
93
|
CostItemType["PARTNER_COST"] = "PARTNER_COST";
|
|
72
94
|
CostItemType["NETWORK_COST"] = "NETWORK_COST";
|
|
73
95
|
})(CostItemType || (CostItemType = {}));
|
|
96
|
+
// --- Cost detail type ---
|
|
97
|
+
// Markers for individual entries in `trades[].costsDetails[]`. Different
|
|
98
|
+
// markers appear for cross-chain vs same-chain trades.
|
|
99
|
+
export var CostDetailType;
|
|
100
|
+
(function (CostDetailType) {
|
|
101
|
+
CostDetailType["PreSwap"] = "PreSwap";
|
|
102
|
+
CostDetailType["PreSwapEstimatedSlippage"] = "PreSwapEstimatedSlippage";
|
|
103
|
+
CostDetailType["DlnProtocolFee"] = "DlnProtocolFee";
|
|
104
|
+
CostDetailType["AffiliateFee"] = "AffiliateFee";
|
|
105
|
+
CostDetailType["TakerMargin"] = "TakerMargin";
|
|
106
|
+
CostDetailType["EstimatedOperatingExpenses"] = "EstimatedOperatingExpenses";
|
|
107
|
+
CostDetailType["AfterSwap"] = "AfterSwap";
|
|
108
|
+
CostDetailType["AfterSwapEstimatedSlippage"] = "AfterSwapEstimatedSlippage";
|
|
109
|
+
CostDetailType["Subsidization"] = "Subsidization";
|
|
110
|
+
CostDetailType["SingleChainSwapEstimatedSlippage"] = "SingleChainSwapEstimatedSlippage";
|
|
111
|
+
CostDetailType["SingleChainSwapProtocolFee"] = "SingleChainSwapProtocolFee";
|
|
112
|
+
CostDetailType["SingleChainSwapAffiliateFee"] = "SingleChainSwapAffiliateFee";
|
|
113
|
+
CostDetailType["Swap"] = "Swap";
|
|
114
|
+
})(CostDetailType || (CostDetailType = {}));
|
|
115
|
+
// --- Chain engines ---
|
|
116
|
+
// Categorizes chains by their VM/address-format family.
|
|
117
|
+
export var ChainEngine;
|
|
118
|
+
(function (ChainEngine) {
|
|
119
|
+
ChainEngine[ChainEngine["EVM"] = 0] = "EVM";
|
|
120
|
+
ChainEngine[ChainEngine["Tron"] = 1] = "Tron";
|
|
121
|
+
ChainEngine[ChainEngine["Solana"] = 2] = "Solana";
|
|
122
|
+
})(ChainEngine || (ChainEngine = {}));
|
|
74
123
|
// --- Chain IDs (real, after resolving from subscriptionId) ---
|
|
75
124
|
export var ChainId;
|
|
76
125
|
(function (ChainId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/types/enums.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAEnB,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACf,kCAAuB,CAAA;IACvB,0BAAe,CAAA;AACnB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED,wBAAwB;AAExB,MAAM,CAAN,IAAY,gBAEX;AAFD,WAAY,gBAAgB;IACxB,qCAAiB,CAAA;AACrB,CAAC,EAFW,gBAAgB,KAAhB,gBAAgB,QAE3B;AAED,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,4CAAuB,CAAA;IACvB,8DAAyC,CAAA;IACzC,kCAAa,CAAA;AACjB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACrB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACjB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,2BAA2B;AAE3B,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/types/enums.ts"],"names":[],"mappings":"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"}
|