agentaos 0.2.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 (183) hide show
  1. package/LICENSE +199 -0
  2. package/README.md +249 -0
  3. package/dist/cli/commands/admin.command.d.ts +3 -0
  4. package/dist/cli/commands/admin.command.d.ts.map +1 -0
  5. package/dist/cli/commands/admin.command.js +415 -0
  6. package/dist/cli/commands/admin.command.js.map +1 -0
  7. package/dist/cli/commands/balance.command.d.ts +3 -0
  8. package/dist/cli/commands/balance.command.d.ts.map +1 -0
  9. package/dist/cli/commands/balance.command.js +65 -0
  10. package/dist/cli/commands/balance.command.js.map +1 -0
  11. package/dist/cli/commands/deploy.command.d.ts +3 -0
  12. package/dist/cli/commands/deploy.command.d.ts.map +1 -0
  13. package/dist/cli/commands/deploy.command.js +101 -0
  14. package/dist/cli/commands/deploy.command.js.map +1 -0
  15. package/dist/cli/commands/info.command.d.ts +3 -0
  16. package/dist/cli/commands/info.command.d.ts.map +1 -0
  17. package/dist/cli/commands/info.command.js +30 -0
  18. package/dist/cli/commands/info.command.js.map +1 -0
  19. package/dist/cli/commands/init.command.d.ts +3 -0
  20. package/dist/cli/commands/init.command.d.ts.map +1 -0
  21. package/dist/cli/commands/init.command.js +364 -0
  22. package/dist/cli/commands/init.command.js.map +1 -0
  23. package/dist/cli/commands/link.command.d.ts +3 -0
  24. package/dist/cli/commands/link.command.d.ts.map +1 -0
  25. package/dist/cli/commands/link.command.js +111 -0
  26. package/dist/cli/commands/link.command.js.map +1 -0
  27. package/dist/cli/commands/login.command.d.ts +4 -0
  28. package/dist/cli/commands/login.command.d.ts.map +1 -0
  29. package/dist/cli/commands/login.command.js +149 -0
  30. package/dist/cli/commands/login.command.js.map +1 -0
  31. package/dist/cli/commands/network.command.d.ts +3 -0
  32. package/dist/cli/commands/network.command.d.ts.map +1 -0
  33. package/dist/cli/commands/network.command.js +206 -0
  34. package/dist/cli/commands/network.command.js.map +1 -0
  35. package/dist/cli/commands/proxy.command.d.ts +3 -0
  36. package/dist/cli/commands/proxy.command.d.ts.map +1 -0
  37. package/dist/cli/commands/proxy.command.js +248 -0
  38. package/dist/cli/commands/proxy.command.js.map +1 -0
  39. package/dist/cli/commands/receive.command.d.ts +3 -0
  40. package/dist/cli/commands/receive.command.d.ts.map +1 -0
  41. package/dist/cli/commands/receive.command.js +360 -0
  42. package/dist/cli/commands/receive.command.js.map +1 -0
  43. package/dist/cli/commands/send.command.d.ts +3 -0
  44. package/dist/cli/commands/send.command.d.ts.map +1 -0
  45. package/dist/cli/commands/send.command.js +83 -0
  46. package/dist/cli/commands/send.command.js.map +1 -0
  47. package/dist/cli/commands/sign.command.d.ts +3 -0
  48. package/dist/cli/commands/sign.command.d.ts.map +1 -0
  49. package/dist/cli/commands/sign.command.js +53 -0
  50. package/dist/cli/commands/sign.command.js.map +1 -0
  51. package/dist/cli/commands/status.command.d.ts +3 -0
  52. package/dist/cli/commands/status.command.d.ts.map +1 -0
  53. package/dist/cli/commands/status.command.js +109 -0
  54. package/dist/cli/commands/status.command.js.map +1 -0
  55. package/dist/cli/index.d.ts +2 -0
  56. package/dist/cli/index.d.ts.map +1 -0
  57. package/dist/cli/index.js +50 -0
  58. package/dist/cli/index.js.map +1 -0
  59. package/dist/cli/theme.d.ts +35 -0
  60. package/dist/cli/theme.d.ts.map +1 -0
  61. package/dist/cli/theme.js +96 -0
  62. package/dist/cli/theme.js.map +1 -0
  63. package/dist/index.d.ts +3 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +20 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/__tests__/transfer-crypto.test.d.ts +2 -0
  68. package/dist/lib/__tests__/transfer-crypto.test.d.ts.map +1 -0
  69. package/dist/lib/__tests__/transfer-crypto.test.js +151 -0
  70. package/dist/lib/__tests__/transfer-crypto.test.js.map +1 -0
  71. package/dist/lib/authenticated-fetch.d.ts +6 -0
  72. package/dist/lib/authenticated-fetch.d.ts.map +1 -0
  73. package/dist/lib/authenticated-fetch.js +74 -0
  74. package/dist/lib/authenticated-fetch.js.map +1 -0
  75. package/dist/lib/config.d.ts +42 -0
  76. package/dist/lib/config.d.ts.map +1 -0
  77. package/dist/lib/config.js +163 -0
  78. package/dist/lib/config.js.map +1 -0
  79. package/dist/lib/erc20-abi.d.ts +43 -0
  80. package/dist/lib/erc20-abi.d.ts.map +1 -0
  81. package/dist/lib/erc20-abi.js +34 -0
  82. package/dist/lib/erc20-abi.js.map +1 -0
  83. package/dist/lib/errors.d.ts +12 -0
  84. package/dist/lib/errors.d.ts.map +1 -0
  85. package/dist/lib/errors.js +23 -0
  86. package/dist/lib/errors.js.map +1 -0
  87. package/dist/lib/keychain.d.ts +11 -0
  88. package/dist/lib/keychain.d.ts.map +1 -0
  89. package/dist/lib/keychain.js +216 -0
  90. package/dist/lib/keychain.js.map +1 -0
  91. package/dist/lib/policy-conversions.d.ts +19 -0
  92. package/dist/lib/policy-conversions.d.ts.map +1 -0
  93. package/dist/lib/policy-conversions.js +62 -0
  94. package/dist/lib/policy-conversions.js.map +1 -0
  95. package/dist/lib/signer-manager.d.ts +17 -0
  96. package/dist/lib/signer-manager.d.ts.map +1 -0
  97. package/dist/lib/signer-manager.js +80 -0
  98. package/dist/lib/signer-manager.js.map +1 -0
  99. package/dist/lib/transfer-crypto.d.ts +36 -0
  100. package/dist/lib/transfer-crypto.d.ts.map +1 -0
  101. package/dist/lib/transfer-crypto.js +109 -0
  102. package/dist/lib/transfer-crypto.js.map +1 -0
  103. package/dist/lib/x402-client.d.ts +63 -0
  104. package/dist/lib/x402-client.d.ts.map +1 -0
  105. package/dist/lib/x402-client.js +236 -0
  106. package/dist/lib/x402-client.js.map +1 -0
  107. package/dist/mcp/index.d.ts +6 -0
  108. package/dist/mcp/index.d.ts.map +1 -0
  109. package/dist/mcp/index.js +73 -0
  110. package/dist/mcp/index.js.map +1 -0
  111. package/dist/mcp/tools/call-contract.d.ts +4 -0
  112. package/dist/mcp/tools/call-contract.d.ts.map +1 -0
  113. package/dist/mcp/tools/call-contract.js +68 -0
  114. package/dist/mcp/tools/call-contract.js.map +1 -0
  115. package/dist/mcp/tools/execute.d.ts +4 -0
  116. package/dist/mcp/tools/execute.d.ts.map +1 -0
  117. package/dist/mcp/tools/execute.js +59 -0
  118. package/dist/mcp/tools/execute.js.map +1 -0
  119. package/dist/mcp/tools/get-audit-log.d.ts +4 -0
  120. package/dist/mcp/tools/get-audit-log.d.ts.map +1 -0
  121. package/dist/mcp/tools/get-audit-log.js +85 -0
  122. package/dist/mcp/tools/get-audit-log.js.map +1 -0
  123. package/dist/mcp/tools/get-balances.d.ts +4 -0
  124. package/dist/mcp/tools/get-balances.d.ts.map +1 -0
  125. package/dist/mcp/tools/get-balances.js +84 -0
  126. package/dist/mcp/tools/get-balances.js.map +1 -0
  127. package/dist/mcp/tools/get-status.d.ts +4 -0
  128. package/dist/mcp/tools/get-status.d.ts.map +1 -0
  129. package/dist/mcp/tools/get-status.js +66 -0
  130. package/dist/mcp/tools/get-status.js.map +1 -0
  131. package/dist/mcp/tools/list-networks.d.ts +4 -0
  132. package/dist/mcp/tools/list-networks.d.ts.map +1 -0
  133. package/dist/mcp/tools/list-networks.js +36 -0
  134. package/dist/mcp/tools/list-networks.js.map +1 -0
  135. package/dist/mcp/tools/list-signers.d.ts +4 -0
  136. package/dist/mcp/tools/list-signers.d.ts.map +1 -0
  137. package/dist/mcp/tools/list-signers.js +36 -0
  138. package/dist/mcp/tools/list-signers.js.map +1 -0
  139. package/dist/mcp/tools/read-contract.d.ts +4 -0
  140. package/dist/mcp/tools/read-contract.d.ts.map +1 -0
  141. package/dist/mcp/tools/read-contract.js +62 -0
  142. package/dist/mcp/tools/read-contract.js.map +1 -0
  143. package/dist/mcp/tools/resolve-address.d.ts +4 -0
  144. package/dist/mcp/tools/resolve-address.d.ts.map +1 -0
  145. package/dist/mcp/tools/resolve-address.js +37 -0
  146. package/dist/mcp/tools/resolve-address.js.map +1 -0
  147. package/dist/mcp/tools/send-eth.d.ts +4 -0
  148. package/dist/mcp/tools/send-eth.d.ts.map +1 -0
  149. package/dist/mcp/tools/send-eth.js +52 -0
  150. package/dist/mcp/tools/send-eth.js.map +1 -0
  151. package/dist/mcp/tools/send-token.d.ts +4 -0
  152. package/dist/mcp/tools/send-token.d.ts.map +1 -0
  153. package/dist/mcp/tools/send-token.js +102 -0
  154. package/dist/mcp/tools/send-token.js.map +1 -0
  155. package/dist/mcp/tools/sign-message.d.ts +4 -0
  156. package/dist/mcp/tools/sign-message.d.ts.map +1 -0
  157. package/dist/mcp/tools/sign-message.js +33 -0
  158. package/dist/mcp/tools/sign-message.js.map +1 -0
  159. package/dist/mcp/tools/sign-typed-data.d.ts +4 -0
  160. package/dist/mcp/tools/sign-typed-data.d.ts.map +1 -0
  161. package/dist/mcp/tools/sign-typed-data.js +48 -0
  162. package/dist/mcp/tools/sign-typed-data.js.map +1 -0
  163. package/dist/mcp/tools/simulate.d.ts +4 -0
  164. package/dist/mcp/tools/simulate.d.ts.map +1 -0
  165. package/dist/mcp/tools/simulate.js +54 -0
  166. package/dist/mcp/tools/simulate.js.map +1 -0
  167. package/dist/mcp/tools/wallet-overview.d.ts +4 -0
  168. package/dist/mcp/tools/wallet-overview.d.ts.map +1 -0
  169. package/dist/mcp/tools/wallet-overview.js +109 -0
  170. package/dist/mcp/tools/wallet-overview.js.map +1 -0
  171. package/dist/mcp/tools/x402-check.d.ts +3 -0
  172. package/dist/mcp/tools/x402-check.d.ts.map +1 -0
  173. package/dist/mcp/tools/x402-check.js +44 -0
  174. package/dist/mcp/tools/x402-check.js.map +1 -0
  175. package/dist/mcp/tools/x402-discover.d.ts +3 -0
  176. package/dist/mcp/tools/x402-discover.d.ts.map +1 -0
  177. package/dist/mcp/tools/x402-discover.js +42 -0
  178. package/dist/mcp/tools/x402-discover.js.map +1 -0
  179. package/dist/mcp/tools/x402-fetch.d.ts +4 -0
  180. package/dist/mcp/tools/x402-fetch.d.ts.map +1 -0
  181. package/dist/mcp/tools/x402-fetch.js +45 -0
  182. package/dist/mcp/tools/x402-fetch.js.map +1 -0
  183. package/package.json +68 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AAIjE,eAAO,MAAM,WAAW,SA2BtB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Command } from 'commander';
