@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,284 @@
1
+ export declare const x402PaymentHistory: import("drizzle-orm/pg-core").PgTableWithColumns<{
2
+ name: "x402_payment_history";
3
+ schema: undefined;
4
+ columns: {
5
+ id: import("drizzle-orm/pg-core").PgColumn<{
6
+ name: "id";
7
+ tableName: "x402_payment_history";
8
+ dataType: "string";
9
+ columnType: "PgVarchar";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {
22
+ length: 36;
23
+ }>;
24
+ agentId: import("drizzle-orm/pg-core").PgColumn<{
25
+ name: "agent_id";
26
+ tableName: "x402_payment_history";
27
+ dataType: "string";
28
+ columnType: "PgVarchar";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: 36;
42
+ }>;
43
+ endpoint: import("drizzle-orm/pg-core").PgColumn<{
44
+ name: "endpoint";
45
+ tableName: "x402_payment_history";
46
+ dataType: "string";
47
+ columnType: "PgText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: true;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {}>;
60
+ domain: import("drizzle-orm/pg-core").PgColumn<{
61
+ name: "domain";
62
+ tableName: "x402_payment_history";
63
+ dataType: "string";
64
+ columnType: "PgText";
65
+ data: string;
66
+ driverParam: string;
67
+ notNull: true;
68
+ hasDefault: false;
69
+ isPrimaryKey: false;
70
+ isAutoincrement: false;
71
+ hasRuntimeDefault: false;
72
+ enumValues: [string, ...string[]];
73
+ baseColumn: never;
74
+ identity: undefined;
75
+ generated: undefined;
76
+ }, {}, {}>;
77
+ method: import("drizzle-orm/pg-core").PgColumn<{
78
+ name: "method";
79
+ tableName: "x402_payment_history";
80
+ dataType: "string";
81
+ columnType: "PgText";
82
+ data: string;
83
+ driverParam: string;
84
+ notNull: false;
85
+ hasDefault: true;
86
+ isPrimaryKey: false;
87
+ isAutoincrement: false;
88
+ hasRuntimeDefault: false;
89
+ enumValues: [string, ...string[]];
90
+ baseColumn: never;
91
+ identity: undefined;
92
+ generated: undefined;
93
+ }, {}, {}>;
94
+ amountUsd: import("drizzle-orm/pg-core").PgColumn<{
95
+ name: "amount_usd";
96
+ tableName: "x402_payment_history";
97
+ dataType: "number";
98
+ columnType: "PgReal";
99
+ data: number;
100
+ driverParam: string | number;
101
+ notNull: true;
102
+ hasDefault: false;
103
+ isPrimaryKey: false;
104
+ isAutoincrement: false;
105
+ hasRuntimeDefault: false;
106
+ enumValues: undefined;
107
+ baseColumn: never;
108
+ identity: undefined;
109
+ generated: undefined;
110
+ }, {}, {}>;
111
+ txHash: import("drizzle-orm/pg-core").PgColumn<{
112
+ name: "tx_hash";
113
+ tableName: "x402_payment_history";
114
+ dataType: "string";
115
+ columnType: "PgText";
116
+ data: string;
117
+ driverParam: string;
118
+ notNull: true;
119
+ hasDefault: false;
120
+ isPrimaryKey: false;
121
+ isAutoincrement: false;
122
+ hasRuntimeDefault: false;
123
+ enumValues: [string, ...string[]];
124
+ baseColumn: never;
125
+ identity: undefined;
126
+ generated: undefined;
127
+ }, {}, {}>;
128
+ network: import("drizzle-orm/pg-core").PgColumn<{
129
+ name: "network";
130
+ tableName: "x402_payment_history";
131
+ dataType: "string";
132
+ columnType: "PgText";
133
+ data: string;
134
+ driverParam: string;
135
+ notNull: false;
136
+ hasDefault: false;
137
+ isPrimaryKey: false;
138
+ isAutoincrement: false;
139
+ hasRuntimeDefault: false;
140
+ enumValues: [string, ...string[]];
141
+ baseColumn: never;
142
+ identity: undefined;
143
+ generated: undefined;
144
+ }, {}, {}>;
145
+ payer: import("drizzle-orm/pg-core").PgColumn<{
146
+ name: "payer";
147
+ tableName: "x402_payment_history";
148
+ dataType: "string";
149
+ columnType: "PgText";
150
+ data: string;
151
+ driverParam: string;
152
+ notNull: false;
153
+ hasDefault: false;
154
+ isPrimaryKey: false;
155
+ isAutoincrement: false;
156
+ hasRuntimeDefault: false;
157
+ enumValues: [string, ...string[]];
158
+ baseColumn: never;
159
+ identity: undefined;
160
+ generated: undefined;
161
+ }, {}, {}>;
162
+ status: import("drizzle-orm/pg-core").PgColumn<{
163
+ name: "status";
164
+ tableName: "x402_payment_history";
165
+ dataType: "string";
166
+ columnType: "PgText";
167
+ data: string;
168
+ driverParam: string;
169
+ notNull: true;
170
+ hasDefault: true;
171
+ isPrimaryKey: false;
172
+ isAutoincrement: false;
173
+ hasRuntimeDefault: false;
174
+ enumValues: [string, ...string[]];
175
+ baseColumn: never;
176
+ identity: undefined;
177
+ generated: undefined;
178
+ }, {}, {}>;
179
+ responseStatus: import("drizzle-orm/pg-core").PgColumn<{
180
+ name: "response_status";
181
+ tableName: "x402_payment_history";
182
+ dataType: "number";
183
+ columnType: "PgInteger";
184
+ data: number;
185
+ driverParam: string | number;
186
+ notNull: false;
187
+ hasDefault: false;
188
+ isPrimaryKey: false;
189
+ isAutoincrement: false;
190
+ hasRuntimeDefault: false;
191
+ enumValues: undefined;
192
+ baseColumn: never;
193
+ identity: undefined;
194
+ generated: undefined;
195
+ }, {}, {}>;
196
+ responseTimeMs: import("drizzle-orm/pg-core").PgColumn<{
197
+ name: "response_time_ms";
198
+ tableName: "x402_payment_history";
199
+ dataType: "number";
200
+ columnType: "PgInteger";
201
+ data: number;
202
+ driverParam: string | number;
203
+ notNull: false;
204
+ hasDefault: false;
205
+ isPrimaryKey: false;
206
+ isAutoincrement: false;
207
+ hasRuntimeDefault: false;
208
+ enumValues: undefined;
209
+ baseColumn: never;
210
+ identity: undefined;
211
+ generated: undefined;
212
+ }, {}, {}>;
213
+ qualityScore: import("drizzle-orm/pg-core").PgColumn<{
214
+ name: "quality_score";
215
+ tableName: "x402_payment_history";
216
+ dataType: "number";
217
+ columnType: "PgReal";
218
+ data: number;
219
+ driverParam: string | number;
220
+ notNull: false;
221
+ hasDefault: false;
222
+ isPrimaryKey: false;
223
+ isAutoincrement: false;
224
+ hasRuntimeDefault: false;
225
+ enumValues: undefined;
226
+ baseColumn: never;
227
+ identity: undefined;
228
+ generated: undefined;
229
+ }, {}, {}>;
230
+ qualityReason: import("drizzle-orm/pg-core").PgColumn<{
231
+ name: "quality_reason";
232
+ tableName: "x402_payment_history";
233
+ dataType: "string";
234
+ columnType: "PgText";
235
+ data: string;
236
+ driverParam: string;
237
+ notNull: false;
238
+ hasDefault: false;
239
+ isPrimaryKey: false;
240
+ isAutoincrement: false;
241
+ hasRuntimeDefault: false;
242
+ enumValues: [string, ...string[]];
243
+ baseColumn: never;
244
+ identity: undefined;
245
+ generated: undefined;
246
+ }, {}, {}>;
247
+ responsePreview: import("drizzle-orm/pg-core").PgColumn<{
248
+ name: "response_preview";
249
+ tableName: "x402_payment_history";
250
+ dataType: "string";
251
+ columnType: "PgText";
252
+ data: string;
253
+ driverParam: string;
254
+ notNull: false;
255
+ hasDefault: false;
256
+ isPrimaryKey: false;
257
+ isAutoincrement: false;
258
+ hasRuntimeDefault: false;
259
+ enumValues: [string, ...string[]];
260
+ baseColumn: never;
261
+ identity: undefined;
262
+ generated: undefined;
263
+ }, {}, {}>;
264
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
265
+ name: "created_at";
266
+ tableName: "x402_payment_history";
267
+ dataType: "date";
268
+ columnType: "PgTimestamp";
269
+ data: Date;
270
+ driverParam: string;
271
+ notNull: true;
272
+ hasDefault: true;
273
+ isPrimaryKey: false;
274
+ isAutoincrement: false;
275
+ hasRuntimeDefault: false;
276
+ enumValues: undefined;
277
+ baseColumn: never;
278
+ identity: undefined;
279
+ generated: undefined;
280
+ }, {}, {}>;
281
+ };
282
+ dialect: "pg";
283
+ }>;
284
+ //# sourceMappingURL=paymentHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paymentHistory.d.ts","sourceRoot":"","sources":["../../src/schemas/paymentHistory.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB9B,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { pgTable, varchar, text, real, integer, timestamp, index } from "drizzle-orm/pg-core";
2
+ export const x402PaymentHistory = pgTable("x402_payment_history", {
3
+ id: varchar("id", { length: 36 }).primaryKey(),
4
+ agentId: varchar("agent_id", { length: 36 }).notNull(),
5
+ endpoint: text("endpoint").notNull(),
6
+ domain: text("domain").notNull(),
7
+ method: text("method").default("GET"),
8
+ amountUsd: real("amount_usd").notNull(),
9
+ txHash: text("tx_hash").notNull(),
10
+ network: text("network"),
11
+ payer: text("payer"),
12
+ status: text("status").notNull().default("confirmed"),
13
+ responseStatus: integer("response_status"),
14
+ responseTimeMs: integer("response_time_ms"),
15
+ qualityScore: real("quality_score"),
16
+ qualityReason: text("quality_reason"),
17
+ responsePreview: text("response_preview"),
18
+ createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
19
+ }, (table) => [
20
+ index("idx_x402_ph_agent_domain").on(table.agentId, table.domain),
21
+ index("idx_x402_ph_agent_created").on(table.agentId, table.createdAt),
22
+ index("idx_x402_ph_domain_quality").on(table.domain, table.qualityScore),
23
+ ]);
24
+ //# sourceMappingURL=paymentHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paymentHistory.js","sourceRoot":"","sources":["../../src/schemas/paymentHistory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CACvC,sBAAsB,EACtB;IACE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE;IAC9C,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACtD,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE;IACpC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACjC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;IACxB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAC1C,cAAc,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAC3C,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;IACnC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACrC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE;CAClF,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;IACjE,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACrE,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC;CACzE,CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { X402ServerService } from "./x402ServerService.js";
2
+ export { x402Gate, type X402GateResult, type X402GateOptions } from "./x402Gate.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { X402ServerService } from "./x402ServerService.js";
2
+ export { x402Gate } from "./x402Gate.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAA6C,MAAM,eAAe,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { IAgentRuntime } from "@elizaos/core";
2
+ /**
3
+ * Result of the x402 payment gate check.
4
+ */
5
+ export interface X402GateResult {
6
+ paid: boolean;
7
+ transaction?: string;
8
+ network?: string;
9
+ payer?: string;
10
+ amountUsd: number;
11
+ /** Remaining free tier calls (only set when free tier is used). */
12
+ freeRemaining?: number;
13
+ }
14
+ /**
15
+ * Options for the x402 payment gate.
16
+ */
17
+ export interface X402GateOptions {
18
+ /** Amount in USD (e.g. "0.05") */
19
+ amountUsd: string;
20
+ /** Human-readable description of the endpoint */
21
+ description?: string;
22
+ /** Full resource URL (constructed from request if not provided) */
23
+ resourceUrl?: string;
24
+ /** Enable free tier (3 calls/day per IP + cookie). Default: true in production. */
25
+ freeTierEnabled?: boolean;
26
+ }
27
+ /**
28
+ * Register a callback that fires every 100 free tier calls.
29
+ * Call this from server.ts after import.
30
+ */
31
+ export declare function onFreeTierMilestone(cb: (stats: FreeTierStats) => void): void;
32
+ /**
33
+ * Free tier usage statistics.
34
+ */
35
+ export interface FreeTierStats {
36
+ totalFreeCallsToday: number;
37
+ uniqueIPs: number;
38
+ topIPs: Array<{
39
+ ip: string;
40
+ calls: number;
41
+ }>;
42
+ }
43
+ /**
44
+ * Returns current free tier usage stats across all tracked IPs.
45
+ */
46
+ export declare function getFreeTierStats(): FreeTierStats;
47
+ export declare function x402Gate(runtime: IAgentRuntime, req: {
48
+ headers?: Record<string, string | string[] | undefined>;
49
+ url?: string;
50
+ method?: string;
51
+ }, res: {
52
+ status?: (code: number) => any;
53
+ json?: (body: any) => void;
54
+ setHeader?: (name: string, value: string) => void;
55
+ }, options: X402GateOptions): Promise<X402GateResult>;
56
+ //# sourceMappingURL=x402Gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Gate.d.ts","sourceRoot":"","sources":["../../src/server/x402Gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA0CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAE5E;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAkBhD;AA6DD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/F,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EACtH,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CAqIzB"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Convert USD to USDC atomic units (6 decimals).
3
+ */
4
+ function usdToAtomic(usd) {
5
+ const parsed = parseFloat(usd);
6
+ if (Number.isNaN(parsed) || parsed < 0) {
7
+ return "0";
8
+ }
9
+ return String(Math.round(parsed * 1_000_000));
10
+ }
11
+ /**
12
+ * x402 payment gate for ElizaOS route handlers.
13
+ *
14
+ * Checks for payment in the request. If absent, sends a 402 response.
15
+ * If present, verifies and settles the payment.
16
+ *
17
+ * Usage in a route handler:
18
+ * ```
19
+ * const gate = await x402Gate(runtime, req, { amountUsd: "0.05" });
20
+ * if (!gate.paid) return; // 402 already sent
21
+ * // Payment verified — proceed with response
22
+ * ```
23
+ */
24
+ // ── Free Tier: 5 calls/day per IP + cookie ───────────────────────────────────
25
+ const FREE_TIER_LIMIT = 5;
26
+ const freeTierMap = new Map();
27
+ /** Running total of free tier calls (resets when all IPs expire). */
28
+ let freeTierGlobalCount = 0;
29
+ /** Last milestone that triggered an alert (e.g. 100, 200, 300...). */
30
+ let lastAlertMilestone = 0;
31
+ /**
32
+ * Optional callback invoked every 100 free tier calls.
33
+ * Registered by the server to send Telegram alerts without circular imports.
34
+ */
35
+ let onMilestoneCallback = null;
36
+ /**
37
+ * Register a callback that fires every 100 free tier calls.
38
+ * Call this from server.ts after import.
39
+ */
40
+ export function onFreeTierMilestone(cb) {
41
+ onMilestoneCallback = cb;
42
+ }
43
+ // Reset daily
44
+ setInterval(() => {
45
+ const now = Date.now();
46
+ for (const [ip, entry] of freeTierMap) {
47
+ if (now >= entry.resetAt)
48
+ freeTierMap.delete(ip);
49
+ }
50
+ }, 300_000); // clean every 5 min
51
+ /**
52
+ * Returns current free tier usage stats across all tracked IPs.
53
+ */
54
+ export function getFreeTierStats() {
55
+ let totalFreeCallsToday = 0;
56
+ const entries = [];
57
+ for (const [ip, entry] of freeTierMap) {
58
+ totalFreeCallsToday += entry.count;
59
+ entries.push({ ip, calls: entry.count });
60
+ }
61
+ // Sort descending by calls, take top 20
62
+ entries.sort((a, b) => b.calls - a.calls);
63
+ const topIPs = entries.slice(0, 20);
64
+ return {
65
+ totalFreeCallsToday,
66
+ uniqueIPs: freeTierMap.size,
67
+ topIPs,
68
+ };
69
+ }
70
+ /**
71
+ * Parse the swarmx_usage cookie from the cookie header string.
72
+ * Returns the usage count from the cookie, or 0 if not present.
73
+ */
74
+ function parseCookieUsage(req) {
75
+ const headers = req.headers ?? {};
76
+ const cookieHeader = headers["cookie"];
77
+ if (!cookieHeader || typeof cookieHeader !== "string")
78
+ return 0;
79
+ const match = cookieHeader.match(/swarmx_usage=(\d+)/);
80
+ if (!match?.[1])
81
+ return 0;
82
+ const val = parseInt(match[1], 10);
83
+ return Number.isNaN(val) ? 0 : val;
84
+ }
85
+ /**
86
+ * Check free tier eligibility using MAX(cookie_count, ip_count).
87
+ * Returns remaining calls (>= 0) if allowed, or -1 if exhausted.
88
+ * When allowed, increments both counters.
89
+ */
90
+ function checkFreeTier(req) {
91
+ const headers = req.headers ?? {};
92
+ const forwarded = headers["x-forwarded-for"];
93
+ const ip = typeof forwarded === "string" ? forwarded.split(",")[0].trim() : "unknown";
94
+ const now = Date.now();
95
+ const dayMs = 86_400_000;
96
+ let entry = freeTierMap.get(ip);
97
+ if (!entry || now >= entry.resetAt) {
98
+ entry = { count: 0, resetAt: now + dayMs };
99
+ freeTierMap.set(ip, entry);
100
+ }
101
+ // Use MAX(cookie_count, ip_count) — both must be under limit
102
+ const cookieCount = parseCookieUsage(req);
103
+ const effectiveCount = Math.max(cookieCount, entry.count);
104
+ if (effectiveCount < FREE_TIER_LIMIT) {
105
+ entry.count = effectiveCount + 1;
106
+ freeTierGlobalCount++;
107
+ // Fire milestone callback every 100 free tier calls
108
+ const currentMilestone = Math.floor(freeTierGlobalCount / 100) * 100;
109
+ if (currentMilestone > 0 && currentMilestone > lastAlertMilestone) {
110
+ lastAlertMilestone = currentMilestone;
111
+ if (onMilestoneCallback) {
112
+ try {
113
+ onMilestoneCallback(getFreeTierStats());
114
+ }
115
+ catch {
116
+ // never block the request flow
117
+ }
118
+ }
119
+ }
120
+ const remaining = FREE_TIER_LIMIT - entry.count;
121
+ return remaining; // >= 0, free call allowed
122
+ }
123
+ return -1; // free tier exhausted
124
+ }
125
+ export async function x402Gate(runtime, req, res, options) {
126
+ // Step 1: Check if sell-side x402 server is configured
127
+ const serverService = runtime.getService("X402_SERVER");
128
+ if (!serverService?.isAvailable()) {
129
+ // No server configured — let request through for free (graceful degradation)
130
+ return { paid: false, amountUsd: 0 };
131
+ }
132
+ // Step 2: Look for payment signature in request headers
133
+ const server = serverService.getServer();
134
+ const headers = req.headers ?? {};
135
+ // Check for payment signature header (case-insensitive)
136
+ const paymentHeader = headers["payment-signature"] ??
137
+ headers["PAYMENT-SIGNATURE"] ??
138
+ headers["x-payment"] ??
139
+ null;
140
+ // Step 2a: Free tier — 3 calls/day per IP + cookie without payment
141
+ // Enabled by default in production. Disable with freeTierEnabled: false in tests.
142
+ const freeTierOn = options.freeTierEnabled ?? (typeof process !== "undefined" && process.env.NODE_ENV !== "test");
143
+ if (!paymentHeader && freeTierOn) {
144
+ const remaining = checkFreeTier(req);
145
+ if (remaining >= 0) {
146
+ // Set cookie and remaining-count header so clients can track usage
147
+ const newCount = FREE_TIER_LIMIT - remaining;
148
+ if (res.setHeader) {
149
+ res.setHeader("Set-Cookie", `swarmx_usage=${newCount}; Path=/; HttpOnly; SameSite=Lax; Max-Age=86400`);
150
+ res.setHeader("X-SwarmX-Free-Remaining", String(remaining));
151
+ }
152
+ return { paid: true, amountUsd: 0, freeRemaining: remaining }; // free call — no payment needed
153
+ }
154
+ }
155
+ // Step 3: No payment and free tier exhausted — send 402
156
+ if (!paymentHeader) {
157
+ // No payment — send 402 with requirements
158
+ try {
159
+ const resourceUrl = options.resourceUrl ?? req.url ?? "/unknown";
160
+ const requirements = await server.buildRequirements({
161
+ amountAtomic: usdToAtomic(options.amountUsd),
162
+ resourceUrl,
163
+ description: options.description,
164
+ });
165
+ const encoded = server.encodeRequirements(requirements);
166
+ if (res.setHeader) {
167
+ res.setHeader("PAYMENT-REQUIRED", encoded);
168
+ }
169
+ if (res.status && res.json) {
170
+ res.status(402).json({
171
+ error: "Payment required",
172
+ description: options.description,
173
+ amount: options.amountUsd,
174
+ network: serverService.getNetwork(),
175
+ payTo: serverService.getReceiveAddress(),
176
+ });
177
+ }
178
+ }
179
+ catch (err) {
180
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[x402Gate] Failed to build payment requirements");
181
+ if (res.status && res.json) {
182
+ res.status(500).json({ error: "Payment gate error" });
183
+ }
184
+ }
185
+ return { paid: false, amountUsd: 0 };
186
+ }
187
+ // Payment header present — verify and settle
188
+ try {
189
+ const accept = await server.getPaymentAccept({
190
+ amountAtomic: usdToAtomic(options.amountUsd),
191
+ resourceUrl: options.resourceUrl ?? req.url ?? "/unknown",
192
+ description: options.description,
193
+ });
194
+ const verifyResult = await server.verifyPayment(paymentHeader, accept);
195
+ if (!verifyResult.isValid && !verifyResult.valid) {
196
+ if (res.status && res.json) {
197
+ res.status(402).json({
198
+ error: "Payment verification failed",
199
+ reason: verifyResult.invalidReason ?? "Unknown",
200
+ });
201
+ }
202
+ return { paid: false, amountUsd: 0 };
203
+ }
204
+ const settleResult = await server.settlePayment(paymentHeader, accept);
205
+ if (!settleResult.success) {
206
+ if (res.status && res.json) {
207
+ res.status(402).json({
208
+ error: "Payment settlement failed",
209
+ reason: settleResult.errorReason ?? "Unknown",
210
+ });
211
+ }
212
+ return { paid: false, amountUsd: 0 };
213
+ }
214
+ const amountUsd = parseFloat(options.amountUsd);
215
+ // Record revenue
216
+ serverService.recordRevenue({
217
+ endpoint: req.url ?? "/unknown",
218
+ amountUsd,
219
+ txHash: settleResult.transaction ?? "",
220
+ network: settleResult.network ?? serverService.getNetwork(),
221
+ payer: settleResult.payer ?? "",
222
+ timestamp: Date.now(),
223
+ });
224
+ return {
225
+ paid: true,
226
+ transaction: settleResult.transaction ?? undefined,
227
+ network: settleResult.network ?? undefined,
228
+ payer: settleResult.payer ?? undefined,
229
+ amountUsd,
230
+ };
231
+ }
232
+ catch (err) {
233
+ runtime.logger.error({ error: err instanceof Error ? err.message : String(err) }, "[x402Gate] Payment verification/settlement error");
234
+ if (res.status && res.json) {
235
+ res.status(500).json({ error: "Payment processing error" });
236
+ }
237
+ return { paid: false, amountUsd: 0 };
238
+ }
239
+ }
240
+ //# sourceMappingURL=x402Gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Gate.js","sourceRoot":"","sources":["../../src/server/x402Gate.ts"],"names":[],"mappings":"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"}