@seamapi/cli 0.9.0 → 0.10.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.
package/README.md CHANGED
@@ -9,9 +9,9 @@ A command line interface (CLI) for interacting with the Seam API.
9
9
 
10
10
  ## Description
11
11
 
12
- Every command is interactive: the CLI prompts for any missing required
13
- parameter with suggestions pulled from your workspace. Pass `-y` to take the
14
- first suggestion instead of being asked.
12
+ Commands run as soon as every required parameter is given. Anything missing is
13
+ prompted for, with suggestions pulled from your workspace. Pass
14
+ `--non-interactive` (or `-y`) to never be prompted: the command fails instead.
15
15
 
16
16
  ## Installation
17
17
 
@@ -37,9 +37,19 @@ $ paru -S seam-bin
37
37
 
38
38
  ## Usage
39
39
 
40
- Every `seam` command is interactive and will prompt you for any missing
41
- required properties with helpful suggestions. To avoid automatic behavior,
42
- pass `-y`.
40
+ Every `seam` command makes its request as soon as every required property is
41
+ given. When something is missing, the CLI prompts you for it with helpful
42
+ suggestions.
43
+
44
+ Pass `--interactive` (or `-i`) to always be prompted to review and edit
45
+ properties before the request is made. The prompt is prefilled with whatever
46
+ you passed as arguments, so this is the way to add optional properties, or to
47
+ check a request before making it.
48
+
49
+ For scripts and CI, pass `--non-interactive` (or `-y`) to never be prompted.
50
+ The command must then be complete: if the command itself is ambiguous, or any
51
+ required property is missing, the CLI exits with an error naming what is
52
+ missing instead of asking for it.
43
53
 
44
54
  To take a project from zero to a working Seam integration, run the
45
55
  [Seam Wizard] from the project's root:
@@ -66,6 +76,15 @@ seam connect-webviews create
66
76
  # List devices in your workspace
67
77
  seam devices list
68
78
 
79
+ # Review and edit filters before listing devices
80
+ seam devices list --interactive
81
+
82
+ # List devices, failing instead of prompting
83
+ seam devices list --non-interactive
84
+
85
+ # Fails with: Missing required parameter for /locks/unlock_door: --device-id
86
+ seam locks unlock-door --non-interactive
87
+
69
88
  MY_DOOR=$(seam devices get --name "Front Door" --id-only)
70
89
 
71
90
  # Unlock a lock
package/bin/cli.js CHANGED
@@ -3,7 +3,6 @@ import { randomBytes } from 'node:crypto';
3
3
  import { isDeepStrictEqual as isEqual } from 'node:util';
4
4
  import chalk from 'chalk';
5
5
  import commandLineUsage from 'command-line-usage';
6
- import parseArgs, {} from 'minimist';
7
6
  import prompts from 'prompts';
8
7
  import { getConfigStore } from '../lib/config/index.js';
9
8
  import { getApiBlueprint } from '../lib/get-api-blueprint.js';
@@ -15,13 +14,14 @@ import { interactForLogin } from '../lib/interact-for-login.js';
15
14
  import { interactForServerSelection } from '../lib/interact-for-server-selection.js';
16
15
  import { interactForUseRemoteApiDefs } from '../lib/interact-for-use-remote-api-defs.js';
17
16
  import { interactForWorkspaceId } from '../lib/interact-for-workspace-id.js';
17
+ import { getInteractivity, interactivityFlags, NonInteractiveError, parseCliArgs, } from '../lib/util/cli-args.js';
18
18
  import { RequestSeamApi } from '../lib/util/request-seam-api.js';
19
19
  import { validateToken } from '../lib/validate-token.js';
20
20
  import seamapiCliVersion from '../lib/version.js';
