sol-trade-sdk 0.1.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 (87) hide show
  1. package/README.md +390 -0
  2. package/dist/chunk-MMQAMIKR.mjs +3735 -0
  3. package/dist/chunk-NEZDFAYA.mjs +7744 -0
  4. package/dist/clients-VITWK7B6.mjs +1370 -0
  5. package/dist/index-1BK_FXsW.d.mts +2327 -0
  6. package/dist/index-1BK_FXsW.d.ts +2327 -0
  7. package/dist/index.d.mts +2659 -0
  8. package/dist/index.d.ts +2659 -0
  9. package/dist/index.js +13265 -0
  10. package/dist/index.mjs +562 -0
  11. package/dist/perf/index.d.mts +2 -0
  12. package/dist/perf/index.d.ts +2 -0
  13. package/dist/perf/index.js +3742 -0
  14. package/dist/perf/index.mjs +214 -0
  15. package/package.json +101 -0
  16. package/src/__tests__/complete_sdk.test.ts +354 -0
  17. package/src/__tests__/hotpath.test.ts +486 -0
  18. package/src/__tests__/nonce.test.ts +45 -0
  19. package/src/__tests__/sdk.test.ts +425 -0
  20. package/src/address-lookup/index.ts +197 -0
  21. package/src/cache/cache.ts +308 -0
  22. package/src/calc/index.ts +1058 -0
  23. package/src/calc/pumpfun.ts +124 -0
  24. package/src/common/bonding_curve.ts +272 -0
  25. package/src/common/compute-budget.ts +148 -0
  26. package/src/common/confirm-any-signature.ts +184 -0
  27. package/src/common/fast-timing.ts +481 -0
  28. package/src/common/fast_fn.ts +150 -0
  29. package/src/common/gas-fee-strategy.ts +253 -0
  30. package/src/common/map-pool.ts +23 -0
  31. package/src/common/nonce.ts +40 -0
  32. package/src/common/sdk-log.ts +460 -0
  33. package/src/common/seed.ts +381 -0
  34. package/src/common/spl-token.ts +578 -0
  35. package/src/common/subscription-handle.ts +644 -0
  36. package/src/common/trading-utils.ts +239 -0
  37. package/src/common/wsol-manager.ts +325 -0
  38. package/src/compute/compute_budget_manager.ts +187 -0
  39. package/src/compute/index.ts +21 -0
  40. package/src/constants/index.ts +96 -0
  41. package/src/execution/execution.ts +532 -0
  42. package/src/execution/index.ts +42 -0
  43. package/src/hotpath/executor.ts +464 -0
  44. package/src/hotpath/index.ts +64 -0
  45. package/src/hotpath/state.ts +435 -0
  46. package/src/index.ts +2117 -0
  47. package/src/instruction/bonk_builder.ts +730 -0
  48. package/src/instruction/index.ts +24 -0
  49. package/src/instruction/meteora_damm_v2_builder.ts +509 -0
  50. package/src/instruction/pumpfun_builder.ts +1183 -0
  51. package/src/instruction/pumpswap.ts +1123 -0
  52. package/src/instruction/raydium_amm_v4_builder.ts +692 -0
  53. package/src/instruction/raydium_cpmm_builder.ts +795 -0
  54. package/src/middleware/traits.ts +407 -0
  55. package/src/params/index.ts +483 -0
  56. package/src/perf/compiler-optimization.ts +529 -0
  57. package/src/perf/hardware.ts +631 -0
  58. package/src/perf/index.ts +9 -0
  59. package/src/perf/kernel-bypass.ts +656 -0
  60. package/src/perf/protocol.ts +682 -0
  61. package/src/perf/realtime.ts +592 -0
  62. package/src/perf/simd.ts +668 -0
  63. package/src/perf/syscall-bypass.ts +331 -0
  64. package/src/perf/ultra-low-latency.ts +505 -0
  65. package/src/perf/zero-copy.ts +589 -0
  66. package/src/pool/pool.ts +294 -0
  67. package/src/rpc/client.ts +345 -0
  68. package/src/sdk-errors.ts +13 -0
  69. package/src/security/index.ts +26 -0
  70. package/src/security/secure-key.ts +303 -0
  71. package/src/security/validators.ts +281 -0
  72. package/src/seed/pda.ts +262 -0
  73. package/src/serialization/index.ts +28 -0
  74. package/src/serialization/serialization.ts +288 -0
  75. package/src/swqos/clients.ts +1754 -0
  76. package/src/swqos/index.ts +50 -0
  77. package/src/swqos/providers.ts +1707 -0
  78. package/src/trading/core/async-executor.ts +702 -0
  79. package/src/trading/core/confirmation-monitor.ts +711 -0
  80. package/src/trading/core/index.ts +82 -0
  81. package/src/trading/core/retry-handler.ts +683 -0
  82. package/src/trading/core/transaction-pool.ts +780 -0
  83. package/src/trading/executor.ts +385 -0
  84. package/src/trading/factory.ts +282 -0
  85. package/src/trading/index.ts +30 -0
  86. package/src/types.ts +8 -0
  87. package/src/utils/index.ts +155 -0
