@debridge-finance/borderless-validation-sdk 0.0.0-dev-dee2389 → 0.0.0-dev-58fb7d3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +164 -0
  2. package/dist/cjs/helpers/address.js +31 -18
  3. package/dist/cjs/helpers/address.js.map +1 -1
  4. package/dist/cjs/helpers/evm-action.js +3 -3
  5. package/dist/cjs/helpers/evm-action.js.map +1 -1
  6. package/dist/cjs/helpers/evm-gas-compensation-tx.js +102 -0
  7. package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +1 -0
  8. package/dist/cjs/helpers/evm-intent-id.js +1 -1
  9. package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
  10. package/dist/cjs/helpers/gas-compensation.js +36 -0
  11. package/dist/cjs/helpers/gas-compensation.js.map +1 -0
  12. package/dist/cjs/helpers/placeholder.js +174 -0
  13. package/dist/cjs/helpers/placeholder.js.map +1 -0
  14. package/dist/cjs/helpers/sets.js +13 -0
  15. package/dist/cjs/helpers/sets.js.map +1 -0
  16. package/dist/cjs/types/enums.js +26 -2
  17. package/dist/cjs/types/enums.js.map +1 -1
  18. package/dist/cjs/types/request.js +25 -2
  19. package/dist/cjs/types/request.js.map +1 -1
  20. package/dist/cjs/types/response.js +119 -3
  21. package/dist/cjs/types/response.js.map +1 -1
  22. package/dist/cjs/types/validation.js +72 -9
  23. package/dist/cjs/types/validation.js.map +1 -1
  24. package/dist/cjs/validations/compensation-hook.js +203 -0
  25. package/dist/cjs/validations/compensation-hook.js.map +1 -0
  26. package/dist/cjs/validations/evm-caveats.js +4 -14
  27. package/dist/cjs/validations/evm-caveats.js.map +1 -1
  28. package/dist/cjs/validations/evm-op-budget.js +3 -3
  29. package/dist/cjs/validations/evm-op-budget.js.map +1 -1
  30. package/dist/cjs/validations/evm-op-hook.js +410 -3
  31. package/dist/cjs/validations/evm-op-hook.js.map +1 -1
  32. package/dist/cjs/validations/evm-op-wrap.js +3 -3
  33. package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
  34. package/dist/cjs/validations/evm-required-actions.js +4 -6
  35. package/dist/cjs/validations/evm-required-actions.js.map +1 -1
  36. package/dist/cjs/validations/evm-sign712-metamask.js +17 -94
  37. package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
  38. package/dist/cjs/validations/evm-sign712-shared.js +116 -0
  39. package/dist/cjs/validations/evm-sign712-shared.js.map +1 -0
  40. package/dist/cjs/validations/evm-sign7702.js +34 -22
  41. package/dist/cjs/validations/evm-sign7702.js.map +1 -1
  42. package/dist/cjs/validations/hooks-common.js +247 -35
  43. package/dist/cjs/validations/hooks-common.js.map +1 -1
  44. package/dist/cjs/validations/intent-destinations.js +197 -0
  45. package/dist/cjs/validations/intent-destinations.js.map +1 -0
  46. package/dist/cjs/validations/intent-tokens.js +341 -0
  47. package/dist/cjs/validations/intent-tokens.js.map +1 -0
  48. package/dist/cjs/validations/intent.js +288 -0
  49. package/dist/cjs/validations/intent.js.map +1 -0
  50. package/dist/cjs/validations/required-actions.js +2 -5
  51. package/dist/cjs/validations/required-actions.js.map +1 -1
  52. package/dist/cjs/validations/solana-hook.js +32 -18
  53. package/dist/cjs/validations/solana-hook.js.map +1 -1
  54. package/dist/cjs/validations/trades.js +5 -0
  55. package/dist/cjs/validations/trades.js.map +1 -1
  56. package/dist/cjs/validator.js +11 -16
  57. package/dist/cjs/validator.js.map +1 -1
  58. package/dist/cjs/whitelists/environment-config.js +47 -28
  59. package/dist/cjs/whitelists/environment-config.js.map +1 -1
  60. package/dist/cjs/whitelists/evm/caveat-enforcers.js +21 -5
  61. package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -1
  62. package/dist/cjs/whitelists/evm/delegation-manager.js +7 -2
  63. package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -1
  64. package/dist/cjs/whitelists/evm/eip7702-delegation.js +7 -2
  65. package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -1
  66. package/dist/cjs/whitelists/evm/index.js +14 -1
  67. package/dist/cjs/whitelists/evm/index.js.map +1 -1
  68. package/dist/cjs/whitelists/evm/metamask-delegation-chains.js +16 -0
  69. package/dist/cjs/whitelists/evm/metamask-delegation-chains.js.map +1 -0
  70. package/dist/cjs/whitelists/evm/permit2.js +16 -12
  71. package/dist/cjs/whitelists/evm/permit2.js.map +1 -1
  72. package/dist/cjs/whitelists/evm/weth.js +16 -5
  73. package/dist/cjs/whitelists/evm/weth.js.map +1 -1
  74. package/dist/cjs/whitelists/solana/intent-signature.js +0 -1
  75. package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -1
  76. package/dist/cjs/whitelists/subscription-to-chain-id.js +10 -0
  77. package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -1
  78. package/dist/cjs/whitelists/types.js +13 -3
  79. package/dist/cjs/whitelists/types.js.map +1 -1
  80. package/dist/esm/helpers/address.js +28 -17
  81. package/dist/esm/helpers/address.js.map +1 -1
  82. package/dist/esm/helpers/evm-action.js +3 -3
  83. package/dist/esm/helpers/evm-action.js.map +1 -1
  84. package/dist/esm/helpers/evm-gas-compensation-tx.js +99 -0
  85. package/dist/esm/helpers/evm-gas-compensation-tx.js.map +1 -0
  86. package/dist/esm/helpers/evm-intent-id.js +1 -1
  87. package/dist/esm/helpers/evm-intent-id.js.map +1 -1
  88. package/dist/esm/helpers/gas-compensation.js +33 -0
  89. package/dist/esm/helpers/gas-compensation.js.map +1 -0
  90. package/dist/esm/helpers/placeholder.js +168 -0
  91. package/dist/esm/helpers/placeholder.js.map +1 -0
  92. package/dist/esm/helpers/sets.js +10 -0
  93. package/dist/esm/helpers/sets.js.map +1 -0
  94. package/dist/esm/types/enums.js +25 -1
  95. package/dist/esm/types/enums.js.map +1 -1
  96. package/dist/esm/types/request.js +26 -3
  97. package/dist/esm/types/request.js.map +1 -1
  98. package/dist/esm/types/response.js +118 -2
  99. package/dist/esm/types/response.js.map +1 -1
  100. package/dist/esm/types/validation.js +72 -9
  101. package/dist/esm/types/validation.js.map +1 -1
  102. package/dist/esm/validations/compensation-hook.js +200 -0
  103. package/dist/esm/validations/compensation-hook.js.map +1 -0
  104. package/dist/esm/validations/evm-caveats.js +4 -14
  105. package/dist/esm/validations/evm-caveats.js.map +1 -1
  106. package/dist/esm/validations/evm-op-budget.js +3 -3
  107. package/dist/esm/validations/evm-op-budget.js.map +1 -1
  108. package/dist/esm/validations/evm-op-hook.js +409 -2
  109. package/dist/esm/validations/evm-op-hook.js.map +1 -1
  110. package/dist/esm/validations/evm-op-wrap.js +3 -3
  111. package/dist/esm/validations/evm-op-wrap.js.map +1 -1
  112. package/dist/esm/validations/evm-required-actions.js +4 -6
  113. package/dist/esm/validations/evm-required-actions.js.map +1 -1
  114. package/dist/esm/validations/evm-sign712-metamask.js +17 -94
  115. package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
  116. package/dist/esm/validations/evm-sign712-shared.js +110 -0
  117. package/dist/esm/validations/evm-sign712-shared.js.map +1 -0
  118. package/dist/esm/validations/evm-sign7702.js +33 -22
  119. package/dist/esm/validations/evm-sign7702.js.map +1 -1
  120. package/dist/esm/validations/hooks-common.js +246 -36
  121. package/dist/esm/validations/hooks-common.js.map +1 -1
  122. package/dist/esm/validations/intent-destinations.js +194 -0
  123. package/dist/esm/validations/intent-destinations.js.map +1 -0
  124. package/dist/esm/validations/intent-tokens.js +338 -0
  125. package/dist/esm/validations/intent-tokens.js.map +1 -0
  126. package/dist/esm/validations/intent.js +285 -0
  127. package/dist/esm/validations/intent.js.map +1 -0
  128. package/dist/esm/validations/required-actions.js +2 -5
  129. package/dist/esm/validations/required-actions.js.map +1 -1
  130. package/dist/esm/validations/solana-hook.js +34 -20
  131. package/dist/esm/validations/solana-hook.js.map +1 -1
  132. package/dist/esm/validations/trades.js +5 -0
  133. package/dist/esm/validations/trades.js.map +1 -1
  134. package/dist/esm/validator.js +11 -16
  135. package/dist/esm/validator.js.map +1 -1
  136. package/dist/esm/whitelists/environment-config.js +47 -28
  137. package/dist/esm/whitelists/environment-config.js.map +1 -1
  138. package/dist/esm/whitelists/evm/caveat-enforcers.js +20 -4
  139. package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -1
  140. package/dist/esm/whitelists/evm/delegation-manager.js +6 -1
  141. package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -1
  142. package/dist/esm/whitelists/evm/eip7702-delegation.js +6 -1
  143. package/dist/esm/whitelists/evm/eip7702-delegation.js.map +1 -1
  144. package/dist/esm/whitelists/evm/index.js +4 -4
  145. package/dist/esm/whitelists/evm/index.js.map +1 -1
  146. package/dist/esm/whitelists/evm/metamask-delegation-chains.js +13 -0
  147. package/dist/esm/whitelists/evm/metamask-delegation-chains.js.map +1 -0
  148. package/dist/esm/whitelists/evm/permit2.js +9 -5
  149. package/dist/esm/whitelists/evm/permit2.js.map +1 -1
  150. package/dist/esm/whitelists/evm/weth.js +16 -5
  151. package/dist/esm/whitelists/evm/weth.js.map +1 -1
  152. package/dist/esm/whitelists/solana/intent-signature.js +0 -1
  153. package/dist/esm/whitelists/solana/intent-signature.js.map +1 -1
  154. package/dist/esm/whitelists/subscription-to-chain-id.js +9 -0
  155. package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -1
  156. package/dist/esm/whitelists/types.js +14 -5
  157. package/dist/esm/whitelists/types.js.map +1 -1
  158. package/dist/types/helpers/address.d.ts +5 -7
  159. package/dist/types/helpers/address.d.ts.map +1 -1
  160. package/dist/types/helpers/evm-gas-compensation-tx.d.ts +13 -0
  161. package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +1 -0
  162. package/dist/types/helpers/gas-compensation.d.ts +10 -0
  163. package/dist/types/helpers/gas-compensation.d.ts.map +1 -0
  164. package/dist/types/helpers/placeholder.d.ts +41 -0
  165. package/dist/types/helpers/placeholder.d.ts.map +1 -0
  166. package/dist/types/helpers/sets.d.ts +2 -0
  167. package/dist/types/helpers/sets.d.ts.map +1 -0
  168. package/dist/types/types/enums.d.ts +19 -1
  169. package/dist/types/types/enums.d.ts.map +1 -1
  170. package/dist/types/types/request.d.ts +19 -9
  171. package/dist/types/types/request.d.ts.map +1 -1
  172. package/dist/types/types/response.d.ts +365 -9
  173. package/dist/types/types/response.d.ts.map +1 -1
  174. package/dist/types/types/validation.d.ts +65 -10
  175. package/dist/types/types/validation.d.ts.map +1 -1
  176. package/dist/types/validations/compensation-hook.d.ts +3 -0
  177. package/dist/types/validations/compensation-hook.d.ts.map +1 -0
  178. package/dist/types/validations/evm-caveats.d.ts.map +1 -1
  179. package/dist/types/validations/evm-op-hook.d.ts +4 -2
  180. package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
  181. package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
  182. package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
  183. package/dist/types/validations/evm-sign712-shared.d.ts +7 -0
  184. package/dist/types/validations/evm-sign712-shared.d.ts.map +1 -0
  185. package/dist/types/validations/evm-sign7702.d.ts +2 -1
  186. package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
  187. package/dist/types/validations/hooks-common.d.ts +1 -0
  188. package/dist/types/validations/hooks-common.d.ts.map +1 -1
  189. package/dist/types/validations/intent-destinations.d.ts +4 -0
  190. package/dist/types/validations/intent-destinations.d.ts.map +1 -0
  191. package/dist/types/validations/intent-tokens.d.ts +4 -0
  192. package/dist/types/validations/intent-tokens.d.ts.map +1 -0
  193. package/dist/types/validations/intent.d.ts +5 -0
  194. package/dist/types/validations/intent.d.ts.map +1 -0
  195. package/dist/types/validations/required-actions.d.ts +2 -1
  196. package/dist/types/validations/required-actions.d.ts.map +1 -1
  197. package/dist/types/validations/solana-hook.d.ts +4 -2
  198. package/dist/types/validations/solana-hook.d.ts.map +1 -1
  199. package/dist/types/validator.d.ts.map +1 -1
  200. package/dist/types/whitelists/environment-config.d.ts.map +1 -1
  201. package/dist/types/whitelists/evm/caveat-enforcers.d.ts +8 -0
  202. package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -1
  203. package/dist/types/whitelists/evm/delegation-manager.d.ts +2 -0
  204. package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -1
  205. package/dist/types/whitelists/evm/eip7702-delegation.d.ts +2 -0
  206. package/dist/types/whitelists/evm/eip7702-delegation.d.ts.map +1 -1
  207. package/dist/types/whitelists/evm/index.d.ts +4 -4
  208. package/dist/types/whitelists/evm/index.d.ts.map +1 -1
  209. package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts +3 -0
  210. package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts.map +1 -0
  211. package/dist/types/whitelists/evm/permit2.d.ts +1 -0
  212. package/dist/types/whitelists/evm/permit2.d.ts.map +1 -1
  213. package/dist/types/whitelists/evm/weth.d.ts.map +1 -1
  214. package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -1
  215. package/dist/types/whitelists/subscription-to-chain-id.d.ts +1 -0
  216. package/dist/types/whitelists/subscription-to-chain-id.d.ts.map +1 -1
  217. package/dist/types/whitelists/types.d.ts +1 -1
  218. package/dist/types/whitelists/types.d.ts.map +1 -1
  219. package/package.json +2 -2
  220. package/dist/cjs/validations/evm-op-gas-compensation.js +0 -152
  221. package/dist/cjs/validations/evm-op-gas-compensation.js.map +0 -1
  222. package/dist/esm/validations/evm-op-gas-compensation.js +0 -149
  223. package/dist/esm/validations/evm-op-gas-compensation.js.map +0 -1
  224. package/dist/types/validations/evm-op-gas-compensation.d.ts +0 -3
  225. package/dist/types/validations/evm-op-gas-compensation.d.ts.map +0 -1
