@debridge-finance/borderless-validation-sdk 0.0.5 → 0.0.7

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 (219) hide show
  1. package/dist/cjs/helpers/evm-dln-hook-pack.js +8 -6
  2. package/dist/cjs/helpers/evm-dln-hook-pack.js.map +1 -1
  3. package/dist/cjs/helpers/evm-gas-compensation-tx.js +2 -1
  4. package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +1 -1
  5. package/dist/cjs/helpers/evm-intent-id.js +6 -5
  6. package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
  7. package/dist/cjs/helpers/evm-trade-amounts.js +25 -43
  8. package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
  9. package/dist/cjs/helpers/expected-delegate.js +10 -11
  10. package/dist/cjs/helpers/expected-delegate.js.map +1 -1
  11. package/dist/cjs/helpers/gas-compensation.js +3 -0
  12. package/dist/cjs/helpers/gas-compensation.js.map +1 -1
  13. package/dist/cjs/helpers/hex.js +35 -0
  14. package/dist/cjs/helpers/hex.js.map +1 -1
  15. package/dist/cjs/helpers/integer.js +10 -0
  16. package/dist/cjs/helpers/integer.js.map +1 -0
  17. package/dist/cjs/helpers/placeholder.js +3 -2
  18. package/dist/cjs/helpers/placeholder.js.map +1 -1
  19. package/dist/cjs/helpers/solana-intent-id.js +6 -5
  20. package/dist/cjs/helpers/solana-intent-id.js.map +1 -1
  21. package/dist/cjs/helpers/synthetic-native-wrap.js +56 -0
  22. package/dist/cjs/helpers/synthetic-native-wrap.js.map +1 -0
  23. package/dist/cjs/types/enums.js +2 -0
  24. package/dist/cjs/types/enums.js.map +1 -1
  25. package/dist/cjs/types/request.js +27 -5
  26. package/dist/cjs/types/request.js.map +1 -1
  27. package/dist/cjs/types/response.js +11 -3
  28. package/dist/cjs/types/response.js.map +1 -1
  29. package/dist/cjs/types/validation.js +40 -1
  30. package/dist/cjs/types/validation.js.map +1 -1
  31. package/dist/cjs/validations/accumulative-token.js +272 -0
  32. package/dist/cjs/validations/accumulative-token.js.map +1 -0
  33. package/dist/cjs/validations/compensation-hook.js +9 -0
  34. package/dist/cjs/validations/compensation-hook.js.map +1 -1
  35. package/dist/cjs/validations/cost-token.js +56 -0
  36. package/dist/cjs/validations/cost-token.js.map +1 -0
  37. package/dist/cjs/validations/dln-metadata.js +63 -0
  38. package/dist/cjs/validations/dln-metadata.js.map +1 -0
  39. package/dist/cjs/validations/evm-caveats.js +5 -3
  40. package/dist/cjs/validations/evm-caveats.js.map +1 -1
  41. package/dist/cjs/validations/evm-op-budget.js +4 -4
  42. package/dist/cjs/validations/evm-op-budget.js.map +1 -1
  43. package/dist/cjs/validations/evm-op-hook.js +7 -1
  44. package/dist/cjs/validations/evm-op-hook.js.map +1 -1
  45. package/dist/cjs/validations/evm-op-wrap.js +6 -5
  46. package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
  47. package/dist/cjs/validations/evm-permit2.js +7 -4
  48. package/dist/cjs/validations/evm-permit2.js.map +1 -1
  49. package/dist/cjs/validations/evm-required-actions.js +7 -4
  50. package/dist/cjs/validations/evm-required-actions.js.map +1 -1
  51. package/dist/cjs/validations/external-call.js +330 -0
  52. package/dist/cjs/validations/external-call.js.map +1 -0
  53. package/dist/cjs/validations/hooks-common.js +38 -2
  54. package/dist/cjs/validations/hooks-common.js.map +1 -1
  55. package/dist/cjs/validations/intent-tokens.js +54 -40
  56. package/dist/cjs/validations/intent-tokens.js.map +1 -1
  57. package/dist/cjs/validations/intent.js +192 -71
  58. package/dist/cjs/validations/intent.js.map +1 -1
  59. package/dist/cjs/validations/ptp.js +157 -0
  60. package/dist/cjs/validations/ptp.js.map +1 -0
  61. package/dist/cjs/validations/required-actions.js +2 -2
  62. package/dist/cjs/validations/required-actions.js.map +1 -1
  63. package/dist/cjs/validations/solana-hook.js +12 -0
  64. package/dist/cjs/validations/solana-hook.js.map +1 -1
  65. package/dist/cjs/validations/solana-op-budget.js +20 -40
  66. package/dist/cjs/validations/solana-op-budget.js.map +1 -1
  67. package/dist/cjs/validations/solana-op-wrap.js +27 -32
  68. package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
  69. package/dist/cjs/validations/total-dst-amount.js +432 -0
  70. package/dist/cjs/validations/total-dst-amount.js.map +1 -0
  71. package/dist/cjs/validations/trade-grouping.js +67 -25
  72. package/dist/cjs/validations/trade-grouping.js.map +1 -1
  73. package/dist/cjs/validations/trade-matching.js +112 -0
  74. package/dist/cjs/validations/trade-matching.js.map +1 -0
  75. package/dist/cjs/validations/trades.js +365 -71
  76. package/dist/cjs/validations/trades.js.map +1 -1
  77. package/dist/cjs/validator.js +22 -4
  78. package/dist/cjs/validator.js.map +1 -1
  79. package/dist/cjs/whitelists/environment-config.js +5 -5
  80. package/dist/cjs/whitelists/environment-config.js.map +1 -1
  81. package/dist/esm/helpers/evm-dln-hook-pack.js +8 -6
  82. package/dist/esm/helpers/evm-dln-hook-pack.js.map +1 -1
  83. package/dist/esm/helpers/evm-gas-compensation-tx.js +2 -1
  84. package/dist/esm/helpers/evm-gas-compensation-tx.js.map +1 -1
  85. package/dist/esm/helpers/evm-intent-id.js +6 -5
  86. package/dist/esm/helpers/evm-intent-id.js.map +1 -1
  87. package/dist/esm/helpers/evm-trade-amounts.js +26 -44
  88. package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
  89. package/dist/esm/helpers/expected-delegate.js +10 -11
  90. package/dist/esm/helpers/expected-delegate.js.map +1 -1
  91. package/dist/esm/helpers/gas-compensation.js +3 -0
  92. package/dist/esm/helpers/gas-compensation.js.map +1 -1
  93. package/dist/esm/helpers/hex.js +29 -0
  94. package/dist/esm/helpers/hex.js.map +1 -1
  95. package/dist/esm/helpers/integer.js +7 -0
  96. package/dist/esm/helpers/integer.js.map +1 -0
  97. package/dist/esm/helpers/placeholder.js +3 -2
  98. package/dist/esm/helpers/placeholder.js.map +1 -1
  99. package/dist/esm/helpers/solana-intent-id.js +6 -5
  100. package/dist/esm/helpers/solana-intent-id.js.map +1 -1
  101. package/dist/esm/helpers/synthetic-native-wrap.js +52 -0
  102. package/dist/esm/helpers/synthetic-native-wrap.js.map +1 -0
  103. package/dist/esm/types/enums.js +2 -0
  104. package/dist/esm/types/enums.js.map +1 -1
  105. package/dist/esm/types/request.js +25 -4
  106. package/dist/esm/types/request.js.map +1 -1
  107. package/dist/esm/types/response.js +11 -3
  108. package/dist/esm/types/response.js.map +1 -1
  109. package/dist/esm/types/validation.js +40 -1
  110. package/dist/esm/types/validation.js.map +1 -1
  111. package/dist/esm/validations/accumulative-token.js +269 -0
  112. package/dist/esm/validations/accumulative-token.js.map +1 -0
  113. package/dist/esm/validations/compensation-hook.js +9 -0
  114. package/dist/esm/validations/compensation-hook.js.map +1 -1
  115. package/dist/esm/validations/cost-token.js +53 -0
  116. package/dist/esm/validations/cost-token.js.map +1 -0
  117. package/dist/esm/validations/dln-metadata.js +56 -0
  118. package/dist/esm/validations/dln-metadata.js.map +1 -0
  119. package/dist/esm/validations/evm-caveats.js +5 -3
  120. package/dist/esm/validations/evm-caveats.js.map +1 -1
  121. package/dist/esm/validations/evm-op-budget.js +4 -4
  122. package/dist/esm/validations/evm-op-budget.js.map +1 -1
  123. package/dist/esm/validations/evm-op-hook.js +7 -1
  124. package/dist/esm/validations/evm-op-hook.js.map +1 -1
  125. package/dist/esm/validations/evm-op-wrap.js +6 -5
  126. package/dist/esm/validations/evm-op-wrap.js.map +1 -1
  127. package/dist/esm/validations/evm-permit2.js +7 -4
  128. package/dist/esm/validations/evm-permit2.js.map +1 -1
  129. package/dist/esm/validations/evm-required-actions.js +7 -4
  130. package/dist/esm/validations/evm-required-actions.js.map +1 -1
  131. package/dist/esm/validations/external-call.js +325 -0
  132. package/dist/esm/validations/external-call.js.map +1 -0
  133. package/dist/esm/validations/hooks-common.js +38 -2
  134. package/dist/esm/validations/hooks-common.js.map +1 -1
  135. package/dist/esm/validations/intent-tokens.js +55 -41
  136. package/dist/esm/validations/intent-tokens.js.map +1 -1
  137. package/dist/esm/validations/intent.js +194 -73
  138. package/dist/esm/validations/intent.js.map +1 -1
  139. package/dist/esm/validations/ptp.js +154 -0
  140. package/dist/esm/validations/ptp.js.map +1 -0
  141. package/dist/esm/validations/required-actions.js +2 -2
  142. package/dist/esm/validations/required-actions.js.map +1 -1
  143. package/dist/esm/validations/solana-hook.js +13 -1
  144. package/dist/esm/validations/solana-hook.js.map +1 -1
  145. package/dist/esm/validations/solana-op-budget.js +21 -41
  146. package/dist/esm/validations/solana-op-budget.js.map +1 -1
  147. package/dist/esm/validations/solana-op-wrap.js +28 -33
  148. package/dist/esm/validations/solana-op-wrap.js.map +1 -1
  149. package/dist/esm/validations/total-dst-amount.js +429 -0
  150. package/dist/esm/validations/total-dst-amount.js.map +1 -0
  151. package/dist/esm/validations/trade-grouping.js +67 -25
  152. package/dist/esm/validations/trade-grouping.js.map +1 -1
  153. package/dist/esm/validations/trade-matching.js +109 -0
  154. package/dist/esm/validations/trade-matching.js.map +1 -0
  155. package/dist/esm/validations/trades.js +365 -71
  156. package/dist/esm/validations/trades.js.map +1 -1
  157. package/dist/esm/validator.js +22 -4
  158. package/dist/esm/validator.js.map +1 -1
  159. package/dist/esm/whitelists/environment-config.js +5 -5
  160. package/dist/esm/whitelists/environment-config.js.map +1 -1
  161. package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +1 -1
  162. package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +1 -1
  163. package/dist/types/helpers/evm-intent-id.d.ts.map +1 -1
  164. package/dist/types/helpers/evm-trade-amounts.d.ts +1 -1
  165. package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -1
  166. package/dist/types/helpers/expected-delegate.d.ts.map +1 -1
  167. package/dist/types/helpers/gas-compensation.d.ts.map +1 -1
  168. package/dist/types/helpers/hex.d.ts +6 -0
  169. package/dist/types/helpers/hex.d.ts.map +1 -1
  170. package/dist/types/helpers/integer.d.ts +2 -0
  171. package/dist/types/helpers/integer.d.ts.map +1 -0
  172. package/dist/types/helpers/placeholder.d.ts.map +1 -1
  173. package/dist/types/helpers/solana-intent-id.d.ts.map +1 -1
  174. package/dist/types/helpers/synthetic-native-wrap.d.ts +4 -0
  175. package/dist/types/helpers/synthetic-native-wrap.d.ts.map +1 -0
  176. package/dist/types/types/enums.d.ts +4 -2
  177. package/dist/types/types/enums.d.ts.map +1 -1
  178. package/dist/types/types/request.d.ts +85 -6
  179. package/dist/types/types/request.d.ts.map +1 -1
  180. package/dist/types/types/response.d.ts +96 -12
  181. package/dist/types/types/response.d.ts.map +1 -1
  182. package/dist/types/types/validation.d.ts +36 -1
  183. package/dist/types/types/validation.d.ts.map +1 -1
  184. package/dist/types/validations/accumulative-token.d.ts +3 -0
  185. package/dist/types/validations/accumulative-token.d.ts.map +1 -0
  186. package/dist/types/validations/compensation-hook.d.ts.map +1 -1
  187. package/dist/types/validations/cost-token.d.ts +3 -0
  188. package/dist/types/validations/cost-token.d.ts.map +1 -0
  189. package/dist/types/validations/dln-metadata.d.ts +7 -0
  190. package/dist/types/validations/dln-metadata.d.ts.map +1 -0
  191. package/dist/types/validations/evm-caveats.d.ts.map +1 -1
  192. package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
  193. package/dist/types/validations/evm-op-wrap.d.ts.map +1 -1
  194. package/dist/types/validations/evm-permit2.d.ts.map +1 -1
  195. package/dist/types/validations/evm-required-actions.d.ts +1 -1
  196. package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
  197. package/dist/types/validations/external-call.d.ts +15 -0
  198. package/dist/types/validations/external-call.d.ts.map +1 -0
  199. package/dist/types/validations/intent-tokens.d.ts.map +1 -1
  200. package/dist/types/validations/intent.d.ts +1 -1
  201. package/dist/types/validations/intent.d.ts.map +1 -1
  202. package/dist/types/validations/ptp.d.ts +3 -0
  203. package/dist/types/validations/ptp.d.ts.map +1 -0
  204. package/dist/types/validations/required-actions.d.ts +1 -1
  205. package/dist/types/validations/required-actions.d.ts.map +1 -1
  206. package/dist/types/validations/solana-hook.d.ts.map +1 -1
  207. package/dist/types/validations/solana-op-budget.d.ts.map +1 -1
  208. package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
  209. package/dist/types/validations/total-dst-amount.d.ts +3 -0
  210. package/dist/types/validations/total-dst-amount.d.ts.map +1 -0
  211. package/dist/types/validations/trade-grouping.d.ts +2 -1
  212. package/dist/types/validations/trade-grouping.d.ts.map +1 -1
  213. package/dist/types/validations/trade-matching.d.ts +13 -0
  214. package/dist/types/validations/trade-matching.d.ts.map +1 -0
  215. package/dist/types/validations/trades.d.ts +2 -1
  216. package/dist/types/validations/trades.d.ts.map +1 -1
  217. package/dist/types/validator.d.ts.map +1 -1
  218. package/dist/types/whitelists/environment-config.d.ts.map +1 -1
  219. package/package.json +1 -1
