seamless-cli 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
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
+ ![coverage](resources/coverage-badge.svg)
5
6
 
6
7
  Seamless CLI is a command-line tool for bootstrapping applications with Seamless Auth, an open source, passwordless authentication system.
7
8
 
@@ -32,6 +33,43 @@ You’ll be guided through a short setup process where you can choose:
32
33
 
33
34
  ---
34
35
 
36
+ ## Connecting to a managed instance
37
+
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.
42
+
43
+ ```bash
44
+ seamless login # once, against your managed profile
45
+ seamless init my-app # scaffolds web + api wired to the managed instance
46
+ ```
47
+
48
+ What happens:
49
+
50
+ - The CLI lists your applications from the control plane and, when you have more than one, asks
51
+ which to connect. Skip the prompt with `--app <id>` (an application id or infra id).
52
+ - It issues the application's service token from the control plane (the real credential, not a
53
+ locally generated secret) and writes it, the managed auth server URL, and the JWKS key id into
54
+ `api/.env`. The frontend is pointed at the same auth server URL.
55
+ - No local auth server, Docker Compose, or admin dashboard is generated. Auth, users, and OAuth
56
+ providers are managed from the dashboard.
57
+
58
+ Because the service token is shown only once at issue time, `init` confirms before issuing a new
59
+ one for an application that already has a token (issuing a new token invalidates the old one).
60
+
61
+ Run inside an existing project (a non-empty directory) to wire it up in place: `init` updates
62
+ `api/.env` when an `api` directory is present, otherwise it prints the values to set by hand. Your
63
+ own source is never overwritten.
64
+
65
+ Escape hatches:
66
+
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).
70
+
71
+ ---
72
+
35
73
  ## What gets created
36
74
 
37
75
  Depending on your selections, the CLI generates a project like this:
@@ -120,6 +158,28 @@ npm run dev
120
158
 
121
159
  ---
122
160
 
161
+ ## Creating the first admin
162
+
163
+ A fresh instance has no admin yet. `seamless bootstrap-admin` issues the first admin invite:
164
+
165
+ ```bash
166
+ seamless bootstrap-admin admin@example.com # active profile's instance
167
+ seamless bootstrap-admin admin@example.com --profile prod # a specific instance
168
+ seamless bootstrap-admin # prompts for the email
169
+ ```
170
+
171
+ The invited user then completes registration to receive admin access.
172
+
173
+ **Where it points.** The target instance is resolved from your active profile's `instanceUrl`
174
+ (respecting `--profile` and `SEAMLESS_PROFILE`), so you can bootstrap a remote instance you never
175
+ scaffolded locally. Set `SEAMLESS_API_URL` to override it, or — when no profile is configured — it
176
+ falls back to `http://localhost:3000` for local dev.
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).
182
+
123
183
  ## Authenticating against an instance
124
184
 
