@rabby-wallet/rabby-bridge 0.0.13-alpha.0 → 0.0.13

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 (198) hide show
  1. package/README.md +1 -131
  2. package/dist/chains.d.ts +2 -1
  3. package/dist/chains.js +2 -0
  4. package/dist/data.d.ts +3 -0
  5. package/dist/data.js +3 -0
  6. package/dist/index.d.ts +1 -7
  7. package/dist/index.js +0 -3
  8. package/dist/quote.d.ts +4 -18
  9. package/dist/quote.js +65 -282
  10. package/package.json +3 -13
  11. package/dist/calldata/abi.d.ts +0 -29
  12. package/dist/calldata/abi.js +0 -160
  13. package/dist/calldata/across/deposit.d.ts +0 -2
  14. package/dist/calldata/across/deposit.js +0 -36
  15. package/dist/calldata/across/depositNative.d.ts +0 -2
  16. package/dist/calldata/across/depositNative.js +0 -45
  17. package/dist/calldata/across/depositNow.d.ts +0 -2
  18. package/dist/calldata/across/depositNow.js +0 -35
  19. package/dist/calldata/across/depositV3.d.ts +0 -2
  20. package/dist/calldata/across/depositV3.js +0 -35
  21. package/dist/calldata/across/depositV3Now.d.ts +0 -2
  22. package/dist/calldata/across/depositV3Now.js +0 -34
  23. package/dist/calldata/across/index.d.ts +0 -4
  24. package/dist/calldata/across/index.js +0 -31
  25. package/dist/calldata/across/swapAndBridge.d.ts +0 -2
  26. package/dist/calldata/across/swapAndBridge.js +0 -70
  27. package/dist/calldata/across/validate.d.ts +0 -3
  28. package/dist/calldata/across/validate.js +0 -30
  29. package/dist/calldata/chains.d.ts +0 -2
  30. package/dist/calldata/chains.js +0 -35
  31. package/dist/calldata/destination.d.ts +0 -6
  32. package/dist/calldata/destination.js +0 -148
  33. package/dist/calldata/diagnostics.d.ts +0 -4
  34. package/dist/calldata/diagnostics.js +0 -18
  35. package/dist/calldata/expect.d.ts +0 -25
  36. package/dist/calldata/expect.js +0 -129
  37. package/dist/calldata/hex.d.ts +0 -6
  38. package/dist/calldata/hex.js +0 -46
  39. package/dist/calldata/index.d.ts +0 -20
  40. package/dist/calldata/index.js +0 -85
  41. package/dist/calldata/lifi/across/acrossV4Erc20Min.d.ts +0 -2
  42. package/dist/calldata/lifi/across/acrossV4Erc20Min.js +0 -26
  43. package/dist/calldata/lifi/across/acrossV4NativeMin.d.ts +0 -2
  44. package/dist/calldata/lifi/across/acrossV4NativeMin.js +0 -22
  45. package/dist/calldata/lifi/across/index.d.ts +0 -6
  46. package/dist/calldata/lifi/across/index.js +0 -19
  47. package/dist/calldata/lifi/allbridge/index.d.ts +0 -3
  48. package/dist/calldata/lifi/allbridge/index.js +0 -26
  49. package/dist/calldata/lifi/celer/index.d.ts +0 -4
  50. package/dist/calldata/lifi/celer/index.js +0 -10
  51. package/dist/calldata/lifi/centrifuge/index.d.ts +0 -3
  52. package/dist/calldata/lifi/centrifuge/index.js +0 -22
  53. package/dist/calldata/lifi/frax/index.d.ts +0 -4
  54. package/dist/calldata/lifi/frax/index.js +0 -29
  55. package/dist/calldata/lifi/garden/index.d.ts +0 -3
  56. package/dist/calldata/lifi/garden/index.js +0 -22
  57. package/dist/calldata/lifi/gaszip/index.d.ts +0 -6
  58. package/dist/calldata/lifi/gaszip/index.js +0 -15
  59. package/dist/calldata/lifi/index.d.ts +0 -4
  60. package/dist/calldata/lifi/index.js +0 -60
  61. package/dist/calldata/lifi/intents/index.d.ts +0 -4
  62. package/dist/calldata/lifi/intents/index.js +0 -10
  63. package/dist/calldata/lifi/layerswap/index.d.ts +0 -4
  64. package/dist/calldata/lifi/layerswap/index.js +0 -10
  65. package/dist/calldata/lifi/m0/index.d.ts +0 -3
  66. package/dist/calldata/lifi/m0/index.js +0 -33
  67. package/dist/calldata/lifi/mayan/index.d.ts +0 -4
  68. package/dist/calldata/lifi/mayan/index.js +0 -10
  69. package/dist/calldata/lifi/method.d.ts +0 -6
  70. package/dist/calldata/lifi/method.js +0 -16
  71. package/dist/calldata/lifi/native/index.d.ts +0 -4
  72. package/dist/calldata/lifi/native/index.js +0 -80
  73. package/dist/calldata/lifi/params.d.ts +0 -30
  74. package/dist/calldata/lifi/params.js +0 -370
  75. package/dist/calldata/lifi/paxos/index.d.ts +0 -4
  76. package/dist/calldata/lifi/paxos/index.js +0 -10
  77. package/dist/calldata/lifi/polymer/index.d.ts +0 -4
  78. package/dist/calldata/lifi/polymer/index.js +0 -10
  79. package/dist/calldata/lifi/relay/index.d.ts +0 -6
  80. package/dist/calldata/lifi/relay/index.js +0 -15
  81. package/dist/calldata/lifi/shape.d.ts +0 -4
  82. package/dist/calldata/lifi/shape.js +0 -31
  83. package/dist/calldata/lifi/squid/index.d.ts +0 -6
  84. package/dist/calldata/lifi/squid/index.js +0 -15
  85. package/dist/calldata/lifi/stargate/index.d.ts +0 -5
  86. package/dist/calldata/lifi/stargate/index.js +0 -15
  87. package/dist/calldata/lifi/swap/index.d.ts +0 -5
  88. package/dist/calldata/lifi/swap/index.js +0 -18
  89. package/dist/calldata/lifi/swap/swapMethod.d.ts +0 -2
  90. package/dist/calldata/lifi/swap/swapMethod.js +0 -40
  91. package/dist/calldata/match.d.ts +0 -3
  92. package/dist/calldata/match.js +0 -21
  93. package/dist/calldata/mayan/destination.d.ts +0 -2
  94. package/dist/calldata/mayan/destination.js +0 -13
  95. package/dist/calldata/mayan/fastMctpBridge.d.ts +0 -3
  96. package/dist/calldata/mayan/fastMctpBridge.js +0 -43
  97. package/dist/calldata/mayan/fastMctpCreateOrder.d.ts +0 -3
  98. package/dist/calldata/mayan/fastMctpCreateOrder.js +0 -39
  99. package/dist/calldata/mayan/forward.d.ts +0 -8
  100. package/dist/calldata/mayan/forward.js +0 -35
  101. package/dist/calldata/mayan/forwardERC20.d.ts +0 -2
  102. package/dist/calldata/mayan/forwardERC20.js +0 -19
  103. package/dist/calldata/mayan/forwardEth.d.ts +0 -2
  104. package/dist/calldata/mayan/forwardEth.js +0 -16
  105. package/dist/calldata/mayan/index.d.ts +0 -4
  106. package/dist/calldata/mayan/index.js +0 -21
  107. package/dist/calldata/mayan/mctp.d.ts +0 -5
  108. package/dist/calldata/mayan/mctp.js +0 -41
  109. package/dist/calldata/mayan/readProtocol.d.ts +0 -2
  110. package/dist/calldata/mayan/readProtocol.js +0 -29
  111. package/dist/calldata/mayan/swapAndForwardERC20.d.ts +0 -2
  112. package/dist/calldata/mayan/swapAndForwardERC20.js +0 -24
  113. package/dist/calldata/mayan/swapAndForwardEth.d.ts +0 -2
  114. package/dist/calldata/mayan/swapAndForwardEth.js +0 -23
  115. package/dist/calldata/mayan/swiftCreateOrder.d.ts +0 -3
  116. package/dist/calldata/mayan/swiftCreateOrder.js +0 -49
  117. package/dist/calldata/mayan/validate.d.ts +0 -3
  118. package/dist/calldata/mayan/validate.js +0 -20
  119. package/dist/calldata/protocols.d.ts +0 -9
  120. package/dist/calldata/protocols.js +0 -56
  121. package/dist/calldata/relay/calls.d.ts +0 -13
  122. package/dist/calldata/relay/calls.js +0 -54
  123. package/dist/calldata/relay/depositErc20.d.ts +0 -2
  124. package/dist/calldata/relay/depositErc20.js +0 -22
  125. package/dist/calldata/relay/depositErc20Allowance.d.ts +0 -2
  126. package/dist/calldata/relay/depositErc20Allowance.js +0 -20
  127. package/dist/calldata/relay/depositNative.d.ts +0 -2
  128. package/dist/calldata/relay/depositNative.js +0 -20
  129. package/dist/calldata/relay/index.d.ts +0 -4
  130. package/dist/calldata/relay/index.js +0 -40
  131. package/dist/calldata/relay/multicall.d.ts +0 -2
  132. package/dist/calldata/relay/multicall.js +0 -15
  133. package/dist/calldata/relay/permit2TransferAndMulticall.d.ts +0 -2
  134. package/dist/calldata/relay/permit2TransferAndMulticall.js +0 -42
  135. package/dist/calldata/relay/permit3009TransferAndMulticall.d.ts +0 -2
  136. package/dist/calldata/relay/permit3009TransferAndMulticall.js +0 -41
  137. package/dist/calldata/relay/permit3009TransferAndMulticallSigned.d.ts +0 -2
  138. package/dist/calldata/relay/permit3009TransferAndMulticallSigned.js +0 -40
  139. package/dist/calldata/relay/permitTransferAndMulticall.d.ts +0 -2
  140. package/dist/calldata/relay/permitTransferAndMulticall.js +0 -34
  141. package/dist/calldata/relay/permitTransferAndMulticallLegacy.d.ts +0 -2
  142. package/dist/calldata/relay/permitTransferAndMulticallLegacy.js +0 -35
  143. package/dist/calldata/relay/transferAndMulticall.d.ts +0 -2
  144. package/dist/calldata/relay/transferAndMulticall.js +0 -26
  145. package/dist/calldata/relay/validate.d.ts +0 -3
  146. package/dist/calldata/relay/validate.js +0 -18
  147. package/dist/calldata/resolve.d.ts +0 -2
  148. package/dist/calldata/resolve.js +0 -28
  149. package/dist/calldata/socket/bridge.d.ts +0 -2
  150. package/dist/calldata/socket/bridge.js +0 -28
  151. package/dist/calldata/socket/exec.d.ts +0 -2
  152. package/dist/calldata/socket/exec.js +0 -71
  153. package/dist/calldata/socket/index.d.ts +0 -4
  154. package/dist/calldata/socket/index.js +0 -13
  155. package/dist/calldata/socket/params.d.ts +0 -5
  156. package/dist/calldata/socket/params.js +0 -14
  157. package/dist/calldata/socket/protocols/ccip.d.ts +0 -2
  158. package/dist/calldata/socket/protocols/ccip.js +0 -32
  159. package/dist/calldata/socket/protocols/cctp.d.ts +0 -2
  160. package/dist/calldata/socket/protocols/cctp.js +0 -24
  161. package/dist/calldata/socket/protocols/eco.d.ts +0 -2
  162. package/dist/calldata/socket/protocols/eco.js +0 -20
  163. package/dist/calldata/socket/protocols/index.d.ts +0 -3
  164. package/dist/calldata/socket/protocols/index.js +0 -81
  165. package/dist/calldata/socket/protocols/native.d.ts +0 -2
  166. package/dist/calldata/socket/protocols/native.js +0 -70
  167. package/dist/calldata/socket/protocols/oft.d.ts +0 -2
  168. package/dist/calldata/socket/protocols/oft.js +0 -31
  169. package/dist/calldata/socket/protocols/swapsXYZ.d.ts +0 -2
  170. package/dist/calldata/socket/protocols/swapsXYZ.js +0 -62
  171. package/dist/calldata/socket/swapAndBridge.d.ts +0 -2
  172. package/dist/calldata/socket/swapAndBridge.js +0 -37
  173. package/dist/calldata/socket/validate.d.ts +0 -3
  174. package/dist/calldata/socket/validate.js +0 -21
  175. package/dist/calldata/types.d.ts +0 -82
  176. package/dist/calldata/types.js +0 -20
  177. package/dist/errors/constants.d.ts +0 -876
  178. package/dist/errors/constants.js +0 -883
  179. package/dist/errors/index.d.ts +0 -61
  180. package/dist/errors/index.js +0 -53
  181. package/dist/errors/sanitize.d.ts +0 -3
  182. package/dist/errors/sanitize.js +0 -75
  183. package/dist/providers/data.d.ts +0 -23
  184. package/dist/providers/data.js +0 -116
  185. package/dist/providers/errors.d.ts +0 -7
  186. package/dist/providers/errors.js +0 -10
  187. package/dist/providers/index.d.ts +0 -7
  188. package/dist/providers/index.js +0 -340
  189. package/dist/providers/layerswap.d.ts +0 -9
  190. package/dist/providers/layerswap.js +0 -95
  191. package/dist/providers/relay.d.ts +0 -59
  192. package/dist/providers/relay.js +0 -185
  193. package/dist/providers/request.d.ts +0 -23
  194. package/dist/providers/request.js +0 -69
  195. package/dist/providers/socket.d.ts +0 -5
  196. package/dist/providers/socket.js +0 -57
  197. package/dist/providers/types.d.ts +0 -36
  198. package/dist/providers/types.js +0 -1
