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,75 @@
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 } from '../../lib/config.js';
6
+ export function printSandboxBanner() {
7
+ console.log('');
8
+ console.log(chalk.yellow.bold(' SANDBOX MODE') + chalk.yellow(' — All API keys are sandbox-only (sk_test_*)'));
9
+ console.log('');
10
+ }
11
+ export async function createKey(opts) {
12
+ requireAuth();
13
+ printSandboxBanner();
14
+ let orgId = opts.org;
15
+ let keyName = opts.name;
16
+ if (!orgId) {
17
+ const spinner = ora('Loading organizations...').start();
18
+ const { organizations } = await api('/orgs');
19
+ spinner.stop();
20
+ if (organizations.length === 0) {
21
+ console.log(chalk.red('No organizations found. Create one first: agent-cards-admin orgs create'));
22
+ return;
23
+ }
24
+ const { selectedOrg } = await inquirer.prompt([
25
+ {
26
+ type: 'list',
27
+ name: 'selectedOrg',
28
+ message: 'Select organization:',
29
+ choices: organizations.map((o) => ({
30
+ name: `${o.name} (${o.billingEmail})`,
31
+ value: o.id,
32
+ })),
33
+ },
34
+ ]);
35
+ orgId = selectedOrg;
36
+ }
37
+ if (!keyName) {
38
+ const answers = await inquirer.prompt([
39
+ {
40
+ type: 'input',
41
+ name: 'keyName',
42
+ message: 'Key name (e.g. "production", "ci-pipeline"):',
43
+ validate: (v) => v.trim().length > 0 || 'Key name is required',
44
+ },
45
+ ]);
46
+ keyName = answers.keyName;
47
+ }
48
+ const { confirmed } = await inquirer.prompt([
49
+ {
50
+ type: 'confirm',
51
+ name: 'confirmed',
52
+ message: `Create sandbox API key "${keyName}" for this org?`,
53
+ default: true,
54
+ },
55
+ ]);
56
+ if (!confirmed) {
57
+ console.log(chalk.dim('Cancelled.'));
58
+ return;
59
+ }
60
+ const spinner = ora('Creating API key...').start();
61
+ const result = await api(`/orgs/${orgId}/keys`, {
62
+ method: 'POST',
63
+ body: { name: keyName },
64
+ });
65
+ spinner.succeed(chalk.green('API key created'));
66
+ console.log('');
67
+ console.log(chalk.yellow.bold(' WARNING: Save this key now. You will not see it again.'));
68
+ console.log('');
69
+ console.log(` ${chalk.bold('Key')} ${chalk.cyan(result.key)}`);
70
+ console.log(` ${chalk.bold('ID')} ${result.id}`);
71
+ console.log(` ${chalk.bold('Prefix')} ${result.keyPrefix}`);
72
+ console.log(` ${chalk.bold('Name')} ${result.name}`);
73
+ console.log('');
74
+ }
75
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/keys/create.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAkBlD,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAChH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAqC;IACnE,WAAW,EAAE,CAAC;IACd,kBAAkB,EAAE,CAAC;IAErB,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAExB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,CAA2B,OAAO,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC5C;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,GAAG;oBACrC,KAAK,EAAE,CAAC,CAAC,EAAE;iBACZ,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;QACH,KAAK,GAAG,WAAW,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,8CAA8C;gBACvD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB;aACvE;SACF,CAAC,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,2BAA2B,OAAO,iBAAiB;YAC5D,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEnD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAoB,SAAS,KAAK,OAAO,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function listKeys(orgId: string): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/list.ts"],"names":[],"mappings":"AAgBA,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC3D"}
@@ -0,0 +1,34 @@
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
+ import { printSandboxBanner } from './create.js';
7
+ export async function listKeys(orgId) {
8
+ requireAuth();
9
+ printSandboxBanner();
10
+ const spinner = ora('Fetching API keys...').start();
11
+ const { keys } = await api(`/orgs/${orgId}/keys`);
12
+ spinner.stop();
13
+ if (keys.length === 0) {
14
+ console.log(chalk.dim('No API keys for this organization. Run: agent-cards-admin keys create'));
15
+ return;
16
+ }
17
+ const table = new Table({
18
+ head: ['ID', 'Prefix', 'Name', 'Status', 'Last Used', 'Created'],
19
+ style: { head: ['cyan'] },
20
+ });
21
+ for (const key of keys) {
22
+ const statusColor = key.status === 'active' ? chalk.green : key.status === 'revoked' ? chalk.red : chalk.dim;
23
+ table.push([
24
+ key.id,
25
+ key.keyPrefix,
26
+ key.name,
27
+ statusColor(key.status),
28
+ key.lastUsedAt ? new Date(key.lastUsedAt).toLocaleString() : chalk.dim('never'),
29
+ new Date(key.createdAt).toLocaleDateString(),
30
+ ]);
31
+ }
32
+ console.log(table.toString());
33
+ }
34
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/keys/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;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAa;IAC1C,WAAW,EAAE,CAAC;IACd,kBAAkB,EAAE,CAAC;IAErB,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAqB,SAAS,KAAK,OAAO,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;QAChE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,WAAW,GACf,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAC3F,KAAK,CAAC,IAAI,CAAC;YACT,GAAG,CAAC,EAAE;YACN,GAAG,CAAC,SAAS;YACb,GAAG,CAAC,IAAI;YACR,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YACvB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/E,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,2 @@
1
+ export declare function revokeKey(): Promise<void>;
2
+ //# sourceMappingURL=revoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/revoke.ts"],"names":[],"mappings":"AAsBA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAoE/C"}
@@ -0,0 +1,65 @@
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 } from '../../lib/config.js';
6
+ export async function revokeKey() {
7
+ requireAuth();
8
+ // Step 1: Pick an organization
9
+ const orgSpinner = ora('Loading organizations...').start();
10
+ const { organizations } = await api('/orgs');
11
+ orgSpinner.stop();
12
+ if (organizations.length === 0) {
13
+ console.log(chalk.red('No organizations found.'));
14
+ return;
15
+ }
16
+ const { selectedOrg } = await inquirer.prompt([
17
+ {
18
+ type: 'list',
19
+ name: 'selectedOrg',
20
+ message: 'Select organization:',
21
+ choices: organizations.map((o) => ({
22
+ name: `${o.name} (${o.billingEmail})`,
23
+ value: o.id,
24
+ })),
25
+ },
26
+ ]);
27
+ // Step 2: Pick an active key
28
+ const keySpinner = ora('Loading API keys...').start();
29
+ const { keys } = await api(`/orgs/${selectedOrg}/keys`);
30
+ keySpinner.stop();
31
+ const activeKeys = keys.filter((k) => k.status === 'active');
32
+ if (activeKeys.length === 0) {
33
+ console.log(chalk.dim('No active API keys for this organization.'));
34
+ return;
35
+ }
36
+ const { selectedKey } = await inquirer.prompt([
37
+ {
38
+ type: 'list',
39
+ name: 'selectedKey',
40
+ message: 'Select key to revoke:',
41
+ choices: activeKeys.map((k) => ({
42
+ name: `${k.keyPrefix} — ${k.name}`,
43
+ value: k.id,
44
+ })),
45
+ },
46
+ ]);
47
+ const keyToRevoke = activeKeys.find((k) => k.id === selectedKey);
48
+ // Step 3: Confirm
49
+ const { confirmed } = await inquirer.prompt([
50
+ {
51
+ type: 'confirm',
52
+ name: 'confirmed',
53
+ message: `Revoke key ${chalk.bold(keyToRevoke.keyPrefix)} (${keyToRevoke.name})? This cannot be undone.`,
54
+ default: false,
55
+ },
56
+ ]);
57
+ if (!confirmed) {
58
+ console.log(chalk.dim('Cancelled.'));
59
+ return;
60
+ }
61
+ const spinner = ora('Revoking key...').start();
62
+ await api(`/orgs/${selectedOrg}/keys/${selectedKey}`, { method: 'DELETE' });
63
+ spinner.succeed(chalk.green(`Key ${keyToRevoke.keyPrefix} revoked`));
64
+ }
65
+ //# sourceMappingURL=revoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../../../src/commands/keys/revoke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function rotateKey(): Promise<void>;
2
+ //# sourceMappingURL=rotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/rotate.ts"],"names":[],"mappings":"AA+BA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAgF/C"}
@@ -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 } from '../../lib/config.js';
6
+ export async function rotateKey() {
7
+ requireAuth();
8
+ // Step 1: Pick an organization
9
+ const orgSpinner = ora('Loading organizations...').start();
10
+ const { organizations } = await api('/orgs');
11
+ orgSpinner.stop();
12
+ if (organizations.length === 0) {
13
+ console.log(chalk.red('No organizations found.'));
14
+ return;
15
+ }
16
+ const { selectedOrg } = await inquirer.prompt([
17
+ {
18
+ type: 'list',
19
+ name: 'selectedOrg',
20
+ message: 'Select organization:',
21
+ choices: organizations.map((o) => ({
22
+ name: `${o.name} (${o.billingEmail})`,
23
+ value: o.id,
24
+ })),
25
+ },
26
+ ]);
27
+ // Step 2: Pick an active key
28
+ const keySpinner = ora('Loading API keys...').start();
29
+ const { keys } = await api(`/orgs/${selectedOrg}/keys`);
30
+ keySpinner.stop();
31
+ const activeKeys = keys.filter((k) => k.status === 'active');
32
+ if (activeKeys.length === 0) {
33
+ console.log(chalk.dim('No active API keys for this organization.'));
34
+ return;
35
+ }
36
+ const { selectedKey } = await inquirer.prompt([
37
+ {
38
+ type: 'list',
39
+ name: 'selectedKey',
40
+ message: 'Select key to rotate:',
41
+ choices: activeKeys.map((k) => ({
42
+ name: `${k.keyPrefix} — ${k.name}`,
43
+ value: k.id,
44
+ })),
45
+ },
46
+ ]);
47
+ const keyToRotate = activeKeys.find((k) => k.id === selectedKey);
48
+ // Step 3: Confirm
49
+ const { confirmed } = await inquirer.prompt([
50
+ {
51
+ type: 'confirm',
52
+ name: 'confirmed',
53
+ message: `Rotate key ${chalk.bold(keyToRotate.keyPrefix)} (${keyToRotate.name})? The old key will stop working immediately.`,
54
+ default: false,
55
+ },
56
+ ]);
57
+ if (!confirmed) {
58
+ console.log(chalk.dim('Cancelled.'));
59
+ return;
60
+ }
61
+ const spinner = ora('Rotating key...').start();
62
+ const result = await api(`/orgs/${selectedOrg}/keys/${selectedKey}/rotate`, { method: 'POST' });
63
+ spinner.succeed(chalk.green('Key rotated'));
64
+ console.log('');
65
+ console.log(chalk.yellow.bold(' WARNING: Save this key now. You will not see it again.'));
66
+ console.log('');
67
+ console.log(` ${chalk.bold('Key')} ${chalk.cyan(result.key)}`);
68
+ console.log(` ${chalk.bold('ID')} ${result.id}`);
69
+ console.log(` ${chalk.bold('Prefix')} ${result.keyPrefix}`);
70
+ console.log(` ${chalk.bold('Name')} ${result.name}`);
71
+ console.log('');
72
+ }
73
+ //# sourceMappingURL=rotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../../../src/commands/keys/rotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function login(): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"AAiBA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAmD3C"}
@@ -0,0 +1,63 @@
1
+ import inquirer from 'inquirer';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import { api } from '../lib/api.js';
5
+ import { writeConfig, clearAuth, getJwt } from '../lib/config.js';
6
+ import { poll } from '../lib/poll.js';
7
+ async function getCurrentUserEmail() {
8
+ if (!getJwt())
9
+ return null;
10
+ try {
11
+ const res = await api('/auth/me');
12
+ return res.email ?? null;
13
+ }
14
+ catch {
15
+ return null;
16
+ }
17
+ }
18
+ export async function login() {
19
+ const currentEmail = await getCurrentUserEmail();
20
+ if (currentEmail) {
21
+ const { logoutFirst } = await inquirer.prompt([
22
+ {
23
+ type: 'confirm',
24
+ name: 'logoutFirst',
25
+ message: `You are already logged in as ${chalk.cyan(currentEmail)}. Log out first?`,
26
+ default: true,
27
+ },
28
+ ]);
29
+ if (!logoutFirst) {
30
+ console.log(chalk.dim('Login cancelled.'));
31
+ return;
32
+ }
33
+ clearAuth();
34
+ }
35
+ const { email } = await inquirer.prompt([
36
+ {
37
+ type: 'input',
38
+ name: 'email',
39
+ message: 'Enter your email address:',
40
+ validate: (v) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v) || 'Invalid email',
41
+ },
42
+ ]);
43
+ const spinner = ora('Sending magic link...').start();
44
+ const { sessionId } = await api('/auth/signup', {
45
+ method: 'POST',
46
+ body: { email },
47
+ });
48
+ spinner.succeed(`Magic link sent to ${chalk.cyan(email)}`);
49
+ console.log(chalk.dim('Check your inbox and click the link to continue...'));
50
+ spinner.start('Waiting for verification...');
51
+ const result = await poll(async () => {
52
+ const res = await api('/auth/me', {
53
+ magicToken: sessionId,
54
+ });
55
+ if (res.status === 'verified' && res.jwt)
56
+ return res;
57
+ return null;
58
+ });
59
+ writeConfig({ email: result.email ?? email, jwt: result.jwt });
60
+ spinner.succeed(chalk.green(`Signed in as ${chalk.bold(email)}`));
61
+ console.log(chalk.dim('Credentials saved to ~/.agent-cards-admin.json'));
62
+ }
63
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logout(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAe5C"}
@@ -0,0 +1,18 @@
1
+ import chalk from 'chalk';
2
+ import { getJwt, getEmail, clearAuth } from '../lib/config.js';
3
+ export async function logout() {
4
+ const jwt = getJwt();
5
+ if (!jwt) {
6
+ console.log(chalk.dim('Not logged in.'));
7
+ return;
8
+ }
9
+ const email = getEmail();
10
+ clearAuth();
11
+ if (email) {
12
+ console.log(chalk.green(`Logged out from ${chalk.bold(email)}.`));
13
+ }
14
+ else {
15
+ console.log(chalk.green('Logged out successfully.'));
16
+ }
17
+ }
18
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,SAAS,EAAE,CAAC;IAEZ,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function addMember(opts: {
2
+ org?: string;
3
+ email?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/members/add.ts"],"names":[],"mappings":"AAsBA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsErF"}
@@ -0,0 +1,66 @@
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 } from '../../lib/config.js';
6
+ export async function addMember(opts) {
7
+ requireAuth();
8
+ let orgId = opts.org;
9
+ let email = opts.email;
10
+ if (!orgId) {
11
+ const spinner = ora('Loading organizations...').start();
12
+ const { organizations } = await api('/orgs');
13
+ spinner.stop();
14
+ if (organizations.length === 0) {
15
+ console.log(chalk.red('No organizations found. Create one first: agent-cards-admin orgs create'));
16
+ return;
17
+ }
18
+ const { selectedOrg } = await inquirer.prompt([
19
+ {
20
+ type: 'list',
21
+ name: 'selectedOrg',
22
+ message: 'Select organization:',
23
+ choices: organizations.map((o) => ({
24
+ name: `${o.name} (${o.billingEmail})`,
25
+ value: o.id,
26
+ })),
27
+ },
28
+ ]);
29
+ orgId = selectedOrg;
30
+ }
31
+ if (!email) {
32
+ const answers = await inquirer.prompt([
33
+ {
34
+ type: 'input',
35
+ name: 'email',
36
+ message: 'Member email:',
37
+ validate: (v) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v) || 'Enter a valid email address',
38
+ },
39
+ ]);
40
+ email = answers.email;
41
+ }
42
+ const { confirmed } = await inquirer.prompt([
43
+ {
44
+ type: 'confirm',
45
+ name: 'confirmed',
46
+ message: `Add ${email} as admin to this organization?`,
47
+ default: true,
48
+ },
49
+ ]);
50
+ if (!confirmed) {
51
+ console.log(chalk.dim('Cancelled.'));
52
+ return;
53
+ }
54
+ const spinner = ora('Adding member...').start();
55
+ const member = await api(`/orgs/${orgId}/members`, {
56
+ method: 'POST',
57
+ body: { email },
58
+ });
59
+ spinner.succeed(chalk.green('Member added'));
60
+ console.log('');
61
+ console.log(` ${chalk.bold('Member ID')} ${member.id}`);
62
+ console.log(` ${chalk.bold('Email')} ${member.email}`);
63
+ console.log(` ${chalk.bold('Role')} ${member.role}`);
64
+ console.log('');
65
+ }
66
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/members/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function listMembers(orgId: string): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/members/list.ts"],"names":[],"mappings":"AAcA,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9D"}
@@ -0,0 +1,29 @@
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 listMembers(orgId) {
7
+ requireAuth();
8
+ const spinner = ora('Fetching members...').start();
9
+ const { members } = await api(`/orgs/${orgId}/members`);
10
+ spinner.stop();
11
+ if (members.length === 0) {
12
+ console.log(chalk.dim('No members in this organization. Run: agent-cards-admin members add'));
13
+ return;
14
+ }
15
+ const table = new Table({
16
+ head: ['ID', 'Email', 'Role', 'Added'],
17
+ style: { head: ['cyan'] },
18
+ });
19
+ for (const m of members) {
20
+ table.push([
21
+ m.id,
22
+ m.email,
23
+ m.role,
24
+ new Date(m.createdAt).toLocaleDateString(),
25
+ ]);
26
+ }
27
+ console.log(table.toString());
28
+ }
29
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/members/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,WAAW,CAAC,KAAa;IAC7C,WAAW,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;IACnD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAwB,SAAS,KAAK,UAAU,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC;YACT,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI;YACN,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function removeMember(): Promise<void>;
2
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../../src/commands/members/remove.ts"],"names":[],"mappings":"AAqBA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAmElD"}
@@ -0,0 +1,64 @@
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 } from '../../lib/config.js';
6
+ export async function removeMember() {
7
+ requireAuth();
8
+ // Step 1: Pick an organization
9
+ const orgSpinner = ora('Loading organizations...').start();
10
+ const { organizations } = await api('/orgs');
11
+ orgSpinner.stop();
12
+ if (organizations.length === 0) {
13
+ console.log(chalk.red('No organizations found.'));
14
+ return;
15
+ }
16
+ const { selectedOrg } = await inquirer.prompt([
17
+ {
18
+ type: 'list',
19
+ name: 'selectedOrg',
20
+ message: 'Select organization:',
21
+ choices: organizations.map((o) => ({
22
+ name: `${o.name} (${o.billingEmail})`,
23
+ value: o.id,
24
+ })),
25
+ },
26
+ ]);
27
+ // Step 2: Pick a member
28
+ const memberSpinner = ora('Loading members...').start();
29
+ const { members } = await api(`/orgs/${selectedOrg}/members`);
30
+ memberSpinner.stop();
31
+ if (members.length === 0) {
32
+ console.log(chalk.dim('No members in this organization.'));
33
+ return;
34
+ }
35
+ const { selectedMember } = await inquirer.prompt([
36
+ {
37
+ type: 'list',
38
+ name: 'selectedMember',
39
+ message: 'Select member to remove:',
40
+ choices: members.map((m) => ({
41
+ name: `${m.email} (${m.role})`,
42
+ value: m.id,
43
+ })),
44
+ },
45
+ ]);
46
+ const memberToRemove = members.find((m) => m.id === selectedMember);
47
+ // Step 3: Confirm
48
+ const { confirmed } = await inquirer.prompt([
49
+ {
50
+ type: 'confirm',
51
+ name: 'confirmed',
52
+ message: `Remove ${chalk.bold(memberToRemove.email)} from this organization?`,
53
+ default: false,
54
+ },
55
+ ]);
56
+ if (!confirmed) {
57
+ console.log(chalk.dim('Cancelled.'));
58
+ return;
59
+ }
60
+ const spinner = ora('Removing member...').start();
61
+ await api(`/orgs/${selectedOrg}/members/${selectedMember}`, { method: 'DELETE' });
62
+ spinner.succeed(chalk.green(`${memberToRemove.email} removed`));
63
+ }
64
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../../src/commands/members/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function createOrg(opts: {
2
+ name?: string;
3
+ email?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/orgs/create.ts"],"names":[],"mappings":"AAeA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EtF"}