openhome-cli 0.1.8 → 0.1.9

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/cli.js CHANGED
@@ -341,16 +341,33 @@ async function loginCommand() {
341
341
  p.note(
342
342
  [
343
343
  "To manage your abilities (list, delete, enable/disable) from the CLI,",
344
- "you need one more thing: a session token.",
344
+ "you need one more thing: a session token. This takes ~30 seconds",
345
+ "and you only do it once.",
345
346
  "",
346
- `This takes about ${chalk2.bold("30 seconds")} and you only do it once.`
347
+ `${chalk2.bold("Here's what you'll do:")}`,
348
+ "",
349
+ `${chalk2.bold("1.")} We'll open ${chalk2.bold("app.openhome.com")} \u2014 make sure you're logged in`,
350
+ "",
351
+ `${chalk2.bold("2.")} Open the browser console:`,
352
+ ` Mac \u2192 ${chalk2.cyan("Cmd + Option + J")}`,
353
+ ` Windows / Linux \u2192 ${chalk2.cyan("F12")} then click ${chalk2.cyan("Console")}`,
354
+ "",
355
+ `${chalk2.bold("3.")} Chrome may show this warning \u2014 it's expected:`,
356
+ ` ${chalk2.yellow(`"Don't paste code you don't understand..."`)}`,
357
+ ` Type ${chalk2.cyan("allow pasting")} and press Enter to dismiss it.`,
358
+ "",
359
+ `${chalk2.bold("4.")} Paste this command and press Enter:`,
360
+ "",
361
+ ` ${chalk2.green("copy(localStorage.getItem('token'))")}`,
362
+ "",
363
+ `${chalk2.bold("5.")} Your token is copied to clipboard \u2014 paste it back here.`
347
364
  ].join("\n"),
348
- "One more step"
365
+ "Enable management features (one-time setup)"
349
366
  );
350
367
  const doJwt = await p.confirm({
351
- message: "Set up management access now?",
368
+ message: "Ready? Press Enter to open your browser and follow the steps above",
352
369
  initialValue: true,
353
- active: "Yes, do it now",
370
+ active: "Open browser",
354
371
  inactive: "Skip for now"
355
372
  });
356
373
  handleCancel(doJwt);
@@ -366,39 +383,11 @@ async function loginCommand() {
366
383
  }
367
384
  async function setupJwt() {
368
385
  const { saveJwt: saveJwt2 } = await import("./store-USDMWKXY.js");
369
- const openApp = await p.confirm({
370
- message: `Press Enter to open ${chalk2.bold("app.openhome.com")} in your browser`,
371
- initialValue: true,
372
- active: "Open browser",
373
- inactive: "Skip"
374
- });
375
- handleCancel(openApp);
376
- if (openApp) {
377
- openBrowser(OPENHOME_APP_URL);
378
- console.log(
379
- `
380
- ${chalk2.dim(`Opened ${chalk2.bold("app.openhome.com")} \u2014 make sure you're logged in`)}
386
+ openBrowser(OPENHOME_APP_URL);
387
+ console.log(
388
+ `
389
+ ${chalk2.dim(`Opened ${chalk2.bold("app.openhome.com")} \u2014 follow the steps above`)}
381
390
  `
382
- );
383
- }
384
- p.note(
385
- [
386
- `${chalk2.bold("1.")} Open the browser console:`,
387
- ` Mac \u2192 press ${chalk2.cyan("Cmd + Option + J")}`,
388
- ` Windows / Linux \u2192 press ${chalk2.cyan("F12")}, then click ${chalk2.cyan("Console")}`,
389
- "",
390
- `${chalk2.bold("2.")} Chrome may show a warning:`,
391
- ` ${chalk2.yellow(`"Don't paste code you don't understand..."`)}`,
392
- ` If so, type ${chalk2.cyan("allow pasting")} and press ${chalk2.bold("Enter")} first.`,
393
- "",
394
- `${chalk2.bold("3.")} Paste this command and press ${chalk2.bold("Enter")}:`,
395
- "",
396
- ` ${chalk2.green("copy(localStorage.getItem('token'))")}`,
397
- "",
398
- `${chalk2.bold("4.")} Your token is now copied to your clipboard.`,
399
- ` Come back here and paste it below.`
400
- ].join("\n"),
401
- "How to get your session token"
402
391
  );
403
392
  const token = await p.password({
404
393
  message: "Paste your session token here",
@@ -3148,9 +3137,10 @@ async function logsCommand(opts = {}) {
3148
3137
  }
3149
3138
 
3150
3139
  // src/commands/set-jwt.ts
3140
+ import chalk13 from "chalk";
3151
3141
  async function setJwtCommand(token) {
3142
+ p.intro("\u{1F511} Enable Management Features");
3152
3143
  if (token) {
3153
- p.intro("\u{1F511} Enable Management Features");
3154
3144
  try {
3155
3145
  saveJwt(token.trim());
3156
3146
  success("Session token saved.");
@@ -3165,14 +3155,46 @@ async function setJwtCommand(token) {
3165
3155
  }
3166
3156
  return;
3167
3157
  }
3168
- p.intro("\u{1F511} Enable Management Features");
3158
+ p.note(
3159
+ [
3160
+ "Here's what you'll do:",
3161
+ "",
3162
+ `${chalk13.bold("1.")} We'll open ${chalk13.bold("app.openhome.com")} \u2014 make sure you're logged in`,
3163
+ "",
3164
+ `${chalk13.bold("2.")} Open the browser console:`,
3165
+ ` Mac \u2192 ${chalk13.cyan("Cmd + Option + J")}`,
3166
+ ` Windows / Linux \u2192 ${chalk13.cyan("F12")} then click ${chalk13.cyan("Console")}`,
3167
+ "",
3168
+ `${chalk13.bold("3.")} Chrome may show this warning \u2014 it's expected:`,
3169
+ ` ${chalk13.yellow(`"Don't paste code you don't understand..."`)}`,
3170
+ ` Type ${chalk13.cyan("allow pasting")} and press Enter to dismiss it.`,
3171
+ "",
3172
+ `${chalk13.bold("4.")} Paste this command and press Enter:`,
3173
+ "",
3174
+ ` ${chalk13.green("copy(localStorage.getItem('token'))")}`,
3175
+ "",
3176
+ `${chalk13.bold("5.")} Your token is copied to clipboard \u2014 paste it back here.`
3177
+ ].join("\n"),
3178
+ "Enable management features (one-time setup)"
3179
+ );
3180
+ const ready = await p.confirm({
3181
+ message: "Ready? Press Enter to open your browser and follow the steps above",
3182
+ initialValue: true,
3183
+ active: "Open browser",
3184
+ inactive: "Cancel"
3185
+ });
3186
+ handleCancel(ready);
3187
+ if (!ready) {
3188
+ p.cancel("Cancelled.");
3189
+ return;
3190
+ }
3169
3191
  await setupJwt();
3170
- p.outro("Done.");
3192
+ p.outro("Management features are now unlocked.");
3171
3193
  }
3172
3194
 
3173
3195
  // src/commands/validate.ts
3174
3196
  import { resolve as resolve5 } from "path";
3175
- import chalk13 from "chalk";
3197
+ import chalk14 from "chalk";
3176
3198
  async function validateCommand(pathArg = ".") {
3177
3199
  const targetDir = resolve5(pathArg);
3178
3200
  p.intro(`\u{1F50E} Validate ability`);
@@ -3188,7 +3210,7 @@ async function validateCommand(pathArg = ".") {
3188
3210
  if (result.errors.length > 0) {
3189
3211
  p.note(
3190
3212
  result.errors.map(
3191
- (issue) => `${chalk13.red("\u2717")} ${issue.file ? chalk13.bold(`[${issue.file}]`) + " " : ""}${issue.message}`
3213
+ (issue) => `${chalk14.red("\u2717")} ${issue.file ? chalk14.bold(`[${issue.file}]`) + " " : ""}${issue.message}`
3192
3214
  ).join("\n"),
3193
3215
  `${result.errors.length} Error(s)`
3194
3216
  );
@@ -3196,7 +3218,7 @@ async function validateCommand(pathArg = ".") {
3196
3218
  if (result.warnings.length > 0) {
3197
3219
  p.note(
3198
3220
  result.warnings.map(
3199
- (w) => `${chalk13.yellow("\u26A0")} ${w.file ? chalk13.bold(`[${w.file}]`) + " " : ""}${w.message}`
3221
+ (w) => `${chalk14.yellow("\u26A0")} ${w.file ? chalk14.bold(`[${w.file}]`) + " " : ""}${w.message}`
3200
3222
  ).join("\n"),
3201
3223
  `${result.warnings.length} Warning(s)`
3202
3224
  );
@@ -3242,9 +3264,9 @@ async function checkForUpdates() {
3242
3264
  );
3243
3265
  process.exit(0);
3244
3266
  } else {
3245
- const { default: chalk14 } = await import("chalk");
3267
+ const { default: chalk15 } = await import("chalk");
3246
3268
  console.log(
3247
- chalk14.yellow(
3269
+ chalk15.yellow(
3248
3270
  ` Update available: v${version} \u2192 v${latest} Run: npm install -g openhome-cli@latest
3249
3271
  `
3250
3272
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openhome-cli",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "CLI for managing OpenHome voice AI abilities",
5
5
  "type": "module",
6
6
  "bin": {
@@ -88,17 +88,35 @@ export async function loginCommand(): Promise<void> {
88
88
  p.note(
89
89
  [
90
90
  "To manage your abilities (list, delete, enable/disable) from the CLI,",
91
- "you need one more thing: a session token.",
91
+ "you need one more thing: a session token. This takes ~30 seconds",
92
+ "and you only do it once.",
92
93
  "",
93
- `This takes about ${chalk.bold("30 seconds")} and you only do it once.`,
94
+ `${chalk.bold("Here's what you'll do:")}`,
95
+ "",
96
+ `${chalk.bold("1.")} We'll open ${chalk.bold("app.openhome.com")} — make sure you're logged in`,
97
+ "",
98
+ `${chalk.bold("2.")} Open the browser console:`,
99
+ ` Mac → ${chalk.cyan("Cmd + Option + J")}`,
100
+ ` Windows / Linux → ${chalk.cyan("F12")} then click ${chalk.cyan("Console")}`,
101
+ "",
102
+ `${chalk.bold("3.")} Chrome may show this warning — it's expected:`,
103
+ ` ${chalk.yellow("\"Don't paste code you don't understand...\"")}`,
104
+ ` Type ${chalk.cyan("allow pasting")} and press Enter to dismiss it.`,
105
+ "",
106
+ `${chalk.bold("4.")} Paste this command and press Enter:`,
107
+ "",
108
+ ` ${chalk.green("copy(localStorage.getItem('token'))")}`,
109
+ "",
110
+ `${chalk.bold("5.")} Your token is copied to clipboard — paste it back here.`,
94
111
  ].join("\n"),
95
- "One more step",
112
+ "Enable management features (one-time setup)",
96
113
  );
97
114
 
98
115
  const doJwt = await p.confirm({
99
- message: "Set up management access now?",
116
+ message:
117
+ "Ready? Press Enter to open your browser and follow the steps above",
100
118
  initialValue: true,
101
- active: "Yes, do it now",
119
+ active: "Open browser",
102
120
  inactive: "Skip for now",
103
121
  });
104
122
  handleCancel(doJwt);
@@ -118,39 +136,9 @@ export async function loginCommand(): Promise<void> {
118
136
  export async function setupJwt(): Promise<void> {
119
137
  const { saveJwt } = await import("../config/store.js");
120
138
 
121
- const openApp = await p.confirm({
122
- message: `Press Enter to open ${chalk.bold("app.openhome.com")} in your browser`,
123
- initialValue: true,
124
- active: "Open browser",
125
- inactive: "Skip",
126
- });
127
- handleCancel(openApp);
128
-
129
- if (openApp) {
130
- openBrowser(OPENHOME_APP_URL);
131
- console.log(
132
- `\n ${chalk.dim(`Opened ${chalk.bold("app.openhome.com")} — make sure you're logged in`)}\n`,
133
- );
134
- }
135
-
136
- p.note(
137
- [
138
- `${chalk.bold("1.")} Open the browser console:`,
139
- ` Mac → press ${chalk.cyan("Cmd + Option + J")}`,
140
- ` Windows / Linux → press ${chalk.cyan("F12")}, then click ${chalk.cyan("Console")}`,
141
- "",
142
- `${chalk.bold("2.")} Chrome may show a warning:`,
143
- ` ${chalk.yellow("\"Don't paste code you don't understand...\"")}`,
144
- ` If so, type ${chalk.cyan("allow pasting")} and press ${chalk.bold("Enter")} first.`,
145
- "",
146
- `${chalk.bold("3.")} Paste this command and press ${chalk.bold("Enter")}:`,
147
- "",
148
- ` ${chalk.green("copy(localStorage.getItem('token'))")}`,
149
- "",
150
- `${chalk.bold("4.")} Your token is now copied to your clipboard.`,
151
- ` Come back here and paste it below.`,
152
- ].join("\n"),
153
- "How to get your session token",
139
+ openBrowser(OPENHOME_APP_URL);
140
+ console.log(
141
+ `\n ${chalk.dim(`Opened ${chalk.bold("app.openhome.com")} — follow the steps above`)}\n`,
154
142
  );
155
143
 
156
144
  const token = await p.password({
@@ -1,11 +1,15 @@
1
- import { setupJwt } from "./login.js";
1
+ import { setupJwt, openBrowser } from "./login.js";
2
2
  import { saveJwt } from "../config/store.js";
3
- import { success, error, p } from "../ui/format.js";
3
+ import { success, error, p, handleCancel } from "../ui/format.js";
4
+ import chalk from "chalk";
5
+
6
+ const OPENHOME_APP_URL = "https://app.openhome.com";
4
7
 
5
8
  export async function setJwtCommand(token?: string): Promise<void> {
9
+ p.intro("🔑 Enable Management Features");
10
+
6
11
  // Direct usage: openhome set-jwt eyJ...
7
12
  if (token) {
8
- p.intro("🔑 Enable Management Features");
9
13
  try {
10
14
  saveJwt(token.trim());
11
15
  success("Session token saved.");
@@ -21,8 +25,44 @@ export async function setJwtCommand(token?: string): Promise<void> {
21
25
  return;
22
26
  }
23
27
 
24
- // Guided flow — reuse the same walkthrough from login
25
- p.intro("🔑 Enable Management Features");
28
+ // Guided flow — show instructions first, then open browser
29
+ p.note(
30
+ [
31
+ "Here's what you'll do:",
32
+ "",
33
+ `${chalk.bold("1.")} We'll open ${chalk.bold("app.openhome.com")} — make sure you're logged in`,
34
+ "",
35
+ `${chalk.bold("2.")} Open the browser console:`,
36
+ ` Mac → ${chalk.cyan("Cmd + Option + J")}`,
37
+ ` Windows / Linux → ${chalk.cyan("F12")} then click ${chalk.cyan("Console")}`,
38
+ "",
39
+ `${chalk.bold("3.")} Chrome may show this warning — it's expected:`,
40
+ ` ${chalk.yellow("\"Don't paste code you don't understand...\"")}`,
41
+ ` Type ${chalk.cyan("allow pasting")} and press Enter to dismiss it.`,
42
+ "",
43
+ `${chalk.bold("4.")} Paste this command and press Enter:`,
44
+ "",
45
+ ` ${chalk.green("copy(localStorage.getItem('token'))")}`,
46
+ "",
47
+ `${chalk.bold("5.")} Your token is copied to clipboard — paste it back here.`,
48
+ ].join("\n"),
49
+ "Enable management features (one-time setup)",
50
+ );
51
+
52
+ const ready = await p.confirm({
53
+ message:
54
+ "Ready? Press Enter to open your browser and follow the steps above",
55
+ initialValue: true,
56
+ active: "Open browser",
57
+ inactive: "Cancel",
58
+ });
59
+ handleCancel(ready);
60
+
61
+ if (!ready) {
62
+ p.cancel("Cancelled.");
63
+ return;
64
+ }
65
+
26
66
  await setupJwt();
27
- p.outro("Done.");
67
+ p.outro("Management features are now unlocked.");
28
68
  }