@b0xs/recorder 1.0.37 ā 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Login Command
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Browser-based auth (default): opens boxs.sh/auth/cli, CLI receives token via local callback.
|
|
5
|
+
* Manual fallback (--no-browser): prompts for API key directly.
|
|
5
6
|
*/
|
|
6
|
-
export
|
|
7
|
+
export interface LoginOptions {
|
|
8
|
+
noBrowser?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function loginCommand(opts?: LoginOptions): Promise<void>;
|
|
7
11
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBzE"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Login Command
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Browser-based auth (default): opens boxs.sh/auth/cli, CLI receives token via local callback.
|
|
6
|
+
* Manual fallback (--no-browser): prompts for API key directly.
|
|
6
7
|
*/
|
|
7
8
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
9
|
if (k2 === undefined) k2 = k;
|
|
@@ -42,100 +43,188 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
42
43
|
};
|
|
43
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
45
|
exports.loginCommand = loginCommand;
|
|
46
|
+
const http = __importStar(require("http"));
|
|
45
47
|
const readline = __importStar(require("readline"));
|
|
48
|
+
const crypto_1 = require("crypto");
|
|
49
|
+
const child_process_1 = require("child_process");
|
|
46
50
|
const chalk_1 = __importDefault(require("chalk"));
|
|
47
51
|
const ora_1 = __importDefault(require("ora"));
|
|
48
52
|
const auth_store_1 = require("../../storage/auth-store");
|
|
49
53
|
const config_store_1 = require("../../storage/config-store");
|
|
50
54
|
const client_1 = require("../../api/client");
|
|
51
|
-
async function loginCommand() {
|
|
52
|
-
console.log(chalk_1.default.cyan('\nš BOXS Recorder Login\n'));
|
|
55
|
+
async function loginCommand(opts = {}) {
|
|
53
56
|
const authStore = new auth_store_1.AuthStore();
|
|
54
57
|
const configStore = new config_store_1.ConfigStore();
|
|
55
|
-
//
|
|
58
|
+
// Already logged in guard
|
|
56
59
|
const existingApiKey = await authStore.getApiKey();
|
|
57
60
|
if (existingApiKey) {
|
|
58
|
-
const rl = readline.createInterface({
|
|
59
|
-
input: process.stdin,
|
|
60
|
-
output: process.stdout,
|
|
61
|
-
});
|
|
61
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
62
62
|
const answer = await new Promise((resolve) => {
|
|
63
|
-
rl.question(chalk_1.default.yellow('
|
|
63
|
+
rl.question(chalk_1.default.yellow('Already logged in. Log in again? (y/n): '), resolve);
|
|
64
64
|
});
|
|
65
65
|
rl.close();
|
|
66
66
|
if (answer.toLowerCase() !== 'y') {
|
|
67
|
-
console.log(chalk_1.default.gray('
|
|
67
|
+
console.log(chalk_1.default.gray('Cancelled.'));
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
if (opts.noBrowser) {
|
|
72
|
+
return legacyKeyLogin(authStore, configStore);
|
|
73
|
+
}
|
|
74
|
+
return browserLogin(authStore, configStore);
|
|
75
|
+
}
|
|
76
|
+
// āā Browser flow āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
77
|
+
async function browserLogin(authStore, configStore) {
|
|
78
|
+
const { port, waitForCallback } = await startCallbackServer();
|
|
79
|
+
const state = (0, crypto_1.randomBytes)(32).toString('hex');
|
|
80
|
+
const apiUrl = configStore.getApiUrl();
|
|
81
|
+
const baseUrl = apiUrl === 'https://boxs.sh' ? apiUrl : apiUrl;
|
|
82
|
+
const authUrl = `${baseUrl}/auth/cli?port=${port}&state=${state}`;
|
|
83
|
+
console.log(chalk_1.default.cyan('\n Opening browser to authenticate...\n'));
|
|
84
|
+
console.log(chalk_1.default.gray(` ${authUrl}\n`));
|
|
85
|
+
console.log(chalk_1.default.dim(' (If the browser did not open, paste the URL above manually)\n'));
|
|
86
|
+
openBrowser(authUrl);
|
|
87
|
+
const spinner = (0, ora_1.default)({ text: 'Waiting for browser authentication...', color: 'cyan' }).start();
|
|
88
|
+
let result;
|
|
89
|
+
try {
|
|
90
|
+
result = await waitForCallback(5 * 60 * 1000);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
spinner.fail(chalk_1.default.red('Timed out. Run `boxs login` to try again.'));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
if (result.state !== state) {
|
|
97
|
+
spinner.fail(chalk_1.default.red('State mismatch ā possible CSRF. Try again.'));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
spinner.text = 'Validating...';
|
|
101
|
+
const client = new client_1.APIClient({ apiKey: result.token, baseUrl: apiUrl });
|
|
102
|
+
const valid = await client.validateApiKey();
|
|
103
|
+
if (!valid) {
|
|
104
|
+
spinner.fail(chalk_1.default.red('Token rejected by server.'));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
await authStore.setApiKey(result.token);
|
|
108
|
+
spinner.succeed(chalk_1.default.green('Authenticated. You\'re good to go.'));
|
|
109
|
+
console.log(chalk_1.default.gray('\n Run: boxs lab --session-id <id> --vpn ./machine.ovpn\n'));
|
|
110
|
+
}
|
|
111
|
+
function startCallbackServer() {
|
|
112
|
+
return new Promise((resolve, reject) => {
|
|
113
|
+
const server = http.createServer();
|
|
114
|
+
let settled = false;
|
|
115
|
+
let externalResolve = null;
|
|
116
|
+
let externalReject = null;
|
|
117
|
+
server.on('request', (req, res) => {
|
|
118
|
+
if (settled) {
|
|
119
|
+
res.writeHead(204).end();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const url = new URL(req.url ?? '/', `http://127.0.0.1`);
|
|
123
|
+
const token = url.searchParams.get('token');
|
|
124
|
+
const state = url.searchParams.get('state');
|
|
125
|
+
const html = `<!DOCTYPE html>
|
|
126
|
+
<html>
|
|
127
|
+
<head><meta charset="utf-8"><title>BOXS CLI Auth</title></head>
|
|
128
|
+
<body style="margin:0;background:#0a0a0a;color:#e2d9c5;font-family:'SF Mono',Menlo,monospace;display:flex;align-items:center;justify-content:center;min-height:100vh">
|
|
129
|
+
<div style="text-align:center;padding:40px">
|
|
130
|
+
<div style="width:48px;height:48px;border-top:2px solid #ccfc14;border-left:2px solid #ccfc14;margin:0 auto 24px"></div>
|
|
131
|
+
<p style="color:#ccfc14;font-size:22px;letter-spacing:0.1em;margin:0 0 12px">AUTHENTICATED</p>
|
|
132
|
+
<p style="color:rgba(226,217,197,0.4);font-size:12px;letter-spacing:0.08em;margin:0">You can close this tab and return to your terminal.</p>
|
|
133
|
+
</div>
|
|
134
|
+
</body>
|
|
135
|
+
</html>`;
|
|
136
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Connection': 'close' });
|
|
137
|
+
res.end(html);
|
|
138
|
+
if (token && state && externalResolve && !settled) {
|
|
139
|
+
settled = true;
|
|
140
|
+
const resolveRef = externalResolve;
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
server.close();
|
|
143
|
+
resolveRef({ token, state });
|
|
144
|
+
}, 100);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
server.listen(0, '127.0.0.1', () => {
|
|
148
|
+
const addr = server.address();
|
|
149
|
+
if (!addr) {
|
|
150
|
+
reject(new Error('Failed to bind callback server'));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
resolve({
|
|
154
|
+
port: addr.port,
|
|
155
|
+
waitForCallback: (timeoutMs) => new Promise((res, rej) => {
|
|
156
|
+
externalResolve = res;
|
|
157
|
+
externalReject = rej;
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
if (!settled) {
|
|
160
|
+
settled = true;
|
|
161
|
+
server.close();
|
|
162
|
+
rej(new Error('timeout'));
|
|
163
|
+
}
|
|
164
|
+
}, timeoutMs);
|
|
165
|
+
}),
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
server.on('error', reject);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function openBrowser(url) {
|
|
172
|
+
const cmd = process.platform === 'darwin' ? `open "${url}"` :
|
|
173
|
+
process.platform === 'win32' ? `start "" "${url}"` :
|
|
174
|
+
`xdg-open "${url}"`;
|
|
175
|
+
(0, child_process_1.exec)(cmd, (err) => {
|
|
176
|
+
if (err) {
|
|
177
|
+
// Non-fatal ā we already printed the URL for manual paste
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
// āā Legacy key-paste flow (--no-browser) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
182
|
+
async function legacyKeyLogin(authStore, configStore) {
|
|
183
|
+
console.log(chalk_1.default.cyan('\n BOXS Recorder Login\n'));
|
|
184
|
+
console.log(chalk_1.default.gray(' Get your API key from: https://boxs.sh/settings\n'));
|
|
72
185
|
const apiKey = await promptForApiKey();
|
|
73
|
-
if (!apiKey
|
|
186
|
+
if (!apiKey?.trim()) {
|
|
74
187
|
console.log(chalk_1.default.red('\nā API key cannot be empty'));
|
|
75
188
|
process.exit(1);
|
|
76
189
|
}
|
|
77
|
-
// Validate API key
|
|
78
190
|
const spinner = (0, ora_1.default)('Validating API key...').start();
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
spinner.fail(chalk_1.default.red('Invalid API key'));
|
|
85
|
-
console.log(chalk_1.default.gray('\nGet your API key from: https://boxs.sh/settings/api-keys'));
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
// Save API key
|
|
89
|
-
await authStore.setApiKey(apiKey);
|
|
90
|
-
spinner.succeed(chalk_1.default.green('Successfully authenticated!'));
|
|
91
|
-
console.log(chalk_1.default.gray(`\nYour API key has been saved securely.`));
|
|
92
|
-
console.log(chalk_1.default.gray(`You can now use: ${chalk_1.default.white('boxs record')}\n`));
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
spinner.fail(chalk_1.default.red('Authentication failed'));
|
|
96
|
-
console.log(chalk_1.default.red(`\nā ${error.message}`));
|
|
97
|
-
console.log(chalk_1.default.gray('\nGet your API key from: https://boxs.sh/settings/api-keys'));
|
|
191
|
+
const apiUrl = configStore.getApiUrl();
|
|
192
|
+
const client = new client_1.APIClient({ apiKey, baseUrl: apiUrl });
|
|
193
|
+
const valid = await client.validateApiKey();
|
|
194
|
+
if (!valid) {
|
|
195
|
+
spinner.fail(chalk_1.default.red('Invalid API key'));
|
|
98
196
|
process.exit(1);
|
|
99
197
|
}
|
|
198
|
+
await authStore.setApiKey(apiKey);
|
|
199
|
+
spinner.succeed(chalk_1.default.green('Authenticated.'));
|
|
100
200
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Prompt for API key with hidden input
|
|
103
|
-
*/
|
|
104
201
|
function promptForApiKey() {
|
|
105
202
|
return new Promise((resolve) => {
|
|
106
|
-
const rl = readline.createInterface({
|
|
107
|
-
input: process.stdin,
|
|
108
|
-
output: process.stdout,
|
|
109
|
-
});
|
|
110
|
-
console.log(chalk_1.default.gray('Get your API key from: https://boxs.sh/settings/api-keys\n'));
|
|
111
|
-
// Hide input for password-like behavior
|
|
203
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
112
204
|
const stdin = process.stdin;
|
|
113
205
|
const originalRawMode = stdin.isRaw;
|
|
114
|
-
if (stdin.setRawMode)
|
|
206
|
+
if (stdin.setRawMode)
|
|
115
207
|
stdin.setRawMode(true);
|
|
116
|
-
}
|
|
117
208
|
let apiKey = '';
|
|
118
|
-
process.stdout.write('Enter your API key: ');
|
|
209
|
+
process.stdout.write(' Enter your API key: ');
|
|
119
210
|
stdin.on('data', function handler(char) {
|
|
120
211
|
const str = char.toString('utf8');
|
|
121
212
|
switch (str) {
|
|
122
213
|
case '\n':
|
|
123
214
|
case '\r':
|
|
124
|
-
case '
|
|
125
|
-
// Enter pressed
|
|
215
|
+
case '':
|
|
126
216
|
stdin.removeListener('data', handler);
|
|
127
|
-
if (stdin.setRawMode)
|
|
217
|
+
if (stdin.setRawMode)
|
|
128
218
|
stdin.setRawMode(originalRawMode || false);
|
|
129
|
-
}
|
|
130
219
|
process.stdout.write('\n');
|
|
131
220
|
rl.close();
|
|
132
221
|
resolve(apiKey);
|
|
133
222
|
break;
|
|
134
|
-
case '
|
|
135
|
-
console.log(chalk_1.default.red('\n\
|
|
223
|
+
case '':
|
|
224
|
+
console.log(chalk_1.default.red('\n\nCancelled.'));
|
|
136
225
|
process.exit(0);
|
|
137
226
|
break;
|
|
138
|
-
case '\x7f':
|
|
227
|
+
case '\x7f':
|
|
139
228
|
case '\b':
|
|
140
229
|
if (apiKey.length > 0) {
|
|
141
230
|
apiKey = apiKey.slice(0, -1);
|
|
@@ -143,7 +232,6 @@ function promptForApiKey() {
|
|
|
143
232
|
}
|
|
144
233
|
break;
|
|
145
234
|
default:
|
|
146
|
-
// Hide input by showing asterisks
|
|
147
235
|
apiKey += str;
|
|
148
236
|
process.stdout.write('*');
|
|
149
237
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -28,10 +28,11 @@ program
|
|
|
28
28
|
// Login command
|
|
29
29
|
program
|
|
30
30
|
.command('login')
|
|
31
|
-
.description('Authenticate with
|
|
32
|
-
.
|
|
31
|
+
.description('Authenticate with BOXS (opens browser)')
|
|
32
|
+
.option('--no-browser', 'Enter API key manually instead of browser flow')
|
|
33
|
+
.action(async (options) => {
|
|
33
34
|
try {
|
|
34
|
-
await (0, login_1.loginCommand)();
|
|
35
|
+
await (0, login_1.loginCommand)({ noBrowser: !options.browser });
|
|
35
36
|
}
|
|
36
37
|
catch (error) {
|
|
37
38
|
console.error(chalk_1.default.red(`\nā Error: ${error.message}\n`));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;GAIG;;;;;AAEH,yCAAoC;AACpC,kDAA0B;AAC1B,gDAAoD;AACpD,8CAAkD;AAClD,kDAAsD;AACtD,gDAAoD;AACpD,gDAAmE;AACnE,4CAAgD;AAChD,8CAAkD;AAElD,iEAAiE;AACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,2DAA2D,CAAC;KACxE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@b0xs/recorder",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "CLI tool for recording terminal sessions to BOXS platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"build": "tsc",
|
|
11
11
|
"dev": "tsc --watch",
|
|
12
|
-
"test": "jest",
|
|
12
|
+
"test": "jest --forceExit",
|
|
13
13
|
"prepublishOnly": "echo 'skipping build ā dist already built'"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [
|