@switch-win/sdk 1.2.8 → 1.3.0

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 (73) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/GASLESS.md +407 -0
  3. package/LIMIT-ORDERS.md +212 -198
  4. package/README.md +131 -105
  5. package/ROBINHOOD.md +201 -198
  6. package/abi/GaslessSwitchV2ABI.json +1095 -0
  7. package/dist/constants.d.ts +276 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +403 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/gasless-client.d.ts +81 -0
  12. package/dist/gasless-client.d.ts.map +1 -0
  13. package/dist/gasless-client.js +467 -0
  14. package/dist/gasless-client.js.map +1 -0
  15. package/dist/gasless-index.d.ts +5 -0
  16. package/dist/gasless-index.d.ts.map +1 -0
  17. package/dist/gasless-index.js +5 -0
  18. package/dist/gasless-index.js.map +1 -0
  19. package/dist/gasless-operators.d.ts +32 -0
  20. package/dist/gasless-operators.d.ts.map +1 -0
  21. package/dist/gasless-operators.js +132 -0
  22. package/dist/gasless-operators.js.map +1 -0
  23. package/dist/gasless-store.d.ts +18 -0
  24. package/dist/gasless-store.d.ts.map +1 -0
  25. package/dist/gasless-store.js +83 -0
  26. package/dist/gasless-store.js.map +1 -0
  27. package/dist/gasless-types.d.ts +218 -0
  28. package/dist/gasless-types.d.ts.map +1 -0
  29. package/dist/gasless-types.js +2 -0
  30. package/dist/gasless-types.js.map +1 -0
  31. package/dist/gasless.d.ts +135 -0
  32. package/dist/gasless.d.ts.map +1 -0
  33. package/dist/gasless.js +513 -0
  34. package/dist/gasless.js.map +1 -0
  35. package/dist/index.d.ts +29 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +30 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/limit-orders.d.ts +440 -0
  40. package/dist/limit-orders.d.ts.map +1 -0
  41. package/dist/limit-orders.js +387 -0
  42. package/dist/limit-orders.js.map +1 -0
  43. package/dist/networks/index.d.ts +3 -0
  44. package/dist/networks/index.d.ts.map +1 -0
  45. package/dist/networks/index.js +2 -0
  46. package/dist/networks/index.js.map +1 -0
  47. package/dist/networks/robinhood.d.ts +536 -0
  48. package/dist/networks/robinhood.d.ts.map +1 -0
  49. package/dist/networks/robinhood.js +489 -0
  50. package/dist/networks/robinhood.js.map +1 -0
  51. package/dist/types.d.ts +436 -0
  52. package/dist/types.d.ts.map +1 -0
  53. package/dist/types.js +19 -0
  54. package/dist/types.js.map +1 -0
  55. package/examples/gasless-nextjs-proxy.ts +87 -0
  56. package/examples/gasless-operator.ts +76 -0
  57. package/examples/gasless-swap.ts +170 -0
  58. package/examples/limit-order-ethers.ts +195 -0
  59. package/examples/nextjs-proxy.ts +82 -0
  60. package/examples/react-hooks.tsx +396 -0
  61. package/examples/swap-ethers.ts +209 -0
  62. package/examples/swap-web3py.py +267 -0
  63. package/package.json +53 -12
  64. package/src/constants.ts +181 -178
  65. package/src/gasless-client.ts +823 -0
  66. package/src/gasless-index.ts +4 -0
  67. package/src/gasless-operators.ts +227 -0
  68. package/src/gasless-store.ts +137 -0
  69. package/src/gasless-types.ts +258 -0
  70. package/src/gasless.ts +756 -0
  71. package/src/index.ts +69 -63
  72. package/src/limit-orders.ts +206 -195
  73. package/src/types.ts +80 -55