@@ -1,12 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HookMode = void 0;
3
4
  exports.validateHooks = validateHooks;
4
5
  const types_1 = require("../types");
5
6
  const enums_1 = require("../types/enums");
7
+ const address_1 = require("../helpers/address");
8
+ const gas_compensation_1 = require("../helpers/gas-compensation");
9
+ const placeholder_1 = require("../helpers/placeholder");
6
10
  const solana_hook_1 = require("./solana-hook");
7
- // Both EVM and Solana use identical string values for hook operations
8
- const HOOK_OPERATIONS = ["Hook", "GasCompensation"];
9
- const HOOK_OPERATIONS_SET = new Set(HOOK_OPERATIONS);
11
+ const evm_op_hook_1 = require("./evm-op-hook");
12
+ const compensation_hook_1 = require("./compensation-hook");
13
+ const subscription_to_chain_id_1 = require("../whitelists/subscription-to-chain-id");
14
+ // Re-exported so call sites can pass the mode without importing from helpers.
15
+ var placeholder_2 = require("../helpers/placeholder");
16
+ Object.defineProperty(exports, "HookMode", { enumerable: true, get: function () { return placeholder_2.HookMode; } });
17
+ // Allowed hook-scope operations — each chain checked against its own enum.
18
+ const EVM_HOOK_OPERATIONS = [
19
+ enums_1.EvmActionOperation.Delegate,
20
+ enums_1.EvmActionOperation.Hook,
21
+ enums_1.EvmActionOperation.GasCompensation,
22
+ ];
23
+ const EVM_HOOK_OPERATIONS_SET = new Set(EVM_HOOK_OPERATIONS);
24
+ const SOLANA_HOOK_OPERATIONS = [
25
+ enums_1.SolanaActionOperation.Hook,
26
+ enums_1.SolanaActionOperation.GasCompensation,
27
+ ];
28
+ const SOLANA_HOOK_OPERATIONS_SET = new Set(SOLANA_HOOK_OPERATIONS);
10
29
  function validateHooks(request, response, quoteMode) {
11
30
  return [
12
31
  ...validateHookAAConstraint(request, response),
@@ -40,20 +59,26 @@ function validateHookAAConstraint(request, response) {
40
59
  }
41
60
  return violations;
42
61
  }
43
- // HIGH: preHooks may contain additional compensation hooks appended by the API,
44
- // so response count must be >= request count.
62
+ // HIGH: preHooks = request.preHooks + one compensation hook per unique
63
+ // gasCompensationInfo group (exact equality — API always adds one per group).
45
64
  // postHooks must match exactly — the API never adds extras to postHooks.
46
65
  function validateHookCounts(request, response) {
47
66
  const violations = [];
48
67
  const requestPreCount = request.preHooks?.length ?? 0;
49
68
  const requestPostCount = request.postHooks?.length ?? 0;
50
- // preHooks: API appends compensation hooks when gasCompensationInfo is present
51
- if (response.preHooks.length < requestPreCount) {
69
+ // preHooks: exactly request.preHooks.length + one per unique gas
70
+ // compensation group. If request has no gasCompensationInfo at all, extras
71
+ // are forbidden (this also guards against MITM adding preHook entries when
72
+ // the user never asked for compensation).
73
+ const compensationGroupCount = (0, gas_compensation_1.extractGasCompensationGroups)(request).length;
74
+ const expectedPreCount = requestPreCount + compensationGroupCount;
75
+ if (response.preHooks.length !== expectedPreCount) {
52
76
  violations.push({
53
77
  code: types_1.ViolationCode.HookCountMismatch,
54
- message: "response.preHooks count is less than request.preHooks count",
78
+ message: "response.preHooks count does not match"
79
+ + " request.preHooks.length + unique gasCompensationInfo groups",
55
80
  path: "response.preHooks",
56
- expected: requestPreCount,
81
+ expected: expectedPreCount,
57
82
  actual: response.preHooks.length,
58
83
  });
59
84
  }
@@ -77,7 +102,7 @@ function validatePreHooks(request, response, quoteMode) {
77
102
  const basePath = `response.preHooks[${i}]`;
78
103
  const hookPayload = response.preHooks[i];
79
104
  const requestHook = requestHooks[i];
80
- violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode));
105
+ violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, response.trades, placeholder_1.HookMode.PreHooks, quoteMode));
81
106
  }