@@ -6,6 +6,7 @@ const address_1 = require("../helpers/address");
6
6
  const evm_token_1 = require("../helpers/evm-token");
7
7
  const subscription_to_chain_id_1 = require("../whitelists/subscription-to-chain-id");
8
8
  const programs_1 = require("../whitelists/solana/programs");
9
+ const integer_1 = require("../helpers/integer");
9
10
  function validateIntentTokens(ctx, basePath) {
10
11
  const intent = ctx.intentPayload.intent;
11
12
  const group = ctx.tradeGroup;
@@ -97,29 +98,50 @@ function validateInputTokens(inputTokens, ctx, expectedTokens, basePath) {
97
98
  }
98
99
  return violations;
99
100
  }
100
- // CRITICAL: constraintBudget equals the sum of request amounts for trades
101
- // whose srcChainTokenIn resolves to this inputToken.address. Sums only the
102
- // trades the API folded into THIS intent (one trade group can split into
103
- // several intents by dlnHook/metadata).
104
- // Skipped when any contributing trade has non-numeric amount ('auto'/'max')
105
- // or when any has prependOperatingExpenses=true (API adds unpredictable costs).
101
+ // CRITICAL: `constraintBudget` equals the sum of `response.trades[i]
102
+ // .srcChainTokenIn.amount` for trades whose `srcChainTokenIn` resolves to
103
+ // this `inputToken.address`. The same formula holds in every mode — the API
104
+ // always builds `constraintBudget` from the post-mutation per-trade source
105
+ // amounts, which is exactly what the response surfaces. Sums only the trades
106
+ // the API folded into THIS intent (one trade group can split into several
107
+ // intents by dlnHook/metadata).
108
+ //
109
+ // Sanity bounds on `response.srcChainTokenIn.amount` itself live in
110
+ // `validateTrades`.
106
111
  function validateConstraintBudget(inputToken, ctx, normalizedAddress, basePath) {
107
112
  const realChainId = ctx.tradeGroup.realChainId;
108
- const contributingTrades = ctx.intentTrades.filter(trade => {
113
+ const contributingResponseTrades = ctx.intentTrades
114
+ .map((trade, i) => ({ trade, response: ctx.intentResponseTrades[i] }))
115
+ .filter(({ trade }) => {
109
116
  const resolved = (0, evm_token_1.resolveWrappedTokenAddress)(trade.srcChainTokenIn, realChainId);
110
117
  // Safe skip: unresolved input tokens are already reported by
111
- // resolveGroupInputTokens.
118
+ // `resolveGroupInputTokens`.
112
119
  if (resolved === undefined)
113
120
  return false;
114
121
  return (0, address_1.normalizeAddress)(realChainId, resolved) === normalizedAddress;
115
122
  });
116
- if (!canPredictBudget(contributingTrades)) {
123
+ // Safe skip: missing response trade at a contributing index is reported
124
+ // by `validateTrades` as `TradeCountMismatch`; computing a partial sum here
125
+ // would emit a misleading duplicate violation.
126
+ if (contributingResponseTrades.some(({ response }) => response === undefined)) {
117
127
  return [];
118
128
  }
119
- const expectedSum = contributingTrades.reduce((acc, trade) => acc + BigInt(trade.srcChainTokenInAmount), 0n);
129
+ let expectedSum = 0n;
130
+ for (const { response, trade } of contributingResponseTrades) {
131
+ try {
132
+ expectedSum += (0, integer_1.parseIntegerString)(response.srcChainTokenIn.amount);
133
+ }
134
+ catch (error) {
135
+ // Safe skip: invalid response `srcChainTokenIn.amount` is reported
136
+ // by `validateTrades` (`srcChainTokenIn.amount` parse rules).
137
+ void trade;
138
+ void error;
139
+ return [];
140
+ }
141
+ }
120
142
  let actualBudget;
121
143
  try {
122
- actualBudget = BigInt(inputToken.constraintBudget);
144
+ actualBudget = (0, integer_1.parseIntegerString)(inputToken.constraintBudget);
123
145
  }
124
146
  catch (error) {
125
147
  return [{
@@ -134,7 +156,7 @@ function validateConstraintBudget(inputToken, ctx, normalizedAddress, basePath)
134
156
  return [{
135
157
  code: types_1.ViolationCode.IntentConstraintBudgetMismatch,
136
158
  message: "intent.inputToken[].constraintBudget must equal the sum of"
137
- + " request srcChainTokenInAmount values for the matching trades",
159
+ + " response.trades[].srcChainTokenIn.amount for the matching trades",
138
160
  path: `${basePath}.constraintBudget`,
139
161
  expected: expectedSum.toString(),
140
162
  actual: inputToken.constraintBudget,
@@ -142,21 +164,6 @@ function validateConstraintBudget(inputToken, ctx, normalizedAddress, basePath)
142
164
  }
143
165
  return [];
144
166
  }
145
- function canPredictBudget(trades) {
146
- return trades.every(trade => isNumericAmount(trade.srcChainTokenInAmount) &&
147
- trade.prependOperatingExpenses !== true);
148
- }
149
- function isNumericAmount(amount) {
150
- if (amount === types_1.SpecialAmount.Auto || amount === types_1.SpecialAmount.Max)
151
- return false;
152
- try {
153
- BigInt(amount);
154
- return true;
155
- }
156
- catch {
157
- return false;
158
- }
159
- }
160
167
  // CRITICAL: each giveToken[].inputTokenAddress must equal one of
161
168
  // intent.inputToken[].address that is used by at least one cross-chain trade
162
169
  // in the group. Same-chain trades do not produce giveToken entries.
@@ -234,16 +241,18 @@ function collectInputAddressesForCrossChainTrades(intent, group) {
234
241
  function isCrossChain(trade) {
235
242
  return trade.srcChainId !== trade.dstChainId;
236
243
  }
237
- // CRITICAL: intent.takeToken[] must represent exactly the set of unique
238
- // (dstChainId, dstChainTokenOut) pairs from the group's trades. Missing pairs,
239
- // duplicate entries, and unknown chainId/address combinations are each reported
240
- // as specific violations.
244
+ // CRITICAL: intent.takeToken[] must cover the unique destination
245
+ // (dstChainId, dstChainTokenOut) pairs from the group's trades. The API keys
246
+ // actual take-token entries by source/from token plus destination token, so
247
+ // duplicate detection uses the full
248
+ // (fromTokenAddress, takeTokenChainId, takeTokenAddress) identity.
241
249
  // CRITICAL: fromTokenAddress must be in inputToken[] (same-chain) or giveToken[]
242
250
  // (cross-chain).
243
251
  function validateTakeTokens(intent, group, basePath) {
244
252
  const violations = [];
245
- const expectedTakeTokens = buildExpectedTakeTokens(group);
246
- const actualKeys = intent.takeToken.map(takeToken => buildTakeTokenKey(takeToken));
253
+ const expectedDestinations = buildExpectedTakeTokenDestinations(group);
254
+ const actualKeys = intent.takeToken.map(takeToken => buildTakeTokenIdentityKey(takeToken, group.realChainId));
255
+ const actualDestinations = new Set(intent.takeToken.map(takeToken => buildTakeTokenDestinationKey(takeToken)));
247
256
  const firstOccurrence = new Map();
248
257
  for (let i = 0; i < actualKeys.length; i++) {
249
258
  const key = actualKeys[i];
@@ -252,8 +261,8 @@ function validateTakeTokens(intent, group, basePath) {
252
261
  violations.push({
253
262
  code: types_1.ViolationCode.IntentTakeTokenDuplicate,
254
263
  message: `intent.takeToken[${i}] duplicates the entry at`
255
- + ` index ${earlier} — each (takeTokenChainId,`
256
- + ` takeTokenAddress) pair must appear once`,
264
+ + ` index ${earlier} — each (fromTokenAddress,`
265
+ + ` takeTokenChainId, takeTokenAddress) tuple must appear once`,
257
266
  path: `${basePath}[${i}]`,
258
267
  actual: key,
259
268
  });
@@ -262,8 +271,8 @@ function validateTakeTokens(intent, group, basePath) {
262
271
  firstOccurrence.set(key, i);
263
272
  }
264
273
  }
265
- for (const expectedTakeToken of expectedTakeTokens) {
266
- if (!firstOccurrence.has(expectedTakeToken)) {
274
+ for (const expectedTakeToken of expectedDestinations) {
275
+ if (!actualDestinations.has(expectedTakeToken)) {
267
276
  violations.push({
268
277
  code: types_1.ViolationCode.IntentTakeTokenMissing,
269
278
  message: "an expected (dstChainId, dstChainTokenOut) pair is"
@@ -275,7 +284,7 @@ function validateTakeTokens(intent, group, basePath) {
275
284
  }
276
285
  // Validate each unique entry (duplicates are already reported above)
277
286
  for (const [, i] of firstOccurrence) {
278
- violations.push(...validateSingleTakeToken(intent, intent.takeToken[i], group, expectedTakeTokens, `${basePath}[${i}]`));
287
+ violations.push(...validateSingleTakeToken(intent, intent.takeToken[i], group, expectedDestinations, `${basePath}[${i}]`));
279
288
  }
280
289
  return violations;
281
290
  }
@@ -289,10 +298,15 @@ function buildChainTokenKey(chainId, realChainId, address) {
289
298
  : address;
290
299
  return `${chainId}:${normalized}`;
291
300
  }
292
- function buildTakeTokenKey(takeToken) {
301
+ function buildTakeTokenDestinationKey(takeToken) {
293
302
  return buildChainTokenKey(takeToken.takeTokenChainId, (0, subscription_to_chain_id_1.resolveChainId)(takeToken.takeTokenChainId), takeToken.takeTokenAddress);
294
303
  }
295
- function buildExpectedTakeTokens(group) {
304
+ function buildTakeTokenIdentityKey(takeToken, sourceRealChainId) {
305
+ const fromKey = (0, address_1.normalizeAddress)(sourceRealChainId, takeToken.fromTokenAddress);
306
+ const destinationKey = buildTakeTokenDestinationKey(takeToken);
307
+ return `${fromKey}->${destinationKey}`;
308
+ }
309
+ function buildExpectedTakeTokenDestinations(group) {
296
310
  const set = new Set();
297
311
  for (const trade of group.trades) {
298
312
  const dstRealChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.dstChainId);
@@ -1 +1 @@
1
- {"version":3,"file":"intent-tokens.js","sourceRoot":"","sources":["../../../src/validations/intent-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent-tokens.js","sourceRoot":"","sources":["../../../src/validations/intent-tokens.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateIntents = validateIntents;
4
- const viem_1 = require("viem");
5
4
  const types_1 = require("../types");
6
5
  const address_1 = require("../helpers/address");
7
- const sets_1 = require("../helpers/sets");
8
6
  const expected_delegate_1 = require("../helpers/expected-delegate");
9
7
  const types_2 = require("../whitelists/types");
10
8
  const evm_intent_id_1 = require("../helpers/evm-intent-id");
11
9
  const solana_intent_id_1 = require("../helpers/solana-intent-id");
12
- const evm_dln_hook_pack_1 = require("../helpers/evm-dln-hook-pack");
13
10
  const hex_1 = require("../helpers/hex");
14
11
  const intent_tokens_1 = require("./intent-tokens");
15
12
  const intent_destinations_1 = require("./intent-destinations");
16
- function validateIntents(contexts, quoteMode, envConfig) {
13
+ const dln_metadata_1 = require("./dln-metadata");
14
+ const external_call_1 = require("./external-call");
15
+ const integer_1 = require("../helpers/integer");
16
+ function validateIntents(contexts, quoteMode, envConfig, syntheticNativeWrapMode) {
17
17
  const violations = [];
18
18
  for (const ctx of contexts) {
19
- violations.push(...validateSingleIntent(ctx, quoteMode, envConfig));
19
+ violations.push(...validateSingleIntent(ctx, quoteMode, envConfig, syntheticNativeWrapMode));
20
20
  }
21
21
  return violations;
22
22
  }
23
- function validateSingleIntent(ctx, quoteMode, envConfig) {
23
+ function validateSingleIntent(ctx, quoteMode, envConfig, syntheticNativeWrapMode) {
24
24
  const basePath = `response.intents[${ctx.intentIndex}].intent`;
25
25
  const intent = ctx.intentPayload.intent;
26
26
  const group = ctx.tradeGroup;
27
27
  const violations = [
28
28
  ...validateNonNegativeNumerics(intent, basePath),
29
- ...validateIntentDifferentiationFields(intent, group, basePath),
30
- ...(0, intent_tokens_1.validateIntentTokens)(ctx, basePath),
31
- ...(0, intent_destinations_1.validateIntentDestinations)(intent, group, basePath, quoteMode),
29
+ ...(syntheticNativeWrapMode
30
+ ? []
31
+ : [
32
+ ...validateIntentDifferentiationFields(ctx, quoteMode, basePath),
33
+ ...(0, intent_tokens_1.validateIntentTokens)(ctx, basePath),
34
+ ...(0, intent_destinations_1.validateIntentDestinations)(intent, group, basePath, quoteMode),
35
+ ]),
32
36
  ];
33
- if (!quoteMode) {
34
- violations.push(...validateExecutionIdentity(intent, group, basePath, envConfig), ...validateAllowedCancelBeneficiary(intent, group, basePath), ...validateSrcAllowedSender(intent, group, basePath, envConfig));
37
+ if (!quoteMode && !syntheticNativeWrapMode) {
38
+ violations.push(...validateExecutionIdentity(intent, group, basePath, envConfig), ...validateAllowedCancelBeneficiary(intent, group, basePath), ...validateSrcAllowedSender(intent, ctx.intentTrades, group, basePath, envConfig));
35
39
  }
36
40
  return violations;
37
41
  }
@@ -58,7 +62,8 @@ function validateExecutionIdentity(intent, group, basePath, envConfig) {
58
62
  violations.push({
59
63
  code: types_1.ViolationCode.IntentAuthorityMismatch,
60
64
  message: ownerUnverifiable
61
- ? "cannot verify intent.intentAuthority: request trade has no srcChainAuthorityAddress in execution mode"
65
+ ? "cannot verify intent.intentAuthority: request trade has no"
66
+ + " srcChainAuthorityAddress in execution mode"
62
67
  : "intent.intentAuthority must equal srcChainAuthorityAddress",
63
68
  path: `${basePath}.intentAuthority`,
64
69
  expected: expectedOwner,
@@ -136,11 +141,11 @@ function validateAllowedCancelBeneficiary(intent, group, basePath) {
136
141
  // request input. We require a single-element list whose entry is in the
137
142
  // whitelist.
138
143
  //
139
- // Branch B (echo): chain has no solver executor override. If any trade in
140
- // the group has `srcAllowedSender`, the intent must echo those addresses
141
- // exactly. If none specified, the API substitutes its own per-chain
142
- // delegate — not verified here (no whitelist for it).
143
- function validateSrcAllowedSender(intent, group, basePath, envConfig) {
144
+ // Branch B (selected delegate): chain has no solver executor override. The
145
+ // API emits exactly one delegate: the first `srcAllowedSender` among the
146
+ // trades folded into this intent, or a config fallback when none is specified.
147
+ // The fallback is not verified here because the SDK has no delegate whitelist.
148
+ function validateSrcAllowedSender(intent, intentTrades, group, basePath, envConfig) {
144
149
  const actualList = intent.srcAllowedSender ?? [];
145
150
  const path = `${basePath}.srcAllowedSender`;
146
151
  if ((0, expected_delegate_1.hasSolverExecutorOverride)(envConfig.solverExecutorContracts, group.realChainId)) {
@@ -166,22 +171,19 @@ function validateSrcAllowedSender(intent, group, basePath, envConfig) {
166
171
  }
167
172
  return [];
168
173
  }
169
- const requested = group.trades
170
- .map(t => t.srcAllowedSender)
171
- .filter((s) => s !== undefined);
174
+ const expectedDelegate = (0, expected_delegate_1.getExpectedIntentDelegate)(intentTrades);
172
175
  // Safe skip: no request srcAllowedSender — API substitutes its
173
176
  // delegate from config; we have no whitelist for that fallback.
174
- if (requested.length === 0)
177
+ if (expectedDelegate === undefined)
175
178
  return [];
176
- const expectedSet = new Set(requested.map(addr => (0, address_1.normalizeAddress)(group.realChainId, addr)));
177
- const actualSet = new Set(actualList.map(addr => (0, address_1.normalizeAddress)(group.realChainId, addr)));
178
- if (!(0, sets_1.setsEqual)(expectedSet, actualSet)) {
179
+ if (actualList.length !== 1
180
+ || !(0, address_1.addressEquals)(group.realChainId, actualList[0], expectedDelegate)) {
179
181
  return [{
180
182
  code: types_1.ViolationCode.IntentSrcAllowedSenderMismatch,
181
- message: "intent.srcAllowedSender must contain exactly the addresses"
182
- + " from request srcAllowedSender fields (no extras, no omissions)",
183
+ message: "intent.srcAllowedSender must contain exactly the selected"
184
+ + " request srcAllowedSender delegate",
183
185
  path,
184
- expected: Array.from(expectedSet),
186
+ expected: [expectedDelegate],
185
187
  actual: actualList,
186
188
  }];
187
189
  }
@@ -191,11 +193,13 @@ function validateSrcAllowedSender(intent, group, basePath, envConfig) {
191
193
  // (srcChainId, srcChainAuthorityAddress, dlnHook, dlnMetadata) and produces a separate
192
194
  // intent for each unique combination. These fields on the intent must reflect the
193
195
  // corresponding request trade fields.
194
- function validateIntentDifferentiationFields(intent, group, basePath) {
196
+ function validateIntentDifferentiationFields(ctx, quoteMode, basePath) {
197
+ const intent = ctx.intentPayload.intent;
195
198
  return [
196
199
  ...validateExecutionMetadata(intent, basePath),
197
- ...validateDlnMetadata(intent, group, basePath),
198
- ...validateExternalCallHash(intent, group, basePath),
200
+ ...(0, dln_metadata_1.validateIntentDlnMetadataFormat)(intent, basePath),
201
+ ...validateDlnMetadata(ctx, quoteMode, basePath),
202
+ ...validateExternalCallHash(ctx, quoteMode, basePath),
199
203
  ];
200
204
  }
201
205
  // CRITICAL: executionMetadata is hardcoded to undefined in the API intent
@@ -212,56 +216,170 @@ function validateExecutionMetadata(intent, basePath) {
212
216
  actual: intent.executionMetadata,
213
217
  }];
214
218
  }
215
- // CRITICAL: intent.dlnMetadata must match request.trades[].dlnMetadata from one of
216
- // the trades in the group. When no trade in the group has dlnMetadata, the intent
217
- // field must be empty/undefined.
218
- function validateDlnMetadata(intent, group, basePath) {
219
- const expected = new Set();
220
- for (const trade of group.trades)
221
- expected.add(trade.dlnMetadata);
222
- if (matchesAnyHex(intent.dlnMetadata, expected))
219
+ // CRITICAL: intent.dlnMetadata must match the request dlnMetadata for the
220
+ // specific trades that point to this intent via `relatedIntentId`. Quote mode has
221
+ // no reliable per-trade `relatedIntentId` mapping, so it falls back to group-level
222
+ // matching.
223
+ function validateDlnMetadata(ctx, quoteMode, basePath) {
224
+ const intent = ctx.intentPayload.intent;
225
+ const expectedValues = quoteMode
226
+ ? ctx.tradeGroup.trades.map(trade => trade.dlnMetadata)
227
+ : getDlnMetadataValuesFromRelatedTrades(ctx);
228
+ if (expectedValues.length === 0) {
229
+ // Safe skip: missing/invalid `relatedIntentId` is reported by
230
+ // `validateRelatedIntentIds`; without that mapping there is no concrete
231
+ // request subset to compare against.
232
+ return [];
233
+ }
234
+ if (quoteMode) {
235
+ if (matchesAnyDlnMetadata(intent.dlnMetadata, expectedValues))
236
+ return [];
237
+ return [{
238
+ code: types_1.ViolationCode.IntentDlnMetadataMismatch,
239
+ message: "quote-mode intent.dlnMetadata must match one of"
240
+ + " request.trades[].dlnMetadata values from the trade group",
241
+ path: `${basePath}.dlnMetadata`,
242
+ expected: uniqueDlnMetadata(expectedValues),
243
+ actual: intent.dlnMetadata,
244
+ }];
245
+ }
246
+ const uniqueExpected = uniqueDlnMetadata(expectedValues);
247
+ if (uniqueExpected.length > 1) {
248
+ return [{
249
+ code: types_1.ViolationCode.IntentDlnMetadataMismatch,
250
+ message: "request trades related to the same intent must have identical dlnMetadata",
251
+ path: `${basePath}.dlnMetadata`,
252
+ expected: uniqueExpected,
253
+ actual: intent.dlnMetadata,
254
+ }];
255
+ }
256
+ const expected = uniqueExpected[0];
257
+ if ((0, dln_metadata_1.dlnMetadataEquals)(intent.dlnMetadata, expected))
223
258
  return [];
224
259
  return [{
225
260
  code: types_1.ViolationCode.IntentDlnMetadataMismatch,
226
- message: "intent.dlnMetadata must match one of request.trades[].dlnMetadata"
227
- + " values from the trade group",
261
+ message: "intent.dlnMetadata must match request.trades[].dlnMetadata"
262
+ + " for trades related to this intent",
228
263
  path: `${basePath}.dlnMetadata`,
229
- expected: Array.from(expected),
264
+ expected,
230
265
  actual: intent.dlnMetadata,
231
266
  }];
232
267
  }
233
- // CRITICAL: intent.externalCallHash must match the keccak256 of the API's
234
- // serialized hook envelope for one of the trades in the group (see
235
- // `serializeDlnHook`). When no trade has a dlnHook, the intent field must be
236
- // empty/zero.
237
- function validateExternalCallHash(intent, group, basePath) {
238
- const expected = new Set();
239
- for (const trade of group.trades) {
240
- try {
241
- const packed = (0, evm_dln_hook_pack_1.serializeDlnHook)(trade);
242
- expected.add(packed === undefined ? undefined : (0, viem_1.keccak256)(packed));
268
+ function matchesAnyDlnMetadata(actual, expectedValues) {
269
+ for (const expected of expectedValues) {
270
+ if ((0, dln_metadata_1.dlnMetadataEquals)(actual, expected))
271
+ return true;
272
+ }
273
+ return false;
274
+ }
275
+ function getDlnMetadataValuesFromRelatedTrades(ctx) {
276
+ const intentId = ctx.intentPayload.intent.intentId;
277
+ const expected = [];
278
+ for (let i = 0; i < ctx.tradeGroup.trades.length; i++) {
279
+ const responseTrade = ctx.tradeGroup.responseTrades[i];
280
+ if (responseTrade?.relatedIntentId === intentId) {
281
+ expected.push(ctx.tradeGroup.trades[i].dlnMetadata);
243
282
  }
244
- catch (error) {
245
- return [{
246
- code: types_1.ViolationCode.IntentExternalCallHashMismatch,
247
- message: "failed to serialize request.trades[].dlnHook",
248
- path: `${basePath}.externalCallHash`,
249
- actual: intent.externalCallHash,
250
- details: error,
251
- }];
283
+ }
284
+ return expected;
285
+ }
286
+ function uniqueDlnMetadata(values) {
287
+ const seen = new Set();
288
+ const unique = [];
289
+ for (const value of values) {
290
+ const key = (0, dln_metadata_1.normalizeDlnMetadataKey)(value);
291
+ if (!seen.has(key)) {
292
+ seen.add(key);
293
+ unique.push(value);
252
294
  }
253
295
  }
254
- if (matchesAnyHex(intent.externalCallHash, expected))
296
+ return unique;
297
+ }
298
+ // CRITICAL: intent.externalCallHash must match the hash of the serialized
299
+ // external call data for the specific trades that point to this intent via
300
+ // `relatedIntentId`. Quote mode has no reliable per-trade mapping, so it falls
301
+ // back to group-level matching.
302
+ function validateExternalCallHash(ctx, quoteMode, basePath) {
303
+ const intent = ctx.intentPayload.intent;
304
+ const expectedValues = quoteMode
305
+ ? getExternalCallHashesFromGroup(ctx)
306
+ : getExternalCallHashesFromRelatedTrades(ctx);
307
+ if (expectedValues.invalidExternalCallData) {
308
+ // Safe skip: malformed `response.trades[].externalCallData` is reported
309
+ // by `validateExternalCalls`; without valid bytes there is no hash to compare.
310
+ return [];
311
+ }
312
+ if (expectedValues.hashes.length === 0) {
313
+ // Safe skip: missing/invalid `relatedIntentId` is reported by
314
+ // `validateRelatedIntentIds`; without that mapping there is no concrete
315
+ // request subset to compare against.
316
+ return [];
317
+ }
318
+ if (quoteMode) {
319
+ if (matchesAnyHex(intent.externalCallHash, new Set(expectedValues.hashes)))
320
+ return [];
321
+ return [{
322
+ code: types_1.ViolationCode.IntentExternalCallHashMismatch,
323
+ message: "quote-mode intent.externalCallHash must match one of"
324
+ + " response.trades[].externalCallData hashes from the trade group",
325
+ path: `${basePath}.externalCallHash`,
326
+ expected: uniqueHex(expectedValues.hashes),
327
+ actual: intent.externalCallHash,
328
+ }];
329
+ }
330
+ const uniqueExpected = uniqueHex(expectedValues.hashes);
331
+ if (uniqueExpected.length > 1) {
332
+ return [{
333
+ code: types_1.ViolationCode.IntentExternalCallHashMismatch,
334
+ message: "response trades related to the same intent must have identical"
335
+ + " externalCallData hashes",
336
+ path: `${basePath}.externalCallHash`,
337
+ expected: uniqueExpected,
338
+ actual: intent.externalCallHash,
339
+ }];
340
+ }
341
+ const expected = uniqueExpected[0];
342
+ if ((0, hex_1.hexEquals)(intent.externalCallHash, expected))
255
343
  return [];
256
344
  return [{
257
345
  code: types_1.ViolationCode.IntentExternalCallHashMismatch,
258
- message: "intent.externalCallHash must match keccak256 of one of"
259
- + " request.trades[].dlnHook values from the trade group",
346
+ message: "intent.externalCallHash must match response.trades[].externalCallData"
347
+ + " hash for trades related to this intent",
260
348
  path: `${basePath}.externalCallHash`,
261
- expected: Array.from(expected),
349
+ expected,
262
350
  actual: intent.externalCallHash,
263
351
  }];
264
352
  }
353
+ function getExternalCallHashesFromGroup(ctx) {
354
+ return getExternalCallHashes(ctx.tradeGroup.responseTrades);
355
+ }
356
+ function getExternalCallHashesFromRelatedTrades(ctx) {
357
+ const intentId = ctx.intentPayload.intent.intentId;
358
+ const responseTrades = ctx.tradeGroup.responseTrades.filter(responseTrade => responseTrade?.relatedIntentId === intentId);
359
+ return getExternalCallHashes(responseTrades);
360
+ }
361
+ function getExternalCallHashes(responseTrades) {
362
+ const hashes = [];
363
+ let invalidExternalCallData = false;
364
+ for (const responseTrade of responseTrades) {
365
+ const result = (0, external_call_1.getResponseExternalCallHash)(responseTrade);
366
+ if (result.kind === external_call_1.ResponseExternalCallHashKind.Invalid) {
367
+ invalidExternalCallData = true;
368
+ }
369
+ else {
370
+ hashes.push(result.hash);
371
+ }
372
+ }
373
+ return { hashes, invalidExternalCallData };
374
+ }
375
+ function uniqueHex(values) {
376
+ const unique = [];
377
+ for (const value of values) {
378
+ if (!matchesAnyHex(value, new Set(unique)))
379
+ unique.push(value);
380
+ }
381
+ return unique;
382
+ }
265
383
  function matchesAnyHex(actual, expected) {
266
384
  for (const exp of expected) {
267
385
  if ((0, hex_1.hexEquals)(actual, exp))
@@ -296,15 +414,9 @@ function checkBigIntFields(items, basePath, fieldNames) {
296
414
  for (let i = 0; i < items.length; i++) {
297
415
  for (const fieldName of fieldNames) {
298
416
  const raw = items[i][fieldName];
417
+ let parsed;
299
418
  try {
300
- if (BigInt(raw) < 0n) {
301
- violations.push({
302
- code: types_1.ViolationCode.IntentNumericValueNegative,
303
- message: `${basePath}[${i}].${fieldName} must be non-negative`,
304
- path: `${basePath}[${i}].${fieldName}`,
305
- actual: raw,
306
- });
307
- }
419
+ parsed = (0, integer_1.parseIntegerString)(raw);
308
420
  }
309
421
  catch (error) {
310
422
  violations.push({
@@ -314,6 +426,15 @@ function checkBigIntFields(items, basePath, fieldNames) {
314
426
  actual: raw,
315
427
  details: error,
316
428
  });
429
+ continue;
430
+ }
431
+ if (parsed < 0n) {
432
+ violations.push({
433
+ code: types_1.ViolationCode.IntentNumericValueNegative,
434
+ message: `${basePath}[${i}].${fieldName} must be non-negative`,
435
+ path: `${basePath}[${i}].${fieldName}`,
436
+ actual: raw,
437
+ });
317
438
  }
318
439
  }
319
440
  }