@itachisol/plugin-x402-swarms 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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +323 -0
  3. package/dist/actions/delegateToSwarm.d.ts +8 -0
  4. package/dist/actions/delegateToSwarm.d.ts.map +1 -0
  5. package/dist/actions/delegateToSwarm.js +296 -0
  6. package/dist/actions/delegateToSwarm.js.map +1 -0
  7. package/dist/actions/delegateToSwarmWithPayment.d.ts +8 -0
  8. package/dist/actions/delegateToSwarmWithPayment.d.ts.map +1 -0
  9. package/dist/actions/delegateToSwarmWithPayment.js +323 -0
  10. package/dist/actions/delegateToSwarmWithPayment.js.map +1 -0
  11. package/dist/actions/discoverServices.d.ts +3 -0
  12. package/dist/actions/discoverServices.d.ts.map +1 -0
  13. package/dist/actions/discoverServices.js +63 -0
  14. package/dist/actions/discoverServices.js.map +1 -0
  15. package/dist/actions/index.d.ts +6 -0
  16. package/dist/actions/index.d.ts.map +1 -0
  17. package/dist/actions/index.js +6 -0
  18. package/dist/actions/index.js.map +1 -0
  19. package/dist/actions/payForService.d.ts +3 -0
  20. package/dist/actions/payForService.d.ts.map +1 -0
  21. package/dist/actions/payForService.js +115 -0
  22. package/dist/actions/payForService.js.map +1 -0
  23. package/dist/actions/runSwarmAgent.d.ts +7 -0
  24. package/dist/actions/runSwarmAgent.d.ts.map +1 -0
  25. package/dist/actions/runSwarmAgent.js +131 -0
  26. package/dist/actions/runSwarmAgent.js.map +1 -0
  27. package/dist/client/index.d.ts +512 -0
  28. package/dist/client/index.d.ts.map +1 -0
  29. package/dist/client/index.js +469 -0
  30. package/dist/client/index.js.map +1 -0
  31. package/dist/evaluators/paymentEvaluator.d.ts +7 -0
  32. package/dist/evaluators/paymentEvaluator.d.ts.map +1 -0
  33. package/dist/evaluators/paymentEvaluator.js +104 -0
  34. package/dist/evaluators/paymentEvaluator.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 +60 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/marketing/index.d.ts +7 -0
  40. package/dist/marketing/index.d.ts.map +1 -0
  41. package/dist/marketing/index.js +7 -0
  42. package/dist/marketing/index.js.map +1 -0
  43. package/dist/marketing/milestoneAgent.d.ts +54 -0
  44. package/dist/marketing/milestoneAgent.d.ts.map +1 -0
  45. package/dist/marketing/milestoneAgent.js +121 -0
  46. package/dist/marketing/milestoneAgent.js.map +1 -0
  47. package/dist/marketing/tweetTemplates.d.ts +32 -0
  48. package/dist/marketing/tweetTemplates.d.ts.map +1 -0
  49. package/dist/marketing/tweetTemplates.js +60 -0
  50. package/dist/marketing/tweetTemplates.js.map +1 -0
  51. package/dist/marketing/xMonitor.d.ts +51 -0
  52. package/dist/marketing/xMonitor.d.ts.map +1 -0
  53. package/dist/marketing/xMonitor.js +141 -0
  54. package/dist/marketing/xMonitor.js.map +1 -0
  55. package/dist/providers/x402Provider.d.ts +7 -0
  56. package/dist/providers/x402Provider.d.ts.map +1 -0
  57. package/dist/providers/x402Provider.js +72 -0
  58. package/dist/providers/x402Provider.js.map +1 -0
  59. package/dist/providers/x402ServerProvider.d.ts +7 -0
  60. package/dist/providers/x402ServerProvider.d.ts.map +1 -0
  61. package/dist/providers/x402ServerProvider.js +48 -0
  62. package/dist/providers/x402ServerProvider.js.map +1 -0
  63. package/dist/routes/advancedRoutes.d.ts +5 -0
  64. package/dist/routes/advancedRoutes.d.ts.map +1 -0
  65. package/dist/routes/advancedRoutes.js +869 -0
  66. package/dist/routes/advancedRoutes.js.map +1 -0
  67. package/dist/routes/batchRoutes.d.ts +13 -0
  68. package/dist/routes/batchRoutes.d.ts.map +1 -0
  69. package/dist/routes/batchRoutes.js +496 -0
  70. package/dist/routes/batchRoutes.js.map +1 -0
  71. package/dist/routes/codeAuditRoutes.d.ts +6 -0
  72. package/dist/routes/codeAuditRoutes.d.ts.map +1 -0
  73. package/dist/routes/codeAuditRoutes.js +415 -0
  74. package/dist/routes/codeAuditRoutes.js.map +1 -0
  75. package/dist/routes/contentRoutes.d.ts +5 -0
  76. package/dist/routes/contentRoutes.d.ts.map +1 -0
  77. package/dist/routes/contentRoutes.js +370 -0
  78. package/dist/routes/contentRoutes.js.map +1 -0
  79. package/dist/routes/cryptoAnalysisRoutes.d.ts +5 -0
  80. package/dist/routes/cryptoAnalysisRoutes.d.ts.map +1 -0
  81. package/dist/routes/cryptoAnalysisRoutes.js +641 -0
  82. package/dist/routes/cryptoAnalysisRoutes.js.map +1 -0
  83. package/dist/routes/cryptoRoutes.d.ts +5 -0
  84. package/dist/routes/cryptoRoutes.d.ts.map +1 -0
  85. package/dist/routes/cryptoRoutes.js +1225 -0
  86. package/dist/routes/cryptoRoutes.js.map +1 -0
  87. package/dist/routes/heliusDataRoutes.d.ts +14 -0
  88. package/dist/routes/heliusDataRoutes.d.ts.map +1 -0
  89. package/dist/routes/heliusDataRoutes.js +388 -0
  90. package/dist/routes/heliusDataRoutes.js.map +1 -0
  91. package/dist/routes/taskRoutes.d.ts +5 -0
  92. package/dist/routes/taskRoutes.d.ts.map +1 -0
  93. package/dist/routes/taskRoutes.js +574 -0
  94. package/dist/routes/taskRoutes.js.map +1 -0
  95. package/dist/routes/tradingRoutes.d.ts +5 -0
  96. package/dist/routes/tradingRoutes.d.ts.map +1 -0
  97. package/dist/routes/tradingRoutes.js +500 -0
  98. package/dist/routes/tradingRoutes.js.map +1 -0
  99. package/dist/routes/walletAnalyzerRoutes.d.ts +12 -0
  100. package/dist/routes/walletAnalyzerRoutes.d.ts.map +1 -0
  101. package/dist/routes/walletAnalyzerRoutes.js +316 -0
  102. package/dist/routes/walletAnalyzerRoutes.js.map +1 -0
  103. package/dist/routes/x402Routes.d.ts +9 -0
  104. package/dist/routes/x402Routes.d.ts.map +1 -0
  105. package/dist/routes/x402Routes.js +474 -0
  106. package/dist/routes/x402Routes.js.map +1 -0
  107. package/dist/schemas/budgetState.d.ts +250 -0
  108. package/dist/schemas/budgetState.d.ts.map +1 -0
  109. package/dist/schemas/budgetState.js +20 -0
  110. package/dist/schemas/budgetState.js.map +1 -0
  111. package/dist/schemas/endpointScores.d.ts +182 -0
  112. package/dist/schemas/endpointScores.d.ts.map +1 -0
  113. package/dist/schemas/endpointScores.js +17 -0
  114. package/dist/schemas/endpointScores.js.map +1 -0
  115. package/dist/schemas/index.d.ts +4 -0
  116. package/dist/schemas/index.d.ts.map +1 -0
  117. package/dist/schemas/index.js +4 -0
  118. package/dist/schemas/index.js.map +1 -0
  119. package/dist/schemas/paymentHistory.d.ts +284 -0
  120. package/dist/schemas/paymentHistory.d.ts.map +1 -0
  121. package/dist/schemas/paymentHistory.js +24 -0
  122. package/dist/schemas/paymentHistory.js.map +1 -0
  123. package/dist/server/index.d.ts +3 -0
  124. package/dist/server/index.d.ts.map +1 -0
  125. package/dist/server/index.js +3 -0
  126. package/dist/server/index.js.map +1 -0
  127. package/dist/server/x402Gate.d.ts +56 -0
  128. package/dist/server/x402Gate.d.ts.map +1 -0
  129. package/dist/server/x402Gate.js +240 -0
  130. package/dist/server/x402Gate.js.map +1 -0
  131. package/dist/server/x402ServerService.d.ts +30 -0
  132. package/dist/server/x402ServerService.d.ts.map +1 -0
  133. package/dist/server/x402ServerService.js +79 -0
  134. package/dist/server/x402ServerService.js.map +1 -0
  135. package/dist/services/paymentMemoryService.d.ts +73 -0
  136. package/dist/services/paymentMemoryService.d.ts.map +1 -0
  137. package/dist/services/paymentMemoryService.js +247 -0
  138. package/dist/services/paymentMemoryService.js.map +1 -0
  139. package/dist/services/swarmsService.d.ts +66 -0
  140. package/dist/services/swarmsService.d.ts.map +1 -0
  141. package/dist/services/swarmsService.js +102 -0
  142. package/dist/services/swarmsService.js.map +1 -0
  143. package/dist/services/x402WalletService.d.ts +57 -0
  144. package/dist/services/x402WalletService.d.ts.map +1 -0
  145. package/dist/services/x402WalletService.js +258 -0
  146. package/dist/services/x402WalletService.js.map +1 -0
  147. package/dist/templates/index.d.ts +24 -0
  148. package/dist/templates/index.d.ts.map +1 -0
  149. package/dist/templates/index.js +51 -0
  150. package/dist/templates/index.js.map +1 -0
  151. package/dist/templates/swarmTemplates.d.ts +22 -0
  152. package/dist/templates/swarmTemplates.d.ts.map +1 -0
  153. package/dist/templates/swarmTemplates.js +225 -0
  154. package/dist/templates/swarmTemplates.js.map +1 -0
  155. package/dist/types.d.ts +197 -0
  156. package/dist/types.d.ts.map +1 -0
  157. package/dist/types.js +2 -0
  158. package/dist/types.js.map +1 -0
  159. package/dist/utils/cache.d.ts +17 -0
  160. package/dist/utils/cache.d.ts.map +1 -0
  161. package/dist/utils/cache.js +32 -0
  162. package/dist/utils/cache.js.map +1 -0
  163. package/dist/utils/llm.d.ts +16 -0
  164. package/dist/utils/llm.d.ts.map +1 -0
  165. package/dist/utils/llm.js +32 -0
  166. package/dist/utils/llm.js.map +1 -0
  167. package/dist/utils/reportStore.d.ts +45 -0
  168. package/dist/utils/reportStore.d.ts.map +1 -0
  169. package/dist/utils/reportStore.js +164 -0
  170. package/dist/utils/reportStore.js.map +1 -0
  171. package/dist/utils/taskQueue.d.ts +54 -0
  172. package/dist/utils/taskQueue.d.ts.map +1 -0
  173. package/dist/utils/taskQueue.js +124 -0
  174. package/dist/utils/taskQueue.js.map +1 -0
  175. package/package.json +69 -0
