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 +60 -0
- package/dist/commands/bootstrapAdmin.js +19 -15
- package/dist/commands/bootstrapAdmin.js.map +1 -1
- package/dist/commands/help.js +7 -2
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/init.js +182 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/core/images.js +1 -1
- package/dist/core/output.js +46 -0
- package/dist/core/output.js.map +1 -1
- package/dist/core/portal.js +74 -0
- package/dist/core/portal.js.map +1 -0
- package/dist/generators/config/config.js +30 -15
- package/dist/generators/config/config.js.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/prompts/appSelect.js +41 -0
- package/dist/prompts/appSelect.js.map +1 -0
- package/dist/prompts/projectSetup.js +26 -0
- package/dist/prompts/projectSetup.js.map +1 -1
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](LICENSE)
|
|
4
4
|
[](https://www.npmjs.com/package/seamless-cli)
|
|
5
|
+

|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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(
|
|
20
|
+
export async function runBootstrapAdmin(args = []) {
|
|
14
21
|
intro("Seamless Auth Bootstrap");
|
|
15
|
-
const
|
|
16
|
-
let email =
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bootstrapAdmin.js","sourceRoot":"","sources":["../../src/commands/bootstrapAdmin.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/help.js
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import fs from "fs";
|
|
3
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
41
|
-
|
|
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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"}
|
package/dist/core/images.js
CHANGED
|
@@ -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.
|
|
10
|
+
export const SEAMLESS_TEMPLATES_REF = "v0.2.4";
|
|
11
11
|
//# sourceMappingURL=images.js.map
|
package/dist/core/output.js
CHANGED
|
@@ -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",
|
package/dist/core/output.js.map
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
36
|
-
|
|
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;
|
|
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
|
|
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
|
-
|
|
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":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC7C,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
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.
|
|
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"
|