@seamapi/cli 0.18.1 → 0.19.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 +55 -1
- package/bin/cli.js +73 -249
- package/bin/cli.js.map +1 -1
- package/lib/args/coerce.d.ts +28 -0
- package/lib/args/coerce.js +131 -0
- package/lib/args/coerce.js.map +1 -0
- package/lib/{util/cli-args.d.ts → args/parse.d.ts} +12 -15
- package/lib/{util/cli-args.js → args/parse.js} +21 -24
- package/lib/args/parse.js.map +1 -0
- package/lib/args/validate.d.ts +23 -0
- package/lib/args/validate.js +42 -0
- package/lib/args/validate.js.map +1 -0
- package/lib/auth/operations.d.ts +54 -0
- package/lib/auth/operations.js +115 -0
- package/lib/auth/operations.js.map +1 -0
- package/lib/{validate-token.js → auth/validate-token.js} +2 -2
- package/lib/auth/validate-token.js.map +1 -0
- package/lib/blueprint/cache.d.ts +16 -0
- package/lib/blueprint/cache.js +73 -0
- package/lib/blueprint/cache.js.map +1 -0
- package/lib/blueprint/endpoint.d.ts +14 -0
- package/lib/{get-response-key.js → blueprint/endpoint.js} +11 -2
- package/lib/blueprint/endpoint.js.map +1 -0
- package/lib/blueprint/index.d.ts +12 -0
- package/lib/blueprint/index.js +10 -0
- package/lib/blueprint/index.js.map +1 -0
- package/lib/blueprint/source-npm.d.ts +10 -0
- package/lib/{blueprint.js → blueprint/source-npm.js} +20 -74
- package/lib/blueprint/source-npm.js.map +1 -0
- package/lib/blueprint/source-remote.d.ts +6 -0
- package/lib/blueprint/source-remote.js +14 -0
- package/lib/blueprint/source-remote.js.map +1 -0
- package/lib/commands/api-command.d.ts +8 -0
- package/lib/commands/api-command.js +71 -0
- package/lib/commands/api-command.js.map +1 -0
- package/lib/commands/local/completion.d.ts +18 -0
- package/lib/commands/local/completion.js +35 -0
- package/lib/commands/local/completion.js.map +1 -0
- package/lib/commands/local/config-reveal-location.d.ts +2 -0
- package/lib/commands/local/config-reveal-location.js +15 -0
- package/lib/commands/local/config-reveal-location.js.map +1 -0
- package/lib/commands/local/config-set-fake-server.d.ts +3 -0
- package/lib/commands/local/config-set-fake-server.js +20 -0
- package/lib/commands/local/config-set-fake-server.js.map +1 -0
- package/lib/commands/local/config-use-remote-api-defs.d.ts +2 -0
- package/lib/commands/local/config-use-remote-api-defs.js +20 -0
- package/lib/commands/local/config-use-remote-api-defs.js.map +1 -0
- package/lib/commands/local/health.d.ts +2 -0
- package/lib/commands/local/health.js +18 -0
- package/lib/commands/local/health.js.map +1 -0
- package/lib/commands/local/login.d.ts +2 -0
- package/lib/commands/local/login.js +35 -0
- package/lib/commands/local/login.js.map +1 -0
- package/lib/commands/local/logout.d.ts +2 -0
- package/lib/commands/local/logout.js +17 -0
- package/lib/commands/local/logout.js.map +1 -0
- package/lib/commands/local/select-server.d.ts +2 -0
- package/lib/commands/local/select-server.js +27 -0
- package/lib/commands/local/select-server.js.map +1 -0
- package/lib/commands/local/select-workspace.d.ts +2 -0
- package/lib/commands/local/select-workspace.js +22 -0
- package/lib/commands/local/select-workspace.js.map +1 -0
- package/lib/commands/local/wizard.d.ts +9 -0
- package/lib/commands/local/wizard.js +28 -0
- package/lib/commands/local/wizard.js.map +1 -0
- package/lib/commands/registry.d.ts +54 -0
- package/lib/commands/registry.js +64 -0
- package/lib/commands/registry.js.map +1 -0
- package/lib/{command-spec.d.ts → commands/spec.d.ts} +8 -12
- package/lib/{command-spec.js → commands/spec.js} +27 -120
- package/lib/commands/spec.js.map +1 -0
- package/lib/config/config-store.d.ts +23 -8
- package/lib/config/config-store.js +16 -42
- package/lib/config/config-store.js.map +1 -1
- package/lib/config/index.d.ts +2 -1
- package/lib/config/index.js +2 -1
- package/lib/config/index.js.map +1 -1
- package/lib/config/memory-config-store.d.ts +21 -0
- package/lib/config/memory-config-store.js +48 -0
- package/lib/config/memory-config-store.js.map +1 -0
- package/lib/config/migrate.js +1 -1
- package/lib/config/migrate.js.map +1 -1
- package/lib/config/values.d.ts +12 -0
- package/lib/config/values.js +50 -0
- package/lib/config/values.js.map +1 -0
- package/lib/context.d.ts +37 -0
- package/lib/context.js +31 -0
- package/lib/context.js.map +1 -0
- package/lib/env.d.ts +5 -0
- package/lib/env.js +5 -0
- package/lib/env.js.map +1 -1
- package/lib/errors.d.ts +31 -0
- package/lib/errors.js +58 -0
- package/lib/errors.js.map +1 -0
- package/lib/http/api.d.ts +37 -0
- package/lib/http/api.js +20 -0
- package/lib/http/api.js.map +1 -0
- package/lib/http/client.d.ts +4 -0
- package/lib/{get-seam.js → http/client.js} +16 -17
- package/lib/http/client.js.map +1 -0
- package/lib/http/follow-ups.d.ts +6 -0
- package/lib/http/follow-ups.js +30 -0
- package/lib/http/follow-ups.js.map +1 -0
- package/lib/http/memory-seam-api.d.ts +22 -0
- package/lib/http/memory-seam-api.js +41 -0
- package/lib/http/memory-seam-api.js.map +1 -0
- package/lib/http/request.d.ts +19 -0
- package/lib/http/request.js +39 -0
- package/lib/http/request.js.map +1 -0
- package/lib/{interact-for-access-code.js → interactions/access-code.js} +4 -4
- package/lib/interactions/access-code.js.map +1 -0
- package/lib/{interact-for-acs-entrance.js → interactions/acs-entrance.js} +3 -3
- package/lib/interactions/acs-entrance.js.map +1 -0
- package/lib/{interact-for-acs-system.js → interactions/acs-system.js} +3 -3
- package/lib/interactions/acs-system.js.map +1 -0
- package/lib/{interact-for-acs-user.js → interactions/acs-user.js} +4 -4
- package/lib/interactions/acs-user.js.map +1 -0
- package/lib/{interact-for-action-attempt-poll.js → interactions/action-attempt-poll.js} +5 -5
- package/lib/interactions/action-attempt-poll.js.map +1 -0
- package/lib/{interact-for-array.js → interactions/array.js} +4 -3
- package/lib/interactions/array.js.map +1 -0
- package/lib/{interact-for-blueprint-object.d.ts → interactions/blueprint-object.d.ts} +3 -2
- package/lib/{interact-for-blueprint-object.js → interactions/blueprint-object.js} +49 -20
- package/lib/interactions/blueprint-object.js.map +1 -0
- package/lib/{interact-for-command-params.d.ts → interactions/command-params.d.ts} +2 -2
- package/lib/{interact-for-command-params.js → interactions/command-params.js} +4 -3
- package/lib/interactions/command-params.js.map +1 -0
- package/lib/interactions/command-selection.d.ts +10 -0
- package/lib/{interact-for-command-selection.js → interactions/command-selection.js} +9 -15
- package/lib/interactions/command-selection.js.map +1 -0
- package/lib/{interact-for-connected-account.js → interactions/connected-account.js} +3 -3
- package/lib/interactions/connected-account.js.map +1 -0
- package/lib/{interact-for-custom-metadata.js → interactions/custom-metadata.js} +4 -3
- package/lib/interactions/custom-metadata.js.map +1 -0
- package/lib/{interact-for-device.js → interactions/device.js} +3 -3
- package/lib/interactions/device.js.map +1 -0
- package/lib/interactions/index.d.ts +19 -0
- package/lib/interactions/index.js +20 -0
- package/lib/interactions/index.js.map +1 -0
- package/lib/{interact-for-login.js → interactions/login.js} +16 -14
- package/lib/interactions/login.js.map +1 -0
- package/lib/{interact-for-resource.js → interactions/resource.js} +3 -3
- package/lib/interactions/resource.js.map +1 -0
- package/lib/{interact-for-server-selection.js → interactions/server-selection.js} +10 -13
- package/lib/interactions/server-selection.js.map +1 -0
- package/lib/{interact-for-timestamp.js → interactions/timestamp.js} +2 -2
- package/lib/interactions/timestamp.js.map +1 -0
- package/lib/{interact-for-use-remote-api-defs.js → interactions/use-remote-api-defs.js} +5 -6
- package/lib/interactions/use-remote-api-defs.js.map +1 -0
- package/lib/{interact-for-user-identity.js → interactions/user-identity.js} +3 -3
- package/lib/interactions/user-identity.js.map +1 -0
- package/lib/{interact-for-workspace-id.js → interactions/workspace-id.js} +11 -10
- package/lib/interactions/workspace-id.js.map +1 -0
- package/lib/memory-prompt.d.ts +32 -0
- package/lib/memory-prompt.js +41 -0
- package/lib/memory-prompt.js.map +1 -0
- package/lib/output/get-output.d.ts +1 -1
- package/lib/output/get-output.js +1 -1
- package/lib/output/get-output.js.map +1 -1
- package/lib/output/{create-memory-output.d.ts → memory-output.d.ts} +1 -1
- package/lib/output/{create-memory-output.js → memory-output.js} +2 -2
- package/lib/output/memory-output.js.map +1 -0
- package/lib/output/{create-output.d.ts → output.d.ts} +18 -1
- package/lib/output/output.js +46 -0
- package/lib/output/output.js.map +1 -0
- package/lib/output/read-stdin-json.js.map +1 -0
- package/lib/output/resolve-output-format.d.ts +1 -1
- package/lib/{util → output}/with-loading.js +1 -1
- package/lib/output/with-loading.js.map +1 -0
- package/lib/prompt.d.ts +101 -0
- package/lib/{util/prompt.js → prompt.js} +83 -56
- package/lib/prompt.js.map +1 -0
- package/lib/{completion → render/completion}/describe.js +1 -2
- package/lib/render/completion/describe.js.map +1 -0
- package/lib/{completion → render/completion}/index.d.ts +2 -2
- package/lib/{completion → render/completion}/index.js +1 -2
- package/lib/render/completion/index.js.map +1 -0
- package/lib/{completion → render/completion}/render-bash.d.ts +1 -1
- package/lib/{completion → render/completion}/render-bash.js +1 -1
- package/lib/render/completion/render-bash.js.map +1 -0
- package/lib/{completion → render/completion}/render-fish.d.ts +1 -1
- package/lib/render/completion/render-fish.js.map +1 -0
- package/lib/{completion → render/completion}/render-zsh.d.ts +1 -1
- package/lib/{completion → render/completion}/render-zsh.js +1 -1
- package/lib/render/completion/render-zsh.js.map +1 -0
- package/lib/{render-help.d.ts → render/help.d.ts} +1 -1
- package/lib/{render-help.js → render/help.js} +2 -2
- package/lib/render/help.js.map +1 -0
- package/lib/render/text.d.ts +4 -0
- package/lib/render/text.js +16 -0
- package/lib/render/text.js.map +1 -0
- package/lib/version.d.ts +2 -2
- package/lib/version.js +2 -2
- package/package.json +4 -3
- package/src/bin/cli.ts +91 -332
- package/src/lib/args/coerce.ts +164 -0
- package/src/lib/{util/cli-args.ts → args/parse.ts} +30 -25
- package/src/lib/args/validate.ts +73 -0
- package/src/lib/auth/operations.ts +169 -0
- package/src/lib/{validate-token.ts → auth/validate-token.ts} +2 -2
- package/src/lib/blueprint/cache.ts +97 -0
- package/src/lib/{get-response-key.ts → blueprint/endpoint.ts} +17 -3
- package/src/lib/blueprint/index.ts +27 -0
- package/src/lib/{blueprint.ts → blueprint/source-npm.ts} +27 -99
- package/src/lib/blueprint/source-remote.ts +17 -0
- package/src/lib/commands/api-command.ts +109 -0
- package/src/lib/commands/local/completion.ts +51 -0
- package/src/lib/commands/local/config-reveal-location.ts +16 -0
- package/src/lib/commands/local/config-set-fake-server.ts +21 -0
- package/src/lib/commands/local/config-use-remote-api-defs.ts +23 -0
- package/src/lib/commands/local/health.ts +22 -0
- package/src/lib/commands/local/login.ts +42 -0
- package/src/lib/commands/local/logout.ts +18 -0
- package/src/lib/commands/local/select-server.ts +30 -0
- package/src/lib/commands/local/select-workspace.ts +25 -0
- package/src/lib/commands/local/wizard.ts +31 -0
- package/src/lib/commands/registry.ts +127 -0
- package/src/lib/{command-spec.ts → commands/spec.ts} +30 -131
- package/src/lib/config/config-store.ts +39 -64
- package/src/lib/config/index.ts +8 -1
- package/src/lib/config/memory-config-store.ts +62 -0
- package/src/lib/config/migrate.ts +1 -1
- package/src/lib/config/values.ts +72 -0
- package/src/lib/context.ts +84 -0
- package/src/lib/env.ts +9 -2
- package/src/lib/errors.ts +67 -0
- package/src/lib/http/api.ts +61 -0
- package/src/lib/{get-seam.ts → http/client.ts} +19 -18
- package/src/lib/http/follow-ups.ts +42 -0
- package/src/lib/http/memory-seam-api.ts +57 -0
- package/src/lib/http/request.ts +69 -0
- package/src/lib/{interact-for-access-code.ts → interactions/access-code.ts} +4 -3
- package/src/lib/{interact-for-acs-entrance.ts → interactions/acs-entrance.ts} +3 -2
- package/src/lib/{interact-for-acs-system.ts → interactions/acs-system.ts} +3 -2
- package/src/lib/{interact-for-acs-user.ts → interactions/acs-user.ts} +4 -3
- package/src/lib/{interact-for-action-attempt-poll.ts → interactions/action-attempt-poll.ts} +4 -4
- package/src/lib/{interact-for-array.ts → interactions/array.ts} +3 -3
- package/src/lib/{interact-for-blueprint-object.ts → interactions/blueprint-object.ts} +57 -24
- package/src/lib/{interact-for-command-params.ts → interactions/command-params.ts} +6 -4
- package/src/lib/{interact-for-command-selection.ts → interactions/command-selection.ts} +11 -23
- package/src/lib/{interact-for-connected-account.ts → interactions/connected-account.ts} +3 -2
- package/src/lib/{interact-for-custom-metadata.ts → interactions/custom-metadata.ts} +3 -7
- package/src/lib/{interact-for-device.ts → interactions/device.ts} +3 -2
- package/src/lib/interactions/index.ts +19 -0
- package/src/lib/{interact-for-login.ts → interactions/login.ts} +16 -13
- package/src/lib/{interact-for-resource.ts → interactions/resource.ts} +2 -2
- package/src/lib/{interact-for-server-selection.ts → interactions/server-selection.ts} +12 -17
- package/src/lib/{interact-for-timestamp.ts → interactions/timestamp.ts} +1 -1
- package/src/lib/{interact-for-use-remote-api-defs.ts → interactions/use-remote-api-defs.ts} +4 -5
- package/src/lib/{interact-for-user-identity.ts → interactions/user-identity.ts} +3 -2
- package/src/lib/{interact-for-workspace-id.ts → interactions/workspace-id.ts} +10 -17
- package/src/lib/memory-prompt.ts +89 -0
- package/src/lib/output/get-output.ts +1 -1
- package/src/lib/output/{create-memory-output.ts → memory-output.ts} +1 -1
- package/src/lib/output/{create-output.ts → output.ts} +47 -32
- package/src/lib/output/resolve-output-format.ts +1 -1
- package/src/lib/{util → output}/with-loading.ts +1 -1
- package/src/lib/prompt.ts +306 -0
- package/src/lib/{completion → render/completion}/describe.ts +1 -2
- package/src/lib/{completion → render/completion}/index.ts +3 -4
- package/src/lib/{completion → render/completion}/render-bash.ts +1 -1
- package/src/lib/{completion → render/completion}/render-fish.ts +2 -1
- package/src/lib/{completion → render/completion}/render-zsh.ts +2 -1
- package/src/lib/{render-help.ts → render/help.ts} +1 -1
- package/src/lib/render/text.ts +17 -0
- package/src/lib/version.ts +2 -2
- package/lib/blueprint.d.ts +0 -7
- package/lib/blueprint.js.map +0 -1
- package/lib/command-spec.js.map +0 -1
- package/lib/completion/describe.js.map +0 -1
- package/lib/completion/index.js.map +0 -1
- package/lib/completion/render-bash.js.map +0 -1
- package/lib/completion/render-fish.js.map +0 -1
- package/lib/completion/render-zsh.js.map +0 -1
- package/lib/get-api-blueprint.d.ts +0 -6
- package/lib/get-api-blueprint.js +0 -18
- package/lib/get-api-blueprint.js.map +0 -1
- package/lib/get-command-blueprint-def.d.ts +0 -2
- package/lib/get-command-blueprint-def.js +0 -11
- package/lib/get-command-blueprint-def.js.map +0 -1
- package/lib/get-credentials.d.ts +0 -15
- package/lib/get-credentials.js +0 -35
- package/lib/get-credentials.js.map +0 -1
- package/lib/get-current-workspace-id.d.ts +0 -1
- package/lib/get-current-workspace-id.js +0 -9
- package/lib/get-current-workspace-id.js.map +0 -1
- package/lib/get-response-key.d.ts +0 -9
- package/lib/get-response-key.js.map +0 -1
- package/lib/get-seam.d.ts +0 -3
- package/lib/get-seam.js.map +0 -1
- package/lib/get-server.d.ts +0 -6
- package/lib/get-server.js +0 -17
- package/lib/get-server.js.map +0 -1
- package/lib/interact-for-access-code.js.map +0 -1
- package/lib/interact-for-acs-entrance.js.map +0 -1
- package/lib/interact-for-acs-system.js.map +0 -1
- package/lib/interact-for-acs-user.js.map +0 -1
- package/lib/interact-for-action-attempt-poll.js.map +0 -1
- package/lib/interact-for-array.js.map +0 -1
- package/lib/interact-for-blueprint-object.js.map +0 -1
- package/lib/interact-for-command-params.js.map +0 -1
- package/lib/interact-for-command-selection.d.ts +0 -2
- package/lib/interact-for-command-selection.js.map +0 -1
- package/lib/interact-for-connected-account.js.map +0 -1
- package/lib/interact-for-custom-metadata.js.map +0 -1
- package/lib/interact-for-device.js.map +0 -1
- package/lib/interact-for-login.js.map +0 -1
- package/lib/interact-for-resource.js.map +0 -1
- package/lib/interact-for-server-selection.js.map +0 -1
- package/lib/interact-for-timestamp.js.map +0 -1
- package/lib/interact-for-use-remote-api-defs.js.map +0 -1
- package/lib/interact-for-user-identity.js.map +0 -1
- package/lib/interact-for-workspace-id.js.map +0 -1
- package/lib/output/create-memory-output.js.map +0 -1
- package/lib/output/create-output.js +0 -34
- package/lib/output/create-output.js.map +0 -1
- package/lib/render-help.js.map +0 -1
- package/lib/types.d.ts +0 -6
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/lib/util/cli-args.js.map +0 -1
- package/lib/util/ellipsis.d.ts +0 -1
- package/lib/util/ellipsis.js +0 -6
- package/lib/util/ellipsis.js.map +0 -1
- package/lib/util/prompt.d.ts +0 -80
- package/lib/util/prompt.js.map +0 -1
- package/lib/util/read-stdin-json.js.map +0 -1
- package/lib/util/request-seam-api.d.ts +0 -7
- package/lib/util/request-seam-api.js +0 -26
- package/lib/util/request-seam-api.js.map +0 -1
- package/lib/util/with-loading.js.map +0 -1
- package/lib/validate-token.js.map +0 -1
- package/src/lib/get-api-blueprint.ts +0 -31
- package/src/lib/get-command-blueprint-def.ts +0 -15
- package/src/lib/get-credentials.ts +0 -38
- package/src/lib/get-current-workspace-id.ts +0 -9
- package/src/lib/get-server.ts +0 -20
- package/src/lib/types.ts +0 -7
- package/src/lib/util/ellipsis.ts +0 -4
- package/src/lib/util/prompt.ts +0 -229
- package/src/lib/util/request-seam-api.ts +0 -47
- /package/lib/{validate-token.d.ts → auth/validate-token.d.ts} +0 -0
- /package/lib/{interact-for-access-code.d.ts → interactions/access-code.d.ts} +0 -0
- /package/lib/{interact-for-acs-entrance.d.ts → interactions/acs-entrance.d.ts} +0 -0
- /package/lib/{interact-for-acs-system.d.ts → interactions/acs-system.d.ts} +0 -0
- /package/lib/{interact-for-acs-user.d.ts → interactions/acs-user.d.ts} +0 -0
- /package/lib/{interact-for-action-attempt-poll.d.ts → interactions/action-attempt-poll.d.ts} +0 -0
- /package/lib/{interact-for-array.d.ts → interactions/array.d.ts} +0 -0
- /package/lib/{interact-for-connected-account.d.ts → interactions/connected-account.d.ts} +0 -0
- /package/lib/{interact-for-custom-metadata.d.ts → interactions/custom-metadata.d.ts} +0 -0
- /package/lib/{interact-for-device.d.ts → interactions/device.d.ts} +0 -0
- /package/lib/{interact-for-login.d.ts → interactions/login.d.ts} +0 -0
- /package/lib/{interact-for-resource.d.ts → interactions/resource.d.ts} +0 -0
- /package/lib/{interact-for-server-selection.d.ts → interactions/server-selection.d.ts} +0 -0
- /package/lib/{interact-for-timestamp.d.ts → interactions/timestamp.d.ts} +0 -0
- /package/lib/{interact-for-use-remote-api-defs.d.ts → interactions/use-remote-api-defs.d.ts} +0 -0
- /package/lib/{interact-for-user-identity.d.ts → interactions/user-identity.d.ts} +0 -0
- /package/lib/{interact-for-workspace-id.d.ts → interactions/workspace-id.d.ts} +0 -0
- /package/lib/{util → output}/read-stdin-json.d.ts +0 -0
- /package/lib/{util → output}/read-stdin-json.js +0 -0
- /package/lib/{util → output}/with-loading.d.ts +0 -0
- /package/lib/{completion → render/completion}/describe.d.ts +0 -0
- /package/lib/{completion → render/completion}/render-fish.js +0 -0
- /package/src/lib/{util → output}/read-stdin-json.ts +0 -0
package/README.md
CHANGED
|
@@ -22,7 +22,9 @@ $ npm install --global @seamapi/cli
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Alternatively, download a standalone binary for your platform from the
|
|
25
|
-
[latest GitHub release].
|
|
25
|
+
[latest GitHub release]. The macOS binaries are signed with the Seam Labs, Inc.
|
|
26
|
+
Apple Developer ID and notarized by Apple, so macOS runs them without
|
|
27
|
+
a Gatekeeper prompt.
|
|
26
28
|
|
|
27
29
|
On Arch Linux, install the [`seam-bin`][aur] package from the AUR with
|
|
28
30
|
|
|
@@ -396,6 +398,58 @@ The following repository secrets must be set on [GitHub Actions]:
|
|
|
396
398
|
[GitHub Actions]: https://github.com/features/actions
|
|
397
399
|
[GPG private key]: https://github.com/marketplace/actions/import-gpg#prerequisites
|
|
398
400
|
|
|
401
|
+
### Signing the macOS binaries
|
|
402
|
+
|
|
403
|
+
The standalone macOS binaries are code signed and notarized while they are
|
|
404
|
+
built, so that Gatekeeper lets them run on machines other than the one that
|
|
405
|
+
built them. Both need an [Apple Developer Program] membership.
|
|
406
|
+
|
|
407
|
+
Anything that releases signs, and fails rather than publish a binary that
|
|
408
|
+
macOS refuses to run. A check builds the macOS binaries with `sign: false`
|
|
409
|
+
instead: a pull request from a fork cannot read the credentials, and nothing a
|
|
410
|
+
check builds is ever released. There is no ad-hoc signature fallback, since
|
|
411
|
+
Gatekeeper rejects one anywhere but the machine that made it.
|
|
412
|
+
|
|
413
|
+
Set these repository secrets to code sign:
|
|
414
|
+
|
|
415
|
+
- `APPLE_CERTIFICATE`: A base64 encoded PKCS#12 (`.p12`) bundle holding a
|
|
416
|
+
[Developer ID Application] certificate, its private key, and its certificate
|
|
417
|
+
chain. Export it from Keychain Access, then encode it with
|
|
418
|
+
`base64 --input certificate.p12 | pbcopy`.
|
|
419
|
+
- `APPLE_CERTIFICATE_PASSWORD`: The password set while exporting the bundle.
|
|
420
|
+
- `APPLE_SIGNING_IDENTITY`: Normally left unset. The build signs with the one
|
|
421
|
+
Developer ID Application identity in the bundle, so this is only needed to
|
|
422
|
+
choose between several, e.g.,
|
|
423
|
+
`Developer ID Application: Seam Labs, Inc. (XXXXXXXXXX)`.
|
|
424
|
+
|
|
425
|
+
And these to notarize, from an [App Store Connect API key]:
|
|
426
|
+
|
|
427
|
+
- `APPLE_API_KEY`: The base64 encoded API private key (`.p8`).
|
|
428
|
+
- `APPLE_API_KEY_ID`: The API key id.
|
|
429
|
+
- `APPLE_API_ISSUER_ID`: The API key issuer id.
|
|
430
|
+
|
|
431
|
+
Notarization tickets cannot be stapled to a bare executable, so Gatekeeper
|
|
432
|
+
looks them up online the first time a downloaded binary runs.
|
|
433
|
+
|
|
434
|
+
Check the credentials without cutting a release by triggering
|
|
435
|
+
[a build workflow_dispatch on GitHub Actions], on the web or with
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
$ gh workflow run build.yml --ref <branch>
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
GitHub only offers a workflow_dispatch for a workflow already on the default
|
|
442
|
+
branch, so the build workflow must be merged first. It then runs against any
|
|
443
|
+
branch.
|
|
444
|
+
|
|
445
|
+
Then confirm the run's macOS binaries job signed and notarized: it verifies the
|
|
446
|
+
signature, assesses the binary the way Gatekeeper does, and runs it.
|
|
447
|
+
|
|
448
|
+
[App Store Connect API key]: https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api
|
|
449
|
+
[Apple Developer Program]: https://developer.apple.com/programs/
|
|
450
|
+
[Developer ID Application]: https://developer.apple.com/help/account/reference/certificate-types/
|
|
451
|
+
[a build workflow_dispatch on GitHub Actions]: https://github.com/seamapi/cli/actions?query=workflow%3A_build
|
|
452
|
+
|
|
399
453
|
## Contributing
|
|
400
454
|
|
|
401
455
|
> If using squash merge, edit and ensure the commit message follows the [Angular Commit Message Conventions] specification.
|
package/bin/cli.js
CHANGED
|
@@ -1,34 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { randomBytes } from 'node:crypto';
|
|
3
2
|
import { isDeepStrictEqual as isEqual } from 'node:util';
|
|
4
3
|
import chalk from 'chalk';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { cliFlags, getInteractivity, parseCliArgs, toParameterName, } from '../lib/args/parse.js';
|
|
5
|
+
import { assertKnownArgs } from '../lib/args/validate.js';
|
|
6
|
+
import { getApiBlueprint } from '../lib/blueprint/index.js';
|
|
7
|
+
import { printCompletion } from '../lib/commands/local/completion.js';
|
|
8
|
+
import { runWizard } from '../lib/commands/local/wizard.js';
|
|
9
|
+
import { acceptedParamsOf, buildRegistry, findLocalCommand, } from '../lib/commands/registry.js';
|
|
7
10
|
import { getConfigStore } from '../lib/config/index.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { getServer } from '../lib/get-server.js';
|
|
14
|
-
import { interactForActionAttemptPoll } from '../lib/interact-for-action-attempt-poll.js';
|
|
15
|
-
import { interactForCommandParams } from '../lib/interact-for-command-params.js';
|
|
16
|
-
import { interactForCommandSelection } from '../lib/interact-for-command-selection.js';
|
|
17
|
-
import { interactForLogin } from '../lib/interact-for-login.js';
|
|
18
|
-
import { interactForServerSelection } from '../lib/interact-for-server-selection.js';
|
|
19
|
-
import { interactForUseRemoteApiDefs } from '../lib/interact-for-use-remote-api-defs.js';
|
|
20
|
-
import { interactForWorkspaceId } from '../lib/interact-for-workspace-id.js';
|
|
21
|
-
import { createOutput } from '../lib/output/create-output.js';
|
|
11
|
+
import { resolveAuth } from '../lib/context.js';
|
|
12
|
+
import { tokenEnvVar } from '../lib/env.js';
|
|
13
|
+
import { reportErrorAndExit } from '../lib/errors.js';
|
|
14
|
+
import { createSeamApi } from '../lib/http/api.js';
|
|
15
|
+
import { interactForCommandSelection } from '../lib/interactions/index.js';
|
|
22
16
|
import { getOutput, setOutput } from '../lib/output/get-output.js';
|
|
17
|
+
import { createOutput } from '../lib/output/output.js';
|
|
18
|
+
import { readStdinJson } from '../lib/output/read-stdin-json.js';
|
|
23
19
|
import { resolveOutputFormat } from '../lib/output/resolve-output-format.js';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import { readStdinJson } from '../lib/util/read-stdin-json.js';
|
|
28
|
-
import { RequestSeamApi } from '../lib/util/request-seam-api.js';
|
|
29
|
-
import { validateToken } from '../lib/validate-token.js';
|
|
20
|
+
import { canPrompt } from '../lib/prompt.js';
|
|
21
|
+
import { completionShells, isCompletionShell, } from '../lib/render/completion/index.js';
|
|
22
|
+
import { renderHelp } from '../lib/render/help.js';
|
|
30
23
|
import seamapiCliVersion from '../lib/version.js';
|
|
31
|
-
async function cli(args) {
|
|
24
|
+
async function cli(args, argv) {
|
|
32
25
|
const config = getConfigStore();
|
|
33
26
|
const output = getOutput();
|
|
34
27
|
const update = args['update'] === true;
|
|
@@ -36,7 +29,8 @@ async function cli(args) {
|
|
|
36
29
|
if (helpFlag != null) {
|
|
37
30
|
// Help comes from the cached API definitions so that it works without
|
|
38
31
|
// logging in, and offline once the cache is warm.
|
|
39
|
-
const
|
|
32
|
+
const cachedBlueprint = await getApiBlueprint({ update });
|
|
33
|
+
const { spec } = buildRegistry(cachedBlueprint);
|
|
40
34
|
// minimist reads the word after --help as its value, so 'seam --help
|
|
41
35
|
// devices' asks about devices just as 'seam devices --help' does.
|
|
42
36
|
const commandPath = [
|
|
@@ -88,231 +82,80 @@ async function cli(args) {
|
|
|
88
82
|
process.exitCode = 1;
|
|
89
83
|
return;
|
|
90
84
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
output.info(`PAT set to use fakeseamconnect with "seam_apikey1_token"`);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (getToken() == null &&
|
|
112
|
-
args._[0] !== 'login' &&
|
|
113
|
-
!isEqual(args._, ['select', 'server'])) {
|
|
85
|
+
const command = findLocalCommand(['completion', shell]);
|
|
86
|
+
assertKnownArgs(argParams, ['completion', shell], {
|
|
87
|
+
accepted: command == null ? new Set() : acceptedParamsOf(command.definition),
|
|
88
|
+
isLocal: true,
|
|
89
|
+
});
|
|
90
|
+
const cachedBlueprint = await getApiBlueprint({ update });
|
|
91
|
+
printCompletion(shell, buildRegistry(cachedBlueprint).spec);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const localCommand = findLocalCommand(args._);
|
|
95
|
+
// Commands declared not to need a token bypass the login gate. A partial
|
|
96
|
+
// path keeps the historical rule: only login and select server may be
|
|
97
|
+
// reached logged out.
|
|
98
|
+
const requiresAuth = localCommand != null
|
|
99
|
+
? localCommand.requiresAuth
|
|
100
|
+
: !(args._[0] === 'login' || isEqual(args._, ['select', 'server']));
|
|
101
|
+
if (requiresAuth && resolveAuth(config).token == null) {
|
|
114
102
|
output.error(`Not logged in. Please run "seam login" or set ${tokenEnvVar}`);
|
|
115
103
|
process.exitCode = 1;
|
|
116
104
|
return;
|
|
117
105
|
}
|
|
118
106
|
const useRemoteApiDefs = args['remote_api_defs'] ?? config.get('use_remote_api_defs');
|
|
119
|
-
const blueprint = await getApiBlueprint(
|
|
107
|
+
const blueprint = await getApiBlueprint({
|
|
108
|
+
useRemoteDefinitions: useRemoteApiDefs ?? false,
|
|
120
109
|
update,
|
|
121
110
|
});
|
|
111
|
+
const registry = buildRegistry(blueprint);
|
|
122
112
|
// Params piped or redirected in, e.g., `seam devices list < params.json`.
|
|
123
|
-
|
|
124
|
-
const
|
|
113
|
+
const pipedParams = await readStdinJson();
|
|
114
|
+
const stdinParams = { ...pipedParams };
|
|
115
|
+
const auth = resolveAuth(config);
|
|
116
|
+
let seamApi = null;
|
|
125
117
|
const ctx = {
|
|
118
|
+
config,
|
|
119
|
+
auth,
|
|
120
|
+
output,
|
|
126
121
|
blueprint,
|
|
127
122
|
interactivity: getInteractivity(args, { canPrompt: canPrompt() }),
|
|
123
|
+
api: async () => await (seamApi ??= createSeamApi(auth)),
|
|
128
124
|
};
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
...args,
|
|
136
|
-
_: [],
|
|
125
|
+
const selectableCommands = registry.spec.commands.map(({ path }) => path);
|
|
126
|
+
let commandPath = args._;
|
|
127
|
+
while (true) {
|
|
128
|
+
const selectedCommand = await interactForCommandSelection(commandPath, {
|
|
129
|
+
commands: selectableCommands,
|
|
130
|
+
interactivity: ctx.interactivity,
|
|
137
131
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (isEqual(selectedCommand, ['login'])) {
|
|
143
|
-
// Nothing is stored while the environment overrides it, so refuse before
|
|
144
|
-
// storing anything rather than part way through.
|
|
145
|
-
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in');
|
|
146
|
-
if (args['server']) {
|
|
147
|
-
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
148
|
-
}
|
|
149
|
-
if (args['workspace_id']) {
|
|
150
|
-
assertEnvVarUnset(workspaceIdEnvVar, getWorkspaceIdFromEnv(), 'select a workspace');
|
|
151
|
-
}
|
|
152
|
-
if (args['server']) {
|
|
153
|
-
config.set('server', args['server']);
|
|
154
|
-
config.delete('current_workspace_id');
|
|
155
|
-
}
|
|
156
|
-
if (args['token']) {
|
|
157
|
-
const token = String(args['token']).trim();
|
|
158
|
-
await validateToken(token, args['workspace_id']);
|
|
159
|
-
config.set(`${getServer()}.pat`, token);
|
|
160
|
-
config.delete('current_workspace_id');
|
|
161
|
-
}
|
|
162
|
-
if (args['workspace_id']) {
|
|
163
|
-
config.set(`current_workspace_id`, args['workspace_id']);
|
|
164
|
-
}
|
|
165
|
-
if (args['token'] || args['workspace_id'] || args['server']) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (isNonInteractive) {
|
|
169
|
-
throw new NonInteractiveError('Missing required parameter for login: --token');
|
|
170
|
-
}
|
|
171
|
-
await interactForLogin();
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
else if (isEqual(selectedCommand, ['logout'])) {
|
|
175
|
-
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log out');
|
|
176
|
-
config.delete(`${getServer()}.pat`);
|
|
177
|
-
config.delete('current_workspace_id');
|
|
178
|
-
output.info('Logged out!');
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
else if (isEqual(selectedCommand, ['config', 'reveal-location'])) {
|
|
182
|
-
output.text(config.path);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
else if (isEqual(selectedCommand, ['config', 'use-remote-api-defs'])) {
|
|
186
|
-
if (isNonInteractive) {
|
|
187
|
-
throw new NonInteractiveError('Cannot select whether to use remote API definitions in non-interactive mode');
|
|
188
|
-
}
|
|
189
|
-
await interactForUseRemoteApiDefs();
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
else if (isEqual(selectedCommand, ['select', 'workspace'])) {
|
|
193
|
-
assertEnvVarUnset(workspaceIdEnvVar, getWorkspaceIdFromEnv(), 'select a workspace');
|
|
194
|
-
if (isNonInteractive) {
|
|
195
|
-
throw new NonInteractiveError('Cannot select a workspace in non-interactive mode: pass --workspace-id to "seam login"');
|
|
196
|
-
}
|
|
197
|
-
await interactForWorkspaceId();
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
else if (isEqual(selectedCommand, ['events', 'list'])) {
|
|
201
|
-
if (!commandParams['since']) {
|
|
202
|
-
const date = new Date();
|
|
203
|
-
date.setMonth(date.getMonth() - 1);
|
|
204
|
-
commandParams['since'] = date.toISOString();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else if (isEqual(selectedCommand, ['select', 'server'])) {
|
|
208
|
-
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
209
|
-
if (args['server']) {
|
|
210
|
-
config.set('server', args['server']);
|
|
211
|
-
config.delete('current_workspace_id');
|
|
212
|
-
return;
|
|
132
|
+
// Hit 'back' on a top-level command path, so we start again
|
|
133
|
+
if (selectedCommand.at(-1) === '[Back]') {
|
|
134
|
+
commandPath = [];
|
|
135
|
+
continue;
|
|
213
136
|
}
|
|
214
|
-
|
|
215
|
-
|
|
137
|
+
const command = registry.find(selectedCommand);
|
|
138
|
+
if (command == null) {
|
|
139
|
+
throw new Error(`No definition for command seam ${selectedCommand.join(' ')}`);
|
|
216
140
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
path: '/health/get_health',
|
|
223
|
-
params: {},
|
|
141
|
+
// Check the arguments before the command acts on any of them, so a
|
|
142
|
+
// mistake is reported rather than half applied.
|
|
143
|
+
assertKnownArgs(argParams, selectedCommand, {
|
|
144
|
+
accepted: acceptedParamsOf(command.definition),
|
|
145
|
+
isLocal: findLocalCommand(selectedCommand) != null,
|
|
224
146
|
});
|
|
147
|
+
const result = await command.execute({ path: selectedCommand, argParams, stdinParams, args, argv }, ctx);
|
|
148
|
+
if (result.kind === 'back') {
|
|
149
|
+
commandPath = result.toPath;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
225
152
|
return;
|
|
226
153
|
}
|
|
227
|
-
// TODO - do this using the OpenAPI spec for the command rather than
|
|
228
|
-
// explicitly encoding the property names
|
|
229
|
-
if (commandParams['accepted_providers']) {
|
|
230
|
-
commandParams['accepted_providers'] =
|
|
231
|
-
commandParams['accepted_providers'].split(',');
|
|
232
|
-
}
|
|
233
|
-
const apiPath = `/${selectedCommand.join('/').replace(/-/g, '_')}`;
|
|
234
|
-
const params = await interactForCommandParams({ command: selectedCommand, params: commandParams }, ctx);
|
|
235
|
-
if (params === '[Back]') {
|
|
236
|
-
const previousCommands = [...selectedCommand];
|
|
237
|
-
previousCommands.pop();
|
|
238
|
-
return await cli({
|
|
239
|
-
...args,
|
|
240
|
-
_: previousCommands,
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
if (apiPath.includes('/events/list') && params.between) {
|
|
244
|
-
delete params.since;
|
|
245
|
-
}
|
|
246
|
-
const response = await RequestSeamApi({
|
|
247
|
-
path: apiPath,
|
|
248
|
-
params,
|
|
249
|
-
responseKey: getResponseKey(selectedCommand, ctx),
|
|
250
|
-
});
|
|
251
|
-
if (response.data?.connect_webview) {
|
|
252
|
-
await handleConnectWebviewResponse(response.data.connect_webview, ctx.interactivity);
|
|
253
|
-
}
|
|
254
|
-
if (response.data?.action_attempt && !isNonInteractive) {
|
|
255
|
-
await interactForActionAttemptPoll(response.data.action_attempt);
|
|
256
|
-
}
|
|
257
154
|
}
|
|
258
155
|
const toCommandWord = (arg) => arg.toLowerCase().replace(/_/g, '-');
|
|
259
|
-
/**
|
|
260
|
-
* Report any argument the command does not accept, rather than acting on it.
|
|
261
|
-
* An unrecognized argument is a mistake: forwarded to the API it would fail
|
|
262
|
-
* somewhere less obvious or be quietly ignored, and on a command the CLI
|
|
263
|
-
* handles itself it would go nowhere at all.
|
|
264
|
-
*
|
|
265
|
-
* Only arguments are checked. Params read from stdin are passed through as
|
|
266
|
-
* given, so a caller may send whatever the API itself accepts.
|
|
267
|
-
*
|
|
268
|
-
* `ctx` is only needed to look up an endpoint's parameters, so commands the
|
|
269
|
-
* CLI declares itself can be checked before any blueprint is loaded.
|
|
270
|
-
*/
|
|
271
|
-
const assertKnownArgs = (argParams, command, ctx) => {
|
|
272
|
-
const local = findLocalCommand(command);
|
|
273
|
-
let accepted;
|
|
274
|
-
if (local != null) {
|
|
275
|
-
accepted = new Set(local.flags.flatMap(({ long }) => long == null ? [] : [toParameterName(long)]));
|
|
276
|
-
}
|
|
277
|
-
else if (ctx != null) {
|
|
278
|
-
accepted = new Set(getCommandBlueprintDef(command, ctx).request.parameters.map(({ name }) => name));
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
throw new Error(`No definition for command seam ${command.join(' ')}`);
|
|
282
|
-
}
|
|
283
|
-
const unknown = Object.keys(argParams).filter((key) => !accepted.has(key));
|
|
284
|
-
if (unknown.length === 0)
|
|
285
|
-
return;
|
|
286
|
-
// Name an endpoint command by its path, as missing params are named, and a
|
|
287
|
-
// command the CLI handles itself by the words that run it.
|
|
288
|
-
const target = local == null
|
|
289
|
-
? `/${command.join('/').replace(/-/g, '_')}`
|
|
290
|
-
: command.join(' ');
|
|
291
|
-
throw new UsageError(`Unknown ${unknown.length === 1 ? 'parameter' : 'parameters'} for ${target}: ${unknown.map(toGivenArgName).join(' ')}`, {
|
|
292
|
-
hint: `Run 'seam ${command.join(' ')} --help' to see what it accepts.`,
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
|
-
const handleConnectWebviewResponse = async (connectWebview, interactivity) => {
|
|
296
|
-
const url = connectWebview.url;
|
|
297
|
-
if (interactivity !== 'non-interactive' &&
|
|
298
|
-
process.env['INSIDE_WEB_BROWSER'] !== '1') {
|
|
299
|
-
const action = await promptConfirm({
|
|
300
|
-
message: 'Would you like to open the webview in your browser?',
|
|
301
|
-
initialValue: false,
|
|
302
|
-
});
|
|
303
|
-
if (action) {
|
|
304
|
-
const { default: open } = await import('open');
|
|
305
|
-
await open(url);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
156
|
const run = async (argv) => {
|
|
310
157
|
if (argv[0] === 'wizard') {
|
|
311
|
-
|
|
312
|
-
await wizard({
|
|
313
|
-
argv: argv.slice(1),
|
|
314
|
-
commandName: 'seam wizard',
|
|
315
|
-
});
|
|
158
|
+
await runWizard(argv.slice(1));
|
|
316
159
|
return;
|
|
317
160
|
}
|
|
318
161
|
const args = parseCliArgs(argv);
|
|
@@ -321,28 +164,9 @@ const run = async (argv) => {
|
|
|
321
164
|
format: resolveOutputFormat(argv, { isTty }),
|
|
322
165
|
colors: isTty,
|
|
323
166
|
}));
|
|
324
|
-
await cli(args);
|
|
167
|
+
await cli(args, argv);
|
|
325
168
|
};
|
|
326
169
|
run(process.argv.slice(2)).catch((e) => {
|
|
327
|
-
|
|
328
|
-
process.exitCode = 1;
|
|
329
|
-
if (e instanceof UsageError) {
|
|
330
|
-
output.error(chalk.red(e.message));
|
|
331
|
-
if (e.hint !== '')
|
|
332
|
-
output.error(e.hint);
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
if (e instanceof NonInteractiveError || e instanceof EnvVarOverrideError) {
|
|
336
|
-
output.error(chalk.red(e.message));
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
if (e instanceof PromptCancelledError) {
|
|
340
|
-
output.error(chalk.gray(e.message));
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
const error = e instanceof Error ? e : new Error(String(e));
|
|
344
|
-
output.error(chalk.red(`CLI Error: ${error.message}`));
|
|
345
|
-
if (error.stack != null)
|
|
346
|
-
output.error(chalk.gray(error.stack));
|
|
170
|
+
reportErrorAndExit(e, getOutput());
|
|
347
171
|
});
|
|
348
172
|
//# sourceMappingURL=cli.js.map
|
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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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Parameter } from '@seamapi/blueprint';
|
|
2
|
+
/** An argument whose value does not fit the parameter's documented format. */
|
|
3
|
+
export interface CoercionIssue {
|
|
4
|
+
name: string;
|
|
5
|
+
given: unknown;
|
|
6
|
+
/** What the parameter takes, e.g., `a number`. */
|
|
7
|
+
expected: string;
|
|
8
|
+
}
|
|
9
|
+
type Coerced = {
|
|
10
|
+
value: unknown;
|
|
11
|
+
} | {
|
|
12
|
+
issue: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Read each argument as the JSON value its parameter documents: booleans and
|
|
16
|
+
* numbers become real booleans and numbers, lists split on commas, objects
|
|
17
|
+
* parse as JSON. The request body is then the same whether a value arrived
|
|
18
|
+
* as an argument, over stdin, or interactively.
|
|
19
|
+
*
|
|
20
|
+
* An argument naming no parameter passes through unchanged: unknown
|
|
21
|
+
* arguments are reported by `assertKnownArgs`, not silently dropped here.
|
|
22
|
+
*/
|
|
23
|
+
export declare const coerceArgParams: (parameters: Parameter[], argParams: Record<string, unknown>) => {
|
|
24
|
+
params: Record<string, unknown>;
|
|
25
|
+
issues: CoercionIssue[];
|
|
26
|
+
};
|
|
27
|
+
export declare const coerceParam: (parameter: Parameter, given: unknown) => Coerced;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read each argument as the JSON value its parameter documents: booleans and
|
|
3
|
+
* numbers become real booleans and numbers, lists split on commas, objects
|
|
4
|
+
* parse as JSON. The request body is then the same whether a value arrived
|
|
5
|
+
* as an argument, over stdin, or interactively.
|
|
6
|
+
*
|
|
7
|
+
* An argument naming no parameter passes through unchanged: unknown
|
|
8
|
+
* arguments are reported by `assertKnownArgs`, not silently dropped here.
|
|
9
|
+
*/
|
|
10
|
+
export const coerceArgParams = (parameters, argParams) => {
|
|
11
|
+
const byName = new Map(parameters.map((parameter) => [parameter.name, parameter]));
|
|
12
|
+
const params = {};
|
|
13
|
+
const issues = [];
|
|
14
|
+
for (const [name, given] of Object.entries(argParams)) {
|
|
15
|
+
const parameter = byName.get(name);
|
|
16
|
+
if (parameter == null) {
|
|
17
|
+
params[name] = given;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const coerced = coerceParam(parameter, given);
|
|
21
|
+
if ('issue' in coerced) {
|
|
22
|
+
issues.push({ name, given, expected: coerced.issue });
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
params[name] = coerced.value;
|
|
26
|
+
}
|
|
27
|
+
return { params, issues };
|
|
28
|
+
};
|
|
29
|
+
export const coerceParam = (parameter, given) => {
|
|
30
|
+
// `null` is an explicit JSON value for nullable parameters, not the string
|
|
31
|
+
// "null" (or a one-item list containing it).
|
|
32
|
+
if (parameter.isNullable && (given === null || given === 'null')) {
|
|
33
|
+
return { value: null };
|
|
34
|
+
}
|
|
35
|
+
if (parameter.format === 'list')
|
|
36
|
+
return coerceList(parameter, given);
|
|
37
|
+
// A repeated argument parses as an array, which only a list accepts.
|
|
38
|
+
if (Array.isArray(given))
|
|
39
|
+
return { issue: 'a single value' };
|
|
40
|
+
switch (parameter.format) {
|
|
41
|
+
case 'boolean':
|
|
42
|
+
return coerceBoolean(given);
|
|
43
|
+
case 'number':
|
|
44
|
+
return coerceNumber(given);
|
|
45
|
+
case 'enum':
|
|
46
|
+
return coerceEnum(parameter, given);
|
|
47
|
+
case 'object':
|
|
48
|
+
return coerceObject(given);
|
|
49
|
+
default:
|
|
50
|
+
return { value: String(given) };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const coerceBoolean = (given) => {
|
|
54
|
+
if (given === true || given === 'true' || given === '1' || given === 1) {
|
|
55
|
+
return { value: true };
|
|
56
|
+
}
|
|
57
|
+
if (given === false || given === 'false' || given === '0' || given === 0) {
|
|
58
|
+
return { value: false };
|
|
59
|
+
}
|
|
60
|
+
return { issue: 'true or false' };
|
|
61
|
+
};
|
|
62
|
+
const coerceNumber = (given) => {
|
|
63
|
+
if (typeof given === 'number')
|
|
64
|
+
return { value: given };
|
|
65
|
+
if (typeof given === 'string' && given.trim() !== '') {
|
|
66
|
+
const value = Number(given);
|
|
67
|
+
if (!Number.isNaN(value))
|
|
68
|
+
return { value };
|
|
69
|
+
}
|
|
70
|
+
return { issue: 'a number' };
|
|
71
|
+
};
|
|
72
|
+
const coerceEnum = (parameter, given) => {
|
|
73
|
+
const value = String(given);
|
|
74
|
+
const names = parameter.values.map(({ name }) => name);
|
|
75
|
+
if (!names.includes(value))
|
|
76
|
+
return { issue: `one of ${names.join(', ')}` };
|
|
77
|
+
return { value };
|
|
78
|
+
};
|
|
79
|
+
const coerceObject = (given) => {
|
|
80
|
+
if (typeof given !== 'string')
|
|
81
|
+
return { issue: 'a JSON object' };
|
|
82
|
+
try {
|
|
83
|
+
const value = JSON.parse(given);
|
|
84
|
+
if (value == null || typeof value !== 'object' || Array.isArray(value)) {
|
|
85
|
+
return { issue: 'a JSON object' };
|
|
86
|
+
}
|
|
87
|
+
return { value };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return { issue: 'a JSON object' };
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const coerceList = (parameter, given) => {
|
|
94
|
+
const items = Array.isArray(given)
|
|
95
|
+
? given
|
|
96
|
+
: typeof given === 'string'
|
|
97
|
+
? given.split(',')
|
|
98
|
+
: [given];
|
|
99
|
+
const values = [];
|
|
100
|
+
for (const item of items) {
|
|
101
|
+
const coerced = coerceListItem(parameter, item);
|
|
102
|
+
if ('issue' in coerced)
|
|
103
|
+
return coerced;
|
|
104
|
+
values.push(coerced.value);
|
|
105
|
+
}
|
|
106
|
+
return { value: values };
|
|
107
|
+
};
|
|
108
|
+
const coerceListItem = (parameter, item) => {
|
|
109
|
+
if (parameter.itemFormat === 'number') {
|
|
110
|
+
const coerced = coerceNumber(item);
|
|
111
|
+
if ('issue' in coerced)
|
|
112
|
+
return { issue: 'a list of numbers' };
|
|
113
|
+
return coerced;
|
|
114
|
+
}
|
|
115
|
+
if (parameter.itemFormat === 'boolean') {
|
|
116
|
+
const coerced = coerceBoolean(item);
|
|
117
|
+
if ('issue' in coerced)
|
|
118
|
+
return { issue: 'a list of true or false' };
|
|
119
|
+
return coerced;
|
|
120
|
+
}
|
|
121
|
+
if (parameter.itemFormat === 'enum') {
|
|
122
|
+
const value = String(item);
|
|
123
|
+
const names = parameter.itemEnumValues.map(({ name }) => name);
|
|
124
|
+
if (!names.includes(value)) {
|
|
125
|
+
return { issue: `a list of ${names.join(', ')}` };
|
|
126
|
+
}
|
|
127
|
+
return { value };
|
|
128
|
+
}
|
|
129
|
+
return { value: String(item) };
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=coerce.js.map
|