82
107
  return violations;
83
108
  }
@@ -89,31 +114,153 @@ function validatePostHooks(request, response, quoteMode) {
89
114
  const hookPayload = response.postHooks[i];
90
115
  // User postHooks are matched by index; extra entries are compensation hooks
91
116
  const requestHook = i < requestHooks.length ? requestHooks[i] : undefined;
92
- violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode));
117
+ violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, response.trades, placeholder_1.HookMode.PostHooks, quoteMode));
93
118
  }
94
119
  return violations;
95
120
  }
96
- function validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode) {
121
+ function validateSingleHookPayload(hookPayload, requestHook, basePath, request, responseTrades, mode, quoteMode) {
122
+ const isCompensationPreHook = requestHook === undefined && mode === placeholder_1.HookMode.PreHooks;
97
123
  return [
98
- ...validateHookEcho(hookPayload, requestHook, basePath),
124
+ ...validateHookEcho(hookPayload, requestHook, basePath, responseTrades, mode),
99
125
  ...validateHookUniqueActionIds(hookPayload, basePath),
100
126
  ...validateHookActionsList(hookPayload, basePath),
127
+ ...validateHookDelegateOp(hookPayload, basePath),
128
+ ...validateHookSolanaNotDirect(hookPayload, basePath),
101
129
  ...validateGasCompensationRequiresInfo(hookPayload, basePath, request),
102
- ...dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request),
130
+ ...(isCompensationPreHook
131
+ ? (0, compensation_hook_1.validateCompensationHookStructure)(hookPayload, basePath, request)
132
+ : []),
133
+ ...dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request, mode, responseTrades),
103
134
  ];