@@ -0,0 +1,500 @@
1
+ import { x402Gate } from "../server/x402Gate.js";
2
+ import { TTLCache } from "../utils/cache.js";
3
+ import { SOLANA_ADDR_RE, heliusRpcUrl, rpcCall } from "./heliusDataRoutes.js";
4
+ // ── Per-endpoint caches with aggressive TTLs for HFT ────────────────────────
5
+ const priceCache = new TTLCache(5_000); // 5s — bots need fresh prices
6
+ const supplyCache = new TTLCache(30_000); // 30s — supply rarely changes
7
+ const slotCache = new TTLCache(2_000); // 2s — network health
8
+ const tokenAccountsCache = new TTLCache(10_000); // 10s — portfolio
9
+ const blockhashCache = new TTLCache(5_000); // 5s — tx building
10
+ // ── Rate limit error cache (1s TTL) — prevents hammering Helius on 429s ────
11
+ const errorCache = new TTLCache(1_000);
12
+ const HELIUS_ERROR_KEY = "helius:rate-limit";
13
+ /**
14
+ * Check if a trading data endpoint should short-circuit with 503.
15
+ * Returns a reason string if unavailable, or null if OK to proceed.
16
+ */
17
+ function tradingUnavailableReason(runtime) {
18
+ // Check if Helius API key is configured
19
+ const heliusKey = runtime.getSetting("HELIUS_API_KEY");
20
+ if (!heliusKey) {
21
+ return "Trading data endpoints temporarily unavailable — HELIUS_API_KEY not configured. Use access passes for high-frequency data access.";
22
+ }
23
+ // Check if we recently hit a rate limit
24
+ const cached = errorCache.get(HELIUS_ERROR_KEY);
25
+ if (cached) {
26
+ return "Trading data endpoints temporarily unavailable due to rate limiting. Use access passes for high-frequency data access.";
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Record a rate-limit error so subsequent requests short-circuit for 1s.
32
+ */
33
+ function recordRateLimitError(err) {
34
+ const msg = err instanceof Error ? err.message : String(err);
35
+ if (/rate.limit|429|max.usage|too.many/i.test(msg)) {
36
+ errorCache.set(HELIUS_ERROR_KEY, msg);
37
+ }
38
+ }
39
+ // ── Catalog entries ─────────────────────────────────────────────────────────
40
+ export const TRADING_CATALOG = [
41
+ {
42
+ name: "Token Price",
43
+ description: "Real-time token price in USD via Jupiter — sub-second cached, designed for HFT bot loops",
44
+ path: "/x402/token-price",
45
+ method: "POST",
46
+ priceUsd: "0.001",
47
+ },
48
+ {
49
+ name: "Token Supply",
50
+ description: "Get total supply and decimals for any SPL token mint via Solana RPC",
51
+ path: "/x402/token-supply",
52
+ method: "POST",
53
+ priceUsd: "0.001",
54
+ },
55
+ {
56
+ name: "Slot Info",
57
+ description: "Current Solana slot and block time — network health monitoring for trading bots",
58
+ path: "/x402/slot-info",
59
+ method: "POST",
60
+ priceUsd: "0.001",
61
+ },
62
+ {
63
+ name: "Token Accounts",
64
+ description: "List all SPL token accounts for a wallet — portfolio monitoring with optional mint filter",
65
+ path: "/x402/token-accounts",
66
+ method: "POST",
67
+ priceUsd: "0.002",
68
+ },
69
+ {
70
+ name: "Recent Blockhash",
71
+ description: "Get latest blockhash for transaction building — every bot needs this before submitting a tx",
72
+ path: "/x402/recent-blockhash",
73
+ method: "POST",
74
+ priceUsd: "0.001",
75
+ },
76
+ ];
77
+ // ── Jupiter Price API helper ────────────────────────────────────────────────
78
+ const JUPITER_PRICE_URL = "https://api.jup.ag/price/v2";
79
+ async function fetchJupiterPrice(mint) {
80
+ const res = await fetch(`${JUPITER_PRICE_URL}?ids=${mint}`, {
81
+ headers: { Accept: "application/json" },
82
+ signal: AbortSignal.timeout(5_000),
83
+ });
84
+ if (!res.ok)
85
+ return null;
86
+ const json = await res.json();
87
+ const data = json?.data?.[mint];
88
+ if (!data?.price)
89
+ return null;
90
+ return {
91
+ priceUsd: parseFloat(data.price),
92
+ confidence: data.extraInfo?.confidenceLevel ?? "unknown",
93
+ };
94
+ }
95
+ // ── Route definitions ───────────────────────────────────────────────────────
96
+ export const tradingRoutes = [
97
+ // ── POST /x402/token-price — $0.001 ──────────────────────────────────
98
+ {
99
+ type: "POST",
100
+ path: "/x402/token-price",
101
+ handler: async (req, res, runtime) => {
102
+ const gate = await x402Gate(runtime, req, res, {
103
+ amountUsd: "0.001",
104
+ description: "Real-time token price via Jupiter",
105
+ });
106
+ if (!gate.paid)
107
+ return;
108
+ const unavailable = tradingUnavailableReason(runtime);
109
+ if (unavailable) {
110
+ res.status(503).json({ error: unavailable });
111
+ return;
112
+ }
113
+ const body = req.body ?? {};
114
+ const mint = body.mint;
115
+ if (!mint || typeof mint !== "string") {
116
+ res.status(400).json({ error: "Missing required field: mint (SPL token mint address)" });
117
+ return;
118
+ }
119
+ if (!SOLANA_ADDR_RE.test(mint)) {
120
+ res.status(400).json({ error: "Invalid mint address format" });
121
+ return;
122
+ }
123
+ try {
124
+ const cacheKey = `price:${mint}`;
125
+ const cached = priceCache.get(cacheKey);
126
+ if (cached) {
127
+ res.json({
128
+ ...cached,
129
+ cached: true,
130
+ payment: {
131
+ amount: "0.001",
132
+ transaction: gate.transaction,
133
+ network: gate.network,
134
+ },
135
+ });
136
+ return;
137
+ }
138
+ const result = await fetchJupiterPrice(mint);
139
+ if (!result) {
140
+ res.status(404).json({ error: "Price not available for this token" });
141
+ return;
142
+ }
143
+ const payload = {
144
+ mint,
145
+ priceUsd: result.priceUsd,
146
+ confidence: result.confidence,
147
+ source: "jupiter",
148
+ timestamp: Date.now(),
149
+ queriedAt: new Date().toISOString(),
150
+ };
151
+ priceCache.set(cacheKey, payload);
152
+ res.json({
153
+ ...payload,
154
+ cached: false,
155
+ payment: {
156
+ amount: "0.001",
157
+ transaction: gate.transaction,
158
+ network: gate.network,
159
+ },
160
+ });
161
+ }
162
+ catch (err) {
163
+ recordRateLimitError(err);
164
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[token-price] Fetch failed");
165
+ res.status(500).json({ error: "Service temporarily unavailable" });
166
+ }
167
+ },
168
+ },
169
+ // ── POST /x402/token-supply — $0.001 ─────────────────────────────────
170
+ {
171
+ type: "POST",
172
+ path: "/x402/token-supply",
173
+ handler: async (req, res, runtime) => {
174
+ const gate = await x402Gate(runtime, req, res, {
175
+ amountUsd: "0.001",
176
+ description: "Token supply via Solana RPC",
177
+ });
178
+ if (!gate.paid)
179
+ return;
180
+ const unavailable = tradingUnavailableReason(runtime);
181
+ if (unavailable) {
182
+ res.status(503).json({ error: unavailable });
183
+ return;
184
+ }
185
+ const body = req.body ?? {};
186
+ const mint = body.mint;
187
+ if (!mint || typeof mint !== "string") {
188
+ res.status(400).json({ error: "Missing required field: mint (SPL token mint address)" });
189
+ return;
190
+ }
191
+ if (!SOLANA_ADDR_RE.test(mint)) {
192
+ res.status(400).json({ error: "Invalid mint address format" });
193
+ return;
194
+ }
195
+ try {
196
+ const cacheKey = `supply:${mint}`;
197
+ const cached = supplyCache.get(cacheKey);
198
+ if (cached) {
199
+ res.json({
200
+ ...cached,
201
+ cached: true,
202
+ payment: {
203
+ amount: "0.001",
204
+ transaction: gate.transaction,
205
+ network: gate.network,
206
+ },
207
+ });
208
+ return;
209
+ }
210
+ const rpcUrl = heliusRpcUrl(String(runtime.getSetting("HELIUS_API_KEY")));
211
+ const result = await rpcCall(rpcUrl, "getTokenSupply", [mint]);
212
+ const value = result?.value;
213
+ if (!value) {
214
+ res.status(404).json({ error: "Token mint not found" });
215
+ return;
216
+ }
217
+ const payload = {
218
+ mint,
219
+ supply: value.uiAmountString ?? String(value.uiAmount),
220
+ rawSupply: value.amount,
221
+ decimals: value.decimals,
222
+ timestamp: Date.now(),
223
+ queriedAt: new Date().toISOString(),
224
+ };
225
+ supplyCache.set(cacheKey, payload);
226
+ res.json({
227
+ ...payload,
228
+ cached: false,
229
+ payment: {
230
+ amount: "0.001",
231
+ transaction: gate.transaction,
232
+ network: gate.network,
233
+ },
234
+ });
235
+ }
236
+ catch (err) {
237
+ recordRateLimitError(err);
238
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[token-supply] Fetch failed");
239
+ res.status(500).json({ error: "Service temporarily unavailable" });
240
+ }
241
+ },
242
+ },
243
+ // ── POST /x402/slot-info — $0.001 ────────────────────────────────────
244
+ {
245
+ type: "POST",
246
+ path: "/x402/slot-info",
247
+ handler: async (req, res, runtime) => {
248
+ const gate = await x402Gate(runtime, req, res, {
249
+ amountUsd: "0.001",
250
+ description: "Current Solana slot and block time",
251
+ });
252
+ if (!gate.paid)
253
+ return;
254
+ const unavailable = tradingUnavailableReason(runtime);
255
+ if (unavailable) {
256
+ res.status(503).json({ error: unavailable });
257
+ return;
258
+ }
259
+ try {
260
+ const cacheKey = "slot-info";
261
+ const cached = slotCache.get(cacheKey);
262
+ if (cached) {
263
+ res.json({
264
+ ...cached,
265
+ cached: true,
266
+ payment: {
267
+ amount: "0.001",
268
+ transaction: gate.transaction,
269
+ network: gate.network,
270
+ },
271
+ });
272
+ return;
273
+ }
274
+ const rpcUrl = heliusRpcUrl(String(runtime.getSetting("HELIUS_API_KEY")));
275
+ // Parallel fetch: slot + epoch info
276
+ const [slot, epochInfo] = await Promise.all([
277
+ rpcCall(rpcUrl, "getSlot", []),
278
+ rpcCall(rpcUrl, "getEpochInfo", []),
279
+ ]);
280
+ // Get block time for current slot (may fail for very recent slots)
281
+ let blockTime = null;
282
+ try {
283
+ blockTime = await rpcCall(rpcUrl, "getBlockTime", [slot]);
284
+ }
285
+ catch {
286
+ // Block time not yet available for the latest slot — normal
287
+ }
288
+ const payload = {
289
+ slot,
290
+ blockTime,
291
+ blockTimeIso: blockTime ? new Date(blockTime * 1000).toISOString() : null,
292
+ epoch: epochInfo?.epoch ?? null,
293
+ slotIndex: epochInfo?.slotIndex ?? null,
294
+ slotsInEpoch: epochInfo?.slotsInEpoch ?? null,
295
+ timestamp: Date.now(),
296
+ queriedAt: new Date().toISOString(),
297
+ };
298
+ slotCache.set(cacheKey, payload);
299
+ res.json({
300
+ ...payload,
301
+ cached: false,
302
+ payment: {
303
+ amount: "0.001",
304
+ transaction: gate.transaction,
305
+ network: gate.network,
306
+ },
307
+ });
308
+ }
309
+ catch (err) {
310
+ recordRateLimitError(err);
311
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[slot-info] Fetch failed");
312
+ res.status(500).json({ error: "Service temporarily unavailable" });
313
+ }
314
+ },
315
+ },
316
+ // ── POST /x402/token-accounts — $0.002 ───────────────────────────────
317
+ {
318
+ type: "POST",
319
+ path: "/x402/token-accounts",
320
+ handler: async (req, res, runtime) => {
321
+ const gate = await x402Gate(runtime, req, res, {
322
+ amountUsd: "0.002",
323
+ description: "Token accounts for a wallet",
324
+ });
325
+ if (!gate.paid)
326
+ return;
327
+ const unavailable = tradingUnavailableReason(runtime);
328
+ if (unavailable) {
329
+ res.status(503).json({ error: unavailable });
330
+ return;
331
+ }
332
+ const body = req.body ?? {};
333
+ const address = body.address;
334
+ if (!address || typeof address !== "string") {
335
+ res.status(400).json({ error: "Missing required field: address (Solana wallet address)" });
336
+ return;
337
+ }
338
+ if (!SOLANA_ADDR_RE.test(address)) {
339
+ res.status(400).json({ error: "Invalid Solana address format" });
340
+ return;
341
+ }
342
+ const mintFilter = typeof body.mint === "string" && SOLANA_ADDR_RE.test(body.mint)
343
+ ? body.mint
344
+ : undefined;
345
+ try {
346
+ const cacheKey = `accounts:${address}:${mintFilter ?? "all"}`;
347
+ const cached = tokenAccountsCache.get(cacheKey);
348
+ if (cached) {
349
+ res.json({
350
+ ...cached,
351
+ cached: true,
352
+ payment: {
353
+ amount: "0.002",
354
+ transaction: gate.transaction,
355
+ network: gate.network,
356
+ },
357
+ });
358
+ return;
359
+ }
360
+ const rpcUrl = heliusRpcUrl(String(runtime.getSetting("HELIUS_API_KEY")));
361
+ // Build filter: by specific mint or all SPL tokens
362
+ const filter = mintFilter
363
+ ? { mint: mintFilter }
364
+ : { programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" };
365
+ const result = await rpcCall(rpcUrl, "getTokenAccountsByOwner", [
366
+ address,
367
+ filter,
368
+ { encoding: "jsonParsed" },
369
+ ]);
370
+ const accounts = (result?.value ?? []).map((account) => {
371
+ const info = account.account.data.parsed.info;
372
+ return {
373
+ mint: info.mint,
374
+ amount: info.tokenAmount.uiAmountString ?? String(info.tokenAmount.uiAmount ?? 0),
375
+ rawAmount: info.tokenAmount.amount,
376
+ decimals: info.tokenAmount.decimals,
377
+ };
378
+ });
379
+ // Sort by raw amount descending (largest holdings first)
380
+ accounts.sort((a, b) => parseFloat(b.rawAmount) - parseFloat(a.rawAmount));
381
+ const payload = {
382
+ address,
383
+ mintFilter: mintFilter ?? null,
384
+ accounts,
385
+ accountCount: accounts.length,
386
+ timestamp: Date.now(),
387
+ queriedAt: new Date().toISOString(),
388
+ };
389
+ tokenAccountsCache.set(cacheKey, payload);
390
+ res.json({
391
+ ...payload,
392
+ cached: false,
393
+ payment: {
394
+ amount: "0.002",
395
+ transaction: gate.transaction,
396
+ network: gate.network,
397
+ },
398
+ });
399
+ }
400
+ catch (err) {
401
+ recordRateLimitError(err);
402
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[token-accounts] Fetch failed");
403
+ res.status(500).json({ error: "Service temporarily unavailable" });
404
+ }
405
+ },
406
+ },
407
+ // ── POST /x402/recent-blockhash — $0.001 ─────────────────────────────
408
+ {
409
+ type: "POST",
410
+ path: "/x402/recent-blockhash",
411
+ handler: async (req, res, runtime) => {
412
+ const gate = await x402Gate(runtime, req, res, {
413
+ amountUsd: "0.001",
414
+ description: "Latest blockhash for transaction building",
415
+ });
416
+ if (!gate.paid)
417
+ return;
418
+ const unavailable = tradingUnavailableReason(runtime);
419
+ if (unavailable) {
420
+ res.status(503).json({ error: unavailable });
421
+ return;
422
+ }
423
+ try {
424
+ const cacheKey = "recent-blockhash";
425
+ const cached = blockhashCache.get(cacheKey);
426
+ if (cached) {
427
+ res.json({
428
+ ...cached,
429
+ cached: true,
430
+ payment: {
431
+ amount: "0.001",
432
+ transaction: gate.transaction,
433
+ network: gate.network,
434
+ },
435
+ });
436
+ return;
437
+ }
438
+ const rpcUrl = heliusRpcUrl(String(runtime.getSetting("HELIUS_API_KEY")));
439
+ const result = await rpcCall(rpcUrl, "getLatestBlockhash", []);
440
+ const value = result?.value;
441
+ if (!value) {
442
+ res.status(500).json({ error: "Service temporarily unavailable" });
443
+ return;
444
+ }
445
+ const payload = {
446
+ blockhash: value.blockhash,
447
+ lastValidBlockHeight: value.lastValidBlockHeight,
448
+ timestamp: Date.now(),
449
+ queriedAt: new Date().toISOString(),
450
+ };
451
+ blockhashCache.set(cacheKey, payload);
452
+ res.json({
453
+ ...payload,
454
+ cached: false,
455
+ payment: {
456
+ amount: "0.001",
457
+ transaction: gate.transaction,
458
+ network: gate.network,
459
+ },
460
+ });
461
+ }
462
+ catch (err) {
463
+ recordRateLimitError(err);
464
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[recent-blockhash] Fetch failed");
465
+ res.status(500).json({ error: "Service temporarily unavailable" });
466
+ }
467
+ },
468
+ },
469
+ // ── GET /x402/trading/health — FREE ──────────────────────────────────
470
+ {
471
+ type: "GET",
472
+ path: "/x402/trading/health",
473
+ name: "trading-health",
474
+ public: true,
475
+ handler: async (_req, res, runtime) => {
476
+ const hasHelius = !!runtime.getSetting("HELIUS_API_KEY");
477
+ const serverService = runtime.getService("X402_SERVER");
478
+ res.json({
479
+ status: hasHelius ? "ok" : "degraded",
480
+ heliusConfigured: hasHelius,
481
+ receiveAddress: serverService?.getReceiveAddress() ?? "",
482
+ network: serverService?.getNetwork() ?? "",
483
+ endpoints: TRADING_CATALOG.map((e) => ({
484
+ path: e.path,
485
+ price: `$${e.priceUsd}/call`,
486
+ method: e.method,
487
+ })),
488
+ cacheTtls: {
489
+ "token-price": "5s",
490
+ "token-supply": "30s",
491
+ "slot-info": "2s",
492
+ "token-accounts": "10s",
493
+ "recent-blockhash": "5s",
494
+ },
495
+ designedFor: "High-frequency trading bots — low price, short cache TTLs, fast responses",
496
+ });
497
+ },
498
+ },
499
+ ];
500
+ //# sourceMappingURL=tradingRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tradingRoutes.js","sourceRoot":"","sources":["../../src/routes/tradingRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Route } from "@elizaos/core";
2
+ import type { X402ServiceEndpoint } from "../types.js";
3
+ /**
4
+ * Catalog entry for the wallet analyzer.
5
+ */
6
+ export declare const WALLET_ANALYZER_CATALOG: X402ServiceEndpoint;
7
+ export declare const WALLET_REPORT_CATALOG: X402ServiceEndpoint;
8
+ /**
9
+ * Wallet analyzer x402 routes.
10
+ */
11
+ export declare const walletAnalyzerRoutes: Route[];
12
+ //# sourceMappingURL=walletAnalyzerRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletAnalyzerRoutes.d.ts","sourceRoot":"","sources":["../../src/routes/walletAnalyzerRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAavD;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAOrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,mBAOnC,CAAC;AA+DF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,EA2RvC,CAAC"}