@ampersend_ai/ampersend-sdk 0.0.21 → 0.0.25

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 (109) hide show
  1. package/dist/ampersend/agent-client.d.ts +81 -0
  2. package/dist/ampersend/agent-client.d.ts.map +1 -0
  3. package/dist/ampersend/agent-client.js +104 -0
  4. package/dist/ampersend/agent-client.js.map +1 -0
  5. package/dist/ampersend/agent.d.ts +119 -0
  6. package/dist/ampersend/agent.d.ts.map +1 -0
  7. package/dist/ampersend/agent.js +99 -0
  8. package/dist/ampersend/agent.js.map +1 -0
  9. package/dist/ampersend/client.d.ts +32 -8
  10. package/dist/ampersend/client.d.ts.map +1 -1
  11. package/dist/ampersend/client.js +81 -3
  12. package/dist/ampersend/client.js.map +1 -1
  13. package/dist/ampersend/curated-agent.d.ts +117 -0
  14. package/dist/ampersend/curated-agent.d.ts.map +1 -0
  15. package/dist/ampersend/curated-agent.js +149 -0
  16. package/dist/ampersend/curated-agent.js.map +1 -0
  17. package/dist/ampersend/env.d.ts +0 -15
  18. package/dist/ampersend/env.d.ts.map +1 -1
  19. package/dist/ampersend/env.js +0 -4
  20. package/dist/ampersend/env.js.map +1 -1
  21. package/dist/ampersend/index.d.ts +4 -0
  22. package/dist/ampersend/index.d.ts.map +1 -1
  23. package/dist/ampersend/index.js +6 -0
  24. package/dist/ampersend/index.js.map +1 -1
  25. package/dist/ampersend/marketplace.d.ts +53 -0
  26. package/dist/ampersend/marketplace.d.ts.map +1 -0
  27. package/dist/ampersend/marketplace.js +65 -0
  28. package/dist/ampersend/marketplace.js.map +1 -0
  29. package/dist/ampersend/treasurer.d.ts +4 -0
  30. package/dist/ampersend/treasurer.d.ts.map +1 -1
  31. package/dist/ampersend/treasurer.js +2 -2
  32. package/dist/ampersend/treasurer.js.map +1 -1
  33. package/dist/ampersend/types.d.ts +39 -6
  34. package/dist/ampersend/types.d.ts.map +1 -1
  35. package/dist/ampersend/types.js +19 -1
  36. package/dist/ampersend/types.js.map +1 -1
  37. package/dist/cli/ampersend.js +47 -2
  38. package/dist/cli/ampersend.js.map +1 -1
  39. package/dist/cli/commands/agent.d.ts +22 -0
  40. package/dist/cli/commands/agent.d.ts.map +1 -0
  41. package/dist/cli/commands/agent.js +144 -0
  42. package/dist/cli/commands/agent.js.map +1 -0
  43. package/dist/cli/commands/card.d.ts +125 -0
  44. package/dist/cli/commands/card.d.ts.map +1 -0
  45. package/dist/cli/commands/card.js +399 -0
  46. package/dist/cli/commands/card.js.map +1 -0
  47. package/dist/cli/commands/config.d.ts.map +1 -1
  48. package/dist/cli/commands/config.js +2 -21
  49. package/dist/cli/commands/config.js.map +1 -1
  50. package/dist/cli/commands/fetch.d.ts +76 -2
  51. package/dist/cli/commands/fetch.d.ts.map +1 -1
  52. package/dist/cli/commands/fetch.js +208 -133
  53. package/dist/cli/commands/fetch.js.map +1 -1
  54. package/dist/cli/commands/fund.d.ts +3 -0
  55. package/dist/cli/commands/fund.d.ts.map +1 -0
  56. package/dist/cli/commands/fund.js +22 -0
  57. package/dist/cli/commands/fund.js.map +1 -0
  58. package/dist/cli/commands/marketplace.d.ts +22 -0
  59. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  60. package/dist/cli/commands/marketplace.js +136 -0
  61. package/dist/cli/commands/marketplace.js.map +1 -0
  62. package/dist/cli/commands/version.d.ts +3 -0
  63. package/dist/cli/commands/version.d.ts.map +1 -0
  64. package/dist/cli/commands/version.js +12 -0
  65. package/dist/cli/commands/version.js.map +1 -0
  66. package/dist/cli/config.d.ts +58 -10
  67. package/dist/cli/config.d.ts.map +1 -1
  68. package/dist/cli/config.js +110 -31
  69. package/dist/cli/config.js.map +1 -1
  70. package/dist/index.d.ts +2 -0
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +1 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/mcp/proxy/cli.js +1 -0
  75. package/dist/mcp/proxy/cli.js.map +1 -1
  76. package/dist/mcp/proxy/factory.d.ts +2 -0
  77. package/dist/mcp/proxy/factory.d.ts.map +1 -1
  78. package/dist/mcp/proxy/factory.js +10 -1
  79. package/dist/mcp/proxy/factory.js.map +1 -1
  80. package/dist/mcp/proxy/server/init.js +1 -1
  81. package/dist/mcp/proxy/server/init.js.map +1 -1
  82. package/dist/mcp/proxy/server/server.d.ts +3 -1
  83. package/dist/mcp/proxy/server/server.d.ts.map +1 -1
  84. package/dist/mcp/proxy/server/server.js +5 -2
  85. package/dist/mcp/proxy/server/server.js.map +1 -1
  86. package/dist/mcp/proxy/types.d.ts +7 -0
  87. package/dist/mcp/proxy/types.d.ts.map +1 -1
  88. package/dist/mcp/proxy/types.js.map +1 -1
  89. package/dist/version.d.ts +3 -1
  90. package/dist/version.d.ts.map +1 -1
  91. package/dist/version.js +3 -1
  92. package/dist/version.js.map +1 -1
  93. package/dist/x402/http/factory.d.ts +2 -2
  94. package/dist/x402/http/factory.d.ts.map +1 -1
  95. package/dist/x402/http/factory.js +14 -8
  96. package/dist/x402/http/factory.js.map +1 -1
  97. package/dist/x402/index.d.ts +2 -0
  98. package/dist/x402/index.d.ts.map +1 -1
  99. package/dist/x402/index.js +2 -0
  100. package/dist/x402/index.js.map +1 -1
  101. package/dist/x402/siwx.d.ts +55 -0
  102. package/dist/x402/siwx.d.ts.map +1 -0
  103. package/dist/x402/siwx.js +122 -0
  104. package/dist/x402/siwx.js.map +1 -0
  105. package/dist/x402/wallets/smart-account/cosigned.d.ts +9 -2
  106. package/dist/x402/wallets/smart-account/cosigned.d.ts.map +1 -1
  107. package/dist/x402/wallets/smart-account/cosigned.js +13 -4
  108. package/dist/x402/wallets/smart-account/cosigned.js.map +1 -1
  109. package/package.json +3 -2
