seamless-cli 0.10.2 → 0.12.1

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.
Files changed (95) hide show
  1. package/README.md +198 -29
  2. package/dist/commands/apps.js +147 -0
  3. package/dist/commands/apps.js.map +1 -0
  4. package/dist/commands/config.js +16 -15
  5. package/dist/commands/config.js.map +1 -1
  6. package/dist/commands/help.js +65 -187
  7. package/dist/commands/help.js.map +1 -1
  8. package/dist/commands/helpTopics.js +376 -0
  9. package/dist/commands/helpTopics.js.map +1 -0
  10. package/dist/commands/init.js +295 -76
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/instanceLogin.js +55 -0
  13. package/dist/commands/instanceLogin.js.map +1 -0
  14. package/dist/commands/login.js +42 -80
  15. package/dist/commands/login.js.map +1 -1
  16. package/dist/commands/logout.js +18 -8
  17. package/dist/commands/logout.js.map +1 -1
  18. package/dist/commands/org.js +5 -4
  19. package/dist/commands/org.js.map +1 -1
  20. package/dist/commands/profile.js +29 -2
  21. package/dist/commands/profile.js.map +1 -1
  22. package/dist/commands/sessions.js +9 -7
  23. package/dist/commands/sessions.js.map +1 -1
  24. package/dist/commands/templates.js +58 -0
  25. package/dist/commands/templates.js.map +1 -0
  26. package/dist/commands/users.js +9 -7
  27. package/dist/commands/users.js.map +1 -1
  28. package/dist/commands/verify.js +43 -11
  29. package/dist/commands/verify.js.map +1 -1
  30. package/dist/commands/whoami.js +13 -5
  31. package/dist/commands/whoami.js.map +1 -1
  32. package/dist/core/args.js +11 -0
  33. package/dist/core/args.js.map +1 -1
  34. package/dist/core/authClient.js +29 -6
  35. package/dist/core/authClient.js.map +1 -1
  36. package/dist/core/cancel.js +32 -0
  37. package/dist/core/cancel.js.map +1 -0
  38. package/dist/core/config.js +45 -1
  39. package/dist/core/config.js.map +1 -1
  40. package/dist/core/confirmAction.js +26 -0
  41. package/dist/core/confirmAction.js.map +1 -0
  42. package/dist/core/images.js +7 -4
  43. package/dist/core/images.js.map +1 -1
  44. package/dist/core/interactiveLogin.js +75 -0
  45. package/dist/core/interactiveLogin.js.map +1 -0
  46. package/dist/core/loginFlow.js +24 -8
  47. package/dist/core/loginFlow.js.map +1 -1
  48. package/dist/core/output.js +23 -9
  49. package/dist/core/output.js.map +1 -1
  50. package/dist/core/portal.js +112 -8
  51. package/dist/core/portal.js.map +1 -1
  52. package/dist/core/templates.js +10 -0
  53. package/dist/core/templates.js.map +1 -1
  54. package/dist/core/tty.js +25 -0
  55. package/dist/core/tty.js.map +1 -0
  56. package/dist/generators/auth/auth.js +8 -7
  57. package/dist/generators/auth/auth.js.map +1 -1
  58. package/dist/generators/docker/docker.js +32 -22
  59. package/dist/generators/docker/docker.js.map +1 -1
  60. package/dist/index.js +89 -21
  61. package/dist/index.js.map +1 -1
  62. package/dist/prompts/appSelect.js +16 -10
  63. package/dist/prompts/appSelect.js.map +1 -1
  64. package/dist/prompts/initMode.js +77 -0
  65. package/dist/prompts/initMode.js.map +1 -0
  66. package/dist/prompts/oauthSetup.js +4 -3
  67. package/dist/prompts/oauthSetup.js.map +1 -1
  68. package/dist/prompts/projectSetup.js +77 -50
  69. package/dist/prompts/projectSetup.js.map +1 -1
  70. package/dist/testSetup.js +9 -0
  71. package/dist/testSetup.js.map +1 -0
  72. package/package.json +1 -1
  73. package/verify/adapter-app/package.json +1 -1
  74. package/verify/adapter-fastify-app/Dockerfile +14 -0
  75. package/verify/adapter-fastify-app/package.json +12 -0
  76. package/verify/adapter-fastify-app/server.mjs +64 -0
  77. package/verify/adapter-fastify-app/vendor/.gitignore +3 -0
  78. package/verify/adapter-fastify-app/vendor/.gitkeep +0 -0
  79. package/verify/docker-compose.cache.yml +43 -0
  80. package/verify/docker-compose.verify.yml +34 -4
  81. package/verify/harness/api/loginEnumeration.spec.ts +139 -0
  82. package/verify/harness/api/ownerAdmin.spec.ts +24 -0
  83. package/verify/harness/global-setup.ts +4 -1
  84. package/verify/harness/lib/client.ts +7 -3
  85. package/verify/harness/lib/env.ts +7 -4
  86. package/verify/harness/lib/fixtures.ts +12 -3
  87. package/verify/harness/lib/flows.ts +1 -36
  88. package/verify/harness/lib/matrixReporter.ts +19 -6
  89. package/verify/harness/lib/reactFlows.ts +0 -2
  90. package/verify/harness/playwright.config.ts +19 -5
  91. package/dist/commands/bootstrapAdmin.js +0 -96
  92. package/dist/commands/bootstrapAdmin.js.map +0 -1
  93. package/dist/core/bootstrapSecret.js +0 -39
  94. package/dist/core/bootstrapSecret.js.map +0 -1
  95. package/verify/harness/api/adminBootstrap.spec.ts +0 -34
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![License: AGPL-3.0-only](https://img.shields.io/badge/License-AGPL3-yellow.svg)](LICENSE)
4
4
  [![npm version](https://img.shields.io/npm/v/seamless-cli.svg?style=flat)](https://www.npmjs.com/package/seamless-cli)
5
5
  ![coverage](resources/coverage-badge.svg)
6
+ [![conformance](https://github.com/fells-code/seamless-cli/actions/workflows/conformance.yml/badge.svg)](https://github.com/fells-code/seamless-cli/actions/workflows/conformance.yml)
6
7
 
7
8
  Seamless CLI is a command-line tool for bootstrapping applications with Seamless Auth, an open source, passwordless authentication system.
8
9
 
@@ -33,18 +34,37 @@ You’ll be guided through a short setup process where you can choose:
33
34
 
34
35
  ---
35
36
 
37
+ ## Getting help
38
+
39
+ `seamless --help` lists every command, and every command documents itself:
40
+
41
+ ```bash
42
+ seamless init --help
43
+ ```
44
+
45
+ `-h` is the short form, and `seamless help <command>` is the spelled-out one, so
46
+ `seamless verify -h`, `seamless verify --help`, and `seamless help verify` all print the flags,
47
+ subcommands, and examples for `verify` only. If a command takes a value that is literally `-h`,
48
+ put it after `--` (`seamless config set key -- -h`).
49
+
50
+ ---
51
+
36
52
  ## Connecting to a managed instance
37
53
 
38
- If you are logged in to a managed Seamless Auth account (see
39
- [Authenticating against an instance](#authenticating-against-an-instance)), `init` connects the new
40
- project to your managed instance instead of scaffolding a local auth server. This is the default
41
- whenever a profile has an active session.
54
+ If you are signed in to the Seamless portal (`seamless login`) and your account has at least one
55
+ provisioned application, `init` offers to connect the new project to it instead of scaffolding a
56
+ local auth server. Managed leads the prompt, since being signed in signals intent, but it is a
57
+ question rather than an assumption.
42
58
 
43
59
  ```bash
44
- seamless login # once, against your managed profile
45
- seamless init my-app # scaffolds web + api wired to the managed instance
60
+ seamless login # once, no profile needed
61
+ seamless init my-app # asks: connect a managed application, or scaffold local
46
62
  ```
47
63
 
64
+ With no session, nothing provisioned yet, or `--local`, you get the local stack below. An account
65
+ whose applications are still provisioning is told so and continues to a local scaffold rather than
66
+ failing.
67
+
48
68
  What happens:
49
69
 
50
70
  - The CLI lists your applications from the control plane and, when you have more than one, asks
@@ -52,6 +72,11 @@ What happens:
52
72
  - It issues the application's service token from the control plane (the real credential, not a
53
73
  locally generated secret) and writes it, the managed auth server URL, and the JWKS key id into
54
74
  `api/.env`. The frontend is pointed at the same auth server URL.
75
+ - It reads the application's bundled database and writes `DATABASE_URL` into `api/.env` as
76
+ `postgres://USER:PASSWORD@host:port/db?sslmode=require`. **The user and password stay as literal
77
+ placeholders**: the CLI never asks the control plane to reveal them, so no live database credential
78
+ reaches your disk or your terminal. Copy them from the dashboard. An application whose database is
79
+ still provisioning gets a warning instead, and the scaffold continues.
55
80
  - No local auth server, Docker Compose, or admin dashboard is generated. Auth, users, and OAuth
56
81
  providers are managed from the dashboard.
57
82
 
@@ -62,11 +87,111 @@ Run inside an existing project (a non-empty directory) to wire it up in place: `
62
87
  `api/.env` when an `api` directory is present, otherwise it prints the values to set by hand. Your
63
88
  own source is never overwritten.
64
89
 
90
+ ### Seeing your managed applications
91
+
92
+ ```bash
93
+ seamless apps list # reference, name, plan, status, instance URL
94
+ seamless apps list --json
95
+ seamless apps get <id> # detail for one application
96
+ seamless apps get my-app # a name or infra id works too
97
+ seamless apps get <id> --json
98
+ ```
99
+
100
+ `apps` uses the portal session, so it needs `seamless login` and never an instance profile.
101
+ Applications the control plane has not finished provisioning are listed with `(provisioning)` in
102
+ place of an instance URL.
103
+
104
+ `apps get` reports whether a service token has been issued, showing the masked value and its issue
105
+ date. The live token exists only at rotation time, so the control plane never re-shows it. Checking
106
+ here first is worth doing before `init` connects a project, since connecting rotates the token and
107
+ invalidates the old one.
108
+
65
109
  Escape hatches:
66
110
 
67
- - `seamless init --local` forces the self-hosted flow below, even when logged in.
68
- - With no active session, `init` uses the self-hosted flow automatically.
69
- - `SEAMLESS_PORTAL_API_URL` overrides the control-plane host (defaults to the managed service).
111
+ - `seamless init --local` forces the self-hosted flow below without contacting the control plane.
112
+ - `seamless init --app <id>` is explicit managed intent: it skips both questions and fails rather
113
+ than silently scaffolding local if you are not signed in.
114
+ - With no portal session, `init` uses the self-hosted flow automatically. A profile session is not
115
+ consulted: signing in to an auth instance you administer says nothing about whether you have a
116
+ managed account.
117
+ - In a directory that already has files, `init` asks whether to connect it to a managed application
118
+ or scaffold in place. Starter files overwrite anything with the same name, so scaffolding there is
119
+ never assumed.
120
+ - `SEAMLESS_PORTAL_API_URL` overrides the control-plane host (defaults to the managed service), and
121
+ `SEAMLESS_PORTAL_AUTH_URL` overrides the portal auth instance the login targets.
122
+
123
+ ---
124
+
125
+ ## Choosing a starter
126
+
127
+ `seamless templates list` shows every starter `init` can scaffold, with the flags that select it:
128
+
129
+ ```bash
130
+ seamless templates list
131
+ ```
132
+
133
+ ```text
134
+ ID KIND FRAMEWORK FLAGS STATUS
135
+ react-vite web react --basic, --react-vite stable
136
+ react-oauth web react --oauth, --react-oauth stable
137
+ express api express --express stable
138
+ fastify api fastify --fastify beta
139
+ ```
140
+
141
+ Every template answers to `--<id>`; some also declare a shorter `--<alias>`, and the two are
142
+ interchangeable. Passing a flag skips that layer's prompt:
143
+
144
+ ```bash
145
+ seamless init my-app --react-oauth --express
146
+ ```
147
+
148
+ `--json` emits the registry entries for scripting. The command needs no login and reads the same
149
+ registry `init` does, so `SEAMLESS_TEMPLATES_DIR` and `SEAMLESS_TEMPLATES_REF` apply.
150
+
151
+ ---
152
+
153
+ ## Scripting init
154
+
155
+ `--yes` answers every question with the recommended option instead of prompting, so `init` runs from
156
+ CI, a Dockerfile, or a script with no terminal attached:
157
+
158
+ ```bash
159
+ seamless init my-app --local --yes --email=you@example.com
160
+ ```
161
+
162
+ Each question also has its own flag, honored with or without `--yes`:
163
+
164
+ | Flag | Question | Default under `--yes` |
165
+ | --- | --- | --- |
166
+ | `--web=<id\|alias>` | Web example | first selectable web template |
167
+ | `--api=<id\|alias>` | Backend framework | first selectable api template |
168
+ | `--email=<address>` | Owner email (becomes the admin) | required |
169
+ | `--auth=<docker\|local>` | How the auth server runs | `docker` |
170
+ | `--admin=<api\|image\|source\|none>` | Where the admin console is hosted | `api` |
171
+
172
+ Two things `--yes` deliberately will not decide for you:
173
+
174
+ - **Managed or local.** With a portal session and neither `--local` nor `--app <id>`, `init` stops
175
+ rather than guessing where the project's auth lives.
176
+ - **Anything destructive.** Scaffolding into a directory that is not empty (starter files overwrite
177
+ anything with the same name) and rotating a managed application's existing service token (which
178
+ breaks whatever is deployed on the old one) both take `--force`, not `--yes`.
179
+
180
+ `--email` has no safe default, so under `--yes` it is required unless `seamless login` has left a
181
+ portal session to take it from. Templates that would prompt for OAuth provider credentials are
182
+ scaffolded with none configured; add them afterwards with `seamless config oauth-providers add`.
183
+
184
+ Without a terminal on stdin, `init` will not render a prompt nobody can answer. It stops on the
185
+ first unanswered question and names the flag that answers it:
186
+
187
+ ```text
188
+ $ seamless init --local < /dev/null
189
+ Error: "Web example" needs an interactive terminal, and this run does not have one.
190
+ Pass --web=<id> to choose one (see `seamless templates list`), or --yes to take the
191
+ recommended template.
192
+ ```
193
+
194
+ A fully flagged run works the same on a pipe as it does on a terminal.
70
195
 
71
196
  ---
72
197
 
@@ -78,7 +203,7 @@ Depending on your selections, the CLI generates a project like this:
78
203
  my-app/
79
204
  ├─ auth/ # Seamless Auth server (optional)
80
205
  ├─ web/ # React web application (optional)
81
- ├─ api/ # Express API server (optional)
206
+ ├─ api/ # Express or Fastify API server (optional)
82
207
  ├─ docker-compose.yml (optional)
83
208
  └─ README.md
84
209
  ```
@@ -160,25 +285,23 @@ npm run dev
160
285
 
161
286
  ## Creating the first admin
162
287
 
163
- A fresh instance has no admin yet. `seamless bootstrap-admin` issues the first admin invite:
288
+ `init` asks for your email and writes it to the auth server as `OWNER_EMAIL`. The auth server grants
289
+ the admin role at account creation to any signup matching that address, so registering in the
290
+ scaffolded web app is all it takes:
164
291
 
165
292
  ```bash
166
- seamless bootstrap-admin admin@example.com # local app API (default)
167
- seamless bootstrap-admin admin@example.com --api-url https://api... # a specific app API
168
- seamless bootstrap-admin # prompts for the email
293
+ seamless init my-app
294
+ cd my-app
295
+ docker compose up
296
+ # register at http://localhost:5173 with the email you gave init
169
297
  ```
170
298
 
171
- The invited user then completes registration to receive admin access.
299
+ Both signup paths (email OTP and a verified OAuth profile) establish control of the address before
300
+ the account is created, so only someone who actually receives mail there can claim it.
172
301
 
173
- **Where it points.** The bootstrap invite route is served by your app API (the SeamlessAuth
174
- server adapter), not the auth server directly, so the target is resolved independently of any
175
- login profile: `--api-url` wins, then `SEAMLESS_API_URL`, then the local default
176
- `http://localhost:3000`.
177
-
178
- **How it authenticates.** Bootstrap runs _before_ any admin exists, so it can't use a login
179
- session. Instead it uses the instance's shared bootstrap secret, resolved automatically from a
180
- local `.env`, `auth/.env`, or `docker-compose.yml`, and prompted for if none is found (for example
181
- when bootstrapping a production instance from a machine without the project checked out).
302
+ **The grant is signup-time only.** Changing `OWNER_EMAIL` after an account already exists promotes
303
+ nobody. To hand ownership to a different address, set it in `auth/` (or the compose file) before that
304
+ person registers.
182
305
 
183
306
  ## Authenticating against an instance
184
307
 
@@ -186,6 +309,18 @@ Beyond scaffolding, the CLI can log in to a Seamless Auth instance (self-hosted,
186
309
  tenant, or local dev) and call its authenticated and admin endpoints from the terminal. It talks
187
310
  to the instance directly over Bearer and JSON, so no server or contract changes are required.
188
311
 
312
+ ### Two kinds of account
313
+
314
+ The CLI signs in to two different things, and they are separate accounts even when they share an
315
+ email address:
316
+
317
+ | | Command | What it is | What it authorizes |
318
+ | --- | --- | --- | --- |
319
+ | Portal | `seamless login` | Your Seamless customer account on the managed control plane. There is one. | Listing managed applications and connecting a project to one (`init`) |
320
+ | Instance | `seamless profile login <name>` | An admin account inside a specific auth instance's own user pool. There are many. | `users`, `config`, `org`, `sessions` against that instance |
321
+
322
+ The portal session is stored beside the profile map in `config.json`, not inside it.
323
+
189
324
  ### Profiles
190
325
 
191
326
  The CLI targets instances through named profiles stored at `~/.config/seamless/config.json`
@@ -208,23 +343,35 @@ other than `localhost`, `127.0.0.1`, or `::1`.
208
343
 
209
344
  ### Logging in
210
345
 
211
- Login uses email OTP: you paste the code from your inbox, so nothing needs to be delivered to the
212
- CLI and no service token is required.
346
+ Both logins use email OTP: you paste the code from your inbox, so nothing needs to be delivered to
347
+ the CLI and no service token is required.
213
348
 
214
349
  ```bash
350
+ # The portal, for managed work. Needs no profile.
215
351
  seamless login # prompts for the identifier, then the code
216
352
  seamless login you@example.com # identifier as an argument
217
- seamless login --identifier you@example.com --profile prod
353
+
354
+ # An auth instance, for admin work against it.
355
+ seamless profile login prod # defaults to the active profile
356
+ seamless profile login prod --identifier you@example.com
218
357
  ```
219
358
 
359
+ `seamless profile login` does not change which profile is active, so a one-off command against
360
+ another instance leaves your default alone.
361
+
362
+ `seamless login --profile <name>` still performs an instance login for one more minor version and
363
+ prints a pointer to `seamless profile login`.
364
+
220
365
  The command honors the instance's advertised login methods, caps local retries so it does not trip
221
366
  the OTP rate limiter, and refreshes the code automatically if the five minute window lapses.
222
367
 
223
368
  ### Identity and sessions
224
369
 
225
370
  ```bash
226
- seamless whoami # sub, email, roles, active profile, and instance URL
227
- seamless logout # end the current session and clear local tokens
371
+ seamless whoami # sub, email, roles, and instance URL for your portal session
372
+ seamless whoami --profile prod # the same for an instance session
373
+ seamless logout # end the portal session and clear local tokens
374
+ seamless logout --profile prod # end an instance session instead
228
375
  seamless logout --all # revoke every session for the user, then clear local tokens
229
376
 
230
377
  seamless sessions # list active sessions (current one marked)
@@ -311,6 +458,28 @@ seamless whoami
311
458
  Because `/refresh` rotates the refresh token on every call, this path is best for a single
312
459
  invocation; the rotated token is held only in memory for that process.
313
460
 
461
+ No command will render a prompt when stdin is not a terminal. Each one stops instead, naming the
462
+ flag that answers the question, so a CI step fails immediately rather than hanging until its job
463
+ times out.
464
+
465
+ The commands that ask before destroying something take `--force` (with `--yes` and `-y` accepted as
466
+ aliases), which is both how you skip the confirmation and how you run them unattended:
467
+
468
+ ```bash
469
+ seamless users delete <id> --force
470
+ seamless sessions revoke --all --force
471
+ seamless org members remove <orgId> <userId> --force
472
+ seamless config apply config.json --force
473
+ seamless config oauth-providers remove google --force
474
+ ```
475
+
476
+ `--force` never overrides `--dry-run`: `config apply --dry-run --force` still changes nothing.
477
+
478
+ The prompts that gather input rather than confirm an action are answered by the flags those
479
+ commands already take, for example `seamless login --identifier you@example.com` and
480
+ `seamless profile add prod --instance-url https://auth.example.com`. The one-time code at login is
481
+ the exception: it only exists after the code is sent, so that step genuinely needs a terminal.
482
+
314
483
  ---
315
484
 
316
485
  ## What is configured for you
@@ -0,0 +1,147 @@
1
+ import kleur from "kleur";
2
+ import { createPortalClient, ReauthRequiredError, } from "../core/authClient.js";
3
+ import { getApplication, listApplications, PortalError, resolveAppInstanceUrl, resolveAppRef, } from "../core/portal.js";
4
+ export async function runApps(args) {
5
+ const sub = args[0];
6
+ const rest = args.slice(1);
7
+ try {
8
+ switch (sub) {
9
+ case undefined:
10
+ case "list":
11
+ await appsList(rest);
12
+ return;
13
+ case "get":
14
+ await appsGet(rest);
15
+ return;
16
+ default:
17
+ console.error(kleur.red(`Unknown apps subcommand: ${sub}`));
18
+ console.log("Usage: seamless apps <list|get>");
19
+ process.exit(1);
20
+ }
21
+ }
22
+ catch (err) {
23
+ reportPortalError(err);
24
+ }
25
+ }
26
+ function reportPortalError(err) {
27
+ if (err instanceof ReauthRequiredError || err instanceof PortalError) {
28
+ console.error(kleur.red(err.message));
29
+ process.exit(1);
30
+ }
31
+ throw err;
32
+ }
33
+ // Shown where an instance URL belongs for an application the control plane has
34
+ // not finished provisioning, so an empty column never reads as a bug.
35
+ const NOT_PROVISIONED = "(provisioning)";
36
+ async function appsList(rest) {
37
+ const json = rest.includes("--json");
38
+ const client = await createPortalClient();
39
+ const apps = await listApplications(client);
40
+ if (json) {
41
+ console.log(JSON.stringify(apps, null, 2));
42
+ return;
43
+ }
44
+ if (apps.length === 0) {
45
+ console.log(kleur.dim("No managed applications."));
46
+ console.log(kleur.dim("Create one at ") +
47
+ kleur.cyan("https://dashboard.seamlessauth.com"));
48
+ return;
49
+ }
50
+ // The reference leads because it is the value you copy into `apps get` and
51
+ // `init --app`, neither of which you can retype from the name alone.
52
+ const rows = apps.map((app) => [
53
+ resolveAppRef(app),
54
+ app.name,
55
+ app.servicePlan ?? "-",
56
+ app.status ?? "-",
57
+ resolveAppInstanceUrl(app) ?? NOT_PROVISIONED,
58
+ ]);
59
+ printTable(["ID", "NAME", "PLAN", "STATUS", "INSTANCE"], rows);
60
+ console.log(kleur.dim(`\n${apps.length} application${apps.length === 1 ? "" : "s"}. Inspect one with: seamless apps get <id>`));
61
+ }
62
+ async function appsGet(rest) {
63
+ const json = rest.includes("--json");
64
+ const ref = rest.find((arg) => !arg.startsWith("--"));
65
+ if (!ref) {
66
+ console.error(kleur.red("Usage: seamless apps get <id|name|infra-id>"));
67
+ process.exit(1);
68
+ }
69
+ const client = await createPortalClient();
70
+ const app = await resolveApp(client, ref);
71
+ if (json) {
72
+ console.log(JSON.stringify(app, null, 2));
73
+ return;
74
+ }
75
+ printApp(app);
76
+ }
77
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
78
+ // The control plane looks applications up by primary key only, but `apps list`
79
+ // shows the infra id, so that is what a developer pastes. A UUID goes straight
80
+ // to the endpoint; anything else is matched against the list rather than spending
81
+ // a request that could only 404.
82
+ async function resolveApp(client, ref) {
83
+ if (UUID.test(ref)) {
84
+ return getApplication(client, ref);
85
+ }
86
+ const match = matchApplication(await listApplications(client), ref);
87
+ if (match)
88
+ return match;
89
+ // Nothing matched by name or infra id. Ask the control plane anyway, so a
90
+ // future id format that is not a UUID still resolves (and 404s honestly).
91
+ return getApplication(client, ref);
92
+ }
93
+ function matchApplication(apps, ref) {
94
+ const needle = ref.toLowerCase();
95
+ const matches = apps.filter((app) => app.infraId?.toLowerCase() === needle ||
96
+ app.name.toLowerCase() === needle);
97
+ if (matches.length > 1) {
98
+ throw new PortalError(`"${ref}" matches ${matches.length} applications. Use an id: ${matches
99
+ .map((app) => app.id)
100
+ .join(", ")}.`);
101
+ }
102
+ return matches[0] ?? null;
103
+ }
104
+ function printApp(app) {
105
+ const line = (label, value) => console.log(kleur.dim(`${label}:`.padEnd(12)) + value);
106
+ line("Name", kleur.bold(app.name));
107
+ line("Id", app.id);
108
+ if (app.infraId)
109
+ line("Infra id", app.infraId);
110
+ line("Plan", app.servicePlan ?? "-");
111
+ line("Status", app.status ?? "-");
112
+ if (app.hostedRegion)
113
+ line("Region", app.hostedRegion);
114
+ if (app.devMode !== undefined)
115
+ line("Dev mode", app.devMode ? "on" : "off");
116
+ line("Instance", resolveAppInstanceUrl(app) ?? kleur.dim(NOT_PROVISIONED));
117
+ if (app.consoleUrl)
118
+ line("Console", app.consoleUrl);
119
+ if (app.frontendUrl)
120
+ line("Frontend", app.frontendUrl);
121
+ if (app.ownerEmails.length)
122
+ line("Owners", app.ownerEmails.join(", "));
123
+ if (app.trialExpiresAt)
124
+ line("Trial ends", app.trialExpiresAt);
125
+ if (app.createdAt)
126
+ line("Created", app.createdAt);
127
+ // Metadata only. A raw service token exists just once, at rotation time.
128
+ if (app.hasServiceToken) {
129
+ const masked = app.serviceToken?.maskedToken ?? "(issued)";
130
+ const issued = app.serviceToken?.createdAt;
131
+ line("Token", masked + (issued ? kleur.dim(` issued ${issued}`) : ""));
132
+ }
133
+ else {
134
+ line("Token", kleur.dim("none issued"));
135
+ }
136
+ }
137
+ function printTable(headers, rows) {
138
+ const widths = headers.map((header, i) => Math.max(header.length, ...rows.map((row) => row[i].length)));
139
+ const render = (cells) => cells
140
+ .map((cell, i) => (i === cells.length - 1 ? cell : cell.padEnd(widths[i])))
141
+ .join(" ");
142
+ console.log(kleur.dim(render(headers)));
143
+ for (const row of rows) {
144
+ console.log(render(row));
145
+ }
146
+ }
147
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import fs from "fs";
2
- import { confirm, isCancel } from "@clack/prompts";
3
2
  import kleur from "kleur";
4
3
  import { extractFlag } from "../core/args.js";
5
4
  import { createAuthClient, ReauthRequiredError } from "../core/authClient.js";
6
5
  import { ConfigApiError, createOAuthProvider, deleteOAuthProvider, diffConfig, filterWritable, getRoles, getSystemConfig, listOAuthProviders, parseValue, patchSystemConfig, PermissionError, updateOAuthProvider, } from "../core/systemConfig.js";
6
+ import { confirmDestructive, hasForceFlag, } from "../core/confirmAction.js";
7
7
  export async function runConfig(args) {
8
8
  const sub = args[0];
9
9
  const { value: profileFlag, rest } = extractFlag(args.slice(1), "profile");
@@ -139,11 +139,12 @@ async function configApply(client, rest) {
139
139
  console.log(kleur.dim("Dry run: no changes applied."));
140
140
  return;
141
141
  }
142
- const proceed = await confirm({
142
+ const proceed = await confirmDestructive({
143
143
  message: `Apply ${changes.length} change${changes.length === 1 ? "" : "s"} to ${client.profile.instanceUrl}?`,
144
- initialValue: false,
144
+ force: hasForceFlag(rest),
145
+ remedy: "Pass --force to apply without confirming.",
145
146
  });
146
- if (isCancel(proceed) || !proceed) {
147
+ if (!proceed) {
147
148
  console.log("Cancelled.");
148
149
  return;
149
150
  }
@@ -215,21 +216,21 @@ async function oauthProvidersUpdate(client, rest) {
215
216
  console.log(kleur.green(`Updated OAuth provider: ${String(provider.id ?? id)}`));
216
217
  }
217
218
  async function oauthProvidersRemove(client, rest) {
218
- const skipConfirm = rest.includes("--yes") || rest.includes("-y");
219
219
  const id = rest.find((arg) => !arg.startsWith("-"));
220
220
  if (!id) {
221
- console.error(kleur.red("Usage: seamless config oauth-providers remove <id> [--yes]"));
221
+ console.error(kleur.red("Usage: seamless config oauth-providers remove <id> [--force]"));
222
222
  process.exit(1);
223
223
  }
224
- if (!skipConfirm) {
225
- const proceed = await confirm({
226
- message: `Remove OAuth provider "${id}" from ${client.profile.instanceUrl}?`,
227
- initialValue: false,
228
- });
229
- if (isCancel(proceed) || !proceed) {
230
- console.log("Cancelled.");
231
- return;
232
- }
224
+ const proceed = await confirmDestructive({
225
+ message: `Remove OAuth provider "${id}" from ${client.profile.instanceUrl}?`,
226
+ // This subcommand shipped with --yes before --force was the convention, so
227
+ // hasForceFlag keeps accepting it.
228
+ force: hasForceFlag(rest),
229
+ remedy: "Pass --force to remove it without confirming.",
230
+ });
231
+ if (!proceed) {
232
+ console.log("Cancelled.");
233
+ return;
233
234
  }
234
235
  await deleteOAuthProvider(client, id);
235
236
  console.log(kleur.green(`Removed OAuth provider: ${id}`));
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}