@@ -0,0 +1,489 @@
1
+ import { API_BASE } from "../constants.js";
2
+ /** API network value used by Switch endpoints. */
3
+ export const ROBINHOOD_NETWORK = "robinhood";
4
+ /** Robinhood Chain mainnet metadata. */
5
+ export const ROBINHOOD_CHAIN = {
6
+ id: 4663,
7
+ name: "Robinhood Chain",
8
+ nativeCurrency: {
9
+ name: "Ether",
10
+ symbol: "ETH",
11
+ decimals: 18,
12
+ },
13
+ rpcUrls: ["https://rpc.mainnet.chain.robinhood.com"],
14
+ blockExplorerUrl: "https://robinhoodchain.blockscout.com",
15
+ };
16
+ /** Native-ETH sentinel accepted by the Switch quote API. */
17
+ export const ROBINHOOD_NATIVE_ETH = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE";
18
+ /** Switch contracts deployed on Robinhood Chain. */
19
+ export const ROBINHOOD_SWITCH_CONTRACTS = {
20
+ /** ERC-20 approval target. Use quote.tx.to when submitting a swap. */
21
+ router: "0x8b2bBdF41C1486b3482bD0e9603d72f012EE8599",
22
+ legacyRouter: "0x8730C3e2cF2c8CDa8E6166837A1Ed26f46aa9E59",
23
+ /** Legacy view remains bound to the legacy Router; prefer hosted API quotes. */
24
+ routerView: "0xFF6b56d3F444eB5b7FA1db047F57140C84810376",
25
+ limitOrder: "0x1E05115387f314398bbb1A808B25308E71150396",
26
+ legacyLimitOrder: "0x752c50DDd3B426cAE3D7A995F313Ac74ac6B0230",
27
+ nativeEthFlow: "0x8170a3B0e2FD2e4333E0Ca9c9414B2D3dd6aF689",
28
+ legacyNativeEthFlow: "0x029FfC6aF9112eA078f1D6f4a98826DDB2136cf6",
29
+ directFillQuoter: "0x77b246C127c3c501Ec2836A2B53B555208b30B44",
30
+ uniswapV2Adapter: "0x7a14d7A8509a66209D4332843b983b29bF5604A4",
31
+ uniswapV3Adapter: "0xbcA08f296d9Ba0dc19Aa0E05D355365cE29A3205",
32
+ uniswapV4Adapter: "0xB9885d3C55e79499bf887F2fBe445e01A8cFFf1c",
33
+ limitOrderAdapter: "0xb13CC4C37e1C609617C51B5dCDf8e4Ae5721Faa4",
34
+ legacyLimitOrderAdapter: "0x412F625072c10e58C619D1e0b3C95cd3d5689871",
35
+ swapHoodV2Adapter: "0x6D8746f02e52944c13824fA691c6f4186E463354",
36
+ swapHoodV3Adapter: "0x9645dE0AcB48F0AAefdBEb423F0558457907DE98",
37
+ up33Adapter: "0x388179D2FB0ABcE9b03068916aF8a3c4dfD023c8",
38
+ sheriffV2Adapter: "0xBDB3EB0355981500f58C9bc77c3E61762844A146",
39
+ sheriffAlgebraAdapter: "0xaC4da986100724983042Ec28c28db243E2f828CB",
40
+ aeonAlgebraAdapter: "0x20615954FB87360139e7DdDB519359498EbD1904",
41
+ catnipV2Adapter: "0x5b2Ca358d56490Dc86224D502522314De7707237",
42
+ pancakeSwapV2Adapter: "0x3B6e71A59553143937Fef74a7B50AFD24528786E",
43
+ pancakeSwapV3Adapter: "0xD2Adac87bab4f0f99CF2a21c552c88d1C9825cCC",
44
+ robinSwapV2Adapter: "0xF694145F104c3C24f723301e160D2Ccf0Db31FE6",
45
+ robinSwapV3Adapter: "0x798f77D63b46b0E019de206E111e5ea5CC16BEc8",
46
+ sushiSwapV3Adapter: "0xca3EA0Fd6E31f94c81B6586836790adE638313ED",
47
+ gigaV2Adapter: "0xa379c7D17F7fEe735773879D4069886B117AB54a",
48
+ gigaV3Adapter: "0xcAa612CDe3d3FbE97Be97eB5f79BC91597432d55",
49
+ flapAdapter: "0x6af2A4475C44d5833575150Bf7C3D3FE6Bf4F344",
50
+ ramsesV3Adapter: "0xdBf182774C60932c6fe1Bf3FFaB8Ca28CCb0dC17",
51
+ ramsesV2Adapter: "0x5fe3b873c222e76f7630b40052f07ee06196E6d3",
52
+ limitOrderAdapterIndex: 3,
53
+ };
54
+ /**
55
+ * Snapshot of the ordered production adapter registry verified on 2026-08-25.
56
+ *
57
+ * Adapter registration can change. Fetch
58
+ * `GET /swap/adapters?network=robinhood` when runtime freshness matters.
59
+ */
60
+ export const ROBINHOOD_ADAPTERS = [
61
+ {
62
+ index: 0,
63
+ name: "UniswapV2",
64
+ address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV2Adapter,
65
+ taxSafe: true,
66
+ },
67
+ {
68
+ index: 1,
69
+ name: "UniswapV3",
70
+ address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV3Adapter,
71
+ taxSafe: false,
72
+ },
73
+ {
74
+ index: 2,
75
+ name: "UniswapV4",
76
+ address: ROBINHOOD_SWITCH_CONTRACTS.uniswapV4Adapter,
77
+ taxSafe: false,
78
+ },
79
+ {
80
+ index: 3,
81
+ name: "SwitchLimitOrders",
82
+ address: ROBINHOOD_SWITCH_CONTRACTS.limitOrderAdapter,
83
+ taxSafe: false,
84
+ },
85
+ {
86
+ index: 4,
87
+ name: "SwapHoodV2",
88
+ address: ROBINHOOD_SWITCH_CONTRACTS.swapHoodV2Adapter,
89
+ taxSafe: true,
90
+ },
91
+ {
92
+ index: 5,
93
+ name: "SwapHoodV3",
94
+ address: ROBINHOOD_SWITCH_CONTRACTS.swapHoodV3Adapter,
95
+ taxSafe: false,
96
+ },
97
+ {
98
+ index: 6,
99
+ name: "Up33",
100
+ address: ROBINHOOD_SWITCH_CONTRACTS.up33Adapter,
101
+ taxSafe: false,
102
+ },
103
+ {
104
+ index: 7,
105
+ name: "SheriffV2",
106
+ address: ROBINHOOD_SWITCH_CONTRACTS.sheriffV2Adapter,
107
+ taxSafe: true,
108
+ },
109
+ {
110
+ index: 8,
111
+ name: "SheriffAlgebra",
112
+ address: ROBINHOOD_SWITCH_CONTRACTS.sheriffAlgebraAdapter,
113
+ taxSafe: false,
114
+ },
115
+ {
116
+ index: 9,
117
+ name: "AeonAlgebra",
118
+ address: ROBINHOOD_SWITCH_CONTRACTS.aeonAlgebraAdapter,
119
+ taxSafe: false,
120
+ },
121
+ {
122
+ index: 10,
123
+ name: "CatnipV2",
124
+ address: ROBINHOOD_SWITCH_CONTRACTS.catnipV2Adapter,
125
+ taxSafe: true,
126
+ },
127
+ {
128
+ index: 11,
129
+ name: "PancakeSwapV2",
130
+ address: ROBINHOOD_SWITCH_CONTRACTS.pancakeSwapV2Adapter,
131
+ taxSafe: true,
132
+ },
133
+ {
134
+ index: 12,
135
+ name: "PancakeSwapV3",
136
+ address: ROBINHOOD_SWITCH_CONTRACTS.pancakeSwapV3Adapter,
137
+ taxSafe: false,
138
+ },
139
+ {
140
+ index: 13,
141
+ name: "RobinSwapV2",
142
+ address: ROBINHOOD_SWITCH_CONTRACTS.robinSwapV2Adapter,
143
+ taxSafe: true,
144
+ },
145
+ {
146
+ index: 14,
147
+ name: "RobinSwapV3",
148
+ address: ROBINHOOD_SWITCH_CONTRACTS.robinSwapV3Adapter,
149
+ taxSafe: false,
150
+ },
151
+ {
152
+ index: 15,
153
+ name: "SushiSwapV3",
154
+ address: ROBINHOOD_SWITCH_CONTRACTS.sushiSwapV3Adapter,
155
+ taxSafe: false,
156
+ },
157
+ {
158
+ index: 16,
159
+ name: "GigaV2",
160
+ address: ROBINHOOD_SWITCH_CONTRACTS.gigaV2Adapter,
161
+ taxSafe: true,
162
+ },
163
+ {
164
+ index: 17,
165
+ name: "GigaV3",
166
+ address: ROBINHOOD_SWITCH_CONTRACTS.gigaV3Adapter,
167
+ taxSafe: false,
168
+ },
169
+ {
170
+ index: 18,
171
+ name: "Flap",
172
+ address: ROBINHOOD_SWITCH_CONTRACTS.flapAdapter,
173
+ taxSafe: true,
174
+ },
175
+ {
176
+ index: 19,
177
+ name: "RamsesV3",
178
+ address: ROBINHOOD_SWITCH_CONTRACTS.ramsesV3Adapter,
179
+ taxSafe: false,
180
+ },
181
+ {
182
+ index: 20,
183
+ name: "RamsesV2",
184
+ address: ROBINHOOD_SWITCH_CONTRACTS.ramsesV2Adapter,
185
+ taxSafe: true,
186
+ },
187
+ ];
188
+ /** Adapter indices currently eligible for Robinhood transfer-tax routes. */
189
+ export const ROBINHOOD_TAX_SAFE_ADAPTER_INDICES = [
190
+ 0, 4, 7, 10, 11, 13, 16, 18, 20,
191
+ ];
192
+ /** Current Robinhood transfer-tax-safe adapter metadata. */
193
+ export const ROBINHOOD_TAX_SAFE_ADAPTERS = ROBINHOOD_ADAPTERS.filter((adapter) => adapter.taxSafe);
194
+ /** EIP-712 domain used for Robinhood ERC-20 limit-order signatures. */
195
+ export const ROBINHOOD_LIMIT_ORDER_EIP712_DOMAIN = {
196
+ name: "SwitchLimitOrder",
197
+ version: "2",
198
+ chainId: ROBINHOOD_CHAIN.id,
199
+ verifyingContract: ROBINHOOD_SWITCH_CONTRACTS.limitOrder,
200
+ };
201
+ /** Uniswap contracts used by the Robinhood Switch deployment. */
202
+ export const ROBINHOOD_UNISWAP_CONTRACTS = {
203
+ v2Factory: "0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f",
204
+ v3Factory: "0x1f7d7550B1b028f7571E69A784071F0205FD2EfA",
205
+ v3QuoterV2: "0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7",
206
+ v3SwapRouter02: "0xCaf681a66D020601342297493863E78C959E5cb2",
207
+ /** Canonical Uniswap V4 singleton and periphery deployments. */
208
+ v4PoolManager: "0x8366a39cc670b4001a1121b8f6a443a643e40951",
209
+ v4PositionDescriptor: "0x9639443158e8c5efa35bd45287bf2effd3d8dc06",
210
+ v4PositionManager: "0x58daec3116aae6d93017baaea7749052e8a04fa7",
211
+ v4Quoter: "0x8dc178efb8111bb0973dd9d722ebeff267c98f94",
212
+ v4StateView: "0xf3334192d15450cdd385c8b70e03f9a6bd9e673b",
213
+ v4UniversalRouter: "0x8876789976decbfcbbbe364623c63652db8c0904",
214
+ permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
215
+ };
216
+ /**
217
+ * Tokens in the Switch Robinhood frontend's curated list.
218
+ *
219
+ * Community-token addresses must never be selected by symbol alone; clones
220
+ * can share the same symbol. The addresses, symbols, and decimals below were
221
+ * checked against Robinhood Chain on 2026-07-11.
222
+ */
223
+ export const ROBINHOOD_TOKENS = {
224
+ WETH: {
225
+ address: "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",
226
+ symbol: "WETH",
227
+ name: "Wrapped Ether",
228
+ decimals: 18,
229
+ },
230
+ USDG: {
231
+ address: "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168",
232
+ symbol: "USDG",
233
+ name: "Global Dollar",
234
+ decimals: 6,
235
+ },
236
+ VIRTUAL: {
237
+ address: "0xc6911796042b15d7Fa4F6CDe69e245DdCd3d9c31",
238
+ symbol: "VIRTUAL",
239
+ name: "Virtuals Protocol",
240
+ decimals: 18,
241
+ },
242
+ CASHCAT: {
243
+ address: "0x020bfC650A365f8BB26819deAAbF3E21291018b4",
244
+ symbol: "CASHCAT",
245
+ name: "Cash Cat",
246
+ decimals: 18,
247
+ },
248
+ WALLET: {
249
+ address: "0x0339f5459FC690aC85F1782e15782A151b4A9E1b",
250
+ symbol: "WALLET",
251
+ name: "Robinhood Wallet",
252
+ decimals: 18,
253
+ },
254
+ SEEDCOIN: {
255
+ address: "0x58f693A30F124E59b125F7c7b837b0F6bbAF5a45",
256
+ symbol: "SEEDCOIN",
257
+ name: "Seedcoin",
258
+ decimals: 18,
259
+ },
260
+ JUGGERNAUT: {
261
+ address: "0xD7321801CAae694090694Ff55A9323139F043B88",
262
+ symbol: "JUGGERNAUT",
263
+ name: "The Juggernaut",
264
+ decimals: 18,
265
+ },
266
+ HOODRAT: {
267
+ address: "0x8e62F281f282686fCa6dCB39288069a93fC23F1c",
268
+ symbol: "HOODRAT",
269
+ name: "Hoodrat",
270
+ decimals: 18,
271
+ },
272
+ DIH: {
273
+ address: "0x17bb0C898254406b1Ea2e8E99B0C263e26c9E4a4",
274
+ symbol: "DIH",
275
+ name: "Dog In Hood",
276
+ decimals: 18,
277
+ },
278
+ KITSU: {
279
+ address: "0x8d4dFaaA4198b6486E0293Fec914C2B6a821D4DC",
280
+ symbol: "KITSU",
281
+ name: "KITSU",
282
+ decimals: 18,
283
+ },
284
+ WEN: {
285
+ address: "0xA80eb66b3E0CF66ccB46f8b8C9e7ff5803eEb820",
286
+ symbol: "WEN",
287
+ name: "Wen Lambo",
288
+ decimals: 18,
289
+ },
290
+ REPE: {
291
+ address: "0x5266eeafF092D6136AB63D18B975A60a0Cc0C8f7",
292
+ symbol: "REPE",
293
+ name: "Robinhood Pepe",
294
+ decimals: 18,
295
+ },
296
+ TENDIES: {
297
+ address: "0x45242320DBB855EeA8Fd36804C6487E10E97FCF9",
298
+ symbol: "TENDIES",
299
+ name: "TENDIES",
300
+ decimals: 18,
301
+ },
302
+ GME: {
303
+ address: "0x7e86381A763F0Ecca2bDF27C54eAC403ddD48123",
304
+ symbol: "GME",
305
+ name: "GameStop",
306
+ decimals: 18,
307
+ },
308
+ TOKEN_4663: {
309
+ address: "0xd4052415613B34Af236024B895574c467f65b6dD",
310
+ symbol: "4663",
311
+ name: "4663",
312
+ decimals: 18,
313
+ },
314
+ MARIAN: {
315
+ address: "0x01637b14B7378B99dE75A64d50656d98488D9a4d",
316
+ symbol: "MARIAN",
317
+ name: "Lady Marian",
318
+ decimals: 18,
319
+ },
320
+ INDEX: {
321
+ address: "0x56910D4409F3a0C78C64DD8D0545FF0705389870",
322
+ symbol: "Index",
323
+ name: "The Index",
324
+ decimals: 18,
325
+ },
326
+ VEX: {
327
+ address: "0x8Ff92566f2e81BDd68EDfAa8cde73942A723796b",
328
+ symbol: "VEX",
329
+ name: "ProjectVex",
330
+ decimals: 18,
331
+ },
332
+ HOODIE: {
333
+ address: "0xC72c01AAB5f5678dc1d6f5C6d2B417d91D402Ba3",
334
+ symbol: "HOODIE",
335
+ name: "HOODIE",
336
+ decimals: 18,
337
+ },
338
+ WISHBONE: {
339
+ address: "0x77581054581B9c525E7dd7a0155DE43867532d03",
340
+ symbol: "WISHBONE",
341
+ name: "WISHBONE",
342
+ decimals: 18,
343
+ },
344
+ VLAD: {
345
+ address: "0x31BE8f7485e36928C9De86566c62da82d4B6BF81",
346
+ symbol: "VLAD",
347
+ name: "The Green Bull",
348
+ decimals: 18,
349
+ },
350
+ AEON: {
351
+ address: "0xd4c93eD1843606f92CccA078941f3d52A585982f",
352
+ symbol: "AEON",
353
+ name: "Aeon",
354
+ decimals: 18,
355
+ },
356
+ };
357
+ /** Exact ERC-20 ordering used by the Switch Robinhood token dropdown. */
358
+ export const ROBINHOOD_FRONTEND_TOKEN_LIST = [
359
+ ROBINHOOD_TOKENS.WETH,
360
+ ROBINHOOD_TOKENS.USDG,
361
+ ROBINHOOD_TOKENS.VIRTUAL,
362
+ ROBINHOOD_TOKENS.CASHCAT,
363
+ ROBINHOOD_TOKENS.WALLET,
364
+ ROBINHOOD_TOKENS.SEEDCOIN,
365
+ ROBINHOOD_TOKENS.JUGGERNAUT,
366
+ ROBINHOOD_TOKENS.HOODRAT,
367
+ ROBINHOOD_TOKENS.DIH,
368
+ ROBINHOOD_TOKENS.KITSU,
369
+ ROBINHOOD_TOKENS.WEN,
370
+ ROBINHOOD_TOKENS.REPE,
371
+ ROBINHOOD_TOKENS.TENDIES,
372
+ ROBINHOOD_TOKENS.GME,
373
+ ROBINHOOD_TOKENS.TOKEN_4663,
374
+ ROBINHOOD_TOKENS.MARIAN,
375
+ ROBINHOOD_TOKENS.INDEX,
376
+ ROBINHOOD_TOKENS.VEX,
377
+ ROBINHOOD_TOKENS.HOODIE,
378
+ ROBINHOOD_TOKENS.WISHBONE,
379
+ ROBINHOOD_TOKENS.VLAD,
380
+ ROBINHOOD_TOKENS.AEON,
381
+ ];
382
+ /**
383
+ * Tokens used to initialize the Robinhood swap UI.
384
+ *
385
+ * The current default pair is native ETH -> USDG. WETH remains in this set so
386
+ * native/wrapped lookup and token selection use the canonical deployment.
387
+ */
388
+ export const ROBINHOOD_FRONTEND_DEFAULT_TOKENS = [
389
+ {
390
+ address: ROBINHOOD_NATIVE_ETH,
391
+ symbol: "ETH",
392
+ name: "Ether",
393
+ decimals: 18,
394
+ },
395
+ ROBINHOOD_TOKENS.WETH,
396
+ ROBINHOOD_TOKENS.USDG,
397
+ ROBINHOOD_TOKENS.VIRTUAL,
398
+ ROBINHOOD_TOKENS.CASHCAT,
399
+ ROBINHOOD_TOKENS.INDEX,
400
+ ];
401
+ /**
402
+ * Production trusted-hop addresses, ordered by routing usefulness.
403
+ *
404
+ * The 2026-07-16 audit combined Dexscreener pool connectivity with Switch tax
405
+ * simulation, then required multiple meaningful liquidity corridors. VEX is
406
+ * selectable but excluded because it is taxed; INDEX is excluded because its
407
+ * dominant liquidity currently depends on unsupported V4 hooks. Keep this
408
+ * list synchronized with the Robinhood backend and operator bot.
409
+ */
410
+ export const ROBINHOOD_TRUSTED_INTERMEDIATES = [
411
+ ROBINHOOD_TOKENS.WETH.address,
412
+ ROBINHOOD_TOKENS.USDG.address,
413
+ ROBINHOOD_TOKENS.VIRTUAL.address,
414
+ ROBINHOOD_TOKENS.CASHCAT.address,
415
+ ROBINHOOD_TOKENS.HOODRAT.address,
416
+ ROBINHOOD_TOKENS.TENDIES.address,
417
+ ROBINHOOD_TOKENS.JUGGERNAUT.address,
418
+ ROBINHOOD_TOKENS.MARIAN.address,
419
+ ROBINHOOD_TOKENS.WALLET.address,
420
+ ];
421
+ /** Preferred Robinhood fee tokens, from highest to lowest priority. */
422
+ export const ROBINHOOD_FEE_TOKEN_PRIORITY = [
423
+ ROBINHOOD_TOKENS.WETH.address,
424
+ ROBINHOOD_TOKENS.USDG.address,
425
+ ROBINHOOD_TOKENS.WALLET.address,
426
+ ROBINHOOD_TOKENS.SEEDCOIN.address,
427
+ ROBINHOOD_TOKENS.CASHCAT.address,
428
+ ];
429
+ const ROBINHOOD_FEE_PRIORITY_BY_ADDRESS = new Map(ROBINHOOD_FEE_TOKEN_PRIORITY.map((address, index) => [
430
+ address.toLowerCase(),
431
+ index + 1,
432
+ ]));
433
+ ROBINHOOD_FEE_PRIORITY_BY_ADDRESS.set(ROBINHOOD_NATIVE_ETH.toLowerCase(), 1);
434
+ /**
435
+ * Select the safer/preferred fee side for a Robinhood swap.
436
+ *
437
+ * Tax safety takes precedence over fee-token preference. Native ETH is treated
438
+ * as equivalent to WETH. `false` means fee on input; `true` means fee on output.
439
+ */
440
+ export function selectRobinhoodFeeOnOutput(from, to, fromTax, toTax) {
441
+ const inputHasSellTax = fromTax.isTaxToken && fromTax.sellTaxBps > 0;
442
+ const outputHasBuyTax = toTax.isTaxToken && toTax.buyTaxBps > 0;
443
+ if (inputHasSellTax && outputHasBuyTax)
444
+ return false;
445
+ if (outputHasBuyTax)
446
+ return false;
447
+ if (inputHasSellTax)
448
+ return true;
449
+ const inputPriority = ROBINHOOD_FEE_PRIORITY_BY_ADDRESS.get(from.toLowerCase()) ?? Infinity;
450
+ const outputPriority = ROBINHOOD_FEE_PRIORITY_BY_ADDRESS.get(to.toLowerCase()) ?? Infinity;
451
+ if (outputPriority < inputPriority)
452
+ return true;
453
+ if (inputPriority < outputPriority)
454
+ return false;
455
+ if (inputPriority !== Infinity)
456
+ return true;
457
+ return false;
458
+ }
459
+ /** Build a Robinhood quote URL with the required network value included. */
460
+ export function buildRobinhoodQuoteUrl(params, apiBase = API_BASE) {
461
+ const query = new URLSearchParams({
462
+ network: ROBINHOOD_NETWORK,
463
+ from: params.from,
464
+ to: params.to,
465
+ amount: params.amount.toString(),
466
+ });
467
+ if (params.sender)
468
+ query.set("sender", params.sender);
469
+ if (params.receiver)
470
+ query.set("receiver", params.receiver);
471
+ if (params.slippage !== undefined) {
472
+ query.set("slippage", params.slippage.toString());
473
+ }
474
+ if (params.fee !== undefined)
475
+ query.set("fee", params.fee.toString());
476
+ if (params.partnerAddress) {
477
+ query.set("partnerAddress", params.partnerAddress);
478
+ }
479
+ if (params.feeOnOutput !== undefined) {
480
+ query.set("feeOnOutput", params.feeOnOutput.toString());
481
+ }
482
+ if (params.adapters !== undefined) {
483
+ query.set("adapters", Array.isArray(params.adapters)
484
+ ? params.adapters.join(",")
485
+ : String(params.adapters));
486
+ }
487
+ return `${apiBase.replace(/\/$/, "")}/swap/quote?${query.toString()}`;
488
+ }
489
+ //# sourceMappingURL=robinhood.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robinhood.js","sourceRoot":"","sources":["../../src/networks/robinhood.ts"],"names":[],"mappings":"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"}