seamless-cli 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +8 -8
  2. package/dist/commands/bootstrapAdmin.js +11 -15
  3. package/dist/commands/bootstrapAdmin.js.map +1 -1
  4. package/dist/commands/check.js +69 -12
  5. package/dist/commands/check.js.map +1 -1
  6. package/dist/commands/config.js +117 -2
  7. package/dist/commands/config.js.map +1 -1
  8. package/dist/commands/help.js +20 -7
  9. package/dist/commands/help.js.map +1 -1
  10. package/dist/commands/init.js +96 -49
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/login.js +30 -8
  13. package/dist/commands/login.js.map +1 -1
  14. package/dist/commands/verify.js +11 -2
  15. package/dist/commands/verify.js.map +1 -1
  16. package/dist/core/config.js +12 -2
  17. package/dist/core/config.js.map +1 -1
  18. package/dist/core/env.js +48 -19
  19. package/dist/core/env.js.map +1 -1
  20. package/dist/core/images.js +2 -2
  21. package/dist/core/loginFlow.js +37 -5
  22. package/dist/core/loginFlow.js.map +1 -1
  23. package/dist/core/output.js +21 -4
  24. package/dist/core/output.js.map +1 -1
  25. package/dist/core/systemConfig.js +57 -0
  26. package/dist/core/systemConfig.js.map +1 -1
  27. package/dist/core/templates.js +1 -0
  28. package/dist/core/templates.js.map +1 -1
  29. package/dist/generators/auth/auth.js +4 -4
  30. package/dist/generators/auth/auth.js.map +1 -1
  31. package/dist/generators/config/config.js +4 -1
  32. package/dist/generators/config/config.js.map +1 -1
  33. package/dist/generators/docker/docker.js +47 -14
  34. package/dist/generators/docker/docker.js.map +1 -1
  35. package/dist/prompts/projectSetup.js +22 -21
  36. package/dist/prompts/projectSetup.js.map +1 -1
  37. package/package.json +1 -2
  38. package/verify/adapter-app/Dockerfile +1 -1
  39. package/verify/adapter-app/package.json +2 -2
  40. package/verify/docker-compose.verify.yml +9 -1
  41. package/verify/harness/lib/adapterFlows.ts +3 -3
@@ -80,26 +80,28 @@ export async function runProjectSetupPrompts(templates, preselect = {}) {
80
80
  },
81
81
  ],
82
82
  }));
