refineo-cli 0.1.4 → 0.1.5

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.
package/dist/cjs/api.js CHANGED
@@ -23,6 +23,7 @@ __export(api_exports, {
23
23
  getUsage: () => getUsage,
24
24
  humanize: () => humanize,
25
25
  pollForToken: () => pollForToken,
26
+ refreshToken: () => refreshToken,
26
27
  startDeviceCodeFlow: () => startDeviceCodeFlow
27
28
  });
28
29
  module.exports = __toCommonJS(api_exports);
@@ -263,5 +264,6 @@ async function getUsage() {
263
264
  getUsage,
264
265
  humanize,
265
266
  pollForToken,
267
+ refreshToken,
266
268
  startDeviceCodeFlow
267
269
  });
package/dist/cjs/cli.js CHANGED
@@ -267,7 +267,7 @@ async function getUsage() {
267
267
  }
268
268
 
269
269
  // src/cli.ts
270
- var VERSION = "0.1.4";
270
+ var VERSION = "0.1.5";
271
271
  var colors = {
272
272
  reset: "\x1B[0m",
273
273
  bold: "\x1B[1m",
@@ -306,14 +306,29 @@ async function openBrowser(url) {
306
306
  print(`Please open this URL in your browser: ${url}`);
307
307
  }
308
308
  }
