agentcash 0.2.3
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/README.md +195 -0
- package/dist/cjs/run-server.cjs +112199 -0
- package/dist/esm/chunk-3MUBKDR7.js +95 -0
- package/dist/esm/chunk-3MUBKDR7.js.map +1 -0
- package/dist/esm/chunk-A2KI7TKE.js +59 -0
- package/dist/esm/chunk-A2KI7TKE.js.map +1 -0
- package/dist/esm/chunk-FYIUFEVS.js +36 -0
- package/dist/esm/chunk-FYIUFEVS.js.map +1 -0
- package/dist/esm/chunk-HIR4VH7V.js +197 -0
- package/dist/esm/chunk-HIR4VH7V.js.map +1 -0
- package/dist/esm/chunk-J3LUL7DB.js +23 -0
- package/dist/esm/chunk-J3LUL7DB.js.map +1 -0
- package/dist/esm/chunk-PBZIKECT.js +46013 -0
- package/dist/esm/chunk-PBZIKECT.js.map +1 -0
- package/dist/esm/chunk-U6HC4IE3.js +119 -0
- package/dist/esm/chunk-U6HC4IE3.js.map +1 -0
- package/dist/esm/chunk-WW65CMHP.js +826 -0
- package/dist/esm/chunk-WW65CMHP.js.map +1 -0
- package/dist/esm/chunk-XCVCGASL.js +57 -0
- package/dist/esm/chunk-XCVCGASL.js.map +1 -0
- package/dist/esm/cli-context-2MKOXVXU.js +10 -0
- package/dist/esm/cli-context-2MKOXVXU.js.map +1 -0
- package/dist/esm/commands-EOBZV2HH.js +536 -0
- package/dist/esm/commands-EOBZV2HH.js.map +1 -0
- package/dist/esm/fund-GUW4GKZT.js +37 -0
- package/dist/esm/fund-GUW4GKZT.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +249 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/install-OYN36YE4.js +720 -0
- package/dist/esm/install-OYN36YE4.js.map +1 -0
- package/dist/esm/server-BEEIW53K.js +1814 -0
- package/dist/esm/server-BEEIW53K.js.map +1 -0
- package/dist/esm/shared/operations/index.d.ts +194 -0
- package/dist/esm/shared/operations/index.js +19 -0
- package/dist/esm/shared/operations/index.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildRequest,
|
|
3
|
+
requestSchema
|
|
4
|
+
} from "./chunk-FYIUFEVS.js";
|
|
5
|
+
import {
|
|
6
|
+
checkEndpoint,
|
|
7
|
+
createFetchWithPayment,
|
|
8
|
+
discoverResources,
|
|
9
|
+
getWalletInfo,
|
|
10
|
+
safeGetPaymentSettlement,
|
|
11
|
+
submitErrorReport,
|
|
12
|
+
tokenStringToNumber
|
|
13
|
+
} from "./chunk-PBZIKECT.js";
|
|
14
|
+
import "./chunk-XCVCGASL.js";
|
|
15
|
+
import {
|
|
16
|
+
getWallet,
|
|
17
|
+
redeemInviteCode,
|
|
18
|
+
safeParseJson
|
|
19
|
+
} from "./chunk-HIR4VH7V.js";
|
|
20
|
+
import {
|
|
21
|
+
DEFAULT_NETWORK,
|
|
22
|
+
safeParseResponse
|
|
23
|
+
} from "./chunk-WW65CMHP.js";
|
|
24
|
+
import "./chunk-J3LUL7DB.js";
|
|
25
|
+
import {
|
|
26
|
+
init_esm_shims
|
|
27
|
+
} from "./chunk-A2KI7TKE.js";
|
|
28
|
+
|
|
29
|
+
// src/cli/commands/index.ts
|
|
30
|
+
init_esm_shims();
|
|
31
|
+
|
|
32
|
+
// src/cli/commands/fetch.ts
|
|
33
|
+
init_esm_shims();
|
|
34
|
+
import { randomBytes } from "crypto";
|
|
35
|
+
import { x402Client, x402HTTPClient } from "@x402/core/client";
|
|
36
|
+
import { ExactEvmScheme } from "@x402/evm/exact/client";
|
|
37
|
+
|
|
38
|
+
// src/cli/output/index.ts
|
|
39
|
+
init_esm_shims();
|
|
40
|
+
|
|
41
|
+
// src/cli/output/types.ts
|
|
42
|
+
init_esm_shims();
|
|
43
|
+
var errorCodeToExitCode = {
|
|
44
|
+
GENERAL_ERROR: 1 /* GeneralError */,
|
|
45
|
+
INSUFFICIENT_BALANCE: 2 /* InsufficientBalance */,
|
|
46
|
+
NETWORK_ERROR: 3 /* NetworkError */,
|
|
47
|
+
PAYMENT_FAILED: 4 /* PaymentFailed */,
|
|
48
|
+
INVALID_INPUT: 5 /* InvalidInput */,
|
|
49
|
+
WALLET_ERROR: 1 /* GeneralError */,
|
|
50
|
+
PARSE_ERROR: 5 /* InvalidInput */,
|
|
51
|
+
HTTP_ERROR: 3 /* NetworkError */,
|
|
52
|
+
X402_ERROR: 4 /* PaymentFailed */
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// src/cli/output/format.ts
|
|
56
|
+
init_esm_shims();
|
|
57
|
+
function isTTY() {
|
|
58
|
+
return process.stdout.isTTY ?? false;
|
|
59
|
+
}
|
|
60
|
+
function getOutputFormat(formatFlag) {
|
|
61
|
+
if (formatFlag === "json" || formatFlag === "pretty") {
|
|
62
|
+
return formatFlag;
|
|
63
|
+
}
|
|
64
|
+
return isTTY() ? "pretty" : "json";
|
|
65
|
+
}
|
|
66
|
+
function isQuiet(quietFlag) {
|
|
67
|
+
return quietFlag ?? false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// src/cli/output/response.ts
|
|
71
|
+
init_esm_shims();
|
|
72
|
+
import chalk from "chalk";
|
|
73
|
+
function successResponse(data, metadata) {
|
|
74
|
+
return {
|
|
75
|
+
success: true,
|
|
76
|
+
data,
|
|
77
|
+
...metadata ? { metadata } : {}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function errorResponse(error) {
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
error
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function fromNeverthrowError(err, codeOverride) {
|
|
87
|
+
const { error } = err;
|
|
88
|
+
const code = codeOverride ?? mapCauseToErrorCode(error.cause);
|
|
89
|
+
return errorResponse({
|
|
90
|
+
code,
|
|
91
|
+
message: error.message,
|
|
92
|
+
surface: error.surface,
|
|
93
|
+
cause: error.cause
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function mapCauseToErrorCode(cause) {
|
|
97
|
+
switch (cause) {
|
|
98
|
+
case "network":
|
|
99
|
+
return "NETWORK_ERROR";
|
|
100
|
+
case "http":
|
|
101
|
+
return "HTTP_ERROR";
|
|
102
|
+
case "parse":
|
|
103
|
+
return "PARSE_ERROR";
|
|
104
|
+
case "insufficient_balance":
|
|
105
|
+
return "INSUFFICIENT_BALANCE";
|
|
106
|
+
case "payment_failed":
|
|
107
|
+
case "payment_already_attempted":
|
|
108
|
+
return "PAYMENT_FAILED";
|
|
109
|
+
case "invalid_input":
|
|
110
|
+
case "validation":
|
|
111
|
+
return "INVALID_INPUT";
|
|
112
|
+
case "wallet":
|
|
113
|
+
case "file_not_readable":
|
|
114
|
+
return "WALLET_ERROR";
|
|
115
|
+
default:
|
|
116
|
+
return "GENERAL_ERROR";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function formatJson(response) {
|
|
120
|
+
return JSON.stringify(response, null, 2);
|
|
121
|
+
}
|
|
122
|
+
function formatPretty(response) {
|
|
123
|
+
if (response.success) {
|
|
124
|
+
const lines = [];
|
|
125
|
+
if (typeof response.data === "string") {
|
|
126
|
+
lines.push(response.data);
|
|
127
|
+
} else {
|
|
128
|
+
lines.push(JSON.stringify(response.data, null, 2));
|
|
129
|
+
}
|
|
130
|
+
if (response.metadata) {
|
|
131
|
+
lines.push("");
|
|
132
|
+
if (response.metadata.price) {
|
|
133
|
+
lines.push(chalk.dim(`Price: ${response.metadata.price}`));
|
|
134
|
+
}
|
|
135
|
+
if (response.metadata.payment) {
|
|
136
|
+
const { success, transactionHash } = response.metadata.payment;
|
|
137
|
+
lines.push(
|
|
138
|
+
chalk.dim(
|
|
139
|
+
`Payment: ${success ? chalk.green("\u2713") : chalk.red("\u2717")}${transactionHash ? ` (${transactionHash.slice(0, 10)}...)` : ""}`
|
|
140
|
+
)
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return lines.join("\n");
|
|
145
|
+
} else {
|
|
146
|
+
const { error } = response;
|
|
147
|
+
const lines = [
|
|
148
|
+
chalk.red(`Error: ${error.message}`),
|
|
149
|
+
chalk.dim(`Code: ${error.code}`)
|
|
150
|
+
];
|
|
151
|
+
if (error.surface) {
|
|
152
|
+
lines.push(chalk.dim(`Surface: ${error.surface}`));
|
|
153
|
+
}
|
|
154
|
+
if (error.cause) {
|
|
155
|
+
lines.push(chalk.dim(`Cause: ${error.cause}`));
|
|
156
|
+
}
|
|
157
|
+
return lines.join("\n");
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function outputAndExit(response, flags = {}) {
|
|
161
|
+
const format = getOutputFormat(flags.format);
|
|
162
|
+
const quiet = isQuiet(flags.quiet);
|
|
163
|
+
output(response, format, quiet);
|
|
164
|
+
const exitCode = response.success ? 0 /* Success */ : errorCodeToExitCode[response.error.code];
|
|
165
|
+
process.exit(exitCode);
|
|
166
|
+
}
|
|
167
|
+
function output(response, format = "json", quiet = false) {
|
|
168
|
+
const formatted = format === "json" ? formatJson(response) : formatPretty(response);
|
|
169
|
+
console.log(formatted);
|
|
170
|
+
if (!quiet && !response.success && format === "pretty") {
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// src/cli/commands/lib/index.ts
|
|
175
|
+
init_esm_shims();
|
|
176
|
+
|
|
177
|
+
// src/cli/commands/lib/get-wallet-or-exit.ts
|
|
178
|
+
init_esm_shims();
|
|
179
|
+
async function getWalletOrExit(flags) {
|
|
180
|
+
const walletResult = await getWallet();
|
|
181
|
+
if (walletResult.isErr()) {
|
|
182
|
+
outputAndExit(fromNeverthrowError(walletResult, "WALLET_ERROR"), flags);
|
|
183
|
+
}
|
|
184
|
+
return walletResult.value;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// src/cli/commands/lib/parse-request-input.ts
|
|
188
|
+
init_esm_shims();
|
|
189
|
+
function parseRequestInput(surface, args, flags) {
|
|
190
|
+
let parsedBody;
|
|
191
|
+
if (args.body) {
|
|
192
|
+
const bodyResult = safeParseJson(surface, args.body);
|
|
193
|
+
if (bodyResult.isErr()) {
|
|
194
|
+
outputAndExit(
|
|
195
|
+
errorResponse({
|
|
196
|
+
code: "INVALID_INPUT",
|
|
197
|
+
message: `Invalid JSON body: ${args.body}`,
|
|
198
|
+
surface,
|
|
199
|
+
cause: "invalid_json"
|
|
200
|
+
}),
|
|
201
|
+
flags
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
parsedBody = bodyResult.value;
|
|
205
|
+
}
|
|
206
|
+
let parsedHeaders;
|
|
207
|
+
if (args.headers) {
|
|
208
|
+
const headersResult = safeParseJson(surface, args.headers);
|
|
209
|
+
if (headersResult.isErr()) {
|
|
210
|
+
outputAndExit(
|
|
211
|
+
errorResponse({
|
|
212
|
+
code: "INVALID_INPUT",
|
|
213
|
+
message: `Invalid JSON headers: ${args.headers}`,
|
|
214
|
+
surface,
|
|
215
|
+
cause: "invalid_json"
|
|
216
|
+
}),
|
|
217
|
+
flags
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
const headersValue = headersResult.value;
|
|
221
|
+
if (typeof headersValue !== "object" || headersValue === null || Array.isArray(headersValue)) {
|
|
222
|
+
outputAndExit(
|
|
223
|
+
errorResponse({
|
|
224
|
+
code: "INVALID_INPUT",
|
|
225
|
+
message: "Headers must be an object",
|
|
226
|
+
surface,
|
|
227
|
+
cause: "invalid_headers"
|
|
228
|
+
}),
|
|
229
|
+
flags
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
const headers = {};
|
|
233
|
+
for (const [key, value] of Object.entries(headersValue)) {
|
|
234
|
+
if (typeof value !== "string") {
|
|
235
|
+
outputAndExit(
|
|
236
|
+
errorResponse({
|
|
237
|
+
code: "INVALID_INPUT",
|
|
238
|
+
message: `Header "${key}" must be a string, got ${typeof value}`,
|
|
239
|
+
surface,
|
|
240
|
+
cause: "invalid_headers"
|
|
241
|
+
}),
|
|
242
|
+
flags
|
|
243
|
+
);
|
|
244
|
+
}
|
|
245
|
+
headers[key] = value;
|
|
246
|
+
}
|
|
247
|
+
parsedHeaders = headers;
|
|
248
|
+
}
|
|
249
|
+
const inputResult = requestSchema.safeParse({
|
|
250
|
+
url: args.url,
|
|
251
|
+
method: args.method ?? "GET",
|
|
252
|
+
body: parsedBody,
|
|
253
|
+
headers: parsedHeaders ?? {}
|
|
254
|
+
});
|
|
255
|
+
if (!inputResult.success) {
|
|
256
|
+
outputAndExit(
|
|
257
|
+
errorResponse({
|
|
258
|
+
code: "INVALID_INPUT",
|
|
259
|
+
message: inputResult.error.message,
|
|
260
|
+
surface,
|
|
261
|
+
cause: "validation"
|
|
262
|
+
}),
|
|
263
|
+
flags
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
return inputResult.data;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// src/cli/commands/fetch.ts
|
|
270
|
+
var SURFACE = "cli:fetch";
|
|
271
|
+
async function fetchCommand(args, flags) {
|
|
272
|
+
const { account } = await getWalletOrExit(flags);
|
|
273
|
+
const sessionId = randomBytes(16).toString("hex");
|
|
274
|
+
const input = parseRequestInput(SURFACE, args, flags);
|
|
275
|
+
const coreClient = x402Client.fromConfig({
|
|
276
|
+
schemes: [
|
|
277
|
+
{ network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) }
|
|
278
|
+
]
|
|
279
|
+
});
|
|
280
|
+
const client = new x402HTTPClient(coreClient);
|
|
281
|
+
const provider = flags.provider ?? account.address;
|
|
282
|
+
const request = buildRequest({
|
|
283
|
+
input,
|
|
284
|
+
address: account.address,
|
|
285
|
+
sessionId,
|
|
286
|
+
provider
|
|
287
|
+
});
|
|
288
|
+
const fetchWithPay = createFetchWithPayment(SURFACE, client);
|
|
289
|
+
const fetchResult = await fetchWithPay(request);
|
|
290
|
+
if (fetchResult.isErr()) {
|
|
291
|
+
return outputAndExit(fromNeverthrowError(fetchResult), flags);
|
|
292
|
+
}
|
|
293
|
+
const { response, paymentPayload } = fetchResult.value;
|
|
294
|
+
if (!response.ok) {
|
|
295
|
+
const parseResult = await safeParseResponse(SURFACE, response);
|
|
296
|
+
const details = { statusCode: response.status };
|
|
297
|
+
if (parseResult.isOk()) {
|
|
298
|
+
const { type } = parseResult.value;
|
|
299
|
+
if (type === "json") {
|
|
300
|
+
details.body = parseResult.value.data;
|
|
301
|
+
} else if (type === "text") {
|
|
302
|
+
details.body = parseResult.value.data;
|
|
303
|
+
} else {
|
|
304
|
+
details.bodyType = type;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return outputAndExit(
|
|
308
|
+
errorResponse({
|
|
309
|
+
code: "HTTP_ERROR",
|
|
310
|
+
message: `HTTP ${response.status}: ${response.statusText}`,
|
|
311
|
+
surface: SURFACE,
|
|
312
|
+
cause: "http",
|
|
313
|
+
details
|
|
314
|
+
}),
|
|
315
|
+
flags
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
const parseResponseResult = await safeParseResponse(SURFACE, response);
|
|
319
|
+
if (parseResponseResult.isErr()) {
|
|
320
|
+
return outputAndExit(fromNeverthrowError(parseResponseResult), flags);
|
|
321
|
+
}
|
|
322
|
+
const settlementResult = safeGetPaymentSettlement(SURFACE, client, response);
|
|
323
|
+
const data = parseResponseResult.value.type === "json" ? parseResponseResult.value.data : parseResponseResult.value.type === "text" ? parseResponseResult.value.data : { type: parseResponseResult.value.type };
|
|
324
|
+
const metadata = settlementResult.isOk() || paymentPayload !== void 0 ? {
|
|
325
|
+
...paymentPayload !== void 0 ? {
|
|
326
|
+
price: tokenStringToNumber(
|
|
327
|
+
paymentPayload.accepted.amount
|
|
328
|
+
).toLocaleString("en-US", {
|
|
329
|
+
style: "currency",
|
|
330
|
+
currency: "USD"
|
|
331
|
+
})
|
|
332
|
+
} : {},
|
|
333
|
+
...settlementResult.isOk() ? {
|
|
334
|
+
payment: {
|
|
335
|
+
success: settlementResult.value.success,
|
|
336
|
+
transactionHash: settlementResult.value.transaction
|
|
337
|
+
}
|
|
338
|
+
} : {}
|
|
339
|
+
} : void 0;
|
|
340
|
+
outputAndExit(successResponse(data, metadata), flags);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// src/cli/commands/check.ts
|
|
344
|
+
init_esm_shims();
|
|
345
|
+
import { randomBytes as randomBytes2 } from "crypto";
|
|
346
|
+
var SURFACE2 = "cli:check";
|
|
347
|
+
async function checkCommand(args, flags) {
|
|
348
|
+
const { account } = await getWalletOrExit(flags);
|
|
349
|
+
const sessionId = randomBytes2(16).toString("hex");
|
|
350
|
+
const input = parseRequestInput(SURFACE2, args, flags);
|
|
351
|
+
const request = buildRequest({
|
|
352
|
+
input,
|
|
353
|
+
address: account.address,
|
|
354
|
+
sessionId
|
|
355
|
+
});
|
|
356
|
+
const result = await checkEndpoint(SURFACE2, request);
|
|
357
|
+
if (result.isErr()) {
|
|
358
|
+
return outputAndExit(fromNeverthrowError(result), flags);
|
|
359
|
+
}
|
|
360
|
+
const value = result.value;
|
|
361
|
+
if (value instanceof Response) {
|
|
362
|
+
const response = value;
|
|
363
|
+
const parseResult = await safeParseResponse(SURFACE2, response);
|
|
364
|
+
const details = { statusCode: response.status };
|
|
365
|
+
if (parseResult.isOk()) {
|
|
366
|
+
const { type } = parseResult.value;
|
|
367
|
+
if (type === "json") {
|
|
368
|
+
details.body = parseResult.value.data;
|
|
369
|
+
} else if (type === "text") {
|
|
370
|
+
details.body = parseResult.value.data;
|
|
371
|
+
} else {
|
|
372
|
+
details.bodyType = type;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return outputAndExit(
|
|
376
|
+
errorResponse({
|
|
377
|
+
code: "HTTP_ERROR",
|
|
378
|
+
message: `HTTP ${response.status}: ${response.statusText}`,
|
|
379
|
+
surface: SURFACE2,
|
|
380
|
+
cause: "http",
|
|
381
|
+
details
|
|
382
|
+
}),
|
|
383
|
+
flags
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
if ("requiresPayment" in value && value.requiresPayment) {
|
|
387
|
+
return outputAndExit(
|
|
388
|
+
successResponse({
|
|
389
|
+
requiresPayment: true,
|
|
390
|
+
statusCode: value.statusCode,
|
|
391
|
+
routeDetails: value.routeDetails
|
|
392
|
+
}),
|
|
393
|
+
flags
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
if ("parsedResponse" in value) {
|
|
397
|
+
const { parsedResponse } = value;
|
|
398
|
+
const data = parsedResponse.type === "json" ? parsedResponse.data : parsedResponse.type === "text" ? parsedResponse.data : { type: parsedResponse.type };
|
|
399
|
+
return outputAndExit(
|
|
400
|
+
successResponse({
|
|
401
|
+
requiresPayment: false,
|
|
402
|
+
statusCode: value.statusCode,
|
|
403
|
+
data
|
|
404
|
+
}),
|
|
405
|
+
flags
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
return outputAndExit(
|
|
409
|
+
errorResponse({
|
|
410
|
+
code: "GENERAL_ERROR",
|
|
411
|
+
message: "Unexpected response format",
|
|
412
|
+
surface: SURFACE2,
|
|
413
|
+
cause: "unknown"
|
|
414
|
+
}),
|
|
415
|
+
flags
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// src/cli/commands/discover.ts
|
|
420
|
+
init_esm_shims();
|
|
421
|
+
async function discoverCommand(args, flags) {
|
|
422
|
+
const result = await discoverResources("cli:discover", args.url);
|
|
423
|
+
if (result.isOk()) {
|
|
424
|
+
return outputAndExit(
|
|
425
|
+
successResponse({
|
|
426
|
+
found: true,
|
|
427
|
+
origin: result.value.origin,
|
|
428
|
+
source: result.value.source,
|
|
429
|
+
endpoints: result.value.endpoints,
|
|
430
|
+
...result.value.instructions ? { instructions: result.value.instructions } : {}
|
|
431
|
+
}),
|
|
432
|
+
flags
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
return outputAndExit(
|
|
436
|
+
errorResponse({
|
|
437
|
+
code: "GENERAL_ERROR",
|
|
438
|
+
message: result.error.message,
|
|
439
|
+
surface: result.error.surface,
|
|
440
|
+
cause: result.error.cause,
|
|
441
|
+
details: { origin: result.error.origin }
|
|
442
|
+
}),
|
|
443
|
+
flags
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// src/cli/commands/wallet.ts
|
|
448
|
+
init_esm_shims();
|
|
449
|
+
var SURFACE3 = "cli:wallet";
|
|
450
|
+
async function walletInfoCommand(_args, flags) {
|
|
451
|
+
const { account } = await getWalletOrExit(flags);
|
|
452
|
+
const result = await getWalletInfo(SURFACE3, account.address, flags);
|
|
453
|
+
if (result.isErr()) {
|
|
454
|
+
return outputAndExit(fromNeverthrowError(result), flags);
|
|
455
|
+
}
|
|
456
|
+
return outputAndExit(
|
|
457
|
+
successResponse({
|
|
458
|
+
address: result.value.address,
|
|
459
|
+
network: result.value.network,
|
|
460
|
+
networkName: result.value.networkName,
|
|
461
|
+
usdcBalance: result.value.usdcBalance,
|
|
462
|
+
isNewWallet: result.value.isNewWallet,
|
|
463
|
+
depositLink: result.value.depositLink,
|
|
464
|
+
...result.value.message ? { message: result.value.message } : {}
|
|
465
|
+
}),
|
|
466
|
+
flags
|
|
467
|
+
);
|
|
468
|
+
}
|
|
469
|
+
async function walletRedeemCommand(args, flags) {
|
|
470
|
+
const { account } = await getWalletOrExit(flags);
|
|
471
|
+
const result = await redeemInviteCode({
|
|
472
|
+
code: args.code,
|
|
473
|
+
dev: flags.dev,
|
|
474
|
+
address: account.address,
|
|
475
|
+
surface: SURFACE3
|
|
476
|
+
});
|
|
477
|
+
if (result.isErr()) {
|
|
478
|
+
return outputAndExit(fromNeverthrowError(result), flags);
|
|
479
|
+
}
|
|
480
|
+
return outputAndExit(
|
|
481
|
+
successResponse({
|
|
482
|
+
redeemed: true,
|
|
483
|
+
amount: `${result.value.amount} USDC`,
|
|
484
|
+
txHash: result.value.txHash
|
|
485
|
+
}),
|
|
486
|
+
flags
|
|
487
|
+
);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// src/cli/commands/report-error.ts
|
|
491
|
+
init_esm_shims();
|
|
492
|
+
var SURFACE4 = "cli:report-error";
|
|
493
|
+
async function reportErrorCommand(args, flags) {
|
|
494
|
+
const { account } = await getWalletOrExit(flags);
|
|
495
|
+
const result = await submitErrorReport(
|
|
496
|
+
SURFACE4,
|
|
497
|
+
{
|
|
498
|
+
tool: args.tool,
|
|
499
|
+
summary: args.summary,
|
|
500
|
+
errorMessage: args.errorMessage,
|
|
501
|
+
resource: args.resource,
|
|
502
|
+
stack: args.stack,
|
|
503
|
+
fullReport: args.fullReport
|
|
504
|
+
},
|
|
505
|
+
account.address,
|
|
506
|
+
flags.dev
|
|
507
|
+
);
|
|
508
|
+
if (result.isErr()) {
|
|
509
|
+
return outputAndExit(fromNeverthrowError(result), flags);
|
|
510
|
+
}
|
|
511
|
+
return outputAndExit(
|
|
512
|
+
successResponse({
|
|
513
|
+
submitted: result.value.submitted,
|
|
514
|
+
reportId: result.value.reportId,
|
|
515
|
+
message: result.value.message
|
|
516
|
+
}),
|
|
517
|
+
flags
|
|
518
|
+
);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// src/cli/commands/server.ts
|
|
522
|
+
init_esm_shims();
|
|
523
|
+
async function serverCommand(flags) {
|
|
524
|
+
const { startServer } = await import("./server-BEEIW53K.js");
|
|
525
|
+
await startServer(flags);
|
|
526
|
+
}
|
|
527
|
+
export {
|
|
528
|
+
checkCommand,
|
|
529
|
+
discoverCommand,
|
|
530
|
+
fetchCommand,
|
|
531
|
+
reportErrorCommand,
|
|
532
|
+
serverCommand,
|
|
533
|
+
walletInfoCommand,
|
|
534
|
+
walletRedeemCommand
|
|
535
|
+
};
|
|
536
|
+
//# sourceMappingURL=commands-EOBZV2HH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/index.ts","../../src/cli/commands/fetch.ts","../../src/cli/output/index.ts","../../src/cli/output/types.ts","../../src/cli/output/format.ts","../../src/cli/output/response.ts","../../src/cli/commands/lib/index.ts","../../src/cli/commands/lib/get-wallet-or-exit.ts","../../src/cli/commands/lib/parse-request-input.ts","../../src/cli/commands/check.ts","../../src/cli/commands/discover.ts","../../src/cli/commands/wallet.ts","../../src/cli/commands/report-error.ts","../../src/cli/commands/server.ts"],"sourcesContent":["export { fetchCommand } from './fetch';\nexport { checkCommand } from './check';\nexport { discoverCommand } from './discover';\nexport { walletInfoCommand, walletRedeemCommand } from './wallet';\nexport { reportErrorCommand } from './report-error';\nexport { serverCommand } from './server';\n","import { randomBytes } from 'crypto';\n\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\n\nimport {\n successResponse,\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { buildRequest } from '@/server/tools/lib/request';\nimport { DEFAULT_NETWORK } from '@/shared/networks';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { safeGetPaymentSettlement } from '@/shared/neverthrow/x402';\nimport { createFetchWithPayment } from '@/shared/operations';\nimport { getWalletOrExit, parseRequestInput } from './lib';\n\nimport type { GlobalFlags } from '@/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst SURFACE = 'cli:fetch';\n\ninterface FetchArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\nexport async function fetchCommand(\n args: FetchArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n const sessionId = randomBytes(16).toString('hex');\n\n const input = parseRequestInput(SURFACE, args, flags);\n\n // Set up x402 client\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n const client = new x402HTTPClient(coreClient);\n\n const provider = flags.provider ?? account.address;\n\n const request = buildRequest({\n input,\n address: account.address,\n sessionId,\n provider,\n });\n\n const fetchWithPay = createFetchWithPayment(SURFACE, client);\n const fetchResult = await fetchWithPay(request);\n\n if (fetchResult.isErr()) {\n return outputAndExit(fromNeverthrowError(fetchResult), flags);\n }\n\n const { response, paymentPayload } = fetchResult.value;\n\n if (!response.ok) {\n const parseResult = await safeParseResponse(SURFACE, response);\n const details: JsonObject = { statusCode: response.status };\n if (parseResult.isOk()) {\n const { type } = parseResult.value;\n if (type === 'json') {\n details.body = parseResult.value.data;\n } else if (type === 'text') {\n details.body = parseResult.value.data;\n } else {\n details.bodyType = type;\n }\n }\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: `HTTP ${response.status}: ${response.statusText}`,\n surface: SURFACE,\n cause: 'http',\n details,\n }),\n flags\n );\n }\n\n const parseResponseResult = await safeParseResponse(SURFACE, response);\n if (parseResponseResult.isErr()) {\n return outputAndExit(fromNeverthrowError(parseResponseResult), flags);\n }\n\n const settlementResult = safeGetPaymentSettlement(SURFACE, client, response);\n\n // Build response data\n const data =\n parseResponseResult.value.type === 'json'\n ? parseResponseResult.value.data\n : parseResponseResult.value.type === 'text'\n ? parseResponseResult.value.data\n : { type: parseResponseResult.value.type };\n\n // Build metadata\n const metadata =\n settlementResult.isOk() || paymentPayload !== undefined\n ? {\n ...(paymentPayload !== undefined\n ? {\n price: tokenStringToNumber(\n paymentPayload.accepted.amount\n ).toLocaleString('en-US', {\n style: 'currency',\n currency: 'USD',\n }),\n }\n : {}),\n ...(settlementResult.isOk()\n ? {\n payment: {\n success: settlementResult.value.success,\n transactionHash: settlementResult.value.transaction,\n },\n }\n : {}),\n }\n : undefined;\n\n outputAndExit(successResponse(data, metadata), flags);\n}\n","export * from './types';\nexport * from './format';\nexport * from './response';\n","import type { JsonObject } from '@/shared/neverthrow/json/types';\n\n/**\n * Exit codes for CLI commands\n * Allows agents to programmatically determine error types\n */\nexport enum ExitCode {\n Success = 0,\n GeneralError = 1,\n InsufficientBalance = 2,\n NetworkError = 3,\n PaymentFailed = 4,\n InvalidInput = 5,\n}\n\n/**\n * Error codes for structured error responses\n */\nexport type ErrorCode =\n | 'GENERAL_ERROR'\n | 'INSUFFICIENT_BALANCE'\n | 'NETWORK_ERROR'\n | 'PAYMENT_FAILED'\n | 'INVALID_INPUT'\n | 'WALLET_ERROR'\n | 'PARSE_ERROR'\n | 'HTTP_ERROR'\n | 'X402_ERROR';\n\n/**\n * Maps error codes to exit codes\n */\nexport const errorCodeToExitCode: Record<ErrorCode, ExitCode> = {\n GENERAL_ERROR: ExitCode.GeneralError,\n INSUFFICIENT_BALANCE: ExitCode.InsufficientBalance,\n NETWORK_ERROR: ExitCode.NetworkError,\n PAYMENT_FAILED: ExitCode.PaymentFailed,\n INVALID_INPUT: ExitCode.InvalidInput,\n WALLET_ERROR: ExitCode.GeneralError,\n PARSE_ERROR: ExitCode.InvalidInput,\n HTTP_ERROR: ExitCode.NetworkError,\n X402_ERROR: ExitCode.PaymentFailed,\n};\n\n/**\n * Payment metadata included in successful paid responses\n */\nexport interface PaymentMetadata {\n success: boolean;\n transactionHash?: string;\n}\n\n/**\n * Metadata included in CLI responses\n */\nexport interface ResponseMetadata {\n price?: string;\n payment?: PaymentMetadata;\n}\n\n/**\n * Successful CLI response\n */\nexport interface CliSuccessResponse {\n success: true;\n data: JsonObject | string;\n metadata?: ResponseMetadata;\n}\n\n/**\n * Error details in CLI response\n */\nexport interface CliErrorDetails {\n code: ErrorCode;\n message: string;\n surface?: string;\n cause?: string;\n details?: JsonObject;\n}\n\n/**\n * Failed CLI response\n */\nexport interface CliErrorResponse {\n success: false;\n error: CliErrorDetails;\n}\n\n/**\n * Union type for all CLI responses\n */\nexport type CliResponse = CliSuccessResponse | CliErrorResponse;\n\n/**\n * Output format options\n */\nexport type OutputFormat = 'json' | 'pretty';\n","import type { OutputFormat } from './types';\n\n/**\n * Detect if stdout is a TTY (interactive terminal)\n */\nfunction isTTY(): boolean {\n return process.stdout.isTTY ?? false;\n}\n\n/**\n * Determine output format based on flags and environment\n * - Explicit --format flag takes precedence\n * - Non-TTY (piped) defaults to json\n * - TTY (interactive) defaults to pretty\n */\nexport function getOutputFormat(formatFlag?: string): OutputFormat {\n if (formatFlag === 'json' || formatFlag === 'pretty') {\n return formatFlag;\n }\n return isTTY() ? 'pretty' : 'json';\n}\n\n/**\n * Check if quiet mode is enabled (suppress stderr)\n */\nexport function isQuiet(quietFlag?: boolean): boolean {\n return quietFlag ?? false;\n}\n","import chalk from 'chalk';\n\nimport { getOutputFormat, isQuiet } from './format';\nimport {\n ExitCode,\n errorCodeToExitCode,\n type CliErrorDetails,\n type CliErrorResponse,\n type CliResponse,\n type CliSuccessResponse,\n type ErrorCode,\n type OutputFormat,\n type ResponseMetadata,\n} from './types';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { BaseError, Err } from '@x402scan/neverthrow/types';\n\n/**\n * Output flags that can be passed to commands\n */\nexport interface OutputFlags {\n format?: string;\n quiet?: boolean;\n verbose?: boolean;\n}\n\n/**\n * Create a success response\n */\nexport function successResponse(\n data: JsonObject | string,\n metadata?: ResponseMetadata\n): CliSuccessResponse {\n return {\n success: true,\n data,\n ...(metadata ? { metadata } : {}),\n };\n}\n\n/**\n * Create an error response\n */\nexport function errorResponse(error: CliErrorDetails): CliErrorResponse {\n return {\n success: false,\n error,\n };\n}\n\n/**\n * Convert a neverthrow error to a CLI error response\n */\nexport function fromNeverthrowError(\n err: Err<unknown, BaseError<string>>,\n codeOverride?: ErrorCode\n): CliErrorResponse {\n const { error } = err;\n const code = codeOverride ?? mapCauseToErrorCode(error.cause);\n\n return errorResponse({\n code,\n message: error.message,\n surface: error.surface,\n cause: error.cause,\n });\n}\n\n/**\n * Map error cause to error code\n */\nfunction mapCauseToErrorCode(cause: string): ErrorCode {\n switch (cause) {\n case 'network':\n return 'NETWORK_ERROR';\n case 'http':\n return 'HTTP_ERROR';\n case 'parse':\n return 'PARSE_ERROR';\n case 'insufficient_balance':\n return 'INSUFFICIENT_BALANCE';\n case 'payment_failed':\n case 'payment_already_attempted':\n return 'PAYMENT_FAILED';\n case 'invalid_input':\n case 'validation':\n return 'INVALID_INPUT';\n case 'wallet':\n case 'file_not_readable':\n return 'WALLET_ERROR';\n default:\n return 'GENERAL_ERROR';\n }\n}\n\n/**\n * Format response as JSON string\n */\nfunction formatJson(response: CliResponse): string {\n return JSON.stringify(response, null, 2);\n}\n\n/**\n * Format response as pretty output for TTY\n */\nfunction formatPretty(response: CliResponse): string {\n if (response.success) {\n const lines: string[] = [];\n\n // Data\n if (typeof response.data === 'string') {\n lines.push(response.data);\n } else {\n lines.push(JSON.stringify(response.data, null, 2));\n }\n\n // Metadata\n if (response.metadata) {\n lines.push('');\n if (response.metadata.price) {\n lines.push(chalk.dim(`Price: ${response.metadata.price}`));\n }\n if (response.metadata.payment) {\n const { success, transactionHash } = response.metadata.payment;\n lines.push(\n chalk.dim(\n `Payment: ${success ? chalk.green('✓') : chalk.red('✗')}${transactionHash ? ` (${transactionHash.slice(0, 10)}...)` : ''}`\n )\n );\n }\n }\n\n return lines.join('\\n');\n } else {\n const { error } = response;\n const lines = [\n chalk.red(`Error: ${error.message}`),\n chalk.dim(`Code: ${error.code}`),\n ];\n\n if (error.surface) {\n lines.push(chalk.dim(`Surface: ${error.surface}`));\n }\n if (error.cause) {\n lines.push(chalk.dim(`Cause: ${error.cause}`));\n }\n\n return lines.join('\\n');\n }\n}\n\n/**\n * Output a response to stdout and exit with appropriate code\n */\nexport function outputAndExit(\n response: CliResponse,\n flags: OutputFlags = {}\n): never {\n const format = getOutputFormat(flags.format);\n const quiet = isQuiet(flags.quiet);\n\n output(response, format, quiet);\n\n const exitCode = response.success\n ? ExitCode.Success\n : errorCodeToExitCode[response.error.code];\n\n process.exit(exitCode);\n}\n\n/**\n * Output a response to stdout without exiting\n */\nfunction output(\n response: CliResponse,\n format: OutputFormat = 'json',\n quiet = false\n): void {\n const formatted =\n format === 'json' ? formatJson(response) : formatPretty(response);\n\n // Always output to stdout (machine-readable)\n console.log(formatted);\n\n // Optionally suppress stderr output\n if (!quiet && !response.success && format === 'pretty') {\n // Additional debug info could go to stderr\n }\n}\n","export { getWalletOrExit } from './get-wallet-or-exit';\nexport { parseRequestInput } from './parse-request-input';\n","import {\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\nimport { getWallet } from '@/shared/wallet';\n\nimport type { GlobalFlags } from '@/types';\nimport type { PrivateKeyAccount } from 'viem/accounts';\n\ninterface WalletInfo {\n account: PrivateKeyAccount;\n}\n\n/**\n * Get wallet or exit with error.\n * This function always returns a valid wallet - if getting the wallet fails,\n * it exits the process with an appropriate error.\n */\nexport async function getWalletOrExit(\n flags: GlobalFlags<OutputFlags>\n): Promise<WalletInfo> {\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n outputAndExit(fromNeverthrowError(walletResult, 'WALLET_ERROR'), flags);\n }\n\n return walletResult.value;\n}\n","import type { z } from 'zod';\n\nimport { errorResponse, outputAndExit, type OutputFlags } from '@/cli/output';\nimport { requestSchema } from '@/server/tools/lib/request';\nimport { safeParseJson } from '@/shared/neverthrow/json';\n\nimport type { GlobalFlags } from '@/types';\n\ninterface RawRequestArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\ntype RequestInput = z.infer<typeof requestSchema>;\n\n/**\n * Parse and validate CLI request arguments into a typed RequestInput.\n * Exits with error response if parsing fails.\n */\nexport function parseRequestInput(\n surface: string,\n args: RawRequestArgs,\n flags: GlobalFlags<OutputFlags>\n): RequestInput {\n // Parse body JSON if provided\n let parsedBody: unknown;\n if (args.body) {\n const bodyResult = safeParseJson(surface, args.body);\n if (bodyResult.isErr()) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Invalid JSON body: ${args.body}`,\n surface,\n cause: 'invalid_json',\n }),\n flags\n );\n }\n parsedBody = bodyResult.value;\n }\n\n // Parse headers JSON if provided\n let parsedHeaders: Record<string, string> | undefined;\n if (args.headers) {\n const headersResult = safeParseJson(surface, args.headers);\n if (headersResult.isErr()) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Invalid JSON headers: ${args.headers}`,\n surface,\n cause: 'invalid_json',\n }),\n flags\n );\n }\n\n // Validate headers is an object with string values\n const headersValue = headersResult.value;\n if (\n typeof headersValue !== 'object' ||\n headersValue === null ||\n Array.isArray(headersValue)\n ) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: 'Headers must be an object',\n surface,\n cause: 'invalid_headers',\n }),\n flags\n );\n }\n\n // Validate all values are strings\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(headersValue)) {\n if (typeof value !== 'string') {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: `Header \"${key}\" must be a string, got ${typeof value}`,\n surface,\n cause: 'invalid_headers',\n }),\n flags\n );\n }\n headers[key] = value;\n }\n parsedHeaders = headers;\n }\n\n // Validate full request input\n const inputResult = requestSchema.safeParse({\n url: args.url,\n method: args.method ?? 'GET',\n body: parsedBody,\n headers: parsedHeaders ?? {},\n });\n\n if (!inputResult.success) {\n outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: inputResult.error.message,\n surface,\n cause: 'validation',\n }),\n flags\n );\n }\n\n return inputResult.data;\n}\n","import { randomBytes } from 'crypto';\n\nimport {\n successResponse,\n errorResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { buildRequest } from '@/server/tools/lib/request';\nimport { checkEndpoint } from '@/shared/operations';\nimport { safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { getWalletOrExit, parseRequestInput } from './lib';\n\nimport type { GlobalFlags } from '@/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst SURFACE = 'cli:check';\n\ninterface CheckArgs {\n url: string;\n method?: string;\n body?: string;\n headers?: string;\n}\n\nexport async function checkCommand(\n args: CheckArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n const sessionId = randomBytes(16).toString('hex');\n\n const input = parseRequestInput(SURFACE, args, flags);\n\n const request = buildRequest({\n input,\n address: account.address,\n sessionId,\n });\n\n const result = await checkEndpoint(SURFACE, request);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n const value = result.value;\n\n // Handle Response (non-ok HTTP response)\n if (value instanceof Response) {\n const response = value;\n const parseResult = await safeParseResponse(SURFACE, response);\n const details: JsonObject = { statusCode: response.status };\n if (parseResult.isOk()) {\n const { type } = parseResult.value;\n if (type === 'json') {\n details.body = parseResult.value.data;\n } else if (type === 'text') {\n details.body = parseResult.value.data;\n } else {\n details.bodyType = type;\n }\n }\n return outputAndExit(\n errorResponse({\n code: 'HTTP_ERROR',\n message: `HTTP ${response.status}: ${response.statusText}`,\n surface: SURFACE,\n cause: 'http',\n details,\n }),\n flags\n );\n }\n\n // Handle CheckEndpointPaidResult\n if ('requiresPayment' in value && value.requiresPayment) {\n return outputAndExit(\n successResponse({\n requiresPayment: true,\n statusCode: value.statusCode,\n routeDetails: value.routeDetails,\n }),\n flags\n );\n }\n\n // Handle CheckEndpointFreeResult\n if ('parsedResponse' in value) {\n const { parsedResponse } = value;\n const data =\n parsedResponse.type === 'json'\n ? parsedResponse.data\n : parsedResponse.type === 'text'\n ? parsedResponse.data\n : { type: parsedResponse.type };\n\n return outputAndExit(\n successResponse({\n requiresPayment: false,\n statusCode: value.statusCode,\n data,\n }),\n flags\n );\n }\n\n // Fallback - shouldn't reach here\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: 'Unexpected response format',\n surface: SURFACE,\n cause: 'unknown',\n }),\n flags\n );\n}\n","import {\n successResponse,\n errorResponse,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { discoverResources } from '@/shared/operations';\n\nimport type { GlobalFlags } from '@/types';\n\ninterface DiscoverArgs {\n url: string;\n}\n\nexport async function discoverCommand(\n args: DiscoverArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const result = await discoverResources('cli:discover', args.url);\n\n if (result.isOk()) {\n return outputAndExit(\n successResponse({\n found: true,\n origin: result.value.origin,\n source: result.value.source,\n endpoints: result.value.endpoints,\n ...(result.value.instructions\n ? { instructions: result.value.instructions }\n : {}),\n }),\n flags\n );\n }\n\n // Error case\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: result.error.message,\n surface: result.error.surface,\n cause: result.error.cause,\n details: { origin: result.error.origin },\n }),\n flags\n );\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { getWalletInfo } from '@/shared/operations';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:wallet';\n\nexport async function walletInfoCommand(\n _args: object,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await getWalletInfo(SURFACE, account.address, flags);\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n address: result.value.address,\n network: result.value.network,\n networkName: result.value.networkName,\n usdcBalance: result.value.usdcBalance,\n isNewWallet: result.value.isNewWallet,\n depositLink: result.value.depositLink,\n ...(result.value.message ? { message: result.value.message } : {}),\n }),\n flags\n );\n}\n\ninterface WalletRedeemArgs {\n code: string;\n}\n\nexport async function walletRedeemCommand(\n args: WalletRedeemArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await redeemInviteCode({\n code: args.code,\n dev: flags.dev,\n address: account.address,\n surface: SURFACE,\n });\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n redeemed: true,\n amount: `${result.value.amount} USDC`,\n txHash: result.value.txHash,\n }),\n flags\n );\n}\n","import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n type OutputFlags,\n} from '@/cli/output';\n\nimport { submitErrorReport } from '@/shared/operations';\nimport { getWalletOrExit } from './lib';\n\nimport type { GlobalFlags } from '@/types';\n\nconst SURFACE = 'cli:report-error';\n\ninterface ReportErrorArgs {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\nexport async function reportErrorCommand(\n args: ReportErrorArgs,\n flags: GlobalFlags<OutputFlags>\n): Promise<void> {\n const { account } = await getWalletOrExit(flags);\n\n const result = await submitErrorReport(\n SURFACE,\n {\n tool: args.tool,\n summary: args.summary,\n errorMessage: args.errorMessage,\n resource: args.resource,\n stack: args.stack,\n fullReport: args.fullReport,\n },\n account.address,\n flags.dev\n );\n\n if (result.isErr()) {\n return outputAndExit(fromNeverthrowError(result), flags);\n }\n\n return outputAndExit(\n successResponse({\n submitted: result.value.submitted,\n reportId: result.value.reportId,\n message: result.value.message,\n }),\n flags\n );\n}\n","import type { GlobalFlags } from '@/types';\n\n/**\n * Start the MCP server\n * This is a wrapper that imports and calls the existing server implementation\n */\nexport async function serverCommand(flags: GlobalFlags): Promise<void> {\n const { startServer } = await import('@/server');\n await startServer(flags);\n}\n"],"mappings":"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","names":["randomBytes","SURFACE","randomBytes","SURFACE","SURFACE"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
promptDeposit
|
|
3
|
+
} from "./chunk-U6HC4IE3.js";
|
|
4
|
+
import {
|
|
5
|
+
getWallet
|
|
6
|
+
} from "./chunk-HIR4VH7V.js";
|
|
7
|
+
import {
|
|
8
|
+
log
|
|
9
|
+
} from "./chunk-WW65CMHP.js";
|
|
10
|
+
import "./chunk-J3LUL7DB.js";
|
|
11
|
+
import {
|
|
12
|
+
init_esm_shims
|
|
13
|
+
} from "./chunk-A2KI7TKE.js";
|
|
14
|
+
|
|
15
|
+
// src/cli/fund/index.ts
|
|
16
|
+
init_esm_shims();
|
|
17
|
+
import { intro, log as clackLog, outro } from "@clack/prompts";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
var fundMcpServer = async (flags) => {
|
|
20
|
+
intro(chalk.bold(`Fund ${chalk.hex("#2563eb")("agentcash MCP")}`));
|
|
21
|
+
const walletResult = await getWallet();
|
|
22
|
+
if (walletResult.isErr()) {
|
|
23
|
+
log.error(walletResult.error.message);
|
|
24
|
+
clackLog.error(walletResult.error.message);
|
|
25
|
+
outro(chalk.bold.red("Failed to get wallet"));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const {
|
|
29
|
+
account: { address }
|
|
30
|
+
} = walletResult.value;
|
|
31
|
+
await promptDeposit({ address, flags, surface: "fund" });
|
|
32
|
+
outro(chalk.bold.green("Your agentcash MCP server is funded!"));
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
fundMcpServer
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=fund-GUW4GKZT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/fund/index.ts"],"sourcesContent":["import type { Command } from '@/types';\nimport { intro, log as clackLog, outro } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getWallet } from '@/shared/wallet';\nimport { promptDeposit } from '@/cli/lib/deposit';\nimport { log } from '@/shared/log';\n\nexport const fundMcpServer: Command = async flags => {\n intro(chalk.bold(`Fund ${chalk.hex('#2563eb')('agentcash MCP')}`));\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(walletResult.error.message);\n clackLog.error(walletResult.error.message);\n outro(chalk.bold.red('Failed to get wallet'));\n process.exit(1);\n }\n\n const {\n account: { address },\n } = walletResult.value;\n\n await promptDeposit({ address, flags, surface: 'fund' });\n\n outro(chalk.bold.green('Your agentcash MCP server is funded!'));\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA,SAAS,OAAO,OAAO,UAAU,aAAa;AAC9C,OAAO,WAAW;AAKX,IAAM,gBAAyB,OAAM,UAAS;AACnD,QAAM,MAAM,KAAK,QAAQ,MAAM,IAAI,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC;AAEjE,QAAM,eAAe,MAAM,UAAU;AAErC,MAAI,aAAa,MAAM,GAAG;AACxB,QAAI,MAAM,aAAa,MAAM,OAAO;AACpC,aAAS,MAAM,aAAa,MAAM,OAAO;AACzC,UAAM,MAAM,KAAK,IAAI,sBAAsB,CAAC;AAC5C,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM;AAAA,IACJ,SAAS,EAAE,QAAQ;AAAA,EACrB,IAAI,aAAa;AAEjB,QAAM,cAAc,EAAE,SAAS,OAAO,SAAS,OAAO,CAAC;AAEvD,QAAM,MAAM,KAAK,MAAM,sCAAsC,CAAC;AAChE;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|