agent-cards-admin 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/bin/agent-cards-admin.d.ts +3 -0
  2. package/dist/bin/agent-cards-admin.d.ts.map +1 -0
  3. package/dist/bin/agent-cards-admin.js +293 -0
  4. package/dist/bin/agent-cards-admin.js.map +1 -0
  5. package/dist/package.json +33 -0
  6. package/dist/src/commands/cards/close.d.ts +4 -0
  7. package/dist/src/commands/cards/close.d.ts.map +1 -0
  8. package/dist/src/commands/cards/close.js +29 -0
  9. package/dist/src/commands/cards/close.js.map +1 -0
  10. package/dist/src/commands/cards/create.d.ts +4 -0
  11. package/dist/src/commands/cards/create.d.ts.map +1 -0
  12. package/dist/src/commands/cards/create.js +51 -0
  13. package/dist/src/commands/cards/create.js.map +1 -0
  14. package/dist/src/commands/cards/details.d.ts +4 -0
  15. package/dist/src/commands/cards/details.d.ts.map +1 -0
  16. package/dist/src/commands/cards/details.js +22 -0
  17. package/dist/src/commands/cards/details.js.map +1 -0
  18. package/dist/src/commands/cards/get.d.ts +4 -0
  19. package/dist/src/commands/cards/get.d.ts.map +1 -0
  20. package/dist/src/commands/cards/get.js +20 -0
  21. package/dist/src/commands/cards/get.js.map +1 -0
  22. package/dist/src/commands/cards/list.d.ts +4 -0
  23. package/dist/src/commands/cards/list.d.ts.map +1 -0
  24. package/dist/src/commands/cards/list.js +31 -0
  25. package/dist/src/commands/cards/list.js.map +1 -0
  26. package/dist/src/commands/keys/create.d.ts +6 -0
  27. package/dist/src/commands/keys/create.d.ts.map +1 -0
  28. package/dist/src/commands/keys/create.js +75 -0
  29. package/dist/src/commands/keys/create.js.map +1 -0
  30. package/dist/src/commands/keys/list.d.ts +2 -0
  31. package/dist/src/commands/keys/list.d.ts.map +1 -0
  32. package/dist/src/commands/keys/list.js +34 -0
  33. package/dist/src/commands/keys/list.js.map +1 -0
  34. package/dist/src/commands/keys/revoke.d.ts +2 -0
  35. package/dist/src/commands/keys/revoke.d.ts.map +1 -0
  36. package/dist/src/commands/keys/revoke.js +65 -0
  37. package/dist/src/commands/keys/revoke.js.map +1 -0
  38. package/dist/src/commands/keys/rotate.d.ts +2 -0
  39. package/dist/src/commands/keys/rotate.d.ts.map +1 -0
  40. package/dist/src/commands/keys/rotate.js +73 -0
  41. package/dist/src/commands/keys/rotate.js.map +1 -0
  42. package/dist/src/commands/login.d.ts +2 -0
  43. package/dist/src/commands/login.d.ts.map +1 -0
  44. package/dist/src/commands/login.js +63 -0
  45. package/dist/src/commands/login.js.map +1 -0
  46. package/dist/src/commands/logout.d.ts +2 -0
  47. package/dist/src/commands/logout.d.ts.map +1 -0
  48. package/dist/src/commands/logout.js +18 -0
  49. package/dist/src/commands/logout.js.map +1 -0
  50. package/dist/src/commands/members/add.d.ts +5 -0
  51. package/dist/src/commands/members/add.d.ts.map +1 -0
  52. package/dist/src/commands/members/add.js +66 -0
  53. package/dist/src/commands/members/add.js.map +1 -0
  54. package/dist/src/commands/members/list.d.ts +2 -0
  55. package/dist/src/commands/members/list.d.ts.map +1 -0
  56. package/dist/src/commands/members/list.js +29 -0
  57. package/dist/src/commands/members/list.js.map +1 -0
  58. package/dist/src/commands/members/remove.d.ts +2 -0
  59. package/dist/src/commands/members/remove.d.ts.map +1 -0
  60. package/dist/src/commands/members/remove.js +64 -0
  61. package/dist/src/commands/members/remove.js.map +1 -0
  62. package/dist/src/commands/orgs/create.d.ts +5 -0
  63. package/dist/src/commands/orgs/create.d.ts.map +1 -0
  64. package/dist/src/commands/orgs/create.js +73 -0
  65. package/dist/src/commands/orgs/create.js.map +1 -0
  66. package/dist/src/commands/orgs/get.d.ts +2 -0
  67. package/dist/src/commands/orgs/get.d.ts.map +1 -0
  68. package/dist/src/commands/orgs/get.js +22 -0
  69. package/dist/src/commands/orgs/get.js.map +1 -0
  70. package/dist/src/commands/orgs/list.d.ts +2 -0
  71. package/dist/src/commands/orgs/list.d.ts.map +1 -0
  72. package/dist/src/commands/orgs/list.js +31 -0
  73. package/dist/src/commands/orgs/list.js.map +1 -0
  74. package/dist/src/commands/wallet/balance.d.ts +4 -0
  75. package/dist/src/commands/wallet/balance.d.ts.map +1 -0
  76. package/dist/src/commands/wallet/balance.js +13 -0
  77. package/dist/src/commands/wallet/balance.js.map +1 -0
  78. package/dist/src/commands/wallet/transactions.d.ts +4 -0
  79. package/dist/src/commands/wallet/transactions.d.ts.map +1 -0
  80. package/dist/src/commands/wallet/transactions.js +32 -0
  81. package/dist/src/commands/wallet/transactions.js.map +1 -0
  82. package/dist/src/lib/api.d.ts +27 -0
  83. package/dist/src/lib/api.d.ts.map +1 -0
  84. package/dist/src/lib/api.js +118 -0
  85. package/dist/src/lib/api.js.map +1 -0
  86. package/dist/src/lib/config.d.ts +18 -0
  87. package/dist/src/lib/config.d.ts.map +1 -0
  88. package/dist/src/lib/config.js +53 -0
  89. package/dist/src/lib/config.js.map +1 -0
  90. package/dist/src/lib/poll.d.ts +5 -0
  91. package/dist/src/lib/poll.d.ts.map +1 -0
  92. package/dist/src/lib/poll.js +12 -0
  93. package/dist/src/lib/poll.js.map +1 -0
  94. package/package.json +33 -0
