agentcard 0.0.20 → 0.0.21-alpha.1
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/dist/bin/agentcard.js +0 -1
- package/dist/src/commands/balance.js +0 -1
- package/dist/src/commands/cards/details.js +0 -1
- package/dist/src/commands/cards/list.js +1 -2
- package/dist/src/commands/limit.js +49 -0
- package/dist/src/commands/logout.js +0 -1
- package/dist/src/commands/request/get.js +101 -0
- package/dist/src/commands/request/new.js +79 -0
- package/dist/src/commands/setup.js +146 -0
- package/dist/src/commands/signup.js +21 -18
- package/dist/src/commands/support.js +0 -1
- package/dist/src/commands/track/purchase.js +0 -1
- package/dist/src/commands/whoami.js +0 -1
- package/dist/src/index.js +47 -26
- package/dist/src/lib/api.js +6 -1
- package/dist/src/lib/config.js +0 -1
- package/dist/src/lib/prompt.js +0 -1
- package/dist/src/lib/update-check.js +21 -3
- package/package.json +6 -6
- package/dist/bin/agentcard.d.ts +0 -2
- package/dist/bin/agentcard.js.map +0 -1
- package/dist/src/commands/balance.d.ts +0 -1
- package/dist/src/commands/balance.js.map +0 -1
- package/dist/src/commands/cards/create.d.ts +0 -1
- package/dist/src/commands/cards/create.js +0 -110
- package/dist/src/commands/cards/create.js.map +0 -1
- package/dist/src/commands/cards/details.d.ts +0 -9
- package/dist/src/commands/cards/details.js.map +0 -1
- package/dist/src/commands/cards/list.d.ts +0 -1
- package/dist/src/commands/cards/list.js.map +0 -1
- package/dist/src/commands/cards/refund.d.ts +0 -1
- package/dist/src/commands/cards/refund.js +0 -100
- package/dist/src/commands/cards/refund.js.map +0 -1
- package/dist/src/commands/logout.d.ts +0 -1
- package/dist/src/commands/logout.js.map +0 -1
- package/dist/src/commands/signup.d.ts +0 -3
- package/dist/src/commands/signup.js.map +0 -1
- package/dist/src/commands/support.d.ts +0 -6
- package/dist/src/commands/support.js.map +0 -1
- package/dist/src/commands/track/purchase.d.ts +0 -8
- package/dist/src/commands/track/purchase.js.map +0 -1
- package/dist/src/commands/whoami.d.ts +0 -1
- package/dist/src/commands/whoami.js.map +0 -1
- package/dist/src/index.d.ts +0 -3
- package/dist/src/index.js.map +0 -1
- package/dist/src/lib/api.d.ts +0 -6
- package/dist/src/lib/api.js.map +0 -1
- package/dist/src/lib/config.d.ts +0 -8
- package/dist/src/lib/config.js.map +0 -1
- package/dist/src/lib/prompt.d.ts +0 -2
- package/dist/src/lib/prompt.js.map +0 -1
- package/dist/src/lib/update-check.d.ts +0 -2
- package/dist/src/lib/update-check.js.map +0 -1
package/dist/bin/agentcard.js
CHANGED
|
@@ -13,7 +13,7 @@ export async function listCards() {
|
|
|
13
13
|
process.exit(1);
|
|
14
14
|
}
|
|
15
15
|
if (cards.length === 0 && requests.length === 0) {
|
|
16
|
-
console.log(chalk.yellow('No cards yet. Run `agentcard
|
|
16
|
+
console.log(chalk.yellow('No cards yet. Run `agentcard request new --amount <dollars>` to issue one.'));
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
if (cards.length > 0) {
|
|
@@ -45,4 +45,3 @@ export async function listCards() {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import { get, post } from "../lib/api.js";
|
|
4
|
+
function formatDollars(cents) {
|
|
5
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
6
|
+
}
|
|
7
|
+
function printLimit(res) {
|
|
8
|
+
console.log("");
|
|
9
|
+
console.log(chalk.bold(" Spend Limit"));
|
|
10
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
11
|
+
console.log(` Limit: ${chalk.white(formatDollars(res.spendLimitCents))}`);
|
|
12
|
+
console.log(` Spent: ${chalk.white(formatDollars(res.spentCents))}`);
|
|
13
|
+
console.log(` Remaining: ${chalk.green(formatDollars(res.remainingCents))}`);
|
|
14
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
15
|
+
console.log("");
|
|
16
|
+
}
|
|
17
|
+
export async function limit(opts) {
|
|
18
|
+
if (opts.amount === undefined) {
|
|
19
|
+
const spinner = ora("Fetching spend limit...").start();
|
|
20
|
+
let res;
|
|
21
|
+
try {
|
|
22
|
+
res = await get("/api/limits");
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
spinner.fail(`Failed to fetch limit: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
spinner.stop();
|
|
29
|
+
printLimit(res);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const dollars = Number(opts.amount);
|
|
33
|
+
if (!Number.isFinite(dollars) || dollars <= 0) {
|
|
34
|
+
console.error(chalk.red("Amount must be a positive number of dollars."));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const amountCents = Math.round(dollars * 100);
|
|
38
|
+
const spinner = ora(`Updating limit to ${formatDollars(amountCents)}...`).start();
|
|
39
|
+
let res;
|
|
40
|
+
try {
|
|
41
|
+
res = await post("/api/limits", { amountCents });
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
spinner.fail(`Failed to update limit: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
spinner.succeed(chalk.green(`Spend limit updated to ${formatDollars(res.spendLimitCents)}.`));
|
|
48
|
+
printLimit(res);
|
|
49
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import { get } from "../../lib/api.js";
|
|
4
|
+
import { printCardDetails } from "../cards/details.js";
|
|
5
|
+
function formatDollars(cents) {
|
|
6
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
7
|
+
}
|
|
8
|
+
function colorStatus(status) {
|
|
9
|
+
switch (status) {
|
|
10
|
+
case "issued":
|
|
11
|
+
return chalk.green(status);
|
|
12
|
+
case "pending":
|
|
13
|
+
case "charged":
|
|
14
|
+
return chalk.yellow(status);
|
|
15
|
+
case "expired":
|
|
16
|
+
return chalk.dim(status);
|
|
17
|
+
case "failed":
|
|
18
|
+
return chalk.red(status);
|
|
19
|
+
default:
|
|
20
|
+
return status;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function printRequestMeta(req) {
|
|
24
|
+
console.log("");
|
|
25
|
+
console.log(chalk.bold(" Request"));
|
|
26
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
27
|
+
console.log(` ID: ${chalk.white(req.id)}`);
|
|
28
|
+
console.log(` Amount: ${chalk.white(formatDollars(req.amountCents))}`);
|
|
29
|
+
console.log(` Status: ${colorStatus(req.status)}`);
|
|
30
|
+
console.log(` Created: ${chalk.white(new Date(req.createdAt).toLocaleString())}`);
|
|
31
|
+
console.log(` Expires: ${chalk.white(new Date(req.expiresAt).toLocaleString())}`);
|
|
32
|
+
if (req.issuedAt) {
|
|
33
|
+
console.log(` Issued: ${chalk.white(new Date(req.issuedAt).toLocaleString())}`);
|
|
34
|
+
}
|
|
35
|
+
if (req.last4) {
|
|
36
|
+
console.log(` Last 4: ${chalk.white(req.last4)}`);
|
|
37
|
+
}
|
|
38
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
39
|
+
}
|
|
40
|
+
export async function requestGet(id) {
|
|
41
|
+
if (id) {
|
|
42
|
+
const spinner = ora(`Fetching request ${id}...`).start();
|
|
43
|
+
let req;
|
|
44
|
+
try {
|
|
45
|
+
req = await get(`/api/spend-requests/${id}`);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail(`Failed to fetch request: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
spinner.stop();
|
|
52
|
+
printRequestMeta(req);
|
|
53
|
+
if (req.status === "issued" &&
|
|
54
|
+
req.pan &&
|
|
55
|
+
req.cvv &&
|
|
56
|
+
req.expiryMonth !== undefined &&
|
|
57
|
+
req.expiryYear !== undefined) {
|
|
58
|
+
printCardDetails({
|
|
59
|
+
pan: req.pan,
|
|
60
|
+
cvv: req.cvv,
|
|
61
|
+
expiryMonth: req.expiryMonth,
|
|
62
|
+
expiryYear: req.expiryYear,
|
|
63
|
+
amountCents: req.amountCents,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log("");
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const spinner = ora("Fetching requests...").start();
|
|
72
|
+
let res;
|
|
73
|
+
try {
|
|
74
|
+
res = await get("/api/spend-requests");
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
spinner.fail(`Failed to fetch requests: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
spinner.stop();
|
|
81
|
+
const requests = res.requests ?? [];
|
|
82
|
+
if (requests.length === 0) {
|
|
83
|
+
console.log(chalk.yellow("No card requests yet. Run `agentcard request new --amount <dollars>` to issue one."));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const idWidth = Math.max(2, ...requests.map((r) => r.id.length)) + 2;
|
|
87
|
+
const header = `${"ID".padEnd(idWidth)} ${"Amount".padEnd(10)} ${"Status".padEnd(10)} ${"Created".padEnd(22)} Expires`;
|
|
88
|
+
console.log(chalk.bold(header));
|
|
89
|
+
console.log("-".repeat(header.length));
|
|
90
|
+
for (const r of requests) {
|
|
91
|
+
const amount = formatDollars(r.amountCents);
|
|
92
|
+
const created = new Date(r.createdAt).toLocaleString();
|
|
93
|
+
const expires = new Date(r.expiresAt).toLocaleString();
|
|
94
|
+
const status = colorStatus(r.status);
|
|
95
|
+
// chalk colors add invisible chars; pad on the raw status width.
|
|
96
|
+
const rawStatus = r.status;
|
|
97
|
+
const statusPadded = status + " ".repeat(Math.max(0, 10 - rawStatus.length));
|
|
98
|
+
console.log(`${r.id.padEnd(idWidth)} ${amount.padEnd(10)} ${statusPadded} ${created.padEnd(22)} ${expires}`);
|
|
99
|
+
}
|
|
100
|
+
console.log(chalk.dim("\nRun `agentcard request get <id>` to view a single request's details."));
|
|
101
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import inquirer from "inquirer";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import { post } from "../../lib/api.js";
|
|
5
|
+
import { printCardDetails } from "../cards/details.js";
|
|
6
|
+
const MAX_DOLLARS = 75;
|
|
7
|
+
function formatDollars(cents) {
|
|
8
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
9
|
+
}
|
|
10
|
+
export async function requestNew(amount) {
|
|
11
|
+
let raw = amount?.trim();
|
|
12
|
+
if (!raw) {
|
|
13
|
+
if (process.stdin.isTTY !== true) {
|
|
14
|
+
console.error(chalk.red("Amount is required. Pass `--amount <dollars>`."));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const { value } = await inquirer.prompt([
|
|
18
|
+
{
|
|
19
|
+
type: "input",
|
|
20
|
+
name: "value",
|
|
21
|
+
message: `Amount (dollars, max $${MAX_DOLLARS}):`,
|
|
22
|
+
validate: (v) => {
|
|
23
|
+
const t = v.trim();
|
|
24
|
+
if (!/^\d+$/.test(t))
|
|
25
|
+
return "Enter a positive integer";
|
|
26
|
+
const n = Number(t);
|
|
27
|
+
if (n <= 0)
|
|
28
|
+
return "Must be > 0";
|
|
29
|
+
if (n > MAX_DOLLARS)
|
|
30
|
+
return `Max $${MAX_DOLLARS} per card during beta`;
|
|
31
|
+
return true;
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
]);
|
|
35
|
+
raw = value.trim();
|
|
36
|
+
}
|
|
37
|
+
if (!/^\d+$/.test(raw)) {
|
|
38
|
+
console.error(chalk.red("Amount must be a positive integer number of dollars."));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const dollars = Number(raw);
|
|
42
|
+
if (!Number.isFinite(dollars) || dollars <= 0) {
|
|
43
|
+
console.error(chalk.red("Amount must be a positive integer number of dollars."));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
if (dollars > MAX_DOLLARS) {
|
|
47
|
+
console.error(chalk.red(`Amount is capped at $${MAX_DOLLARS} per card during beta.`));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
const amountCents = dollars * 100;
|
|
51
|
+
const spinner = ora(`Requesting a ${formatDollars(amountCents)} single-use card...`).start();
|
|
52
|
+
let res;
|
|
53
|
+
try {
|
|
54
|
+
res = await post("/api/spend-requests", {
|
|
55
|
+
amountCents,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
spinner.fail(`Failed to issue card: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
spinner.succeed(chalk.green("Card issued."));
|
|
63
|
+
const expiresLocal = new Date(res.expiresAt).toLocaleString();
|
|
64
|
+
console.log("");
|
|
65
|
+
console.log(chalk.bold(" Request"));
|
|
66
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
67
|
+
console.log(` ID: ${chalk.white(res.id)}`);
|
|
68
|
+
console.log(` Amount: ${chalk.green(formatDollars(res.amountCents))}`);
|
|
69
|
+
console.log(` Expires: ${chalk.white(expiresLocal)}`);
|
|
70
|
+
console.log(chalk.dim(" ────────────────────────────"));
|
|
71
|
+
printCardDetails({
|
|
72
|
+
pan: res.pan,
|
|
73
|
+
cvv: res.cvv,
|
|
74
|
+
expiryMonth: res.expiryMonth,
|
|
75
|
+
expiryYear: res.expiryYear,
|
|
76
|
+
amountCents: res.amountCents,
|
|
77
|
+
});
|
|
78
|
+
console.log(chalk.dim("We placed a hold on your payment method for this amount; it will only be charged if the card is used. Unused holds release within 7 days."));
|
|
79
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import open from "open";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
import { del, get, patch, post } from "../lib/api.js";
|
|
6
|
+
const POLL_INTERVAL = 2000;
|
|
7
|
+
const PM_TIMEOUT = 5 * 60 * 1000;
|
|
8
|
+
const E164 = /^\+[1-9]\d{1,14}$/;
|
|
9
|
+
function renderStatus(me) {
|
|
10
|
+
const line = (label, value, masked = false) => {
|
|
11
|
+
const v = value ? (masked ? chalk.dim(value) : value) : chalk.yellow("(missing)");
|
|
12
|
+
return ` ${chalk.bold(label.padEnd(10))} ${v}`;
|
|
13
|
+
};
|
|
14
|
+
const pm = me.paymentMethod;
|
|
15
|
+
const pmStr = pm
|
|
16
|
+
? `${pm.brand.charAt(0).toUpperCase() + pm.brand.slice(1)} ending in ${pm.last4}`
|
|
17
|
+
: null;
|
|
18
|
+
console.log(chalk.bold("\n Profile"));
|
|
19
|
+
console.log(" " + "─".repeat(40));
|
|
20
|
+
console.log(line("Email:", me.email));
|
|
21
|
+
console.log(line("Name:", me.firstName && me.lastName ? `${me.firstName} ${me.lastName}` : null));
|
|
22
|
+
console.log(line("Phone:", me.phoneNumber));
|
|
23
|
+
console.log(line("Payment:", pmStr));
|
|
24
|
+
console.log(" " + "─".repeat(40) + "\n");
|
|
25
|
+
}
|
|
26
|
+
async function promptIfMissing(fieldLabel, current, validator, interactive) {
|
|
27
|
+
if (current)
|
|
28
|
+
return current;
|
|
29
|
+
if (!interactive)
|
|
30
|
+
return null;
|
|
31
|
+
const { value } = await inquirer.prompt([
|
|
32
|
+
{
|
|
33
|
+
type: "input",
|
|
34
|
+
name: "value",
|
|
35
|
+
message: `${fieldLabel}:`,
|
|
36
|
+
validate: validator,
|
|
37
|
+
},
|
|
38
|
+
]);
|
|
39
|
+
return value.trim();
|
|
40
|
+
}
|
|
41
|
+
async function setupPaymentMethod() {
|
|
42
|
+
const spinner = ora("Creating Stripe setup session...").start();
|
|
43
|
+
let res;
|
|
44
|
+
try {
|
|
45
|
+
res = await post("/api/payment-methods");
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail(`Failed to start payment setup: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
spinner.stop();
|
|
52
|
+
console.log(`Setup URL: ${res.url}`);
|
|
53
|
+
console.log(chalk.blue("Opening browser to add payment method..."));
|
|
54
|
+
await open(res.url);
|
|
55
|
+
const pollSpinner = ora("Waiting for payment method...").start();
|
|
56
|
+
const deadline = Date.now() + PM_TIMEOUT;
|
|
57
|
+
while (Date.now() < deadline) {
|
|
58
|
+
await new Promise((r) => setTimeout(r, POLL_INTERVAL));
|
|
59
|
+
try {
|
|
60
|
+
const me = await get("/api/me");
|
|
61
|
+
if (me.paymentMethod) {
|
|
62
|
+
const brand = me.paymentMethod.brand.charAt(0).toUpperCase() +
|
|
63
|
+
me.paymentMethod.brand.slice(1);
|
|
64
|
+
pollSpinner.succeed(chalk.green(`Payment method saved: ${brand} ending in ${me.paymentMethod.last4}.`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// keep polling
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
pollSpinner.fail("Timed out waiting for payment method. Re-run `agentcard setup` to retry.");
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
export async function setup(opts) {
|
|
76
|
+
const interactive = process.stdin.isTTY === true;
|
|
77
|
+
if (opts.reset) {
|
|
78
|
+
const spinner = ora("Resetting profile...").start();
|
|
79
|
+
try {
|
|
80
|
+
await del("/api/me");
|
|
81
|
+
spinner.succeed("Profile cleared. Starting fresh.");
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
spinner.fail(`Reset failed: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
let me;
|
|
89
|
+
try {
|
|
90
|
+
me = await get("/api/me");
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.error(chalk.red(`Failed to load profile: ${err instanceof Error ? err.message : err}`));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
renderStatus(me);
|
|
97
|
+
const noFlagsGiven = !opts.firstName && !opts.lastName && !opts.phone;
|
|
98
|
+
const fullyConfigured = !!me.firstName && !!me.lastName && !!me.phoneNumber && !!me.paymentMethod;
|
|
99
|
+
if (fullyConfigured && noFlagsGiven && !opts.reset) {
|
|
100
|
+
console.log(chalk.green(`You're all set. Spend limit: $${(me.spendLimitCents / 100).toFixed(2)}.`));
|
|
101
|
+
console.log(chalk.dim("Run `agentcard request new --amount <dollars>` to issue a card, `agentcard limit --amount <dollars>` to change your limit, or `agentcard setup --reset` to clear your profile."));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Collect first name, last name, phone
|
|
105
|
+
const first = (opts.firstName ?? "").trim() ||
|
|
106
|
+
(await promptIfMissing("First name", me.firstName, (v) => v.trim().length > 0 || "Required", interactive));
|
|
107
|
+
const last = (opts.lastName ?? "").trim() ||
|
|
108
|
+
(await promptIfMissing("Last name", me.lastName, (v) => v.trim().length > 0 || "Required", interactive));
|
|
109
|
+
const phone = (opts.phone ?? "").trim() ||
|
|
110
|
+
(await promptIfMissing("Phone (include country code, e.g. +14155551234)", me.phoneNumber, (v) => E164.test(v.trim()) ||
|
|
111
|
+
"Include the country code with a + prefix, e.g. +14155551234", interactive));
|
|
112
|
+
const missingNow = [];
|
|
113
|
+
if (!first)
|
|
114
|
+
missingNow.push("--first-name");
|
|
115
|
+
if (!last)
|
|
116
|
+
missingNow.push("--last-name");
|
|
117
|
+
if (!phone)
|
|
118
|
+
missingNow.push("--phone");
|
|
119
|
+
if (missingNow.length > 0) {
|
|
120
|
+
console.error(chalk.red(`Missing required fields. Run interactively, or pass: ${missingNow.join(" ")}`));
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
if (first !== me.firstName || last !== me.lastName || phone !== me.phoneNumber) {
|
|
124
|
+
const saving = ora("Saving profile...").start();
|
|
125
|
+
try {
|
|
126
|
+
const updated = await patch("/api/me", {
|
|
127
|
+
firstName: first,
|
|
128
|
+
lastName: last,
|
|
129
|
+
phoneNumber: phone,
|
|
130
|
+
});
|
|
131
|
+
me = updated;
|
|
132
|
+
saving.succeed(chalk.green("Profile saved."));
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
saving.fail(`Failed to save profile: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!me.paymentMethod) {
|
|
140
|
+
console.log(chalk.bold("\nPayment method"));
|
|
141
|
+
await setupPaymentMethod();
|
|
142
|
+
}
|
|
143
|
+
console.log("");
|
|
144
|
+
console.log(chalk.green(`Setup complete. Spend limit: $${(me.spendLimitCents / 100).toFixed(2)}.`));
|
|
145
|
+
console.log(chalk.dim("Run `agentcard limit --amount <dollars>` to change it, or `agentcard request new --amount <dollars>` to issue a card."));
|
|
146
|
+
}
|
|
@@ -4,13 +4,14 @@ import ora from "ora";
|
|
|
4
4
|
import { get, post } from "../lib/api.js";
|
|
5
5
|
import { prompt } from "../lib/prompt.js";
|
|
6
6
|
import { saveConfig } from "../lib/config.js";
|
|
7
|
-
function formatDollars(cents) {
|
|
8
|
-
return `$${(cents / 100).toFixed(2)}`;
|
|
9
|
-
}
|
|
10
7
|
const API_URL = process.env.AGENTCARD_API_URL || "https://agentcard.ai";
|
|
11
8
|
const POLL_INTERVAL = 2000;
|
|
12
9
|
const TIMEOUT = 5 * 60 * 1000;
|
|
10
|
+
function formatTerms(appUrl) {
|
|
11
|
+
return `By using AgentCard you acknowledge this is a beta service governed by our terms: ${appUrl}/terms.`;
|
|
12
|
+
}
|
|
13
13
|
export async function signup(opts) {
|
|
14
|
+
console.log(chalk.dim(formatTerms(API_URL)));
|
|
14
15
|
let email = opts.email;
|
|
15
16
|
if (!email) {
|
|
16
17
|
const answers = await prompt([
|
|
@@ -23,7 +24,6 @@ export async function signup(opts) {
|
|
|
23
24
|
process.exit(1);
|
|
24
25
|
}
|
|
25
26
|
const state = crypto.randomUUID();
|
|
26
|
-
// Register the CLI auth state
|
|
27
27
|
await post("/api/auth/cli/start", { state }, { auth: false });
|
|
28
28
|
console.log(chalk.blue(`Sending magic link to ${email}...`));
|
|
29
29
|
const callbackURL = `${API_URL}/auth/cli/callback?state=${state}`;
|
|
@@ -44,22 +44,26 @@ export async function signup(opts) {
|
|
|
44
44
|
if (result.status === "complete" && result.token && result.email) {
|
|
45
45
|
spinner.stop();
|
|
46
46
|
saveConfig({ token: result.token, email: result.email });
|
|
47
|
-
|
|
48
|
-
// Show available card denominations
|
|
47
|
+
let me = null;
|
|
49
48
|
try {
|
|
50
|
-
|
|
51
|
-
if (res.denominations.length > 0) {
|
|
52
|
-
console.log("");
|
|
53
|
-
console.log(chalk.bold("Available card amounts:"));
|
|
54
|
-
for (const d of res.denominations) {
|
|
55
|
-
console.log(` ${formatDollars(d.amountCents)}`);
|
|
56
|
-
}
|
|
57
|
-
console.log("");
|
|
58
|
-
console.log(chalk.dim("Run `agentcard create` to purchase a card."));
|
|
59
|
-
}
|
|
49
|
+
me = await get("/api/me");
|
|
60
50
|
}
|
|
61
51
|
catch {
|
|
62
|
-
// Non-critical
|
|
52
|
+
// Non-critical — fall through with a generic next-step.
|
|
53
|
+
}
|
|
54
|
+
console.log(chalk.green(`Logged in as ${result.email}.`));
|
|
55
|
+
if (me?.locked) {
|
|
56
|
+
console.log(chalk.red("Your account is locked. Email support@agentcard.ai."));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (!me || !me.firstName || !me.lastName || !me.phoneNumber || !me.paymentMethod) {
|
|
60
|
+
console.log(chalk.yellow("Next step: run `agentcard setup` to finish setting up your account."));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const brand = me.paymentMethod.brand.charAt(0).toUpperCase() +
|
|
64
|
+
me.paymentMethod.brand.slice(1);
|
|
65
|
+
console.log(chalk.dim(`Profile: ${me.firstName} ${me.lastName}, ${me.phoneNumber}, ${brand} ending in ${me.paymentMethod.last4}.`));
|
|
66
|
+
console.log(chalk.dim("Run `agentcard request new --amount <dollars>` to issue a card, or `agentcard setup --reset` to update your info."));
|
|
63
67
|
}
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
@@ -71,4 +75,3 @@ export async function signup(opts) {
|
|
|
71
75
|
spinner.fail("Authentication timed out. Please try again.");
|
|
72
76
|
process.exit(1);
|
|
73
77
|
}
|
|
74
|
-
//# sourceMappingURL=signup.js.map
|
package/dist/src/index.js
CHANGED
|
@@ -2,38 +2,43 @@ import { Command } from "commander";
|
|
|
2
2
|
import { signup } from "./commands/signup.js";
|
|
3
3
|
import { logout } from "./commands/logout.js";
|
|
4
4
|
import { whoami } from "./commands/whoami.js";
|
|
5
|
-
import { createCard } from "./commands/cards/create.js";
|
|
6
5
|
import { listCards } from "./commands/cards/list.js";
|
|
7
6
|
import { cardDetails } from "./commands/cards/details.js";
|
|
8
7
|
import { balance } from "./commands/balance.js";
|
|
9
|
-
import {
|
|
8
|
+
import { setup } from "./commands/setup.js";
|
|
9
|
+
import { limit } from "./commands/limit.js";
|
|
10
|
+
import { requestNew } from "./commands/request/new.js";
|
|
11
|
+
import { requestGet } from "./commands/request/get.js";
|
|
10
12
|
import { trackPurchase } from "./commands/track/purchase.js";
|
|
11
13
|
import { support } from "./commands/support.js";
|
|
12
14
|
import { getLocalVersion } from "./lib/update-check.js";
|
|
13
15
|
const program = new Command();
|
|
14
16
|
program
|
|
15
17
|
.name("agentcard")
|
|
16
|
-
.description("
|
|
18
|
+
.description("On-demand single-use virtual Visa cards for AI agents")
|
|
17
19
|
.version(getLocalVersion())
|
|
18
20
|
.showHelpAfterError()
|
|
19
21
|
.addHelpText("after", `
|
|
20
22
|
Examples:
|
|
21
23
|
|
|
22
|
-
$ agentcard signup --email you@example.com Sign up (
|
|
23
|
-
$ agentcard
|
|
24
|
-
$ agentcard
|
|
25
|
-
$ agentcard
|
|
26
|
-
$ agentcard
|
|
27
|
-
$ agentcard
|
|
28
|
-
$ agentcard
|
|
29
|
-
$ agentcard
|
|
24
|
+
$ agentcard signup --email you@example.com Sign up (sends magic link)
|
|
25
|
+
$ agentcard setup Finish setup: name, phone, payment method
|
|
26
|
+
$ agentcard setup --reset Clear your profile and start over
|
|
27
|
+
$ agentcard limit Show spend limit / spent / remaining
|
|
28
|
+
$ agentcard limit --amount 250 Raise your spend limit to $250
|
|
29
|
+
$ agentcard request new --amount 10 Issue a single-use $10 Visa card
|
|
30
|
+
$ agentcard request get <id> Re-fetch PAN/CVV/expiry for a request
|
|
31
|
+
$ agentcard request get List all your card requests
|
|
32
|
+
$ agentcard list List legacy inventory cards
|
|
33
|
+
$ agentcard details <id> Reveal full details for a legacy card
|
|
30
34
|
|
|
31
35
|
Quickstart:
|
|
32
36
|
|
|
33
37
|
$ agentcard signup --email you@example.com
|
|
34
|
-
$ agentcard
|
|
35
|
-
$ agentcard
|
|
36
|
-
→
|
|
38
|
+
$ agentcard setup
|
|
39
|
+
$ agentcard request new --amount 10
|
|
40
|
+
→ PAN / CVV / expiry printed; card expires in 15 minutes
|
|
41
|
+
→ Hand the details to your AI agent immediately
|
|
37
42
|
`);
|
|
38
43
|
// -- Auth -------------------------------------------------------------------
|
|
39
44
|
program
|
|
@@ -54,12 +59,35 @@ program
|
|
|
54
59
|
.command("whoami")
|
|
55
60
|
.description("Show the currently logged-in user")
|
|
56
61
|
.action(whoami);
|
|
57
|
-
// --
|
|
62
|
+
// -- Setup & limit ----------------------------------------------------------
|
|
58
63
|
program
|
|
59
|
-
.command("
|
|
60
|
-
.description("
|
|
61
|
-
.option("--
|
|
62
|
-
.
|
|
64
|
+
.command("setup")
|
|
65
|
+
.description("Set up or update your profile (name, phone, payment method)")
|
|
66
|
+
.option("--first-name <name>", "First name")
|
|
67
|
+
.option("--last-name <name>", "Last name")
|
|
68
|
+
.option("--phone <phone>", "Phone number in E.164 format, e.g. +14155551234")
|
|
69
|
+
.option("--reset", "Clear your profile and payment method, then start over")
|
|
70
|
+
.action(setup);
|
|
71
|
+
program
|
|
72
|
+
.command("limit")
|
|
73
|
+
.description("Show or update your spend limit")
|
|
74
|
+
.option("--amount <dollars>", "Set new limit in dollars")
|
|
75
|
+
.action(limit);
|
|
76
|
+
// -- Card requests ----------------------------------------------------------
|
|
77
|
+
const request = program
|
|
78
|
+
.command("request")
|
|
79
|
+
.description("Manage card requests");
|
|
80
|
+
request
|
|
81
|
+
.command("new")
|
|
82
|
+
.description("Request a single-use virtual Visa for a specific amount")
|
|
83
|
+
.option("--amount <dollars>", "Amount in dollars (prompts interactively if omitted)")
|
|
84
|
+
.action((opts) => requestNew(opts.amount));
|
|
85
|
+
request
|
|
86
|
+
.command("get")
|
|
87
|
+
.description("Get one request by ID, or list all requests")
|
|
88
|
+
.argument("[id]", "Request ID")
|
|
89
|
+
.action(requestGet);
|
|
90
|
+
// -- Legacy inventory cards -------------------------------------------------
|
|
63
91
|
program
|
|
64
92
|
.command("list")
|
|
65
93
|
.description("List all your purchased cards")
|
|
@@ -74,12 +102,6 @@ program
|
|
|
74
102
|
.description("Check card denomination")
|
|
75
103
|
.argument("<id>", "Card ID")
|
|
76
104
|
.action(balance);
|
|
77
|
-
program
|
|
78
|
-
.command("refund")
|
|
79
|
-
.description("Refund remaining card balance to your original payment method")
|
|
80
|
-
.argument("<id>", "Card ID")
|
|
81
|
-
.option("--amount <dollars>", "Amount to refund in dollars")
|
|
82
|
-
.action((id, opts) => refundCard(id, opts.amount));
|
|
83
105
|
// -- Tracking (hidden) ------------------------------------------------------
|
|
84
106
|
program
|
|
85
107
|
.command("track-purchase", { hidden: true })
|
|
@@ -101,4 +123,3 @@ program
|
|
|
101
123
|
.option("--error <error>", "Error message or details")
|
|
102
124
|
.action(support);
|
|
103
125
|
export { program };
|
|
104
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/lib/api.js
CHANGED
|
@@ -43,4 +43,9 @@ export function get(path, options) {
|
|
|
43
43
|
export function post(path, body, options) {
|
|
44
44
|
return request("POST", path, body, options);
|
|
45
45
|
}
|
|
46
|
-
|
|
46
|
+
export function patch(path, body, options) {
|
|
47
|
+
return request("PATCH", path, body, options);
|
|
48
|
+
}
|
|
49
|
+
export function del(path, options) {
|
|
50
|
+
return request("DELETE", path, undefined, options);
|
|
51
|
+
}
|
package/dist/src/lib/config.js
CHANGED
package/dist/src/lib/prompt.js
CHANGED
|
@@ -18,6 +18,14 @@ export function getLocalVersion() {
|
|
|
18
18
|
}
|
|
19
19
|
throw new Error("Could not find agentcard package.json");
|
|
20
20
|
}
|
|
21
|
+
function detectPackageManager() {
|
|
22
|
+
const binPath = process.argv[1] ?? "";
|
|
23
|
+
if (binPath.includes("pnpm"))
|
|
24
|
+
return "pnpm";
|
|
25
|
+
if (binPath.includes("yarn"))
|
|
26
|
+
return "yarn";
|
|
27
|
+
return "npm";
|
|
28
|
+
}
|
|
21
29
|
function getLatestVersion() {
|
|
22
30
|
try {
|
|
23
31
|
const result = execSync("npm view agentcard version", {
|
|
@@ -38,9 +46,15 @@ export function checkForUpdate() {
|
|
|
38
46
|
const latest = getLatestVersion();
|
|
39
47
|
if (!latest || !semver.gt(latest, local))
|
|
40
48
|
return false;
|
|
49
|
+
const pm = detectPackageManager();
|
|
50
|
+
const installCmds = {
|
|
51
|
+
npm: `npm install -g agentcard@${latest}`,
|
|
52
|
+
pnpm: `pnpm add -g agentcard@${latest}`,
|
|
53
|
+
yarn: `yarn global add agentcard@${latest}`,
|
|
54
|
+
};
|
|
41
55
|
console.log(chalk.yellow(`Updating agentcard ${local} → ${latest}...`));
|
|
42
56
|
try {
|
|
43
|
-
execSync(
|
|
57
|
+
execSync(installCmds[pm], {
|
|
44
58
|
stdio: ["pipe", "pipe", "pipe"],
|
|
45
59
|
timeout: 60000,
|
|
46
60
|
});
|
|
@@ -49,9 +63,13 @@ export function checkForUpdate() {
|
|
|
49
63
|
return true;
|
|
50
64
|
}
|
|
51
65
|
catch {
|
|
52
|
-
|
|
66
|
+
const manualCmds = {
|
|
67
|
+
npm: "npm install -g agentcard",
|
|
68
|
+
pnpm: "pnpm add -g agentcard",
|
|
69
|
+
yarn: "yarn global add agentcard",
|
|
70
|
+
};
|
|
71
|
+
console.error(chalk.yellow(`Update available: ${local} → ${latest}. Run: ${manualCmds[pm]}`));
|
|
53
72
|
console.log("");
|
|
54
73
|
return false;
|
|
55
74
|
}
|
|
56
75
|
}
|
|
57
|
-
//# sourceMappingURL=update-check.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentcard",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.21-alpha.1",
|
|
4
4
|
"description": "CLI for managing prepaid virtual Visa cards for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist"
|
|
11
11
|
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"dev": "tsc --watch"
|
|
15
|
+
},
|
|
12
16
|
"dependencies": {
|
|
13
17
|
"chalk": "^5.4.1",
|
|
14
18
|
"commander": "^13.1.0",
|
|
@@ -21,9 +25,5 @@
|
|
|
21
25
|
"@types/node": "^22.0.0",
|
|
22
26
|
"@types/semver": "^7.7.1",
|
|
23
27
|
"typescript": "^5.7.0"
|
|
24
|
-
},
|
|
25
|
-
"scripts": {
|
|
26
|
-
"build": "tsc",
|
|
27
|
-
"dev": "tsc --watch"
|
|
28
28
|
}
|
|
29
|
-
}
|
|
29
|
+
}
|
package/dist/bin/agentcard.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agentcard.js","sourceRoot":"","sources":["../../bin/agentcard.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;AAEjC,IAAI,OAAO,EAAE,CAAC;IACZ,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC3D,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE;KACpD,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function balance(id: string): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/balance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function createCard(amount?: string): Promise<void>;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import inquirer from "inquirer";
|
|
3
|
-
import open from "open";
|
|
4
|
-
import ora from "ora";
|
|
5
|
-
import { get, post } from "../../lib/api.js";
|
|
6
|
-
import { printCardDetails } from "./details.js";
|
|
7
|
-
const POLL_INTERVAL = 2000;
|
|
8
|
-
const TIMEOUT = 10 * 60 * 1000;
|
|
9
|
-
function formatDollars(cents) {
|
|
10
|
-
return `$${(cents / 100).toFixed(2)}`;
|
|
11
|
-
}
|
|
12
|
-
export async function createCard(amount) {
|
|
13
|
-
let dollars;
|
|
14
|
-
if (amount) {
|
|
15
|
-
dollars = parseInt(amount, 10);
|
|
16
|
-
if (isNaN(dollars) || dollars <= 0) {
|
|
17
|
-
console.error(chalk.red("Amount must be a positive integer (in dollars)."));
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
const { rawAmount } = await inquirer.prompt([
|
|
23
|
-
{
|
|
24
|
-
type: "input",
|
|
25
|
-
name: "rawAmount",
|
|
26
|
-
message: "Enter card amount in dollars (multiples of $5, up to $200):",
|
|
27
|
-
validate: (v) => {
|
|
28
|
-
const n = parseFloat(v);
|
|
29
|
-
if (isNaN(n) || n <= 0)
|
|
30
|
-
return "Enter a valid dollar amount";
|
|
31
|
-
if (!Number.isInteger(n) || n % 5 !== 0)
|
|
32
|
-
return "Amount must be a multiple of $5 (e.g. 5, 10, 15, 20)";
|
|
33
|
-
if (n < 5)
|
|
34
|
-
return "Minimum amount is $5";
|
|
35
|
-
if (n > 200)
|
|
36
|
-
return "Maximum amount is $200";
|
|
37
|
-
return true;
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
]);
|
|
41
|
-
dollars = parseInt(rawAmount, 10);
|
|
42
|
-
}
|
|
43
|
-
if (dollars < 5 || dollars > 200 || dollars % 5 !== 0) {
|
|
44
|
-
console.error(chalk.red("Amount must be a multiple of $5, between $5 and $200."));
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
const spinner = ora("Creating checkout session...").start();
|
|
48
|
-
let purchase;
|
|
49
|
-
try {
|
|
50
|
-
purchase = await post("/api/cards/purchase", {
|
|
51
|
-
amountCents: dollars * 100,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
spinner.fail(`Failed to create card: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
spinner.stop();
|
|
59
|
-
if (purchase.manualFulfillment) {
|
|
60
|
-
console.log("");
|
|
61
|
-
console.log(chalk.yellow("Note: Cards are currently being fulfilled manually. After payment, your card will be available within 72 hours."));
|
|
62
|
-
console.log(chalk.yellow("Run `agentcard list` to check when your card is ready."));
|
|
63
|
-
console.log("");
|
|
64
|
-
}
|
|
65
|
-
console.log(`Checkout URL: ${purchase.url}`);
|
|
66
|
-
if (purchase.manualFulfillment) {
|
|
67
|
-
// In manual mode, don't auto-open or poll — just show the URL
|
|
68
|
-
console.log("");
|
|
69
|
-
console.log(chalk.green("Complete payment at the URL above."));
|
|
70
|
-
console.log(chalk.dim("Your card will appear in `agentcard list` once fulfilled (up to 72 hours)."));
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
console.log(chalk.blue("Opening browser for payment..."));
|
|
74
|
-
await open(purchase.url);
|
|
75
|
-
const paymentSpinner = ora("Waiting for payment and card provisioning...").start();
|
|
76
|
-
const deadline = Date.now() + TIMEOUT;
|
|
77
|
-
while (Date.now() < deadline) {
|
|
78
|
-
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL));
|
|
79
|
-
try {
|
|
80
|
-
const status = await get(`/api/cards/purchase/status?session_id=${purchase.sessionId}`);
|
|
81
|
-
if (status.status === "complete" && status.card) {
|
|
82
|
-
paymentSpinner.succeed(chalk.green("Card purchased!"));
|
|
83
|
-
try {
|
|
84
|
-
const details = await get(`/api/cards/${status.card.id}/details`);
|
|
85
|
-
printCardDetails(details);
|
|
86
|
-
console.log(chalk.dim(` To view again: agentcard details ${status.card.id}`));
|
|
87
|
-
console.log("");
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
console.log(`Run \`agentcard details ${status.card.id}\` to view card details.`);
|
|
91
|
-
}
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
if (status.status === "failed") {
|
|
95
|
-
paymentSpinner.fail(chalk.red(status.error || "Card could not be provisioned. Your payment has been refunded."));
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
if (status.status === "expired") {
|
|
99
|
-
paymentSpinner.fail("Payment session expired. Please try again.");
|
|
100
|
-
process.exit(1);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Not ready yet, keep polling
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
paymentSpinner.fail("Payment timed out. Please try again.");
|
|
108
|
-
process.exit(1);
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=create.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/cards/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export interface CardDetails {
|
|
2
|
-
pan: string;
|
|
3
|
-
cvv: string;
|
|
4
|
-
expiryMonth: number;
|
|
5
|
-
expiryYear: number;
|
|
6
|
-
amountCents: number;
|
|
7
|
-
}
|
|
8
|
-
export declare function printCardDetails(card: CardDetails): void;
|
|
9
|
-
export declare function cardDetails(id: string): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../../src/commands/cards/details.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAUvC,MAAM,UAAU,gBAAgB,CAAC,IAAiB;IAChD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAEjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAU;IAC1C,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAc,cAAc,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACxF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function listCards(): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/cards/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAmBvC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,KAAa,CAAC;IAClB,IAAI,QAAQ,GAAkB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAA8C,YAAY,CAAC,CAAC;QACjF,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QAClB,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACjF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,sDAAsD,CACvD,CACF,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC;QACvH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACtF,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,CAAC,GAAG,CACT,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CACvG,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,6DAA6D,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function refundCard(cardId: string, amount?: string): Promise<void>;
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
|
-
import inquirer from "inquirer";
|
|
3
|
-
import ora from "ora";
|
|
4
|
-
import { get, post } from "../../lib/api.js";
|
|
5
|
-
const POLL_INTERVAL = 2000;
|
|
6
|
-
const TIMEOUT = 10 * 60 * 1000;
|
|
7
|
-
export async function refundCard(cardId, amount) {
|
|
8
|
-
let dollars;
|
|
9
|
-
if (amount) {
|
|
10
|
-
dollars = parseFloat(amount);
|
|
11
|
-
if (isNaN(dollars) || dollars <= 0) {
|
|
12
|
-
console.error(chalk.red("Amount must be a positive number (in dollars)."));
|
|
13
|
-
process.exit(1);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
const { rawAmount } = await inquirer.prompt([
|
|
18
|
-
{
|
|
19
|
-
type: "input",
|
|
20
|
-
name: "rawAmount",
|
|
21
|
-
message: "Enter the amount to refund in dollars:",
|
|
22
|
-
validate: (v) => {
|
|
23
|
-
const n = parseFloat(v);
|
|
24
|
-
if (isNaN(n) || n <= 0)
|
|
25
|
-
return "Enter a valid dollar amount";
|
|
26
|
-
return true;
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
]);
|
|
30
|
-
dollars = parseFloat(rawAmount);
|
|
31
|
-
}
|
|
32
|
-
const amountCents = Math.round(dollars * 100);
|
|
33
|
-
// Fetch card details so the user knows exactly which card to use
|
|
34
|
-
const detailsSpinner = ora("Fetching card details...").start();
|
|
35
|
-
let card;
|
|
36
|
-
try {
|
|
37
|
-
card = await get(`/api/cards/${cardId}/details`);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
detailsSpinner.fail(`Failed to fetch card details: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
detailsSpinner.stop();
|
|
44
|
-
const expiry = `${String(card.expiryMonth).padStart(2, "0")}/${card.expiryYear}`;
|
|
45
|
-
console.log("");
|
|
46
|
-
console.log(chalk.bold(" Use this card on the checkout page:"));
|
|
47
|
-
console.log(chalk.dim(" ────────────────────────────"));
|
|
48
|
-
console.log(` Number: ${chalk.white(card.pan)}`);
|
|
49
|
-
console.log(` CVV: ${chalk.white(card.cvv)}`);
|
|
50
|
-
console.log(` Expiry: ${chalk.white(expiry)}`);
|
|
51
|
-
console.log(chalk.dim(" ────────────────────────────"));
|
|
52
|
-
console.log("");
|
|
53
|
-
console.log(chalk.yellow.bold(" Please make sure to use the card above on checkout to"));
|
|
54
|
-
console.log(chalk.yellow.bold(" ensure your refund ends up in the right place."));
|
|
55
|
-
console.log("");
|
|
56
|
-
const spinner = ora("Creating refund checkout session...").start();
|
|
57
|
-
let refund;
|
|
58
|
-
try {
|
|
59
|
-
refund = await post("/api/cards/refund", {
|
|
60
|
-
cardId,
|
|
61
|
-
amountCents,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
spinner.fail(`Failed to create refund: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
spinner.stop();
|
|
69
|
-
console.log(`Checkout URL: ${refund.url}`);
|
|
70
|
-
const pollSpinner = ora("Waiting for payment and refund processing...").start();
|
|
71
|
-
const deadline = Date.now() + TIMEOUT;
|
|
72
|
-
while (Date.now() < deadline) {
|
|
73
|
-
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL));
|
|
74
|
-
try {
|
|
75
|
-
const status = await get(`/api/cards/refund/status?session_id=${refund.sessionId}`);
|
|
76
|
-
if (status.status === "complete") {
|
|
77
|
-
const refundedDollars = status.refundedAmountCents
|
|
78
|
-
? `$${(status.refundedAmountCents / 100).toFixed(2)}`
|
|
79
|
-
: `$${dollars.toFixed(2)}`;
|
|
80
|
-
pollSpinner.succeed(chalk.green(`Refund of ${refundedDollars} processed! Funds will return to your original payment method.`));
|
|
81
|
-
console.log(chalk.dim(" Note: refunds typically appear within 5-10 business days."));
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (status.status === "failed") {
|
|
85
|
-
pollSpinner.fail(chalk.red(status.error || "Refund failed. Please contact support."));
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
if (status.status === "expired") {
|
|
89
|
-
pollSpinner.fail("Checkout session expired. Please try again.");
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// Not ready yet, keep polling
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
pollSpinner.fail("Refund timed out. Please check your email or contact support.");
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=refund.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refund.js","sourceRoot":"","sources":["../../../../src/commands/cards/refund.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function logout(): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,MAAM;IACpB,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signup.js","sourceRoot":"","sources":["../../../src/commands/signup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"support.js","sourceRoot":"","sources":["../../../src/commands/support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAK7B;IACC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,cAAc,EAAE;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"purchase.js","sourceRoot":"","sources":["../../../../src/commands/track/purchase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAOnC;IACC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,qBAAqB,EAAE;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function whoami(): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAM7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAa,cAAc,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
|
package/dist/src/index.d.ts
DELETED
package/dist/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/api.d.ts
DELETED
package/dist/src/lib/api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,sBAAsB,CAAC;AAMxE,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,UAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAEpC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,IAAY,EAAE,OAAoB;IACvD,OAAO,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAAY,EACZ,IAAc,EACd,OAAoB;IAEpB,OAAO,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/src/lib/config.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC1D,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC"}
|
package/dist/src/lib/prompt.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/lib/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,SAAgD;IAEhD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../../src/lib/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,eAAe;IAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,OAAO,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,GAAG,CAAC,OAAO,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,4BAA4B,EAAE;YACpD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAE5D,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC;QACH,QAAQ,CAAC,4BAA4B,MAAM,EAAE,EAAE;YAC7C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8GAA8G,CAAC,CAAC,CAAC;QACvI,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,KAAK,MAAM,MAAM,iCAAiC,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|