@@ -0,0 +1,399 @@
1
+ import { Schema } from "effect";
2
+ import { loadCredentials, readLasoToken, storeLasoToken } from "../config.js";
3
+ import { err, ok } from "../envelope.js";
4
+ import { buildReceiptFromResponse, createPaidFetch } from "./fetch.js";
5
+ /**
6
+ * `ampersend card` — issue and read prepaid Visa cards. This wraps Laso's
7
+ * three-call flow (`/auth` → `/get-card` → `/get-card-data`) so the agent
8
+ * never sees "Laso" or a Bearer token:
9
+ *
10
+ * issue → /get-card?amount= (paid x402; returns a card_id)
11
+ * details → /get-card-data?card_id= (free on a warm token; --pay mints one)
12
+ * list → /get-card-data (same, no card_id)
13
+ *
14
+ * `issue` is the only stated-amount spend, so it takes no --pay flag. Reads
15
+ * need a Laso Bearer minted via the paid /auth call; that spend is opt-in
16
+ * behind --pay and the token is cached so warm reads are free.
17
+ *
18
+ * v1 is US virtual cards only (0% fee). Gift / push-to-card / international
19
+ * are fast-follows.
20
+ */
21
+ /** Laso's base URL. Reads/issues hit these endpoints directly via the paid-fetch path. */
22
+ const LASO_BASE_URL = "https://laso.finance";
23
+ /** Inclusive USD bounds Laso accepts for `issue`. */
24
+ const MIN_AMOUNT_USD = 5;
25
+ const MAX_AMOUNT_USD = 1000;
26
+ // --- Laso response schemas (kept here, not in ampersend/index.ts — Laso isn't
27
+ // our domain). Tolerant: we decode only the fields we surface and let Effect
28
+ // strip the rest. ---
29
+ /**
30
+ * The Bearer token block Laso returns under `auth`, on both `/auth` and
31
+ * `/get-card`. `expires_in` is the lifetime in seconds, sent as a *string*
32
+ * (e.g. "3600"); we coerce it to a number and treat it as optional (absent →
33
+ * 1 hour). The refresh token is ignored — v1 re-mints rather than refreshes.
34
+ */
35
+ const LasoAuthCredentials = Schema.Struct({
36
+ id_token: Schema.String,
37
+ expires_in: Schema.optional(Schema.NumberFromString),
38
+ });
39
+ /** `/auth` → just the Bearer block. */
40
+ const LasoAuthResponse = Schema.Struct({
41
+ auth: LasoAuthCredentials,
42
+ });
43
+ /**
44
+ * `/get-card` → the freshly ordered card, nested under `card`, still
45
+ * provisioning (`status: "pending"`). The response also embeds a free `auth`
46
+ * block (same as `/auth`), which we cache so the poll-after-issue flow is free.
47
+ * `auth` is optional so a shape change never fails the issue itself.
48
+ */
49
+ const LasoIssueResponse = Schema.Struct({
50
+ card: Schema.Struct({
51
+ card_id: Schema.String,
52
+ status: Schema.String,
53
+ usd_amount: Schema.optional(Schema.Number),
54
+ timestamp: Schema.optional(Schema.Number),
55
+ card_type: Schema.optional(Schema.String),
56
+ }),
57
+ auth: Schema.optional(LasoAuthCredentials),
58
+ });
59
+ /** One card transaction. Merchant + amount, not a secret — surfaced unmasked. */
60
+ const LasoTransaction = Schema.Struct({
61
+ amount: Schema.optional(Schema.Union(Schema.Number, Schema.String)),
62
+ date: Schema.optional(Schema.Union(Schema.String, Schema.Number)),
63
+ description: Schema.optional(Schema.String),
64
+ is_credit: Schema.optional(Schema.Boolean),
65
+ });
66
+ /**
67
+ * One card as returned by `/get-card-data`. Secrets live under `card_details`
68
+ * and only once the card is ready; expiry is split into `exp_month`/`exp_year`.
69
+ * `available_balance` (vs `usd_amount`) tells you how much has been spent.
70
+ * Tolerant: we decode only the fields we surface and let Effect strip the rest.
71
+ */
72
+ const LasoCardData = Schema.Struct({
73
+ card_id: Schema.String,
74
+ status: Schema.String,
75
+ usd_amount: Schema.optional(Schema.Number),
76
+ timestamp: Schema.optional(Schema.Number),
77
+ card_type: Schema.optional(Schema.String),
78
+ card_details: Schema.optional(Schema.Struct({
79
+ card_number: Schema.optional(Schema.String),
80
+ exp_month: Schema.optional(Schema.String),
81
+ exp_year: Schema.optional(Schema.String),
82
+ cvv: Schema.optional(Schema.String),
83
+ available_balance: Schema.optional(Schema.Number),
84
+ })),
85
+ transactions: Schema.optional(Schema.Array(LasoTransaction)),
86
+ });
87
+ /** `/get-card-data` with no `card_id` wraps the array under a `cards` key. */
88
+ const LasoCardListResponse = Schema.Struct({
89
+ cards: Schema.Array(LasoCardData),
90
+ });
91
+ const decodeAuth = Schema.decodeUnknownSync(LasoAuthResponse);
92
+ const decodeIssue = Schema.decodeUnknownSync(LasoIssueResponse);
93
+ const decodeCardData = Schema.decodeUnknownSync(LasoCardData);
94
+ const decodeCardList = Schema.decodeUnknownSync(LasoCardListResponse);
95
+ /** Default Laso token lifetime when `/auth` omits `expires_in`. */
96
+ const DEFAULT_TOKEN_TTL_SECONDS = 60 * 60;
97
+ /**
98
+ * Validate and normalize the `--amount` flag. Returns the trimmed USD string
99
+ * (Laso wants it verbatim in the query) or an error envelope. Rejects
100
+ * non-numeric, non-positive, and out-of-range values up front so we never
101
+ * spend on a request Laso would bounce.
102
+ */
103
+ function validateAmount(raw) {
104
+ if (raw == null || raw.trim() === "") {
105
+ return err("INVALID_ARGS", "--amount is required, e.g. --amount 25");
106
+ }
107
+ const value = Number(raw);
108
+ if (!Number.isFinite(value)) {
109
+ return err("INVALID_ARGS", `--amount must be a number, got "${raw}"`);
110
+ }
111
+ if (value < MIN_AMOUNT_USD || value > MAX_AMOUNT_USD) {
112
+ return err("CARD_AMOUNT_OUT_OF_RANGE", `--amount must be between $${MIN_AMOUNT_USD} and $${MAX_AMOUNT_USD} (got $${value})`);
113
+ }
114
+ return ok(raw.trim());
115
+ }
116
+ /**
117
+ * Normalize a decoded Laso card into the agent-facing view. Flattens the
118
+ * `card_details` nesting, composes `expiry` from `exp_month`/`exp_year`
119
+ * (e.g. "09" + "26" → "09/26"), surfaces `balance` (available_balance) next to
120
+ * `amount`, and converts the order `timestamp` (Unix ms) to an ISO string.
121
+ *
122
+ * `includeTransactions` is false for `list` (keep it compact) and true for
123
+ * `details`. Balance/secrets/transactions appear only on ready cards.
124
+ */
125
+ function toCardView(card, includeTransactions = false) {
126
+ const view = { card_id: card.card_id, status: card.status };
127
+ if (card.usd_amount !== undefined)
128
+ view.amount = card.usd_amount;
129
+ if (card.card_type !== undefined)
130
+ view.card_type = card.card_type;
131
+ if (card.timestamp !== undefined)
132
+ view.ordered_at = new Date(card.timestamp).toISOString();
133
+ const d = card.card_details;
134
+ if (d?.available_balance !== undefined)
135
+ view.balance = d.available_balance;
136
+ if (d?.card_number !== undefined)
137
+ view.pan = d.card_number;
138
+ if (d?.cvv !== undefined)
139
+ view.cvv = d.cvv;
140
+ if (d?.exp_month !== undefined && d.exp_year !== undefined) {
141
+ view.expiry = `${d.exp_month}/${d.exp_year}`;
142
+ }
143
+ if (includeTransactions && card.transactions !== undefined) {
144
+ view.transactions = card.transactions.map((t) => {
145
+ const tx = {};
146
+ if (t.amount !== undefined)
147
+ tx.amount = t.amount;
148
+ if (t.date !== undefined)
149
+ tx.date = t.date;
150
+ if (t.description !== undefined)
151
+ tx.description = t.description;
152
+ if (t.is_credit !== undefined)
153
+ tx.is_credit = t.is_credit;
154
+ return tx;
155
+ });
156
+ }
157
+ return view;
158
+ }
159
+ /**
160
+ * Mask a PAN to its last four digits in groups of four: e.g. `4242424242424242`
161
+ * → `•••• •••• •••• 4242`. Tolerates spaces/dashes in the input and short
162
+ * inputs (fewer than four digits are shown as-is behind a single dot group).
163
+ */
164
+ function maskPan(pan) {
165
+ const digits = pan.replace(/\D/g, "");
166
+ const last4 = digits.slice(-4);
167
+ return `•••• •••• •••• ${last4}`;
168
+ }
169
+ /**
170
+ * Apply masking to an agent-facing card view unless `reveal` is set. Only the
171
+ * two secrets — PAN and CVV — are masked; everything else (including `expiry`,
172
+ * which isn't a secret on its own) passes through. Returns a copy.
173
+ */
174
+ function maskCard(card, reveal) {
175
+ if (reveal)
176
+ return card;
177
+ return {
178
+ ...card,
179
+ ...(card.pan !== undefined ? { pan: maskPan(card.pan) } : {}),
180
+ ...(card.cvv !== undefined ? { cvv: "•••" } : {}),
181
+ };
182
+ }
183
+ /** Compute a token's expiry ISO string from `/auth`'s `expires_in` (seconds). */
184
+ function tokenExpiry(expiresInSeconds) {
185
+ const ttl = (expiresInSeconds ?? DEFAULT_TOKEN_TTL_SECONDS) * 1000;
186
+ return new Date(Date.now() + ttl).toISOString();
187
+ }
188
+ /** Print an envelope to stdout (JSON) or, in --raw mode, the inner data only. */
189
+ function emit(envelope, raw) {
190
+ if (raw) {
191
+ if (envelope.ok) {
192
+ console.log(JSON.stringify(envelope.data, null, 2));
193
+ }
194
+ else {
195
+ console.error(`Error: ${envelope.error.message}`);
196
+ process.exit(1);
197
+ }
198
+ return;
199
+ }
200
+ console.log(JSON.stringify(envelope, null, 2));
201
+ }
202
+ /** Load credentials or print the err envelope and exit 1 (caller misuse / missing config). */
203
+ function requireCredentials(raw) {
204
+ const result = loadCredentials();
205
+ if (!result.ok) {
206
+ emit(result.error, raw);
207
+ process.exit(1);
208
+ }
209
+ return result.credentials;
210
+ }
211
+ /**
212
+ * Detect Laso's US-IP region block. Laso fronts card issuance with a 451 (or a
213
+ * 403 naming the region) when the caller's IP is outside the US. We surface
214
+ * that as the domain error `CARD_REGION_BLOCKED` rather than a raw HTTP error.
215
+ */
216
+ function isRegionBlocked(status, body) {
217
+ if (status === 451)
218
+ return true;
219
+ return status === 403 && /region|country|geo|US[- ]only/i.test(body);
220
+ }
221
+ /**
222
+ * Stamp a decoded Laso `auth` block with the active identity/URL and cache it.
223
+ * Shared by the `/auth` mint (`ensureToken`) and the free token that rides
224
+ * along on `/get-card` (`executeIssue`). Returns the stored token.
225
+ */
226
+ function cacheAuthCredentials(auth, credentials) {
227
+ const token = {
228
+ idToken: auth.id_token,
229
+ expiresAt: tokenExpiry(auth.expires_in),
230
+ agentKey: credentials.agentKey,
231
+ ...(credentials.apiUrl ? { apiUrl: credentials.apiUrl } : {}),
232
+ };
233
+ storeLasoToken(token);
234
+ return token;
235
+ }
236
+ /**
237
+ * Ensure a usable Laso Bearer for reads. Returns a warm cached token with no
238
+ * spend, or — when `pay` is set — mints one via the paid `/auth` call, caches
239
+ * it, and returns it alongside the payment receipt. When the cache is cold and
240
+ * `pay` is false, returns a `TOKEN_REQUIRED` error so the agent can opt in.
241
+ */
242
+ async function ensureToken(credentials, pay) {
243
+ const cached = readLasoToken(credentials);
244
+ if (cached) {
245
+ return ok({ token: cached });
246
+ }
247
+ if (!pay) {
248
+ return err("TOKEN_REQUIRED", "Reading cards needs a Laso access token (~$0.001 to mint). Pass --pay to authorize it.");
249
+ }
250
+ // Cold cache + --pay: mint via the paid x402 /auth call.
251
+ const { fetchWithPayment, getSelected } = createPaidFetch(credentials);
252
+ const response = await fetchWithPayment(`${LASO_BASE_URL}/auth`);
253
+ const body = await response.text();
254
+ if (!response.ok) {
255
+ return err("AUTH_FAILED", `Laso /auth returned HTTP ${response.status}: ${body}`);
256
+ }
257
+ const { auth } = decodeAuth(JSON.parse(body));
258
+ const token = cacheAuthCredentials(auth, credentials);
259
+ const receipt = buildReceiptFromResponse(getSelected(), response);
260
+ return ok({ token, ...(receipt ? { receipt } : {}) });
261
+ }
262
+ /**
263
+ * `card issue --amount <usd>`: order a card. This is the stated-amount spend,
264
+ * so there is no --pay flag. Returns `{ card_id, status, payment }`; the agent
265
+ * polls `details <id>` until `status: "ready"`.
266
+ */
267
+ async function executeIssue(options) {
268
+ const amountResult = validateAmount(options.amount);
269
+ if (!amountResult.ok) {
270
+ emit(amountResult, options.raw);
271
+ process.exit(1);
272
+ }
273
+ const amount = amountResult.data;
274
+ const credentials = requireCredentials(options.raw);
275
+ const { fetchWithPayment, getSelected } = createPaidFetch(credentials);
276
+ const url = `${LASO_BASE_URL}/get-card?amount=${encodeURIComponent(amount)}`;
277
+ const response = await fetchWithPayment(url);
278
+ const body = await response.text();
279
+ if (isRegionBlocked(response.status, body)) {
280
+ emit(err("CARD_REGION_BLOCKED", "Card issuance is available from US IP addresses only."), options.raw);
281
+ return;
282
+ }
283
+ if (!response.ok) {
284
+ emit(err("CARD_ISSUE_FAILED", `Laso /get-card returned HTTP ${response.status}: ${body}`), options.raw);
285
+ return;
286
+ }
287
+ const { auth, card } = decodeIssue(JSON.parse(body));
288
+ // Cache the free token that rides along on /get-card so the agent's first
289
+ // details/list poll needs no --pay. Best-effort: absent → reads mint their own.
290
+ if (auth)
291
+ cacheAuthCredentials(auth, credentials);
292
+ const receipt = buildReceiptFromResponse(getSelected(), response);
293
+ emit(ok({
294
+ card_id: card.card_id,
295
+ status: card.status,
296
+ ...(card.usd_amount !== undefined ? { amount: card.usd_amount } : {}),
297
+ ...(card.card_type !== undefined ? { card_type: card.card_type } : {}),
298
+ ...(card.timestamp !== undefined ? { ordered_at: new Date(card.timestamp).toISOString() } : {}),
299
+ ...(receipt ? { payment: receipt } : {}),
300
+ }), options.raw);
301
+ }
302
+ /**
303
+ * `card details <id> [--pay] [--reveal]`: fetch one card's status and (once
304
+ * ready) its data. A still-provisioning card returns `ok:true` with
305
+ * `status: "pending"` and no card data — not an error.
306
+ */
307
+ async function executeDetails(id, options) {
308
+ const credentials = requireCredentials(options.raw);
309
+ const tokenResult = await ensureToken(credentials, options.pay);
310
+ if (!tokenResult.ok) {
311
+ emit(tokenResult, options.raw);
312
+ return;
313
+ }
314
+ const { receipt, token } = tokenResult.data;
315
+ const url = `${LASO_BASE_URL}/get-card-data?card_id=${encodeURIComponent(id)}`;
316
+ const response = await fetch(url, { headers: { authorization: `Bearer ${token.idToken}` } });
317
+ const body = await response.text();
318
+ if (response.status === 404) {
319
+ emit(err("CARD_NOT_FOUND", `No card with id "${id}"`), options.raw);
320
+ return;
321
+ }
322
+ if (!response.ok) {
323
+ emit(err("CARD_READ_FAILED", `Laso /get-card-data returned HTTP ${response.status}: ${body}`), options.raw);
324
+ return;
325
+ }
326
+ const card = maskCard(toCardView(decodeCardData(JSON.parse(body)), true), options.reveal);
327
+ emit(ok({ ...card, ...(receipt ? { payment: receipt } : {}) }), options.raw);
328
+ }
329
+ /**
330
+ * `card list [--pay]`: all issued cards (always masked). Same token rules as
331
+ * `details`.
332
+ */
333
+ async function executeList(options) {
334
+ const credentials = requireCredentials(options.raw);
335
+ const tokenResult = await ensureToken(credentials, options.pay);
336
+ if (!tokenResult.ok) {
337
+ emit(tokenResult, options.raw);
338
+ return;
339
+ }
340
+ const { receipt, token } = tokenResult.data;
341
+ const response = await fetch(`${LASO_BASE_URL}/get-card-data`, {
342
+ headers: { authorization: `Bearer ${token.idToken}` },
343
+ });
344
+ const body = await response.text();
345
+ if (!response.ok) {
346
+ emit(err("CARD_READ_FAILED", `Laso /get-card-data returned HTTP ${response.status}: ${body}`), options.raw);
347
+ return;
348
+ }
349
+ const cards = decodeCardList(JSON.parse(body)).cards.map((c) => maskCard(toCardView(c), false));
350
+ emit(ok({ cards, ...(receipt ? { payment: receipt } : {}) }), options.raw);
351
+ }
352
+ /** Top-level error guard: a thrown network/parse error is a remote/runtime failure, exit 0 in JSON mode. */
353
+ async function guard(raw, fn) {
354
+ try {
355
+ await fn();
356
+ }
357
+ catch (error) {
358
+ const message = error instanceof Error ? error.message : String(error);
359
+ if (raw) {
360
+ console.error(`Error: ${message}`);
361
+ process.exit(1);
362
+ }
363
+ console.log(JSON.stringify(err("CARD_ERROR", message), null, 2));
364
+ }
365
+ }
366
+ /**
367
+ * Register the `card` subcommand on a Commander program.
368
+ */
369
+ export function registerCardCommand(program) {
370
+ const card = program.command("card").description("Issue and read prepaid Visa cards");
371
+ card
372
+ .command("issue")
373
+ .description("Order a prepaid card. Spends the stated amount; returns a card_id to poll with `card details`.")
374
+ .requiredOption("--amount <usd>", `Card value in USD ($${MIN_AMOUNT_USD}–$${MAX_AMOUNT_USD})`)
375
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
376
+ .action(async (options) => {
377
+ await guard(options.raw, () => executeIssue(options));
378
+ });
379
+ card
380
+ .command("details")
381
+ .description("Show a card's status and, once ready, its data (masked unless --reveal)")
382
+ .argument("<id>", "Card id returned by `card issue`")
383
+ .option("--pay", "Authorize minting a read token (~$0.001) if none is cached", false)
384
+ .option("--reveal", "Show full PAN and CVV instead of masking", false)
385
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
386
+ .action(async (id, options) => {
387
+ await guard(options.raw, () => executeDetails(id, options));
388
+ });
389
+ card
390
+ .command("list")
391
+ .description("List all issued cards (always masked)")
392
+ .option("--pay", "Authorize minting a read token (~$0.001) if none is cached", false)
393
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
394
+ .action(async (options) => {
395
+ await guard(options.raw, () => executeList(options));
396
+ });
397
+ }
398
+ export { executeDetails, executeIssue, executeList, maskCard, maskPan, toCardView, tokenExpiry, validateAmount };
399
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../../src/cli/commands/card.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqF5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
@@ -1,4 +1,4 @@
1
- import { getStatus, setApiUrl, setConfig, setNetwork } from "../config.js";
1
+ import { getStatus, setApiUrl, setConfig } from "../config.js";
2
2
  /**
3
3
  * Register the config subcommand with set and status
4
4
  */