83
- const includeAdmin = await confirm({
84
- message: "Include Admin Dashboard?",
85
- initialValue: true,
86
- });
87
- let adminMode = "image";
88
- if (includeAdmin) {
89
- adminMode = (await select({
90
- message: "Admin dashboard source",
91
- options: [
92
- {
93
- value: "image",
94
- label: "Use official Docker image (recommended)",
95
- },
96
- {
97
- value: "source",
98
- label: "Clone repo for modification",
99
- },
100
- ],
101
- }));
102
- }
83
+ const adminMode = (await select({
84
+ message: "How would you like to host the admin console?",
85
+ options: [
86
+ {
87
+ value: "api",
88
+ label: "Served by your API at /console (recommended)",
89
+ },
90
+ {
91
+ value: "image",
92
+ label: "Separate container — official Docker image",
93
+ },
94
+ {
95
+ value: "source",
96
+ label: "Separate container — clone repo for modification",
97
+ },
98
+ {
99
+ value: "none",
100
+ label: "Don't include the admin console",
101
+ },
102
+ ],
103
+ initialValue: "api",
104
+ }));
103
105
  if (authMode === "local") {
104
106
  const confirmDocker = await confirm({
105
107
  message: "Auth server still requires Docker for full stack. Enable Docker?",
@@ -116,7 +118,6 @@ export async function runProjectSetupPrompts(templates, preselect = {}) {
116
118
  apiTemplateId,
117
119
  authMode,
118
120
  useDocker: true,
119
- includeAdmin,
120
121
  adminMode,
121
122
  };
122
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"projectSetup.js","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectSetup.js","sourceRoot":"","sources":["../../src/prompts/projectSetup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "seamless-cli",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "The Seamless Auth command-line interface",
5
5
  "homepage": "https://github.com/fells-code/seamless-cli#readme",
6
6
  "bugs": {
@@ -35,7 +35,6 @@
35
35
  "main": "dist/index.js",
36
36
  "files": [
37
37
  "dist",
38
- "templates",
39
38
  "verify",
40
39
  "README.md",
41
40
  "LICENSE"
@@ -1,4 +1,4 @@
1
- FROM node:20-alpine
1
+ FROM node:24-alpine
2
2
  WORKDIR /app
3
3
  RUN apk add --no-cache curl
4
4
  COPY package.json ./
@@ -5,9 +5,9 @@
5
5
  "type": "module",
6
6
  "description": "Minimal adopter backend for the conformance harness — real @seamless-auth/express with a capture transport.",
7
7
  "dependencies": {
8
- "@seamless-auth/express": "^0.6.0",
8
+ "@seamless-auth/express": "^0.8.0",
9
9
  "cookie-parser": "^1.4.6",
10
10
  "cors": "^2.8.5",
11
- "express": "^4.19.2"
11
+ "express": "^5.1.0"
12
12
  }
13
13
  }
@@ -51,11 +51,19 @@ services:
51
51
  DEFAULT_ROLES: user
52
52
  AVAILABLE_ROLES: user,admin
53
53
  LOGIN_METHODS: passkey,magic_link,email_otp,phone_otp,oauth
54
+ # Required system config as of auth-api 0.3.0: the base URL for emailed
55
+ # magic links. Without it (and with a fresh DB, so system_config isn't seeded)
56
+ # the server exits at startup. The browser-visible web app runs on 5173.
57
+ FRONTEND_URL: http://localhost:5173
54
58
  DB_LOGGING: 'false'
55
59
  ACCESS_TOKEN_TTL: 15m
56
60
  REFRESH_TOKEN_TTL: 1h
57
61
  RATE_LIMIT: '100000'
58
62
  DELAY_AFTER: '100000'
63
+ # The dedicated per-IP OTP/magic-link/registration/OAuth limiters are not
64
+ # tuned by RATE_LIMIT; the suite drives many flows from one IP and would trip
65
+ # them. This dev-only flag skips them (ignored under NODE_ENV=production).
66
+ DISABLE_AUTH_RATE_LIMITS: 'true'
59
67
  RPID: localhost
60
68
  ORIGINS: http://localhost:5173,http://localhost:3000
61
69
  DB_HOST: postgres
@@ -123,7 +131,7 @@ services:
123
131
  additional_contexts:
124
132
  sdk: ./react-vendor
125
133
  dockerfile_inline: |
126
- FROM node:20-slim AS builder
134
+ FROM node:24-slim AS builder
127
135
  WORKDIR /app
128
136
  COPY package.json package-lock.json ./
129
137
  RUN npm ci
@@ -16,7 +16,7 @@ export async function registerAndVerifyEmail(ctx: APIRequestContext, email: stri
16
16
  let res = await ctx.post('/auth/registration/register', { data: { email } });
17
17
  expect(res.ok(), `register -> ${res.status()}`).toBeTruthy();
18
18
 
19
- res = await ctx.get('/auth/otp/generate-email-otp');
19
+ res = await ctx.post('/auth/otp/generate-email-otp');
20
20
  expect(res.ok(), `generate-email-otp -> ${res.status()}`).toBeTruthy();
21
21
 
22
22
  const code = await readCapturedCode(ctx, email);
@@ -28,7 +28,7 @@ export async function loginViaEmailOtp(ctx: APIRequestContext, email: string): P
28
28
  let res = await ctx.post('/auth/login', { data: { identifier: email } });
29
29
  expect(res.ok(), `login -> ${res.status()}`).toBeTruthy();
30
30
 
31
- res = await ctx.get('/auth/otp/generate-login-email-otp');
31
+ res = await ctx.post('/auth/otp/generate-login-email-otp');
32
32
  expect(res.ok(), `generate-login-email-otp -> ${res.status()}`).toBeTruthy();
33
33
 
34
34
  const code = await readCapturedCode(ctx, email);
@@ -40,7 +40,7 @@ export async function loginViaMagicLink(ctx: APIRequestContext, email: string):
40
40
  let res = await ctx.post('/auth/login', { data: { identifier: email } });
41
41
  expect(res.ok(), `login -> ${res.status()}`).toBeTruthy();
42
42
 
43
- res = await ctx.get('/auth/magic-link');
43
+ res = await ctx.post('/auth/magic-link');
44
44
  expect(res.ok(), `magic-link request -> ${res.status()}`).toBeTruthy();
45
45
  const token = await readCapturedCode(ctx, email);
46
46