104
135
  }
105
- // CRITICAL: response hook must echo back the request hook exactly
106
- function validateHookEcho(hookPayload, requestHook, basePath) {
107
- if (!requestHook)
136
+ // MEDIUM: Solana hooks must not be of type 'direct'.
137
+ function validateHookSolanaNotDirect(hookPayload, basePath) {
138
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(hookPayload.hook.chainId);
139
+ if ((0, address_1.getChainEngine)(realChainId) !== enums_1.ChainEngine.Solana)
108
140
  return [];
109
- if (JSON.stringify(hookPayload.hook) !== JSON.stringify(requestHook)) {
110
- return [{
111
- code: types_1.ViolationCode.HookEchoMismatch,
112
- message: "response hook does not match request hook",
113
- path: `${basePath}.hook`,
114
- expected: requestHook,
115
- actual: hookPayload.hook,
116
- }];
141
+ if (hookPayload.hook.type !== enums_1.BundleHookType.Direct)
142
+ return [];
143
+ return [{
144
+ code: types_1.ViolationCode.HookSolanaCannotBeDirect,
145
+ message: "Solana hooks cannot be of type 'direct'",
146
+ path: `${basePath}.hook.type`,
147
+ expected: enums_1.BundleHookType.Delegated,
148
+ actual: hookPayload.hook.type,
149
+ }];
150
+ }
151
+ // CRITICAL: response hook must echo back the request hook field-by-field.
152
+ // Notes:
153
+ // - hook.data in the response has eager placeholders resolved (deferred markers kept).
154
+ // We apply the same resolution to request.data and compare.
155
+ // - For Solana hooks the API deletes `to` and `value` in the echo; we skip those.
156
+ // - For EVM hooks `value` is copied from request as-is (eager resolution is not
157
+ // reflected in the echoed value — only in internal txData used by requiredActions).
158
+ function validateHookEcho(hookPayload, requestHook, basePath, responseTrades, mode) {
159
+ // Missing request counterpart — two shapes, both are MITM-safe:
160
+ // (a) preHook with `i >= request.preHooks.length`:
161
+ // legitimate case — compensation hook appended by the API.
162
+ // MITM case — attacker injects an arbitrary preHook.
163
+ // The echo-by-field check can't distinguish them (there's no request
164
+ // to compare against), so we delegate to the structural compensation
165
+ // check.
166
+ // (b) postHook with `i >= request.postHooks.length`:
167
+ // no legitimate case — the API never appends to postHooks. So we
168
+ // produce a violation.
169
+ if (!requestHook) {
170
+ if (mode === placeholder_1.HookMode.PostHooks) {
171
+ return [{
172
+ code: types_1.ViolationCode.UnexpectedPostHook,
173
+ message: "response.postHooks contains an entry with no matching"
174
+ + " request postHook",
175
+ path: `${basePath}.hook`,
176
+ actual: hookPayload.hook,
177
+ }];
178
+ }
179
+ return [];
180
+ }
181
+ const echoed = hookPayload.hook;
182
+ const chainId = requestHook.chainId;
183
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(chainId);
184
+ const isSolana = (0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana;
185
+ const hookPath = `${basePath}.hook`;
186
+ const violations = [];
187
+ // chainId — strict number equality (subscriptionId on both sides)
188
+ if (echoed.chainId !== chainId) {
189
+ violations.push(echoMismatch(`${hookPath}.chainId`, requestHook.chainId, echoed.chainId));
190
+ }
191
+ // from — address equality
192
+ if (!(0, address_1.addressEquals)(realChainId, echoed.from, requestHook.from)) {
193
+ violations.push(echoMismatch(`${hookPath}.from`, requestHook.from, echoed.from));
194
+ }
195
+ // isAtomic — strict boolean
196
+ if (echoed.isAtomic !== requestHook.isAtomic) {
197
+ violations.push(echoMismatch(`${hookPath}.isAtomic`, requestHook.isAtomic, echoed.isAtomic));
198
+ }
199
+ // to, value — chain-dependent.
200
+ // Solana: API deletes both from the echo; skip entirely.
201
+ // EVM: compare as-is (value is not modified by placeholder resolution).
202
+ if (!isSolana) {
203
+ violations.push(...compareOptionalAddress(realChainId, `${hookPath}.to`, requestHook.to, echoed.to));
204
+ violations.push(...compareOptionalString(`${hookPath}.value`, requestHook.value, echoed.value));
205
+ }
206
+ // data — eager placeholders are resolved by the API before echoing.
207
+ const { resolved: expectedData, errors } = (0, placeholder_1.resolveEagerPlaceholders)(requestHook.data, realChainId, requestHook.placeHolders, responseTrades, mode);
208
+ for (const error of errors) {
209
+ const reasonText = placeholder_1.PlaceholderResolutionErrorReason[error.reason];
210
+ violations.push({
211
+ code: types_1.ViolationCode.HookPlaceholderResolutionFailed,
212
+ message: `failed to resolve placeholder "${error.nameVariable}"`
213
+ + ` (${reasonText})`,
214
+ path: `${hookPath}.data`,
215
+ actual: { nameVariable: error.nameVariable, reason: reasonText },
216
+ details: error.details,
217
+ });
218
+ }
219
+ if (expectedData !== echoed.data) {
220
+ violations.push(echoMismatch(`${hookPath}.data`, expectedData, echoed.data));
221
+ }
222
+ // placeHolders — deep equality via stringify (same source → same serialization).
223
+ if (JSON.stringify(echoed.placeHolders)
224
+ !== JSON.stringify(requestHook.placeHolders)) {
225
+ violations.push(echoMismatch(`${hookPath}.placeHolders`, requestHook.placeHolders, echoed.placeHolders));
226
+ }
227
+ // gasCompensationInfo — deep equality or both undefined.
228
+ if (JSON.stringify(echoed.gasCompensationInfo)
229
+ !== JSON.stringify(requestHook.gasCompensationInfo)) {
230
+ violations.push(echoMismatch(`${hookPath}.gasCompensationInfo`, requestHook.gasCompensationInfo, echoed.gasCompensationInfo));
231
+ }
232
+ // type — strict equality (or both undefined).
233
+ if (echoed.type !== requestHook.type) {
234
+ violations.push(echoMismatch(`${hookPath}.type`, requestHook.type, echoed.type));
235
+ }
236
+ // gasLimit — strict string equality (or both undefined).
237
+ if (echoed.gasLimit !== requestHook.gasLimit) {
238
+ violations.push(echoMismatch(`${hookPath}.gasLimit`, requestHook.gasLimit, echoed.gasLimit));
239
+ }
240
+ return violations;
241
+ }
242
+ function echoMismatch(path, expected, actual) {
243
+ return {
244
+ code: types_1.ViolationCode.HookEchoMismatch,
245
+ message: "response hook field does not match request",
246
+ path,
247
+ expected,
248
+ actual,
249
+ };
250
+ }
251
+ function compareOptionalString(path, expected, actual) {
252
+ if (expected === actual)
253
+ return [];
254
+ return [echoMismatch(path, expected, actual)];
255
+ }
256
+ function compareOptionalAddress(chainId, path, expected, actual) {
257
+ if (expected === undefined && actual === undefined)
258
+ return [];
259
+ if (expected === undefined || actual === undefined) {
260
+ return [echoMismatch(path, expected, actual)];
261
+ }
262
+ if (!(0, address_1.addressEquals)(chainId, expected, actual)) {
263
+ return [echoMismatch(path, expected, actual)];
117
264
  }
118
265
  return [];
119
266
  }
@@ -141,6 +288,10 @@ function validateHookUniqueActionIds(hookPayload, basePath) {
141
288
  }
142
289
  // HIGH: each hook required action must have exactly one operation: [Hook] or [GasCompensation]
143
290
  function validateHookActionsList(hookPayload, basePath) {
291
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(hookPayload.hook.chainId);
292
+ const isSolana = (0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana;
293
+ const allowedSet = isSolana ? SOLANA_HOOK_OPERATIONS_SET : EVM_HOOK_OPERATIONS_SET;
294
+ const allowedList = isSolana ? SOLANA_HOOK_OPERATIONS : EVM_HOOK_OPERATIONS;
144
295
  const violations = [];
145
296
  for (let i = 0; i < hookPayload.requiredActions.length; i++) {
146
297
  const action = hookPayload.requiredActions[i];
@@ -155,26 +306,85 @@ function validateHookActionsList(hookPayload, basePath) {
155
306
  });
156
307
  continue;
157
308
  }
158
- if (!HOOK_OPERATIONS_SET.has(action.actions[0])) {
309
+ if (!allowedSet.has(action.actions[0])) {
159
310
  violations.push({
160
311
  code: types_1.ViolationCode.HookActionsInvalid,
161
312
  message: "hook required action operation must be Hook"
162
313
  + " or GasCompensation",
163
314
  path: `${actionPath}.actions`,
164
- expected: HOOK_OPERATIONS,
315
+ expected: allowedList,
165
316
  actual: action.actions,
166
317
  });
167
318
  }
168
319
  }
169
320
  return violations;
170
321
  }
322
+ // HIGH: Delegate-op constraints for EVM hook requiredActions.
323
+ // * `Delegate` may appear at most once.
324
+ // * If present, it must be the first required action (the API emits
325
+ // Sign7702Authorization → Sign712MetaMaskCaveats* in this order).
326
+ // * Direct hooks (`hook.type === 'direct'`) must not contain `Delegate`
327
+ // (Direct mode skips EIP-7702 delegation entirely).
328
+ // Solana hooks bypass this check — `Delegate` is rejected upstream by
329
+ // `validateHookActionsList`.
330
+ function validateHookDelegateOp(hookPayload, basePath) {
331
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(hookPayload.hook.chainId);
332
+ if ((0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana)
333
+ return [];
334
+ const indices = [];
335
+ for (let i = 0; i < hookPayload.requiredActions.length; i++) {
336
+ const action = hookPayload.requiredActions[i];
337
+ const ops = action.actions;
338
+ if (ops.includes(enums_1.EvmActionOperation.Delegate)) {
339
+ indices.push(i);
340
+ }
341
+ }
342
+ if (indices.length === 0)
343
+ return [];
344
+ const violations = [];
345
+ if (hookPayload.hook.type === enums_1.BundleHookType.Direct) {
346
+ violations.push({
347
+ code: types_1.ViolationCode.HookDelegateInDirect,
348
+ message: "Direct hook must not contain a Delegate operation"
349
+ + " (Direct mode skips EIP-7702 delegation)",
350
+ path: `${basePath}.requiredActions`,
351
+ actual: indices,
352
+ });
353
+ }
354
+ if (indices.length > 1) {
355
+ violations.push({
356
+ code: types_1.ViolationCode.HookMultipleDelegate,
357
+ message: "hook requiredActions must contain at most one Delegate",
358
+ path: `${basePath}.requiredActions`,
359
+ expected: 1,
360
+ actual: indices,
361
+ });
362
+ }
363
+ if (indices[0] !== 0) {
364
+ violations.push({
365
+ code: types_1.ViolationCode.HookDelegateNotFirst,
366
+ message: "if Delegate is present in hook requiredActions, it must be"
367
+ + " the first action",
368
+ path: `${basePath}.requiredActions[${indices[0]}]`,
369
+ expected: 0,
370
+ actual: indices[0],
371
+ });
372
+ }
373
+ return violations;
374
+ }
171
375
  // CRITICAL: GasCompensation must only appear when gasCompensationInfo exists
172
376
  function validateGasCompensationRequiresInfo(hookPayload, basePath, request) {
173
377
  const hasGasCompensationInfo = (request.preHooks ?? []).some(h => h.gasCompensationInfo !== undefined);
378
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(hookPayload.hook.chainId);
379
+ const isSolana = (0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana;
380
+ const gasCompensationOp = isSolana
381
+ ? enums_1.SolanaActionOperation.GasCompensation
382
+ : enums_1.EvmActionOperation.GasCompensation;
174
383
  const violations = [];
175
384
  for (let i = 0; i < hookPayload.requiredActions.length; i++) {
176
385
  const action = hookPayload.requiredActions[i];
177
- const hasGasCompensation = action.actions.includes("GasCompensation");
386
+ const hasGasCompensation = action.actions
387
+ .includes(gasCompensationOp);
178
388
  if (hasGasCompensation && !hasGasCompensationInfo) {
179
389
  violations.push({
180
390
  code: types_1.ViolationCode.HookGasCompensationWithoutInfo,
@@ -187,18 +397,20 @@ function validateGasCompensationRequiresInfo(hookPayload, basePath, request) {
187
397
  }
188
398
  return violations;
189
399
  }
190
- function dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request) {
191
- const chainId = hookPayload.hook.chainId;
192
- if (chainId === enums_1.ChainId.Solana) {
400
+ function dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request, mode, responseTrades) {
401
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainIdOrSelf)(hookPayload.hook.chainId);
402
+ if ((0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana) {
193
403
  const srcChainAuthorityAddress = findSolanaSrcChainAuthority(request);
194
- return (0, solana_hook_1.validateSolanaHookActions)(hookPayload, requestHook, basePath, quoteMode, srcChainAuthorityAddress, request);
404
+ return (0, solana_hook_1.validateSolanaHookActions)(hookPayload, requestHook, basePath, quoteMode, srcChainAuthorityAddress, request, realChainId, mode, responseTrades);
195
405
  }
196
- // AI: EVM hook validation dispatch will go here when implemented
197
- return [];
406
+ return (0, evm_op_hook_1.validateEvmHookActions)(hookPayload, requestHook, basePath, mode, responseTrades, realChainId, request);
198
407
  }
199
408
  function findSolanaSrcChainAuthority(request) {
200
409
  for (const trade of request.trades) {
201
- if (trade.srcChainId === enums_1.ChainId.Solana) {
410
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.srcChainId);
411
+ if (realChainId === undefined)
412
+ continue;
413
+ if ((0, address_1.getChainEngine)(realChainId) === enums_1.ChainEngine.Solana) {
202
414
  return trade.srcChainAuthorityAddress;
203
415
  }
204
416
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-common.js","sourceRoot":"","sources":["../../../src/validations/hooks-common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks-common.js","sourceRoot":"","sources":["../../../src/validations/hooks-common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateIntentDestinations = validateIntentDestinations;
4
+ const types_1 = require("../types");
5
+ const address_1 = require("../helpers/address");
6
+ const sets_1 = require("../helpers/sets");
7
+ const subscription_to_chain_id_1 = require("../whitelists/subscription-to-chain-id");
8
+ function validateIntentDestinations(intent, group, basePath, quoteMode) {
9
+ // Safe skip: in quote mode receiverDetails/dstAuthorityAddress contain
10
+ // placeholder values per the API contract
11
+ if (quoteMode)
12
+ return [];
13
+ return [
14
+ ...validateDestinationList(intent.receiverDetails, group, trade => trade.dstChainTokenOutRecipient, `${basePath}.receiverDetails`, {
15
+ addressInvalid: types_1.ViolationCode.IntentReceiverDetailsAddressInvalid,
16
+ chainIdsMismatch: types_1.ViolationCode.IntentReceiverDetailsChainIdsMismatch,
17
+ missing: types_1.ViolationCode.IntentReceiverDetailsMissing,
18
+ duplicate: types_1.ViolationCode.IntentReceiverDetailsDuplicate,
19
+ addressChainMismatch: types_1.ViolationCode.IntentReceiverDetailsAddressChainMismatch,
20
+ }, "receiverDetails"),
21
+ ...validateDestinationList(intent.dstAuthorityAddress, group, trade => trade.dstChainAuthorityAddress, `${basePath}.dstAuthorityAddress`, {
22
+ addressInvalid: types_1.ViolationCode.IntentDstAuthorityAddressInvalid,
23
+ chainIdsMismatch: types_1.ViolationCode.IntentDstAuthorityChainIdsMismatch,
24
+ missing: types_1.ViolationCode.IntentDstAuthorityMissing,
25
+ duplicate: types_1.ViolationCode.IntentDstAuthorityDuplicate,
26
+ addressChainMismatch: types_1.ViolationCode.IntentDstAuthorityAddressChainMismatch,
27
+ }, "dstAuthorityAddress"),
28
+ ];
29
+ }
30
+ // CRITICAL: the set of unique addresses in intent.<field>[] must exactly match
31
+ // the set of unique addresses in request.trades[].<pick>, with destinationChainIds
32
+ // containing exactly the chainIds where that address was used.
33
+ function validateDestinationList(details, group, pick, basePath, codes, fieldLabel) {
34
+ const violations = [];
35
+ const list = details ?? [];
36
+ const expected = collectExpectedByAddress(group, pick);
37
+ for (let i = 0; i < list.length; i++) {
38
+ violations.push(...validateAddressChainConsistency(list[i], `${basePath}[${i}]`, codes.addressChainMismatch, fieldLabel));
39
+ }
40
+ const firstOccurrence = buildFirstOccurrence(list, basePath, codes.duplicate, fieldLabel, violations);
41
+ violations.push(...reportMissingAddresses(expected, firstOccurrence, basePath, codes.missing, fieldLabel));
42
+ violations.push(...validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel));
43
+ return violations;
44
+ }
45
+ // Builds address → chainIds map from request trades, mirroring the API's
46
+ // grouping by address.toHexAddress(). Each address gets the full set of
47
+ // chainIds where it was used.
48
+ function collectExpectedByAddress(group, pick) {
49
+ const byAddress = new Map();
50
+ for (const trade of group.trades) {
51
+ const address = pick(trade);
52
+ if (address === undefined)
53
+ continue;
54
+ const dstRealChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.dstChainId);
55
+ // Safe skip: unknown dstChainId is reported by validateTrades
56
+ if (dstRealChainId === undefined)
57
+ continue;
58
+ const normalized = (0, address_1.normalizeAddress)(dstRealChainId, address);
59
+ const existing = byAddress.get(normalized) ?? new Set();
60
+ existing.add(trade.dstChainId);
61
+ byAddress.set(normalized, existing);
62
+ }
63
+ return byAddress;
64
+ }
65
+ // First pass over the response list: detects duplicates and records the
66
+ // first occurrence index per normalized address. Duplicate violations are
67
+ // appended directly to the caller's violations array.
68
+ function buildFirstOccurrence(list, basePath, duplicateCode, fieldLabel, violations) {
69
+ const firstOccurrence = new Map();
70
+ for (let i = 0; i < list.length; i++) {
71
+ const normalized = (0, address_1.normalizeAddressByValue)(list[i].address);
72
+ const earlier = firstOccurrence.get(normalized);
73
+ if (earlier === undefined) {
74
+ firstOccurrence.set(normalized, i);
75
+ continue;
76
+ }
77
+ violations.push({
78
+ code: duplicateCode,
79
+ message: `intent.${fieldLabel}[${i}] duplicates the entry at`
80
+ + ` index ${earlier} — each address must appear once`,
81
+ path: `${basePath}[${i}].address`,
82
+ actual: normalized,
83
+ });
84
+ }
85
+ return firstOccurrence;
86
+ }
87
+ function reportMissingAddresses(expected, firstOccurrence, basePath, missingCode, fieldLabel) {
88
+ const violations = [];
89
+ for (const address of expected.keys()) {
90
+ if (!firstOccurrence.has(address)) {
91
+ violations.push({
92
+ code: missingCode,
93
+ message: `an expected intent.${fieldLabel}[].address is missing`
94
+ + ` from the response`,
95
+ path: basePath,
96
+ expected: address,
97
+ });
98
+ }
99
+ }
100
+ return violations;
101
+ }
102
+ function validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel) {
103
+ const violations = [];
104
+ // Validate each unique entry (duplicates are already reported above)
105
+ for (const [address, i] of firstOccurrence) {
106
+ const entry = list[i];
107
+ const expectedChainIds = expected.get(address);
108
+ if (expectedChainIds === undefined) {
109
+ violations.push({
110
+ code: codes.addressInvalid,
111
+ message: `intent.${fieldLabel}[].address is not present in`
112
+ + ` any request trade for this group`,
113
+ path: `${basePath}[${i}].address`,
114
+ expected: Array.from(expected.keys()),
115
+ actual: address,
116
+ });
117
+ continue;
118
+ }
119
+ violations.push(...validateEntryChainIds(entry, expectedChainIds, `${basePath}[${i}].destinationChainIds`, codes.chainIdsMismatch, fieldLabel));
120
+ }
121
+ return violations;
122
+ }
123
+ // CRITICAL: destinationChainIds must be exactly the set of chainIds where
124
+ // this address was used in the request. The protocol reserves SpecialChainId.Any
125
+ // but the API does not emit it today, so we reject it for now — support will
126
+ // be added when the API starts producing it.
127
+ function validateEntryChainIds(entry, expectedChainIds, path, code, fieldLabel) {
128
+ if (entry.destinationChainIds === types_1.SpecialChainId.Any) {
129
+ return [{
130
+ code,
131
+ message: `intent.${fieldLabel}[].destinationChainIds must be a concrete`
132
+ + ` list of chainIds. SpecialChainId.Any is reserved by the`
133
+ + ` protocol but not yet emitted by the API.`,
134
+ path,
135
+ expected: sortChainIds(expectedChainIds),
136
+ actual: entry.destinationChainIds,
137
+ }];
138
+ }
139
+ const actualChainIds = new Set(entry.destinationChainIds);
140
+ if ((0, sets_1.setsEqual)(actualChainIds, expectedChainIds))
141
+ return [];
142
+ return [{
143
+ code,
144
+ message: `intent.${fieldLabel}[].destinationChainIds must contain exactly`
145
+ + ` the chainIds where this address was used in request`
146
+ + ` (no missing, no extras)`,
147
+ path,
148
+ expected: sortChainIds(expectedChainIds),
149
+ actual: entry.destinationChainIds,
150
+ }];
151
+ }
152
+ function sortChainIds(set) {
153
+ return Array.from(set).sort((a, b) => a - b);
154
+ }
155
+ // CRITICAL: all chainIds in destinationChainIds (unless set to "any") must
156
+ // share the same address format (engine), and entry.address must be in that format.
157
+ // MITM could otherwise return, e.g., destinationChainIds=[Ethereum, Solana]
158
+ // with an EVM address, which is impossible because one string can't be valid on both.
159
+ function validateAddressChainConsistency(entry, basePath, code, fieldLabel) {
160
+ if (entry.destinationChainIds === types_1.SpecialChainId.Any)
161
+ return [];
162
+ const engines = new Set();
163
+ for (const chainId of entry.destinationChainIds) {
164
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainId)(chainId);
165
+ // Safe skip: unknown dstChainId is reported by validateTrades
166
+ if (realChainId === undefined)
167
+ continue;
168
+ engines.add((0, address_1.getChainEngine)(realChainId));
169
+ }
170
+ if (engines.size === 0)
171
+ return [];
172
+ if (engines.size > 1) {
173
+ return [{
174
+ code,
175
+ message: `intent.${fieldLabel}[].destinationChainIds spans multiple`
176
+ + ` chain engines — a single address cannot be valid across`
177
+ + ` different engines (EVM / Solana / Tron / etc.)`,
178
+ path: `${basePath}.destinationChainIds`,
179
+ actual: entry.destinationChainIds,
180
+ }];
181
+ }
182
+ const expectedEngine = engines.values().next().value;
183
+ const actualEngine = (0, address_1.detectChainEngine)(entry.address);
184
+ if (expectedEngine !== actualEngine) {
185
+ return [{
186
+ code,
187
+ message: `intent.${fieldLabel}[].address format (${types_1.ChainEngine[actualEngine]})`
188
+ + ` does not match the chain engine of destinationChainIds`
189
+ + ` (${types_1.ChainEngine[expectedEngine]})`,
190
+ path: `${basePath}.address`,
191
+ expected: { format: types_1.ChainEngine[expectedEngine] },
192
+ actual: { address: entry.address, format: types_1.ChainEngine[actualEngine] },
193
+ }];
194
+ }
195
+ return [];
196
+ }
197
+ //# sourceMappingURL=intent-destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-destinations.js","sourceRoot":"","sources":["../../../src/validations/intent-destinations.ts"],"names":[],"mappings":"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"}