arkna 2.0.1 → 3.0.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 (78) hide show
  1. package/dist/client.d.ts +257 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +948 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/diagnostics.d.ts +41 -0
  6. package/dist/diagnostics.d.ts.map +1 -0
  7. package/dist/diagnostics.js +146 -0
  8. package/dist/diagnostics.js.map +1 -0
  9. package/dist/enforcement.d.ts +67 -0
  10. package/dist/enforcement.d.ts.map +1 -0
  11. package/dist/enforcement.js +303 -0
  12. package/dist/enforcement.js.map +1 -0
  13. package/dist/index.d.ts +27 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +32 -27
  16. package/dist/index.js.map +1 -1
  17. package/dist/init.d.ts +74 -0
  18. package/dist/init.d.ts.map +1 -0
  19. package/dist/init.js +333 -0
  20. package/dist/init.js.map +1 -0
  21. package/dist/instrumentations/langchain.d.ts +79 -0
  22. package/dist/instrumentations/langchain.d.ts.map +1 -0
  23. package/dist/instrumentations/langchain.js +398 -0
  24. package/dist/instrumentations/langchain.js.map +1 -0
  25. package/dist/instrumentations/vercel-ai.d.ts +40 -0
  26. package/dist/instrumentations/vercel-ai.d.ts.map +1 -0
  27. package/dist/instrumentations/vercel-ai.js +212 -0
  28. package/dist/instrumentations/vercel-ai.js.map +1 -0
  29. package/dist/license.d.ts +89 -0
  30. package/dist/license.d.ts.map +1 -0
  31. package/dist/license.js +198 -0
  32. package/dist/license.js.map +1 -0
  33. package/dist/types.d.ts +402 -0
  34. package/dist/types.d.ts.map +1 -0
  35. package/dist/types.js +8 -0
  36. package/dist/types.js.map +1 -0
  37. package/package.json +23 -25
  38. package/bin/arkna.js +0 -2
  39. package/dist/commands/init.d.ts +0 -3
  40. package/dist/commands/init.d.ts.map +0 -1
  41. package/dist/commands/init.js +0 -276
  42. package/dist/commands/init.js.map +0 -1
  43. package/dist/commands/login.d.ts +0 -3
  44. package/dist/commands/login.d.ts.map +0 -1
  45. package/dist/commands/login.js +0 -289
  46. package/dist/commands/login.js.map +0 -1
  47. package/dist/commands/status.d.ts +0 -3
  48. package/dist/commands/status.d.ts.map +0 -1
  49. package/dist/commands/status.js +0 -108
  50. package/dist/commands/status.js.map +0 -1
  51. package/dist/commands/verify.d.ts +0 -3
  52. package/dist/commands/verify.d.ts.map +0 -1
  53. package/dist/commands/verify.js +0 -112
  54. package/dist/commands/verify.js.map +0 -1
  55. package/dist/lib/arkna-dir.d.ts +0 -12
  56. package/dist/lib/arkna-dir.d.ts.map +0 -1
  57. package/dist/lib/arkna-dir.js +0 -89
  58. package/dist/lib/arkna-dir.js.map +0 -1
  59. package/dist/lib/connectivity.d.ts +0 -31
  60. package/dist/lib/connectivity.d.ts.map +0 -1
  61. package/dist/lib/connectivity.js +0 -116
  62. package/dist/lib/connectivity.js.map +0 -1
  63. package/dist/lib/detect.d.ts +0 -35
  64. package/dist/lib/detect.d.ts.map +0 -1
  65. package/dist/lib/detect.js +0 -335
  66. package/dist/lib/detect.js.map +0 -1
  67. package/dist/lib/ui.d.ts +0 -28
  68. package/dist/lib/ui.d.ts.map +0 -1
  69. package/dist/lib/ui.js +0 -176
  70. package/dist/lib/ui.js.map +0 -1
  71. package/dist/lib/update-check.d.ts +0 -7
  72. package/dist/lib/update-check.d.ts.map +0 -1
  73. package/dist/lib/update-check.js +0 -94
  74. package/dist/lib/update-check.js.map +0 -1
  75. package/dist/lib/verify.d.ts +0 -15
  76. package/dist/lib/verify.d.ts.map +0 -1
  77. package/dist/lib/verify.js +0 -33
  78. package/dist/lib/verify.js.map +0 -1