125
185
  Beyond scaffolding, the CLI can log in to a Seamless Auth instance (self-hosted, a managed
@@ -1,19 +1,26 @@
1
- import fs from "fs";
2
- import path from "path";
3
1
  import { intro, outro, text, confirm, spinner } from "@clack/prompts";
4
2
  import kleur from "kleur";
3
+ import { extractFlag } from "../core/args.js";
4
+ import { getActiveProfile } from "../core/config.js";
5
5
  import { resolveBootstrapSecret } from "../core/bootstrapSecret.js";
6
- function loadConfig() {
7
- const configPath = path.join(process.cwd(), "seamless.config.json");
8
- if (!fs.existsSync(configPath)) {
9
- throw new Error("No seamless.config.json found. Run init first.");
10
- }
11
- return JSON.parse(fs.readFileSync(configPath, "utf-8"));
6
+ const DEFAULT_API_URL = "http://localhost:3000";
7
+ // Bootstrap authenticates with the shared bootstrap secret (not a user
8
+ // session), so the profile is only used to target the right instance. The
9
+ // SEAMLESS_API_URL env override wins for backward compatibility; otherwise fall
10
+ // back to the local dev default when no profile is configured.
11
+ function resolveApiUrl(profileFlag) {
12
+ const override = process.env.SEAMLESS_API_URL?.trim();
13
+ if (override)
14
+ return override;
15
+ const profile = getActiveProfile({ profileFlag });
16
+ if (profile)
17
+ return profile.instanceUrl;
18
+ return DEFAULT_API_URL;
12
19
  }
13
- export async function runBootstrapAdmin(emailArg) {
20
+ export async function runBootstrapAdmin(args = []) {
14
21
  intro("Seamless Auth Bootstrap");
15
- const config = loadConfig();
16
- let email = emailArg;
22
+ const { value: profileFlag, rest } = extractFlag(args, "profile");
23
+ let email = rest.find((a) => !a.startsWith("-"));
17
24
  if (!email) {
18
25
  email = (await text({
19
26
  message: "Admin email address",
@@ -33,10 +40,7 @@ export async function runBootstrapAdmin(emailArg) {
33
40
  outro("Cancelled.");
34
41
  return;
35
42
  }
36
- let apiUrl = process.env.SEAMLESS_API_URL;
37
- if (!apiUrl) {
38
- apiUrl = "http://localhost:3000";
39
- }
43
+ const apiUrl = resolveApiUrl(profileFlag);
40
44
  let secret = resolveBootstrapSecret();
41
45
  if (secret) {
42
46
  console.log(kleur.gray("Using bootstrap secret from local environment"));
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapAdmin.js","sourceRoot":"","sources":["../../src/commands/bootstrapAdmin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrapAdmin.js","sourceRoot":"","sources":["../../src/commands/bootstrapAdmin.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ USAGE
11
11
 
12
12
  seamless init [project-name] [--<example>]
13
13
  seamless check
14
- seamless bootstrap-admin [email]
14
+ seamless bootstrap-admin [email] [--profile <name>]
15
15
  seamless verify [--api-only] [--filter=<flow>] [--keep-up]
16
16
  seamless profile <list|add|use|remove>
17
17
  seamless login [identifier] [--identifier <email>] [--profile <name>]
@@ -145,9 +145,13 @@ COMMANDS
145
145
  seamless-auth-server, override with SEAMLESS_SERVER_DIR) instead of the
146
146
  published npm packages — so you can catch SDK regressions before publishing.
147
147
 
148
- bootstrap-admin [email]
148
+ bootstrap-admin [email] [--profile <name>]
149
149
  Create a bootstrap admin invite
150
150
 
151
+ Targets the active profile's instance URL (override with --profile or
152
+ SEAMLESS_API_URL). Falls back to http://localhost:3000 when no profile is
153
+ configured.
154
+
151
155
  Automatically resolves bootstrap secret from:
152
156
  • .env
153
157
  • auth/.env
@@ -158,6 +162,7 @@ COMMANDS
158
162
  Examples:
159
163
  seamless bootstrap-admin
160
164
  seamless bootstrap-admin admin@example.com
165
+ seamless bootstrap-admin admin@example.com --profile prod
161
166
 
162
167
  ────────────────────────────────────────────
163
168
 
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;YACF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsNlB,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;YACF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2NlB,CAAC,CAAC;AACH,CAAC"}
@@ -1,15 +1,27 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- import { runProjectSetupPrompts } from "../prompts/projectSetup.js";
3
+ import { confirm, isCancel } from "@clack/prompts";
4
+ import kleur from "kleur";
5
+ import { runProjectSetupPrompts, runManagedTemplatePrompts, } from "../prompts/projectSetup.js";
4
6
  import { generateAuthServer } from "../generators/auth/auth.js";
5
7
  import { generateDockerCompose } from "../generators/docker/docker.js";
6
- import { printSuccessOutput } from "../core/output.js";
8
+ import { printManagedSuccessOutput, printSuccessOutput, } from "../core/output.js";
7
9
  import { generateSeamlessConfig } from "../generators/config/config.js";
8
10
  import { applyTemplateEnv, assertCliSupports, openTemplateSource, } from "../core/templates.js";
9
11
  import { runOAuthSetupPrompts } from "../prompts/oauthSetup.js";
12
+ import { createAuthClient, ReauthRequiredError, } from "../core/authClient.js";
13
+ import { normalizeInstanceUrl } from "../core/config.js";
14
+ import { parseEnv, writeEnv } from "../core/env.js";
15
+ import { generateSecret } from "../core/secrets.js";
16
+ import { listApplications, rotateServiceToken, } from "../core/portal.js";
17
+ import { selectApplication } from "../prompts/appSelect.js";
10
18
  const AUTH_SERVER_URL = "http://localhost:5312";
11
19
  const API_URL = "http://localhost:3000";
12
- export async function runCLI(projectName, aliases = []) {
20
+ // Managed auth instances resolve signing keys from the token header and do not
21
+ // expose a per-application JWKS kid, so the scaffolded backend uses the SDK's
22
+ // default. This matches the portal's own "Get connected" guidance.
23
+ const MANAGED_JWKS_KID = "dev-main";
24
+ export async function runCLI(projectName, aliases = [], opts = {}) {
13
25
  const cwd = process.cwd();
14
26
  let root = cwd;
15
27
  if (projectName) {
@@ -20,34 +32,88 @@ export async function runCLI(projectName, aliases = []) {
20
32
  fs.mkdirSync(root);
21
33
  console.log(`Creating project in ${root}`);
22
34
  }
23
- const files = fs.readdirSync(root);
24
- const isEmpty = files.length === 0;
35
+ // A logged-in profile makes the managed path the default; --local forces the
36
+ // self-hosted stack, and a missing session falls back to it automatically.
37
+ const client = opts.local ? null : await resolveManagedClient(opts.profileFlag);
38
+ const isEmpty = fs.readdirSync(root).length === 0;
25
39
  if (!isEmpty) {
26
- console.log("Existing project detected.");
27
- console.log("Integration flow coming next.");
40
+ await integrateExistingProject(root, client, opts);
28
41
  return;
29
42
  }
43
+ if (client) {
44
+ await scaffoldManaged(root, projectName, aliases, client, opts);
45
+ }
46
+ else {
47
+ await scaffoldLocal(root, projectName, aliases);
48
+ }
49
+ }
50
+ // Returns an authenticated control-plane client when a profile is logged in, or
51
+ // null when there is no session (so init drops to the local stack).
52
+ async function resolveManagedClient(profileFlag) {
53
+ try {
54
+ return await createAuthClient({ profileFlag });
55
+ }
56
+ catch (err) {
57
+ if (err instanceof ReauthRequiredError)
58
+ return null;
59
+ throw err;
60
+ }
61
+ }
62
+ async function scaffoldManaged(root, projectName, aliases, client, opts) {
30
63
  const source = await openTemplateSource();
31
64
  const preselect = resolveTemplateAliases(aliases, source.registry.templates);
32
- const answers = await runProjectSetupPrompts(source.registry.templates, preselect);
33
- const findEntry = (id) => {
34
- const entry = source.registry.templates.find((t) => t.id === id);
35
- if (!entry) {
36
- throw new Error(`Selected template "${id}" is not in the registry.`);
37
- }
38
- return entry;
65
+ const answers = await runManagedTemplatePrompts(source.registry.templates, preselect);
66
+ const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
67
+ // Resolve the target application and its service token before writing files,
68
+ // so a cancelled selection or an authorization failure leaves nothing behind.
69
+ const apps = await listApplications(client);
70
+ const app = await selectApplication(apps, opts.appId);
71
+ if (!app)
72
+ return;
73
+ const serviceToken = await issueServiceToken(client, app);
74
+ if (serviceToken === null)
75
+ return;
76
+ const authServerUrl = normalizeInstanceUrl(app.domain);
77
+ for (const { entry, dir } of selected) {
78
+ console.log(`Adding ${entry.label} starter...`);
79
+ await source.copyInto(entry, dir);
80
+ }
81
+ const ctx = {
82
+ authServerUrl,
83
+ apiUrl: API_URL,
84
+ apiToken: serviceToken,
85
+ jwksKid: MANAGED_JWKS_KID,
39
86
  };
40
- // Resolve the chosen templates (read manifests) before writing anything, so every
41
- // prompt finishes before files are placed. Env wiring waits until the shared auth
42
- // config (tokens, key id) exists below.
43
- const selected = [];
44
- for (const id of [answers.webTemplateId, answers.apiTemplateId]) {
45
- const entry = findEntry(id);
46
- const manifest = await source.readManifest(entry);
47
- assertCliSupports(manifest, entry.label);
48
- const dir = path.join(root, manifest.targetDir);
49
- selected.push({ entry, manifest, dir });
87
+ for (const { manifest, dir } of selected) {
88
+ applyTemplateEnv(dir, manifest, ctx);
50
89
  }
90
+ const webEntry = findEntry(source.registry.templates, answers.webTemplateId);
91
+ const apiEntry = findEntry(source.registry.templates, answers.apiTemplateId);
92
+ generateSeamlessConfig(root, {
93
+ projectName,
94
+ webFramework: webEntry.framework,
95
+ apiFramework: apiEntry.framework,
96
+ authMode: "managed",
97
+ adminMode: "image",
98
+ managed: {
99
+ instanceUrl: authServerUrl,
100
+ applicationId: app.id,
101
+ applicationName: app.name,
102
+ },
103
+ });
104
+ printManagedSuccessOutput({
105
+ projectName,
106
+ webFramework: webEntry.framework,
107
+ apiFramework: apiEntry.framework,
108
+ authServerUrl,
109
+ appName: app.name,
110
+ });
111
+ }
112
+ async function scaffoldLocal(root, projectName, aliases) {
113
+ const source = await openTemplateSource();
114
+ const preselect = resolveTemplateAliases(aliases, source.registry.templates);
115
+ const answers = await runProjectSetupPrompts(source.registry.templates, preselect);
116
+ const selected = await resolveSelectedTemplates(source, answers.webTemplateId, answers.apiTemplateId, root);
51
117
  // Templates can opt into OAuth setup (manifest setup.oauth). Collect providers now,
52
118
  // before scaffolding, so the auth server can be wired up with them below.
53
119
  const webSelection = selected.find((s) => s.entry.kind === "web");
@@ -83,8 +149,8 @@ export async function runCLI(projectName, aliases = []) {
83
149
  for (const { manifest, dir } of selected) {
84
150
  applyTemplateEnv(dir, manifest, ctx);
85
151
  }
86
- const webEntry = findEntry(answers.webTemplateId);
87
- const apiEntry = findEntry(answers.apiTemplateId);
152
+ const webEntry = findEntry(source.registry.templates, answers.webTemplateId);
153
+ const apiEntry = findEntry(source.registry.templates, answers.apiTemplateId);
88
154
  generateSeamlessConfig(root, {
89
155
  projectName,
90
156
  webFramework: webEntry.framework,
@@ -102,6 +168,96 @@ export async function runCLI(projectName, aliases = []) {
102
168
  });
103
169
  printOAuthNextSteps(oauthProviders);
104
170
  }
171
+ // Existing-project integration: wire the managed credentials into an already
172
+ // scaffolded repo without re-generating source. Kept intentionally small, it
173
+ // updates api/.env when an api directory exists and otherwise prints the values
174
+ // to paste in by hand.
175
+ async function integrateExistingProject(root, client, opts) {
176
+ if (!client) {
177
+ console.log("Existing project detected.");
178
+ console.log("Log in first to connect it to a managed instance: " +
179
+ kleur.cyan("seamless login") +
180
+ ".");
181
+ console.log(kleur.dim("Run init in an empty directory to scaffold a new local project."));
182
+ return;
183
+ }
184
+ const apps = await listApplications(client);
185
+ const app = await selectApplication(apps, opts.appId);
186
+ if (!app)
187
+ return;
188
+ const serviceToken = await issueServiceToken(client, app);
189
+ if (serviceToken === null)
190
+ return;
191
+ const authServerUrl = normalizeInstanceUrl(app.domain);
192
+ const apiDir = path.join(root, "api");
193
+ if (fs.existsSync(apiDir)) {
194
+ wireApiEnv(apiDir, authServerUrl, serviceToken);
195
+ console.log(kleur.green(`Updated ${path.join("api", ".env")}.`));
196
+ console.log(kleur.dim(" Set your web app's auth server URL to: ") +
197
+ kleur.cyan(authServerUrl));
198
+ }
199
+ else {
200
+ printManagedValues(authServerUrl, serviceToken);
201
+ }
202
+ }
203
+ // Merges the managed auth values into an existing api/.env, preserving any keys
204
+ // already there and keeping (or generating) a cookie signing key.
205
+ function wireApiEnv(apiDir, authServerUrl, serviceToken) {
206
+ const envPath = path.join(apiDir, ".env");
207
+ const values = fs.existsSync(envPath) ? parseEnv(envPath) : {};
208
+ values.AUTH_SERVER_URL = authServerUrl;
209
+ values.API_SERVICE_TOKEN = serviceToken;
210
+ values.JWKS_KID = values.JWKS_KID || MANAGED_JWKS_KID;
211
+ values.COOKIE_SIGNING_KEY =
212
+ values.COOKIE_SIGNING_KEY || generateSecret(32);
213
+ fs.mkdirSync(apiDir, { recursive: true });
214
+ writeEnv(envPath, values);
215
+ }
216
+ function printManagedValues(authServerUrl, serviceToken) {
217
+ console.log(kleur.green("\nManaged connection values:\n"));
218
+ console.log(kleur.dim(" AUTH_SERVER_URL ") + authServerUrl);
219
+ console.log(kleur.dim(" API_SERVICE_TOKEN ") + serviceToken);
220
+ console.log(kleur.dim(" JWKS_KID ") + MANAGED_JWKS_KID);
221
+ console.log(kleur.yellow("\nCopy the service token now. The control plane will not show it again."));
222
+ console.log(kleur.dim("Set AUTH_SERVER_URL and API_SERVICE_TOKEN on your backend, and the auth"));
223
+ console.log(kleur.dim("server URL on your frontend, then sign in to verify.\n"));
224
+ }
225
+ // Issues the app's service token, confirming first when one already exists so a
226
+ // scaffold does not silently break an app that is already deployed. Returns null
227
+ // only when the developer declines the rotation.
228
+ async function issueServiceToken(client, app) {
229
+ if (app.hasServiceToken) {
230
+ const proceed = await confirm({
231
+ message: `"${app.name}" already has a service token. Issuing a new one invalidates the existing token. Continue?`,
232
+ initialValue: false,
233
+ });
234
+ if (isCancel(proceed) || !proceed) {
235
+ console.log("Cancelled. No token was issued.");
236
+ return null;
237
+ }
238
+ }
239
+ return rotateServiceToken(client, app.id);
240
+ }
241
+ // Resolves the chosen templates (reading their manifests and asserting CLI
242
+ // support) before any files are written, so every prompt finishes first.
243
+ async function resolveSelectedTemplates(source, webTemplateId, apiTemplateId, root) {
244
+ const selected = [];
245
+ for (const id of [webTemplateId, apiTemplateId]) {
246
+ const entry = findEntry(source.registry.templates, id);
247
+ const manifest = await source.readManifest(entry);
248
+ assertCliSupports(manifest, entry.label);
249
+ const dir = path.join(root, manifest.targetDir);
250
+ selected.push({ entry, manifest, dir });
251
+ }
252
+ return selected;
253
+ }
254
+ function findEntry(templates, id) {
255
+ const entry = templates.find((t) => t.id === id);
256
+ if (!entry) {
257
+ throw new Error(`Selected template "${id}" is not in the registry.`);
258
+ }
259
+ return entry;
260
+ }
105
261
  // Summarizes the OAuth wiring after scaffolding: which providers are ready and which
106
262
  // still need credentials, plus the redirect URI to register with each provider.
107
263
  function printOAuthNextSteps(providers) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,5 @@ export const SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE = `ghcr.io/fells-code/seamless-
7
7
  // CLI version always produces the same project. Override the ref with
8
8
  // SEAMLESS_TEMPLATES_REF, or point at a local checkout with SEAMLESS_TEMPLATES_DIR.
9
9
  export const SEAMLESS_TEMPLATES_REPO = "fells-code/seamless-templates";
10
- export const SEAMLESS_TEMPLATES_REF = "v0.2.3";
10
+ export const SEAMLESS_TEMPLATES_REF = "v0.2.4";
11
11
  //# sourceMappingURL=images.js.map
@@ -79,6 +79,52 @@ export function printSuccessOutput(config) {
79
79
  console.log(kleur.dim("Docs: ") + kleur.cyan("https://docs.seamlessauth.com\n"));
80
80
  console.log(kleur.bold().green("Setup complete.\n"));
81
81
  }
82
+ export function printManagedSuccessOutput(config) {
83
+ const { projectName, webFramework, apiFramework, authServerUrl, appName } = config;
84
+ const title = kleur.bold().cyan("SEAMLESS");
85
+ console.log(`
86
+ ╔════════════════════════════════════════╗
87
+ ║ ${title} ║
88
+ ╚════════════════════════════════════════╝
89
+ `);
90
+ console.log(kleur.green("Project connected to a managed instance.\n"));
91
+ console.log(kleur.dim("Managed application: ") + kleur.bold(appName));
92
+ console.log(kleur.dim("Auth server: ") + kleur.cyan(authServerUrl));
93
+ console.log("");
94
+ if (projectName) {
95
+ console.log(kleur.dim("Project directory: ") + kleur.bold(projectName));
96
+ console.log(kleur.cyan(`cd ${projectName}\n`));
97
+ }
98
+ console.log(kleur.bold("Included services:\n"));
99
+ if (webFramework) {
100
+ console.log(" • " +
101
+ kleur.white("Web application") +
102
+ kleur.dim(` (${formatFramework(webFramework)})`));
103
+ }
104
+ if (apiFramework) {
105
+ console.log(" • " +
106
+ kleur.white("API server") +
107
+ kleur.dim(` (${formatFramework(apiFramework)})`));
108
+ }
109
+ console.log(" • " + kleur.white("Auth server") + kleur.dim(" (managed instance)"));
110
+ console.log("");
111
+ console.log(kleur.bold("Next steps:\n"));
112
+ if (apiFramework) {
113
+ console.log(kleur.dim(" # API server"));
114
+ console.log(" cd api && npm install && npm run dev\n");
115
+ }
116
+ if (webFramework) {
117
+ console.log(kleur.dim(" # Web app"));
118
+ console.log(" cd web && npm install && npm run dev\n");
119
+ }
120
+ console.log(" Sign in from the web app to confirm the session resolves.\n");
121
+ console.log(kleur.bold("Notes:\n"));
122
+ console.log(kleur.dim(" • The API service token was written to api/.env. Keep it out of version control."));
123
+ console.log(kleur.dim(" • Auth, users, and OAuth providers are managed from the dashboard, not locally."));
124
+ console.log(kleur.dim(" • Rotate the service token anytime with the dashboard.\n"));
125
+ console.log(kleur.dim("Docs: ") + kleur.cyan("https://docs.seamlessauth.com\n"));
126
+ console.log(kleur.bold().green("Setup complete.\n"));
127
+ }
82
128
  function formatFramework(name) {
83
129
  const map = {
84
130
  react: "React",
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { joinUrl } from "./http.js";
2
+ // The managed control plane (seamless-portal-api). It is fronted by the same
3
+ // Seamless Auth server a developer logs into, so the CLI reuses the active
4
+ // profile's keychain session (Bearer) to call it. Override the host for staging
5
+ // or local portal development with SEAMLESS_PORTAL_API_URL.
6
+ export const DEFAULT_PORTAL_API_URL = "https://api.seamlessauth.com";
7
+ export function getPortalApiUrl() {
8
+ const override = process.env.SEAMLESS_PORTAL_API_URL?.trim();
9
+ const base = override || DEFAULT_PORTAL_API_URL;
10
+ return base.replace(/\/+$/, "");
11
+ }
12
+ export class PortalError extends Error {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = "PortalError";
16
+ }
17
+ }
18
+ function str(raw, key) {
19
+ const value = raw[key];
20
+ return typeof value === "string" && value ? value : undefined;
21
+ }
22
+ function toApp(raw) {
23
+ const id = str(raw, "id");
24
+ const domain = str(raw, "domain");
25
+ if (!id || !domain)
26
+ return null;
27
+ return {
28
+ id,
29
+ name: str(raw, "name") ?? id,
30
+ domain,
31
+ infraId: str(raw, "infraId"),
32
+ frontendUrl: str(raw, "frontendUrl"),
33
+ servicePlan: str(raw, "servicePlan"),
34
+ status: str(raw, "status"),
35
+ hasServiceToken: raw.serviceTokenMetadata != null,
36
+ };
37
+ }
38
+ function unauthorized(action) {
39
+ return new PortalError(`Your managed session is not authorized to ${action}. Run: seamless login.`);
40
+ }
41
+ export async function listApplications(client) {
42
+ const url = joinUrl(getPortalApiUrl(), "/applications");
43
+ const res = await client.get(url);
44
+ if (res.status === 401 || res.status === 403) {
45
+ throw unauthorized("read your applications");
46
+ }
47
+ if (!res.ok) {
48
+ throw new PortalError(`Could not list managed applications (${res.status}).`);
49
+ }
50
+ const list = Array.isArray(res.data?.applications) ? res.data.applications : [];
51
+ return list
52
+ .filter((a) => !!a && typeof a === "object")
53
+ .map(toApp)
54
+ .filter((a) => a !== null);
55
+ }
56
+ // Issues (rotates) the application's service token. The control plane only ever
57
+ // returns a raw token at rotation time (it is stored write-once), so this is the
58
+ // real credential flow: the token the auth instance already recognizes for this
59
+ // app, not a locally minted secret.
60
+ export async function rotateServiceToken(client, appId) {
61
+ const url = joinUrl(getPortalApiUrl(), `/applications/${encodeURIComponent(appId)}/rotateServiceToken`);
62
+ const res = await client.post(url);
63
+ if (res.status === 401 || res.status === 403) {
64
+ throw unauthorized("issue a service token");
65
+ }
66
+ if (res.status === 404) {
67
+ throw new PortalError(`Managed application "${appId}" was not found.`);
68
+ }
69
+ if (!res.ok || !res.data?.serviceToken) {
70
+ throw new PortalError(`Could not issue a service token (${res.status}).`);
71
+ }
72
+ return res.data.serviceToken;
73
+ }
74
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/core/portal.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,32 @@ import path from "path";
3
3
  import { VERSION } from "../../index.js";
4
4
  import { SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE, SEAMLESS_AUTH_API_IMAGE, } from "../../core/images.js";
5
5
  export function generateSeamlessConfig(root, options) {
6
+ const managed = options.authMode === "managed";
7
+ const auth = managed
8
+ ? {
9
+ mode: "managed",
10
+ instanceUrl: options.managed?.instanceUrl ?? null,
11
+ applicationId: options.managed?.applicationId ?? null,
12
+ applicationName: options.managed?.applicationName ?? null,
13
+ image: null,
14
+ path: null,
15
+ }
16
+ : {
17
+ mode: options.authMode,
18
+ image: options.authMode === "docker" ? SEAMLESS_AUTH_API_IMAGE : null,
19
+ path: options.authMode === "local" ? "./auth" : null,
20
+ };
21
+ // A managed instance hosts its own admin dashboard, so no admin service is
22
+ // scaffolded locally.
23
+ const admin = managed
24
+ ? { mode: "hosted", image: null, path: null }
25
+ : {
26
+ mode: options.adminMode,
27
+ image: options.adminMode === "image"
28
+ ? SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE
29
+ : null,
30
+ path: options.adminMode === "source" ? "./admin" : null,
31
+ };
6
32
  const config = {
7
33
  version: VERSION,
8
34
  projectName: options.projectName || path.basename(root),
@@ -16,25 +42,14 @@ export function generateSeamlessConfig(root, options) {
16
42
  framework: options.apiFramework,
17
43
  path: "./api",
18
44
  },
19
- auth: {
20
- mode: options.authMode,
21
- image: options.authMode === "docker" ? SEAMLESS_AUTH_API_IMAGE : null,
22
- path: options.authMode === "local" ? "./auth" : null,
23
- },
24
- admin: {
25
- mode: options.adminMode,
26
- image: options.adminMode === "image"
27
- ? SEAMLESS_AUTH_ADMIN_DASHBOARD_IMAGE
28
- : null,
29
- path: options.adminMode === "source" ? "./admin" : null,
30
- },
45
+ auth,
46
+ admin,
31
47
  database: {
32
48
  type: "postgres",
33
49
  },
34
50
  },
35
- docker: {
36
- composeFile: "docker-compose.yml",
37
- },
51
+ // Managed projects have no local compose file; the auth stack runs remotely.
52
+ docker: managed ? null : { composeFile: "docker-compose.yml" },
38
53
  };
39
54
  fs.writeFileSync(path.join(root, "seamless.config.json"), JSON.stringify(config, null, 2));
40
55
  console.log("Seamless config created.");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/generators/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,mCAAmC,EACnC,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAMC;IAED,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAEnC,QAAQ,EAAE;YACR,GAAG,EAAE;gBACH,SAAS,EAAE,OAAO,CAAC,YAAY;gBAC/B,IAAI,EAAE,OAAO;aACd;YACD,GAAG,EAAE;gBACH,SAAS,EAAE,OAAO,CAAC,YAAY;gBAC/B,IAAI,EAAE,OAAO;aACd;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI;gBACrE,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;aACrD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,KAAK,EACH,OAAO,CAAC,SAAS,KAAK,OAAO;oBAC3B,CAAC,CAAC,mCAAmC;oBACrC,CAAC,CAAC,IAAI;gBACV,IAAI,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;aACxD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,UAAU;aACjB;SACF;QAED,MAAM,EAAE;YACN,WAAW,EAAE,oBAAoB;SAClC;KACF,CAAC;IAEF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/generators/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,mCAAmC,EACnC,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAOC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;IAE/C,MAAM,IAAI,GAAG,OAAO;QAClB,CAAC,CAAC;YACE,IAAI,EAAE,SAAkB;YACxB,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI;YACjD,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,IAAI,IAAI;YACrD,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI;YACzD,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;SACX;QACH,CAAC,CAAC;YACE,IAAI,EAAE,OAAO,CAAC,QAAQ;YACtB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI;YACrE,IAAI,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;SACrD,CAAC;IAEN,2EAA2E;IAC3E,sBAAsB;IACtB,MAAM,KAAK,GAAG,OAAO;QACnB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QACtD,CAAC,CAAC;YACE,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,KAAK,EACH,OAAO,CAAC,SAAS,KAAK,OAAO;gBAC3B,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;SACxD,CAAC;IAEN,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAEnC,QAAQ,EAAE;YACR,GAAG,EAAE;gBACH,SAAS,EAAE,OAAO,CAAC,YAAY;gBAC/B,IAAI,EAAE,OAAO;aACd;YACD,GAAG,EAAE;gBACH,SAAS,EAAE,OAAO,CAAC,YAAY;gBAC/B,IAAI,EAAE,OAAO;aACd;YACD,IAAI;YACJ,KAAK;YACL,QAAQ,EAAE;gBACR,IAAI,EAAE,UAAU;aACjB;SACF;QAED,6EAA6E;QAC7E,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE;KAC/D,CAAC;IAEF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,EACvC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAChC,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { runCLI } from "./commands/init.js";
3
+ import { extractFlag } from "./core/args.js";
3
4
  import { runCheck } from "./commands/check.js";
4
5
  import { printHelp } from "./commands/help.js";
5
6
  import pkg from "../package.json" with { type: "json" };
@@ -30,12 +31,19 @@ async function main() {
30
31
  return;
31
32
  }
32
33
  if (command === "init") {
33
- const rest = args.slice(1);
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");
34
38
  const aliases = rest
35
- .filter((a) => a.startsWith("--"))
39
+ .filter((a) => a.startsWith("--") && a !== "--local")
36
40
  .map((a) => a.replace(/^--+/, ""));
37
41
  const projectName = rest.find((a) => !a.startsWith("--"));
38
- await runCLI(projectName, aliases);
42
+ await runCLI(projectName, aliases, {
43
+ profileFlag: profileFlag.value,
44
+ appId: appFlag.value,
45
+ local,
46
+ });
39
47
  return;
40
48
  }
41
49
  if (command === "check") {
@@ -43,8 +51,7 @@ async function main() {
43
51
  return;
44
52
  }
45
53
  if (command === "bootstrap-admin") {
46
- const email = args[1];
47
- await runBootstrapAdmin(email);
54
+ await runBootstrapAdmin(args.slice(1));
48
55
  return;
49
56
  }
50
57
  if (command === "verify") {
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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"}
@@ -0,0 +1,41 @@
1
+ import { select, isCancel, cancel } from "@clack/prompts";
2
+ export class NoApplicationsError extends Error {
3
+ constructor() {
4
+ super("No managed applications are available for this account. Create one at https://dashboard.seamlessauth.com, then run init again.");
5
+ this.name = "NoApplicationsError";
6
+ }
7
+ }
8
+ // Resolves which managed application the scaffold connects to. `--app` matches an
9
+ // id or infra id; a single application is auto-selected; otherwise the developer
10
+ // picks. Returns null only when an interactive selection is cancelled.
11
+ export async function selectApplication(apps, preselectId) {
12
+ if (apps.length === 0) {
13
+ throw new NoApplicationsError();
14
+ }
15
+ if (preselectId) {
16
+ const found = apps.find((a) => a.id === preselectId || a.infraId === preselectId);
17
+ if (!found) {
18
+ const available = apps.map((a) => a.id).join(", ");
19
+ throw new Error(`No managed application matches --app "${preselectId}". Available: ${available}.`);
20
+ }
21
+ return found;
22
+ }
23
+ if (apps.length === 1) {
24
+ console.log(`Managed application: ${apps[0].name} (${apps[0].domain})`);
25
+ return apps[0];
26
+ }
27
+ const choice = await select({
28
+ message: "Which managed application should this project connect to?",
29
+ options: apps.map((a) => ({
30
+ value: a.id,
31
+ label: a.name,
32
+ hint: a.domain,
33
+ })),
34
+ });
35
+ if (isCancel(choice)) {
36
+ cancel("Cancelled.");
37
+ return null;
38
+ }
39
+ return apps.find((a) => a.id === choice) ?? null;
40
+ }
41
+ //# sourceMappingURL=appSelect.js.map
@@ -0,0 +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"}
@@ -20,6 +20,32 @@ function toOptions(templates, kind) {
20
20
  function labelFor(templates, id) {
21
21
  return templates.find((t) => t.id === id)?.label ?? id;
22
22
  }
23
+ // Managed connect only needs the web and api templates: the auth server is the
24
+ // developer's managed instance, so the auth-mode, Docker, and admin-dashboard
25
+ // questions (all local-stack concerns) do not apply.
26
+ export async function runManagedTemplatePrompts(templates, preselect = {}) {
27
+ let webTemplateId = preselect.webTemplateId;
28
+ if (webTemplateId) {
29
+ console.log(`Web example: ${labelFor(templates, webTemplateId)}`);
30
+ }
31
+ else {
32
+ webTemplateId = (await select({
33
+ message: "Web example",
34
+ options: toOptions(templates, "web"),
35
+ }));
36
+ }
37
+ let apiTemplateId = preselect.apiTemplateId;
38
+ if (apiTemplateId) {
39
+ console.log(`Backend: ${labelFor(templates, apiTemplateId)}`);
40
+ }
41
+ else {
42
+ apiTemplateId = (await select({
43
+ message: "Backend framework",
44
+ options: toOptions(templates, "api"),
45
+ }));
46
+ }
47
+ return { webTemplateId, apiTemplateId };
48
+ }
23
49
  export async function runProjectSetupPrompts(templates, preselect = {}) {
24
50
  let webTemplateId = preselect.webTemplateId;
25
51
  if (webTemplateId) {
@@ -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.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "The Seamless Auth command-line interface",
5
5
  "homepage": "https://github.com/fells-code/seamless-cli#readme",
6
6
  "bugs": {
@@ -24,6 +24,9 @@
24
24
  "dev": "tsx src/index.ts",
25
25
  "clean": "rm -rf dist",
26
26
  "test": "vitest run",
27
+ "coverage": "vitest run --coverage --fileParallelism=false",
28
+ "coverage:badge": "node ./scripts/updateCoverageBadge.mjs",
29
+ "prepare": "husky",
27
30
  "changeset": "changeset",
28
31
  "version-packages": "changeset version",
29
32
  "release:stable": "npm run build && changeset publish",
@@ -47,6 +50,8 @@
47
50
  "@changesets/cli": "^2.31.0",
48
51
  "@types/adm-zip": "^0.5.7",
49
52
  "@types/node": "^24.10.13",
53
+ "@vitest/coverage-v8": "^3.2.7",
54
+ "husky": "^9.1.7",
50
55
  "tsx": "^4.21.0",
51
56
  "typescript": "^5.9.3",
52
57
  "vitest": "^3.2.7"