@@ -10,10 +10,8 @@ export function registerConfigCommand(program) {
10
10
  .argument("[secret]", "Agent key and account in format: 0xkey:::0xaccount")
11
11
  .option("--api-url <url>", "Set API URL (for non-production environments)")
12
12
  .option("--clear-api-url", "Clear API URL (revert to production default)")
13
- .option("--network <network>", "Set network (base, base-sepolia)")
14
- .option("--clear-network", "Clear network (revert to default: base)")
15
13
  .action((secret, options) => {
16
- if (!secret && !options.apiUrl && !options.clearApiUrl && !options.network && !options.clearNetwork) {
14
+ if (!secret && !options.apiUrl && !options.clearApiUrl) {
17
15
  console.log(JSON.stringify({ ok: false, error: { code: "NO_INPUT", message: "Provide a secret and/or flags. See --help." } }, null, 2));
18
16
  process.exit(1);
19
17
  return;
@@ -35,23 +33,6 @@ export function registerConfigCommand(program) {
35
33
  return;
36
34
  }
37
35
  }
38
- // Handle network
39
- if (options.clearNetwork) {
40
- const result = setNetwork(undefined);
41
- if (!result.ok) {
42
- console.log(JSON.stringify(result, null, 2));
43
- process.exit(1);
44
- return;
45
- }
46
- }
47
- else if (options.network) {
48
- const result = setNetwork(options.network);
49
- if (!result.ok) {
50
- console.log(JSON.stringify(result, null, 2));
51
- process.exit(1);
52
- return;
53
- }
54
- }
55
36
  // Handle secret
56
37
  if (secret) {
57
38
  const result = setConfig(secret);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,66 @@
1
1
  import type { Command } from "commander";
2
+ import { type ResolvedCredentials } from "../config.ts";
3
+ interface SelectedRequirements {
4
+ amount: string;
5
+ asset: string;
6
+ network: string;
7
+ payTo: string;
8
+ scheme: string;
9
+ }
10
+ /**
11
+ * A fetch that pays x402 invoices on the agent's behalf, plus a way to read
12
+ * back what it signed. `getSelected()` returns the requirements captured by
13
+ * the `onAfterPaymentCreation` hook, or undefined if no payment happened —
14
+ * the caller pairs it with the server's `payment-response` header to build a
15
+ * truthful receipt (see `buildPaymentReceipt`).
16
+ */
17
+ interface PaidFetch {
18
+ fetchWithPayment: typeof globalThis.fetch;
19
+ getSelected: () => SelectedRequirements | undefined;
20
+ }
21
+ /**
22
+ * Wire up the Ampersend paid-fetch path used by every spending command:
23
+ * `createAmpersendHttpClient` → (optional SIWX) → `wrapFetchWithPayment`,
24
+ * with the `onAfterPaymentCreation` hook capturing the signed requirements.
25
+ *
26
+ * One instance captures one payment. Callers making more than one paid
27
+ * request (e.g. `card` minting a token then ordering) build a fresh
28
+ * `createPaidFetch` per request so each capture is isolated.
29
+ *
30
+ * SIWX defaults on, matching `fetch --pay`: it satisfies auth-only routes and
31
+ * re-entry to already-paid resources via signature alone; if the server
32
+ * doesn't speak SIWX or rejects our signature, the 402 falls through to the
33
+ * payment wrapper.
34
+ */
35
+ declare function createPaidFetch(credentials: ResolvedCredentials, opts?: {
36
+ siwx: boolean;
37
+ }): PaidFetch;
2
38
  interface FetchOptions {
3
39
  method: string;
4
40
  header?: Array<string>;
5
41
  data?: string;
6
42
  inspect: boolean;
43
+ pay: boolean;
7
44
  raw: boolean;
8
45
  headers: boolean;
46
+ siwx: boolean;
47
+ }
48
+ /**
49
+ * Payment receipt returned in the response envelope when --pay actually paid.
50
+ * Amount/asset/network/payTo come from the requirements the client signed
51
+ * against; txHash/payer come from the facilitator's settle response.
52
+ *
53
+ * `asset` is the token contract address. Symbol/decimals are intentionally
54
+ * not included — agents that need them can look up `(network, asset)`.
55
+ */
56
+ interface PaymentReceipt {
57
+ amount: string;
58
+ asset: string;
59
+ network: string;
60
+ payTo: string;
61
+ scheme: string;
62
+ txHash: string;
63
+ payer?: string;
9
64
  }
10
65
  /**
11
66
  * Parse headers from CLI format "Key: Value" to Headers object
@@ -20,6 +75,22 @@ declare function headersToObject(headers: Headers): Record<string, string>;
20
75
  * x402 v2 headers (PAYMENT-REQUIRED, PAYMENT-SIGNATURE, PAYMENT-RESPONSE) are base64-encoded.
21
76
  */
22
77
  declare function decodeBase64Header(value: string): unknown;
78
+ /**
79
+ * Build a PaymentReceipt by combining the requirements the client signed
80
+ * against (truthful amount/asset) with the facilitator's settle response
81
+ * (truthful txHash/payer).
82
+ */
83
+ declare function buildPaymentReceipt(selected: SelectedRequirements, settle: {
84
+ transaction: string;
85
+ payer?: string;
86
+ }): PaymentReceipt;
87
+ /**
88
+ * Build a PaymentReceipt from a paid response, or undefined when no payment
89
+ * happened (no captured `selected`, e.g. a free/warm-cache path) or the server
90
+ * sent no settle header. Combines the signed requirements with the facilitator's
91
+ * `payment-response` settle header.
92
+ */
93
+ declare function buildReceiptFromResponse(selected: SelectedRequirements | undefined, response: Response): PaymentReceipt | undefined;
23
94
  /**
24
95
  * Build RequestInit from options, handling undefined body correctly
25
96
  */
@@ -29,7 +100,9 @@ declare function buildRequestInit(options: FetchOptions, headers: Headers): Requ
29
100
  */
30
101
  declare function runInspect(url: string, options: FetchOptions): Promise<void>;
31
102
  /**
32
- * Execute fetch with automatic x402 payment handling
103
+ * Execute fetch. Without --pay: behaves like a plain fetch, errors on 402.
104
+ * With --pay: wraps fetch with x402 payment handling and pays as authorized
105
+ * by the configured treasurer.
33
106
  */
34
107
  declare function runFetch(url: string, options: FetchOptions): Promise<void>;
35
108
  /**
@@ -40,5 +113,6 @@ declare function executeFetch(url: string, options: FetchOptions): Promise<void>
40
113
  * Register the fetch subcommand on a Commander program
41
114
  */
42
115
  export declare function registerFetchCommand(program: Command): void;
43
- export { buildRequestInit, decodeBase64Header, executeFetch, headersToObject, parseHeaders, runFetch, runInspect };
116
+ export { buildPaymentReceipt, buildReceiptFromResponse, buildRequestInit, createPaidFetch, decodeBase64Header, executeFetch, headersToObject, parseHeaders, runFetch, runInspect, };
117
+ export type { PaidFetch, PaymentReceipt, SelectedRequirements };
44
118
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOxC,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB;AAwFD;;GAEG;AACH,iBAAS,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,OAAO,CAapE;AAED;;GAEG;AACH,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMjE;AAED;;;GAGG;AACH,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAS9E;AAED;;GAEG;AACH,iBAAe,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D3E;AAwCD;;GAEG;AACH,iBAAe,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BzE;AAED;;GAEG;AACH,iBAAe,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAe7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B3D;AAED,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fetch.ts"],"names":[],"mappings":"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"}