309
- async function loginCommand() {
309
+ async function loginCommand(args = []) {
310
+ const force = args.includes("--force");
310
311
  const existing = loadCredentials();
311
- if (existing) {
312
- print(`Already logged in as ${colors.cyan}${existing.user.email}${colors.reset}`);
313
- print(`Tier: ${colors.bold}${existing.user.tier}${colors.reset}`);
314
- print(`
312
+ if (existing && !force) {
313
+ if (isTokenExpired(existing)) {
314
+ const refreshed = await refreshToken(existing.refreshToken);
315
+ if (refreshed) {
316
+ printSuccess(`Session refreshed for ${colors.cyan}${refreshed.user.email}${colors.reset}`);
317
+ print(`Tier: ${colors.bold}${refreshed.user.tier}${colors.reset}`);
318
+ return;
319
+ }
320
+ print(`Session expired, re-authenticating...`);
321
+ clearCredentials();
322
+ } else {
323
+ print(`Already logged in as ${colors.cyan}${existing.user.email}${colors.reset}`);
324
+ print(`Tier: ${colors.bold}${existing.user.tier}${colors.reset}`);
325
+ print(`
315
326
  Run ${colors.dim}refineo logout${colors.reset} to switch accounts.`);
316
- return;
327
+ return;
328
+ }
329
+ }
330
+ if (force && existing) {
331
+ clearCredentials();
317
332
  }
318
333
  print(`${colors.bold}Refineo CLI Login${colors.reset}
319
334
  `);
@@ -469,6 +484,9 @@ ${colors.bold}Commands:${colors.reset}
469
484
  stats Show usage statistics
470
485
  humanize <text> Humanize AI-generated text
471
486
 
487
+ ${colors.bold}Login Options:${colors.reset}
488
+ --force Force re-authentication even if already logged in
489
+
472
490
  ${colors.bold}Humanize Options:${colors.reset}
473
491
  -m, --model <model> Model: "standard" or "enhanced" (default: enhanced)
474
492
  -f, --file <path> Read input from file
@@ -506,7 +524,7 @@ async function main() {
506
524
  const command = args[0];
507
525
  switch (command) {
508
526
  case "login":
509
- await loginCommand();
527
+ await loginCommand(args.slice(1));
510
528
  break;
511
529
  case "logout":
512
530
  logoutCommand();
package/dist/cjs/index.js CHANGED
@@ -28,6 +28,7 @@ __export(index_exports, {
28
28
  isTokenExpired: () => isTokenExpired,
29
29
  loadCredentials: () => loadCredentials,
30
30
  pollForToken: () => pollForToken,
31
+ refreshToken: () => refreshToken,
31
32
  saveCredentials: () => saveCredentials,
32
33
  startDeviceCodeFlow: () => startDeviceCodeFlow
33
34
  });
@@ -282,6 +283,7 @@ async function getUsage() {
282
283
  isTokenExpired,
283
284
  loadCredentials,
284
285
  pollForToken,
286
+ refreshToken,
285
287
  saveCredentials,
286
288
  startDeviceCodeFlow
287
289
  });
package/dist/esm/api.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  import type { Credentials, DeviceCodeResponse, HumanizeResult, UsageStats } from './types.js';
2
+ /**
3
+ * Refresh access token
4
+ */
5
+ export declare function refreshToken(refreshTokenValue: string): Promise<Credentials | null>;
2
6
  /**
3
7
  * Start device code flow
4
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAGlB,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAmIpB;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAcvE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,OAAO,CAAC,WAAW,CAAC,CA8DtB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,UAAU,GAAG,UAAuB,GAC1C,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAoBpD"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAGlB,cAAc,EACd,UAAU,EACX,MAAM,YAAY,CAAC;AAsFpB;;GAEG;AACH,wBAAsB,YAAY,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAwCzF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAcvE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,OAAO,CAAC,WAAW,CAAC,CA8DtB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,UAAU,GAAG,UAAuB,GAC1C,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAoBpD"}
package/dist/esm/api.js CHANGED
@@ -233,5 +233,6 @@ export {
233
233
  getUsage,
234
234
  humanize,
235
235
  pollForToken,
236
+ refreshToken,
236
237
  startDeviceCodeFlow
237
238
  };
package/dist/esm/cli.js CHANGED
@@ -244,7 +244,7 @@ async function getUsage() {
244
244
  }
245
245
 
246
246
  // src/cli.ts
247
- var VERSION = "0.1.4";
247
+ var VERSION = "0.1.5";
248
248
  var colors = {
249
249
  reset: "\x1B[0m",
250
250
  bold: "\x1B[1m",
@@ -283,14 +283,29 @@ async function openBrowser(url) {
283
283
  print(`Please open this URL in your browser: ${url}`);
284
284
  }
285
285
  }
286
- async function loginCommand() {
286
+ async function loginCommand(args = []) {
287
+ const force = args.includes("--force");
287
288
  const existing = loadCredentials();
288
- if (existing) {
289
- print(`Already logged in as ${colors.cyan}${existing.user.email}${colors.reset}`);
290
- print(`Tier: ${colors.bold}${existing.user.tier}${colors.reset}`);
291
- print(`
289
+ if (existing && !force) {
290
+ if (isTokenExpired(existing)) {
291
+ const refreshed = await refreshToken(existing.refreshToken);
292
+ if (refreshed) {
293
+ printSuccess(`Session refreshed for ${colors.cyan}${refreshed.user.email}${colors.reset}`);
294
+ print(`Tier: ${colors.bold}${refreshed.user.tier}${colors.reset}`);
295
+ return;
296
+ }
297
+ print(`Session expired, re-authenticating...`);
298
+ clearCredentials();
299
+ } else {
300
+ print(`Already logged in as ${colors.cyan}${existing.user.email}${colors.reset}`);
301
+ print(`Tier: ${colors.bold}${existing.user.tier}${colors.reset}`);
302
+ print(`
292
303
  Run ${colors.dim}refineo logout${colors.reset} to switch accounts.`);
293
- return;
304
+ return;
305
+ }
306
+ }
307
+ if (force && existing) {
308
+ clearCredentials();
294
309
  }
295
310
  print(`${colors.bold}Refineo CLI Login${colors.reset}
296
311
  `);
@@ -446,6 +461,9 @@ ${colors.bold}Commands:${colors.reset}
446
461
  stats Show usage statistics
447
462
  humanize <text> Humanize AI-generated text
448
463
 
464
+ ${colors.bold}Login Options:${colors.reset}
465
+ --force Force re-authentication even if already logged in
466
+
449
467
  ${colors.bold}Humanize Options:${colors.reset}
450
468
  -m, --model <model> Model: "standard" or "enhanced" (default: enhanced)
451
469
  -f, --file <path> Read input from file
@@ -483,7 +501,7 @@ async function main() {
483
501
  const command = args[0];
484
502
  switch (command) {
485
503
  case "login":
486
- await loginCommand();
504
+ await loginCommand(args.slice(1));
487
505
  break;
488
506
  case "logout":
489
507
  logoutCommand();
package/dist/esm/index.js CHANGED
@@ -246,6 +246,7 @@ export {
246
246
  isTokenExpired,
247
247
  loadCredentials,
248
248
  pollForToken,
249
+ refreshToken,
249
250
  saveCredentials,
250
251
  startDeviceCodeFlow
251
252
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "refineo-cli",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Refineo AI Text Humanizer CLI - Transform AI-generated text into natural human writing",
5
5
  "type": "module",
6
6
  "main": "./dist/esm/index.js",