21
21
  const sections = [
22
22
  {
23
23
  header: 'Seam CLI',
24
- content: 'Every seam command is interactive and will prompt you for any missing required properties with helpful suggestions. To avoid automatic behavior, pass -y ',
24
+ content: 'Every seam command runs as soon as every required property is given, and otherwise prompts you for what is missing with helpful suggestions. Pass -i to always review properties first, or -y to never be prompted. ',
25
25
  },
26
26
  {
27
27
  header: 'Options',
@@ -32,6 +32,18 @@ const sections = [
32
32
  alias: 'h',
33
33
  type: Boolean,
34
34
  },
35
+ {
36
+ name: 'interactive',
37
+ description: 'Always prompt to review and edit properties, prefilled with the given arguments.',
38
+ alias: 'i',
39
+ type: Boolean,
40
+ },
41
+ {
42
+ name: 'non-interactive',
43
+ description: 'Never prompt: exit with an error if the command or any required property is missing.',
44
+ alias: 'y',
45
+ type: Boolean,
46
+ },
35
47
  {
36
48
  name: 'update',
37
49
  description: 'Force an update of the cached Seam API definitions.',
@@ -54,6 +66,14 @@ const sections = [
54
66
  summary: 'Create a connect webview to connect devices.',
55
67
  },
56
68
  { name: 'seam devices list', summary: 'List devices in your workspace.' },
69
+ {
70
+ name: 'seam devices list {bold --interactive}',
71
+ summary: 'Review and edit filters before listing devices.',
72
+ },
73
+ {
74
+ name: 'seam devices list {bold --non-interactive}',
75
+ summary: 'List devices, failing instead of prompting.',
76
+ },
57
77
  {
58
78
  name: 'seam locks unlock-door {bold --device-id} $MY_DOOR',
59
79
  summary: 'Unlock a lock.',
@@ -108,21 +128,21 @@ async function cli(args) {
108
128
  update,
109
129
  });
110
130
  const commandParams = {};
111
- /**
112
- * Whether or not to auto-select first option
113
- */
114
- const is_interactive = args['y'] !== true;
115
131
  const ctx = {
116
132
  blueprint,
117
- is_interactive,
133
+ interactivity: getInteractivity(args),
118
134
  };
135
+ const isNonInteractive = ctx.interactivity === 'non-interactive';
119
136
  for (const k in args) {
120
137
  if (k === '_')
121
138
  continue;
122
139
  const v = args[k];
123
140
  delete args[k];
124
- args[k.replace(/-/g, '_')] = v;
125
- commandParams[k.replace(/-/g, '_')] = v;
141
+ const key = k.replace(/-/g, '_');
142
+ args[key] = v;
143
+ if (interactivityFlags.includes(key))
144
+ continue;
145
+ commandParams[key] = v;
126
146
  }
127
147
  const selectedCommand = await interactForCommandSelection(args._, ctx);
128
148
  if (isEqual(selectedCommand, ['login'])) {
@@ -142,6 +162,9 @@ async function cli(args) {
142
162
  if (args['token'] || args['workspace_id'] || args['server']) {
143
163
  return;
144
164
  }
165
+ if (isNonInteractive) {
166
+ throw new NonInteractiveError('Missing required parameter for login: --token');
167
+ }
145
168
  await interactForLogin();
146
169
  return;
147
170
  }
@@ -155,10 +178,16 @@ async function cli(args) {
155
178
  return;
156
179
  }
157
180
  else if (isEqual(selectedCommand, ['config', 'use-remote-api-defs'])) {
181
+ if (isNonInteractive) {
182
+ throw new NonInteractiveError('Cannot select whether to use remote API definitions in non-interactive mode');
183
+ }
158
184
  await interactForUseRemoteApiDefs();
159
185
  return;
160
186
  }
161
187
  else if (isEqual(selectedCommand, ['select', 'workspace'])) {
188
+ if (isNonInteractive) {
189
+ throw new NonInteractiveError('Cannot select a workspace in non-interactive mode: pass --workspace-id to "seam login"');
190
+ }
162
191
  await interactForWorkspaceId();
163
192
  return;
164
193
  }
@@ -175,6 +204,9 @@ async function cli(args) {
175
204
  config.delete('current_workspace_id');
176
205
  return;
177
206
  }
207
+ if (isNonInteractive) {
208
+ throw new NonInteractiveError('Missing required parameter for select server: --server');
209
+ }
178
210
  await interactForServerSelection();
179
211
  return;
180
212
  }
@@ -217,15 +249,16 @@ async function cli(args) {
217
249
  params,
218
250
  });
219
251
  if (response.data?.connect_webview) {
220
- await handleConnectWebviewResponse(response.data.connect_webview);
252
+ await handleConnectWebviewResponse(response.data.connect_webview, ctx.interactivity);
221
253
  }
222
- if (response.data?.action_attempt) {
254
+ if (response.data?.action_attempt && !isNonInteractive) {
223
255
  interactForActionAttemptPoll(response.data.action_attempt);
224
256
  }
225
257
  }
226
- const handleConnectWebviewResponse = async (connect_webview) => {
258
+ const handleConnectWebviewResponse = async (connect_webview, interactivity) => {
227
259
  const url = connect_webview.url;
228
- if (process.env['INSIDE_WEB_BROWSER'] !== '1') {
260
+ if (interactivity !== 'non-interactive' &&
261
+ process.env['INSIDE_WEB_BROWSER'] !== '1') {
229
262
  const { action } = await prompts({
230
263
  type: 'confirm',
231
264
  name: 'action',
@@ -246,9 +279,13 @@ const run = async (argv) => {
246
279
  });
247
280
  return;
248
281
  }
249
- await cli(parseArgs(argv, { string: ['code'] }));
282
+ await cli(parseCliArgs(argv));
250
283
  };
251
284
  run(process.argv.slice(2)).catch((e) => {
285
+ if (e instanceof NonInteractiveError) {
286
+ console.log(chalk.red(e.message));
287
+ process.exit(1);
288
+ }
252
289
  console.log(chalk.red(`CLI Error: ${e.toString()}\n${e.stack}`));
253
290
  if (e.toString().includes('object Object')) {
254
291
  console.log(e);
package/bin/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { interactForCustomMetadata } from './interact-for-custom-metadata.js';
9
9
  import { interactForDevice } from './interact-for-device.js';
10
10
  import { interactForTimestamp } from './interact-for-timestamp.js';
11
11
  import { interactForUserIdentity } from './interact-for-user-identity.js';
12
+ import { NonInteractiveError, toArgName } from './util/cli-args.js';
12
13
  import { ellipsis } from './util/ellipsis.js';
13
14
  const ergonomicPropOrder = [
14
15
  'name',
@@ -28,10 +29,20 @@ export const interactForBlueprintObject = async (args, ctx) => {
28
29
  .filter((parameter) => parameter.isRequired)
29
30
  .map((parameter) => parameter.name);
30
31
  const haveAllRequiredParams = required.every((k) => args.params[k]);
31
- const should_auto_submit = !ctx.is_interactive && haveAllRequiredParams && !args.isSubProperty;
32
+ const cmdPath = `/${args.command.join('/').replace(/-/g, '_')}`;
33
+ const should_auto_submit = ctx.interactivity !== 'interactive' &&
34
+ haveAllRequiredParams &&
35
+ !args.isSubProperty;
32
36
  if (should_auto_submit) {
33
37
  return args.params;
34
38
  }
39
+ if (ctx.interactivity === 'non-interactive') {
40
+ const missing = required.filter((k) => !args.params[k]);
41
+ const target = args.isSubProperty ? `"${args.subPropertyPath}"` : cmdPath;
42
+ throw new NonInteractiveError(missing.length > 0
43
+ ? `Missing required ${missing.length === 1 ? 'parameter' : 'parameters'} for ${target}: ${missing.map(toArgName).join(' ')}`
44
+ : `Cannot prompt for ${target} in non-interactive mode`);
45
+ }
35
46
  const propSortScore = (prop) => {
36
47
  if (required.includes(prop))
37
48
  return 100 - ergonomicPropOrder.indexOf(prop);
@@ -40,7 +51,6 @@ export const interactForBlueprintObject = async (args, ctx) => {
40
51
  }
41
52
  return ergonomicPropOrder.indexOf(prop);
42
53
  };
43
- const cmdPath = `/${args.command.join('/').replace(/-/g, '_')}`;
44
54
  const parameterSelectionMessage = args.isSubProperty
45
55
  ? `Editing "${args.subPropertyPath}"`
46
56
  : `[${cmdPath}] Parameters`;
@@ -1 +1 @@
1
- {"version":3,"file":"interact-for-blueprint-object.js","sourceRoot":"","sources":["../src/lib/interact-for-blueprint-object.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interact-for-blueprint-object.js","sourceRoot":"","sources":["../src/lib/interact-for-blueprint-object.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { isDeepStrictEqual as isEqual } from 'node:util';
2
2
  import prompts from 'prompts';
3
+ import { NonInteractiveError } from './util/cli-args.js';
3
4
  const uniqBy = (items, keyOf) => {
4
5
  const seen = new Set();
5
6
  return items.filter((item) => {
@@ -43,6 +44,20 @@ export async function interactForCommandSelection(commandPath, helpers) {
43
44
  possibleCommands[0]?.length === commandPath.length) {
44
45
  return commandPath;
45
46
  }
47
+ if (helpers.interactivity === 'non-interactive') {
48
+ // The command path is itself a command, so call it directly rather than
49
+ // prompting to select one of its sub-commands.
50
+ if (possibleCommands.some((cmd) => cmd.length === commandPath.length)) {
51
+ return commandPath;
52
+ }
53
+ const subcommands = possibleCommands
54
+ .map((cmd) => cmd[commandPath.length])
55
+ .filter((subcommand) => subcommand != null)
56
+ .sort(ergonomicSort);
57
+ throw new NonInteractiveError(`${commandPath.length === 0
58
+ ? 'Missing command'
59
+ : `Incomplete command "seam ${commandPath.join(' ')}"`}: expected one of ${subcommands.join(', ')}`);
60
+ }
46
61
  // Add dynamic 'back' command for sub-commands to allow returning
47
62
  // to previous level.
48
63
  if (commandPath.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"interact-for-command-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-command-selection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interact-for-command-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-command-selection.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ApiBlueprint } from './get-api-blueprint.js';
2
+ import type { Interactivity } from './util/cli-args.js';
2
3
  export interface ContextHelpers {
3
4
  blueprint: ApiBlueprint;
4
- is_interactive: boolean;
5
+ interactivity: Interactivity;
5
6
  }
@@ -0,0 +1,30 @@
1
+ import { type ParsedArgs } from 'minimist';
2
+ /**
3
+ * How the CLI should behave when properties are not given as arguments.
4
+ *
5
+ * - `auto`: make the request as soon as every required property is given,
6
+ * otherwise prompt for what is missing. This is the default.
7
+ * - `interactive`: always prompt to review and edit properties, prefilled
8
+ * with the given arguments. Selected with `--interactive` or `-i`.
9
+ * - `non-interactive`: never prompt: anything missing is an error.
10
+ * Selected with `--non-interactive` or `-y`.
11
+ */
12
+ export type Interactivity = 'auto' | 'interactive' | 'non-interactive';
13
+ /**
14
+ * Argument keys that select the interactivity
15
+ * and are therefore not command parameters.
16
+ */
17
+ export declare const interactivityFlags: string[];
18
+ /**
19
+ * Thrown when the CLI needs input it cannot prompt for.
20
+ */
21
+ export declare class NonInteractiveError extends Error {
22
+ name: string;
23
+ }
24
+ export declare const parseCliArgs: (argv: string[]) => ParsedArgs;
25
+ export declare const getInteractivity: (args: ParsedArgs) => Interactivity;
26
+ /**
27
+ * Render a parameter name as the argument used to set it,
28
+ * e.g., `device_id` as `--device-id`.
29
+ */
30
+ export declare const toArgName: (parameterName: string) => string;
@@ -0,0 +1,42 @@
1
+ import parseArgs, {} from 'minimist';
2
+ /**
3
+ * Argument keys that select the interactivity
4
+ * and are therefore not command parameters.
5
+ */
6
+ export const interactivityFlags = [
7
+ 'non_interactive',
8
+ 'y',
9
+ 'interactive',
10
+ 'i',
11
+ ];
12
+ /**
13
+ * Thrown when the CLI needs input it cannot prompt for.
14
+ */
15
+ export class NonInteractiveError extends Error {
16
+ name = 'NonInteractiveError';
17
+ }
18
+ export const parseCliArgs = (argv) => parseArgs(argv, {
19
+ string: ['code'],
20
+ boolean: ['non-interactive', 'interactive'],
21
+ // Deliberately not aliased to -n, which is reserved for a future
22
+ // --dry-run flag.
23
+ alias: { 'non-interactive': 'y', interactive: 'i' },
24
+ });
25
+ export const getInteractivity = (args) => {
26
+ const isNonInteractive = args['non_interactive'] === true || args['y'] === true;
27
+ const isInteractive = args['interactive'] === true || args['i'] === true;
28
+ if (isNonInteractive && isInteractive) {
29
+ throw new Error('The --interactive and --non-interactive flags cannot be used together');
30
+ }
31
+ if (isNonInteractive)
32
+ return 'non-interactive';
33
+ if (isInteractive)
34
+ return 'interactive';
35
+ return 'auto';
36
+ };
37
+ /**
38
+ * Render a parameter name as the argument used to set it,
39
+ * e.g., `device_id` as `--device-id`.
40
+ */
41
+ export const toArgName = (parameterName) => `--${parameterName.replace(/_/g, '-')}`;
42
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../src/lib/util/cli-args.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAmB,MAAM,UAAU,CAAA;AAcrD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAa;IAC1C,iBAAiB;IACjB,GAAG;IACH,aAAa;IACb,GAAG;CACJ,CAAA;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,qBAAqB,CAAA;CACtC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAc,EAAc,EAAE,CACzD,SAAS,CAAC,IAAI,EAAE;IACd,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC;IAC3C,iEAAiE;IACjE,kBAAkB;IAClB,KAAK,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;CACpD,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAgB,EAAiB,EAAE;IAClE,MAAM,gBAAgB,GACpB,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IACxD,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAA;IAExE,IAAI,gBAAgB,IAAI,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,CAAC;IACD,IAAI,gBAAgB;QAAE,OAAO,iBAAiB,CAAA;IAC9C,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IACvC,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAqB,EAAU,EAAE,CACzD,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAA"}
package/lib/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const seamapiCliVersion = "0.9.0";
1
+ declare const seamapiCliVersion = "0.10.0";
2
2
  declare const seamapiBlueprintVersion = "1.2.0";
3
3
  export { seamapiBlueprintVersion };
4
4
  export default seamapiCliVersion;
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Versions are replaced with generated values when the package is packed.
2
- const seamapiCliVersion = '0.9.0';
2
+ const seamapiCliVersion = '0.10.0';
3
3
  const seamapiBlueprintVersion = '1.2.0';
4
4
  export { seamapiBlueprintVersion };
5
5
  export default seamapiCliVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/lib/version.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,OAAO,CAAA;AACjC,MAAM,uBAAuB,GAAG,OAAO,CAAA;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/lib/version.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,QAAQ,CAAA;AAClC,MAAM,uBAAuB,GAAG,OAAO,CAAA;AAEvC,OAAO,EAAE,uBAAuB,EAAE,CAAA;AAClC,eAAe,iBAAiB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/cli",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "A command line interface (CLI) for interacting with the Seam API.",
5
5
  "type": "module",
6
6
  "main": "index.js",
package/src/bin/cli.ts CHANGED
@@ -4,7 +4,7 @@ import { isDeepStrictEqual as isEqual } from 'node:util'
4
4
 
5
5
  import chalk from 'chalk'
6
6
  import commandLineUsage from 'command-line-usage'
7
- import parseArgs, { type ParsedArgs } from 'minimist'
7
+ import type { ParsedArgs } from 'minimist'
8
8
  import prompts from 'prompts'
9
9
 
10
10
  import { getConfigStore } from 'lib/config/index.js'
@@ -18,6 +18,13 @@ import { interactForServerSelection } from 'lib/interact-for-server-selection.js
18
18
  import { interactForUseRemoteApiDefs } from 'lib/interact-for-use-remote-api-defs.js'
19
19
  import { interactForWorkspaceId } from 'lib/interact-for-workspace-id.js'
20
20
  import type { ContextHelpers } from 'lib/types.js'
21
+ import {
22
+ getInteractivity,
23
+ type Interactivity,
24
+ interactivityFlags,
25
+ NonInteractiveError,
26
+ parseCliArgs,
27
+ } from 'lib/util/cli-args.js'
21
28
  import { RequestSeamApi } from 'lib/util/request-seam-api.js'
22
29
  import { validateToken } from 'lib/validate-token.js'
23
30
  import seamapiCliVersion from 'lib/version.js'
@@ -26,7 +33,7 @@ const sections = [
26
33
  {
27
34
  header: 'Seam CLI',
28
35
  content:
29
- 'Every seam command is interactive and will prompt you for any missing required properties with helpful suggestions. To avoid automatic behavior, pass -y ',
36
+ 'Every seam command runs as soon as every required property is given, and otherwise prompts you for what is missing with helpful suggestions. Pass -i to always review properties first, or -y to never be prompted. ',
30
37
  },
31
38
  {
32
39
  header: 'Options',
@@ -37,6 +44,20 @@ const sections = [
37
44
  alias: 'h',
38
45
  type: Boolean,
39
46
  },
47
+ {
48
+ name: 'interactive',
49
+ description:
50
+ 'Always prompt to review and edit properties, prefilled with the given arguments.',
51
+ alias: 'i',
52
+ type: Boolean,
53
+ },
54
+ {
55
+ name: 'non-interactive',
56
+ description:
57
+ 'Never prompt: exit with an error if the command or any required property is missing.',
58
+ alias: 'y',
59
+ type: Boolean,
60
+ },
40
61
  {
41
62
  name: 'update',
42
63
  description: 'Force an update of the cached Seam API definitions.',
@@ -59,6 +80,14 @@ const sections = [
59
80
  summary: 'Create a connect webview to connect devices.',
60
81
  },
61
82
  { name: 'seam devices list', summary: 'List devices in your workspace.' },
83
+ {
84
+ name: 'seam devices list {bold --interactive}',
85
+ summary: 'Review and edit filters before listing devices.',
86
+ },
87
+ {
88
+ name: 'seam devices list {bold --non-interactive}',
89
+ summary: 'List devices, failing instead of prompting.',
90
+ },
62
91
  {
63
92
  name: 'seam locks unlock-door {bold --device-id} $MY_DOOR',
64
93
  summary: 'Unlock a lock.',
@@ -131,22 +160,21 @@ async function cli(args: ParsedArgs) {
131
160
 
132
161
  const commandParams: Record<string, any> = {}
133
162
 
134
- /**
135
- * Whether or not to auto-select first option
136
- */
137
- const is_interactive = args['y'] !== true
138
-
139
163
  const ctx: ContextHelpers = {
140
164
  blueprint,
141
- is_interactive,
165
+ interactivity: getInteractivity(args),
142
166
  }
143
167
 
168
+ const isNonInteractive = ctx.interactivity === 'non-interactive'
169
+
144
170
  for (const k in args) {
145
171
  if (k === '_') continue
146
172
  const v = args[k]
147
173
  delete args[k]
148
- args[k.replace(/-/g, '_')] = v
149
- commandParams[k.replace(/-/g, '_')] = v
174
+ const key = k.replace(/-/g, '_')
175
+ args[key] = v
176
+ if (interactivityFlags.includes(key)) continue
177
+ commandParams[key] = v
150
178
  }
151
179
 
152
180
  const selectedCommand = await interactForCommandSelection(args._, ctx)
@@ -167,6 +195,11 @@ async function cli(args: ParsedArgs) {
167
195
  if (args['token'] || args['workspace_id'] || args['server']) {
168
196
  return
169
197
  }
198
+ if (isNonInteractive) {
199
+ throw new NonInteractiveError(
200
+ 'Missing required parameter for login: --token',
201
+ )
202
+ }
170
203
  await interactForLogin()
171
204
  return
172
205
  } else if (isEqual(selectedCommand, ['logout'])) {
@@ -177,9 +210,19 @@ async function cli(args: ParsedArgs) {
177
210
  console.log(config.path)
178
211
  return
179
212
  } else if (isEqual(selectedCommand, ['config', 'use-remote-api-defs'])) {
213
+ if (isNonInteractive) {
214
+ throw new NonInteractiveError(
215
+ 'Cannot select whether to use remote API definitions in non-interactive mode',
216
+ )
217
+ }
180
218
  await interactForUseRemoteApiDefs()
181
219
  return
182
220
  } else if (isEqual(selectedCommand, ['select', 'workspace'])) {
221
+ if (isNonInteractive) {
222
+ throw new NonInteractiveError(
223
+ 'Cannot select a workspace in non-interactive mode: pass --workspace-id to "seam login"',
224
+ )
225
+ }
183
226
  await interactForWorkspaceId()
184
227
  return
185
228
  } else if (isEqual(selectedCommand, ['events', 'list'])) {
@@ -194,6 +237,11 @@ async function cli(args: ParsedArgs) {
194
237
  config.delete('current_workspace_id')
195
238
  return
196
239
  }
240
+ if (isNonInteractive) {
241
+ throw new NonInteractiveError(
242
+ 'Missing required parameter for select server: --server',
243
+ )
244
+ }
197
245
  await interactForServerSelection()
198
246
  return
199
247
  } else if (isEqual(selectedCommand, ['health', 'get-health'])) {
@@ -246,18 +294,27 @@ async function cli(args: ParsedArgs) {
246
294
  })
247
295
 
248
296
  if (response.data?.connect_webview) {
249
- await handleConnectWebviewResponse(response.data.connect_webview)
297
+ await handleConnectWebviewResponse(
298
+ response.data.connect_webview,
299
+ ctx.interactivity,
300
+ )
250
301
  }
251
302
 
252
- if (response.data?.action_attempt) {
303
+ if (response.data?.action_attempt && !isNonInteractive) {
253
304
  interactForActionAttemptPoll(response.data.action_attempt)
254
305
  }
255
306
  }
256
307
 
257
- const handleConnectWebviewResponse = async (connect_webview: any) => {
308
+ const handleConnectWebviewResponse = async (
309
+ connect_webview: any,
310
+ interactivity: Interactivity,
311
+ ) => {
258
312
  const url = connect_webview.url
259
313
 
260
- if (process.env['INSIDE_WEB_BROWSER'] !== '1') {
314
+ if (
315
+ interactivity !== 'non-interactive' &&
316
+ process.env['INSIDE_WEB_BROWSER'] !== '1'
317
+ ) {
261
318
  const { action } = await prompts({
262
319
  type: 'confirm',
263
320
  name: 'action',
@@ -281,10 +338,15 @@ const run = async (argv: string[]) => {
281
338
  return
282
339
  }
283
340
 
284
- await cli(parseArgs(argv, { string: ['code'] }))
341
+ await cli(parseCliArgs(argv))
285
342
  }
286
343
 
287
344
  run(process.argv.slice(2)).catch((e) => {
345
+ if (e instanceof NonInteractiveError) {
346
+ console.log(chalk.red(e.message))
347
+ process.exit(1)
348
+ }
349
+
288
350
  console.log(chalk.red(`CLI Error: ${e.toString()}\n${e.stack}`))
289
351
  if (e.toString().includes('object Object')) {
290
352
  console.log(e)
@@ -12,6 +12,7 @@ import { interactForDevice } from './interact-for-device.js'
12
12
  import { interactForTimestamp } from './interact-for-timestamp.js'
13
13
  import { interactForUserIdentity } from './interact-for-user-identity.js'
14
14
  import type { ContextHelpers } from './types.js'
15
+ import { NonInteractiveError, toArgName } from './util/cli-args.js'
15
16
  import { ellipsis } from './util/ellipsis.js'
16
17
 
17
18
  const ergonomicPropOrder = [
@@ -47,12 +48,28 @@ export const interactForBlueprintObject = async (
47
48
 
48
49
  const haveAllRequiredParams = required.every((k) => args.params[k])
49
50
 
51
+ const cmdPath = `/${args.command.join('/').replace(/-/g, '_')}`
52
+
50
53
  const should_auto_submit =
51
- !ctx.is_interactive && haveAllRequiredParams && !args.isSubProperty
54
+ ctx.interactivity !== 'interactive' &&
55
+ haveAllRequiredParams &&
56
+ !args.isSubProperty
52
57
  if (should_auto_submit) {
53
58
  return args.params
54
59
  }
55
60
 
61
+ if (ctx.interactivity === 'non-interactive') {
62
+ const missing = required.filter((k) => !args.params[k])
63
+ const target = args.isSubProperty ? `"${args.subPropertyPath}"` : cmdPath
64
+ throw new NonInteractiveError(
65
+ missing.length > 0
66
+ ? `Missing required ${
67
+ missing.length === 1 ? 'parameter' : 'parameters'
68
+ } for ${target}: ${missing.map(toArgName).join(' ')}`
69
+ : `Cannot prompt for ${target} in non-interactive mode`,
70
+ )
71
+ }
72
+
56
73
  const propSortScore = (prop: string) => {
57
74
  if (required.includes(prop)) return 100 - ergonomicPropOrder.indexOf(prop)
58
75
  if (args.params[prop] !== undefined) {
@@ -61,7 +78,6 @@ export const interactForBlueprintObject = async (
61
78
  return ergonomicPropOrder.indexOf(prop)
62
79
  }
63
80
 
64
- const cmdPath = `/${args.command.join('/').replace(/-/g, '_')}`
65
81
  const parameterSelectionMessage = args.isSubProperty
66
82
  ? `Editing "${args.subPropertyPath}"`
67
83
  : `[${cmdPath}] Parameters`
@@ -3,6 +3,7 @@ import { isDeepStrictEqual as isEqual } from 'node:util'
3
3
  import prompts from 'prompts'
4
4
 
5
5
  import type { ContextHelpers } from './types.js'
6
+ import { NonInteractiveError } from './util/cli-args.js'
6
7
 
7
8
  const uniqBy = <T>(items: T[], keyOf: (item: T) => unknown): T[] => {
8
9
  const seen = new Set<unknown>()
@@ -64,6 +65,26 @@ export async function interactForCommandSelection(
64
65
  return commandPath
65
66
  }
66
67
 
68
+ if (helpers.interactivity === 'non-interactive') {
69
+ // The command path is itself a command, so call it directly rather than
70
+ // prompting to select one of its sub-commands.
71
+ if (possibleCommands.some((cmd) => cmd.length === commandPath.length)) {
72
+ return commandPath
73
+ }
74
+
75
+ const subcommands = possibleCommands
76
+ .map((cmd) => cmd[commandPath.length])
77
+ .filter((subcommand) => subcommand != null)
78
+ .sort(ergonomicSort)
79
+ throw new NonInteractiveError(
80
+ `${
81
+ commandPath.length === 0
82
+ ? 'Missing command'
83
+ : `Incomplete command "seam ${commandPath.join(' ')}"`
84
+ }: expected one of ${subcommands.join(', ')}`,
85
+ )
86
+ }
87
+
67
88
  // Add dynamic 'back' command for sub-commands to allow returning
68
89
  // to previous level.
69
90
  if (commandPath.length > 0) {
package/src/lib/types.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { ApiBlueprint } from './get-api-blueprint.js'
2
+ import type { Interactivity } from './util/cli-args.js'
2
3
 
3
4
  export interface ContextHelpers {
4
5
  blueprint: ApiBlueprint
5
- is_interactive: boolean
6
+ interactivity: Interactivity
6
7
  }
@@ -0,0 +1,62 @@
1
+ import parseArgs, { type ParsedArgs } from 'minimist'
2
+
3
+ /**
4
+ * How the CLI should behave when properties are not given as arguments.
5
+ *
6
+ * - `auto`: make the request as soon as every required property is given,
7
+ * otherwise prompt for what is missing. This is the default.
8
+ * - `interactive`: always prompt to review and edit properties, prefilled
9
+ * with the given arguments. Selected with `--interactive` or `-i`.
10
+ * - `non-interactive`: never prompt: anything missing is an error.
11
+ * Selected with `--non-interactive` or `-y`.
12
+ */
13
+ export type Interactivity = 'auto' | 'interactive' | 'non-interactive'
14
+
15
+ /**
16
+ * Argument keys that select the interactivity
17
+ * and are therefore not command parameters.
18
+ */
19
+ export const interactivityFlags: string[] = [
20
+ 'non_interactive',
21
+ 'y',
22
+ 'interactive',
23
+ 'i',
24
+ ]
25
+
26
+ /**
27
+ * Thrown when the CLI needs input it cannot prompt for.
28
+ */
29
+ export class NonInteractiveError extends Error {
30
+ override name = 'NonInteractiveError'
31
+ }
32
+
33
+ export const parseCliArgs = (argv: string[]): ParsedArgs =>
34
+ parseArgs(argv, {
35
+ string: ['code'],
36
+ boolean: ['non-interactive', 'interactive'],
37
+ // Deliberately not aliased to -n, which is reserved for a future
38
+ // --dry-run flag.
39
+ alias: { 'non-interactive': 'y', interactive: 'i' },
40
+ })
41
+
42
+ export const getInteractivity = (args: ParsedArgs): Interactivity => {
43
+ const isNonInteractive =
44
+ args['non_interactive'] === true || args['y'] === true
45
+ const isInteractive = args['interactive'] === true || args['i'] === true
46
+
47
+ if (isNonInteractive && isInteractive) {
48
+ throw new Error(
49
+ 'The --interactive and --non-interactive flags cannot be used together',
50
+ )
51
+ }
52
+ if (isNonInteractive) return 'non-interactive'
53
+ if (isInteractive) return 'interactive'
54
+ return 'auto'
55
+ }
56
+
57
+ /**
58
+ * Render a parameter name as the argument used to set it,
59
+ * e.g., `device_id` as `--device-id`.
60
+ */
61
+ export const toArgName = (parameterName: string): string =>
62
+ `--${parameterName.replace(/_/g, '-')}`
@@ -1,5 +1,5 @@
1
1
  // Versions are replaced with generated values when the package is packed.
2
- const seamapiCliVersion = '0.9.0'
2
+ const seamapiCliVersion = '0.10.0'
3
3
  const seamapiBlueprintVersion = '1.2.0'
4
4
 
5
5
  export { seamapiBlueprintVersion }