seamless-cli 0.5.2 → 0.7.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 (59) hide show
  1. package/README.md +171 -0
  2. package/dist/commands/adminShared.js +23 -0
  3. package/dist/commands/adminShared.js.map +1 -0
  4. package/dist/commands/config.js +187 -0
  5. package/dist/commands/config.js.map +1 -0
  6. package/dist/commands/help.js +98 -0
  7. package/dist/commands/help.js.map +1 -1
  8. package/dist/commands/init.js +182 -26
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/login.js +86 -0
  11. package/dist/commands/login.js.map +1 -0
  12. package/dist/commands/logout.js +43 -0
  13. package/dist/commands/logout.js.map +1 -0
  14. package/dist/commands/org.js +249 -0
  15. package/dist/commands/org.js.map +1 -0
  16. package/dist/commands/profile.js +150 -0
  17. package/dist/commands/profile.js.map +1 -0
  18. package/dist/commands/sessions.js +112 -0
  19. package/dist/commands/sessions.js.map +1 -0
  20. package/dist/commands/users.js +147 -0
  21. package/dist/commands/users.js.map +1 -0
  22. package/dist/commands/verify.js +133 -9
  23. package/dist/commands/verify.js.map +1 -1
  24. package/dist/commands/whoami.js +29 -0
  25. package/dist/commands/whoami.js.map +1 -0
  26. package/dist/core/admin.js +142 -0
  27. package/dist/core/admin.js.map +1 -0
  28. package/dist/core/args.js +19 -0
  29. package/dist/core/args.js.map +1 -0
  30. package/dist/core/authClient.js +113 -0
  31. package/dist/core/authClient.js.map +1 -0
  32. package/dist/core/config.js +146 -0
  33. package/dist/core/config.js.map +1 -0
  34. package/dist/core/http.js +34 -0
  35. package/dist/core/http.js.map +1 -0
  36. package/dist/core/images.js +1 -1
  37. package/dist/core/keychain.js +112 -0
  38. package/dist/core/keychain.js.map +1 -0
  39. package/dist/core/loginFlow.js +143 -0
  40. package/dist/core/loginFlow.js.map +1 -0
  41. package/dist/core/output.js +46 -0
  42. package/dist/core/output.js.map +1 -1
  43. package/dist/core/portal.js +74 -0
  44. package/dist/core/portal.js.map +1 -0
  45. package/dist/core/session.js +30 -0
  46. package/dist/core/session.js.map +1 -0
  47. package/dist/core/sessions.js +41 -0
  48. package/dist/core/sessions.js.map +1 -0
  49. package/dist/core/systemConfig.js +125 -0
  50. package/dist/core/systemConfig.js.map +1 -0
  51. package/dist/generators/config/config.js +30 -15
  52. package/dist/generators/config/config.js.map +1 -1
  53. package/dist/index.js +51 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/prompts/appSelect.js +41 -0
  56. package/dist/prompts/appSelect.js.map +1 -0
  57. package/dist/prompts/projectSetup.js +26 -0
  58. package/dist/prompts/projectSetup.js.map +1 -1
  59. package/package.json +13 -2