@@ -0,0 +1,1370 @@
1
+ import {
2
+ TradeError
3
+ } from "./chunk-NEZDFAYA.mjs";
4
+ import "./chunk-MMQAMIKR.mjs";
5
+
6
+ // src/swqos/clients.ts
7
+ function randomChoice(arr) {
8
+ const item = arr[Math.floor(Math.random() * arr.length)];
9
+ if (item === void 0) {
10
+ throw new Error("randomChoice called with empty array");
11
+ }
12
+ return item;
13
+ }
14
+ var MIN_TIP_JITO = 1e-5;
15
+ var MIN_TIP_BLOXROUTE = 1e-4;
16
+ var MIN_TIP_ZERO_SLOT = 1e-4;
17
+ var MIN_TIP_TEMPORAL = 1e-4;
18
+ var MIN_TIP_FLASH_BLOCK = 1e-4;
19
+ var MIN_TIP_BLOCK_RAZOR = 1e-4;
20
+ var MIN_TIP_NODE1 = 1e-4;
21
+ var MIN_TIP_ASTRALANE = 1e-5;
22
+ var MIN_TIP_HELIUS = 5e-6;
23
+ var MIN_TIP_HELIUS_NORMAL = 2e-4;
24
+ var MIN_TIP_STELLIUM = 1e-4;
25
+ var MIN_TIP_LIGHTSPEED = 1e-4;
26
+ var MIN_TIP_NEXT_BLOCK = 1e-3;
27
+ var MIN_TIP_SOYAS = 1e-3;
28
+ var MIN_TIP_SPEEDLANDING = 1e-3;
29
+ var MIN_TIP_DEFAULT = 0;
30
+ var JITO_TIP_ACCOUNTS = [
31
+ "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5",
32
+ "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe",
33
+ "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY",
34
+ "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49",
35
+ "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh",
36
+ "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt",
37
+ "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL",
38
+ "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT"
39
+ ];
40
+ var ZERO_SLOT_TIP_ACCOUNTS = [
41
+ "Eb2KpSC8uMt9GmzyAEm5Eb1AAAgTjRaXWFjKyFXHZxF3",
42
+ "FCjUJZ1qozm1e8romw216qyfQMaaWKxWsuySnumVCCNe",
43
+ "ENxTEjSQ1YabmUpXAdCgevnHQ9MHdLv8tzFiuiYJqa13",
44
+ "6rYLG55Q9RpsPGvqdPNJs4z5WTxJVatMB8zV3WJhs5EK",
45
+ "Cix2bHfqPcKcM233mzxbLk14kSggUUiz2A87fJtGivXr"
46
+ ];
47
+ var TEMPORAL_TIP_ACCOUNTS = [
48
+ "TEMPaMeCRFAS9EKF53Jd6KpHxgL47uWLcpFArU1Fanq",
49
+ "noz3jAjPiHuBPqiSPkkugaJDkJscPuRhYnSpbi8UvC4",
50
+ "noz3str9KXfpKknefHji8L1mPgimezaiUyCHYMDv1GE",
51
+ "noz6uoYCDijhu1V7cutCpwxNiSovEwLdRHPwmgCGDNo",
52
+ "noz9EPNcT7WH6Sou3sr3GGjHQYVkN3DNirpbvDkv9YJ",
53
+ "nozc5yT15LazbLTFVZzoNZCwjh3yUtW86LoUyqsBu4L",
54
+ "nozFrhfnNGoyqwVuwPAW4aaGqempx4PU6g6D9CJMv7Z",
55
+ "nozievPk7HyK1Rqy1MPJwVQ7qQg2QoJGyP71oeDwbsu",
56
+ "noznbgwYnBLDHu8wcQVCEw6kDrXkPdKkydGJGNXGvL7",
57
+ "nozNVWs5N8mgzuD3qigrCG2UoKxZttxzZ85pvAQVrbP",
58
+ "nozpEGbwx4BcGp6pvEdAh1JoC2CQGZdU6HbNP1v2p6P",
59
+ "nozrhjhkCr3zXT3BiT4WCodYCUFeQvcdUkM7MqhKqge",
60
+ "nozrwQtWhEdrA6W8dkbt9gnUaMs52PdAv5byipnadq3",
61
+ "nozUacTVWub3cL4mJmGCYjKZTnE9RbdY5AP46iQgbPJ",
62
+ "nozWCyTPppJjRuw2fpzDhhWbW355fzosWSzrrMYB1Qk",
63
+ "nozWNju6dY353eMkMqURqwQEoM3SFgEKC6psLCSfUne",
64
+ "nozxNBgWohjR75vdspfxR5H9ceC7XXH99xpxhVGt3Bb"
65
+ ];
66
+ var FLASH_BLOCK_TIP_ACCOUNTS = [
67
+ "FLaShB3iXXTWE1vu9wQsChUKq3HFtpMAhb8kAh1pf1wi",
68
+ "FLashhsorBmM9dLpuq6qATawcpqk1Y2aqaZfkd48iT3W",
69
+ "FLaSHJNm5dWYzEgnHJWWJP5ccu128Mu61NJLxUf7mUXU",
70
+ "FLaSHR4Vv7sttd6TyDF4yR1bJyAxRwWKbohDytEMu3wL",
71
+ "FLASHRzANfcAKDuQ3RXv9hbkBy4WVEKDzoAgxJ56DiE4",
72
+ "FLasHstqx11M8W56zrSEqkCyhMCCpr6ze6Mjdvqope5s",
73
+ "FLAShWTjcweNT4NSotpjpxAkwxUr2we3eXQGhpTVzRwy",
74
+ "FLasHXTqrbNvpWFB6grN47HGZfK6pze9HLNTgbukfPSk",
75
+ "FLAShyAyBcKb39KPxSzXcepiS8iDYUhDGwJcJDPX4g2B",
76
+ "FLAsHZTRcf3Dy1APaz6j74ebdMC6Xx4g6i9YxjyrDybR"
77
+ ];
78
+ var HELIUS_TIP_ACCOUNTS = [
79
+ "4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE",
80
+ "D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ",
81
+ "9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta",
82
+ "5VY91ws6B2hMmBFRsXkoAAdsPHBJwRfBht4DXox3xkwn",
83
+ "2nyhqdwKcJZR2vcqCyrYsaPVdAnFoJjiksCXJ7hfEYgD",
84
+ "2q5pghRs6arqVjRvT5gfgWfWcHWmw1ZuCzphgd5KfWGJ",
85
+ "wyvPkWjVZz1M8fHQnMMCDTQDbkManefNNhweYk5WkcF",
86
+ "3KCKozbAaF75qEU33jtzozcJ29yJuaLJTy2jFdzUY8bT",
87
+ "4vieeGHPYPG2MmyPRcYjdiDmmhN3ww7hsFNap8pVN3Ey",
88
+ "4TQLFNWK8AovT1gFvda5jfw2oJeRMKEmw7aH6MGBJ3or"
89
+ ];
90
+ var NODE1_TIP_ACCOUNTS = [
91
+ "node1PqAa3BWWzUnTHVbw8NJHC874zn9ngAkXjgWEej",
92
+ "node1UzzTxAAeBTpfZkQPJXBAqixsbdth11ba1NXLBG",
93
+ "node1Qm1bV4fwYnCurP8otJ9s5yrkPq7SPZ5uhj3Tsv",
94
+ "node1PUber6SFmSQgvf2ECmXsHP5o3boRSGhvJyPMX1",
95
+ "node1AyMbeqiVN6eoQzEAwCA6Pk826hrdqdAHR7cdJ3",
96
+ "node1YtWCoTwwVYTFLfS19zquRQzYX332hs1HEuRBjC"
97
+ ];
98
+ var BLOCK_RAZOR_TIP_ACCOUNTS = [
99
+ "FjmZZrFvhnqqb9ThCuMVnENaM3JGVuGWNyCAxRJcFpg9",
100
+ "6No2i3aawzHsjtThw81iq1EXPJN6rh8eSJCLaYZfKDTG",
101
+ "A9cWowVAiHe9pJfKAj3TJiN9VpbzMUq6E4kEvf5mUT22",
102
+ "Gywj98ophM7GmkDdaWs4isqZnDdFCW7B46TXmKfvyqSm",
103
+ "68Pwb4jS7eZATjDfhmTXgRJjCiZmw1L7Huy4HNpnxJ3o",
104
+ "4ABhJh5rZPjv63RBJBuyWzBK3g9gWMUQdTZP2kiW31V9",
105
+ "B2M4NG5eyZp5SBQrSdtemzk5TqVuaWGQnowGaCBt8GyM",
106
+ "5jA59cXMKQqZAVdtopv8q3yyw9SYfiE3vUCbt7p8MfVf",
107
+ "5YktoWygr1Bp9wiS1xtMtUki1PeYuuzuCF98tqwYxf61",
108
+ "295Avbam4qGShBYK7E9H5Ldew4B3WyJGmgmXfiWdeeyV",
109
+ "EDi4rSy2LZgKJX74mbLTFk4mxoTgT6F7HxxzG2HBAFyK",
110
+ "BnGKHAC386n4Qmv9xtpBVbRaUTKixjBe3oagkPFKtoy6",
111
+ "Dd7K2Fp7AtoN8xCghKDRmyqr5U169t48Tw5fEd3wT9mq",
112
+ "AP6qExwrbRgBAVaehg4b5xHENX815sMabtBzUzVB4v8S"
113
+ ];
114
+ var ASTRALANE_TIP_ACCOUNTS = [
115
+ "astrazznxsGUhWShqgNtAdfrzP2G83DzcWVJDxwV9bF",
116
+ "astra4uejePWneqNaJKuFFA8oonqCE1sqF6b45kDMZm",
117
+ "astra9xWY93QyfG6yM8zwsKsRodscjQ2uU2HKNL5prk",
118
+ "astraRVUuTHjpwEVvNBeQEgwYx9w9CFyfxjYoobCZhL",
119
+ "astraEJ2fEj8Xmy6KLG7B3VfbKfsHXhHrNdCQx7iGJK",
120
+ "astraubkDw81n4LuutzSQ8uzHCv4BhPVhfvTcYv8SKC",
121
+ "astraZW5GLFefxNPAatceHhYjfA1ciq9gvfEg2S47xk",
122
+ "astrawVNP4xDBKT7rAdxrLYiTSTdqtUr63fSMduivXK",
123
+ "AstrA1ejL4UeXC2SBP4cpeEmtcFPZVLxx3XGKXyCW6to",
124
+ "AsTra79FET4aCKWspPqeSFvjJNyp96SvAnrmyAxqg5b7",
125
+ "AstrABAu8CBTyuPXpV4eSCJ5fePEPnxN8NqBaPKQ9fHR",
126
+ "AsTRADtvb6tTmrsqULQ9Wji9PigDMjhfEMza6zkynEvV",
127
+ "AsTRAEoyMofR3vUPpf9k68Gsfb6ymTZttEtsAbv8Bk4d",
128
+ "AStrAJv2RN2hKCHxwUMtqmSxgdcNZbihCwc1mCSnG83W",
129
+ "Astran35aiQUF57XZsmkWMtNCtXGLzs8upfiqXxth2bz",
130
+ "AStRAnpi6kFrKypragExgeRoJ1QnKH7pbSjLAKQVWUum",
131
+ "ASTRaoF93eYt73TYvwtsv6fMWHWbGmMUZfVZPo3CRU9C"
132
+ ];
133
+ var BLOXROUTE_TIP_ACCOUNTS = [
134
+ "HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY",
135
+ "95cfoy472fcQHaw4tPGBTKpn6ZQnfEPfBgDQx6gcRmRg",
136
+ "3UQUKjhMKaY2S6bjcQD6yHB7utcZt5bfarRCmctpRtUd",
137
+ "FogxVNs6Mm2w9rnGL1vkARSwJxvLE8mujTv3LK8RnUhF"
138
+ ];
139
+ var STELLIUM_TIP_ACCOUNTS = [
140
+ "ste11JV3MLMM7x7EJUM2sXcJC1H7F4jBLnP9a9PG8PH",
141
+ "ste11MWPjXCRfQryCshzi86SGhuXjF4Lv6xMXD2AoSt",
142
+ "ste11p5x8tJ53H1NbNQsRBg1YNRd4GcVpxtDw8PBpmb",
143
+ "ste11p7e2KLYou5bwtt35H7BM6uMdo4pvioGjJXKFcN",
144
+ "ste11TMV68LMi1BguM4RQujtbNCZvf1sjsASpqgAvSX"
145
+ ];
146
+ var NEXT_BLOCK_TIP_ACCOUNTS = [
147
+ "NextbLoCkVtMGcV47JzewQdvBpLqT9TxQFozQkN98pE",
148
+ "NexTbLoCkWykbLuB1NkjXgFWkX9oAtcoagQegygXXA2",
149
+ "NeXTBLoCKs9F1y5PJS9CKrFNNLU1keHW71rfh7KgA1X",
150
+ "NexTBLockJYZ7QD7p2byrUa6df8ndV2WSd8GkbWqfbb",
151
+ "neXtBLock1LeC67jYd1QdAa32kbVeubsfPNTJC1V5At",
152
+ "nEXTBLockYgngeRmRrjDV31mGSekVPqZoMGhQEZtPVG",
153
+ "NEXTbLoCkB51HpLBLojQfpyVAMorm3zzKg7w9NFdqid",
154
+ "nextBLoCkPMgmG8ZgJtABeScP35qLa2AMCNKntAP7Xc"
155
+ ];
156
+ var SOYAS_TIP_ACCOUNTS = [
157
+ "soyas4s6L8KWZ8rsSk1mF3d1mQScoTGGAgjk98bF8nP",
158
+ "soyascXFW5wEEYiwfEmHy2pNwomqzvggJosGVD6TJdY",
159
+ "soyasDBdKjADwPz3xk82U3TNPRDKEWJj7wWLajNHZ1L",
160
+ "soyasE2abjBAynmHbGWgEwk4ctBy7JMTUCNrMbjcnyH",
161
+ "soyasi59njacMUPvo3TM5paHjeK8pYSdovXgFi32gRt",
162
+ "soyasQYhJxv8uZgWDxhg72td6piAf7XTkoyWHtSATEz",
163
+ "soyastP66xyYC8XADXZjdMM5BAVGD2YRvz8dwtLsqb8",
164
+ "soyasvdgUJWYcUCzDxpmjUnNjH7KamXLXTzLwFvdVPE",
165
+ "soyasvxAunisNxaoRxkKGjNir7KmbwYnr37JmefkX9G",
166
+ "soyas5doVFUwH8s5zK8gEvCL5KR5ogDmf52LsrJEZ9h"
167
+ ];
168
+ var SPEEDLANDING_TIP_ACCOUNTS = [
169
+ "SpEEdz8S1KorkMZqjMUxfxrmWwofmp6ReNP2Nx6CUmq",
170
+ "SpeeDy3GJM4wcrQmk1itRFWgidvxX4rwjTLMv78wwjE",
171
+ "SPeEdva37vW8vRtqgYjprQs1g3965icfVN5Rt7SMAyh",
172
+ "speEdrSEpox5GUfHWcBc7tQjRuSfUin2yvB7qoYvvJh",
173
+ "SPeEDmkHkN3A2roSZf6aZyEMsmrGqTHKqwP51y2Y4rV",
174
+ "SpeedLdTJXh2RKpXEaP8JCxkWoUVXhtdPQ1EnxBJMxc",
175
+ "SpEediGKLbbXndSYTzwmz6Z3NDgHQLDcTDEvGFkSMH9",
176
+ "speede8xCcUq2Tiv1efXeTuE3k9TDNq8TnGKaKSc6J4"
177
+ ];
178
+ var JITO_ENDPOINTS = {
179
+ ["NewYork" /* NewYork */]: "https://ny.mainnet.block-engine.jito.wtf",
180
+ ["Frankfurt" /* Frankfurt */]: "https://frankfurt.mainnet.block-engine.jito.wtf",
181
+ ["Amsterdam" /* Amsterdam */]: "https://amsterdam.mainnet.block-engine.jito.wtf",
182
+ ["Dublin" /* Dublin */]: "https://dublin.mainnet.block-engine.jito.wtf",
183
+ ["SLC" /* SLC */]: "https://slc.mainnet.block-engine.jito.wtf",
184
+ ["Tokyo" /* Tokyo */]: "https://tokyo.mainnet.block-engine.jito.wtf",
185
+ ["London" /* London */]: "https://london.mainnet.block-engine.jito.wtf",
186
+ ["LosAngeles" /* LosAngeles */]: "https://slc.mainnet.block-engine.jito.wtf",
187
+ ["Singapore" /* Singapore */]: "https://singapore.mainnet.block-engine.jito.wtf",
188
+ ["Default" /* Default */]: "https://mainnet.block-engine.jito.wtf"
189
+ };
190
+ var BLOXROUTE_ENDPOINTS = {
191
+ ["NewYork" /* NewYork */]: "https://ny.solana.dex.blxrbdn.com",
192
+ ["Frankfurt" /* Frankfurt */]: "https://germany.solana.dex.blxrbdn.com",
193
+ ["Amsterdam" /* Amsterdam */]: "https://amsterdam.solana.dex.blxrbdn.com",
194
+ ["Dublin" /* Dublin */]: "https://uk.solana.dex.blxrbdn.com",
195
+ ["SLC" /* SLC */]: "https://ny.solana.dex.blxrbdn.com",
196
+ ["Tokyo" /* Tokyo */]: "https://tokyo.solana.dex.blxrbdn.com",
197
+ ["London" /* London */]: "https://uk.solana.dex.blxrbdn.com",
198
+ ["LosAngeles" /* LosAngeles */]: "https://la.solana.dex.blxrbdn.com",
199
+ ["Singapore" /* Singapore */]: "https://global.solana.dex.blxrbdn.com",
200
+ ["Default" /* Default */]: "https://global.solana.dex.blxrbdn.com"
201
+ };
202
+ var ZERO_SLOT_ENDPOINTS = {
203
+ ["NewYork" /* NewYork */]: "http://ny.0slot.trade",
204
+ ["Frankfurt" /* Frankfurt */]: "http://de2.0slot.trade",
205
+ ["Amsterdam" /* Amsterdam */]: "http://ams.0slot.trade",
206
+ ["Dublin" /* Dublin */]: "http://ams.0slot.trade",
207
+ ["SLC" /* SLC */]: "http://la.0slot.trade",
208
+ ["Tokyo" /* Tokyo */]: "http://jp.0slot.trade",
209
+ ["London" /* London */]: "http://ams.0slot.trade",
210
+ ["LosAngeles" /* LosAngeles */]: "http://la.0slot.trade",
211
+ ["Singapore" /* Singapore */]: "http://jp.0slot.trade",
212
+ ["Default" /* Default */]: "http://de2.0slot.trade"
213
+ };
214
+ var TEMPORAL_ENDPOINTS = {
215
+ ["NewYork" /* NewYork */]: "http://ewr1.nozomi.temporal.xyz",
216
+ ["Frankfurt" /* Frankfurt */]: "http://fra2.nozomi.temporal.xyz",
217
+ ["Amsterdam" /* Amsterdam */]: "http://ams1.nozomi.temporal.xyz",
218
+ ["Dublin" /* Dublin */]: "http://lon1.nozomi.temporal.xyz",
219
+ ["SLC" /* SLC */]: "http://lax1.nozomi.temporal.xyz",
220
+ ["Tokyo" /* Tokyo */]: "http://tyo1.nozomi.temporal.xyz",
221
+ ["London" /* London */]: "http://lon1.nozomi.temporal.xyz",
222
+ ["LosAngeles" /* LosAngeles */]: "http://lax1.nozomi.temporal.xyz",
223
+ ["Singapore" /* Singapore */]: "http://sgp1.nozomi.temporal.xyz",
224
+ ["Default" /* Default */]: "http://fra2.nozomi.temporal.xyz"
225
+ };
226
+ var FLASH_BLOCK_ENDPOINTS = {
227
+ ["NewYork" /* NewYork */]: "http://ny.flashblock.trade",
228
+ ["Frankfurt" /* Frankfurt */]: "http://fra.flashblock.trade",
229
+ ["Amsterdam" /* Amsterdam */]: "http://ams.flashblock.trade",
230
+ ["Dublin" /* Dublin */]: "http://london.flashblock.trade",
231
+ ["SLC" /* SLC */]: "http://slc.flashblock.trade",
232
+ ["Tokyo" /* Tokyo */]: "http://tokyo.flashblock.trade",
233
+ ["London" /* London */]: "http://london.flashblock.trade",
234
+ ["LosAngeles" /* LosAngeles */]: "http://slc.flashblock.trade",
235
+ ["Singapore" /* Singapore */]: "http://singapore.flashblock.trade",
236
+ ["Default" /* Default */]: "http://fra.flashblock.trade"
237
+ };
238
+ var HELIUS_ENDPOINTS = {
239
+ ["NewYork" /* NewYork */]: "http://ewr-sender.helius-rpc.com/fast",
240
+ ["Frankfurt" /* Frankfurt */]: "http://fra-sender.helius-rpc.com/fast",
241
+ ["Amsterdam" /* Amsterdam */]: "http://ams-sender.helius-rpc.com/fast",
242
+ ["Dublin" /* Dublin */]: "http://lon-sender.helius-rpc.com/fast",
243
+ ["SLC" /* SLC */]: "http://slc-sender.helius-rpc.com/fast",
244
+ ["Tokyo" /* Tokyo */]: "http://tyo-sender.helius-rpc.com/fast",
245
+ ["London" /* London */]: "http://lon-sender.helius-rpc.com/fast",
246
+ ["LosAngeles" /* LosAngeles */]: "http://slc-sender.helius-rpc.com/fast",
247
+ ["Singapore" /* Singapore */]: "http://sg-sender.helius-rpc.com/fast",
248
+ ["Default" /* Default */]: "https://sender.helius-rpc.com/fast"
249
+ };
250
+ var NODE1_ENDPOINTS = {
251
+ ["NewYork" /* NewYork */]: "http://ny.node1.me",
252
+ ["Frankfurt" /* Frankfurt */]: "http://fra.node1.me",
253
+ ["Amsterdam" /* Amsterdam */]: "http://ams.node1.me",
254
+ ["Dublin" /* Dublin */]: "http://lon.node1.me",
255
+ ["SLC" /* SLC */]: "http://ny.node1.me",
256
+ ["Tokyo" /* Tokyo */]: "http://tk.node1.me",
257
+ ["London" /* London */]: "http://lon.node1.me",
258
+ ["LosAngeles" /* LosAngeles */]: "http://ny.node1.me",
259
+ ["Singapore" /* Singapore */]: "http://fra.node1.me",
260
+ ["Default" /* Default */]: "http://fra.node1.me"
261
+ };
262
+ var BLOCK_RAZOR_ENDPOINTS = {
263
+ ["NewYork" /* NewYork */]: "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction",
264
+ ["Frankfurt" /* Frankfurt */]: "http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction",
265
+ ["Amsterdam" /* Amsterdam */]: "http://amsterdam.solana.blockrazor.xyz:443/v2/sendTransaction",
266
+ ["Dublin" /* Dublin */]: "http://london.solana.blockrazor.xyz:443/v2/sendTransaction",
267
+ ["SLC" /* SLC */]: "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction",
268
+ ["Tokyo" /* Tokyo */]: "http://tokyo.solana.blockrazor.xyz:443/v2/sendTransaction",
269
+ ["London" /* London */]: "http://london.solana.blockrazor.xyz:443/v2/sendTransaction",
270
+ ["LosAngeles" /* LosAngeles */]: "http://newyork.solana.blockrazor.xyz:443/v2/sendTransaction",
271
+ ["Singapore" /* Singapore */]: "http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction",
272
+ ["Default" /* Default */]: "http://frankfurt.solana.blockrazor.xyz:443/v2/sendTransaction"
273
+ };
274
+ var ASTRALANE_ENDPOINTS = {
275
+ ["NewYork" /* NewYork */]: "http://ny.gateway.astralane.io/irisb",
276
+ ["Frankfurt" /* Frankfurt */]: "http://fr.gateway.astralane.io/irisb",
277
+ ["Amsterdam" /* Amsterdam */]: "http://ams.gateway.astralane.io/irisb",
278
+ ["Dublin" /* Dublin */]: "http://ams.gateway.astralane.io/irisb",
279
+ ["SLC" /* SLC */]: "http://ny.gateway.astralane.io/irisb",
280
+ ["Tokyo" /* Tokyo */]: "http://jp.gateway.astralane.io/irisb",
281
+ ["London" /* London */]: "http://ams.gateway.astralane.io/irisb",
282
+ ["LosAngeles" /* LosAngeles */]: "http://lax.gateway.astralane.io/irisb",
283
+ ["Singapore" /* Singapore */]: "http://lim.gateway.astralane.io/irisb",
284
+ ["Default" /* Default */]: "http://lim.gateway.astralane.io/irisb"
285
+ };
286
+ var ASTRALANE_QUIC_HOSTS = {
287
+ ["NewYork" /* NewYork */]: "ny.gateway.astralane.io",
288
+ ["Frankfurt" /* Frankfurt */]: "fr.gateway.astralane.io",
289
+ ["Amsterdam" /* Amsterdam */]: "ams.gateway.astralane.io",
290
+ ["Dublin" /* Dublin */]: "ams.gateway.astralane.io",
291
+ ["SLC" /* SLC */]: "ny.gateway.astralane.io",
292
+ ["Tokyo" /* Tokyo */]: "jp.gateway.astralane.io",
293
+ ["London" /* London */]: "ams.gateway.astralane.io",
294
+ ["LosAngeles" /* LosAngeles */]: "lax.gateway.astralane.io",
295
+ ["Singapore" /* Singapore */]: "lim.gateway.astralane.io",
296
+ ["Default" /* Default */]: "lim.gateway.astralane.io"
297
+ };
298
+ var STELLIUM_ENDPOINTS = {
299
+ ["NewYork" /* NewYork */]: "http://ewr1.flashrpc.com",
300
+ ["Frankfurt" /* Frankfurt */]: "http://fra1.flashrpc.com",
301
+ ["Amsterdam" /* Amsterdam */]: "http://ams1.flashrpc.com",
302
+ ["Dublin" /* Dublin */]: "http://lhr1.flashrpc.com",
303
+ ["SLC" /* SLC */]: "http://ewr1.flashrpc.com",
304
+ ["Tokyo" /* Tokyo */]: "http://tyo1.flashrpc.com",
305
+ ["London" /* London */]: "http://lhr1.flashrpc.com",
306
+ ["LosAngeles" /* LosAngeles */]: "http://ewr1.flashrpc.com",
307
+ ["Singapore" /* Singapore */]: "http://fra1.flashrpc.com",
308
+ ["Default" /* Default */]: "http://fra1.flashrpc.com"
309
+ };
310
+ var NEXT_BLOCK_ENDPOINTS = {
311
+ ["NewYork" /* NewYork */]: "http://ny.nextblock.io",
312
+ ["Frankfurt" /* Frankfurt */]: "http://fra.nextblock.io",
313
+ ["Amsterdam" /* Amsterdam */]: "http://ams.nextblock.io",
314
+ ["Dublin" /* Dublin */]: "http://dublin.nextblock.io",
315
+ ["SLC" /* SLC */]: "http://slc.nextblock.io",
316
+ ["Tokyo" /* Tokyo */]: "http://tokyo.nextblock.io",
317
+ ["London" /* London */]: "http://london.nextblock.io",
318
+ ["LosAngeles" /* LosAngeles */]: "http://slc.nextblock.io",
319
+ ["Singapore" /* Singapore */]: "http://sgp.nextblock.io",
320
+ ["Default" /* Default */]: "http://fra.nextblock.io"
321
+ };
322
+ var SOYAS_ENDPOINTS = {
323
+ ["NewYork" /* NewYork */]: "nyc.landing.soyas.xyz:9000",
324
+ ["Frankfurt" /* Frankfurt */]: "fra.landing.soyas.xyz:9000",
325
+ ["Amsterdam" /* Amsterdam */]: "ams.landing.soyas.xyz:9000",
326
+ ["Dublin" /* Dublin */]: "lon.landing.soyas.xyz:9000",
327
+ ["SLC" /* SLC */]: "nyc.landing.soyas.xyz:9000",
328
+ ["Tokyo" /* Tokyo */]: "tyo.landing.soyas.xyz:9000",
329
+ ["London" /* London */]: "lon.landing.soyas.xyz:9000",
330
+ ["LosAngeles" /* LosAngeles */]: "nyc.landing.soyas.xyz:9000",
331
+ ["Singapore" /* Singapore */]: "fra.landing.soyas.xyz:9000",
332
+ ["Default" /* Default */]: "fra.landing.soyas.xyz:9000"
333
+ };
334
+ var SPEEDLANDING_ENDPOINTS = {
335
+ ["NewYork" /* NewYork */]: "nyc.speedlanding.trade:17778",
336
+ ["Frankfurt" /* Frankfurt */]: "fra.speedlanding.trade:17778",
337
+ ["Amsterdam" /* Amsterdam */]: "ams.speedlanding.trade:17778",
338
+ ["Dublin" /* Dublin */]: "ams.speedlanding.trade:17778",
339
+ ["SLC" /* SLC */]: "nyc.speedlanding.trade:17778",
340
+ ["Tokyo" /* Tokyo */]: "tyo.speedlanding.trade:17778",
341
+ ["London" /* London */]: "fra.speedlanding.trade:17778",
342
+ ["LosAngeles" /* LosAngeles */]: "nyc.speedlanding.trade:17778",
343
+ ["Singapore" /* Singapore */]: "fra.speedlanding.trade:17778",
344
+ ["Default" /* Default */]: "fra.speedlanding.trade:17778"
345
+ };
346
+ var BaseClient = class {
347
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
348
+ const signatures = [];
349
+ for (const tx of transactions) {
350
+ const sig = await this.sendTransaction(tradeType, tx, waitConfirmation);
351
+ signatures.push(sig);
352
+ }
353
+ return signatures;
354
+ }
355
+ async post(url, payload, headers = {}) {
356
+ const response = await fetch(url, {
357
+ method: "POST",
358
+ headers: {
359
+ "Content-Type": "application/json",
360
+ ...headers
361
+ },
362
+ body: JSON.stringify(payload)
363
+ });
364
+ if (!response.ok) {
365
+ throw new TradeError(response.status, `HTTP error: ${response.statusText}`);
366
+ }
367
+ return response.json();
368
+ }
369
+ async postRaw(url, body, headers = {}) {
370
+ const response = await fetch(url, {
371
+ method: "POST",
372
+ headers: {
373
+ "Content-Type": "text/plain",
374
+ ...headers
375
+ },
376
+ body
377
+ });
378
+ if (!response.ok) {
379
+ throw new TradeError(response.status, `HTTP error: ${response.statusText}`);
380
+ }
381
+ return response.json();
382
+ }
383
+ };
384
+ var JitoClient = class extends BaseClient {
385
+ constructor(rpcUrl, endpoint, authToken) {
386
+ super();
387
+ this.rpcUrl = rpcUrl;
388
+ this.endpoint = endpoint;
389
+ this.authToken = authToken;
390
+ }
391
+ rpcUrl;
392
+ endpoint;
393
+ authToken;
394
+ tipAccounts = JITO_TIP_ACCOUNTS;
395
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
396
+ const encoded = transaction.toString("base64");
397
+ const payload = {
398
+ jsonrpc: "2.0",
399
+ id: 1,
400
+ method: "sendTransaction",
401
+ params: [
402
+ encoded,
403
+ { encoding: "base64" }
404
+ ]
405
+ };
406
+ const headers = {};
407
+ let url = `${this.endpoint}/api/v1/transactions`;
408
+ if (this.authToken) {
409
+ headers["x-jito-auth"] = this.authToken;
410
+ url = `${this.endpoint}/api/v1/transactions?uuid=${this.authToken}`;
411
+ }
412
+ const result = await this.post(url, payload, headers);
413
+ if (result.error) {
414
+ throw new TradeError(result.error.code || 500, result.error.message);
415
+ }
416
+ return result.result;
417
+ }
418
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
419
+ if (transactions.length === 0) return [];
420
+ if (transactions.length === 1) {
421
+ const tx = transactions[0];
422
+ return [await this.sendTransaction(tradeType, tx, waitConfirmation)];
423
+ }
424
+ const encodedTxs = transactions.map((tx) => tx.toString("base64"));
425
+ const payload = {
426
+ jsonrpc: "2.0",
427
+ method: "sendBundle",
428
+ params: [encodedTxs, { encoding: "base64" }],
429
+ id: 1
430
+ };
431
+ const headers = {};
432
+ let url = `${this.endpoint}/api/v1/bundles`;
433
+ if (this.authToken) {
434
+ headers["x-jito-auth"] = this.authToken;
435
+ url = `${this.endpoint}/api/v1/bundles?uuid=${this.authToken}`;
436
+ }
437
+ const result = await this.post(url, payload, headers);
438
+ if (result.error) {
439
+ throw new TradeError(result.error.code || 500, result.error.message);
440
+ }
441
+ return [result.result];
442
+ }
443
+ getTipAccount() {
444
+ return randomChoice(this.tipAccounts);
445
+ }
446
+ getSwqosType() {
447
+ return "Jito" /* Jito */;
448
+ }
449
+ minTipSol() {
450
+ return MIN_TIP_JITO;
451
+ }
452
+ };
453
+ var BloxrouteClient = class extends BaseClient {
454
+ constructor(rpcUrl, endpoint, authToken) {
455
+ super();
456
+ this.rpcUrl = rpcUrl;
457
+ this.endpoint = endpoint;
458
+ this.authToken = authToken;
459
+ }
460
+ rpcUrl;
461
+ endpoint;
462
+ authToken;
463
+ tipAccounts = BLOXROUTE_TIP_ACCOUNTS;
464
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
465
+ const encoded = transaction.toString("base64");
466
+ const payload = {
467
+ transaction: { content: encoded },
468
+ frontRunningProtection: false,
469
+ useStakedRPCs: true
470
+ };
471
+ const headers = {};
472
+ if (this.authToken) {
473
+ headers["Authorization"] = this.authToken;
474
+ }
475
+ const url = `${this.endpoint}/api/v2/submit`;
476
+ const result = await this.post(url, payload, headers);
477
+ if (result.error) {
478
+ throw new TradeError(result.error.code || 500, result.error.message || result.error);
479
+ }
480
+ if (result.reason) {
481
+ throw new TradeError(500, result.reason);
482
+ }
483
+ return result.signature || result.result || "";
484
+ }
485
+ getTipAccount() {
486
+ return randomChoice(this.tipAccounts);
487
+ }
488
+ getSwqosType() {
489
+ return "Bloxroute" /* Bloxroute */;
490
+ }
491
+ minTipSol() {
492
+ return MIN_TIP_BLOXROUTE;
493
+ }
494
+ };
495
+ var ZeroSlotClient = class extends BaseClient {
496
+ constructor(rpcUrl, endpoint, authToken) {
497
+ super();
498
+ this.rpcUrl = rpcUrl;
499
+ this.endpoint = endpoint;
500
+ this.authToken = authToken;
501
+ }
502
+ rpcUrl;
503
+ endpoint;
504
+ authToken;
505
+ tipAccounts = ZERO_SLOT_TIP_ACCOUNTS;
506
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
507
+ const encoded = transaction.toString("base64");
508
+ const payload = {
509
+ jsonrpc: "2.0",
510
+ id: 1,
511
+ method: "sendTransaction",
512
+ params: [encoded, { encoding: "base64" }]
513
+ };
514
+ let url = this.endpoint;
515
+ if (this.authToken) {
516
+ url = `${this.endpoint}?api-key=${this.authToken}`;
517
+ }
518
+ const result = await this.post(url, payload);
519
+ if (result.error) {
520
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
521
+ }
522
+ return result.result;
523
+ }
524
+ getTipAccount() {
525
+ return randomChoice(this.tipAccounts);
526
+ }
527
+ getSwqosType() {
528
+ return "ZeroSlot" /* ZeroSlot */;
529
+ }
530
+ minTipSol() {
531
+ return MIN_TIP_ZERO_SLOT;
532
+ }
533
+ };
534
+ var TemporalClient = class extends BaseClient {
535
+ constructor(rpcUrl, endpoint, authToken) {
536
+ super();
537
+ this.rpcUrl = rpcUrl;
538
+ this.endpoint = endpoint;
539
+ this.authToken = authToken;
540
+ }
541
+ rpcUrl;
542
+ endpoint;
543
+ authToken;
544
+ tipAccounts = TEMPORAL_TIP_ACCOUNTS;
545
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
546
+ const encoded = transaction.toString("base64");
547
+ const payload = {
548
+ jsonrpc: "2.0",
549
+ id: 1,
550
+ method: "sendTransaction",
551
+ params: [encoded, { encoding: "base64" }]
552
+ };
553
+ let url = this.endpoint;
554
+ if (this.authToken) {
555
+ url = `${this.endpoint}/?c=${this.authToken}`;
556
+ }
557
+ const result = await this.post(url, payload);
558
+ if (result.error) {
559
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
560
+ }
561
+ return result.result;
562
+ }
563
+ getTipAccount() {
564
+ return randomChoice(this.tipAccounts);
565
+ }
566
+ getSwqosType() {
567
+ return "Temporal" /* Temporal */;
568
+ }
569
+ minTipSol() {
570
+ return MIN_TIP_TEMPORAL;
571
+ }
572
+ };
573
+ var FlashBlockClient = class extends BaseClient {
574
+ constructor(rpcUrl, endpoint, authToken) {
575
+ super();
576
+ this.rpcUrl = rpcUrl;
577
+ this.endpoint = endpoint;
578
+ this.authToken = authToken;
579
+ }
580
+ rpcUrl;
581
+ endpoint;
582
+ authToken;
583
+ tipAccounts = FLASH_BLOCK_TIP_ACCOUNTS;
584
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
585
+ const encoded = transaction.toString("base64");
586
+ const payload = {
587
+ transactions: [encoded]
588
+ };
589
+ const headers = {};
590
+ if (this.authToken) {
591
+ headers["Authorization"] = this.authToken;
592
+ }
593
+ const url = `${this.endpoint}/api/v2/submit-batch`;
594
+ const result = await this.post(url, payload, headers);
595
+ if (result.error) {
596
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
597
+ }
598
+ if (Array.isArray(result) && result.length > 0) {
599
+ return result[0].signature || result[0].result || "";
600
+ }
601
+ return result.signature || result.result || "";
602
+ }
603
+ getTipAccount() {
604
+ return randomChoice(this.tipAccounts);
605
+ }
606
+ getSwqosType() {
607
+ return "FlashBlock" /* FlashBlock */;
608
+ }
609
+ minTipSol() {
610
+ return MIN_TIP_FLASH_BLOCK;
611
+ }
612
+ };
613
+ var HeliusClient = class extends BaseClient {
614
+ constructor(rpcUrl, endpoint, apiKey, swqosOnly = false) {
615
+ super();
616
+ this.rpcUrl = rpcUrl;
617
+ this.endpoint = endpoint;
618
+ this.apiKey = apiKey;
619
+ this.swqosOnly = swqosOnly;
620
+ }
621
+ rpcUrl;
622
+ endpoint;
623
+ apiKey;
624
+ swqosOnly;
625
+ tipAccounts = HELIUS_TIP_ACCOUNTS;
626
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
627
+ const encoded = transaction.toString("base64");
628
+ const payload = {
629
+ jsonrpc: "2.0",
630
+ id: "1",
631
+ // string "1" per Helius API spec
632
+ method: "sendTransaction",
633
+ params: [
634
+ encoded,
635
+ {
636
+ encoding: "base64",
637
+ skipPreflight: true,
638
+ maxRetries: 0
639
+ }
640
+ ]
641
+ };
642
+ let url = this.endpoint;
643
+ if (this.apiKey) {
644
+ url = `${this.endpoint}?api-key=${this.apiKey}`;
645
+ }
646
+ const result = await this.post(url, payload);
647
+ if (result.error) {
648
+ throw new TradeError(result.error.code || 500, result.error.message);
649
+ }
650
+ return result.result;
651
+ }
652
+ getTipAccount() {
653
+ return randomChoice(this.tipAccounts);
654
+ }
655
+ getSwqosType() {
656
+ return "Helius" /* Helius */;
657
+ }
658
+ minTipSol() {
659
+ return this.swqosOnly ? MIN_TIP_HELIUS : MIN_TIP_HELIUS_NORMAL;
660
+ }
661
+ };
662
+ var Node1Client = class extends BaseClient {
663
+ constructor(rpcUrl, endpoint, authToken) {
664
+ super();
665
+ this.rpcUrl = rpcUrl;
666
+ this.endpoint = endpoint;
667
+ this.authToken = authToken;
668
+ }
669
+ rpcUrl;
670
+ endpoint;
671
+ authToken;
672
+ tipAccounts = NODE1_TIP_ACCOUNTS;
673
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
674
+ const encoded = transaction.toString("base64");
675
+ const payload = {
676
+ jsonrpc: "2.0",
677
+ id: 1,
678
+ method: "sendTransaction",
679
+ params: [encoded, { encoding: "base64", skipPreflight: true }]
680
+ };
681
+ const headers = {};
682
+ if (this.authToken) {
683
+ headers["api-key"] = this.authToken;
684
+ }
685
+ const result = await this.post(this.endpoint, payload, headers);
686
+ if (result.error) {
687
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
688
+ }
689
+ return result.result;
690
+ }
691
+ getTipAccount() {
692
+ return randomChoice(this.tipAccounts);
693
+ }
694
+ getSwqosType() {
695
+ return "Node1" /* Node1 */;
696
+ }
697
+ minTipSol() {
698
+ return MIN_TIP_NODE1;
699
+ }
700
+ };
701
+ var Node1QuicClient = class {
702
+ constructor(rpcUrl, endpoint, authToken) {
703
+ this.rpcUrl = rpcUrl;
704
+ this.endpoint = endpoint;
705
+ this.authToken = authToken;
706
+ const lastColon = endpoint.lastIndexOf(":");
707
+ this.host = lastColon >= 0 ? endpoint.slice(0, lastColon) : endpoint;
708
+ this.port = lastColon >= 0 ? parseInt(endpoint.slice(lastColon + 1), 10) : 16666;
709
+ }
710
+ rpcUrl;
711
+ endpoint;
712
+ authToken;
713
+ tipAccounts = NODE1_TIP_ACCOUNTS;
714
+ host;
715
+ port;
716
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
717
+ await sendNode1ViaQUIC(this.host, this.port, this.authToken, new Uint8Array(transaction));
718
+ return "";
719
+ }
720
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
721
+ const signatures = [];
722
+ for (const tx of transactions) {
723
+ signatures.push(await this.sendTransaction(tradeType, tx, waitConfirmation));
724
+ }
725
+ return signatures;
726
+ }
727
+ getTipAccount() {
728
+ return randomChoice(this.tipAccounts);
729
+ }
730
+ getSwqosType() {
731
+ return "Node1" /* Node1 */;
732
+ }
733
+ minTipSol() {
734
+ return MIN_TIP_NODE1;
735
+ }
736
+ };
737
+ var BlockRazorClient = class extends BaseClient {
738
+ constructor(rpcUrl, endpoint, authToken, mevProtection = false) {
739
+ super();
740
+ this.rpcUrl = rpcUrl;
741
+ this.endpoint = endpoint;
742
+ this.authToken = authToken;
743
+ this.mevProtection = mevProtection;
744
+ }
745
+ rpcUrl;
746
+ endpoint;
747
+ authToken;
748
+ mevProtection;
749
+ tipAccounts = BLOCK_RAZOR_TIP_ACCOUNTS;
750
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
751
+ const encoded = transaction.toString("base64");
752
+ const mode = this.mevProtection ? "sandwichMitigation" : "fast";
753
+ let url = `${this.endpoint}?mode=${mode}`;
754
+ if (this.authToken) {
755
+ url = `${this.endpoint}?auth=${this.authToken}&mode=${mode}`;
756
+ }
757
+ const result = await this.postRaw(url, encoded);
758
+ if (result.error) {
759
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
760
+ }
761
+ return result.result || result.signature || "";
762
+ }
763
+ getTipAccount() {
764
+ return randomChoice(this.tipAccounts);
765
+ }
766
+ getSwqosType() {
767
+ return "BlockRazor" /* BlockRazor */;
768
+ }
769
+ minTipSol() {
770
+ return MIN_TIP_BLOCK_RAZOR;
771
+ }
772
+ };
773
+ var AstralaneClient = class extends BaseClient {
774
+ constructor(rpcUrl, endpoint, authToken) {
775
+ super();
776
+ this.rpcUrl = rpcUrl;
777
+ this.endpoint = endpoint;
778
+ this.authToken = authToken;
779
+ }
780
+ rpcUrl;
781
+ endpoint;
782
+ authToken;
783
+ tipAccounts = ASTRALANE_TIP_ACCOUNTS;
784
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
785
+ const encoded = transaction.toString("base64");
786
+ const payload = {
787
+ jsonrpc: "2.0",
788
+ id: 1,
789
+ method: "sendTransaction",
790
+ params: [encoded, { encoding: "base64" }]
791
+ };
792
+ let url = `${this.endpoint}?method=sendTransaction`;
793
+ if (this.authToken) {
794
+ url = `${this.endpoint}?api-key=${this.authToken}&method=sendTransaction`;
795
+ }
796
+ const result = await this.post(url, payload);
797
+ if (result.error) {
798
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
799
+ }
800
+ return result.result || result.signature || "";
801
+ }
802
+ getTipAccount() {
803
+ return randomChoice(this.tipAccounts);
804
+ }
805
+ getSwqosType() {
806
+ return "Astralane" /* Astralane */;
807
+ }
808
+ minTipSol() {
809
+ return MIN_TIP_ASTRALANE;
810
+ }
811
+ };
812
+ var AstralaneQuicClient = class {
813
+ constructor(rpcUrl, endpoint, authToken) {
814
+ this.rpcUrl = rpcUrl;
815
+ this.endpoint = endpoint;
816
+ this.authToken = authToken;
817
+ const lastColon = endpoint.lastIndexOf(":");
818
+ this.host = lastColon >= 0 ? endpoint.slice(0, lastColon) : endpoint;
819
+ this.port = lastColon >= 0 ? parseInt(endpoint.slice(lastColon + 1), 10) : 7e3;
820
+ }
821
+ rpcUrl;
822
+ endpoint;
823
+ authToken;
824
+ tipAccounts = ASTRALANE_TIP_ACCOUNTS;
825
+ host;
826
+ port;
827
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
828
+ if (transaction.length > 1232) {
829
+ throw new TradeError(400, `Astralane QUIC transaction too large: ${transaction.length} > 1232`);
830
+ }
831
+ await sendViaQUIC(this.host, this.port, "astralane", new Uint8Array(transaction), {
832
+ alpn: "astralane-tpu",
833
+ commonName: this.authToken,
834
+ algorithm: "ecdsa"
835
+ });
836
+ return "";
837
+ }
838
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
839
+ const signatures = [];
840
+ for (const tx of transactions) {
841
+ signatures.push(await this.sendTransaction(tradeType, tx, waitConfirmation));
842
+ }
843
+ return signatures;
844
+ }
845
+ getTipAccount() {
846
+ return randomChoice(this.tipAccounts);
847
+ }
848
+ getSwqosType() {
849
+ return "Astralane" /* Astralane */;
850
+ }
851
+ minTipSol() {
852
+ return MIN_TIP_ASTRALANE;
853
+ }
854
+ };
855
+ var StelliumClient = class extends BaseClient {
856
+ constructor(rpcUrl, endpoint, authToken) {
857
+ super();
858
+ this.rpcUrl = rpcUrl;
859
+ this.endpoint = endpoint;
860
+ this.authToken = authToken;
861
+ }
862
+ rpcUrl;
863
+ endpoint;
864
+ authToken;
865
+ tipAccounts = STELLIUM_TIP_ACCOUNTS;
866
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
867
+ const encoded = transaction.toString("base64");
868
+ const payload = {
869
+ jsonrpc: "2.0",
870
+ id: 1,
871
+ method: "sendTransaction",
872
+ params: [encoded, { encoding: "base64" }]
873
+ };
874
+ let url = this.endpoint;
875
+ if (this.authToken) {
876
+ url = `${this.endpoint}/${this.authToken}`;
877
+ }
878
+ const result = await this.post(url, payload);
879
+ if (result.error) {
880
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
881
+ }
882
+ return result.result || result.signature || "";
883
+ }
884
+ getTipAccount() {
885
+ return randomChoice(this.tipAccounts);
886
+ }
887
+ getSwqosType() {
888
+ return "Stellium" /* Stellium */;
889
+ }
890
+ minTipSol() {
891
+ return MIN_TIP_STELLIUM;
892
+ }
893
+ };
894
+ var LightspeedClient = class extends BaseClient {
895
+ constructor(rpcUrl, customUrl) {
896
+ super();
897
+ this.rpcUrl = rpcUrl;
898
+ this.customUrl = customUrl;
899
+ }
900
+ rpcUrl;
901
+ customUrl;
902
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
903
+ const encoded = transaction.toString("base64");
904
+ const payload = {
905
+ jsonrpc: "2.0",
906
+ id: 1,
907
+ method: "sendTransaction",
908
+ params: [
909
+ encoded,
910
+ {
911
+ encoding: "base64",
912
+ skipPreflight: true,
913
+ preflightCommitment: "processed",
914
+ maxRetries: 0
915
+ }
916
+ ]
917
+ };
918
+ const result = await this.post(this.customUrl, payload);
919
+ if (result.error) {
920
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
921
+ }
922
+ return result.result || result.signature || "";
923
+ }
924
+ getTipAccount() {
925
+ const accounts = [
926
+ "53PhM3UTdMQWu5t81wcd35AHGc5xpmHoRjem7GQPvXjA",
927
+ "9tYF5yPDC1NP8s6diiB3kAX6ZZnva9DM3iDwJkBRarBB"
928
+ ];
929
+ return randomChoice(accounts);
930
+ }
931
+ getSwqosType() {
932
+ return "Lightspeed" /* Lightspeed */;
933
+ }
934
+ minTipSol() {
935
+ return MIN_TIP_LIGHTSPEED;
936
+ }
937
+ };
938
+ var NextBlockClient = class extends BaseClient {
939
+ constructor(rpcUrl, endpoint, authToken) {
940
+ super();
941
+ this.rpcUrl = rpcUrl;
942
+ this.endpoint = endpoint;
943
+ this.authToken = authToken;
944
+ }
945
+ rpcUrl;
946
+ endpoint;
947
+ authToken;
948
+ tipAccounts = NEXT_BLOCK_TIP_ACCOUNTS;
949
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
950
+ const encoded = transaction.toString("base64");
951
+ const payload = {
952
+ transaction: { content: encoded },
953
+ frontRunningProtection: false
954
+ };
955
+ const headers = {};
956
+ if (this.authToken) {
957
+ headers["Authorization"] = this.authToken;
958
+ }
959
+ const url = `${this.endpoint}/api/v2/submit`;
960
+ const result = await this.post(url, payload, headers);
961
+ if (result.error) {
962
+ throw new TradeError(result.error.code || 500, result.error.message || String(result.error));
963
+ }
964
+ if (result.reason) {
965
+ throw new TradeError(500, result.reason);
966
+ }
967
+ return result.signature || result.result || "";
968
+ }
969
+ getTipAccount() {
970
+ return randomChoice(this.tipAccounts);
971
+ }
972
+ getSwqosType() {
973
+ return "NextBlock" /* NextBlock */;
974
+ }
975
+ minTipSol() {
976
+ return MIN_TIP_NEXT_BLOCK;
977
+ }
978
+ };
979
+ var DefaultClient = class extends BaseClient {
980
+ constructor(rpcUrl) {
981
+ super();
982
+ this.rpcUrl = rpcUrl;
983
+ }
984
+ rpcUrl;
985
+ async sendTransaction(tradeType, transaction, waitConfirmation) {
986
+ const encoded = transaction.toString("base64");
987
+ const payload = {
988
+ jsonrpc: "2.0",
989
+ id: 1,
990
+ method: "sendTransaction",
991
+ params: [
992
+ encoded,
993
+ { encoding: "base64" }
994
+ ]
995
+ };
996
+ const result = await this.post(this.rpcUrl, payload);
997
+ if (result.error) {
998
+ throw new TradeError(result.error.code || 500, result.error.message);
999
+ }
1000
+ return result.result;
1001
+ }
1002
+ getTipAccount() {
1003
+ return "";
1004
+ }
1005
+ getSwqosType() {
1006
+ return "Default" /* Default */;
1007
+ }
1008
+ minTipSol() {
1009
+ return MIN_TIP_DEFAULT;
1010
+ }
1011
+ };
1012
+ async function sendViaQUIC(host, port, serverName, txBytes, options = {}) {
1013
+ let QUICClient;
1014
+ let selfsigned;
1015
+ try {
1016
+ ({ QUICClient } = await import("@matrixai/quic"));
1017
+ selfsigned = (await import("selfsigned")).default ?? await import("selfsigned");
1018
+ } catch {
1019
+ throw new TradeError(
1020
+ 501,
1021
+ 'QUIC not available: run "npm install @matrixai/quic selfsigned" to enable Soyas/Speedlanding.'
1022
+ );
1023
+ }
1024
+ const pems = selfsigned.generate(
1025
+ [{ name: "commonName", value: options.commonName ?? "Solana node" }],
1026
+ { days: 36500, algorithm: options.algorithm ?? "ed25519" }
1027
+ );
1028
+ const client = await QUICClient.createQUICClient({
1029
+ host,
1030
+ port,
1031
+ config: {
1032
+ key: pems.private,
1033
+ cert: pems.cert,
1034
+ verifyPeer: false,
1035
+ applicationProtos: [options.alpn ?? "solana-tpu"],
1036
+ tlsVersion: "tlsv13"
1037
+ },
1038
+ logger: void 0
1039
+ });
1040
+ try {
1041
+ const stream = client.connection.newStream("uni");
1042
+ const writer = stream.writable.getWriter();
1043
+ await writer.write(txBytes);
1044
+ await writer.close();
1045
+ await new Promise((resolve) => setTimeout(resolve, 50));
1046
+ } finally {
1047
+ await client.destroy();
1048
+ }
1049
+ }
1050
+ function hostPortFromHttp(endpoint, port) {
1051
+ try {
1052
+ const url = new URL(endpoint);
1053
+ return { host: url.hostname, port };
1054
+ } catch {
1055
+ const withoutScheme = endpoint.replace(/^https?:\/\//, "").split("/")[0];
1056
+ const lastColon = withoutScheme.lastIndexOf(":");
1057
+ const host = lastColon >= 0 ? withoutScheme.slice(0, lastColon) : withoutScheme;
1058
+ return { host, port };
1059
+ }
1060
+ }
1061
+ function uuidToBytes(apiKey) {
1062
+ const hex = apiKey.replace(/-/g, "");
1063
+ if (!/^[0-9a-fA-F]{32}$/.test(hex)) {
1064
+ throw new TradeError(400, "Node1 QUIC API key must be a UUID");
1065
+ }
1066
+ return new Uint8Array(Buffer.from(hex, "hex"));
1067
+ }
1068
+ async function readQuicStream(stream) {
1069
+ const reader = stream.readable.getReader();
1070
+ const chunks = [];
1071
+ let total = 0;
1072
+ try {
1073
+ for (; ; ) {
1074
+ const { value, done } = await reader.read();
1075
+ if (done) break;
1076
+ if (value) {
1077
+ const chunk = new Uint8Array(value);
1078
+ chunks.push(chunk);
1079
+ total += chunk.length;
1080
+ }
1081
+ }
1082
+ } finally {
1083
+ reader.releaseLock?.();
1084
+ }
1085
+ const out = new Uint8Array(total);
1086
+ let offset = 0;
1087
+ for (const chunk of chunks) {
1088
+ out.set(chunk, offset);
1089
+ offset += chunk.length;
1090
+ }
1091
+ return out;
1092
+ }
1093
+ async function sendNode1ViaQUIC(host, port, apiKey, txBytes) {
1094
+ let QUICClient;
1095
+ try {
1096
+ ({ QUICClient } = await import("@matrixai/quic"));
1097
+ } catch {
1098
+ throw new TradeError(501, 'QUIC not available: run "npm install @matrixai/quic" to enable Node1 QUIC.');
1099
+ }
1100
+ if (txBytes.length > 1232) {
1101
+ throw new TradeError(400, `Node1 QUIC transaction too large: ${txBytes.length} > 1232`);
1102
+ }
1103
+ const client = await QUICClient.createQUICClient({
1104
+ host,
1105
+ port,
1106
+ config: {
1107
+ verifyPeer: false,
1108
+ applicationProtos: ["h3"],
1109
+ tlsVersion: "tlsv13",
1110
+ serverName: host
1111
+ },
1112
+ logger: void 0
1113
+ });
1114
+ try {
1115
+ const authStream = client.connection.newStream("bi");
1116
+ const authWriter = authStream.writable.getWriter();
1117
+ await authWriter.write(uuidToBytes(apiKey));
1118
+ await authWriter.close();
1119
+ const authReply = await readQuicStream(authStream);
1120
+ if (authReply[0] !== 0) {
1121
+ throw new TradeError(401, `Node1 QUIC auth rejected: ${authReply[0] ?? -1}`);
1122
+ }
1123
+ const txStream = client.connection.newStream("bi");
1124
+ const txWriter = txStream.writable.getWriter();
1125
+ await txWriter.write(txBytes);
1126
+ await txWriter.close();
1127
+ const response = await readQuicStream(txStream);
1128
+ if (response.length < 6) {
1129
+ throw new TradeError(500, "Node1 QUIC response too short");
1130
+ }
1131
+ const status = response[0] << 8 | response[1];
1132
+ const msgLen = response[2] << 24 | response[3] << 16 | response[4] << 8 | response[5];
1133
+ const msg = Buffer.from(response.slice(6, 6 + msgLen)).toString("utf8");
1134
+ if (status !== 200) {
1135
+ throw new TradeError(status, `Node1 QUIC submit failed: ${msg}`);
1136
+ }
1137
+ } finally {
1138
+ await client.destroy();
1139
+ }
1140
+ }
1141
+ var SoyasClient = class {
1142
+ constructor(rpcUrl, endpoint, apiKey) {
1143
+ this.rpcUrl = rpcUrl;
1144
+ this.endpoint = endpoint;
1145
+ this.apiKey = apiKey;
1146
+ this.tipAccount = randomChoice(SOYAS_TIP_ACCOUNTS);
1147
+ const parts = endpoint.split(":");
1148
+ this.host = parts.slice(0, -1).join(":") || endpoint;
1149
+ this.port = parts.length > 1 ? parseInt(parts[parts.length - 1], 10) : 9e3;
1150
+ }
1151
+ rpcUrl;
1152
+ endpoint;
1153
+ apiKey;
1154
+ tipAccount;
1155
+ host;
1156
+ port;
1157
+ async sendTransaction(_tradeType, transaction, _waitConfirmation) {
1158
+ await sendViaQUIC(this.host, this.port, "soyas-landing", new Uint8Array(transaction));
1159
+ return "";
1160
+ }
1161
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
1162
+ for (const tx of transactions) {
1163
+ await this.sendTransaction(tradeType, tx, waitConfirmation);
1164
+ }
1165
+ return transactions.map(() => "");
1166
+ }
1167
+ getTipAccount() {
1168
+ return this.tipAccount;
1169
+ }
1170
+ getSwqosType() {
1171
+ return "Soyas" /* Soyas */;
1172
+ }
1173
+ minTipSol() {
1174
+ return MIN_TIP_SOYAS;
1175
+ }
1176
+ };
1177
+ var SpeedlandingClient = class {
1178
+ constructor(rpcUrl, endpoint, apiKey) {
1179
+ this.rpcUrl = rpcUrl;
1180
+ this.endpoint = endpoint;
1181
+ this.apiKey = apiKey;
1182
+ this.tipAccount = randomChoice(SPEEDLANDING_TIP_ACCOUNTS);
1183
+ const lastColon = endpoint.lastIndexOf(":");
1184
+ this.host = lastColon >= 0 ? endpoint.slice(0, lastColon) : endpoint;
1185
+ this.port = lastColon >= 0 ? parseInt(endpoint.slice(lastColon + 1), 10) : 17778;
1186
+ this.serverName = /^\d+\.\d+\.\d+\.\d+$/.test(this.host) ? "speed-landing" : this.host;
1187
+ }
1188
+ rpcUrl;
1189
+ endpoint;
1190
+ apiKey;
1191
+ tipAccount;
1192
+ host;
1193
+ port;
1194
+ serverName;
1195
+ async sendTransaction(_tradeType, transaction, _waitConfirmation) {
1196
+ await sendViaQUIC(this.host, this.port, this.serverName, new Uint8Array(transaction));
1197
+ return "";
1198
+ }
1199
+ async sendTransactions(tradeType, transactions, waitConfirmation) {
1200
+ for (const tx of transactions) {
1201
+ await this.sendTransaction(tradeType, tx, waitConfirmation);
1202
+ }
1203
+ return transactions.map(() => "");
1204
+ }
1205
+ getTipAccount() {
1206
+ return this.tipAccount;
1207
+ }
1208
+ getSwqosType() {
1209
+ return "Speedlanding" /* Speedlanding */;
1210
+ }
1211
+ minTipSol() {
1212
+ return MIN_TIP_SPEEDLANDING;
1213
+ }
1214
+ };
1215
+ var ClientFactory = class {
1216
+ static createClient(config, rpcUrl) {
1217
+ const region = config.region ?? "Default" /* Default */;
1218
+ switch (config.type) {
1219
+ case "Jito" /* Jito */: {
1220
+ const endpoint = config.customUrl || JITO_ENDPOINTS[region];
1221
+ return new JitoClient(rpcUrl, endpoint, config.apiKey);
1222
+ }
1223
+ case "Bloxroute" /* Bloxroute */: {
1224
+ const endpoint = config.customUrl || BLOXROUTE_ENDPOINTS[region];
1225
+ return new BloxrouteClient(rpcUrl, endpoint, config.apiKey);
1226
+ }
1227
+ case "ZeroSlot" /* ZeroSlot */: {
1228
+ const endpoint = config.customUrl || ZERO_SLOT_ENDPOINTS[region];
1229
+ return new ZeroSlotClient(rpcUrl, endpoint, config.apiKey);
1230
+ }
1231
+ case "Temporal" /* Temporal */: {
1232
+ const endpoint = config.customUrl || TEMPORAL_ENDPOINTS[region];
1233
+ return new TemporalClient(rpcUrl, endpoint, config.apiKey);
1234
+ }
1235
+ case "FlashBlock" /* FlashBlock */: {
1236
+ const endpoint = config.customUrl || FLASH_BLOCK_ENDPOINTS[region];
1237
+ return new FlashBlockClient(rpcUrl, endpoint, config.apiKey);
1238
+ }
1239
+ case "Helius" /* Helius */: {
1240
+ const endpoint = config.customUrl || HELIUS_ENDPOINTS[region];
1241
+ return new HeliusClient(rpcUrl, endpoint, config.apiKey, config.swqosOnly ?? false);
1242
+ }
1243
+ case "Node1" /* Node1 */: {
1244
+ const endpoint = config.customUrl || NODE1_ENDPOINTS[region];
1245
+ if (config.transport === "Quic" /* Quic */) {
1246
+ const parsed = /^https?:\/\//.test(endpoint) ? hostPortFromHttp(endpoint, 16666) : (() => {
1247
+ const lastColon = endpoint.lastIndexOf(":");
1248
+ return {
1249
+ host: lastColon >= 0 ? endpoint.slice(0, lastColon) : endpoint,
1250
+ port: lastColon >= 0 ? parseInt(endpoint.slice(lastColon + 1), 10) : 16666
1251
+ };
1252
+ })();
1253
+ return new Node1QuicClient(rpcUrl, `${parsed.host}:${parsed.port}`, config.apiKey || "");
1254
+ }
1255
+ return new Node1Client(rpcUrl, endpoint, config.apiKey);
1256
+ }
1257
+ case "BlockRazor" /* BlockRazor */: {
1258
+ const endpoint = config.customUrl || BLOCK_RAZOR_ENDPOINTS[region];
1259
+ return new BlockRazorClient(rpcUrl, endpoint, config.apiKey, config.mevProtection ?? false);
1260
+ }
1261
+ case "Astralane" /* Astralane */: {
1262
+ const baseEndpoint = config.customUrl || ASTRALANE_ENDPOINTS[region];
1263
+ if (config.astralaneTransport === "Quic" /* Quic */) {
1264
+ let endpoint2;
1265
+ const port = config.mevProtection ? 9e3 : 7e3;
1266
+ if (config.customUrl) {
1267
+ if (/^https?:\/\//.test(config.customUrl)) {
1268
+ const parsed = hostPortFromHttp(config.customUrl, port);
1269
+ endpoint2 = `${parsed.host}:${parsed.port}`;
1270
+ } else {
1271
+ endpoint2 = config.customUrl;
1272
+ }
1273
+ } else {
1274
+ endpoint2 = `${ASTRALANE_QUIC_HOSTS[region]}:${port}`;
1275
+ }
1276
+ return new AstralaneQuicClient(rpcUrl, endpoint2, config.apiKey || "");
1277
+ }
1278
+ const endpoint = config.astralaneTransport === "Plain" /* Plain */ ? baseEndpoint.replace("/irisb", "/iris") : baseEndpoint;
1279
+ return new AstralaneClient(rpcUrl, endpoint, config.apiKey);
1280
+ }
1281
+ case "Stellium" /* Stellium */: {
1282
+ const endpoint = config.customUrl || STELLIUM_ENDPOINTS[region];
1283
+ return new StelliumClient(rpcUrl, endpoint, config.apiKey);
1284
+ }
1285
+ case "Lightspeed" /* Lightspeed */: {
1286
+ if (!config.customUrl) {
1287
+ throw new TradeError(400, "LightspeedClient requires customUrl (format already contains api_key)");
1288
+ }
1289
+ return new LightspeedClient(rpcUrl, config.customUrl);
1290
+ }
1291
+ case "NextBlock" /* NextBlock */: {
1292
+ const endpoint = config.customUrl || NEXT_BLOCK_ENDPOINTS[region];
1293
+ return new NextBlockClient(rpcUrl, endpoint, config.apiKey);
1294
+ }
1295
+ case "Soyas" /* Soyas */: {
1296
+ const endpoint = config.customUrl || SOYAS_ENDPOINTS[region];
1297
+ return new SoyasClient(rpcUrl, endpoint, config.apiKey);
1298
+ }
1299
+ case "Speedlanding" /* Speedlanding */: {
1300
+ const endpoint = config.customUrl || SPEEDLANDING_ENDPOINTS[region];
1301
+ return new SpeedlandingClient(rpcUrl, endpoint, config.apiKey);
1302
+ }
1303
+ case "Default" /* Default */:
1304
+ default:
1305
+ return new DefaultClient(rpcUrl);
1306
+ }
1307
+ }
1308
+ };
1309
+ function createSwqosClient(swqosType, rpcUrl, authToken, region, customUrl, mevProtection = false) {
1310
+ const config = {
1311
+ type: swqosType,
1312
+ region,
1313
+ customUrl,
1314
+ apiKey: authToken,
1315
+ mevProtection
1316
+ };
1317
+ return ClientFactory.createClient(config, rpcUrl);
1318
+ }
1319
+ export {
1320
+ ASTRALANE_ENDPOINTS,
1321
+ ASTRALANE_QUIC_HOSTS,
1322
+ AstralaneClient,
1323
+ AstralaneQuicClient,
1324
+ BLOCK_RAZOR_ENDPOINTS,
1325
+ BLOXROUTE_ENDPOINTS,
1326
+ BlockRazorClient,
1327
+ BloxrouteClient,
1328
+ ClientFactory,
1329
+ DefaultClient,
1330
+ FLASH_BLOCK_ENDPOINTS,
1331
+ FlashBlockClient,
1332
+ HELIUS_ENDPOINTS,
1333
+ HeliusClient,
1334
+ JITO_ENDPOINTS,
1335
+ JitoClient,
1336
+ LightspeedClient,
1337
+ MIN_TIP_ASTRALANE,
1338
+ MIN_TIP_BLOCK_RAZOR,
1339
+ MIN_TIP_BLOXROUTE,
1340
+ MIN_TIP_DEFAULT,
1341
+ MIN_TIP_FLASH_BLOCK,
1342
+ MIN_TIP_HELIUS,
1343
+ MIN_TIP_HELIUS_NORMAL,
1344
+ MIN_TIP_JITO,
1345
+ MIN_TIP_LIGHTSPEED,
1346
+ MIN_TIP_NEXT_BLOCK,
1347
+ MIN_TIP_NODE1,
1348
+ MIN_TIP_SOYAS,
1349
+ MIN_TIP_SPEEDLANDING,
1350
+ MIN_TIP_STELLIUM,
1351
+ MIN_TIP_TEMPORAL,
1352
+ MIN_TIP_ZERO_SLOT,
1353
+ NEXT_BLOCK_ENDPOINTS,
1354
+ NODE1_ENDPOINTS,
1355
+ NextBlockClient,
1356
+ Node1Client,
1357
+ Node1QuicClient,
1358
+ SOYAS_ENDPOINTS,
1359
+ SPEEDLANDING_ENDPOINTS,
1360
+ STELLIUM_ENDPOINTS,
1361
+ SoyasClient,
1362
+ SpeedlandingClient,
1363
+ StelliumClient,
1364
+ TEMPORAL_ENDPOINTS,
1365
+ TemporalClient,
1366
+ ZERO_SLOT_ENDPOINTS,
1367
+ ZeroSlotClient,
1368
+ createSwqosClient,
1369
+ randomChoice
1370
+ };