@@ -0,0 +1,73 @@
1
+ import inquirer from 'inquirer';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { api } from '../../lib/api.js';
5
+ import { requireAuth, getEmail } from '../../lib/config.js';
6
+ import { createKey } from '../keys/create.js';
7
+ export async function createOrg(opts) {
8
+ requireAuth();
9
+ let name = opts.name;
10
+ let billingEmail = opts.email;
11
+ if (!name || !billingEmail) {
12
+ const answers = await inquirer.prompt([
13
+ ...(!name
14
+ ? [
15
+ {
16
+ type: 'input',
17
+ name: 'name',
18
+ message: 'Organization name:',
19
+ validate: (v) => v.trim().length > 0 || 'Name is required',
20
+ },
21
+ ]
22
+ : []),
23
+ ...(!billingEmail
24
+ ? [
25
+ {
26
+ type: 'input',
27
+ name: 'billingEmail',
28
+ message: 'Billing email:',
29
+ default: getEmail(),
30
+ validate: (v) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v) || 'Enter a valid email',
31
+ },
32
+ ]
33
+ : []),
34
+ ]);
35
+ name = name ?? answers.name;
36
+ billingEmail = billingEmail ?? answers.billingEmail;
37
+ }
38
+ const { confirmed } = await inquirer.prompt([
39
+ {
40
+ type: 'confirm',
41
+ name: 'confirmed',
42
+ message: `Create organization "${name}" (${billingEmail})?`,
43
+ default: true,
44
+ },
45
+ ]);
46
+ if (!confirmed) {
47
+ console.log(chalk.dim('Cancelled.'));
48
+ return;
49
+ }
50
+ const spinner = ora('Creating organization...').start();
51
+ const org = await api('/orgs', {
52
+ method: 'POST',
53
+ body: { name, billingEmail },
54
+ });
55
+ spinner.succeed(chalk.green('Organization created'));
56
+ console.log('');
57
+ console.log(` ${chalk.bold('ID')} ${org.id}`);
58
+ console.log(` ${chalk.bold('Name')} ${org.name}`);
59
+ console.log(` ${chalk.bold('Email')} ${org.billingEmail}`);
60
+ console.log('');
61
+ const { wantsKey } = await inquirer.prompt([
62
+ {
63
+ type: 'confirm',
64
+ name: 'wantsKey',
65
+ message: 'Create an API key for this organization?',
66
+ default: true,
67
+ },
68
+ ]);
69
+ if (wantsKey) {
70
+ await createKey({ org: org.id });
71
+ }
72
+ }
73
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/orgs/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getOrg(orgId: string): Promise<void>;
2
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/orgs/get.ts"],"names":[],"mappings":"AAgBA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBzD"}
@@ -0,0 +1,22 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { api } from '../../lib/api.js';
4
+ import { requireAuth } from '../../lib/config.js';
5
+ export async function getOrg(orgId) {
6
+ requireAuth();
7
+ const spinner = ora('Fetching organization...').start();
8
+ const org = await api(`/orgs/${orgId}`);
9
+ spinner.stop();
10
+ const statusColor = org.status === 'active' ? chalk.green : org.status === 'suspended' ? chalk.red : chalk.dim;
11
+ console.log('');
12
+ console.log(` ${chalk.bold('ID')} ${org.id}`);
13
+ console.log(` ${chalk.bold('Name')} ${org.name}`);
14
+ console.log(` ${chalk.bold('Billing Email')} ${org.billingEmail}`);
15
+ console.log(` ${chalk.bold('Status')} ${statusColor(org.status)}`);
16
+ console.log(` ${chalk.bold('Members')} ${org.memberCount}`);
17
+ console.log(` ${chalk.bold('API Keys')} ${org.keyCount}`);
18
+ console.log(` ${chalk.bold('Created')} ${new Date(org.createdAt).toLocaleString()}`);
19
+ console.log(` ${chalk.bold('Updated')} ${new Date(org.updatedAt).toLocaleString()}`);
20
+ console.log('');
21
+ }
22
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/orgs/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAalD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa;IACxC,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAY,SAAS,KAAK,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAE7F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function listOrgs(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/orgs/list.ts"],"names":[],"mappings":"AAcA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B9C"}
@@ -0,0 +1,31 @@
1
+ import Table from 'cli-table3';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { api } from '../../lib/api.js';
5
+ import { requireAuth } from '../../lib/config.js';
6
+ export async function listOrgs() {
7
+ requireAuth();
8
+ const spinner = ora('Fetching organizations...').start();
9
+ const { organizations } = await api('/orgs');
10
+ spinner.stop();
11
+ if (organizations.length === 0) {
12
+ console.log(chalk.dim('No organizations yet. Run: agent-cards-admin orgs create'));
13
+ return;
14
+ }
15
+ const table = new Table({
16
+ head: ['ID', 'Name', 'Billing Email', 'Status', 'Created'],
17
+ style: { head: ['cyan'] },
18
+ });
19
+ for (const org of organizations) {
20
+ const statusColor = org.status === 'active' ? chalk.green : org.status === 'suspended' ? chalk.red : chalk.dim;
21
+ table.push([
22
+ org.id,
23
+ org.name,
24
+ org.billingEmail,
25
+ statusColor(org.status),
26
+ new Date(org.createdAt).toLocaleDateString(),
27
+ ]);
28
+ }
29
+ console.log(table.toString());
30
+ }
31
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/orgs/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAUlD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,CAA2B,OAAO,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7F,KAAK,CAAC,IAAI,CAAC;YACT,GAAG,CAAC,EAAE;YACN,GAAG,CAAC,IAAI;YACR,GAAG,CAAC,YAAY;YAChB,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function walletBalance(opts: {
2
+ key?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzE"}
@@ -0,0 +1,13 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { apiKeyApi, getOrPromptApiKey } from '../../lib/api.js';
4
+ export async function walletBalance(opts) {
5
+ const apiKey = await getOrPromptApiKey(opts.key);
6
+ const spinner = ora('Fetching wallet balance...').start();
7
+ const { balanceCents } = await apiKeyApi(apiKey, '/api/v1/wallet/balance');
8
+ spinner.stop();
9
+ console.log('');
10
+ console.log(` ${chalk.bold('Balance')} ${chalk.green(`$${(balanceCents / 100).toFixed(2)}`)}`);
11
+ console.log('');
12
+ }
13
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAsB;IACxD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1D,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,CAA2B,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACrG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function walletTransactions(opts: {
2
+ key?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=transactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../../src/commands/wallet/transactions.ts"],"names":[],"mappings":"AAaA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC9E"}
@@ -0,0 +1,32 @@
1
+ import Table from 'cli-table3';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { apiKeyApi, getOrPromptApiKey } from '../../lib/api.js';
5
+ export async function walletTransactions(opts) {
6
+ const apiKey = await getOrPromptApiKey(opts.key);
7
+ const spinner = ora('Fetching transactions...').start();
8
+ const { transactions } = await apiKeyApi(apiKey, '/api/v1/wallet/transactions');
9
+ spinner.stop();
10
+ if (transactions.length === 0) {
11
+ console.log(chalk.dim('No transactions found.'));
12
+ return;
13
+ }
14
+ const table = new Table({
15
+ head: ['ID', 'Type', 'Amount', 'Description', 'Date'],
16
+ style: { head: ['cyan'] },
17
+ });
18
+ for (const tx of transactions) {
19
+ const isCredit = tx.type === 'credit' || tx.type === 'funding' || tx.type === 'card_refund';
20
+ const color = isCredit ? chalk.green : chalk.red;
21
+ const sign = isCredit ? '+' : '-';
22
+ table.push([
23
+ tx.id,
24
+ tx.type,
25
+ color(`${sign}$${(Math.abs(tx.amountCents) / 100).toFixed(2)}`),
26
+ tx.description || chalk.dim('—'),
27
+ new Date(tx.createdAt).toLocaleString(),
28
+ ]);
29
+ }
30
+ console.log(table.toString());
31
+ }
32
+ //# sourceMappingURL=transactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../../src/commands/wallet/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUhE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAsB;IAC7D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,CACtC,MAAM,EACN,6BAA6B,CAC9B,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC;QACrD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IAEH,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC;QAC5F,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,CAAC,EAAE;YACL,EAAE,CAAC,IAAI;YACP,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,EAAE,CAAC,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAChC,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,27 @@
1
+ type FetchOptions = {
2
+ method?: string;
3
+ body?: unknown;
4
+ magicToken?: string;
5
+ };
6
+ export declare class ApiError extends Error {
7
+ status: number;
8
+ body: Record<string, unknown>;
9
+ constructor(message: string, status: number, body: Record<string, unknown>);
10
+ }
11
+ /**
12
+ * Make a request to the API.
13
+ * Paths are absolute — e.g. pass '/orgs' to hit /orgs, '/auth/signup' to hit /auth/signup.
14
+ */
15
+ export declare function api<T>(path: string, opts?: FetchOptions): Promise<T>;
16
+ /**
17
+ * Make a request to the API using an API key for authentication.
18
+ * Used for B2B endpoints under /api/v1/*.
19
+ */
20
+ export declare function apiKeyApi<T>(apiKey: string, path: string, opts?: FetchOptions): Promise<T>;
21
+ /**
22
+ * Resolve an API key from: --key flag > saved config > interactive prompt.
23
+ * Saves the key to config for future use.
24
+ */
25
+ export declare function getOrPromptApiKey(keyFlag?: string): Promise<string>;
26
+ export {};
27
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAElB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAM3E;AAED;;;GAGG;AACH,wBAAsB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAiD9E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CA4CpG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE"}
@@ -0,0 +1,118 @@
1
+ import inquirer from 'inquirer';
2
+ import { getApiUrl, getJwt, getLastApiKey, saveLastApiKey } from './config.js';
3
+ export class ApiError extends Error {
4
+ status;
5
+ body;
6
+ constructor(message, status, body) {
7
+ super(message);
8
+ this.name = 'ApiError';
9
+ this.status = status;
10
+ this.body = body;
11
+ }
12
+ }
13
+ /**
14
+ * Make a request to the API.
15
+ * Paths are absolute — e.g. pass '/orgs' to hit /orgs, '/auth/signup' to hit /auth/signup.
16
+ */
17
+ export async function api(path, opts = {}) {
18
+ const baseUrl = getApiUrl();
19
+ const jwt = getJwt();
20
+ const url = `${baseUrl}${path}`;
21
+ const headers = {
22
+ 'Content-Type': 'application/json',
23
+ };
24
+ if (jwt)
25
+ headers['Authorization'] = `Bearer ${jwt}`;
26
+ if (opts.magicToken)
27
+ headers['X-Magic-Token'] = opts.magicToken;
28
+ let res;
29
+ try {
30
+ res = await fetch(url, {
31
+ method: opts.method ?? 'GET',
32
+ headers,
33
+ body: opts.body ? JSON.stringify(opts.body) : undefined,
34
+ });
35
+ }
36
+ catch (err) {
37
+ const msg = err?.message ?? String(err);
38
+ if (msg.includes('fetch failed') || msg.includes('ECONNREFUSED') || msg.includes('ENOTFOUND')) {
39
+ throw new Error(`Backend unreachable at ${url}. Is the backend running? Set ADMIN_API_URL if needed.`);
40
+ }
41
+ throw err;
42
+ }
43
+ if (res.status === 204) {
44
+ return {};
45
+ }
46
+ const data = await res.json();
47
+ if (!res.ok) {
48
+ if (res.status === 401) {
49
+ throw new Error('Not logged in or session expired. Run: agent-cards-admin login');
50
+ }
51
+ throw new ApiError(data.error ?? data.message ?? `HTTP ${res.status}`, res.status, data);
52
+ }
53
+ return data;
54
+ }
55
+ /**
56
+ * Make a request to the API using an API key for authentication.
57
+ * Used for B2B endpoints under /api/v1/*.
58
+ */
59
+ export async function apiKeyApi(apiKey, path, opts = {}) {
60
+ const baseUrl = getApiUrl();
61
+ const url = `${baseUrl}${path}`;
62
+ const headers = {
63
+ 'Content-Type': 'application/json',
64
+ 'Authorization': `Bearer ${apiKey}`,
65
+ };
66
+ let res;
67
+ try {
68
+ res = await fetch(url, {
69
+ method: opts.method ?? 'GET',
70
+ headers,
71
+ body: opts.body ? JSON.stringify(opts.body) : undefined,
72
+ });
73
+ }
74
+ catch (err) {
75
+ const msg = err?.message ?? String(err);
76
+ if (msg.includes('fetch failed') || msg.includes('ECONNREFUSED') || msg.includes('ENOTFOUND')) {
77
+ throw new Error(`Backend unreachable at ${url}. Is the backend running? Set ADMIN_API_URL if needed.`);
78
+ }
79
+ throw err;
80
+ }
81
+ if (res.status === 204) {
82
+ return {};
83
+ }
84
+ const data = await res.json();
85
+ if (!res.ok) {
86
+ if (res.status === 401) {
87
+ throw new Error('Invalid or expired API key.');
88
+ }
89
+ throw new ApiError(data.error ?? data.message ?? `HTTP ${res.status}`, res.status, data);
90
+ }
91
+ return data;
92
+ }
93
+ /**
94
+ * Resolve an API key from: --key flag > saved config > interactive prompt.
95
+ * Saves the key to config for future use.
96
+ */
97
+ export async function getOrPromptApiKey(keyFlag) {
98
+ if (keyFlag) {
99
+ saveLastApiKey(keyFlag);
100
+ return keyFlag;
101
+ }
102
+ const saved = getLastApiKey();
103
+ if (saved) {
104
+ return saved;
105
+ }
106
+ const { apiKey } = await inquirer.prompt([
107
+ {
108
+ type: 'password',
109
+ name: 'apiKey',
110
+ message: 'Enter your API key (sk_test_...):',
111
+ mask: '*',
112
+ validate: (v) => v.trim().length > 0 || 'API key is required',
113
+ },
114
+ ]);
115
+ saveLastApiKey(apiKey);
116
+ return apiKey;
117
+ }
118
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface AdminConfig {
2
+ apiUrl?: string;
3
+ jwt?: string;
4
+ email?: string;
5
+ lastApiKey?: string;
6
+ }
7
+ export declare function writeConfig(updates: Partial<AdminConfig>): void;
8
+ export declare function getApiUrl(): string;
9
+ export declare function getJwt(): string | undefined;
10
+ export declare function getEmail(): string | undefined;
11
+ /** Remove stored auth (jwt + email) so user can log in as someone else. */
12
+ export declare function clearAuth(): void;
13
+ export declare function getLastApiKey(): string | undefined;
14
+ export declare function saveLastApiKey(key: string): void;
15
+ /** Guard: exit with message if not logged in. */
16
+ export declare function requireAuth(): void;
17
+ export {};
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAI/D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAOlC;AAED,wBAAgB,MAAM,IAAI,MAAM,GAAG,SAAS,CAE3C;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAE7C;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,IAAI,IAAI,CAKhC;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAElD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
@@ -0,0 +1,53 @@
1
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ import chalk from 'chalk';
5
+ const CONFIG_FILE = join(homedir(), '.agent-cards-admin.json');
6
+ function readConfig() {
7
+ if (!existsSync(CONFIG_FILE))
8
+ return {};
9
+ try {
10
+ return JSON.parse(readFileSync(CONFIG_FILE, 'utf8'));
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ export function writeConfig(updates) {
17
+ const cfg = readConfig();
18
+ Object.assign(cfg, updates);
19
+ writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
20
+ }
21
+ export function getApiUrl() {
22
+ const cfg = readConfig();
23
+ return (process.env.ADMIN_API_URL ??
24
+ cfg.apiUrl ??
25
+ 'https://backend-staging-production-d3e4.up.railway.app');
26
+ }
27
+ export function getJwt() {
28
+ return readConfig().jwt ?? process.env.AGENT_CARDS_ADMIN_JWT;
29
+ }
30
+ export function getEmail() {
31
+ return readConfig().email;
32
+ }
33
+ /** Remove stored auth (jwt + email) so user can log in as someone else. */
34
+ export function clearAuth() {
35
+ const cfg = readConfig();
36
+ delete cfg.jwt;
37
+ delete cfg.email;
38
+ writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2), { mode: 0o600 });
39
+ }
40
+ export function getLastApiKey() {
41
+ return readConfig().lastApiKey;
42
+ }
43
+ export function saveLastApiKey(key) {
44
+ writeConfig({ lastApiKey: key });
45
+ }
46
+ /** Guard: exit with message if not logged in. */
47
+ export function requireAuth() {
48
+ if (!getJwt()) {
49
+ console.log(chalk.red('Not logged in. Run: agent-cards-admin login'));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;AAS/D,SAAS,UAAU;IACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAA6B;IACvD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,GAAG,CAAC,MAAM;QACV,wDAAwD,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,UAAU,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,EAAE,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,GAAG,CAAC;IACf,OAAO,GAAG,CAAC,KAAK,CAAC;IACjB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAC,UAAU,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function poll<T>(fn: () => Promise<T | null>, opts?: {
2
+ intervalMs?: number;
3
+ timeoutMs?: number;
4
+ }): Promise<T>;
5
+ //# sourceMappingURL=poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../../src/lib/poll.ts"],"names":[],"mappings":"AAAA,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAC3B,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,OAAO,CAAC,CAAC,CAAC,CAWZ"}
@@ -0,0 +1,12 @@
1
+ export async function poll(fn, opts = {}) {
2
+ const { intervalMs = 2000, timeoutMs = 300_000 } = opts;
3
+ const deadline = Date.now() + timeoutMs;
4
+ while (Date.now() < deadline) {
5
+ const result = await fn();
6
+ if (result !== null)
7
+ return result;
8
+ await new Promise((r) => setTimeout(r, intervalMs));
9
+ }
10
+ throw new Error('Timed out waiting for response');
11
+ }
12
+ //# sourceMappingURL=poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../src/lib/poll.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAA2B,EAC3B,OAAoD,EAAE;IAEtD,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAExC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACnC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "agent-cards-admin",
3
+ "version": "0.1.0",
4
+ "description": "Admin CLI for managing B2B organizations, API keys, and members",
5
+ "type": "module",
6
+ "bin": {
7
+ "agent-cards-admin": "dist/bin/agent-cards-admin.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "engines": {
13
+ "node": ">=18"
14
+ },
15
+ "scripts": {
16
+ "dev": "tsx bin/agent-cards-admin.ts",
17
+ "build": "tsc && cp package.json dist/package.json && chmod +x dist/bin/agent-cards-admin.js",
18
+ "prepublishOnly": "pnpm build"
19
+ },
20
+ "dependencies": {
21
+ "chalk": "^5.3.0",
22
+ "cli-table3": "^0.6.3",
23
+ "commander": "^12.0.0",
24
+ "inquirer": "^9.2.15",
25
+ "ora": "^8.2.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/inquirer": "^9.0.7",
29
+ "@types/node": "^22.0.0",
30
+ "tsx": "^4.7.1",
31
+ "typescript": "^5.4.2"
32
+ }
33
+ }