@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.
- package/LICENSE +21 -0
- package/README.md +323 -0
- package/dist/actions/delegateToSwarm.d.ts +8 -0
- package/dist/actions/delegateToSwarm.d.ts.map +1 -0
- package/dist/actions/delegateToSwarm.js +296 -0
- package/dist/actions/delegateToSwarm.js.map +1 -0
- package/dist/actions/delegateToSwarmWithPayment.d.ts +8 -0
- package/dist/actions/delegateToSwarmWithPayment.d.ts.map +1 -0
- package/dist/actions/delegateToSwarmWithPayment.js +323 -0
- package/dist/actions/delegateToSwarmWithPayment.js.map +1 -0
- package/dist/actions/discoverServices.d.ts +3 -0
- package/dist/actions/discoverServices.d.ts.map +1 -0
- package/dist/actions/discoverServices.js +63 -0
- package/dist/actions/discoverServices.js.map +1 -0
- package/dist/actions/index.d.ts +6 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +6 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/payForService.d.ts +3 -0
- package/dist/actions/payForService.d.ts.map +1 -0
- package/dist/actions/payForService.js +115 -0
- package/dist/actions/payForService.js.map +1 -0
- package/dist/actions/runSwarmAgent.d.ts +7 -0
- package/dist/actions/runSwarmAgent.d.ts.map +1 -0
- package/dist/actions/runSwarmAgent.js +131 -0
- package/dist/actions/runSwarmAgent.js.map +1 -0
- package/dist/client/index.d.ts +512 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +469 -0
- package/dist/client/index.js.map +1 -0
- package/dist/evaluators/paymentEvaluator.d.ts +7 -0
- package/dist/evaluators/paymentEvaluator.d.ts.map +1 -0
- package/dist/evaluators/paymentEvaluator.js +104 -0
- package/dist/evaluators/paymentEvaluator.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/marketing/index.d.ts +7 -0
- package/dist/marketing/index.d.ts.map +1 -0
- package/dist/marketing/index.js +7 -0
- package/dist/marketing/index.js.map +1 -0
- package/dist/marketing/milestoneAgent.d.ts +54 -0
- package/dist/marketing/milestoneAgent.d.ts.map +1 -0
- package/dist/marketing/milestoneAgent.js +121 -0
- package/dist/marketing/milestoneAgent.js.map +1 -0
- package/dist/marketing/tweetTemplates.d.ts +32 -0
- package/dist/marketing/tweetTemplates.d.ts.map +1 -0
- package/dist/marketing/tweetTemplates.js +60 -0
- package/dist/marketing/tweetTemplates.js.map +1 -0
- package/dist/marketing/xMonitor.d.ts +51 -0
- package/dist/marketing/xMonitor.d.ts.map +1 -0
- package/dist/marketing/xMonitor.js +141 -0
- package/dist/marketing/xMonitor.js.map +1 -0
- package/dist/providers/x402Provider.d.ts +7 -0
- package/dist/providers/x402Provider.d.ts.map +1 -0
- package/dist/providers/x402Provider.js +72 -0
- package/dist/providers/x402Provider.js.map +1 -0
- package/dist/providers/x402ServerProvider.d.ts +7 -0
- package/dist/providers/x402ServerProvider.d.ts.map +1 -0
- package/dist/providers/x402ServerProvider.js +48 -0
- package/dist/providers/x402ServerProvider.js.map +1 -0
- package/dist/routes/advancedRoutes.d.ts +5 -0
- package/dist/routes/advancedRoutes.d.ts.map +1 -0
- package/dist/routes/advancedRoutes.js +869 -0
- package/dist/routes/advancedRoutes.js.map +1 -0
- package/dist/routes/batchRoutes.d.ts +13 -0
- package/dist/routes/batchRoutes.d.ts.map +1 -0
- package/dist/routes/batchRoutes.js +496 -0
- package/dist/routes/batchRoutes.js.map +1 -0
- package/dist/routes/codeAuditRoutes.d.ts +6 -0
- package/dist/routes/codeAuditRoutes.d.ts.map +1 -0
- package/dist/routes/codeAuditRoutes.js +415 -0
- package/dist/routes/codeAuditRoutes.js.map +1 -0
- package/dist/routes/contentRoutes.d.ts +5 -0
- package/dist/routes/contentRoutes.d.ts.map +1 -0
- package/dist/routes/contentRoutes.js +370 -0
- package/dist/routes/contentRoutes.js.map +1 -0
- package/dist/routes/cryptoAnalysisRoutes.d.ts +5 -0
- package/dist/routes/cryptoAnalysisRoutes.d.ts.map +1 -0
- package/dist/routes/cryptoAnalysisRoutes.js +641 -0
- package/dist/routes/cryptoAnalysisRoutes.js.map +1 -0
- package/dist/routes/cryptoRoutes.d.ts +5 -0
- package/dist/routes/cryptoRoutes.d.ts.map +1 -0
- package/dist/routes/cryptoRoutes.js +1225 -0
- package/dist/routes/cryptoRoutes.js.map +1 -0
- package/dist/routes/heliusDataRoutes.d.ts +14 -0
- package/dist/routes/heliusDataRoutes.d.ts.map +1 -0
- package/dist/routes/heliusDataRoutes.js +388 -0
- package/dist/routes/heliusDataRoutes.js.map +1 -0
- package/dist/routes/taskRoutes.d.ts +5 -0
- package/dist/routes/taskRoutes.d.ts.map +1 -0
- package/dist/routes/taskRoutes.js +574 -0
- package/dist/routes/taskRoutes.js.map +1 -0
- package/dist/routes/tradingRoutes.d.ts +5 -0
- package/dist/routes/tradingRoutes.d.ts.map +1 -0
- package/dist/routes/tradingRoutes.js +500 -0
- package/dist/routes/tradingRoutes.js.map +1 -0
- package/dist/routes/walletAnalyzerRoutes.d.ts +12 -0
- package/dist/routes/walletAnalyzerRoutes.d.ts.map +1 -0
- package/dist/routes/walletAnalyzerRoutes.js +316 -0
- package/dist/routes/walletAnalyzerRoutes.js.map +1 -0
- package/dist/routes/x402Routes.d.ts +9 -0
- package/dist/routes/x402Routes.d.ts.map +1 -0
- package/dist/routes/x402Routes.js +474 -0
- package/dist/routes/x402Routes.js.map +1 -0
- package/dist/schemas/budgetState.d.ts +250 -0
- package/dist/schemas/budgetState.d.ts.map +1 -0
- package/dist/schemas/budgetState.js +20 -0
- package/dist/schemas/budgetState.js.map +1 -0
- package/dist/schemas/endpointScores.d.ts +182 -0
- package/dist/schemas/endpointScores.d.ts.map +1 -0
- package/dist/schemas/endpointScores.js +17 -0
- package/dist/schemas/endpointScores.js.map +1 -0
- package/dist/schemas/index.d.ts +4 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +4 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/paymentHistory.d.ts +284 -0
- package/dist/schemas/paymentHistory.d.ts.map +1 -0
- package/dist/schemas/paymentHistory.js +24 -0
- package/dist/schemas/paymentHistory.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/x402Gate.d.ts +56 -0
- package/dist/server/x402Gate.d.ts.map +1 -0
- package/dist/server/x402Gate.js +240 -0
- package/dist/server/x402Gate.js.map +1 -0
- package/dist/server/x402ServerService.d.ts +30 -0
- package/dist/server/x402ServerService.d.ts.map +1 -0
- package/dist/server/x402ServerService.js +79 -0
- package/dist/server/x402ServerService.js.map +1 -0
- package/dist/services/paymentMemoryService.d.ts +73 -0
- package/dist/services/paymentMemoryService.d.ts.map +1 -0
- package/dist/services/paymentMemoryService.js +247 -0
- package/dist/services/paymentMemoryService.js.map +1 -0
- package/dist/services/swarmsService.d.ts +66 -0
- package/dist/services/swarmsService.d.ts.map +1 -0
- package/dist/services/swarmsService.js +102 -0
- package/dist/services/swarmsService.js.map +1 -0
- package/dist/services/x402WalletService.d.ts +57 -0
- package/dist/services/x402WalletService.d.ts.map +1 -0
- package/dist/services/x402WalletService.js +258 -0
- package/dist/services/x402WalletService.js.map +1 -0
- package/dist/templates/index.d.ts +24 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +51 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/swarmTemplates.d.ts +22 -0
- package/dist/templates/swarmTemplates.d.ts.map +1 -0
- package/dist/templates/swarmTemplates.js +225 -0
- package/dist/templates/swarmTemplates.js.map +1 -0
- package/dist/types.d.ts +197 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cache.d.ts +17 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +32 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/llm.d.ts +16 -0
- package/dist/utils/llm.d.ts.map +1 -0
- package/dist/utils/llm.js +32 -0
- package/dist/utils/llm.js.map +1 -0
- package/dist/utils/reportStore.d.ts +45 -0
- package/dist/utils/reportStore.d.ts.map +1 -0
- package/dist/utils/reportStore.js +164 -0
- package/dist/utils/reportStore.js.map +1 -0
- package/dist/utils/taskQueue.d.ts +54 -0
- package/dist/utils/taskQueue.d.ts.map +1 -0
- package/dist/utils/taskQueue.js +124 -0
- package/dist/utils/taskQueue.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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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"}
|