@@ -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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"}
@@ -0,0 +1,86 @@
1
+ import { intro, outro, text, isCancel, cancel } from "@clack/prompts";
2
+ import kleur from "kleur";
3
+ import { extractFlag } from "../core/args.js";
4
+ import { getActiveProfile, upsertProfile } from "../core/config.js";
5
+ import { KeychainUnavailableError, saveTokens } from "../core/keychain.js";
6
+ import { completeLogin, LoginError } from "../core/loginFlow.js";
7
+ export async function runLogin(args) {
8
+ const profileFlag = extractFlag(args, "profile");
9
+ const idFlag = extractFlag(profileFlag.rest, "identifier");
10
+ const profile = getActiveProfile({ profileFlag: profileFlag.value });
11
+ if (!profile) {
12
+ console.error(kleur.red("No active profile is configured."));
13
+ console.log("Add one with: " +
14
+ kleur.cyan("seamless profile add <name> --instance-url <url>"));
15
+ process.exit(1);
16
+ }
17
+ intro(`Log in to ${kleur.bold(profile.name)} (${profile.instanceUrl})`);
18
+ let identifier = (idFlag.value ?? idFlag.rest[0])?.trim();
19
+ if (!identifier) {
20
+ const answer = await text({
21
+ message: "Email or phone",
22
+ placeholder: profile.email ?? "you@example.com",
23
+ initialValue: profile.email ?? "",
24
+ validate: (value) => value && value.trim() ? undefined : "An identifier is required",
25
+ });
26
+ if (isCancel(answer)) {
27
+ cancel("Cancelled.");
28
+ return;
29
+ }
30
+ identifier = answer.trim();
31
+ }
32
+ try {
33
+ const result = await completeLogin({
34
+ instanceUrl: profile.instanceUrl,
35
+ identifier,
36
+ getCode: async ({ resent }) => {
37
+ const answer = await text({
38
+ message: resent ? "Enter the new code" : "Enter the code we sent you",
39
+ placeholder: "123456",
40
+ validate: (value) => /^\d{4,8}$/.test((value ?? "").trim())
41
+ ? undefined
42
+ : "Enter the numeric code from the message",
43
+ });
44
+ if (isCancel(answer))
45
+ return null;
46
+ return answer.trim();
47
+ },
48
+ notify: (event) => {
49
+ switch (event.type) {
50
+ case "code_sent":
51
+ console.log(kleur.dim(`A code was sent to ${identifier}.`));
52
+ break;
53
+ case "code_resent":
54
+ console.log(kleur.dim("Your previous code expired, so we sent a new one."));
55
+ break;
56
+ case "incorrect":
57
+ console.log(kleur.yellow(`That code was not accepted. ${event.attemptsLeft} attempt${event.attemptsLeft === 1 ? "" : "s"} left.`));
58
+ break;
59
+ }
60
+ },
61
+ });
62
+ if (!result) {
63
+ cancel("Cancelled.");
64
+ return;
65
+ }
66
+ await persistSession(profile, result);
67
+ outro(kleur.green(`Logged in as ${result.identity.email ?? identifier}.`));
68
+ }
69
+ catch (err) {
70
+ if (err instanceof LoginError || err instanceof KeychainUnavailableError) {
71
+ outro(kleur.red(err.message));
72
+ process.exit(1);
73
+ }
74
+ throw err;
75
+ }
76
+ }
77
+ async function persistSession(profile, result) {
78
+ await saveTokens(profile, result.tokens);
79
+ upsertProfile({
80
+ ...profile,
81
+ sub: result.identity.sub ?? profile.sub,
82
+ email: result.identity.email ?? profile.email,
83
+ identifierType: result.identity.identifierType,
84
+ });
85
+ }
86
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAoB,MAAM,sBAAsB,CAAC;AAEnF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CACT,gBAAgB;YACd,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CACjE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;IAExE,IAAI,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,OAAO,CAAC,KAAK,IAAI,iBAAiB;YAC/C,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B;SAClE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,UAAU,GAAI,MAAiB,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU;YACV,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;oBACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,4BAA4B;oBACrE,WAAW,EAAE,QAAQ;oBACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;wBACpC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,yCAAyC;iBAChD,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,MAAM,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAClC,OAAQ,MAAiB,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,WAAW;wBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,GAAG,CAAC,CAAC,CAAC;wBAC5D,MAAM;oBACR,KAAK,aAAa;wBAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAC/D,CAAC;wBACF,MAAM;oBACR,KAAK,WAAW;wBACd,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+BAA+B,KAAK,CAAC,YAAY,WAC/C,KAAK,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAClC,QAAQ,CACT,CACF,CAAC;wBACF,MAAM;gBACV,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,YAAY,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;YACzE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAgB,EAChB,MAAmB;IAEnB,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,aAAa,CAAC;QACZ,GAAG,OAAO;QACV,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;QAC7C,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc;KAC/C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ import kleur from "kleur";
2
+ import { extractFlag } from "../core/args.js";
3
+ import { createAuthClient, ReauthRequiredError } from "../core/authClient.js";
4
+ import { getActiveProfile } from "../core/config.js";
5
+ import { clearLocalSession, revokeSession } from "../core/session.js";
6
+ export async function runLogout(args) {
7
+ const all = args.includes("--all");
8
+ const { value: profileFlag } = extractFlag(args.filter((a) => a !== "--all"), "profile");
9
+ const profile = getActiveProfile({ profileFlag });
10
+ if (!profile) {
11
+ console.log(kleur.yellow("No active profile. Nothing to log out of."));
12
+ return;
13
+ }
14
+ let client;
15
+ try {
16
+ client = await createAuthClient({ profileFlag });
17
+ }
18
+ catch (err) {
19
+ if (err instanceof ReauthRequiredError) {
20
+ await clearLocalSession(profile);
21
+ console.log(kleur.green("You are already logged out."));
22
+ return;
23
+ }
24
+ throw err;
25
+ }
26
+ let revoked = false;
27
+ try {
28
+ revoked = await revokeSession(client, { all });
29
+ }
30
+ catch (err) {
31
+ if (!(err instanceof ReauthRequiredError))
32
+ throw err;
33
+ revoked = true;
34
+ }
35
+ await clearLocalSession(profile);
36
+ if (revoked) {
37
+ console.log(kleur.green(all ? "Logged out of all sessions." : "Logged out."));
38
+ }
39
+ else {
40
+ console.log(kleur.yellow("Cleared the local session. The instance reported a problem revoking the session."));
41
+ }
42
+ }
43
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,CACxC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,EACjC,SAAS,CACV,CAAC;IAEF,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;YACvC,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,mBAAmB,CAAC;YAAE,MAAM,GAAG,CAAC;QACrD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,aAAa,CAAC,CACjE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,kFAAkF,CACnF,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}