@@ -1,276 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.initCommand = void 0;
40
- const commander_1 = require("commander");
41
- const child_process_1 = require("child_process");
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
- const inquirer_1 = __importDefault(require("inquirer"));
45
- const ui_1 = require("../lib/ui");
46
- const connectivity_1 = require("../lib/connectivity");
47
- const arkna_dir_1 = require("../lib/arkna-dir");
48
- const detect_1 = require("../lib/detect");
49
- const DEFAULT_URL = 'https://api.arkna.com.au';
50
- /**
51
- * Resolve ARKNA URL from env/config/default.
52
- */
53
- function resolveUrl() {
54
- if (process.env.ARKNA_URL)
55
- return process.env.ARKNA_URL;
56
- const envCreds = (0, arkna_dir_1.readArknaEnv)();
57
- if (envCreds?.url)
58
- return envCreds.url;
59
- return DEFAULT_URL;
60
- }
61
- /**
62
- * Resolve ARKNA token from env → .env → .arkna/.env → null.
63
- */
64
- function resolveExistingToken() {
65
- if (process.env.ARKNA_TOKEN)
66
- return process.env.ARKNA_TOKEN;
67
- // Check project .env
68
- const dotEnvPath = path.join(process.cwd(), '.env');
69
- if (fs.existsSync(dotEnvPath)) {
70
- const content = fs.readFileSync(dotEnvPath, 'utf-8');
71
- const match = content.match(/^ARKNA_TOKEN=(.+)$/m);
72
- if (match)
73
- return match[1].trim();
74
- }
75
- // Check .arkna/.env
76
- const arknaEnv = (0, arkna_dir_1.readArknaEnv)();
77
- if (arknaEnv?.token)
78
- return arknaEnv.token;
79
- return null;
80
- }
81
- /**
82
- * Add ARKNA_TOKEN to .env file (create or append).
83
- */
84
- function writeProjectEnv(token, url) {
85
- const dotEnvPath = path.join(process.cwd(), '.env');
86
- let content = '';
87
- if (fs.existsSync(dotEnvPath)) {
88
- content = fs.readFileSync(dotEnvPath, 'utf-8');
89
- // Replace existing token line
90
- if (/^ARKNA_TOKEN=.+$/m.test(content)) {
91
- content = content.replace(/^ARKNA_TOKEN=.+$/m, `ARKNA_TOKEN=${token}`);
92
- }
93
- else {
94
- content = content.trimEnd() + `\nARKNA_TOKEN=${token}\n`;
95
- }
96
- // Replace/add URL
97
- if (/^ARKNA_URL=.+$/m.test(content)) {
98
- content = content.replace(/^ARKNA_URL=.+$/m, `ARKNA_URL=${url}`);
99
- }
100
- else {
101
- content = content.trimEnd() + `\nARKNA_URL=${url}\n`;
102
- }
103
- }
104
- else {
105
- content = `# ARKNA — Agent Observability\nARKNA_URL=${url}\nARKNA_TOKEN=${token}\n`;
106
- }
107
- fs.writeFileSync(dotEnvPath, content);
108
- }
109
- /**
110
- * Ensure .env is listed in .gitignore.
111
- */
112
- function ensureGitignore() {
113
- const gitignorePath = path.join(process.cwd(), '.gitignore');
114
- if (fs.existsSync(gitignorePath)) {
115
- const content = fs.readFileSync(gitignorePath, 'utf-8');
116
- if (/^\.env$/m.test(content))
117
- return; // Already has .env
118
- fs.writeFileSync(gitignorePath, content.trimEnd() + '\n.env\n');
119
- }
120
- else {
121
- fs.writeFileSync(gitignorePath, '.env\n');
122
- }
123
- }
124
- /**
125
- * Inject init snippet into entry file.
126
- */
127
- function wireEntryFile(dir, entryFile, project) {
128
- const filePath = path.join(dir, entryFile);
129
- if (!fs.existsSync(filePath))
130
- return false;
131
- const content = fs.readFileSync(filePath, 'utf-8');
132
- // Check if already wired
133
- if (content.includes('arknaInit') || content.includes('arkna.init')) {
134
- return false; // Already wired
135
- }
136
- const snippet = project.runtime === 'node' && (0, detect_1.isCommonJS)(dir, entryFile)
137
- ? (0, detect_1.getRequireSnippet)()
138
- : (0, detect_1.getInitSnippet)(project.runtime);
139
- const injectionLine = (0, detect_1.findInjectionPoint)(content, project.runtime);
140
- const lines = content.split('\n');
141
- // Insert import + init call after last import
142
- lines.splice(injectionLine, 0, snippet.importLine, snippet.initLine, '');
143
- fs.writeFileSync(filePath, lines.join('\n'));
144
- return true;
145
- }
146
- // ── Main Command ────────────────────────────────────────────────────────────
147
- exports.initCommand = new commander_1.Command('init')
148
- .description('Set up ARKNA observability in your project')
149
- .option('-t, --token <token>', 'Integration token (skip prompt)')
150
- .option('-u, --url <url>', 'ARKNA API URL')
151
- .option('--skip-install', 'Skip SDK installation')
152
- .option('--skip-wire', 'Skip code injection')
153
- .action(async (options) => {
154
- (0, ui_1.banner)();
155
- const dir = process.cwd();
156
- const url = options.url || resolveUrl();
157
- // ── Phase 1: Detect Project ──────────────────────────────────────────
158
- const detectSpinner = (0, ui_1.startSpinner)('Detecting project...');
159
- const project = (0, detect_1.detectProject)(dir);
160
- detectSpinner.stop();
161
- if (project.runtime === 'unknown') {
162
- console.log(` ${(0, ui_1.warn)('!')} Could not detect project type`);
163
- console.log(` ${(0, ui_1.dim)('Expected: package.json (Node.js) or requirements.txt / pyproject.toml (Python)')}`);
164
- console.log('');
165
- }
166
- else {
167
- const sdkInfo = project.llmSdk !== 'unknown' ? ` (uses ${(0, detect_1.sdkLabel)(project.llmSdk)})` : '';
168
- console.log(` ${(0, ui_1.success)('✔')} Detected ${(0, ui_1.brand)((0, detect_1.runtimeLabel)(project.runtime))}${(0, ui_1.dim)(sdkInfo)}`);
169
- }
170
- // ── Phase 2: Collect Token ───────────────────────────────────────────
171
- let token = options.token || resolveExistingToken();
172
- if (token) {
173
- console.log(` ${(0, ui_1.success)('✔')} Token found`);
174
- }
175
- else {
176
- console.log('');
177
- const answer = await inquirer_1.default.prompt([{
178
- type: 'input',
179
- name: 'token',
180
- message: `Paste your integration token ${(0, ui_1.dim)('(get one at app.arkna.com.au/setup)')}:`,
181
- validate: (input) => {
182
- if (!input.trim())
183
- return 'Token is required';
184
- if (!input.trim().startsWith('intk_'))
185
- return 'Token must start with intk_';
186
- return true;
187
- },
188
- }]);
189
- token = answer.token.trim();
190
- }
191
- // Validate token format
192
- if (!token.startsWith('intk_')) {
193
- (0, ui_1.errorBox)('Invalid token format', [
194
- (0, ui_1.dim)('Token must start with intk_'),
195
- (0, ui_1.dim)('Get one at app.arkna.com.au/setup'),
196
- ]);
197
- process.exit(1);
198
- }
199
- // Validate token against API
200
- const tokenSpinner = (0, ui_1.startSpinner)('Verifying token...');
201
- const tokenResult = await (0, connectivity_1.checkTokenValid)(url, token);
202
- tokenSpinner.stop();
203
- if (!tokenResult.passed) {
204
- (0, ui_1.errorBox)('Token verification failed', [
205
- tokenResult.detail,
206
- (0, ui_1.dim)(`API: ${url}`),
207
- ]);
208
- process.exit(1);
209
- }
210
- console.log(` ${(0, ui_1.success)('✔')} Token verified`);
211
- // ── Phase 3: Install SDK ─────────────────────────────────────────────
212
- if (!options.skipInstall && project.runtime !== 'unknown') {
213
- if (project.sdkInstalled) {
214
- console.log(` ${(0, ui_1.success)('✔')} SDK already installed`);
215
- }
216
- else {
217
- const installCmd = (0, detect_1.getInstallCommand)(project.packageManager);
218
- const installSpinner = (0, ui_1.startSpinner)(`Installing SDK... (${installCmd})`);
219
- try {
220
- (0, child_process_1.execSync)(installCmd, { cwd: dir, stdio: 'pipe', timeout: 120000 });
221
- installSpinner.stop(`${(0, ui_1.success)('✔')} SDK installed`);
222
- }
223
- catch (err) {
224
- installSpinner.stop(`${(0, ui_1.fail)('✘')} SDK install failed`);
225
- console.log(` ${(0, ui_1.dim)(err.message || 'Unknown error')}`);
226
- console.log(` ${(0, ui_1.dim)('Run manually:')} ${(0, ui_1.brand)(installCmd)}`);
227
- console.log('');
228
- }
229
- }
230
- }
231
- // ── Phase 4: Wire Init Call ──────────────────────────────────────────
232
- console.log('');
233
- console.log(` ${(0, ui_1.brand)('Wiring ARKNA into your project...')}`);
234
- // Write token to .env
235
- writeProjectEnv(token, url);
236
- console.log(` ${(0, ui_1.success)('✔')} Added ARKNA_TOKEN to .env`);
237
- // Ensure .env in .gitignore
238
- ensureGitignore();
239
- // Also write to .arkna/.env for CLI tools
240
- (0, arkna_dir_1.writeTokenEnv)(url, token);
241
- // Inject init call into entry file
242
- if (!options.skipWire && project.entryFile && project.runtime !== 'unknown') {
243
- const wired = wireEntryFile(dir, project.entryFile, project);
244
- if (wired) {
245
- console.log(` ${(0, ui_1.success)('✔')} Added init() to ${project.entryFile}`);
246
- }
247
- else {
248
- console.log(` ${(0, ui_1.dim)('─')} ${project.entryFile} already has ARKNA init`);
249
- }
250
- }
251
- else if (!options.skipWire && !project.entryFile && project.runtime !== 'unknown') {
252
- const snippet = (0, detect_1.getInitSnippet)(project.runtime);
253
- console.log(` ${(0, ui_1.warn)('!')} No entry file found — add manually:`);
254
- console.log(` ${(0, ui_1.dim)(snippet.importLine)}`);
255
- console.log(` ${(0, ui_1.dim)(snippet.initLine)}`);
256
- }
257
- // ── Phase 5: Test Event ──────────────────────────────────────────────
258
- console.log('');
259
- const testSpinner = (0, ui_1.startSpinner)('Sending test event...');
260
- const testResult = await (0, connectivity_1.sendTestRun)(url, token);
261
- testSpinner.stop();
262
- (0, ui_1.resultLine)(testResult.passed, testResult.name, testResult.detail);
263
- // ── Done ─────────────────────────────────────────────────────────────
264
- if (testResult.passed) {
265
- (0, ui_1.successBox)('ARKNA is now recording', [
266
- `${(0, ui_1.dim)('Dashboard:')} ${(0, ui_1.brand)('app.arkna.com.au')}`,
267
- ]);
268
- }
269
- else {
270
- console.log('');
271
- console.log(` ${(0, ui_1.warn)('!')} Test event failed, but setup is complete.`);
272
- console.log(` ${(0, ui_1.dim)('Run')} ${(0, ui_1.brand)('arkna verify')} ${(0, ui_1.dim)('to diagnose.')}`);
273
- }
274
- console.log('');
275
- });
276
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const loginCommand: Command;
3
- //# sourceMappingURL=login.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,eAAO,MAAM,YAAY,SA8LrB,CAAC"}
@@ -1,289 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.loginCommand = void 0;
37
- const commander_1 = require("commander");
38
- const child_process_1 = require("child_process");
39
- const fs = __importStar(require("fs"));
40
- const path = __importStar(require("path"));
41
- const ui_1 = require("../lib/ui");
42
- const connectivity_1 = require("../lib/connectivity");
43
- const arkna_dir_1 = require("../lib/arkna-dir");
44
- /**
45
- * Resolve URL from (in priority order):
46
- * 1. --url flag
47
- * 2. ARKNA_URL env var
48
- * 3. .arkna/.env file
49
- * 4. Default
50
- */
51
- function resolveUrl(flagUrl) {
52
- if (flagUrl)
53
- return flagUrl;
54
- if (process.env.ARKNA_URL)
55
- return process.env.ARKNA_URL;
56
- const envCreds = (0, arkna_dir_1.readArknaEnv)();
57
- if (envCreds?.url)
58
- return envCreds.url;
59
- return 'https://api.arkna.com.au';
60
- }
61
- /**
62
- * Write token to .arkna/.env (creates directory if needed)
63
- */
64
- function writeTokenToEnv(url, token, baseDir) {
65
- const dir = path.join(baseDir || process.cwd(), '.arkna');
66
- fs.mkdirSync(dir, { recursive: true });
67
- const envPath = path.join(dir, '.env');
68
- const envContent = `# ARKNA Agent Enrollment — Environment Variables
69
- # This file is gitignored. Do NOT commit this file.
70
- # Token created via: arkna login
71
- ARKNA_URL=${url}
72
- ARKNA_TOKEN=${token}
73
- `;
74
- fs.writeFileSync(envPath, envContent);
75
- // Ensure .gitignore exists
76
- const gitignorePath = path.join(dir, '.gitignore');
77
- if (!fs.existsSync(gitignorePath)) {
78
- fs.writeFileSync(gitignorePath, `# .arkna/ contains secrets — never commit any of it\n*\n!.gitignore\n`);
79
- }
80
- }
81
- /**
82
- * Detect if we're in a headless environment (SSH, Docker, CI, no display)
83
- */
84
- function isHeadless() {
85
- // SSH session
86
- if (process.env.SSH_CONNECTION || process.env.SSH_TTY)
87
- return true;
88
- // CI environments
89
- if (process.env.CI || process.env.GITHUB_ACTIONS || process.env.GITLAB_CI)
90
- return true;
91
- // Docker / container
92
- if (process.env.container || process.env.DOCKER_CONTAINER)
93
- return true;
94
- // Linux without display
95
- if (process.platform === 'linux' && !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY)
96
- return true;
97
- return false;
98
- }
99
- /**
100
- * Try to open a URL in the default browser. Returns true if attempted.
101
- */
102
- function tryOpenBrowser(url) {
103
- if (isHeadless())
104
- return false;
105
- const cmd = process.platform === 'darwin'
106
- ? `open "${url}"`
107
- : process.platform === 'win32'
108
- ? `start "" "${url}"`
109
- : `xdg-open "${url}"`;
110
- (0, child_process_1.exec)(cmd, () => {
111
- // Silently fail — user can open manually
112
- });
113
- return true;
114
- }
115
- /**
116
- * Sleep for ms milliseconds
117
- */
118
- function sleep(ms) {
119
- return new Promise(resolve => setTimeout(resolve, ms));
120
- }
121
- exports.loginCommand = new commander_1.Command('login')
122
- .description('Authenticate the CLI via browser approval (no token pasting)')
123
- .option('-u, --url <url>', 'ARKNA gateway URL (or set ARKNA_URL env var)')
124
- .option('-n, --name <name>', 'Agent name (shown in token list)')
125
- .action(async (options) => {
126
- (0, ui_1.banner)();
127
- // ── Resolve URL ──────────────────────────────────────────────────────
128
- const url = resolveUrl(options.url);
129
- if (!url.startsWith('http://') && !url.startsWith('https://')) {
130
- (0, ui_1.errorBox)('Invalid gateway URL', [
131
- `Got: ${url}`,
132
- (0, ui_1.dim)('URL must start with http:// or https://'),
133
- ]);
134
- process.exit(1);
135
- }
136
- // ── Health check ─────────────────────────────────────────────────────
137
- const healthSpinner = (0, ui_1.startSpinner)('Checking gateway...');
138
- const health = await (0, connectivity_1.checkHealth)(url);
139
- healthSpinner.stop();
140
- if (!health.passed) {
141
- (0, ui_1.errorBox)('Gateway unreachable', [
142
- health.detail,
143
- (0, ui_1.dim)(`URL: ${url}`),
144
- ]);
145
- process.exit(1);
146
- }
147
- console.log(` ${(0, ui_1.brand)('✔')} Gateway reachable ${(0, ui_1.dim)(health.detail)}`);
148
- // ── Request device code ──────────────────────────────────────────────
149
- const codeSpinner = (0, ui_1.startSpinner)('Requesting device code...');
150
- let deviceCode;
151
- let verificationUri;
152
- let verificationUriComplete;
153
- try {
154
- const resp = await fetch(`${url}/api/auth/device/code`, {
155
- method: 'POST',
156
- headers: { 'Content-Type': 'application/json' },
157
- body: JSON.stringify({
158
- cli_platform: `${process.platform}-${process.arch}`,
159
- agent_name: options.name || undefined,
160
- }),
161
- });
162
- if (!resp.ok) {
163
- codeSpinner.stop();
164
- const err = await resp.json().catch(() => ({ error: 'Request failed' }));
165
- (0, ui_1.errorBox)('Failed to get device code', [
166
- String(err.error || `HTTP ${resp.status}`),
167
- ]);
168
- process.exit(1);
169
- }
170
- const data = await resp.json();
171
- deviceCode = data.device_code;
172
- verificationUri = data.verification_uri;
173
- verificationUriComplete = data.verification_uri_complete;
174
- codeSpinner.stop();
175
- }
176
- catch (err) {
177
- codeSpinner.stop();
178
- (0, ui_1.errorBox)('Failed to get device code', [
179
- err.message || 'Connection failed',
180
- ]);
181
- process.exit(1);
182
- }
183
- // ── Display code ────────────────────────────────────────────────────
184
- const headless = isHeadless();
185
- (0, ui_1.divider)();
186
- console.log('');
187
- console.log(` ${(0, ui_1.brand)('▲')} Go to:`);
188
- console.log(` ${(0, ui_1.brand)(verificationUri)}`);
189
- console.log('');
190
- console.log(` Enter code:`);
191
- console.log('');
192
- console.log(` ${(0, ui_1.brand)('┌──────────────┐')}`);
193
- console.log(` ${(0, ui_1.brand)('│')} ${(0, ui_1.brand)(deviceCode)} ${(0, ui_1.brand)('│')}`);
194
- console.log(` ${(0, ui_1.brand)('└──────────────┘')}`);
195
- console.log('');
196
- console.log(` ${(0, ui_1.dim)('Or open directly:')}`);
197
- console.log(` ${(0, ui_1.dim)(verificationUriComplete)}`);
198
- console.log('');
199
- (0, ui_1.divider)();
200
- // Try to open browser (skip on headless)
201
- const opened = tryOpenBrowser(verificationUriComplete);
202
- if (opened) {
203
- console.log(` ${(0, ui_1.dim)('Opening browser...')}`);
204
- }
205
- else {
206
- console.log(` ${(0, ui_1.dim)('Open the link above on any device, then approve.')}`);
207
- }
208
- // ── Poll for approval ────────────────────────────────────────────────
209
- const pollSpinner = (0, ui_1.startSpinner)('Waiting for approval... (Ctrl+C to cancel)');
210
- const maxAttempts = 180; // 15 minutes at 5s intervals
211
- let token = null;
212
- for (let attempt = 0; attempt < maxAttempts; attempt++) {
213
- await sleep(5000);
214
- try {
215
- const resp = await fetch(`${url}/api/auth/device/token`, {
216
- method: 'POST',
217
- headers: { 'Content-Type': 'application/json' },
218
- body: JSON.stringify({ device_code: deviceCode }),
219
- });
220
- if (resp.ok) {
221
- const data = await resp.json();
222
- token = data.token;
223
- break;
224
- }
225
- const body = await resp.json().catch(() => ({ error: 'unknown' }));
226
- const error = body.error;
227
- if (error === 'authorization_pending') {
228
- // Keep polling
229
- continue;
230
- }
231
- if (error === 'slow_down') {
232
- // Wait an extra 5s before next attempt
233
- await sleep(5000);
234
- continue;
235
- }
236
- // Terminal errors
237
- pollSpinner.stop();
238
- if (error === 'expired_token') {
239
- (0, ui_1.errorBox)('Code expired', [
240
- (0, ui_1.dim)('The 15-minute window has passed.'),
241
- (0, ui_1.dim)('Run `arkna login` again to get a new code.'),
242
- ]);
243
- }
244
- else if (error === 'access_denied') {
245
- (0, ui_1.errorBox)('Login denied', [
246
- (0, ui_1.dim)('The code was rejected in the browser.'),
247
- ]);
248
- }
249
- else {
250
- (0, ui_1.errorBox)('Login failed', [error || `HTTP ${resp.status}`]);
251
- }
252
- process.exit(1);
253
- }
254
- catch {
255
- // Network error — keep trying
256
- continue;
257
- }
258
- }
259
- pollSpinner.stop();
260
- if (!token) {
261
- (0, ui_1.errorBox)('Timed out', [
262
- (0, ui_1.dim)('No approval received within 15 minutes.'),
263
- (0, ui_1.dim)('Run `arkna login` again to retry.'),
264
- ]);
265
- process.exit(1);
266
- }
267
- // ── Write token ──────────────────────────────────────────────────────
268
- writeTokenToEnv(url, token);
269
- console.log('');
270
- (0, ui_1.successBox)('AUTHENTICATED', [
271
- `${(0, ui_1.dim)('Token:')} ${(0, ui_1.maskToken)(token)}`,
272
- `${(0, ui_1.dim)('Gateway:')} ${url}`,
273
- `${(0, ui_1.dim)('Saved to:')} .arkna/.env`,
274
- `${(0, ui_1.dim)('Expires:')} 30 days`,
275
- ]);
276
- // Warn if stale ARKNA_TOKEN env var will shadow the fresh token
277
- if (process.env.ARKNA_TOKEN && process.env.ARKNA_TOKEN !== token) {
278
- console.log('');
279
- console.log(` ${(0, ui_1.warn)('\u26A0')} ${(0, ui_1.warn)('ARKNA_TOKEN env var contains a different token.')}`);
280
- console.log(` ${(0, ui_1.dim)(' The CLI will use the env var instead of the fresh token.')}`);
281
- console.log(` ${(0, ui_1.dim)(' Fix:')} ${(0, ui_1.brand)('unset ARKNA_TOKEN')} ${(0, ui_1.dim)('or:')} ${(0, ui_1.brand)('source .arkna/.env')}`);
282
- }
283
- (0, ui_1.hint)([
284
- `${(0, ui_1.brand)('NEXT:')} Set up observability in your project:`,
285
- '',
286
- ` ${(0, ui_1.dim)('$')} arkna init`,
287
- ]);
288
- });
289
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const statusCommand: Command;
3
- //# sourceMappingURL=status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,eAAO,MAAM,aAAa,SAyDtB,CAAC"}