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.
Files changed (37) hide show
  1. package/README.md +195 -0
  2. package/dist/cjs/run-server.cjs +112199 -0
  3. package/dist/esm/chunk-3MUBKDR7.js +95 -0
  4. package/dist/esm/chunk-3MUBKDR7.js.map +1 -0
  5. package/dist/esm/chunk-A2KI7TKE.js +59 -0
  6. package/dist/esm/chunk-A2KI7TKE.js.map +1 -0
  7. package/dist/esm/chunk-FYIUFEVS.js +36 -0
  8. package/dist/esm/chunk-FYIUFEVS.js.map +1 -0
  9. package/dist/esm/chunk-HIR4VH7V.js +197 -0
  10. package/dist/esm/chunk-HIR4VH7V.js.map +1 -0
  11. package/dist/esm/chunk-J3LUL7DB.js +23 -0
  12. package/dist/esm/chunk-J3LUL7DB.js.map +1 -0
  13. package/dist/esm/chunk-PBZIKECT.js +46013 -0
  14. package/dist/esm/chunk-PBZIKECT.js.map +1 -0
  15. package/dist/esm/chunk-U6HC4IE3.js +119 -0
  16. package/dist/esm/chunk-U6HC4IE3.js.map +1 -0
  17. package/dist/esm/chunk-WW65CMHP.js +826 -0
  18. package/dist/esm/chunk-WW65CMHP.js.map +1 -0
  19. package/dist/esm/chunk-XCVCGASL.js +57 -0
  20. package/dist/esm/chunk-XCVCGASL.js.map +1 -0
  21. package/dist/esm/cli-context-2MKOXVXU.js +10 -0
  22. package/dist/esm/cli-context-2MKOXVXU.js.map +1 -0
  23. package/dist/esm/commands-EOBZV2HH.js +536 -0
  24. package/dist/esm/commands-EOBZV2HH.js.map +1 -0
  25. package/dist/esm/fund-GUW4GKZT.js +37 -0
  26. package/dist/esm/fund-GUW4GKZT.js.map +1 -0
  27. package/dist/esm/index.d.ts +1 -0
  28. package/dist/esm/index.js +249 -0
  29. package/dist/esm/index.js.map +1 -0
  30. package/dist/esm/install-OYN36YE4.js +720 -0
  31. package/dist/esm/install-OYN36YE4.js.map +1 -0
  32. package/dist/esm/server-BEEIW53K.js +1814 -0
  33. package/dist/esm/server-BEEIW53K.js.map +1 -0
  34. package/dist/esm/shared/operations/index.d.ts +194 -0
  35. package/dist/esm/shared/operations/index.js +19 -0
  36. package/dist/esm/shared/operations/index.js.map +1 -0
  37. 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