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
@@ -6,19 +6,19 @@ import { fetchEnvExample } from "../../core/fetch.js";
6
6
  import { POSTGRES_IMAGE, SEAMLESS_AUTH_API_IMAGE } from "../../core/images.js";
7
7
  import { buildAuthEnv, configureAuthLocalEnv, envToDockerBlock, } from "../docker/docker.js";
8
8
  const AUTH_REPO = "https://github.com/fells-code/seamless-auth-api";
9
- export async function generateAuthServer(context, mode, oauth = [], adminMode = "api") {
9
+ export async function generateAuthServer(context, mode, oauth = [], adminMode = "api", ownerEmail) {
10
10
  const { root } = context;
11
11
  if (mode === "local") {
12
- return await setupLocalAuth(root, oauth, adminMode);
12
+ return await setupLocalAuth(root, oauth, adminMode, ownerEmail);
13
13
  }
14
14
  return await setupDockerAuth(root);
15
15
  }
16
- async function setupLocalAuth(root, oauth = [], adminMode = "api") {
16
+ async function setupLocalAuth(root, oauth = [], adminMode = "api", ownerEmail) {
17
17
  const authDir = path.join(root, "auth");
18
18
  console.log("Cloning SeamlessAuth server...");
19
19
  await runCommand("git", ["clone", AUTH_REPO, "auth"], root);
20
20
  console.log("Writing auth environment...");
21
- const shared = await configureAuthLocalEnv(root, oauth, adminMode);
21
+ const shared = await configureAuthLocalEnv(root, oauth, adminMode, ownerEmail);
22
22
  console.log("Auth server ready in /auth");
23
23
  return shared;
24
24
  }
@@ -28,13 +28,14 @@ async function setupDockerAuth(root) {
28
28
  const parsed = parseEnvString(raw);
29
29
  const { env, shared } = buildAuthEnv(parsed, "docker");
30
30
  const envBlock = envToDockerBlock(env);
31
- const dockerCompose = `
31
+ const dockerCompose = `# Ports are published on 127.0.0.1 so this stack is reachable from this machine
32
+ # only. See the note in the full-stack compose for why that matters here.
32
33
  services:
33
34
  db:
34
35
  image: ${POSTGRES_IMAGE}
35
36
  container_name: seamless-db
36
37
  ports:
37
- - "5432:5432"
38
+ - "127.0.0.1:5432:5432"
38
39
  environment:
39
40
  POSTGRES_USER: myuser
40
41
  POSTGRES_PASSWORD: mypassword
@@ -51,7 +52,7 @@ services:
51
52
  image: ${SEAMLESS_AUTH_API_IMAGE}
52
53
  container_name: seamless-auth
53
54
  ports:
54
- - "5312:5312"
55
+ - "127.0.0.1:5312:5312"
55
56
  environment:
56
57
  ${envBlock}
57
58
  depends_on:
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/generators/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,SAAS,GAAG,iDAAiD,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAY,EACZ,IAAiC,EACjC,QAAkC,EAAE,EACpC,YAAuB,KAAK;IAE5B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,QAAkC,EAAE,EACpC,YAAuB,KAAK;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG;;;aAGX,cAAc;;;;;;;;;;;;;;;;;aAiBd,uBAAuB;;;;;EAKlC,QAAQ;;;;;;;CAOT,CAAC;IAEA,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,EACrC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAC5B,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/generators/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,SAAS,GAAG,iDAAiD,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAY,EACZ,IAAiC,EACjC,QAAkC,EAAE,EACpC,YAAuB,KAAK,EAC5B,UAAmB;IAEnB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAY,EACZ,QAAkC,EAAE,EACpC,YAAuB,KAAK,EAC5B,UAAmB;IAEnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE/E,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG;;;;aAIX,cAAc;;;;;;;;;;;;;;;;;aAiBd,uBAAuB;;;;;EAKlC,QAAQ;;;;;;;CAOT,CAAC;IAEA,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,EACrC,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAC5B,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -13,23 +13,30 @@ export async function generateDockerCompose(root, options) {
13
13
  return shared;
14
14
  }
15
15
  async function buildCompose(options, root) {
16
- const { authMode, adminMode, oauth } = options;
17
- const { service: authBlock, shared } = await authService(authMode, root, oauth, adminMode);
16
+ const { authMode, adminMode, oauth, ownerEmail } = options;
17
+ const { service: authBlock, shared } = await authService(authMode, root, oauth, adminMode, ownerEmail);
18
18
  const includeAdminContainer = adminMode === "image" || adminMode === "source";
19
19
  return {
20
- compose: `
20
+ compose: `# Ports are published on 127.0.0.1 so this stack is reachable from this machine
21
+ # only. The auth server is configured to return OTP codes in the response for
22
+ # local login, which would otherwise be an authentication bypass for anyone on
23
+ # the same network. Drop the 127.0.0.1 prefix only if you know you want that.
21
24
  services:
22
25
  db:
23
26
  image: ${POSTGRES_IMAGE}
24
27
  container_name: seamless-db
25
28
  ports:
26
- - "5432:5432"
29
+ - "127.0.0.1:5432:5432"
27
30
  environment:
28
31
  POSTGRES_USER: myuser
29
32
  POSTGRES_PASSWORD: mypassword
30
33
  POSTGRES_DB: postgres
31
34
  volumes:
32
- - pgdata:/var/lib/postgresql/data
35
+ # PostgreSQL 18+ images store data in a major-versioned subdirectory
36
+ # (/var/lib/postgresql/18/docker), so the mount goes one level up. Mounting
37
+ # .../data instead leaves the volume unused and the container refuses to
38
+ # start. See docker-library/postgres#1259.
39
+ - pgdata:/var/lib/postgresql
33
40
  healthcheck:
34
41
  test: ["CMD-SHELL", "pg_isready -U myuser -d postgres"]
35
42
  interval: 5s
@@ -50,7 +57,7 @@ volumes:
50
57
  shared,
51
58
  };
52
59
  }
53
- async function authService(mode, root, oauth = [], adminMode = "api") {
60
+ async function authService(mode, root, oauth = [], adminMode = "api", ownerEmail) {
54
61
  if (mode === "local") {
55
62
  // auth/.env was already written by generateAuthServer (with its secrets and any
56
63
  // OAuth config). Read those values back rather than regenerating, which would mint
@@ -64,7 +71,7 @@ async function authService(mode, root, oauth = [], adminMode = "api") {
64
71
  context: ./auth
65
72
  dockerfile: Dockerfile.dev
66
73
  ports:
67
- - "5312:5312"
74
+ - "127.0.0.1:5312:5312"
68
75
  env_file:
69
76
  - ./auth/.env
70
77
  environment:
@@ -80,7 +87,7 @@ async function authService(mode, root, oauth = [], adminMode = "api") {
80
87
  shared,
81
88
  };
82
89
  }
83
- return await authServiceDocker(oauth, adminMode);
90
+ return await authServiceDocker(oauth, adminMode, ownerEmail);
84
91
  }
85
92
  // The app API's CORS allowlist. The console is same-origin here in API-served
86
93
  // mode, so 5174 only belongs when a standalone dashboard container runs there.
@@ -97,7 +104,7 @@ function apiService(shared, adminMode) {
97
104
  container_name: api
98
105
  build: ./api
99
106
  ports:
100
- - "3000:3000"
107
+ - "127.0.0.1:3000:3000"
101
108
  env_file:
102
109
  - ./api/.env
103
110
  environment:
@@ -122,7 +129,7 @@ function webService() {
122
129
  container_name: web
123
130
  build: ./web
124
131
  ports:
125
- - "5173:80"
132
+ - "127.0.0.1:5173:80"
126
133
  environment:
127
134
  API_URL: http://localhost:3000/
128
135
  volumes:
@@ -137,10 +144,10 @@ function webService() {
137
144
  retries: 10
138
145
  `;
139
146
  }
140
- async function authServiceDocker(oauth = [], adminMode = "api") {
147
+ async function authServiceDocker(oauth = [], adminMode = "api", ownerEmail) {
141
148
  const raw = await fetchEnvExample();
142
149
  const parsed = parseEnvString(raw);
143
- const { env, shared } = buildAuthEnv(parsed, "docker", oauth, adminMode);
150
+ const { env, shared } = buildAuthEnv(parsed, "docker", oauth, adminMode, ownerEmail);
144
151
  const envBlock = envToDockerBlock(env);
145
152
  return {
146
153
  service: `
@@ -148,7 +155,7 @@ async function authServiceDocker(oauth = [], adminMode = "api") {
148
155
  image: ${SEAMLESS_AUTH_API_IMAGE}
149
156
  container_name: seamless-auth
150
157
  ports:
151
- - "5312:5312"
158
+ - "127.0.0.1:5312:5312"
152
159
  environment:
153
160
  ${envBlock}
154
161
  depends_on:
@@ -165,7 +172,7 @@ function adminService(mode) {
165
172
  container_name: admin
166
173
  build: ./admin
167
174
  ports:
168
- - "5174:80"
175
+ - "127.0.0.1:5174:80"
169
176
  environment:
170
177
  API_URL: http://localhost:3000/
171
178
  AUTH_MODE: server
@@ -181,7 +188,7 @@ function adminService(mode) {
181
188
  image: ${SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE}
182
189
  container_name: admin
183
190
  ports:
184
- - "5174:80"
191
+ - "127.0.0.1:5174:80"
185
192
  environment:
186
193
  API_URL: http://localhost:3000/
187
194
  depends_on:
@@ -200,12 +207,16 @@ function adminOrigins(adminMode) {
200
207
  }
201
208
  return web;
202
209
  }
203
- export function buildAuthEnv(env, mode, oauth = [], adminMode = "api") {
210
+ export function buildAuthEnv(env, mode, oauth = [], adminMode = "api", ownerEmail) {
204
211
  const apiToken = generateSecret(32);
205
- const bootstrapSecret = generateSecret(32);
206
212
  const kid = "dev-main";
207
- env.SEAMLESS_BOOTSTRAP_ENABLED = "true";
208
- env.SEAMLESS_BOOTSTRAP_SECRET = bootstrapSecret;
213
+ // The auth server grants the admin role at signup to an address listed here,
214
+ // so registering in the scaffolded app produces a working /console admin with
215
+ // no separate promotion step. Signup-time only: setting this after an account
216
+ // already exists promotes nobody.
217
+ if (ownerEmail) {
218
+ env.OWNER_EMAIL = ownerEmail;
219
+ }
209
220
  env.PORT = "5312";
210
221
  env.NODE_ENV = "development";
211
222
  env.AUTH_MODE = "server";
@@ -244,7 +255,6 @@ export function buildAuthEnv(env, mode, oauth = [], adminMode = "api") {
244
255
  shared: {
245
256
  apiToken,
246
257
  kid,
247
- bootstrapSecret,
248
258
  },
249
259
  };
250
260
  }
@@ -282,7 +292,7 @@ export function buildJWKSConfig() {
282
292
  }, null, 2),
283
293
  };
284
294
  }
285
- export async function configureAuthLocalEnv(root, oauth = [], adminMode = "api") {
295
+ export async function configureAuthLocalEnv(root, oauth = [], adminMode = "api", ownerEmail) {
286
296
  const authDir = path.join(root, "auth");
287
297
  const envExamplePath = path.join(authDir, ".env.example");
288
298
  const envPath = path.join(authDir, ".env");
@@ -291,7 +301,7 @@ export async function configureAuthLocalEnv(root, oauth = [], adminMode = "api")
291
301
  }
292
302
  const raw = fs.readFileSync(envExamplePath, "utf-8");
293
303
  const parsed = parseEnvString(raw);
294
- const { env, shared } = buildAuthEnv(parsed, "local", oauth, adminMode);
304
+ const { env, shared } = buildAuthEnv(parsed, "local", oauth, adminMode, ownerEmail);
295
305
  writeEnvFile(envPath, env);
296
306
  return shared;
297
307
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/generators/docker/docker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/generators/docker/docker.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { runCLI } from "./commands/init.js";
3
- import { extractFlag } from "./core/args.js";
3
+ import { extractFlag, hasHelpFlag } from "./core/args.js";
4
4
  import { runCheck } from "./commands/check.js";
5
- import { printHelp } from "./commands/help.js";
5
+ import { printCommandHelp, printHelp } from "./commands/help.js";
6
+ import { COMMANDS } from "./commands/helpTopics.js";
6
7
  import pkg from "../package.json" with { type: "json" };
7
- import { runBootstrapAdmin } from "./commands/bootstrapAdmin.js";
8
8
  import { runVerify } from "./commands/verify.js";
9
9
  import { runProfile } from "./commands/profile.js";
10
10
  import { runLogin } from "./commands/login.js";
@@ -14,6 +14,10 @@ import { runSessions } from "./commands/sessions.js";
14
14
  import { runConfig } from "./commands/config.js";
15
15
  import { runUsers } from "./commands/users.js";
16
16
  import { runOrg } from "./commands/org.js";
17
+ import { runApps } from "./commands/apps.js";
18
+ import { runTemplates } from "./commands/templates.js";
19
+ import { isCancelled } from "./core/cancel.js";
20
+ import kleur from "kleur";
17
21
  export const VERSION = pkg.version;
18
22
  const args = process.argv.slice(2);
19
23
  const command = args[0];
@@ -30,28 +34,33 @@ async function main() {
30
34
  console.log(VERSION);
31
35
  return;
32
36
  }
37
+ // `seamless help [command]` is the spelled-out form of `--help`.
38
+ if (command === "help") {
39
+ const topic = args[1];
40
+ if (!topic) {
41
+ printHelp();
42
+ return;
43
+ }
44
+ if (printCommandHelp(topic))
45
+ return;
46
+ unknownCommand(topic);
47
+ return;
48
+ }
49
+ // Every command answers -h / --help itself, ahead of its own arg parsing.
50
+ if (COMMANDS.includes(command) && hasHelpFlag(args.slice(1))) {
51
+ printCommandHelp(command);
52
+ return;
53
+ }
33
54
  if (command === "init") {
34
- const profileFlag = extractFlag(args.slice(1), "profile");
35
- const appFlag = extractFlag(profileFlag.rest, "app");
36
- const rest = appFlag.rest;
37
- const local = rest.includes("--local");
38
- const aliases = rest
39
- .filter((a) => a.startsWith("--") && a !== "--local")
40
- .map((a) => a.replace(/^--+/, ""));
41
- const projectName = rest.find((a) => !a.startsWith("--"));
42
- await runCLI(projectName, aliases, {
43
- profileFlag: profileFlag.value,
44
- appId: appFlag.value,
45
- local,
46
- });
55
+ await runCLI(...parseInitArgs(args.slice(1)));
47
56
  return;
48
57
  }
49
- if (command === "check") {
50
- await runCheck();
58
+ if (command === "templates") {
59
+ await runTemplates(args.slice(1));
51
60
  return;
52
61
  }
53
- if (command === "bootstrap-admin") {
54
- await runBootstrapAdmin(args.slice(1));
62
+ if (command === "check") {
63
+ await runCheck();
55
64
  return;
56
65
  }
57
66
  if (command === "verify") {
@@ -90,9 +99,68 @@ async function main() {
90
99
  await runOrg(args.slice(1));
91
100
  return;
92
101
  }
93
- await runCLI(command);
102
+ if (command === "apps") {
103
+ await runApps(args.slice(1));
104
+ return;
105
+ }
106
+ unknownCommand(command);
107
+ }
108
+ // Flags init handles itself rather than passing through as a template flag.
109
+ // Anything else starting with `--` is a template id or alias, which is what
110
+ // keeps adding a template to the registry from needing code here.
111
+ const INIT_SWITCHES = new Set(["--local", "--yes", "-y", "--force"]);
112
+ // init's arguments, as the runCLI(projectName, aliases, opts) triple. Only
113
+ // splits them up: which values are valid is settled in init.ts, against the
114
+ // registry, before anything is written.
115
+ export function parseInitArgs(args) {
116
+ const valued = ["profile", "app", "web", "api", "email", "auth", "admin"];
117
+ const values = {};
118
+ let rest = args;
119
+ for (const name of valued) {
120
+ const extracted = extractFlag(rest, name);
121
+ values[name] = extracted.value;
122
+ rest = extracted.rest;
123
+ }
124
+ const aliases = rest
125
+ .filter((a) => a.startsWith("--") && !INIT_SWITCHES.has(a))
126
+ .map((a) => a.replace(/^--+/, ""));
127
+ const projectName = rest.find((a) => !a.startsWith("-"));
128
+ return [
129
+ projectName,
130
+ aliases,
131
+ {
132
+ profileFlag: values.profile,
133
+ appId: values.app,
134
+ web: values.web,
135
+ api: values.api,
136
+ email: values.email,
137
+ auth: values.auth,
138
+ admin: values.admin,
139
+ local: rest.includes("--local"),
140
+ yes: rest.includes("--yes") || rest.includes("-y"),
141
+ force: rest.includes("--force"),
142
+ },
143
+ ];
144
+ }
145
+ // An unrecognized command used to be treated as a project name and scaffolded,
146
+ // which made every typo create a directory with no indication the command was
147
+ // not understood. Scaffolding is `init` and nothing else.
148
+ function unknownCommand(name) {
149
+ console.error(kleur.red(`Unknown command "${name}".`));
150
+ if (!name.startsWith("-")) {
151
+ console.error(kleur.dim("To scaffold a project, run: ") +
152
+ kleur.cyan(`seamless init ${name}`));
153
+ }
154
+ console.error(kleur.dim(`Commands: ${COMMANDS.join(", ")}`));
155
+ console.error(kleur.dim("Run seamless --help, or seamless <command> --help, for details."));
156
+ process.exit(1);
94
157
  }
95
158
  main().catch((err) => {
159
+ if (isCancelled(err)) {
160
+ console.log(err.message);
161
+ // 130 is the conventional exit status for a command ended by Ctrl-C.
162
+ process.exit(130);
163
+ }
96
164
  console.error("Error:", err.message);
97
165
  process.exit(1);
98
166
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
- import { select, isCancel, cancel } from "@clack/prompts";
1
+ import { select } from "@clack/prompts";
2
+ import { orCancel } from "../core/cancel.js";
3
+ import { requireInteractive } from "../core/tty.js";
4
+ import { resolveAppInstanceUrl } from "../core/portal.js";
2
5
  export class NoApplicationsError extends Error {
3
6
  constructor() {
4
7
  super("No managed applications are available for this account. Create one at https://dashboard.seamlessauth.com, then run init again.");
@@ -7,7 +10,9 @@ export class NoApplicationsError extends Error {
7
10
  }
8
11
  // Resolves which managed application the scaffold connects to. `--app` matches an
9
12
  // id or infra id; a single application is auto-selected; otherwise the developer
10
- // picks. Returns null only when an interactive selection is cancelled.
13
+ // picks. Cancelling throws CancelledError, so init can unwind what it created.
14
+ // Generic over the app type so a caller that has already narrowed to applications
15
+ // with a resolvable instance URL keeps that guarantee on the selected one.
11
16
  export async function selectApplication(apps, preselectId) {
12
17
  if (apps.length === 0) {
13
18
  throw new NoApplicationsError();
@@ -21,21 +26,22 @@ export async function selectApplication(apps, preselectId) {
21
26
  return found;
22
27
  }
23
28
  if (apps.length === 1) {
24
- console.log(`Managed application: ${apps[0].name} (${apps[0].domain})`);
29
+ console.log(`Managed application: ${apps[0].name} (${resolveAppInstanceUrl(apps[0])})`);
25
30
  return apps[0];
26
31
  }
27
- const choice = await select({
32
+ requireInteractive("Which managed application should this project connect to?", "Pass --app <id> to name one (see `seamless apps list`).");
33
+ const choice = orCancel(await select({
28
34
  message: "Which managed application should this project connect to?",
29
35
  options: apps.map((a) => ({
30
36
  value: a.id,
31
37
  label: a.name,
32
- hint: a.domain,
38
+ hint: resolveAppInstanceUrl(a),
33
39
  })),
34
- });
35
- if (isCancel(choice)) {
36
- cancel("Cancelled.");
37
- return null;
40
+ }));
41
+ const chosen = apps.find((a) => a.id === choice);
42
+ if (!chosen) {
43
+ throw new Error(`Selected application "${String(choice)}" is no longer available.`);
38
44
  }
39
- return apps.find((a) => a.id === choice) ?? null;
45
+ return chosen;
40
46
  }
41
47
  //# sourceMappingURL=appSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appSelect.js","sourceRoot":"","sources":["../../src/prompts/appSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI1D,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CACH,gIAAgI,CACjI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,kFAAkF;AAClF,iFAAiF;AACjF,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAiB,EACjB,WAAoB;IAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,WAAW,CACzD,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,yCAAyC,WAAW,iBAAiB,SAAS,GAAG,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,OAAO,EAAE,2DAA2D;QACpE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,CAAC,CAAC,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,IAAI,EAAE,CAAC,CAAC,MAAM;SACf,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"appSelect.js","sourceRoot":"","sources":["../../src/prompts/appSelect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAkB,MAAM,mBAAmB,CAAC;AAE1E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C;QACE,KAAK,CACH,gIAAgI,CACjI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,kFAAkF;AAClF,iFAAiF;AACjF,+EAA+E;AAC/E,kFAAkF;AAClF,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAS,EACT,WAAoB;IAEpB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,mBAAmB,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,KAAK,WAAW,CACzD,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,yCAAyC,WAAW,iBAAiB,SAAS,GAAG,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,wBAAwB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAC3E,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,kBAAkB,CAChB,2DAA2D,EAC3D,yDAAyD,CAC1D,CAAC;IAEF,MAAM,MAAM,GAAG,QAAQ,CACrB,MAAM,MAAM,CAAC;QACX,OAAO,EAAE,2DAA2D;QACpE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,CAAC,CAAC,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;SAC/B,CAAC,CAAC;KACJ,CAAC,CACH,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { confirm, select } from "@clack/prompts";
2
+ import { CancelledError, orCancel } from "../core/cancel.js";
3
+ // A directory with files in it used to force the integrate path, which left a
4
+ // logged-out developer with no way to scaffold anywhere except a completely
5
+ // empty directory. Templates are copied over whatever is already there, so
6
+ // scaffolding into one is offered but never assumed.
7
+ export async function chooseExistingDirectoryAction(canIntegrate) {
8
+ if (!canIntegrate) {
9
+ await confirmOverwrite();
10
+ return "scaffold";
11
+ }
12
+ const action = orCancel(await select({
13
+ message: "This directory is not empty. What would you like to do?",
14
+ options: [
15
+ {
16
+ value: "integrate",
17
+ label: "Connect it to a managed application",
18
+ hint: "writes api/.env, leaves your source alone",
19
+ },
20
+ {
21
+ value: "scaffold",
22
+ label: "Scaffold a new project here",
23
+ hint: "starter files overwrite anything with the same name",
24
+ },
25
+ ],
26
+ }));
27
+ // The hint on the option is not consent. Writing over a directory a developer
28
+ // already has work in gets its own confirmation, on every route that reaches
29
+ // it, so the destructive choice is never one keystroke away.
30
+ if (action === "scaffold") {
31
+ await confirmOverwrite();
32
+ }
33
+ return action;
34
+ }
35
+ async function confirmOverwrite() {
36
+ const proceed = orCancel(await confirm({
37
+ message: "This directory is not empty. Scaffold a project here anyway? Starter files overwrite anything with the same name.",
38
+ initialValue: false,
39
+ }));
40
+ if (!proceed) {
41
+ throw new CancelledError("Nothing was written.");
42
+ }
43
+ }
44
+ // Being logged in signals intent, so managed leads, but it is a question rather
45
+ // than a default: a portal session is a poor reason to assume this particular
46
+ // project is not a local experiment.
47
+ export async function chooseScaffoldTarget(appCount) {
48
+ return orCancel(await select({
49
+ message: "How should this project get its auth?",
50
+ options: [
51
+ {
52
+ value: "managed",
53
+ label: "Connect to a managed application",
54
+ hint: `${appCount} available`,
55
+ },
56
+ {
57
+ value: "local",
58
+ label: "Scaffold a local stack",
59
+ hint: "Docker Compose, runs entirely on your machine",
60
+ },
61
+ ],
62
+ initialValue: "managed",
63
+ }));
64
+ }
65
+ // Reaching the control plane is the one failure that used to degrade silently:
66
+ // a developer who meant to connect managed got a full local Docker stack with
67
+ // only a warning.
68
+ export async function confirmLocalFallback() {
69
+ const proceed = orCancel(await confirm({
70
+ message: "Could not reach the Seamless control plane. Scaffold a local stack instead?",
71
+ initialValue: true,
72
+ }));
73
+ if (!proceed) {
74
+ throw new CancelledError("Nothing was written.");
75
+ }
76
+ }
77
+ //# sourceMappingURL=initMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initMode.js","sourceRoot":"","sources":["../../src/prompts/initMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7D,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,YAAqB;IAErB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,gBAAgB,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CACrB,MAAM,MAAM,CAAC;QACX,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,qCAAqC;gBAC5C,IAAI,EAAE,2CAA2C;aAClD;YACD;gBACE,KAAK,EAAE,UAAU;gBACjB,KAAK,EAAE,6BAA6B;gBACpC,IAAI,EAAE,qDAAqD;aAC5D;SACF;KACF,CAAC,CACwB,CAAC;IAE7B,8EAA8E;IAC9E,6EAA6E;IAC7E,6DAA6D;IAC7D,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,OAAO,GAAG,QAAQ,CACtB,MAAM,OAAO,CAAC;QACZ,OAAO,EACL,mHAAmH;QACrH,YAAY,EAAE,KAAK;KACpB,CAAC,CACH,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAID,gFAAgF;AAChF,8EAA8E;AAC9E,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB;IAEhB,OAAO,QAAQ,CACb,MAAM,MAAM,CAAC;QACX,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,kCAAkC;gBACzC,IAAI,EAAE,GAAG,QAAQ,YAAY;aAC9B;YACD;gBACE,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,+CAA+C;aACtD;SACF;QACD,YAAY,EAAE,SAAS;KACxB,CAAC,CACe,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,kBAAkB;AAClB,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,OAAO,GAAG,QAAQ,CACtB,MAAM,OAAO,CAAC;QACZ,OAAO,EACL,6EAA6E;QAC/E,YAAY,EAAE,IAAI;KACnB,CAAC,CACH,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { multiselect, password, text } from "@clack/prompts";
2
+ import { orCancel } from "../core/cancel.js";
2
3
  import { OAUTH_PROVIDER_CATALOG, } from "../core/oauthProviders.js";
3
4
  // Runs when the selected web template opts into OAuth setup. Lets the user pick
4
5
  // providers and paste each one's client id and secret, so the scaffolded auth
5
6
  // server has OAuth working right after `docker compose up`. Blank credentials are
6
7
  // allowed (the provider is scaffolded disabled for the user to fill in later).
7
8
  export async function runOAuthSetupPrompts() {
8
- const chosen = (await multiselect({
9
+ const chosen = orCancel(await multiselect({
9
10
  message: "Which OAuth providers do you want to enable? (space to select)",
10
11
  options: OAUTH_PROVIDER_CATALOG.map((p) => ({ value: p.id, label: p.label })),
11
12
  required: false,
@@ -18,11 +19,11 @@ export async function runOAuthSetupPrompts() {
18
19
  const catalog = OAUTH_PROVIDER_CATALOG.find((p) => p.id === id);
19
20
  if (!catalog)
20
21
  continue;
21
- const clientId = (await text({
22
+ const clientId = orCancel(await text({
22
23
  message: `${catalog.label} client ID`,
23
24
  placeholder: "leave blank to configure later",
24
25
  }));
25
- const clientSecret = (await password({
26
+ const clientSecret = orCancel(await password({
26
27
  message: `${catalog.label} client secret`,
27
28
  }));
28
29
  collected.push({
@@ -1 +1 @@
1
- {"version":3,"file":"oauthSetup.js","sourceRoot":"","sources":["../../src/prompts/oauthSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EACL,sBAAsB,GAEvB,MAAM,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,8EAA8E;AAC9E,kFAAkF;AAClF,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC;QAChC,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7E,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAa,CAAC;IAEhB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAA6B,EAAE,CAAC;IAE/C,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC;YAC3B,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,YAAY;YACrC,WAAW,EAAE,gCAAgC;SAC9C,CAAC,CAAW,CAAC;QAEd,MAAM,YAAY,GAAG,CAAC,MAAM,QAAQ,CAAC;YACnC,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,gBAAgB;SAC1C,CAAC,CAAW,CAAC;QAEd,SAAS,CAAC,IAAI,CAAC;YACb,OAAO;YACP,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjC,YAAY,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"oauthSetup.js","sourceRoot":"","sources":["../../src/prompts/oauthSetup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EACL,sBAAsB,GAEvB,MAAM,2BAA2B,CAAC;AAEnC,gFAAgF;AAChF,8EAA8E;AAC9E,kFAAkF;AAClF,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,MAAM,GAAG,QAAQ,CACrB,MAAM,WAAW,CAAC;QAChB,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7E,QAAQ,EAAE,KAAK;KAChB,CAAC,CACS,CAAC;IAEd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAA6B,EAAE,CAAC;IAE/C,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,QAAQ,GAAG,QAAQ,CACvB,MAAM,IAAI,CAAC;YACT,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,YAAY;YACrC,WAAW,EAAE,gCAAgC;SAC9C,CAAC,CACO,CAAC;QAEZ,MAAM,YAAY,GAAG,QAAQ,CAC3B,MAAM,QAAQ,CAAC;YACb,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,gBAAgB;SAC1C,CAAC,CACO,CAAC;QAEZ,SAAS,CAAC,IAAI,CAAC;YACb,OAAO;YACP,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjC,YAAY,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}