@debridge-finance/borderless-validation-sdk 0.0.4 → 0.0.6

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.
Files changed (139) hide show
  1. package/dist/cjs/helpers/evm-action.js +6 -4
  2. package/dist/cjs/helpers/evm-action.js.map +1 -1
  3. package/dist/cjs/helpers/evm-trade-amounts.js +24 -43
  4. package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
  5. package/dist/cjs/helpers/expected-delegate.js +44 -0
  6. package/dist/cjs/helpers/expected-delegate.js.map +1 -0
  7. package/dist/cjs/types/request.js +2 -0
  8. package/dist/cjs/types/request.js.map +1 -1
  9. package/dist/cjs/types/response.js +1 -0
  10. package/dist/cjs/types/response.js.map +1 -1
  11. package/dist/cjs/types/validation.js +35 -0
  12. package/dist/cjs/types/validation.js.map +1 -1
  13. package/dist/cjs/validations/accumulative-token.js +271 -0
  14. package/dist/cjs/validations/accumulative-token.js.map +1 -0
  15. package/dist/cjs/validations/cost-token.js +56 -0
  16. package/dist/cjs/validations/cost-token.js.map +1 -0
  17. package/dist/cjs/validations/evm-op-budget.js +4 -4
  18. package/dist/cjs/validations/evm-op-budget.js.map +1 -1
  19. package/dist/cjs/validations/evm-op-hook.js +60 -4
  20. package/dist/cjs/validations/evm-op-hook.js.map +1 -1
  21. package/dist/cjs/validations/evm-op-wrap.js +4 -4
  22. package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
  23. package/dist/cjs/validations/evm-required-actions.js +9 -4
  24. package/dist/cjs/validations/evm-required-actions.js.map +1 -1
  25. package/dist/cjs/validations/evm-sign712-metamask.js +46 -2
  26. package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
  27. package/dist/cjs/validations/intent-tokens.js +32 -26
  28. package/dist/cjs/validations/intent-tokens.js.map +1 -1
  29. package/dist/cjs/validations/intent.js +44 -10
  30. package/dist/cjs/validations/intent.js.map +1 -1
  31. package/dist/cjs/validations/ptp.js +156 -0
  32. package/dist/cjs/validations/ptp.js.map +1 -0
  33. package/dist/cjs/validations/solana-hook.js +10 -0
  34. package/dist/cjs/validations/solana-hook.js.map +1 -1
  35. package/dist/cjs/validations/solana-op-budget.js +18 -39
  36. package/dist/cjs/validations/solana-op-budget.js.map +1 -1
  37. package/dist/cjs/validations/solana-op-wrap.js +26 -32
  38. package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
  39. package/dist/cjs/validations/solana-transaction.js +29 -4
  40. package/dist/cjs/validations/solana-transaction.js.map +1 -1
  41. package/dist/cjs/validations/total-dst-amount.js +418 -0
  42. package/dist/cjs/validations/total-dst-amount.js.map +1 -0
  43. package/dist/cjs/validations/trade-grouping.js +8 -2
  44. package/dist/cjs/validations/trade-grouping.js.map +1 -1
  45. package/dist/cjs/validations/trades.js +329 -36
  46. package/dist/cjs/validations/trades.js.map +1 -1
  47. package/dist/cjs/validator.js +10 -1
  48. package/dist/cjs/validator.js.map +1 -1
  49. package/dist/cjs/whitelists/environment-config.js +21 -0
  50. package/dist/cjs/whitelists/environment-config.js.map +1 -1
  51. package/dist/cjs/whitelists/types.js.map +1 -1
  52. package/dist/esm/helpers/evm-action.js +6 -4
  53. package/dist/esm/helpers/evm-action.js.map +1 -1
  54. package/dist/esm/helpers/evm-trade-amounts.js +25 -44
  55. package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
  56. package/dist/esm/helpers/expected-delegate.js +39 -0
  57. package/dist/esm/helpers/expected-delegate.js.map +1 -0
  58. package/dist/esm/types/request.js +2 -0
  59. package/dist/esm/types/request.js.map +1 -1
  60. package/dist/esm/types/response.js +1 -0
  61. package/dist/esm/types/response.js.map +1 -1
  62. package/dist/esm/types/validation.js +35 -0
  63. package/dist/esm/types/validation.js.map +1 -1
  64. package/dist/esm/validations/accumulative-token.js +268 -0
  65. package/dist/esm/validations/accumulative-token.js.map +1 -0
  66. package/dist/esm/validations/cost-token.js +53 -0
  67. package/dist/esm/validations/cost-token.js.map +1 -0
  68. package/dist/esm/validations/evm-op-budget.js +4 -4
  69. package/dist/esm/validations/evm-op-budget.js.map +1 -1
  70. package/dist/esm/validations/evm-op-hook.js +60 -4
  71. package/dist/esm/validations/evm-op-hook.js.map +1 -1
  72. package/dist/esm/validations/evm-op-wrap.js +4 -4
  73. package/dist/esm/validations/evm-op-wrap.js.map +1 -1
  74. package/dist/esm/validations/evm-required-actions.js +9 -4
  75. package/dist/esm/validations/evm-required-actions.js.map +1 -1
  76. package/dist/esm/validations/evm-sign712-metamask.js +46 -2
  77. package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
  78. package/dist/esm/validations/intent-tokens.js +33 -27
  79. package/dist/esm/validations/intent-tokens.js.map +1 -1
  80. package/dist/esm/validations/intent.js +44 -10
  81. package/dist/esm/validations/intent.js.map +1 -1
  82. package/dist/esm/validations/ptp.js +153 -0
  83. package/dist/esm/validations/ptp.js.map +1 -0
  84. package/dist/esm/validations/solana-hook.js +11 -1
  85. package/dist/esm/validations/solana-hook.js.map +1 -1
  86. package/dist/esm/validations/solana-op-budget.js +19 -40
  87. package/dist/esm/validations/solana-op-budget.js.map +1 -1
  88. package/dist/esm/validations/solana-op-wrap.js +27 -33
  89. package/dist/esm/validations/solana-op-wrap.js.map +1 -1
  90. package/dist/esm/validations/solana-transaction.js +29 -4
  91. package/dist/esm/validations/solana-transaction.js.map +1 -1
  92. package/dist/esm/validations/total-dst-amount.js +415 -0
  93. package/dist/esm/validations/total-dst-amount.js.map +1 -0
  94. package/dist/esm/validations/trade-grouping.js +8 -2
  95. package/dist/esm/validations/trade-grouping.js.map +1 -1
  96. package/dist/esm/validations/trades.js +329 -36
  97. package/dist/esm/validations/trades.js.map +1 -1
  98. package/dist/esm/validator.js +10 -1
  99. package/dist/esm/validator.js.map +1 -1
  100. package/dist/esm/whitelists/environment-config.js +21 -0
  101. package/dist/esm/whitelists/environment-config.js.map +1 -1
  102. package/dist/esm/whitelists/types.js.map +1 -1
  103. package/dist/types/helpers/evm-action.d.ts.map +1 -1
  104. package/dist/types/helpers/evm-trade-amounts.d.ts +1 -1
  105. package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -1
  106. package/dist/types/helpers/expected-delegate.d.ts +7 -0
  107. package/dist/types/helpers/expected-delegate.d.ts.map +1 -0
  108. package/dist/types/types/request.d.ts +2 -0
  109. package/dist/types/types/request.d.ts.map +1 -1
  110. package/dist/types/types/response.d.ts +1 -0
  111. package/dist/types/types/response.d.ts.map +1 -1
  112. package/dist/types/types/validation.d.ts +31 -0
  113. package/dist/types/types/validation.d.ts.map +1 -1
  114. package/dist/types/validations/accumulative-token.d.ts +3 -0
  115. package/dist/types/validations/accumulative-token.d.ts.map +1 -0
  116. package/dist/types/validations/cost-token.d.ts +3 -0
  117. package/dist/types/validations/cost-token.d.ts.map +1 -0
  118. package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
  119. package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
  120. package/dist/types/validations/evm-sign712-metamask.d.ts +1 -1
  121. package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
  122. package/dist/types/validations/intent-tokens.d.ts.map +1 -1
  123. package/dist/types/validations/intent.d.ts.map +1 -1
  124. package/dist/types/validations/ptp.d.ts +3 -0
  125. package/dist/types/validations/ptp.d.ts.map +1 -0
  126. package/dist/types/validations/solana-hook.d.ts.map +1 -1
  127. package/dist/types/validations/solana-op-budget.d.ts.map +1 -1
  128. package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
  129. package/dist/types/validations/solana-transaction.d.ts.map +1 -1
  130. package/dist/types/validations/total-dst-amount.d.ts +3 -0
  131. package/dist/types/validations/total-dst-amount.d.ts.map +1 -0
  132. package/dist/types/validations/trade-grouping.d.ts +1 -1
  133. package/dist/types/validations/trade-grouping.d.ts.map +1 -1
  134. package/dist/types/validations/trades.d.ts.map +1 -1
  135. package/dist/types/validator.d.ts.map +1 -1
  136. package/dist/types/whitelists/environment-config.d.ts.map +1 -1
  137. package/dist/types/whitelists/types.d.ts +1 -0
  138. package/dist/types/whitelists/types.d.ts.map +1 -1
  139. package/package.json +1 -1
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTotalDstAmount = validateTotalDstAmount;
4
+ const types_1 = require("../types");
5
+ const subscription_to_chain_id_1 = require("../whitelists/subscription-to-chain-id");
6
+ const address_1 = require("../helpers/address");
7
+ // Asset consolidation mode: when `request.totalDstAmount` is set, the API
8
+ // treats `srcChainTokenInAmount` of each trade as an upper bound, walks trades
9
+ // in order, and produces a balancing trade that closes the dst total to
10
+ // `totalDstAmount` exactly. Tail trades after the balancing trade may be
11
+ // dropped from `response.trades[]`. With `allowPartialFill=true` the pipeline
12
+ // may stop short and emit no balancing trade — every kept trade is then taken
13
+ // at the full upper bound. See the `enum TradeRole` invariant for how the
14
+ // balancing trade is identified in each pipeline branch.
15
+ function validateTotalDstAmount(request, response) {
16
+ const requestHasField = request.totalDstAmount !== undefined;
17
+ const responseHasField = response.estimatedTotalDstAmount !== undefined;
18
+ // Neither field is set — request runs in regular mode, nothing to validate.
19
+ if (!requestHasField && !responseHasField)
20
+ return [];
21
+ // CRITICAL: the two fields must appear together
22
+ if (requestHasField !== responseHasField) {
23
+ return [{
24
+ code: types_1.ViolationCode.TotalDstAmountModeMismatch,
25
+ message: "request.totalDstAmount and response.estimatedTotalDstAmount must appear together",
26
+ path: "response.estimatedTotalDstAmount",
27
+ expected: request.totalDstAmount,
28
+ actual: response.estimatedTotalDstAmount,
29
+ }];
30
+ }
31
+ // Both fields are defined here: the two early returns above handle the
32
+ // neither-set and one-sided cases.
33
+ const requestedTotal = request.totalDstAmount;
34
+ const estimatedTotal = response.estimatedTotalDstAmount;
35
+ const formatViolations = validateTotalAmountFormats(requestedTotal, estimatedTotal);
36
+ return [
37
+ ...validateRequestLevelConstraints(request),
38
+ ...formatViolations,
39
+ ...(formatViolations.length === 0
40
+ ? [
41
+ ...validateEstimatedTotal(request, requestedTotal, estimatedTotal),
42
+ ...validateEstimatedVsAccumulative(response, estimatedTotal),
43
+ ...validateEstimatedVsSumOfTradeDstAmounts(response, estimatedTotal),
44
+ ]
45
+ : []),
46
+ ];
47
+ }
48
+ function validateTotalAmountFormats(requestedTotal, estimatedTotal) {
49
+ const violations = [];
50
+ const positiveIntegerPattern = /^[1-9]\d*$/;
51
+ // CRITICAL: API accepts `request.totalDstAmount` only as a positive decimal
52
+ // integer without leading zeroes.
53
+ if (!positiveIntegerPattern.test(requestedTotal)) {
54
+ violations.push({
55
+ code: types_1.ViolationCode.TotalDstAmountInvalid,
56
+ message: "request.totalDstAmount must be a positive integer string"
57
+ + " without leading zeroes",
58
+ path: "request.totalDstAmount",
59
+ expected: positiveIntegerPattern.source,
60
+ actual: requestedTotal,
61
+ });
62
+ }
63
+ // CRITICAL: `response.estimatedTotalDstAmount` represents the same kind of
64
+ // amount as `request.totalDstAmount` and must use the same canonical format.
65
+ if (!positiveIntegerPattern.test(estimatedTotal)) {
66
+ violations.push({
67
+ code: types_1.ViolationCode.TotalDstAmountInvalid,
68
+ message: "response.estimatedTotalDstAmount must be a positive integer"
69
+ + " string without leading zeroes",
70
+ path: "response.estimatedTotalDstAmount",
71
+ expected: positiveIntegerPattern.source,
72
+ actual: estimatedTotal,
73
+ });
74
+ }
75
+ return violations;
76
+ }
77
+ function validateRequestLevelConstraints(request) {
78
+ return [
79
+ ...validateAccountAbstractionRequired(request),
80
+ ...validateRecipientsRequired(request),
81
+ ...validateSingleDestination(request),
82
+ ...validateDstAmountIsAuto(request),
83
+ ...validateAutoSrcIsLast(request),
84
+ ...validateNoDuplicateSpecialSrcAssets(request),
85
+ ];
86
+ }
87
+ function validateAccountAbstractionRequired(request) {
88
+ if (request.enableAccountAbstraction)
89
+ return [];
90
+ // CRITICAL: `enableAccountAbstraction` must be true in asset consolidation mode
91
+ return [{
92
+ code: types_1.ViolationCode.TotalDstAmountAccountAbstractionRequired,
93
+ message: "request.enableAccountAbstraction must be true when request.totalDstAmount is set",
94
+ path: "request.enableAccountAbstraction",
95
+ expected: true,
96
+ actual: request.enableAccountAbstraction,
97
+ }];
98
+ }
99
+ function validateRecipientsRequired(request) {
100
+ const violations = [];
101
+ for (let i = 0; i < request.trades.length; i++) {
102
+ const recipient = request.trades[i].dstChainTokenOutRecipient;
103
+ if (recipient === undefined) {
104
+ // CRITICAL: the API's totalDstAmount bundle validator requires a
105
+ // concrete destination recipient so it can compare destinations.
106
+ violations.push({
107
+ code: types_1.ViolationCode.TotalDstAmountRecipientRequired,
108
+ message: "request.trades[].dstChainTokenOutRecipient is required"
109
+ + " in asset consolidation mode",
110
+ path: `request.trades[${i}].dstChainTokenOutRecipient`,
111
+ expected: "defined",
112
+ actual: recipient,
113
+ });
114
+ }
115
+ }
116
+ return violations;
117
+ }
118
+ function validateSingleDestination(request) {
119
+ if (request.trades.length === 0)
120
+ return [];
121
+ const violations = [];
122
+ const referenceTrade = request.trades[0];
123
+ const referenceRealChainId = (0, subscription_to_chain_id_1.resolveChainId)(referenceTrade.dstChainId);
124
+ for (let i = 1; i < request.trades.length; i++) {
125
+ const trade = request.trades[i];
126
+ violations.push(...checkDestinationMatchesReference(trade, i, referenceTrade, referenceRealChainId));
127
+ }
128
+ return violations;
129
+ }
130
+ function checkDestinationMatchesReference(trade, tradeIndex, referenceTrade, referenceRealChainId) {
131
+ const violations = [];
132
+ const basePath = `request.trades[${tradeIndex}]`;
133
+ // CRITICAL: all trades must share the same destination chain
134
+ if (trade.dstChainId !== referenceTrade.dstChainId) {
135
+ violations.push({
136
+ code: types_1.ViolationCode.TotalDstAmountSingleDestinationMismatch,
137
+ message: "all request.trades[].dstChainId must be equal in asset consolidation mode",
138
+ path: `${basePath}.dstChainId`,
139
+ expected: referenceTrade.dstChainId,
140
+ actual: trade.dstChainId,
141
+ });
142
+ }
143
+ // Safe skip: when dstChainId differs from the `referenceTrade`, the address
144
+ // comparison below is meaningless — address formats and case sensitivity
145
+ // are chain-specific (EVM lowercase vs Solana/Tron case-sensitive), so
146
+ // comparing under the wrong chain would produce nonsense. The chainId
147
+ // mismatch is already reported above as its own Violation.
148
+ if (trade.dstChainId === referenceTrade.dstChainId && referenceRealChainId !== undefined) {
149
+ // CRITICAL: same dst token across trades
150
+ if (!(0, address_1.addressEquals)(referenceRealChainId, referenceTrade.dstChainTokenOut, trade.dstChainTokenOut)) {
151
+ violations.push({
152
+ code: types_1.ViolationCode.TotalDstAmountSingleDestinationMismatch,
153
+ message: "all request.trades[].dstChainTokenOut must be equal in asset consolidation mode",
154
+ path: `${basePath}.dstChainTokenOut`,
155
+ expected: referenceTrade.dstChainTokenOut,
156
+ actual: trade.dstChainTokenOut,
157
+ });
158
+ }
159
+ // CRITICAL: same recipient across trades
160
+ violations.push(...checkRecipientMatches(trade, tradeIndex, referenceTrade, referenceRealChainId));
161
+ }
162
+ return violations;
163
+ }
164
+ function checkRecipientMatches(trade, tradeIndex, referenceTrade, referenceRealChainId) {
165
+ const refRecipient = referenceTrade.dstChainTokenOutRecipient;
166
+ const tradeRecipient = trade.dstChainTokenOutRecipient;
167
+ // Both undefined — simple match.
168
+ if (refRecipient === undefined && tradeRecipient === undefined)
169
+ return [];
170
+ const path = `request.trades[${tradeIndex}].dstChainTokenOutRecipient`;
171
+ const code = types_1.ViolationCode.TotalDstAmountSingleDestinationMismatch;
172
+ // One defined, the other not — Violation regardless of address comparison
173
+ if (refRecipient === undefined || tradeRecipient === undefined) {
174
+ return [{
175
+ code,
176
+ message: "all request.trades[].dstChainTokenOutRecipient must be equal in asset consolidation mode",
177
+ path,
178
+ expected: refRecipient,
179
+ actual: tradeRecipient,
180
+ }];
181
+ }
182
+ if (!(0, address_1.addressEquals)(referenceRealChainId, refRecipient, tradeRecipient)) {
183
+ return [{
184
+ code,
185
+ message: "all request.trades[].dstChainTokenOutRecipient must be equal in asset consolidation mode",
186
+ path,
187
+ expected: refRecipient,
188
+ actual: tradeRecipient,
189
+ }];
190
+ }
191
+ return [];
192
+ }
193
+ function validateDstAmountIsAuto(request) {
194
+ const violations = [];
195
+ for (let i = 0; i < request.trades.length; i++) {
196
+ const amount = request.trades[i].dstChainTokenOutAmount;
197
+ if (amount !== undefined && amount !== types_1.SpecialAmount.Auto) {
198
+ // CRITICAL: all trades must have dstChainTokenOutAmount='auto' in consolidation mode
199
+ violations.push({
200
+ code: types_1.ViolationCode.TotalDstAmountDstAmountMustBeAuto,
201
+ message: "request.trades[].dstChainTokenOutAmount must be 'auto' in asset consolidation mode",
202
+ path: `request.trades[${i}].dstChainTokenOutAmount`,
203
+ expected: types_1.SpecialAmount.Auto,
204
+ actual: amount,
205
+ });
206
+ }
207
+ }
208
+ return violations;
209
+ }
210
+ function validateAutoSrcIsLast(request) {
211
+ const violations = [];
212
+ const lastIndex = request.trades.length - 1;
213
+ for (let i = 0; i < request.trades.length; i++) {
214
+ const isAuto = request.trades[i].srcChainTokenInAmount === types_1.SpecialAmount.Auto;
215
+ if (isAuto && i !== lastIndex) {
216
+ // CRITICAL: 'auto' src amount may appear only on the last trade.
217
+ // No single "expected" concrete value (any non-'auto' value would
218
+ // satisfy the rule); the human-readable explanation is in `message`.
219
+ violations.push({
220
+ code: types_1.ViolationCode.TotalDstAmountAutoSrcMustBeLast,
221
+ message: "request.trades[].srcChainTokenInAmount='auto' is only"
222
+ + " allowed on the last trade in asset consolidation mode",
223
+ path: `request.trades[${i}].srcChainTokenInAmount`,
224
+ actual: types_1.SpecialAmount.Auto,
225
+ });
226
+ }
227
+ }
228
+ return violations;
229
+ }
230
+ function validateNoDuplicateSpecialSrcAssets(request) {
231
+ const violations = [];
232
+ const seen = new Map();
233
+ for (let i = 0; i < request.trades.length; i++) {
234
+ const trade = request.trades[i];
235
+ const realSrcChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.srcChainId);
236
+ // Safe skip: an unknown `srcChainId` is already reported as
237
+ // UnknownSubscriptionId by `groupTrades` / `validateSingleTrade`.
238
+ if (realSrcChainId === undefined)
239
+ continue;
240
+ const isSpecial = trade.srcChainTokenInAmount === types_1.SpecialAmount.Max
241
+ || trade.srcChainTokenInAmount === types_1.SpecialAmount.Auto;
242
+ const key = `${trade.srcChainId}:${(0, address_1.normalizeAddress)(realSrcChainId, trade.srcChainTokenIn)}`;
243
+ const existing = seen.get(key);
244
+ if (existing !== undefined && (isSpecial || existing.isSpecial)) {
245
+ const existingTrade = request.trades[existing.index];
246
+ // CRITICAL: only one trade per (`srcChainId`, `srcChainTokenIn`)
247
+ // when either uses 'max' or 'auto'.
248
+ violations.push({
249
+ code: types_1.ViolationCode.TotalDstAmountDuplicateSpecialSrcAsset,
250
+ message: "duplicate (srcChainId, srcChainTokenIn) is only allowed"
251
+ + " when both trades use a fixed amount in asset"
252
+ + " consolidation mode",
253
+ path: "request.trades",
254
+ actual: {
255
+ existing: {
256
+ index: existing.index,
257
+ srcChainId: existingTrade.srcChainId,
258
+ srcChainTokenIn: existingTrade.srcChainTokenIn,
259
+ srcChainTokenInAmount: existingTrade.srcChainTokenInAmount,
260
+ },
261
+ duplicate: {
262
+ index: i,
263
+ srcChainId: trade.srcChainId,
264
+ srcChainTokenIn: trade.srcChainTokenIn,
265
+ srcChainTokenInAmount: trade.srcChainTokenInAmount,
266
+ },
267
+ },
268
+ });
269
+ }
270
+ seen.set(key, { index: i, isSpecial });
271
+ }
272
+ return violations;
273
+ }
274
+ function validateEstimatedTotal(request, requestedTotal, estimatedTotal) {
275
+ let parsedEstimated;
276
+ let parsedRequested;
277
+ try {
278
+ parsedEstimated = BigInt(estimatedTotal);
279
+ parsedRequested = BigInt(requestedTotal);
280
+ }
281
+ catch (error) {
282
+ return [{
283
+ code: types_1.ViolationCode.TotalDstAmountEstimatedExceedsRequested,
284
+ message: "failed to parse request.totalDstAmount / response.estimatedTotalDstAmount as BigInt",
285
+ path: "response.estimatedTotalDstAmount",
286
+ expected: undefined,
287
+ actual: {
288
+ "request.totalDstAmount": requestedTotal,
289
+ "response.estimatedTotalDstAmount": estimatedTotal,
290
+ },
291
+ details: error,
292
+ }];
293
+ }
294
+ // CRITICAL: estimated must be strictly positive
295
+ if (parsedEstimated <= 0n) {
296
+ return [{
297
+ code: types_1.ViolationCode.TotalDstAmountEstimatedNonPositive,
298
+ message: "response.estimatedTotalDstAmount must be strictly positive",
299
+ path: "response.estimatedTotalDstAmount",
300
+ expected: "> 0",
301
+ actual: estimatedTotal,
302
+ }];
303
+ }
304
+ // CRITICAL: estimated must equal requested in strict mode (default), or
305
+ // be <= requested when `allowPartialFill=true`.
306
+ const allowPartial = request.allowPartialFill === true;
307
+ if (allowPartial) {
308
+ if (parsedEstimated > parsedRequested) {
309
+ return [{
310
+ code: types_1.ViolationCode.TotalDstAmountEstimatedExceedsRequested,
311
+ message: "response.estimatedTotalDstAmount must be <= request.totalDstAmount (allowPartialFill=true)",
312
+ path: "response.estimatedTotalDstAmount",
313
+ expected: `<= ${requestedTotal}`,
314
+ actual: estimatedTotal,
315
+ }];
316
+ }
317
+ return [];
318
+ }
319
+ // CRITICAL: in strict mode (`allowPartialFill=false` / default), the API
320
+ // must collect exactly `totalDstAmount` — otherwise it should return an
321
+ // error before producing a response.
322
+ if (parsedEstimated !== parsedRequested) {
323
+ return [{
324
+ code: types_1.ViolationCode.TotalDstAmountEstimatedExceedsRequested,
325
+ message: "response.estimatedTotalDstAmount must equal request.totalDstAmount (allowPartialFill=false)",
326
+ path: "response.estimatedTotalDstAmount",
327
+ expected: requestedTotal,
328
+ actual: estimatedTotal,
329
+ }];
330
+ }
331
+ return [];
332
+ }
333
+ function validateEstimatedVsAccumulative(response, estimatedTotal) {
334
+ // Safe skip: an empty / multi-element `accumulativeTokenOutput` is already
335
+ // reported by `validateAccumulativeTokens` (counts and group recomputation).
336
+ // We only run this sanity check when there is exactly one element, which
337
+ // is the expected shape for asset consolidation mode (all trades share the
338
+ // same dst token / chain / recipient — enforced by `validateSingleDestination`
339
+ // above for the request side, and by the accumulative-token grouping for
340
+ // the response side).
341
+ if (response.accumulativeTokenOutput.length !== 1)
342
+ return [];
343
+ const accumulativeAmount = response.accumulativeTokenOutput[0].amount;
344
+ let parsedEstimated;
345
+ let parsedAccumulative;
346
+ try {
347
+ parsedEstimated = BigInt(estimatedTotal);
348
+ parsedAccumulative = BigInt(accumulativeAmount);
349
+ }
350
+ catch (error) {
351
+ return [{
352
+ code: types_1.ViolationCode.TotalDstAmountVsAccumulativeMismatch,
353
+ message: "failed to parse response.estimatedTotalDstAmount / accumulativeTokenOutput[0].amount as BigInt",
354
+ path: "response.estimatedTotalDstAmount",
355
+ expected: undefined,
356
+ actual: {
357
+ "response.estimatedTotalDstAmount": estimatedTotal,
358
+ "response.accumulativeTokenOutput[0].amount": accumulativeAmount,
359
+ },
360
+ details: error,
361
+ }];
362
+ }
363
+ // CRITICAL: `estimatedTotalDstAmount` must equal `accumulativeTokenOutput[0].amount`
364
+ if (parsedEstimated !== parsedAccumulative) {
365
+ return [{
366
+ code: types_1.ViolationCode.TotalDstAmountVsAccumulativeMismatch,
367
+ message: "response.estimatedTotalDstAmount must equal response.accumulativeTokenOutput[0].amount",
368
+ path: "response.estimatedTotalDstAmount",
369
+ expected: accumulativeAmount,
370
+ actual: estimatedTotal,
371
+ }];
372
+ }
373
+ return [];
374
+ }
375
+ // CRITICAL: direct invariant of the consolidation mode — the destination
376
+ // total the user receives is the sum of per-trade dst amounts. Independent
377
+ // from the `accumulativeTokenOutput` sanity above: an attacker who reconciled
378
+ // `estimatedTotalDstAmount` with `accumulativeTokenOutput[0].amount` would
379
+ // still need to reconcile each per-trade `dstChainTokenOut.amount` to pass
380
+ // this check — and per-trade amounts are pinned by the API pipeline
381
+ // (remaining `dst` needed to reach `totalDstAmount` on balancing, `dst` computed
382
+ // from `src` on non-balancing).
383
+ function validateEstimatedVsSumOfTradeDstAmounts(response, estimatedTotal) {
384
+ let sum = 0n;
385
+ for (let i = 0; i < response.trades.length; i++) {
386
+ const tradeAmount = response.trades[i].dstChainTokenOut.amount;
387
+ try {
388
+ sum += BigInt(tradeAmount);
389
+ }
390
+ catch (error) {
391
+ // Safe skip: invalid per-trade `dst.amount` is already reported by
392
+ // `validateTrades` (`dst.amount` parse rules).
393
+ void error;
394
+ return [];
395
+ }
396
+ }
397
+ let parsedEstimated;
398
+ try {
399
+ parsedEstimated = BigInt(estimatedTotal);
400
+ }
401
+ catch {
402
+ // Safe skip: invalid `estimatedTotalDstAmount` is reported by
403
+ // `validateEstimatedTotal` above.
404
+ return [];
405
+ }
406
+ if (parsedEstimated !== sum) {
407
+ return [{
408
+ code: types_1.ViolationCode.TotalDstAmountSumDstMismatch,
409
+ message: "response.estimatedTotalDstAmount must equal the sum of"
410
+ + " response.trades[].dstChainTokenOut.amount",
411
+ path: "response.estimatedTotalDstAmount",
412
+ expected: sum.toString(),
413
+ actual: estimatedTotal,
414
+ }];
415
+ }
416
+ return [];
417
+ }
418
+ //# sourceMappingURL=total-dst-amount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"total-dst-amount.js","sourceRoot":"","sources":["../../../src/validations/total-dst-amount.ts"],"names":[],"mappings":"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"}
@@ -18,12 +18,18 @@ const hex_1 = require("../helpers/hex");
18
18
  // fields like intent.executionMetadata, intent.dlnMetadata,
19
19
  // intent.externalCallHash, etc. that are not present in the request, so one
20
20
  // group can correspond to one or more response intents.
21
- function groupTrades(trades, responseTrades, quoteMode) {
21
+ function groupTrades(trades, responseTrades, quoteMode, consolidationMode = false) {
22
22
  const map = new Map();
23
23
  const violations = [];
24
24
  // Track already-reported unknown subscriptionIds to avoid duplicate violations
25
25
  const reportedUnknown = new Set();
26
- for (let i = 0; i < trades.length; i++) {
26
+ // In asset-consolidation mode the API may legally drop only the request
27
+ // tail after the target is covered. Downstream intent/action validators
28
+ // must model the final API bundle, which is built from this kept prefix.
29
+ const tradeCount = consolidationMode
30
+ ? Math.min(trades.length, responseTrades.length)
31
+ : trades.length;
32
+ for (let i = 0; i < tradeCount; i++) {
27
33
  const trade = trades[i];
28
34
  const realChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.srcChainId);
29
35
  if (realChainId === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"trade-grouping.js","sourceRoot":"","sources":["../../../src/validations/trade-grouping.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trade-grouping.js","sourceRoot":"","sources":["../../../src/validations/trade-grouping.ts"],"names":[],"mappings":"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"}