@@ -1,61 +0,0 @@
1
- import type { BridgeErrorDefinition } from './constants.js';
2
- export { BRIDGE_ERRORS } from './constants.js';
3
- export type { BridgeErrorCode, BridgeErrorStage, BridgeErrorDefinition } from './constants.js';
4
- /** Reporting context deliberately excludes calldata, wallet addresses and provider response bodies. */
5
- export type BridgeErrorContext = {
6
- lite?: boolean;
7
- blocking?: boolean;
8
- aggregatorId?: string;
9
- chainId?: string;
10
- toChainId?: string;
11
- bridgeId?: string;
12
- provider?: string;
13
- method?: string;
14
- selector?: string;
15
- routerSelector?: string;
16
- protocolSelector?: string;
17
- destinationSelectors?: string[];
18
- calldataFormat?: 'missing' | 'empty' | 'valid' | 'invalid';
19
- calldataBytes?: number;
20
- routerCalldataBytes?: number;
21
- protocolCalldataBytes?: number;
22
- destinationCalldataBytes?: number;
23
- destinationCallCount?: number;
24
- hasDestinationCall?: boolean;
25
- abiOffset?: number;
26
- abiBufferBytes?: number;
27
- commandByte?: number;
28
- commandCount?: number;
29
- requestKind?: 'relay_chains' | 'relay_quote' | 'socket_quote' | 'layerswap_orders' | 'backend_quote' | 'backend_build';
30
- operation?: 'getQuote' | 'buildTx' | 'verifyTx' | 'verifyLayerSwapTx';
31
- unverifiedFields?: string[];
32
- httpStatus?: number;
33
- };
34
- export type BridgeErrorDetail = BridgeErrorDefinition & BridgeErrorContext;
35
- export declare const bridgeFailure: (errors: BridgeErrorDetail[]) => {
36
- ok: false;
37
- reason: string;
38
- error_code: "BRIDGE_MISSING_BUILD_API" | "BRIDGE_MISSING_QUOTE_API" | "BRIDGE_DIRECT_PROVIDER_CLIENT_IS_REQUIRED" | "BRIDGE_FROM_ADDRESS_MISMATCH" | "BRIDGE_FROM_CHAIN_MISMATCH" | "BRIDGE_INVALID_SOCKET_API" | "BRIDGE_INVALID_PROVIDER_TIMEOUT" | "BRIDGE_INVALID_QUOTE_KEY" | "BRIDGE_INVALID_TRANSACTION_VALUE" | "BRIDGE_SLIPPAGE_IS_REQUIRED_FOR_THIS_API_CALL" | "BRIDGE_UNSUPPORTED_BRIDGE_AGGREGATOR" | "BRIDGE_UNSUPPORTED_CHAIN" | "BRIDGE_UNSUPPORTED_DIRECT_PROVIDER" | "BRIDGE_UNSUPPORTED_FEE_RATE" | "BRIDGE_UNSUPPORTED_SOURCE_CHAIN" | "BRIDGE_ROUTER_NOT_ALLOWED" | "BRIDGE_SPENDER_NOT_ALLOWED" | "BRIDGE_ABI_ARRAY_TOO_LONG" | "BRIDGE_ABI_BYTES_OUT_OF_BOUNDS" | "BRIDGE_CALLDATA_DECODE_FAILED" | "BRIDGE_ABI_WORD_OUT_OF_BOUNDS" | "BRIDGE_ABI_OFFSET_OUT_OF_BOUNDS" | "BRIDGE_EXPECTED_ARRAY" | "BRIDGE_EXPECTED_STRING" | "BRIDGE_EXPECTED_TUPLE" | "BRIDGE_EXPECTED_UINT" | "BRIDGE_INVALID_ABI_ADDRESS" | "BRIDGE_INVALID_BOOL" | "BRIDGE_INVALID_CALLDATA" | "BRIDGE_INVALID_HEX" | "BRIDGE_INVALID_SELECTOR" | "BRIDGE_MISSING_CALLDATA" | "BRIDGE_MISSING_SELECTOR" | "BRIDGE_UNSUPPORTED_ABI_TYPE" | "BRIDGE_UNSUPPORTED_METHOD" | "BRIDGE_UNSUPPORTED_CALLDATA_AGGREGATOR" | "BRIDGE_UNRECOGNIZED_MAYAN_PROTOCOL_CALLDATA" | "BRIDGE_UNRECOGNIZED_SOCKET_BRIDGE_CALLDATA" | "BRIDGE_UNRECOGNIZED_SOCKET_ROUTER_CALLDATA" | "BRIDGE_UNSUPPORTED_MAYAN_PROTOCOL_CALLDATA" | "BRIDGE_UNSUPPORTED_NON_EVM_M0_DESTINATION" | "BRIDGE_M0_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_M0_RECEIVER_MISMATCH" | "BRIDGE_ACROSS_FALLBACK_RECEIVER_MISMATCH" | "BRIDGE_ACROSS_FALLBACK_TOKEN_MISMATCH" | "BRIDGE_ACROSS_NATIVE_VALUE_MISMATCH" | "BRIDGE_ACROSS_SWAP_VALUE_MISMATCH" | "BRIDGE_ALLBRIDGE_RECEIVER_MISMATCH" | "BRIDGE_CCIP_REQUIRES_ONE_BRIDGE_ASSET" | "BRIDGE_CENTRIFUGE_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_HYPERLANE_BALANCE_AMOUNT_REQUIRES_EXECUTION_STATE" | "BRIDGE_HYPERLANE_COMMAND_LENGTH_MISMATCH" | "BRIDGE_SOCKET_CCTP_TOKEN_DOES_NOT_MATCH_BRIDGE_ASSET" | "BRIDGE_SOCKET_RFQ_TOKEN_DOES_NOT_MATCH_BRIDGE_ASSET" | "BRIDGE_SOCKET_ALLOWANCE_AMOUNT_MISMATCH" | "BRIDGE_SOCKET_ALLOWANCE_TOKEN_MISMATCH" | "BRIDGE_SOCKET_DEPOSIT_AMOUNT_MISMATCH" | "BRIDGE_SOCKET_NATIVE_VALUE_MISMATCH" | "BRIDGE_BRIDGE_FEES_EXCEED_THE_INPUT_AMOUNT" | "BRIDGE_BRIDGE_OFFSET_EXCEEDS_CALLDATA" | "BRIDGE_BRIDGE_SPLICE_DOES_NOT_TARGET_THE_INPUT_AMOUNT" | "BRIDGE_INVALID_FASTMCTP_REFERRER_FEE" | "BRIDGE_INVALID_SUPERSET_OMNI_TOKEN_PATH" | "BRIDGE_INVALID_BRIDGE_OFFSET" | "BRIDGE_MISSING_HYPERLANE_TRANSFER" | "BRIDGE_MISSING_MEGAETH_DESTINATION_TOKEN" | "BRIDGE_MISSING_DESTINATION" | "BRIDGE_MISSING_DESTINATION_CHAIN" | "BRIDGE_MISSING_MIN_OUTPUT" | "BRIDGE_MISSING_OUTPUT_TOKEN" | "BRIDGE_MISSING_QUOTE_ID" | "BRIDGE_MISSING_RECEIVER" | "BRIDGE_MISSING_RELAY_ORDER_ID" | "BRIDGE_MISSING_SOURCE_AMOUNT" | "BRIDGE_MISSING_SOURCE_TOKEN" | "BRIDGE_MULTIPLE_SOURCE_ASSETS_ARE_NOT_SUPPORTED" | "BRIDGE_SPOKE_POOL_IS_NOT_IN_THE_ALLOWLIST" | "BRIDGE_UNSUPPORTED_HYPERLANE_OPERATION" | "BRIDGE_UNSUPPORTED_RELAY_SOURCE_ASSET_LIST" | "BRIDGE_UNSUPPORTED_SOCKET_CCTP_TARGET_SPENDER_OR_VALUE" | "BRIDGE_UNSUPPORTED_SOCKET_RFQ_TARGET_SPENDER_OR_VALUE" | "BRIDGE_UNSUPPORTED_SOCKET_OPERATOR_OR_ROUTER" | "BRIDGE_UNSUPPORTED_DESTINATION_CALL" | "BRIDGE_UNSUPPORTED_NON_EVM_FRAX_RECEIVER" | "BRIDGE_UNSUPPORTED_SWAPS_XYZ_EXECUTION" | "BRIDGE_DEPOSITOR_MISMATCH" | "BRIDGE_FROM_AMOUNT_MISMATCH" | "BRIDGE_FROM_TOKEN_MISMATCH" | "BRIDGE_MIN_RECEIVE_MISMATCH" | "BRIDGE_RECEIVER_MISMATCH" | "BRIDGE_TO_CHAIN_MISMATCH" | "BRIDGE_TO_TOKEN_MISMATCH" | "BRIDGE_PROVIDER_HTTP_ERROR" | "BRIDGE_LAYERSWAP_LOOKUP_TIMED_OUT" | "BRIDGE_LAYERSWAP_ORDER_NOT_FOUND" | "BRIDGE_LAYERSWAP_PAGINATION_DID_NOT_ADVANCE" | "BRIDGE_SOCKET_QUOTE_REQUEST_REJECTED" | "BRIDGE_BACKEND_BUILD_REQUEST_FAILED" | "BRIDGE_BACKEND_QUOTE_REQUEST_FAILED" | "BRIDGE_REQUEST_TIMED_OUT" | "BRIDGE_SERVICE_REQUEST_FAILED" | "BRIDGE_UNSUPPORTED_SERVICE_PATH" | "BRIDGE_LAYERSWAP_AMOUNT_EXCEEDS_TOKEN_PRECISION" | "BRIDGE_LAYERSWAP_BRIDGE_ID_MISMATCH" | "BRIDGE_LAYERSWAP_BRIDGE_INPUT_MISMATCH" | "BRIDGE_LAYERSWAP_CHAIN_MISMATCH" | "BRIDGE_LAYERSWAP_QUOTE_TOKEN_MISMATCH" | "BRIDGE_LAYERSWAP_QUOTED_AMOUNT_CHANGED" | "BRIDGE_LAYERSWAP_RECEIVER_MISMATCH" | "BRIDGE_LAYERSWAP_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_LAYERSWAP_REQUEST_ID_MISMATCH" | "BRIDGE_LAYERSWAP_SOURCE_VALUE_MISMATCH" | "BRIDGE_RELAY_APPROVAL_MISMATCH" | "BRIDGE_RELAY_CANONICAL_DEPOSITORY_MISMATCH" | "BRIDGE_RELAY_DISPLAY_AMOUNT_MISMATCH" | "BRIDGE_RELAY_ORDER_CHAIN_MISMATCH" | "BRIDGE_RELAY_ORDER_HASH_MISMATCH" | "BRIDGE_RELAY_PROTOCOL_CHAIN_MISMATCH" | "BRIDGE_RELAY_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_RELAY_SOURCE_PAYMENT_MISMATCH" | "BRIDGE_RELAY_SOURCE_VALUE_MISMATCH" | "BRIDGE_SOCKET_RFQ_ORDER_MISMATCH" | "BRIDGE_SOCKET_APPROVAL_MISMATCH" | "BRIDGE_SOCKET_BRIDGE_CHAIN_MISMATCH" | "BRIDGE_SOCKET_BRIDGE_OUTPUT_MISMATCH" | "BRIDGE_SOCKET_PUBLIC_APP_FEE_UNSUPPORTED" | "BRIDGE_SOCKET_QUOTE_INPUT_MISMATCH" | "BRIDGE_SOCKET_SOURCE_QUOTE_MISMATCH" | "BRIDGE_AMBIGUOUS_LAYERSWAP_REQUEST_ID" | "BRIDGE_AMBIGUOUS_RELAY_CHAIN" | "BRIDGE_INVALID_LAYERSWAP_AMOUNT" | "BRIDGE_INVALID_LAYERSWAP_OUTPUT_AMOUNT" | "BRIDGE_INVALID_LAYERSWAP_SWAP_ID" | "BRIDGE_INVALID_ADDRESS" | "BRIDGE_INVALID_AMOUNT" | "BRIDGE_INVALID_AMOUNT_EXPONENT" | "BRIDGE_INVALID_ARRAY" | "BRIDGE_INVALID_BYTES" | "BRIDGE_INVALID_FEE_DISPLAY" | "BRIDGE_INVALID_MINIMUM_PRECISION" | "BRIDGE_INVALID_OBJECT" | "BRIDGE_INVALID_RESPONSE" | "BRIDGE_INVALID_SLIPPAGE" | "BRIDGE_INVALID_STRING" | "BRIDGE_MISSING_LAYERSWAP_AMOUNT" | "BRIDGE_PROVIDER_RESPONSE_IS_NOT_VALID_JSON" | "BRIDGE_INVALID_SLIPPAGE_PRECISION" | "BRIDGE_UNSAFE_LAYERSWAP_AMOUNT" | "BRIDGE_UNSAFE_NUMBER" | "BRIDGE_UNSUPPORTED_LAYERSWAP_NON_EVM_RECEIVER" | "BRIDGE_UNSUPPORTED_LAYERSWAP_TRANSACTION" | "BRIDGE_UNSUPPORTED_RELAY_VM" | "BRIDGE_UNSUPPORTED_RELAY_APPROVAL" | "BRIDGE_UNSUPPORTED_RELAY_APPROVAL_COUNT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT_COUNT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT_METHOD" | "BRIDGE_UNSUPPORTED_RELAY_ORDER_SHAPE" | "BRIDGE_UNSUPPORTED_RELAY_ORDER_VERSION" | "BRIDGE_UNSUPPORTED_RELAY_STEP" | "BRIDGE_UNSUPPORTED_SOCKET_CCTP_RECEIVER" | "BRIDGE_UNSUPPORTED_SOCKET_SERVICE_ROUTE" | "BRIDGE_UNSUPPORTED_SOCKET_TRANSACTION" | "BRIDGE_LAYERSWAP_TRANSACTION_IS_REQUIRED" | "BRIDGE_A_DIRECT_PROVIDER_QUOTE_IS_REQUIRED" | "BRIDGE_PROVIDER_DESTINATION_UNBOUND" | "BRIDGE_INVALID_TRANSACTION" | "BRIDGE_PROVIDER_CLIENT_CONTEXT_CHANGED" | "BRIDGE_QUOTE_DOES_NOT_MATCH_LOCAL_INTENT" | "BRIDGE_QUOTE_REQUEST_WAS_INVALIDATED" | "BRIDGE_QUOTED_AMOUNT_CHANGED" | "BRIDGE_SOURCE_TRANSACTION_CHANGED" | "BRIDGE_UNVERIFIED_BRIDGE_FIELDS" | "BRIDGE_UNKNOWN";
39
- stage: "input" | "contract" | "decode" | "structure" | "intent" | "provider_request" | "provider_response" | "provider_binding" | "completeness" | "unknown";
40
- errors: BridgeErrorDetail[];
41
- };
42
- export declare class BridgeError extends Error {
43
- readonly error_code: BridgeErrorDetail['error_code'];
44
- readonly stage: BridgeErrorDetail['stage'];
45
- readonly errors: BridgeErrorDetail[];
46
- constructor(definition: BridgeErrorDefinition, context?: BridgeErrorContext, errors?: BridgeErrorDetail[]);
47
- toJSON(): {
48
- name: string;
49
- error_code: "BRIDGE_MISSING_BUILD_API" | "BRIDGE_MISSING_QUOTE_API" | "BRIDGE_DIRECT_PROVIDER_CLIENT_IS_REQUIRED" | "BRIDGE_FROM_ADDRESS_MISMATCH" | "BRIDGE_FROM_CHAIN_MISMATCH" | "BRIDGE_INVALID_SOCKET_API" | "BRIDGE_INVALID_PROVIDER_TIMEOUT" | "BRIDGE_INVALID_QUOTE_KEY" | "BRIDGE_INVALID_TRANSACTION_VALUE" | "BRIDGE_SLIPPAGE_IS_REQUIRED_FOR_THIS_API_CALL" | "BRIDGE_UNSUPPORTED_BRIDGE_AGGREGATOR" | "BRIDGE_UNSUPPORTED_CHAIN" | "BRIDGE_UNSUPPORTED_DIRECT_PROVIDER" | "BRIDGE_UNSUPPORTED_FEE_RATE" | "BRIDGE_UNSUPPORTED_SOURCE_CHAIN" | "BRIDGE_ROUTER_NOT_ALLOWED" | "BRIDGE_SPENDER_NOT_ALLOWED" | "BRIDGE_ABI_ARRAY_TOO_LONG" | "BRIDGE_ABI_BYTES_OUT_OF_BOUNDS" | "BRIDGE_CALLDATA_DECODE_FAILED" | "BRIDGE_ABI_WORD_OUT_OF_BOUNDS" | "BRIDGE_ABI_OFFSET_OUT_OF_BOUNDS" | "BRIDGE_EXPECTED_ARRAY" | "BRIDGE_EXPECTED_STRING" | "BRIDGE_EXPECTED_TUPLE" | "BRIDGE_EXPECTED_UINT" | "BRIDGE_INVALID_ABI_ADDRESS" | "BRIDGE_INVALID_BOOL" | "BRIDGE_INVALID_CALLDATA" | "BRIDGE_INVALID_HEX" | "BRIDGE_INVALID_SELECTOR" | "BRIDGE_MISSING_CALLDATA" | "BRIDGE_MISSING_SELECTOR" | "BRIDGE_UNSUPPORTED_ABI_TYPE" | "BRIDGE_UNSUPPORTED_METHOD" | "BRIDGE_UNSUPPORTED_CALLDATA_AGGREGATOR" | "BRIDGE_UNRECOGNIZED_MAYAN_PROTOCOL_CALLDATA" | "BRIDGE_UNRECOGNIZED_SOCKET_BRIDGE_CALLDATA" | "BRIDGE_UNRECOGNIZED_SOCKET_ROUTER_CALLDATA" | "BRIDGE_UNSUPPORTED_MAYAN_PROTOCOL_CALLDATA" | "BRIDGE_UNSUPPORTED_NON_EVM_M0_DESTINATION" | "BRIDGE_M0_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_M0_RECEIVER_MISMATCH" | "BRIDGE_ACROSS_FALLBACK_RECEIVER_MISMATCH" | "BRIDGE_ACROSS_FALLBACK_TOKEN_MISMATCH" | "BRIDGE_ACROSS_NATIVE_VALUE_MISMATCH" | "BRIDGE_ACROSS_SWAP_VALUE_MISMATCH" | "BRIDGE_ALLBRIDGE_RECEIVER_MISMATCH" | "BRIDGE_CCIP_REQUIRES_ONE_BRIDGE_ASSET" | "BRIDGE_CENTRIFUGE_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_HYPERLANE_BALANCE_AMOUNT_REQUIRES_EXECUTION_STATE" | "BRIDGE_HYPERLANE_COMMAND_LENGTH_MISMATCH" | "BRIDGE_SOCKET_CCTP_TOKEN_DOES_NOT_MATCH_BRIDGE_ASSET" | "BRIDGE_SOCKET_RFQ_TOKEN_DOES_NOT_MATCH_BRIDGE_ASSET" | "BRIDGE_SOCKET_ALLOWANCE_AMOUNT_MISMATCH" | "BRIDGE_SOCKET_ALLOWANCE_TOKEN_MISMATCH" | "BRIDGE_SOCKET_DEPOSIT_AMOUNT_MISMATCH" | "BRIDGE_SOCKET_NATIVE_VALUE_MISMATCH" | "BRIDGE_BRIDGE_FEES_EXCEED_THE_INPUT_AMOUNT" | "BRIDGE_BRIDGE_OFFSET_EXCEEDS_CALLDATA" | "BRIDGE_BRIDGE_SPLICE_DOES_NOT_TARGET_THE_INPUT_AMOUNT" | "BRIDGE_INVALID_FASTMCTP_REFERRER_FEE" | "BRIDGE_INVALID_SUPERSET_OMNI_TOKEN_PATH" | "BRIDGE_INVALID_BRIDGE_OFFSET" | "BRIDGE_MISSING_HYPERLANE_TRANSFER" | "BRIDGE_MISSING_MEGAETH_DESTINATION_TOKEN" | "BRIDGE_MISSING_DESTINATION" | "BRIDGE_MISSING_DESTINATION_CHAIN" | "BRIDGE_MISSING_MIN_OUTPUT" | "BRIDGE_MISSING_OUTPUT_TOKEN" | "BRIDGE_MISSING_QUOTE_ID" | "BRIDGE_MISSING_RECEIVER" | "BRIDGE_MISSING_RELAY_ORDER_ID" | "BRIDGE_MISSING_SOURCE_AMOUNT" | "BRIDGE_MISSING_SOURCE_TOKEN" | "BRIDGE_MULTIPLE_SOURCE_ASSETS_ARE_NOT_SUPPORTED" | "BRIDGE_SPOKE_POOL_IS_NOT_IN_THE_ALLOWLIST" | "BRIDGE_UNSUPPORTED_HYPERLANE_OPERATION" | "BRIDGE_UNSUPPORTED_RELAY_SOURCE_ASSET_LIST" | "BRIDGE_UNSUPPORTED_SOCKET_CCTP_TARGET_SPENDER_OR_VALUE" | "BRIDGE_UNSUPPORTED_SOCKET_RFQ_TARGET_SPENDER_OR_VALUE" | "BRIDGE_UNSUPPORTED_SOCKET_OPERATOR_OR_ROUTER" | "BRIDGE_UNSUPPORTED_DESTINATION_CALL" | "BRIDGE_UNSUPPORTED_NON_EVM_FRAX_RECEIVER" | "BRIDGE_UNSUPPORTED_SWAPS_XYZ_EXECUTION" | "BRIDGE_DEPOSITOR_MISMATCH" | "BRIDGE_FROM_AMOUNT_MISMATCH" | "BRIDGE_FROM_TOKEN_MISMATCH" | "BRIDGE_MIN_RECEIVE_MISMATCH" | "BRIDGE_RECEIVER_MISMATCH" | "BRIDGE_TO_CHAIN_MISMATCH" | "BRIDGE_TO_TOKEN_MISMATCH" | "BRIDGE_PROVIDER_HTTP_ERROR" | "BRIDGE_LAYERSWAP_LOOKUP_TIMED_OUT" | "BRIDGE_LAYERSWAP_ORDER_NOT_FOUND" | "BRIDGE_LAYERSWAP_PAGINATION_DID_NOT_ADVANCE" | "BRIDGE_SOCKET_QUOTE_REQUEST_REJECTED" | "BRIDGE_BACKEND_BUILD_REQUEST_FAILED" | "BRIDGE_BACKEND_QUOTE_REQUEST_FAILED" | "BRIDGE_REQUEST_TIMED_OUT" | "BRIDGE_SERVICE_REQUEST_FAILED" | "BRIDGE_UNSUPPORTED_SERVICE_PATH" | "BRIDGE_LAYERSWAP_AMOUNT_EXCEEDS_TOKEN_PRECISION" | "BRIDGE_LAYERSWAP_BRIDGE_ID_MISMATCH" | "BRIDGE_LAYERSWAP_BRIDGE_INPUT_MISMATCH" | "BRIDGE_LAYERSWAP_CHAIN_MISMATCH" | "BRIDGE_LAYERSWAP_QUOTE_TOKEN_MISMATCH" | "BRIDGE_LAYERSWAP_QUOTED_AMOUNT_CHANGED" | "BRIDGE_LAYERSWAP_RECEIVER_MISMATCH" | "BRIDGE_LAYERSWAP_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_LAYERSWAP_REQUEST_ID_MISMATCH" | "BRIDGE_LAYERSWAP_SOURCE_VALUE_MISMATCH" | "BRIDGE_RELAY_APPROVAL_MISMATCH" | "BRIDGE_RELAY_CANONICAL_DEPOSITORY_MISMATCH" | "BRIDGE_RELAY_DISPLAY_AMOUNT_MISMATCH" | "BRIDGE_RELAY_ORDER_CHAIN_MISMATCH" | "BRIDGE_RELAY_ORDER_HASH_MISMATCH" | "BRIDGE_RELAY_PROTOCOL_CHAIN_MISMATCH" | "BRIDGE_RELAY_REFUND_RECIPIENT_MISMATCH" | "BRIDGE_RELAY_SOURCE_PAYMENT_MISMATCH" | "BRIDGE_RELAY_SOURCE_VALUE_MISMATCH" | "BRIDGE_SOCKET_RFQ_ORDER_MISMATCH" | "BRIDGE_SOCKET_APPROVAL_MISMATCH" | "BRIDGE_SOCKET_BRIDGE_CHAIN_MISMATCH" | "BRIDGE_SOCKET_BRIDGE_OUTPUT_MISMATCH" | "BRIDGE_SOCKET_PUBLIC_APP_FEE_UNSUPPORTED" | "BRIDGE_SOCKET_QUOTE_INPUT_MISMATCH" | "BRIDGE_SOCKET_SOURCE_QUOTE_MISMATCH" | "BRIDGE_AMBIGUOUS_LAYERSWAP_REQUEST_ID" | "BRIDGE_AMBIGUOUS_RELAY_CHAIN" | "BRIDGE_INVALID_LAYERSWAP_AMOUNT" | "BRIDGE_INVALID_LAYERSWAP_OUTPUT_AMOUNT" | "BRIDGE_INVALID_LAYERSWAP_SWAP_ID" | "BRIDGE_INVALID_ADDRESS" | "BRIDGE_INVALID_AMOUNT" | "BRIDGE_INVALID_AMOUNT_EXPONENT" | "BRIDGE_INVALID_ARRAY" | "BRIDGE_INVALID_BYTES" | "BRIDGE_INVALID_FEE_DISPLAY" | "BRIDGE_INVALID_MINIMUM_PRECISION" | "BRIDGE_INVALID_OBJECT" | "BRIDGE_INVALID_RESPONSE" | "BRIDGE_INVALID_SLIPPAGE" | "BRIDGE_INVALID_STRING" | "BRIDGE_MISSING_LAYERSWAP_AMOUNT" | "BRIDGE_PROVIDER_RESPONSE_IS_NOT_VALID_JSON" | "BRIDGE_INVALID_SLIPPAGE_PRECISION" | "BRIDGE_UNSAFE_LAYERSWAP_AMOUNT" | "BRIDGE_UNSAFE_NUMBER" | "BRIDGE_UNSUPPORTED_LAYERSWAP_NON_EVM_RECEIVER" | "BRIDGE_UNSUPPORTED_LAYERSWAP_TRANSACTION" | "BRIDGE_UNSUPPORTED_RELAY_VM" | "BRIDGE_UNSUPPORTED_RELAY_APPROVAL" | "BRIDGE_UNSUPPORTED_RELAY_APPROVAL_COUNT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT_COUNT" | "BRIDGE_UNSUPPORTED_RELAY_DEPOSIT_METHOD" | "BRIDGE_UNSUPPORTED_RELAY_ORDER_SHAPE" | "BRIDGE_UNSUPPORTED_RELAY_ORDER_VERSION" | "BRIDGE_UNSUPPORTED_RELAY_STEP" | "BRIDGE_UNSUPPORTED_SOCKET_CCTP_RECEIVER" | "BRIDGE_UNSUPPORTED_SOCKET_SERVICE_ROUTE" | "BRIDGE_UNSUPPORTED_SOCKET_TRANSACTION" | "BRIDGE_LAYERSWAP_TRANSACTION_IS_REQUIRED" | "BRIDGE_A_DIRECT_PROVIDER_QUOTE_IS_REQUIRED" | "BRIDGE_PROVIDER_DESTINATION_UNBOUND" | "BRIDGE_INVALID_TRANSACTION" | "BRIDGE_PROVIDER_CLIENT_CONTEXT_CHANGED" | "BRIDGE_QUOTE_DOES_NOT_MATCH_LOCAL_INTENT" | "BRIDGE_QUOTE_REQUEST_WAS_INVALIDATED" | "BRIDGE_QUOTED_AMOUNT_CHANGED" | "BRIDGE_SOURCE_TRANSACTION_CHANGED" | "BRIDGE_UNVERIFIED_BRIDGE_FIELDS" | "BRIDGE_UNKNOWN";
50
- stage: "input" | "contract" | "decode" | "structure" | "intent" | "provider_request" | "provider_response" | "provider_binding" | "completeness" | "unknown";
51
- errors: BridgeErrorDetail[];
52
- };
53
- }
54
- /** Preserve typed SDK failures; never copy an arbitrary transport exception into a report. */
55
- export declare const asBridgeError: (error: unknown, fallback?: BridgeErrorDefinition, context?: BridgeErrorContext) => BridgeError;
56
- export type BridgeErrorReport = ReturnType<BridgeError['toJSON']>;
57
- export type BridgeErrorReporter = (error: BridgeErrorReport) => void | Promise<void>;
58
- /** Accept a check/decode result or exception; never serialize the result's parsed transaction. */
59
- export declare const toBridgeErrorReport: (value: unknown) => BridgeErrorReport | undefined;
60
- /** Only used when an invalid quote is filtered; directly thrown failures stay with the caller. */
61
- export declare const reportBridgeError: (report: BridgeErrorReporter | undefined, error: BridgeError, context: BridgeErrorContext) => void;
@@ -1,53 +0,0 @@
1
- import { BRIDGE_ERRORS } from './constants.js';
2
- import { sanitizeBridgeError } from './sanitize.js';
3
- export { BRIDGE_ERRORS } from './constants.js';
4
- export const bridgeFailure = (errors) => {
5
- const failures = (errors.length ? errors : [BRIDGE_ERRORS.UNKNOWN]).map(sanitizeBridgeError);
6
- return { ok: false, reason: failures.map((error) => error.message).join(','),
7
- error_code: failures[0].error_code, stage: failures[0].stage, errors: failures };
8
- };
9
- export class BridgeError extends Error {
10
- constructor(definition, context = {}, errors) {
11
- const failures = (errors?.length ? errors : [definition]).map((error) => sanitizeBridgeError({ ...error, ...context }));
12
- super(failures.map((error) => error.message).join(','));
13
- this.name = 'BridgeError';
14
- this.errors = failures;
15
- this.error_code = failures[0].error_code;
16
- this.stage = failures[0].stage;
17
- }
18
- toJSON() {
19
- const errors = (this.errors.length ? this.errors : [BRIDGE_ERRORS.UNKNOWN]).map(sanitizeBridgeError);
20
- const name = ['BridgeError', 'InvalidBridgeCalldataError', 'InvalidBridgeContractError', 'InvalidBridgeProviderError'].includes(this.name)
21
- ? this.name : 'BridgeError';
22
- return { name, error_code: errors[0].error_code, stage: errors[0].stage, errors };
23
- }
24
- }
25
- /** Preserve typed SDK failures; never copy an arbitrary transport exception into a report. */
26
- export const asBridgeError = (error, fallback = BRIDGE_ERRORS.UNKNOWN, context = {}) => {
27
- if (error instanceof BridgeError) {
28
- error.errors.splice(0, error.errors.length, ...error.errors.map((detail) => sanitizeBridgeError({ ...detail, ...context })));
29
- return error;
30
- }
31
- return new BridgeError(fallback, context);
32
- };
33
- /** Accept a check/decode result or exception; never serialize the result's parsed transaction. */
34
- export const toBridgeErrorReport = (value) => {
35
- if (value instanceof BridgeError)
36
- return value.toJSON();
37
- const result = value && typeof value === 'object' ? value : {};
38
- if (result.ok === true)
39
- return undefined;
40
- const errors = Array.isArray(result.errors) ? result.errors.slice(0, 32).map(sanitizeBridgeError) : undefined;
41
- return new BridgeError(BRIDGE_ERRORS.UNKNOWN, {}, errors).toJSON();
42
- };
43
- /** Only used when an invalid quote is filtered; directly thrown failures stay with the caller. */
44
- export const reportBridgeError = (report, error, context) => {
45
- if (!report)
46
- return;
47
- try {
48
- const payload = asBridgeError(error, BRIDGE_ERRORS.UNKNOWN, context).toJSON();
49
- void Promise.resolve(report(payload))
50
- .catch(() => { });
51
- }
52
- catch { /* Reporting must not change which transactions pass validation. */ }
53
- };
@@ -1,3 +0,0 @@
1
- import type { BridgeErrorDetail } from './index.js';
2
- /** A reporting allowlist, not an object spread: unknown labels and arbitrary properties never escape. */
3
- export declare const sanitizeBridgeError: (value: unknown) => BridgeErrorDetail;
@@ -1,75 +0,0 @@
1
- import { BRIDGE_AGGREGATORS } from '../consts.js';
2
- import { SERVER_ID_TO_CHAIN_ENUM } from '../chains.js';
3
- import { evmChainId } from '../calldata/chains.js';
4
- import { BRIDGE_ERRORS } from './constants.js';
5
- const definitions = new Map(Object.values(BRIDGE_ERRORS).map((error) => [error.error_code, { ...error }]));
6
- const chains = new Set(Object.entries(SERVER_ID_TO_CHAIN_ENUM).flatMap(([id, chain]) => [id, chain, evmChainId(id)?.toString()].filter((value) => typeof value === 'string')));
7
- const bridges = new Set([
8
- ...BRIDGE_AGGREGATORS, 'celercircle', 'celercirclefast', 'gnosis', 'layerswap', 'lifiIntents',
9
- 'mayanMCTP', 'paxos', 'polygon', 'polymer', 'polymerStandard', 'superset', 'FASTMCTP',
10
- 'arbitrum-native', 'ccip', 'cctp-v2', 'cctp-v2-slow', 'eco', 'gnosis-native', 'native-op-stack',
11
- 'oft', 'polygon-native', 'rfq-vault-executor', 'robinhood-native', 'swaps-xyz', 'megaeth',
12
- 'centrifuge', 'frax', 'm0', 'allbridge', 'garden', 'gaszip', 'squid',
13
- ]);
14
- const methods = new Set([
15
- 'bridge', 'swapAndBridge', 'deposit', 'depositErc20', 'depositErc20Allowance', 'depositNative',
16
- 'depositNow', 'depositV3', 'depositV3Now', 'exec', 'forwardERC20', 'forwardEth', 'multicall',
17
- 'permit2TransferAndMulticall', 'permit3009TransferAndMulticall', 'permit3009TransferAndMulticallSigned',
18
- 'permitTransferAndMulticall', 'permitTransferAndMulticallLegacy', 'transferAndMulticall',
19
- 'swapAndForwardERC20', 'swapAndForwardEth', 'startBridgeTokensViaAcrossV4ERC20Min', 'startBridgeTokensViaAcrossV4NativeMin',
20
- ...['AcrossV4', 'AllBridge', 'CelerCircleBridge', 'Centrifuge', 'Frax', 'Garden', 'GasZip',
21
- 'GnosisBridge', 'LayerSwap', 'LiFiIntentEscrowV2', 'M0', 'Mayan', 'MegaETHBridge', 'PaxosTransit',
22
- 'PolygonBridge', 'PolymerCCTP', 'RelayDepository', 'Squid', 'Stargate', 'Superset']
23
- .flatMap((name) => [`startBridgeTokensVia${name}`, `swapAndStartBridgeTokensVia${name}`]),
24
- ...['Single', 'Multiple'].flatMap((kind) => ['ERC20ToERC20', 'ERC20ToNative', 'NativeToERC20']
25
- .map((assets) => `swapTokens${kind}V3${assets}`)),
26
- ]);
27
- const fields = new Set(['sourceToken', 'sourceAmount', 'outputToken', 'minOutputAmount', 'receiver', 'destinationChainId']);
28
- const selector = (value) => typeof value === 'string' && /^0x[0-9a-f]{8}$/i.test(value);
29
- /** A reporting allowlist, not an object spread: unknown labels and arbitrary properties never escape. */
30
- export const sanitizeBridgeError = (value) => {
31
- const raw = value && typeof value === 'object' ? value : {};
32
- const definition = typeof raw.error_code === 'string' ? definitions.get(raw.error_code) : undefined;
33
- const result = { ...(definition ?? BRIDGE_ERRORS.UNKNOWN) };
34
- for (const [key, allowed] of [
35
- ['aggregatorId', new Set(BRIDGE_AGGREGATORS)], ['provider', new Set(['relay', 'socket', 'layerswap', 'context'])],
36
- ['bridgeId', bridges], ['chainId', chains], ['toChainId', chains], ['method', methods],
37
- ['operation', new Set(['getQuote', 'buildTx', 'verifyTx', 'verifyLayerSwapTx'])],
38
- ['requestKind', new Set(['relay_chains', 'relay_quote', 'socket_quote', 'layerswap_orders', 'backend_quote', 'backend_build'])],
39
- ['calldataFormat', new Set(['missing', 'empty', 'valid', 'invalid'])],
40
- ]) {
41
- const item = raw[key];
42
- if (typeof item === 'string') {
43
- if (allowed.has(item))
44
- Object.assign(result, { [key]: item });
45
- else if (['aggregatorId', 'provider', 'bridgeId', 'chainId', 'toChainId'].includes(key))
46
- Object.assign(result, { [key]: 'unknown' });
47
- }
48
- }
49
- for (const key of ['selector', 'routerSelector', 'protocolSelector']) {
50
- const item = raw[key];
51
- if (selector(item))
52
- result[key] = item.toLowerCase();
53
- }
54
- for (const key of ['calldataBytes', 'routerCalldataBytes', 'protocolCalldataBytes', 'destinationCalldataBytes',
55
- 'destinationCallCount', 'abiOffset', 'abiBufferBytes', 'commandCount']) {
56
- const item = raw[key];
57
- if (typeof item === 'number' && Number.isSafeInteger(item) && item >= 0 && item <= 10000000)
58
- result[key] = item;
59
- }
60
- if (typeof raw.commandByte === 'number' && Number.isInteger(raw.commandByte) && raw.commandByte >= 0 && raw.commandByte <= 255)
61
- result.commandByte = raw.commandByte;
62
- if (typeof raw.httpStatus === 'number' && Number.isInteger(raw.httpStatus) && raw.httpStatus >= 100 && raw.httpStatus <= 599)
63
- result.httpStatus = raw.httpStatus;
64
- if (typeof raw.hasDestinationCall === 'boolean')
65
- result.hasDestinationCall = raw.hasDestinationCall;
66
- if (typeof raw.lite === 'boolean')
67
- result.lite = raw.lite;
68
- if (typeof raw.blocking === 'boolean')
69
- result.blocking = raw.blocking;
70
- if (Array.isArray(raw.destinationSelectors))
71
- result.destinationSelectors = [...new Set(raw.destinationSelectors.filter(selector).map((item) => item.toLowerCase()))].slice(0, 16);
72
- if (Array.isArray(raw.unverifiedFields))
73
- result.unverifiedFields = [...new Set(raw.unverifiedFields.filter((item) => typeof item === 'string' && fields.has(item)))];
74
- return result;
75
- };
@@ -1,23 +0,0 @@
1
- import type { BridgeCalldataTx, ParsedBridgeCall } from '../calldata/types.js';
2
- import type { BridgeQuoteListParams, BridgeTx } from '../quote.js';
3
- export type JsonObject = Record<string, unknown>;
4
- export declare const object: (value: unknown) => JsonObject;
5
- export declare const array: (value: unknown) => unknown[];
6
- export declare const text: (value: unknown) => string;
7
- export declare const address: (value: unknown) => string;
8
- export declare const bytes: (value: unknown, size?: number) => string;
9
- export declare const uint: (value: unknown, bits?: number) => bigint;
10
- export declare const chain: (value: string) => bigint;
11
- export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
12
- export declare const tokenAddress: (value: string, chainId: string) => string;
13
- /** Include every user-controlled condition; never use backend quote fields as intent. */
14
- export declare const intentKey: (params: BridgeQuoteListParams) => string;
15
- export declare const slippageBps: (value: string | undefined) => number;
16
- export declare const assertIntent: (parsed: ParsedBridgeCall, params: BridgeQuoteListParams, expectedAmount: bigint, minimumQuantum?: bigint) => void;
17
- /** Copy only signing fields; never carry arbitrary keys supplied by a service. */
18
- export declare const transaction: (value: unknown, params: BridgeQuoteListParams) => BridgeTx;
19
- export declare const sameTransaction: (left: BridgeCalldataTx, right: BridgeCalldataTx) => boolean;
20
- export declare const feeDisplay: (raw: unknown, usd?: unknown) => {
21
- raw_amount_hex_str: string;
22
- usd_value: number;
23
- };
@@ -1,116 +0,0 @@
1
- import { sourceAmountMatches } from '../calldata/expect.js';
2
- import { BRIDGE_ERRORS, BridgeError } from '../errors/index.js';
3
- import { evmChainId } from '../calldata/chains.js';
4
- import { txValue } from '../calldata/types.js';
5
- export const object = (value) => {
6
- if (!value || typeof value !== 'object' || Array.isArray(value))
7
- throw new BridgeError(BRIDGE_ERRORS.INVALID_OBJECT);
8
- return value;
9
- };
10
- export const array = (value) => {
11
- if (!Array.isArray(value))
12
- throw new BridgeError(BRIDGE_ERRORS.INVALID_ARRAY);
13
- return value;
14
- };
15
- export const text = (value) => {
16
- if (typeof value !== 'string')
17
- throw new BridgeError(BRIDGE_ERRORS.INVALID_STRING);
18
- return value;
19
- };
20
- export const address = (value) => {
21
- const result = text(value).toLowerCase();
22
- if (!/^0x[0-9a-f]{40}$/.test(result))
23
- throw new BridgeError(BRIDGE_ERRORS.INVALID_ADDRESS);
24
- return result;
25
- };
26
- export const bytes = (value, size) => {
27
- const result = text(value).toLowerCase();
28
- if (!/^0x([0-9a-f]{2})*$/.test(result) || (size !== undefined && result.length !== 2 + size * 2))
29
- throw new BridgeError(BRIDGE_ERRORS.INVALID_BYTES);
30
- return result;
31
- };
32
- export const uint = (value, bits = 256) => {
33
- if (typeof value === 'number' && !Number.isSafeInteger(value))
34
- throw new BridgeError(BRIDGE_ERRORS.UNSAFE_NUMBER);
35
- if (!['string', 'number', 'bigint'].includes(typeof value) || !/^(0x[0-9a-f]+|[0-9]+)$/i.test(String(value)))
36
- throw new BridgeError(BRIDGE_ERRORS.INVALID_AMOUNT);
37
- const n = BigInt(value);
38
- if (n < 0n || n >= 1n << BigInt(bits))
39
- throw new BridgeError(BRIDGE_ERRORS.INVALID_AMOUNT);
40
- return n;
41
- };
42
- export const chain = (value) => {
43
- const id = evmChainId(value);
44
- if (id === undefined || id > BigInt(Number.MAX_SAFE_INTEGER))
45
- throw new BridgeError(BRIDGE_ERRORS.UNSUPPORTED_CHAIN);
46
- return id;
47
- };
48
- export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
49
- export const tokenAddress = (value, chainId) => {
50
- if (value.toLowerCase() === '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' ||
51
- evmChainId(value) === chain(chainId))
52
- return ZERO_ADDRESS;
53
- return address(value);
54
- };
55
- /** Include every user-controlled condition; never use backend quote fields as intent. */
56
- export const intentKey = (params) => JSON.stringify([
57
- address(params.userAddress), chain(params.fromChainId).toString(), tokenAddress(params.fromTokenId, params.fromChainId),
58
- uint(params.fromTokenRawAmount).toString(), chain(params.toChainId).toString(), tokenAddress(params.toTokenId, params.toChainId),
59
- slippageBps(params.slippage), params.feeRate ?? 0.25,
60
- ]);
61
- export const slippageBps = (value) => {
62
- if (!value || !/^(0|0?\.[0-9]{1,4})$/.test(value))
63
- throw new BridgeError(BRIDGE_ERRORS.INVALID_SLIPPAGE_PRECISION);
64
- const n = Number(value) * 10000;
65
- if (!Number.isFinite(n) || n < 0 || n >= 10000)
66
- throw new BridgeError(BRIDGE_ERRORS.INVALID_SLIPPAGE);
67
- return Math.round(n);
68
- };
69
- export const assertIntent = (parsed, params, expectedAmount, minimumQuantum = 1n) => {
70
- const errors = [];
71
- if (parsed.sourceToken !== tokenAddress(params.fromTokenId, params.fromChainId) &&
72
- tokenAddress(parsed.sourceToken ?? '', params.fromChainId) !== tokenAddress(params.fromTokenId, params.fromChainId))
73
- errors.push(BRIDGE_ERRORS.FROM_TOKEN_MISMATCH);
74
- if (!sourceAmountMatches(parsed.sourceAmount, uint(params.fromTokenRawAmount)) || parsed.sourceAmount === 0n)
75
- errors.push(BRIDGE_ERRORS.FROM_AMOUNT_MISMATCH);
76
- if (parsed.destinationChainId !== chain(params.toChainId))
77
- errors.push(BRIDGE_ERRORS.TO_CHAIN_MISMATCH);
78
- if (tokenAddress(parsed.outputToken ?? '', params.toChainId) !== tokenAddress(params.toTokenId, params.toChainId))
79
- errors.push(BRIDGE_ERRORS.TO_TOKEN_MISMATCH);
80
- if (parsed.receiver !== address(params.userAddress))
81
- errors.push(BRIDGE_ERRORS.RECEIVER_MISMATCH);
82
- // LayerSwap floors the minimum to its provider-declared token precision.
83
- if (minimumQuantum < 1n)
84
- throw new BridgeError(BRIDGE_ERRORS.INVALID_MINIMUM_PRECISION);
85
- const minimum = expectedAmount * BigInt(10000 - slippageBps(params.slippage)) / 10000n / minimumQuantum * minimumQuantum;
86
- if (expectedAmount <= 0n || minimum <= 0n || parsed.minOutputAmount === undefined || parsed.minOutputAmount < minimum)
87
- errors.push(BRIDGE_ERRORS.MIN_RECEIVE_MISMATCH);
88
- if (errors.length)
89
- throw new BridgeError(errors[0], { ...parsed.diagnostics, method: parsed.method }, errors);
90
- };
91
- /** Copy only signing fields; never carry arbitrary keys supplied by a service. */
92
- export const transaction = (value, params) => {
93
- const raw = object(value);
94
- const chainId = uint(raw.chainId);
95
- if (chainId !== chain(params.fromChainId))
96
- throw new BridgeError(BRIDGE_ERRORS.FROM_CHAIN_MISMATCH);
97
- const from = raw.from === undefined ? address(params.userAddress) : address(raw.from);
98
- if (from !== address(params.userAddress))
99
- throw new BridgeError(BRIDGE_ERRORS.FROM_ADDRESS_MISMATCH);
100
- const result = {
101
- from, to: address(raw.to), data: bytes(raw.data), value: `0x${uint(raw.value ?? '0').toString(16)}`, chainId: Number(chainId),
102
- };
103
- for (const key of ['gas', 'gasLimit', 'gasPrice', 'maxFeePerGas', 'maxPriorityFeePerGas']) {
104
- if (raw[key] !== undefined)
105
- result[key] = `0x${uint(raw[key]).toString(16)}`;
106
- }
107
- return result;
108
- };
109
- export const sameTransaction = (left, right) => {
110
- return address(left.to) === address(right.to) && address(left.from) === address(right.from) &&
111
- uint(left.chainId) === uint(right.chainId) && bytes(left.data) === bytes(right.data) && txValue(left) === txValue(right);
112
- };
113
- export const feeDisplay = (raw, usd) => ({
114
- raw_amount_hex_str: `0x${uint(raw ?? '0').toString(16)}`,
115
- usd_value: typeof usd === 'string' || typeof usd === 'number' ? Number(usd) || 0 : 0,
116
- });
@@ -1,7 +0,0 @@
1
- import { BridgeError } from '../errors/index.js';
2
- import type { BridgeErrorDefinition } from '../errors/index.js';
3
- export declare class InvalidBridgeProviderError extends BridgeError {
4
- readonly provider: string;
5
- readonly reason: string;
6
- constructor(provider: string, error: BridgeErrorDefinition | BridgeError | string);
7
- }
@@ -1,10 +0,0 @@
1
- import { BRIDGE_ERRORS, BridgeError } from '../errors/index.js';
2
- export class InvalidBridgeProviderError extends BridgeError {
3
- constructor(provider, error) {
4
- super(BRIDGE_ERRORS.INVALID_RESPONSE, { provider }, error instanceof BridgeError ? error.errors : [typeof error === 'string' ? BRIDGE_ERRORS.INVALID_RESPONSE : error]);
5
- this.provider = provider;
6
- this.reason = typeof error === 'string' ? error : this.message;
7
- this.message = `Bridge provider validation failed for ${provider}: ${this.reason}`;
8
- this.name = 'InvalidBridgeProviderError';
9
- }
10
- }
@@ -1,7 +0,0 @@
1
- import type { BridgeProviderClient, BridgeProviderClientOptions, DirectBridgeProvider } from './types.js';
2
- export declare const isDirectBridgeProviderRoute: (provider: string, bridgeId: string) => provider is DirectBridgeProvider;
3
- export declare const createBridgeProviderClient: (options: BridgeProviderClientOptions) => BridgeProviderClient;
4
- export { InvalidBridgeProviderError } from './errors.js';
5
- export { BRIDGE_PROVIDER_ORIGINS, createBridgeFetchRequest } from './request.js';
6
- export type { BridgeFetch } from './request.js';
7
- export type { BridgeProviderClient, BridgeProviderClientOptions, BridgeProviderVerification, BridgeVerificationProvider, BridgeServiceRequest, DirectBridgeProvider } from './types.js';