agent-cards-admin 0.1.0 → 0.2.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.
Files changed (78) hide show
  1. package/dist/bin/agent-cards-admin.js +71 -12
  2. package/dist/bin/agent-cards-admin.js.map +1 -1
  3. package/dist/package.json +2 -1
  4. package/dist/src/commands/cardholders/balance.d.ts +5 -0
  5. package/dist/src/commands/cardholders/balance.d.ts.map +1 -0
  6. package/dist/src/commands/cardholders/balance.js +13 -0
  7. package/dist/src/commands/cardholders/balance.js.map +1 -0
  8. package/dist/src/commands/cardholders/create.d.ts +4 -0
  9. package/dist/src/commands/cardholders/create.d.ts.map +1 -0
  10. package/dist/src/commands/cardholders/create.js +76 -0
  11. package/dist/src/commands/cardholders/create.js.map +1 -0
  12. package/dist/src/commands/cardholders/fund.d.ts +6 -0
  13. package/dist/src/commands/cardholders/fund.d.ts.map +1 -0
  14. package/dist/src/commands/cardholders/fund.js +20 -0
  15. package/dist/src/commands/cardholders/fund.js.map +1 -0
  16. package/dist/src/commands/cardholders/get.d.ts +4 -0
  17. package/dist/src/commands/cardholders/get.d.ts.map +1 -0
  18. package/dist/src/commands/cardholders/get.js +46 -0
  19. package/dist/src/commands/cardholders/get.js.map +1 -0
  20. package/dist/src/commands/cardholders/list.d.ts +4 -0
  21. package/dist/src/commands/cardholders/list.d.ts.map +1 -0
  22. package/dist/src/commands/cardholders/list.js +28 -0
  23. package/dist/src/commands/cardholders/list.js.map +1 -0
  24. package/dist/src/commands/cards/close.d.ts +1 -1
  25. package/dist/src/commands/cards/close.d.ts.map +1 -1
  26. package/dist/src/commands/cards/close.js +22 -0
  27. package/dist/src/commands/cards/close.js.map +1 -1
  28. package/dist/src/commands/cards/create.d.ts.map +1 -1
  29. package/dist/src/commands/cards/create.js +69 -10
  30. package/dist/src/commands/cards/create.js.map +1 -1
  31. package/dist/src/commands/cards/details.d.ts +1 -1
  32. package/dist/src/commands/cards/details.d.ts.map +1 -1
  33. package/dist/src/commands/cards/details.js +22 -0
  34. package/dist/src/commands/cards/details.js.map +1 -1
  35. package/dist/src/commands/cards/get.d.ts +1 -1
  36. package/dist/src/commands/cards/get.d.ts.map +1 -1
  37. package/dist/src/commands/cards/get.js +22 -0
  38. package/dist/src/commands/cards/get.js.map +1 -1
  39. package/dist/src/commands/keys/create.d.ts.map +1 -1
  40. package/dist/src/commands/keys/create.js +5 -1
  41. package/dist/src/commands/keys/create.js.map +1 -1
  42. package/dist/src/commands/keys/revoke.d.ts.map +1 -1
  43. package/dist/src/commands/keys/revoke.js +2 -1
  44. package/dist/src/commands/keys/revoke.js.map +1 -1
  45. package/dist/src/commands/keys/rotate.d.ts.map +1 -1
  46. package/dist/src/commands/keys/rotate.js +6 -1
  47. package/dist/src/commands/keys/rotate.js.map +1 -1
  48. package/dist/src/commands/keys/set.d.ts +4 -0
  49. package/dist/src/commands/keys/set.d.ts.map +1 -0
  50. package/dist/src/commands/keys/set.js +143 -0
  51. package/dist/src/commands/keys/set.js.map +1 -0
  52. package/dist/src/commands/members/add.d.ts.map +1 -1
  53. package/dist/src/commands/members/add.js +45 -5
  54. package/dist/src/commands/members/add.js.map +1 -1
  55. package/dist/src/commands/members/list.d.ts +1 -1
  56. package/dist/src/commands/members/list.d.ts.map +1 -1
  57. package/dist/src/commands/members/list.js +22 -0
  58. package/dist/src/commands/members/list.js.map +1 -1
  59. package/dist/src/commands/orgs/get.d.ts +1 -1
  60. package/dist/src/commands/orgs/get.d.ts.map +1 -1
  61. package/dist/src/commands/orgs/get.js +22 -0
  62. package/dist/src/commands/orgs/get.js.map +1 -1
  63. package/dist/src/commands/wallet/balance.d.ts.map +1 -1
  64. package/dist/src/commands/wallet/balance.js +24 -3
  65. package/dist/src/commands/wallet/balance.js.map +1 -1
  66. package/dist/src/commands/wallet/fund.d.ts +4 -0
  67. package/dist/src/commands/wallet/fund.d.ts.map +1 -0
  68. package/dist/src/commands/wallet/fund.js +68 -0
  69. package/dist/src/commands/wallet/fund.js.map +1 -0
  70. package/dist/src/lib/api.d.ts +1 -1
  71. package/dist/src/lib/api.d.ts.map +1 -1
  72. package/dist/src/lib/api.js +51 -8
  73. package/dist/src/lib/api.js.map +1 -1
  74. package/dist/src/lib/config.d.ts +20 -0
  75. package/dist/src/lib/config.d.ts.map +1 -1
  76. package/dist/src/lib/config.js +60 -1
  77. package/dist/src/lib/config.js.map +1 -1
  78. package/package.json +2 -1