2
+ import { getSignerConfigPath, loadSignerConfig } from '../../lib/config.js';
3
+ import { brand, brandBold, dim, failMark } from '../theme.js';
4
+ export const infoCommand = new Command('info')
5
+ .description('Show full wallet details (copyable)')
6
+ .argument('[name]', 'Wallet name')
7
+ .action(async (name, _options, command) => {
8
+ let config;
9
+ try {
10
+ config = loadSignerConfig(name ?? command.optsWithGlobals().signer);
11
+ }
12
+ catch (error) {
13
+ const message = error instanceof Error ? error.message : 'Unknown error';
14
+ console.error(`\n ${failMark(message)}\n`);
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ console.log('');
19
+ console.log(` ${brand('●')} ${brandBold(config.signerName)}`);
20
+ console.log('');
21
+ console.log(` ${dim('Address')} ${config.ethAddress}`);
22
+ console.log(` ${dim('API Key')} ${config.apiKey.slice(0, 12)}…`);
23
+ console.log(` ${dim('Policy')} ${config.serverUrl}`);
24
+ if (config.signerId) {
25
+ console.log(` ${dim('Account ID')} ${config.signerId}`);
26
+ }
27
+ console.log(` ${dim('Config')} ${getSignerConfigPath(config.signerName)}`);
28
+ console.log('');
29
+ });
30
+ //# sourceMappingURL=info.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.command.js","sourceRoot":"","sources":["../../../src/cli/commands/info.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA+B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAqB,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC5C,WAAW,CAAC,qCAAqC,CAAC;KAClD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;KACjC,MAAM,CACN,KAAK,EAAE,IAAwB,EAAE,QAAiC,EAAE,OAAoB,EAAE,EAAE;IAC3F,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACJ,MAAM,GAAG,gBAAgB,CAAC,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,QAAQ,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC,CACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const initCommand: Command;
3
+ //# sourceMappingURL=init.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoEpC,eAAO,MAAM,WAAW,SAwDrB,CAAC"}
@@ -0,0 +1,364 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { createInterface } from 'node:readline';
3
+ import { input, password, select } from '@inquirer/prompts';
4
+ import chalk from 'chalk';
5
+ import { Command } from 'commander';
6
+ import ora from 'ora';
7
+ import { createClientFromConfig, getDefaultSignerName, getSignerConfigPath, listSigners, loadSignerConfig, saveSignerConfig, setDefaultSigner, validateSignerName, } from '../../lib/config.js';
8
+ import { getSession, isKeychainAvailable, storeUserShare } from '../../lib/keychain.js';
9
+ import { BRAND_BANNER, brand, brandBold, brandDot, dim, failMark, hint, promptTheme, section, success, successMark, } from '../theme.js';
10
+ // ---------------------------------------------------------------------------
11
+ // Visual helpers
12
+ // ---------------------------------------------------------------------------
13
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ANSI escape stripping is intentional
14
+ const ANSI_RE = /\u001B\[[0-9;]*m/g;
15
+ function pad(str, width) {
16
+ const visible = str.replace(ANSI_RE, '');
17
+ return str + ' '.repeat(Math.max(0, width - visible.length));
18
+ }
19
+ function fmtAddr(address) {
20
+ if (!address || address.length < 10)
21
+ return dim('—');
22
+ return dim(`${address.slice(0, 6)}…${address.slice(-4)}`);
23
+ }
24
+ function walletCard(name, address, extra) {
25
+ console.log('');
26
+ console.log(` ${brand('●')} ${brandBold(name)}`);
27
+ console.log(` ${dim(address)}`);
28
+ if (extra)
29
+ console.log(` ${dim(extra)}`);
30
+ }
31
+ function step(icon, text) {
32
+ console.log(` ${icon} ${text}`);
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // Command
36
+ // ---------------------------------------------------------------------------
37
+ export const initCommand = new Command('init')
38
+ .description('Set up your AgentaOS wallet')
39
+ .action(async () => {
40
+ console.log(BRAND_BANNER);
41
+ try {
42
+ const existing = listSigners();
43
+ const defaultName = getDefaultSignerName();
44
+ const choices = [
45
+ {
46
+ name: 'Create a new wallet',
47
+ value: 'create',
48
+ description: 'Get started — takes about 10 seconds',
49
+ },
50
+ {
51
+ name: 'I already have a wallet',
52
+ value: 'import',
53
+ description: 'Connect using an API Key and API Secret',
54
+ },
55
+ ];
56
+ if (existing.length > 1) {
57
+ choices.push({
58
+ name: 'Switch active wallet',
59
+ value: 'switch',
60
+ description: `Current: ${defaultName ?? 'none'}`,
61
+ });
62
+ }
63
+ const choice = await select({
64
+ message: 'What would you like to do?',
65
+ choices,
66
+ loop: false,
67
+ theme: promptTheme,
68
+ });
69
+ switch (choice) {
70
+ case 'create':
71
+ await handleCreate();
72
+ break;
73
+ case 'import':
74
+ await handleImport();
75
+ break;
76
+ case 'switch':
77
+ await handleSwitch();
78
+ break;
79
+ }
80
+ }
81
+ catch (error) {
82
+ if (error instanceof Error && error.name === 'ExitPromptError') {
83
+ console.log(dim('\n Cancelled.\n'));
84
+ return;
85
+ }
86
+ const message = error instanceof Error ? error.message : 'Unknown error';
87
+ console.error(`\n ${failMark(message)}\n`);
88
+ process.exitCode = 1;
89
+ }
90
+ });
91
+ // ---------------------------------------------------------------------------
92
+ // Create
93
+ // ---------------------------------------------------------------------------
94
+ async function handleCreate() {
95
+ // ── 0. Require login ─────────────────────────────────────────────────
96
+ const token = await getSession();
97
+ if (!token) {
98
+ console.log('');
99
+ console.log(` ${failMark(`Not logged in. Run ${chalk.bold('agenta login')} first.`)}`);
100
+ console.log('');
101
+ process.exitCode = 1;
102
+ return;
103
+ }
104
+ // ── 1. Basics ─────────────────────────────────────────────────────────
105
+ section('Basics');
106
+ const name = await input({
107
+ message: 'Wallet name',
108
+ theme: promptTheme,
109
+ validate: (v) => {
110
+ const err = validateSignerName(v);
111
+ if (err)
112
+ return err;
113
+ if (existsSync(getSignerConfigPath(v)))
114
+ return `"${v}" already exists. Pick a different name.`;
115
+ return true;
116
+ },
117
+ });
118
+ const serverUrl = process.env.AGENTA_SERVER ?? 'https://api.agentaos.ai';
119
+ // ── 2. Security ───────────────────────────────────────────────────────
120
+ section('Security');
121
+ hint('Your recovery key lets you manage policies and sign without the server.');
122
+ const keychainOk = await isKeychainAvailable();
123
+ let storage = 'file';
124
+ if (keychainOk) {
125
+ console.log('');
126
+ storage = await select({
127
+ message: 'Recovery key storage',
128
+ choices: [
129
+ {
130
+ name: 'System keychain (recommended)',
131
+ value: 'keychain',
132
+ description: 'Encrypted by your OS, Touch ID protected',
133
+ },
134
+ {
135
+ name: 'Local file',
136
+ value: 'file',
137
+ description: `Saved in ${getSignerConfigPath(name).replace(/\.json$/, '.user-share')}`,
138
+ },
139
+ ],
140
+ loop: false,
141
+ theme: promptTheme,
142
+ });
143
+ }
144
+ else {
145
+ hint('System keychain not available — recovery key will be saved as a local file.');
146
+ }
147
+ // ── 3. Generate ───────────────────────────────────────────────────────
148
+ section('Creating wallet');
149
+ hint('Running distributed key generation — this takes a few seconds.');
150
+ console.log('');
151
+ const spinner = ora({ text: 'Generating wallet…', indent: 2 }).start();
152
+ const url = `${serverUrl.replace(/\/+$/, '')}/api/v1/signers`;
153
+ const response = await fetch(url, {
154
+ method: 'POST',
155
+ headers: {
156
+ 'Content-Type': 'application/json',
157
+ Authorization: `Bearer ${token}`,
158
+ },
159
+ body: JSON.stringify({ name }),
160
+ signal: AbortSignal.timeout(120_000),
161
+ });
162
+ if (!response.ok) {
163
+ const text = await response.text();
164
+ spinner.fail('Failed');
165
+ throw new Error(`Server returned ${response.status}: ${text}`);
166
+ }
167
+ const result = (await response.json());
168
+ spinner.succeed('Wallet created');
169
+ // ── Save everything ───────────────────────────────────────────────────
170
+ // Store user share FIRST — if this fails, we haven't written config yet.
171
+ // Once config is saved, the signer is "registered" locally.
172
+ await storeUserShare(name, result.userShare, storage);
173
+ const config = {
174
+ version: 1,
175
+ serverUrl,
176
+ apiKey: result.apiKey,
177
+ apiSecret: result.signerShare,
178
+ signerName: name,
179
+ ethAddress: result.ethAddress,
180
+ signerId: result.signerId,
181
+ createdAt: new Date().toISOString(),
182
+ };
183
+ saveSignerConfig(name, config);
184
+ setDefaultSigner(name);
185
+ // ── Summary ───────────────────────────────────────────────────────────
186
+ walletCard(name, result.ethAddress, `API key: ${result.apiKey.slice(0, 16)}…`);
187
+ console.log('');
188
+ step(successMark(storage === 'keychain' ? 'Recovery key → system keychain' : 'Recovery key → local file'), '');
189
+ step(successMark('Set as active wallet'), '');
190
+ console.log('');
191
+ console.log(` ${dim(`Config: ${getSignerConfigPath(name)}`)}`);
192
+ console.log('');
193
+ console.log(` ${success('Done!')} Run ${chalk.bold('agenta status')} to see your wallets.`);
194
+ console.log(` Run ${chalk.bold('agenta admin policies')} to manage policies.`);
195
+ console.log('');
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // Secret input — hidden with live character counter
199
+ // ---------------------------------------------------------------------------
200
+ function readSecret(label) {
201
+ return new Promise((resolve) => {
202
+ const rl = createInterface({ input: process.stdin, terminal: false });
203
+ // Mute stdin echo so the huge base64 blob never renders
204
+ if (process.stdin.isTTY)
205
+ process.stdin.setRawMode(true);
206
+ process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: `);
207
+ let buf = '';
208
+ const onData = (key) => {
209
+ const ch = key.toString();
210
+ // Enter
211
+ if (ch === '\r' || ch === '\n') {
212
+ if (process.stdin.isTTY)
213
+ process.stdin.setRawMode(false);
214
+ process.stdin.removeListener('data', onData);
215
+ rl.close();
216
+ // Clear the counter line and move to next line
217
+ process.stdout.write('\r\x1b[K');
218
+ process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: ${chalk.dim(`[${buf.length.toLocaleString()} chars]`)}\n`);
219
+ resolve(buf);
220
+ return;
221
+ }
222
+ // Ctrl+C
223
+ if (ch === '\x03') {
224
+ if (process.stdin.isTTY)
225
+ process.stdin.setRawMode(false);
226
+ rl.close();
227
+ process.exit(1);
228
+ }
229
+ // Backspace
230
+ if (ch === '\x7f' || ch === '\b') {
231
+ buf = buf.slice(0, -1);
232
+ }
233
+ else {
234
+ buf += ch;
235
+ }
236
+ // Rewrite the prompt with live char count
237
+ process.stdout.write('\r\x1b[K');
238
+ process.stdout.write(` ${chalk.bold('?')} ${chalk.bold(label)}: ${chalk.dim(`[${buf.length.toLocaleString()} chars]`)}`);
239
+ };
240
+ process.stdin.on('data', onData);
241
+ process.stdin.resume();
242
+ });
243
+ }
244
+ // ---------------------------------------------------------------------------
245
+ // Import
246
+ // ---------------------------------------------------------------------------
247
+ async function handleImport() {
248
+ // ── 1. Basics ─────────────────────────────────────────────────────────
249
+ section('Basics');
250
+ const name = await input({
251
+ message: 'Wallet name',
252
+ theme: promptTheme,
253
+ validate: (v) => {
254
+ const err = validateSignerName(v);
255
+ if (err)
256
+ return err;
257
+ if (existsSync(getSignerConfigPath(v)))
258
+ return `"${v}" already exists. Pick a different name.`;
259
+ return true;
260
+ },
261
+ });
262
+ const serverUrl = process.env.AGENTA_SERVER ?? 'https://api.agentaos.ai';
263
+ // ── 2. Credentials ───────────────────────────────────────────────────
264
+ section('Credentials');
265
+ hint('Find your API Key and API Secret in AgentaOS.');
266
+ console.log('');
267
+ const apiKey = await input({
268
+ message: 'API Key',
269
+ theme: promptTheme,
270
+ validate: (v) => (v.trim() ? true : 'API Key is required.'),
271
+ });
272
+ console.log('');
273
+ const apiSecret = await readSecret('API Secret');
274
+ if (!apiSecret)
275
+ throw new Error('API Secret is required.');
276
+ console.log(` ${chalk.green('✓')} Received ${apiSecret.length.toLocaleString()} chars ${chalk.dim(`(${apiSecret.slice(0, 8)}…${apiSecret.slice(-4)})`)}`);
277
+ // ── 3. Connect ────────────────────────────────────────────────────────
278
+ section('Connecting');
279
+ const spinner = ora({ text: 'Verifying with server…', indent: 2 }).start();
280
+ let signerId;
281
+ let ethAddress = '';
282
+ try {
283
+ const { api } = createClientFromConfig({ serverUrl, apiKey });
284
+ const signers = await api.listSigners();
285
+ const [s] = signers;
286
+ if (s) {
287
+ signerId = s.id;
288
+ ethAddress = s.ethAddress;
289
+ spinner.succeed('Connected');
290
+ }
291
+ else {
292
+ spinner.warn('Connected — no wallet found for this API key');
293
+ }
294
+ }
295
+ catch {
296
+ spinner.warn('Server unreachable — config saved, you can connect later');
297
+ }
298
+ const config = {
299
+ version: 1,
300
+ serverUrl,
301
+ apiKey,
302
+ apiSecret,
303
+ signerName: name,
304
+ ethAddress,
305
+ signerId,
306
+ createdAt: new Date().toISOString(),
307
+ };
308
+ saveSignerConfig(name, config);
309
+ setDefaultSigner(name);
310
+ if (ethAddress) {
311
+ walletCard(name, ethAddress);
312
+ }
313
+ console.log('');
314
+ step(successMark('Config saved'), '');
315
+ step(successMark('Set as active wallet'), '');
316
+ console.log('');
317
+ console.log(` ${dim(`Config: ${getSignerConfigPath(name)}`)}`);
318
+ console.log('');
319
+ console.log(` ${success('Done!')} Run ${chalk.bold('agenta status')} to see your wallets.`);
320
+ console.log('');
321
+ }
322
+ // ---------------------------------------------------------------------------
323
+ // Switch
324
+ // ---------------------------------------------------------------------------
325
+ async function handleSwitch() {
326
+ const current = listSigners();
327
+ if (current.length === 0) {
328
+ console.log(chalk.yellow('\n No wallets found. Create one first.\n'));
329
+ return;
330
+ }
331
+ const defaultName = getDefaultSignerName();
332
+ const nw = Math.max(4, ...current.map((n) => n.length)) + 3;
333
+ const choices = current.map((name) => {
334
+ const isCurrent = name === defaultName;
335
+ let addr = '';
336
+ try {
337
+ const config = loadSignerConfig(name);
338
+ if (config.ethAddress)
339
+ addr = fmtAddr(config.ethAddress);
340
+ }
341
+ catch {
342
+ // ignore
343
+ }
344
+ const dot = brandDot(isCurrent);
345
+ const label = isCurrent ? brandBold(name) : name;
346
+ const tag = isCurrent ? dim(' (current)') : '';
347
+ return {
348
+ name: `${dot} ${pad(label, nw)} ${addr}${tag}`,
349
+ value: name,
350
+ };
351
+ });
352
+ const selected = await select({
353
+ message: 'Switch to',
354
+ choices,
355
+ default: defaultName ?? undefined,
356
+ loop: false,
357
+ theme: promptTheme,
358
+ });
359
+ setDefaultSigner(selected);
360
+ console.log('');
361
+ step(successMark(`${chalk.bold(selected)} is now active`), '');
362
+ console.log('');
363
+ }
364
+ //# sourceMappingURL=init.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const linkCommand: Command;
3
+ //# sourceMappingURL=link.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/link.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,WAAW,SA2HrB,CAAC"}
@@ -0,0 +1,111 @@
1
+ import chalk from 'chalk';
2
+ import { Command } from 'commander';
3
+ import ora from 'ora';
4
+ import { loadSignerConfig, resolveSignerName } from '../../lib/config.js';
5
+ import { getSession, getUserShare } from '../../lib/keychain.js';
6
+ import { encryptShareForTransfer, generateTransferCode } from '../../lib/transfer-crypto.js';
7
+ import { brand, dim, failMark, hint, section, success } from '../theme.js';
8
+ // ---------------------------------------------------------------------------
9
+ // agenta link <signer> — Export share to another device via 6-word code
10
+ // ---------------------------------------------------------------------------
11
+ export const linkCommand = new Command('link')
12
+ .description('Send recovery key to AgentaOS (via 6-word transfer code)')
13
+ .argument('[signer]', 'Signer name')
14
+ .option('--server <url>', 'Server URL override')
15
+ .action(async (signerArg, opts) => {
16
+ try {
17
+ // 1. Require session
18
+ const token = await getSession();
19
+ if (!token) {
20
+ console.error(`\n ${failMark(`Not logged in. Run ${chalk.bold('agenta login')} first.`)}\n`);
21
+ process.exitCode = 1;
22
+ return;
23
+ }
24
+ const signerName = resolveSignerName(signerArg);
25
+ const config = loadSignerConfig(signerName);
26
+ const signerId = config.signerId;
27
+ if (!signerId) {
28
+ throw new Error('No signer ID in config. Re-run `agenta init` or add signerId to config.');
29
+ }
30
+ const baseUrl = (opts.server ?? config.serverUrl).replace(/\/+$/, '');
31
+ // 2. Read user share from keychain (triggers biometric)
32
+ section('Send to AgentaOS');
33
+ hint('Reading recovery key from keychain — you may be prompted for biometric auth.');
34
+ console.log('');
35
+ const spinner = ora({ text: 'Reading recovery key…', indent: 2 }).start();
36
+ const userShare = await getUserShare(signerName);
37
+ if (!userShare) {
38
+ spinner.fail('No recovery key found');
39
+ console.error(dim('\n Was this wallet created via `agenta init`?\n'));
40
+ process.exitCode = 1;
41
+ return;
42
+ }
43
+ spinner.succeed('Recovery key loaded');
44
+ // 3. Initiate transfer on server
45
+ const initSpinner = ora({ text: 'Creating transfer session…', indent: 2 }).start();
46
+ const initResponse = await fetch(`${baseUrl}/api/v1/auth/transfer/initiate`, {
47
+ method: 'POST',
48
+ headers: {
49
+ 'content-type': 'application/json',
50
+ authorization: `Bearer ${token}`,
51
+ },
52
+ body: JSON.stringify({ signerId, direction: 'cli_to_dashboard' }),
53
+ signal: AbortSignal.timeout(15_000),
54
+ });
55
+ if (!initResponse.ok) {
56
+ const text = await initResponse.text();
57
+ initSpinner.fail('Failed to create transfer');
58
+ throw new Error(`Server returned ${initResponse.status}: ${text}`);
59
+ }
60
+ const { transferId, expiresAt } = (await initResponse.json());
61
+ initSpinner.succeed('Transfer session created');
62
+ // 4. Generate 6-word code + encrypt share
63
+ const encryptSpinner = ora({ text: 'Encrypting share…', indent: 2 }).start();
64
+ const { words, transferKey } = generateTransferCode(transferId);
65
+ const shareBytes = Buffer.from(userShare, 'base64');
66
+ const encryptedPayload = await encryptShareForTransfer(shareBytes, transferKey);
67
+ // Wipe sensitive material
68
+ shareBytes.fill(0);
69
+ transferKey.fill(0);
70
+ encryptSpinner.succeed('Share encrypted');
71
+ // 5. Upload encrypted payload
72
+ const uploadSpinner = ora({ text: 'Uploading…', indent: 2 }).start();
73
+ const uploadResponse = await fetch(`${baseUrl}/api/v1/auth/transfer/${transferId}`, {
74
+ method: 'PATCH',
75
+ headers: {
76
+ 'content-type': 'application/json',
77
+ authorization: `Bearer ${token}`,
78
+ },
79
+ body: JSON.stringify({ encryptedPayload }),
80
+ signal: AbortSignal.timeout(15_000),
81
+ });
82
+ if (!uploadResponse.ok) {
83
+ const text = await uploadResponse.text();
84
+ uploadSpinner.fail('Failed to upload');
85
+ throw new Error(`Server returned ${uploadResponse.status}: ${text}`);
86
+ }
87
+ uploadSpinner.succeed('Transfer ready');
88
+ // 6. Display code
89
+ const expiresIn = Math.max(0, Math.round((new Date(expiresAt).getTime() - Date.now()) / 60_000));
90
+ console.log('');
91
+ console.log(` ${brand('Transfer code:')}`);
92
+ console.log('');
93
+ console.log(` ${chalk.bold.cyan(words.join(' '))}`);
94
+ console.log('');
95
+ console.log(` ${dim(`Expires in ${expiresIn} minutes. Enter this code in AgentaOS.`)}`);
96
+ console.log(` ${dim(`Open AgentaOS → click ${chalk.reset('Receive')} on the signer card.`)}`);
97
+ console.log('');
98
+ console.log(` ${success('✓')} ${dim('The code is single-use. Once claimed, it cannot be reused.')}`);
99
+ console.log('');
100
+ }
101
+ catch (error) {
102
+ if (error instanceof Error && error.name === 'ExitPromptError') {
103
+ console.log(dim('\n Cancelled.\n'));
104
+ return;
105
+ }
106
+ const message = error instanceof Error ? error.message : 'Unknown error';
107
+ console.error(`\n ${failMark(message)}\n`);
108
+ process.exitCode = 1;
109
+ }
110
+ });
111
+ //# sourceMappingURL=link.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.command.js","sourceRoot":"","sources":["../../../src/cli/commands/link.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3E,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC5C,WAAW,CAAC,0DAA0D,CAAC;KACvE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;KACnC,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,IAAyB,EAAE,EAAE;IAC1E,IAAI,CAAC;QACJ,qBAAqB;QACrB,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CACZ,OAAO,QAAQ,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAC9E,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC5F,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEtE,wDAAwD;QACxD,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5B,IAAI,CAAC,8EAA8E,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1E,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACR,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEvC,iCAAiC;QACjC,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACnF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gCAAgC,EAAE;YAC5E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,EAAE;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;YACjE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAG3D,CAAC;QACF,WAAW,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAEhD,0CAA0C;QAC1C,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC7E,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEhF,0BAA0B;QAC1B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE1C,8BAA8B;QAC9B,MAAM,aAAa,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACrE,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,yBAAyB,UAAU,EAAE,EAAE;YACnF,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,KAAK,EAAE;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;YAC1C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,mBAAmB,cAAc,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAExC,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CACjE,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,cAAc,SAAS,wCAAwC,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CACV,KAAK,GAAG,CAAC,yBAAyB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CACjF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACV,KAAK,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,4DAA4D,CAAC,EAAE,CACxF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACrC,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ export declare const logoutCommand: Command;
4
+ //# sourceMappingURL=login.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CpC,eAAO,MAAM,YAAY,SAqFtB,CAAC;AAMJ,eAAO,MAAM,aAAa,SAmCvB,CAAC"}