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.
- package/README.md +198 -29
- package/dist/commands/apps.js +147 -0
- package/dist/commands/apps.js.map +1 -0
- package/dist/commands/config.js +16 -15
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/help.js +65 -187
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/helpTopics.js +376 -0
- package/dist/commands/helpTopics.js.map +1 -0
- package/dist/commands/init.js +295 -76
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instanceLogin.js +55 -0
- package/dist/commands/instanceLogin.js.map +1 -0
- package/dist/commands/login.js +42 -80
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +18 -8
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/org.js +5 -4
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/profile.js +29 -2
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/sessions.js +9 -7
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/templates.js +58 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/users.js +9 -7
- package/dist/commands/users.js.map +1 -1
- package/dist/commands/verify.js +43 -11
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.js +13 -5
- package/dist/commands/whoami.js.map +1 -1
- package/dist/core/args.js +11 -0
- package/dist/core/args.js.map +1 -1
- package/dist/core/authClient.js +29 -6
- package/dist/core/authClient.js.map +1 -1
- package/dist/core/cancel.js +32 -0
- package/dist/core/cancel.js.map +1 -0
- package/dist/core/config.js +45 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/confirmAction.js +26 -0
- package/dist/core/confirmAction.js.map +1 -0
- package/dist/core/images.js +7 -4
- package/dist/core/images.js.map +1 -1
- package/dist/core/interactiveLogin.js +75 -0
- package/dist/core/interactiveLogin.js.map +1 -0
- package/dist/core/loginFlow.js +24 -8
- package/dist/core/loginFlow.js.map +1 -1
- package/dist/core/output.js +23 -9
- package/dist/core/output.js.map +1 -1
- package/dist/core/portal.js +112 -8
- package/dist/core/portal.js.map +1 -1
- package/dist/core/templates.js +10 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tty.js +25 -0
- package/dist/core/tty.js.map +1 -0
- package/dist/generators/auth/auth.js +8 -7
- package/dist/generators/auth/auth.js.map +1 -1
- package/dist/generators/docker/docker.js +32 -22
- package/dist/generators/docker/docker.js.map +1 -1
- package/dist/index.js +89 -21
- package/dist/index.js.map +1 -1
- package/dist/prompts/appSelect.js +16 -10
- package/dist/prompts/appSelect.js.map +1 -1
- package/dist/prompts/initMode.js +77 -0
- package/dist/prompts/initMode.js.map +1 -0
- package/dist/prompts/oauthSetup.js +4 -3
- package/dist/prompts/oauthSetup.js.map +1 -1
- package/dist/prompts/projectSetup.js +77 -50
- package/dist/prompts/projectSetup.js.map +1 -1
- package/dist/testSetup.js +9 -0
- package/dist/testSetup.js.map +1 -0
- package/package.json +1 -1
- package/verify/adapter-app/package.json +1 -1
- package/verify/adapter-fastify-app/Dockerfile +14 -0
- package/verify/adapter-fastify-app/package.json +12 -0
- package/verify/adapter-fastify-app/server.mjs +64 -0
- package/verify/adapter-fastify-app/vendor/.gitignore +3 -0
- package/verify/adapter-fastify-app/vendor/.gitkeep +0 -0
- package/verify/docker-compose.cache.yml +43 -0
- package/verify/docker-compose.verify.yml +34 -4
- package/verify/harness/api/loginEnumeration.spec.ts +139 -0
- package/verify/harness/api/ownerAdmin.spec.ts +24 -0
- package/verify/harness/global-setup.ts +4 -1
- package/verify/harness/lib/client.ts +7 -3
- package/verify/harness/lib/env.ts +7 -4
- package/verify/harness/lib/fixtures.ts +12 -3
- package/verify/harness/lib/flows.ts +1 -36
- package/verify/harness/lib/matrixReporter.ts +19 -6
- package/verify/harness/lib/reactFlows.ts +0 -2
- package/verify/harness/playwright.config.ts +19 -5
- package/dist/commands/bootstrapAdmin.js +0 -96
- package/dist/commands/bootstrapAdmin.js.map +0 -1
- package/dist/core/bootstrapSecret.js +0 -39
- package/dist/core/bootstrapSecret.js.map +0 -1
- 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;
|
|
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
|
-
-
|
|
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
|
-
|
|
208
|
-
|
|
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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAEhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,cAAc,EACd,mCAAmC,EACnC,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,
|
|
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
|
-
|
|
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 === "
|
|
50
|
-
await
|
|
58
|
+
if (command === "templates") {
|
|
59
|
+
await runTemplates(args.slice(1));
|
|
51
60
|
return;
|
|
52
61
|
}
|
|
53
|
-
if (command === "
|
|
54
|
-
await
|
|
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
|
-
|
|
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":";AAEA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { select
|
|
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.
|
|
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]
|
|
29
|
+
console.log(`Managed application: ${apps[0].name} (${resolveAppInstanceUrl(apps[0])})`);
|
|
25
30
|
return apps[0];
|
|
26
31
|
}
|
|
27
|
-
|
|
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
|
|
38
|
+
hint: resolveAppInstanceUrl(a),
|
|
33
39
|
})),
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
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;
|
|
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,
|
|
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"}
|