@@ -1,3 +1,4 @@
1
+ import inquirer from 'inquirer';
1
2
  import Table from 'cli-table3';
2
3
  import chalk from 'chalk';
3
4
  import ora from 'ora';
@@ -5,6 +6,27 @@ import { api } from '../../lib/api.js';
5
6
  import { requireAuth } from '../../lib/config.js';
6
7
  export async function listMembers(orgId) {
7
8
  requireAuth();
9
+ if (!orgId) {
10
+ const spinner = ora('Loading organizations...').start();
11
+ const { organizations } = await api('/orgs');
12
+ spinner.stop();
13
+ if (organizations.length === 0) {
14
+ console.log(chalk.red('No organizations found. Create one first: agent-cards-admin orgs create'));
15
+ return;
16
+ }
17
+ const { selectedOrg } = await inquirer.prompt([
18
+ {
19
+ type: 'list',
20
+ name: 'selectedOrg',
21
+ message: 'Select organization:',
22
+ choices: organizations.map((o) => ({
23
+ name: `${o.name} (${o.billingEmail})`,
24
+ value: o.id,
25
+ })),
26
+ },
27
+ ]);
28
+ orgId = selectedOrg;
29
+ }
8
30
  const spinner = ora('Fetching members...').start();
9
31
  const { members } = await api(`/orgs/${orgId}/members`);
10
32
  spinner.stop();
@@ -1 +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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/members/list.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,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;AAiBlD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAc;IAC9C,WAAW,EAAE,CAAC;IAEd,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,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"}
@@ -1,2 +1,2 @@
1
- export declare function getOrg(orgId: string): Promise<void>;
1
+ export declare function getOrg(orgId?: string): Promise<void>;
2
2
  //# sourceMappingURL=get.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/orgs/get.ts"],"names":[],"mappings":"AAwBA,wBAAsB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C1D"}
@@ -1,9 +1,31 @@
1
+ import inquirer from 'inquirer';
1
2
  import chalk from 'chalk';
2
3
  import ora from 'ora';
3
4
  import { api } from '../../lib/api.js';
4
5
  import { requireAuth } from '../../lib/config.js';
5
6
  export async function getOrg(orgId) {
6
7
  requireAuth();
8
+ if (!orgId) {
9
+ const spinner = ora('Loading organizations...').start();
10
+ const { organizations } = await api('/orgs');
11
+ spinner.stop();
12
+ if (organizations.length === 0) {
13
+ console.log(chalk.red('No organizations found. Create one first: agent-cards-admin orgs create'));
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
+ orgId = selectedOrg;
28
+ }
7
29
  const spinner = ora('Fetching organization...').start();
8
30
  const org = await api(`/orgs/${orgId}`);
9
31
  spinner.stop();
@@ -1 +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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/orgs/get.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAYA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzE"}
@@ -1,13 +1,34 @@
1
+ import inquirer from 'inquirer';
1
2
  import chalk from 'chalk';
2
3
  import ora from 'ora';
3
4
  import { apiKeyApi, getOrPromptApiKey } from '../../lib/api.js';
4
5
  export async function walletBalance(opts) {
5
6
  const apiKey = await getOrPromptApiKey(opts.key);
6
- const spinner = ora('Fetching wallet balance...').start();
7
- const { balanceCents } = await apiKeyApi(apiKey, '/api/v1/wallet/balance');
7
+ const spinner = ora('Fetching cardholders...').start();
8
+ const { cardholders } = await apiKeyApi(apiKey, '/api/v1/cardholders');
8
9
  spinner.stop();
10
+ if (cardholders.length === 0) {
11
+ console.error(chalk.red('No cardholders found. Create one first with: cardholders create'));
12
+ process.exit(1);
13
+ }
14
+ const { cardholderId } = await inquirer.prompt([
15
+ {
16
+ type: 'list',
17
+ name: 'cardholderId',
18
+ message: 'Select cardholder',
19
+ choices: cardholders.map((ch) => ({
20
+ name: `${ch.firstName} ${ch.lastName}${ch.email ? ` (${ch.email})` : ''}`,
21
+ value: ch.id,
22
+ })),
23
+ },
24
+ ]);
25
+ const selected = cardholders.find((ch) => ch.id === cardholderId);
26
+ const balanceSpinner = ora('Fetching wallet balance...').start();
27
+ const { balanceCents } = await apiKeyApi(apiKey, `/api/v1/cardholders/${cardholderId}/wallet/balance`);
28
+ balanceSpinner.stop();
9
29
  console.log('');
10
- console.log(` ${chalk.bold('Balance')} ${chalk.green(`$${(balanceCents / 100).toFixed(2)}`)}`);
30
+ console.log(` ${chalk.bold('Cardholder')} ${selected.firstName} ${selected.lastName}`);
31
+ console.log(` ${chalk.bold('Balance')} ${chalk.green(`$${(balanceCents / 100).toFixed(2)}`)}`);
11
32
  console.log('');
12
33
  }
13
34
  //# sourceMappingURL=balance.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAShE,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,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;IACvD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAgC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACtG,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC7C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzE,KAAK,EAAE,EAAE,CAAC,EAAE;aACb,CAAC,CAAC;SACJ;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,YAAY,CAAE,CAAC;IAEnE,MAAM,cAAc,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,CACtC,MAAM,EACN,uBAAuB,YAAY,iBAAiB,CACrD,CAAC;IACF,cAAc,CAAC,IAAI,EAAE,CAAC;IAEtB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function walletFund(opts: {
2
+ key?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=fund.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fund.d.ts","sourceRoot":"","sources":["../../../../src/commands/wallet/fund.ts"],"names":[],"mappings":"AAuBA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEtE"}
@@ -0,0 +1,68 @@
1
+ import inquirer from 'inquirer';
2
+ import ora from 'ora';
3
+ import chalk from 'chalk';
4
+ import open from 'open';
5
+ import { apiKeyApi, getOrPromptApiKey } from '../../lib/api.js';
6
+ export async function walletFund(opts) {
7
+ const apiKey = await getOrPromptApiKey(opts.key);
8
+ const spinner = ora('Fetching cardholders...').start();
9
+ const { cardholders } = await apiKeyApi(apiKey, '/api/v1/cardholders');
10
+ spinner.stop();
11
+ if (cardholders.length === 0) {
12
+ console.error(chalk.red('No cardholders found. Create one first with: cardholders create'));
13
+ process.exit(1);
14
+ }
15
+ const { cardholderId } = await inquirer.prompt([
16
+ {
17
+ type: 'list',
18
+ name: 'cardholderId',
19
+ message: 'Select cardholder',
20
+ choices: cardholders.map((ch) => ({
21
+ name: `${ch.firstName} ${ch.lastName}${ch.email ? ` (${ch.email})` : ''}`,
22
+ value: ch.id,
23
+ })),
24
+ },
25
+ ]);
26
+ const { amountDollars } = await inquirer.prompt([
27
+ {
28
+ type: 'input',
29
+ name: 'amountDollars',
30
+ message: 'Amount in dollars (e.g. 25.00):',
31
+ validate: (v) => {
32
+ const n = parseFloat(v);
33
+ if (isNaN(n) || n <= 0)
34
+ return 'Enter a positive dollar amount';
35
+ return true;
36
+ },
37
+ },
38
+ ]);
39
+ const amountCents = Math.round(parseFloat(amountDollars) * 100);
40
+ const fundSpinner = ora('Creating funding session...').start();
41
+ const result = await apiKeyApi(apiKey, `/api/v1/cardholders/${cardholderId}/wallet/fund`, {
42
+ method: 'POST',
43
+ body: { amountCents },
44
+ });
45
+ fundSpinner.succeed(chalk.green('Funding session created'));
46
+ console.log('');
47
+ console.log(` Opening checkout: ${chalk.cyan(result.checkoutUrl)}`);
48
+ console.log('');
49
+ await open(result.checkoutUrl);
50
+ // Poll for payment completion
51
+ const pollSpinner = ora('Waiting for payment...').start();
52
+ const maxAttempts = 120;
53
+ for (let i = 0; i < maxAttempts; i++) {
54
+ await new Promise((r) => setTimeout(r, 1000));
55
+ const status = await apiKeyApi(apiKey, `/api/v1/cardholders/funding/status/${result.fundingSessionId}`);
56
+ if (status.status === 'succeeded') {
57
+ pollSpinner.succeed(chalk.green(`Payment received — wallet balance: $${((status.walletBalanceCents ?? 0) / 100).toFixed(2)}`));
58
+ return;
59
+ }
60
+ if (status.status === 'failed') {
61
+ pollSpinner.fail(chalk.red('Payment failed'));
62
+ process.exit(1);
63
+ }
64
+ }
65
+ pollSpinner.fail(chalk.red('Timed out waiting for payment'));
66
+ process.exit(1);
67
+ }
68
+ //# sourceMappingURL=fund.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fund.js","sourceRoot":"","sources":["../../../../src/commands/wallet/fund.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export declare function api<T>(path: string, opts?: FetchOptions): Promise<T>;
19
19
  */
20
20
  export declare function apiKeyApi<T>(apiKey: string, path: string, opts?: FetchOptions): Promise<T>;
21
21
  /**
22
- * Resolve an API key from: --key flag > saved config > interactive prompt.
22
+ * Resolve an API key from: --key flag > active stored key > interactive selection > prompt.
23
23
  * Saves the key to config for future use.
24
24
  */
25
25
  export declare function getOrPromptApiKey(keyFlag?: string): Promise<string>;
@@ -1 +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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAcA,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,CAoEzE"}
@@ -1,5 +1,6 @@
1
1
  import inquirer from 'inquirer';
2
- import { getApiUrl, getJwt, getLastApiKey, saveLastApiKey } from './config.js';
2
+ import chalk from 'chalk';
3
+ import { getApiUrl, getJwt, getStoredKeys, getActiveKey, addStoredKey, setActiveKey, } from './config.js';
3
4
  export class ApiError extends Error {
4
5
  status;
5
6
  body;
@@ -91,18 +92,51 @@ export async function apiKeyApi(apiKey, path, opts = {}) {
91
92
  return data;
92
93
  }
93
94
  /**
94
- * Resolve an API key from: --key flag > saved config > interactive prompt.
95
+ * Resolve an API key from: --key flag > active stored key > interactive selection > prompt.
95
96
  * Saves the key to config for future use.
96
97
  */
97
98
  export async function getOrPromptApiKey(keyFlag) {
99
+ // 1. --key flag takes priority
98
100
  if (keyFlag) {
99
- saveLastApiKey(keyFlag);
101
+ const stored = {
102
+ id: `flag-${Date.now()}`,
103
+ key: keyFlag,
104
+ keyPrefix: keyFlag.slice(0, 12) + '...',
105
+ name: 'from --key flag',
106
+ orgId: 'unknown',
107
+ };
108
+ addStoredKey(stored);
109
+ setActiveKey(stored.id);
100
110
  return keyFlag;
101
111
  }
102
- const saved = getLastApiKey();
103
- if (saved) {
104
- return saved;
112
+ // 2. Active key in stored keys
113
+ const active = getActiveKey();
114
+ if (active) {
115
+ return active.key;
105
116
  }
117
+ // 3. Multiple stored keys → let user pick
118
+ const storedKeys = getStoredKeys();
119
+ if (storedKeys.length > 0) {
120
+ const choices = storedKeys.map((k) => ({
121
+ name: `${k.keyPrefix} — ${k.name}${k.orgName ? ` (${k.orgName})` : ''}`,
122
+ value: k.id,
123
+ }));
124
+ choices.push({ name: chalk.dim('Enter a different key'), value: '__manual__' });
125
+ const { choice } = await inquirer.prompt([
126
+ {
127
+ type: 'list',
128
+ name: 'choice',
129
+ message: 'Select an API key:',
130
+ choices,
131
+ },
132
+ ]);
133
+ if (choice !== '__manual__') {
134
+ setActiveKey(choice);
135
+ const picked = storedKeys.find((k) => k.id === choice);
136
+ return picked.key;
137
+ }
138
+ }
139
+ // 4. Fall back to paste prompt
106
140
  const { apiKey } = await inquirer.prompt([
107
141
  {
108
142
  type: 'password',
@@ -112,7 +146,16 @@ export async function getOrPromptApiKey(keyFlag) {
112
146
  validate: (v) => v.trim().length > 0 || 'API key is required',
113
147
  },
114
148
  ]);
115
- saveLastApiKey(apiKey);
116
- return apiKey;
149
+ const key = apiKey.trim();
150
+ const stored = {
151
+ id: `manual-${Date.now()}`,
152
+ key,
153
+ keyPrefix: key.slice(0, 12) + '...',
154
+ name: 'manually entered',
155
+ orgId: 'unknown',
156
+ };
157
+ addStoredKey(stored);
158
+ setActiveKey(stored.id);
159
+ return key;
117
160
  }
118
161
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQ/E,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAS;IACf,IAAI,CAA0B;IAE9B,YAAY,OAAe,EAAE,MAAc,EAAE,IAA6B;QACxE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAI,IAAY,EAAE,OAAqB,EAAE;IAChE,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAEhC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,GAAG;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IACpD,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;IAEhE,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,wDAAwD,CACtF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,EAAO,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,QAAQ,CACf,IAAY,CAAC,KAAK,IAAK,IAAY,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,EACpE,GAAG,CAAC,MAAM,EACV,IAA+B,CAChC,CAAC;IACJ,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,MAAc,EAAE,IAAY,EAAE,OAAqB,EAAE;IACtF,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;IAEhC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,UAAU,MAAM,EAAE;KACpC,CAAC;IAEF,IAAI,GAAa,CAAC;IAClB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACxD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,KAAK,CACb,0BAA0B,GAAG,wDAAwD,CACtF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,EAAO,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,QAAQ,CACf,IAAY,CAAC,KAAK,IAAK,IAAY,CAAC,OAAO,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,EACpE,GAAG,CAAC,MAAM,EACV,IAA+B,CAChC,CAAC;IACJ,CAAC;IAED,OAAO,IAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAgB;IACtD,IAAI,OAAO,EAAE,CAAC;QACZ,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,mCAAmC;YAC5C,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB;SACtE;KACF,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,18 @@
1
+ export interface StoredKey {
2
+ id: string;
3
+ key: string;
4
+ keyPrefix: string;
5
+ name: string;
6
+ orgId: string;
7
+ orgName?: string;
8
+ }
1
9
  interface AdminConfig {
2
10
  apiUrl?: string;
3
11
  jwt?: string;
4
12
  email?: string;
5
13
  lastApiKey?: string;
14
+ activeKeyId?: string;
15
+ storedKeys?: StoredKey[];
6
16
  }
7
17
  export declare function writeConfig(updates: Partial<AdminConfig>): void;
8
18
  export declare function getApiUrl(): string;
@@ -12,6 +22,16 @@ export declare function getEmail(): string | undefined;
12
22
  export declare function clearAuth(): void;
13
23
  export declare function getLastApiKey(): string | undefined;
14
24
  export declare function saveLastApiKey(key: string): void;
25
+ /** Return all stored keys, migrating legacy lastApiKey if needed. */
26
+ export declare function getStoredKeys(): StoredKey[];
27
+ /** Upsert a stored key by id. */
28
+ export declare function addStoredKey(key: StoredKey): void;
29
+ /** Set the active key by id, also updating lastApiKey for backward compat. */
30
+ export declare function setActiveKey(keyId: string): void;
31
+ /** Get the currently active stored key. */
32
+ export declare function getActiveKey(): StoredKey | undefined;
33
+ /** Remove a stored key by id. Clears activeKeyId if it matched. */
34
+ export declare function removeStoredKey(keyId: string): void;
15
35
  /** Guard: exit with message if not logged in. */
16
36
  export declare function requireAuth(): void;
17
37
  export {};
@@ -1 +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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,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;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;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,qEAAqE;AACrE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAkB3C;AAED,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAUjD;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMhD;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,IAAI,SAAS,GAAG,SAAS,CAKpD;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED,iDAAiD;AACjD,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
@@ -22,7 +22,7 @@ export function getApiUrl() {
22
22
  const cfg = readConfig();
23
23
  return (process.env.ADMIN_API_URL ??
24
24
  cfg.apiUrl ??
25
- 'https://backend-staging-production-d3e4.up.railway.app');
25
+ 'https://sandbox.api.agentcard.sh');
26
26
  }
27
27
  export function getJwt() {
28
28
  return readConfig().jwt ?? process.env.AGENT_CARDS_ADMIN_JWT;
@@ -43,6 +43,65 @@ export function getLastApiKey() {
43
43
  export function saveLastApiKey(key) {
44
44
  writeConfig({ lastApiKey: key });
45
45
  }
46
+ /** Return all stored keys, migrating legacy lastApiKey if needed. */
47
+ export function getStoredKeys() {
48
+ const cfg = readConfig();
49
+ if (cfg.storedKeys && cfg.storedKeys.length > 0)
50
+ return cfg.storedKeys;
51
+ // Migrate legacy lastApiKey
52
+ if (cfg.lastApiKey) {
53
+ const legacy = {
54
+ id: 'legacy',
55
+ key: cfg.lastApiKey,
56
+ keyPrefix: cfg.lastApiKey.slice(0, 12) + '...',
57
+ name: 'legacy key',
58
+ orgId: 'unknown',
59
+ };
60
+ writeConfig({ storedKeys: [legacy], activeKeyId: 'legacy' });
61
+ return [legacy];
62
+ }
63
+ return [];
64
+ }
65
+ /** Upsert a stored key by id. */
66
+ export function addStoredKey(key) {
67
+ const cfg = readConfig();
68
+ const keys = cfg.storedKeys ?? [];
69
+ const idx = keys.findIndex((k) => k.id === key.id);
70
+ if (idx >= 0) {
71
+ keys[idx] = key;
72
+ }
73
+ else {
74
+ keys.push(key);
75
+ }
76
+ writeConfig({ storedKeys: keys });
77
+ }
78
+ /** Set the active key by id, also updating lastApiKey for backward compat. */
79
+ export function setActiveKey(keyId) {
80
+ const keys = getStoredKeys();
81
+ const found = keys.find((k) => k.id === keyId);
82
+ const updates = { activeKeyId: keyId };
83
+ if (found)
84
+ updates.lastApiKey = found.key;
85
+ writeConfig(updates);
86
+ }
87
+ /** Get the currently active stored key. */
88
+ export function getActiveKey() {
89
+ const cfg = readConfig();
90
+ if (!cfg.activeKeyId)
91
+ return undefined;
92
+ const keys = cfg.storedKeys ?? [];
93
+ return keys.find((k) => k.id === cfg.activeKeyId);
94
+ }
95
+ /** Remove a stored key by id. Clears activeKeyId if it matched. */
96
+ export function removeStoredKey(keyId) {
97
+ const cfg = readConfig();
98
+ const keys = (cfg.storedKeys ?? []).filter((k) => k.id !== keyId);
99
+ const updates = { storedKeys: keys };
100
+ if (cfg.activeKeyId === keyId) {
101
+ updates.activeKeyId = undefined;
102
+ }
103
+ writeConfig(updates);
104
+ }
46
105
  /** Guard: exit with message if not logged in. */
47
106
  export function requireAuth() {
48
107
  if (!getJwt()) {
@@ -1 +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"}
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;AAoB/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,kCAAkC,CACnC,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,qEAAqE;AACrE,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IAEvE,4BAA4B;IAC5B,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,MAAM,GAAc;YACxB,EAAE,EAAE,QAAQ;YACZ,GAAG,EAAE,GAAG,CAAC,UAAU;YACnB,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;YAC9C,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,YAAY,CAAC,GAAc;IACzC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAyB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7D,IAAI,KAAK;QAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC;IAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;AACpD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAClE,MAAM,OAAO,GAAyB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,GAAG,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAClC,CAAC;IACD,WAAW,CAAC,OAAO,CAAC,CAAC;AACvB,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-cards-admin",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Admin CLI for managing B2B organizations, API keys, and members",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,6 +22,7 @@
22
22
  "cli-table3": "^0.6.3",
23
23
  "commander": "^12.0.0",
24
24
  "inquirer": "^9.2.15",
25
+ "open": "^10.1.0",
25
26
  "ora": "^8.2.0"
26
27
  },
27
28
  "devDependencies": {