terse-cli 0.1.51 → 0.1.53

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 (110) hide show
  1. package/dist/api.js +2 -2
  2. package/dist/api.js.map +1 -1
  3. package/dist/commands/attach.d.ts.map +1 -1
  4. package/dist/commands/attach.js +33 -8
  5. package/dist/commands/attach.js.map +1 -1
  6. package/dist/commands/auth.d.ts.map +1 -1
  7. package/dist/commands/auth.js +175 -30
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/authOrg.d.ts +12 -0
  10. package/dist/commands/authOrg.d.ts.map +1 -0
  11. package/dist/commands/authOrg.js +120 -0
  12. package/dist/commands/authOrg.js.map +1 -0
  13. package/dist/commands/authStatus.d.ts +2 -0
  14. package/dist/commands/authStatus.d.ts.map +1 -0
  15. package/dist/commands/authStatus.js +27 -0
  16. package/dist/commands/authStatus.js.map +1 -0
  17. package/dist/commands/deploy.js +1 -1
  18. package/dist/commands/deploy.js.map +1 -1
  19. package/dist/commands/deployTheme.d.ts +28 -0
  20. package/dist/commands/deployTheme.d.ts.map +1 -0
  21. package/dist/commands/deployTheme.js +68 -0
  22. package/dist/commands/deployTheme.js.map +1 -0
  23. package/dist/commands/dev.d.ts +3 -0
  24. package/dist/commands/dev.d.ts.map +1 -0
  25. package/dist/commands/dev.js +47 -0
  26. package/dist/commands/dev.js.map +1 -0
  27. package/dist/commands/generate.d.ts +3 -1
  28. package/dist/commands/generate.d.ts.map +1 -1
  29. package/dist/commands/generate.js +7 -6
  30. package/dist/commands/generate.js.map +1 -1
  31. package/dist/commands/init.js +1 -1
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/commands/integrate.d.ts +2 -0
  34. package/dist/commands/integrate.d.ts.map +1 -1
  35. package/dist/commands/integrate.js +5 -5
  36. package/dist/commands/integrate.js.map +1 -1
  37. package/dist/commands/listen.js +2 -2
  38. package/dist/commands/listen.js.map +1 -1
  39. package/dist/commands/run.js +1 -1
  40. package/dist/commands/run.js.map +1 -1
  41. package/dist/commands/secrets.d.ts +15 -0
  42. package/dist/commands/secrets.d.ts.map +1 -0
  43. package/dist/commands/secrets.js +181 -0
  44. package/dist/commands/secrets.js.map +1 -0
  45. package/dist/commands/serve.d.ts +1 -0
  46. package/dist/commands/serve.d.ts.map +1 -0
  47. package/dist/commands/serve.js +2 -0
  48. package/dist/commands/serve.js.map +1 -0
  49. package/dist/commands/terseCliTheme.d.ts +28 -0
  50. package/dist/commands/terseCliTheme.d.ts.map +1 -0
  51. package/dist/commands/terseCliTheme.js +68 -0
  52. package/dist/commands/terseCliTheme.js.map +1 -0
  53. package/dist/commands/test.js +1 -1
  54. package/dist/commands/test.js.map +1 -1
  55. package/dist/dotenv.d.ts +2 -0
  56. package/dist/dotenv.d.ts.map +1 -0
  57. package/dist/dotenv.js +14 -0
  58. package/dist/dotenv.js.map +1 -0
  59. package/dist/index.js +28 -5
  60. package/dist/index.js.map +1 -1
  61. package/dist/nonInteractive.d.ts +4 -2
  62. package/dist/nonInteractive.d.ts.map +1 -1
  63. package/dist/nonInteractive.js +5 -2
  64. package/dist/nonInteractive.js.map +1 -1
  65. package/dist/perf.d.ts +9 -0
  66. package/dist/perf.d.ts.map +1 -0
  67. package/dist/perf.js +59 -0
  68. package/dist/perf.js.map +1 -0
  69. package/dist/providers/codegen.test.d.ts +2 -0
  70. package/dist/providers/codegen.test.d.ts.map +1 -0
  71. package/dist/providers/codegen.test.js +45 -0
  72. package/dist/providers/codegen.test.js.map +1 -0
  73. package/dist/providers/python/PythonProvider.js +1 -0
  74. package/dist/providers/python/PythonProvider.js.map +1 -1
  75. package/dist/providers/python/PythonProvider.test.d.ts +2 -0
  76. package/dist/providers/python/PythonProvider.test.d.ts.map +1 -0
  77. package/dist/providers/python/PythonProvider.test.js +169 -0
  78. package/dist/providers/python/PythonProvider.test.js.map +1 -0
  79. package/dist/providers/shared/sessionStream.js +1 -1
  80. package/dist/providers/shared/sessionStream.js.map +1 -1
  81. package/dist/providers/typescript/prepareCodegenData.test.d.ts +2 -0
  82. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +1 -0
  83. package/dist/providers/typescript/prepareCodegenData.test.js +54 -0
  84. package/dist/providers/typescript/prepareCodegenData.test.js.map +1 -0
  85. package/dist/run.d.ts.map +1 -1
  86. package/dist/run.js +36 -12
  87. package/dist/run.js.map +1 -1
  88. package/dist/sampleEventId.d.ts +0 -4
  89. package/dist/sampleEventId.d.ts.map +1 -1
  90. package/dist/sampleEventId.js +0 -4
  91. package/dist/sampleEventId.js.map +1 -1
  92. package/dist/shared/ToolDisplayUtils.js +1 -1
  93. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  94. package/dist/userConfig.d.ts +5 -1
  95. package/dist/userConfig.d.ts.map +1 -1
  96. package/dist/userConfig.js +43 -10
  97. package/dist/userConfig.js.map +1 -1
  98. package/package.json +4 -3
  99. package/dist/jsonOutput.d.ts +0 -19
  100. package/dist/jsonOutput.d.ts.map +0 -1
  101. package/dist/jsonOutput.js +0 -25
  102. package/dist/jsonOutput.js.map +0 -1
  103. package/dist/replay.d.ts +0 -3
  104. package/dist/replay.d.ts.map +0 -1
  105. package/dist/replay.js +0 -20
  106. package/dist/replay.js.map +0 -1
  107. package/dist/urls.d.ts +0 -3
  108. package/dist/urls.d.ts.map +0 -1
  109. package/dist/urls.js +0 -27
  110. package/dist/urls.js.map +0 -1
package/dist/api.js CHANGED
@@ -56,8 +56,8 @@ export function readApiKeyOrBail(options) {
56
56
  const apiKey = readApiKey();
57
57
  if (apiKey)
58
58
  return apiKey;
59
- throw new CliError("not_authenticated", options?.title?.trim() || "Not authenticated. Run `terse login` first.", {
60
- detail: options?.detail?.trim() || "Run `terse login` to authenticate, or set TERSE_API_KEY in your environment.",
59
+ throw new CliError("not_authenticated", options?.title?.trim() || "Not authenticated. Run `terse auth login` first.", {
60
+ detail: options?.detail?.trim() || "Run `terse auth login` to authenticate, or set TERSE_API_KEY in your environment.",
61
61
  actionRequired: true,
62
62
  exitCode: ErrorCode.BAD_ARGUMENTS
63
63
  });
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ErH"}
1
+ {"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AAG5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQxE,wBAAsB,MAAM,CAAC,QAAQ,GAAE,gBAAoC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFrH"}
@@ -1,13 +1,15 @@
1
1
  import { intro, log, outro } from "@clack/prompts";
2
+ import { select } from "@inquirer/prompts";
2
3
  import chalk from "chalk";
3
4
  import fs from "node:fs";
4
5
  import path from "node:path";
6
+ import { fetchWithAuth } from "../api.js";
5
7
  import { isNonInteractive } from "../cliHelpers.js";
6
8
  import { createSpinner, logNextSteps } from "../cliUi.js";
7
9
  import { PROJECT_CONFIG_FILENAME, createRemoteProject, readProjectConfig, writeProjectConfig } from "../projectConfig.js";
8
10
  import { resolveProvider } from "../providers/resolveProvider.js";
9
- import { setStoredApiKey } from "../userConfig.js";
10
11
  import { getProjectAttachedUserName, loginAndPersist } from "./auth.js";
12
+ import { resolveApiKeyForOrg } from "./authOrg.js";
11
13
  import { generate } from "./generate.js";
12
14
  import { listAndPromptIntegrations } from "./integrate.js";
13
15
  export async function attach(provider = resolveProvider(), opts) {
@@ -30,19 +32,20 @@ export async function attach(provider = resolveProvider(), opts) {
30
32
  log.info(`Attaching Terse to existing project ${chalk.bold(projectName)}`);
31
33
  log.info("Self-hosted mode keeps your jobs on your own infrastructure via TERSE_REMOTE_SERVER_URL. No source code is uploaded to Terse.");
32
34
  const result = await loginAndPersist(opts);
35
+ let attachApiKey = result?.apiKey ?? null;
33
36
  if (result?.apiKey) {
34
- setStoredApiKey(result.apiKey);
37
+ attachApiKey = await pickOrgForAttach(result.apiKey, nonInteractive);
35
38
  log.info(`Add ${chalk.cyan("TERSE_API_KEY")} to your server environment so your app can authenticate at runtime.`);
36
- log.step(`TERSE_API_KEY=${result.apiKey}`);
39
+ log.step(`TERSE_API_KEY=${attachApiKey}`);
37
40
  }
38
41
  else {
39
- log.info("You can run `terse login` later to authenticate.");
42
+ log.info("You can run `terse auth login` later to authenticate.");
40
43
  }
41
- if (result?.apiKey && !readProjectConfig(cwd)) {
44
+ if (attachApiKey && !readProjectConfig(cwd)) {
42
45
  const s = createSpinner();
43
46
  s.start("Creating Terse project");
44
47
  try {
45
- const config = await createRemoteProject(result.apiKey, projectName);
48
+ const config = await createRemoteProject(attachApiKey, projectName);
46
49
  const selfHostedConfig = { ...config, selfHosted: true, remoteServerUrl: "" };
47
50
  writeProjectConfig(cwd, selfHostedConfig);
48
51
  s.stop(`Created Terse project (${config.projectId})`);
@@ -55,12 +58,16 @@ export async function attach(provider = resolveProvider(), opts) {
55
58
  }
56
59
  }
57
60
  log.info("Reviewing integrations");
58
- await listAndPromptIntegrations({ showLifecycle: false, nonInteractive });
61
+ await listAndPromptIntegrations({
62
+ showLifecycle: false,
63
+ nonInteractive,
64
+ ...(attachApiKey ? { apiKey: attachApiKey } : {})
65
+ });
59
66
  if (canGenerateFromCurrentDirectory(provider, cwd)) {
60
67
  const s = createSpinner();
61
68
  s.start("Generating code");
62
69
  try {
63
- await generate(provider);
70
+ await generate(provider, attachApiKey ? { apiKey: attachApiKey } : undefined);
64
71
  s.stop("Generated code");
65
72
  }
66
73
  catch {
@@ -81,6 +88,24 @@ export async function attach(provider = resolveProvider(), opts) {
81
88
  log.info(chalk.dim(`If your self-hosted app keeps jobs in another file, use ${chalk.cyan("--entry-file")} with terse test and terse deploy.`));
82
89
  outro("Done");
83
90
  }
91
+ async function pickOrgForAttach(currentApiKey, nonInteractive) {
92
+ const orgsData = await fetchWithAuth("/sdk/me/organizations", currentApiKey);
93
+ if (orgsData.organizations.length <= 1 || nonInteractive)
94
+ return currentApiKey;
95
+ const activeId = orgsData.activeOrganizationId;
96
+ const chosenId = await select({
97
+ message: "Attach this project to which organization?",
98
+ choices: orgsData.organizations.map(o => ({
99
+ name: o.id === activeId ? `${o.name} ${chalk.dim("(active)")}` : o.name,
100
+ value: o.id
101
+ })),
102
+ default: activeId
103
+ });
104
+ if (chosenId === activeId)
105
+ return currentApiKey;
106
+ const chosen = orgsData.organizations.find(o => o.id === chosenId);
107
+ return resolveApiKeyForOrg(chosen.id, chosen.name, currentApiKey);
108
+ }
84
109
  function canGenerateFromCurrentDirectory(provider, cwd) {
85
110
  return provider.detectionMarkers.requiredFiles.every(relativePath => fs.existsSync(path.join(cwd, relativePath)));
86
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attach.js","sourceRoot":"","sources":["../../src/commands/attach.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AA8H5E,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CA2C/H;AAQD,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAWD,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI1F"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAA;AA0Q5E,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAAC,CA0D/H;AAED,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAwBD,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK1F"}
@@ -1,16 +1,19 @@
1
1
  import { log } from "@clack/prompts";
2
- import { confirm } from "@inquirer/prompts";
2
+ import { confirm, select } from "@inquirer/prompts";
3
3
  import chalk from "chalk";
4
4
  import { fetchWithAuth, readApiKeyFromDir } from "../api.js";
5
5
  import { CliError, ErrorCode } from "../cliError.js";
6
6
  import { isNonInteractive } from "../cliHelpers.js";
7
7
  import { createSpinner } from "../cliUi.js";
8
- import { BACKEND_URL, WORKOS_CLIENT_ID } from "../config.js";
8
+ import { BACKEND_URL, FRONTEND_URL, WORKOS_CLIENT_ID } from "../config.js";
9
9
  import { openUrlInBrowser } from "../openBrowser.js";
10
- import { clearStoredApiKey, getAuthFilePath, getStoredApiKey, setStoredApiKey } from "../userConfig.js";
10
+ import { clearStoredApiKey, getAuthFilePath, getStoredApiKey, setActiveOrgToken } from "../userConfig.js";
11
+ import { resolveApiKeyForOrg } from "./authOrg.js";
11
12
  const DEVICE_AUTH_URL = "https://api.workos.com/user_management/authorize/device";
12
13
  const TOKEN_URL = "https://api.workos.com/user_management/authenticate";
13
14
  const DEVICE_CODE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
15
+ const ORG_CREATE_PATH = "/app/organizations/create";
16
+ const IDENTIFY_POLL_INTERVAL_MS = 3000;
14
17
  function sleep(ms) {
15
18
  return new Promise(resolve => setTimeout(resolve, ms));
16
19
  }
@@ -60,18 +63,55 @@ async function pollForTokens(deviceCode, expiresIn, interval) {
60
63
  }
61
64
  throw new Error("Authorization timed out — please try again");
62
65
  }
63
- async function exchangeForApiKey(accessToken) {
64
- const res = await fetch(`${BACKEND_URL}/sdk/auth/device-token-exchange`, {
66
+ class JwtRejectedError extends Error {
67
+ constructor() {
68
+ super("WorkOS session expired");
69
+ }
70
+ }
71
+ async function identifyWithJwt(accessToken) {
72
+ const res = await fetch(`${BACKEND_URL}/sdk/auth/identify`, {
65
73
  method: "POST",
66
74
  headers: { "Content-Type": "application/json" },
67
75
  body: JSON.stringify({ accessToken })
68
76
  });
77
+ if (res.status === 401) {
78
+ throw new JwtRejectedError();
79
+ }
80
+ if (!res.ok) {
81
+ const body = (await res.json().catch(() => ({})));
82
+ throw new Error(`${res.status} — ${body.error || "Failed to identify"}`);
83
+ }
84
+ return res.json();
85
+ }
86
+ async function waitForOrganizationCreation(accessToken, deadline) {
87
+ while (Date.now() < deadline) {
88
+ await sleep(IDENTIFY_POLL_INTERVAL_MS);
89
+ const result = await identifyWithJwt(accessToken);
90
+ if (result.organizations.length > 0)
91
+ return result;
92
+ }
93
+ throw new Error("Timed out waiting for organization creation. Run `terse auth login` again once your organization is set up.");
94
+ }
95
+ async function exchangeForApiKey(accessToken, organizationId) {
96
+ const res = await fetch(`${BACKEND_URL}/sdk/auth/device-token-exchange`, {
97
+ method: "POST",
98
+ headers: { "Content-Type": "application/json" },
99
+ body: JSON.stringify({ accessToken, organizationId })
100
+ });
69
101
  if (!res.ok) {
70
102
  const body = (await res.json().catch(() => ({})));
71
103
  throw new Error(`${res.status} — ${body.error || "Failed to exchange token"}`);
72
104
  }
73
105
  return res.json();
74
106
  }
107
+ async function pickOrganization(orgs) {
108
+ if (orgs.length === 1)
109
+ return orgs[0].id;
110
+ return select({
111
+ message: "Select an organization for this CLI session",
112
+ choices: orgs.map(o => ({ name: `${o.name} ${chalk.dim(o.id)}`, value: o.id }))
113
+ });
114
+ }
75
115
  async function login() {
76
116
  const s = createSpinner();
77
117
  s.start("Requesting login code");
@@ -92,17 +132,68 @@ async function login() {
92
132
  let tokenData;
93
133
  try {
94
134
  tokenData = await pollForTokens(deviceData.device_code, deviceData.expires_in, deviceData.interval);
95
- s.message("Exchanging token");
96
135
  }
97
136
  catch (err) {
98
137
  s.stop("Login failed");
99
138
  console.error(chalk.red(` ${err.message}`));
100
139
  return null;
101
140
  }
141
+ const jwtDeadline = Date.now() + 5 * 60 * 1000;
142
+ s.message("Loading your organizations");
143
+ let identity;
144
+ try {
145
+ identity = await identifyWithJwt(tokenData.access_token);
146
+ }
147
+ catch (err) {
148
+ s.stop("Login failed");
149
+ if (err instanceof JwtRejectedError) {
150
+ console.error(chalk.red(" WorkOS session expired before we could load your account. Run `terse auth login` again."));
151
+ }
152
+ else {
153
+ console.error(chalk.red(` ${err.message}`));
154
+ }
155
+ return null;
156
+ }
157
+ if (identity.organizations.length === 0) {
158
+ s.stop("Account ready — finish setup in your browser");
159
+ const orgCreateUrl = `${FRONTEND_URL}${ORG_CREATE_PATH}`;
160
+ openUrlInBrowser(orgCreateUrl);
161
+ log.info("Finish creating your organization in the browser. If the tab didn't open, visit:");
162
+ log.info(` ${chalk.cyan(orgCreateUrl)}`);
163
+ s.start("Waiting for organization creation");
164
+ try {
165
+ identity = await waitForOrganizationCreation(tokenData.access_token, jwtDeadline);
166
+ }
167
+ catch (err) {
168
+ s.stop("Login failed");
169
+ if (err instanceof JwtRejectedError) {
170
+ console.error(chalk.red(" WorkOS session expired before your organization was ready. Run `terse auth login` again."));
171
+ }
172
+ else {
173
+ console.error(chalk.red(` ${err.message}`));
174
+ }
175
+ return null;
176
+ }
177
+ }
178
+ let organizationId;
179
+ try {
180
+ s.stop("Organizations loaded");
181
+ organizationId = await pickOrganization(identity.organizations);
182
+ s.start("Issuing API key");
183
+ }
184
+ catch (err) {
185
+ console.error(chalk.red(` ${err.message}`));
186
+ return null;
187
+ }
102
188
  try {
103
- const exchangeData = await exchangeForApiKey(tokenData.access_token);
104
- s.stop(`Logged in as ${exchangeData.user.displayName || exchangeData.user.email}`);
105
- return { apiKey: exchangeData.apiKey, displayName: exchangeData.user.displayName };
189
+ const exchangeData = await exchangeForApiKey(tokenData.access_token, organizationId);
190
+ s.stop(`Logged in as ${exchangeData.user.displayName || exchangeData.user.email} · ${exchangeData.organization.name}`);
191
+ return {
192
+ apiKey: exchangeData.apiKey,
193
+ displayName: exchangeData.user.displayName,
194
+ organizationId: exchangeData.organization.id,
195
+ organizationName: exchangeData.organization.name
196
+ };
106
197
  }
107
198
  catch (err) {
108
199
  s.stop("Failed to create API key");
@@ -110,6 +201,49 @@ async function login() {
110
201
  return null;
111
202
  }
112
203
  }
204
+ async function promptAlreadyLoggedInChoice(currentApiKey, me) {
205
+ let allOrgs = null;
206
+ try {
207
+ allOrgs = await fetchWithAuth("/sdk/me/organizations", currentApiKey);
208
+ }
209
+ catch {
210
+ // Fall back to the simple confirm path below.
211
+ }
212
+ const activeId = allOrgs?.activeOrganizationId ?? null;
213
+ const orgs = allOrgs?.organizations ?? [];
214
+ if (orgs.length <= 1) {
215
+ const shouldReauth = await confirm({ message: "Log in again with a different account?", default: false });
216
+ return shouldReauth ? { kind: "reauth" } : { kind: "keep" };
217
+ }
218
+ const choice = await select({
219
+ message: "Which organization?",
220
+ choices: [
221
+ ...orgs.map(o => ({
222
+ name: o.id === activeId ? `${o.name} ${chalk.dim("(current)")}` : o.name,
223
+ value: o.id
224
+ })),
225
+ { name: "Log in with a different account", value: "__reauth__" }
226
+ ],
227
+ default: activeId ?? orgs[0].id
228
+ });
229
+ if (choice === "__reauth__")
230
+ return { kind: "reauth" };
231
+ if (choice === activeId)
232
+ return { kind: "keep" };
233
+ const picked = orgs.find(o => o.id === choice);
234
+ const s = createSpinner();
235
+ s.start(`Switching to ${picked.name}`);
236
+ try {
237
+ const newKey = await resolveApiKeyForOrg(picked.id, picked.name, currentApiKey);
238
+ setActiveOrgToken(picked.id, newKey, picked.name);
239
+ s.stop(`Switched to ${picked.name}`);
240
+ return { kind: "switch", apiKey: newKey };
241
+ }
242
+ catch (err) {
243
+ s.stop(`Failed to switch: ${err.message}`);
244
+ return { kind: "failed" };
245
+ }
246
+ }
113
247
  export async function loginAndPersist(opts) {
114
248
  const skipPrompts = isNonInteractive(opts);
115
249
  const canFallToDeviceLogin = !opts?.nonInteractive;
@@ -117,20 +251,33 @@ export async function loginAndPersist(opts) {
117
251
  if (stored) {
118
252
  const s = createSpinner();
119
253
  s.start("Checking existing API key");
120
- const existingName = await fetchDisplayNameForKey(stored);
121
- if (existingName) {
122
- s.stop(`Already logged in as ${existingName}`);
254
+ const me = await fetchMeForKey(stored);
255
+ if (me) {
256
+ const orgLabel = me.organization?.name ?? "(no organization)";
257
+ s.stop(`Already logged in as ${me.displayName} · ${orgLabel}`);
123
258
  if (skipPrompts)
124
- return { apiKey: stored, displayName: existingName };
125
- const shouldContinue = await confirm({ message: "Log in again with a different account?", default: false });
126
- if (!shouldContinue)
127
- return { apiKey: stored, displayName: existingName };
259
+ return { apiKey: stored, displayName: me.displayName };
260
+ const next = await promptAlreadyLoggedInChoice(stored, me);
261
+ if (next.kind === "keep") {
262
+ return { apiKey: stored, displayName: me.displayName };
263
+ }
264
+ if (next.kind === "switch") {
265
+ return { apiKey: next.apiKey, displayName: me.displayName };
266
+ }
267
+ if (next.kind === "failed") {
268
+ return null;
269
+ }
270
+ // next.kind === "reauth" — drop every cached per-org token before
271
+ // logging in again. Otherwise the new user inherits the previous
272
+ // user's tokens for any org they both belong to, and a later
273
+ // `terse auth org switch` would silently reuse the prior token.
274
+ clearStoredApiKey();
128
275
  }
129
276
  else {
130
277
  s.stop("Existing API key is invalid or expired");
131
278
  if (!canFallToDeviceLogin) {
132
279
  throw new CliError("not_authenticated", "Stored credentials are invalid or expired.", {
133
- detail: 'Run "terse login" to refresh them.',
280
+ detail: 'Run "terse auth login" to refresh them.',
134
281
  actionRequired: true,
135
282
  exitCode: ErrorCode.BAD_ARGUMENTS
136
283
  });
@@ -139,33 +286,30 @@ export async function loginAndPersist(opts) {
139
286
  }
140
287
  else if (!canFallToDeviceLogin) {
141
288
  throw new CliError("not_authenticated", "Not authenticated.", {
142
- detail: 'Run "terse login" first, then retry.',
289
+ detail: 'Run "terse auth login" first, then retry.',
143
290
  actionRequired: true,
144
291
  exitCode: ErrorCode.BAD_ARGUMENTS
145
292
  });
146
293
  }
147
294
  const result = await login();
148
295
  if (!result?.apiKey) {
149
- log.info("You can run `terse login` later to authenticate.");
296
+ log.info("You can run `terse auth login` later to authenticate.");
150
297
  return null;
151
298
  }
152
- setStoredApiKey(result.apiKey);
299
+ setActiveOrgToken(result.organizationId, result.apiKey, result.organizationName);
153
300
  log.info(chalk.dim(`Saved credentials to ${getAuthFilePath()}`));
154
- return result;
155
- }
156
- async function getExistingAuthenticatedUserName() {
157
- const stored = getStoredApiKey();
158
- if (!stored)
159
- return null;
160
- return fetchDisplayNameForKey(stored);
301
+ return { apiKey: result.apiKey, displayName: result.displayName };
161
302
  }
162
303
  export function logout() {
163
304
  return clearStoredApiKey();
164
305
  }
165
- async function fetchDisplayNameForKey(apiKey) {
306
+ async function fetchMeForKey(apiKey) {
166
307
  try {
167
308
  const me = await fetchWithAuth("/sdk/me", apiKey);
168
- return me.displayName || me.firstName || me.email || "Unknown user";
309
+ return {
310
+ displayName: me.displayName || me.firstName || me.email || "Unknown user",
311
+ organization: me.organization ?? null
312
+ };
169
313
  }
170
314
  catch {
171
315
  return null;
@@ -175,6 +319,7 @@ export async function getProjectAttachedUserName(targetDir) {
175
319
  const projectKey = readApiKeyFromDir(targetDir);
176
320
  if (!projectKey)
177
321
  return null;
178
- return fetchDisplayNameForKey(projectKey);
322
+ const me = await fetchMeForKey(projectKey);
323
+ return me?.displayName ?? null;
179
324
  }
180
325
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAA2B,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvG,MAAM,eAAe,GAAG,yDAAyD,CAAA;AACjF,MAAM,SAAS,GAAG,qDAAqD,CAAA;AACvE,MAAM,sBAAsB,GAAG,8CAA8C,CAAA;AAE7E,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;QACrC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;KAC7D,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAiC,CAAA;AACpD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,SAAiB,EAAE,QAAgB;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAA;IAC9C,IAAI,YAAY,GAAG,QAAQ,CAAA;IAE3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;QAEhC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACtB,UAAU,EAAE,sBAAsB;gBAClC,WAAW,EAAE,UAAU;gBACvB,SAAS,EAAE,gBAAgB;aAC9B,CAAC;SACL,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACT,OAAO,GAAG,CAAC,IAAI,EAA4B,CAAA;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAA;QAErD,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,uBAAuB;gBACxB,MAAK;YACT,KAAK,WAAW;gBACZ,YAAY,IAAI,CAAC,CAAA;gBACjB,MAAK;YACT,KAAK,eAAe;gBAChB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAC/C,KAAK,eAAe;gBAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YAC/D;gBACI,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;AACjE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAChD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,iCAAiC,EAAE;QACrE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;KACxC,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAA;QAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,IAAI,0BAA0B,EAAE,CAAC,CAAA;IAClF,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAA0C,CAAA;AAC7D,CAAC;AAED,KAAK,UAAU,KAAK;IAChB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAA;IACzB,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEhC,IAAI,UAA8B,CAAA;IAClC,IAAI,CAAC;QACD,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACtC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACf,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAA;IACpF,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAClH,gBAAgB,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IAEtD,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAEhD,IAAI,SAAwB,CAAA;IAC5B,IAAI,CAAC;QACD,SAAS,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;QACnG,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACjC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACpE,CAAC,CAAC,IAAI,CAAC,gBAAgB,YAAY,CAAC,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAClF,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IACtF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC3D,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,cAAc,CAAA;IAElD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAEhC,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,aAAa,EAAE,CAAA;QACzB,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QACpC,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,CAAA;QACzD,IAAI,YAAY,EAAE,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAA;YAC9C,IAAI,WAAW;gBAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;YACrE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,wCAAwC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;YAC3G,IAAI,CAAC,cAAc;gBAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;QAC7E,CAAC;aAAM,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;YAChD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxB,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,4CAA4C,EAAE;oBAClF,MAAM,EAAE,oCAAoC;oBAC5C,cAAc,EAAE,IAAI;oBACpB,QAAQ,EAAE,SAAS,CAAC,aAAa;iBACpC,CAAC,CAAA;YACN,CAAC;QACL,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,oBAAoB,EAAE;YAC1D,MAAM,EAAE,sCAAsC;YAC9C,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,SAAS,CAAC,aAAa;SACpC,CAAC,CAAA;IACN,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,CAAA;IAC5B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;IACf,CAAC;IAED,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,eAAe,EAAE,EAAE,CAAC,CAAC,CAAA;IAEhE,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,gCAAgC;IAC3C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,MAAM;IAClB,OAAO,iBAAiB,EAAE,CAAA;AAC9B,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,MAAc;IAChD,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,aAAa,CAAoF,SAAS,EAAE,MAAM,CAAC,CAAA;QACpI,OAAO,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,IAAI,cAAc,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAA;IACf,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,SAAiB;IAC9D,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAC5B,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Get an API key scoped to `orgId`, reusing a cached one if we have it and
3
+ * otherwise minting a fresh one via `/sdk/auth/switch-organization`. Does NOT
4
+ * change the user's active org — callers that want to flip active should use
5
+ * `setActiveOrgToken` directly.
6
+ */
7
+ export declare function resolveApiKeyForOrg(orgId: string, orgName: string, currentApiKey: string): Promise<string>;
8
+ export declare function authOrgList(opts: {
9
+ json?: boolean;
10
+ }): Promise<void>;
11
+ export declare function authOrgSwitch(orgIdArg: string | undefined): Promise<void>;
12
+ //# sourceMappingURL=authOrg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authOrg.d.ts","sourceRoot":"","sources":["../../src/commands/authOrg.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhH;AAuBD,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE/E"}
@@ -0,0 +1,120 @@
1
+ import { select } from "@inquirer/prompts";
2
+ import chalk from "chalk";
3
+ import { ApiError, fetchWithAuth } from "../api.js";
4
+ import { isNonInteractive } from "../cliHelpers.js";
5
+ import { cacheOrgToken, getStoredApiKey, getStoredApiKeyForOrg, setActiveOrg, setActiveOrgToken } from "../userConfig.js";
6
+ /**
7
+ * Get an API key scoped to `orgId`, reusing a cached one if we have it and
8
+ * otherwise minting a fresh one via `/sdk/auth/switch-organization`. Does NOT
9
+ * change the user's active org — callers that want to flip active should use
10
+ * `setActiveOrgToken` directly.
11
+ */
12
+ export async function resolveApiKeyForOrg(orgId, orgName, currentApiKey) {
13
+ const cached = getStoredApiKeyForOrg(orgId);
14
+ if (cached)
15
+ return cached;
16
+ const minted = await fetchWithAuth("/sdk/auth/switch-organization", currentApiKey, { organizationId: orgId }, "POST");
17
+ cacheOrgToken(minted.organization.id, minted.apiKey, orgName);
18
+ return minted.apiKey;
19
+ }
20
+ function readApiKeyOrExit() {
21
+ const apiKey = getStoredApiKey();
22
+ if (!apiKey) {
23
+ console.log("Not logged in. Run `terse auth login`.");
24
+ process.exit(1);
25
+ }
26
+ return apiKey;
27
+ }
28
+ async function loadOrganizations(apiKey) {
29
+ try {
30
+ return await fetchWithAuth("/sdk/me/organizations", apiKey);
31
+ }
32
+ catch (err) {
33
+ if (err instanceof ApiError && err.status === 401) {
34
+ console.log("Credentials expired. Run `terse auth login`.");
35
+ process.exit(1);
36
+ }
37
+ throw err;
38
+ }
39
+ }
40
+ export async function authOrgList(opts) {
41
+ const apiKey = readApiKeyOrExit();
42
+ const data = await loadOrganizations(apiKey);
43
+ if (opts.json) {
44
+ process.stdout.write(JSON.stringify(data, null, 2) + "\n");
45
+ return;
46
+ }
47
+ if (data.organizations.length === 0) {
48
+ console.log("No organizations.");
49
+ return;
50
+ }
51
+ for (const org of data.organizations) {
52
+ const active = org.id === data.activeOrganizationId;
53
+ const marker = active ? chalk.green("*") : " ";
54
+ console.log(`${marker} ${org.name} ${chalk.dim(org.id)}`);
55
+ }
56
+ }
57
+ export async function authOrgSwitch(orgIdArg) {
58
+ const apiKey = readApiKeyOrExit();
59
+ const data = await loadOrganizations(apiKey);
60
+ if (data.organizations.length === 0) {
61
+ console.log("No organizations.");
62
+ process.exit(1);
63
+ }
64
+ if (data.organizations.length === 1) {
65
+ console.log("Only one organization, nothing to switch to.");
66
+ return;
67
+ }
68
+ let targetId;
69
+ if (orgIdArg) {
70
+ const match = data.organizations.find(o => o.id === orgIdArg);
71
+ if (!match) {
72
+ console.error(`Unknown organization id "${orgIdArg}". Valid ids:`);
73
+ for (const o of data.organizations)
74
+ console.error(` ${o.id} ${chalk.dim(o.name)}`);
75
+ process.exit(1);
76
+ }
77
+ if (match.id === data.activeOrganizationId) {
78
+ console.log(`Already on ${match.name}.`);
79
+ return;
80
+ }
81
+ targetId = match.id;
82
+ }
83
+ else {
84
+ if (isNonInteractive()) {
85
+ console.error("Org id required in non-interactive mode. Pass it as an argument: `terse auth org switch <org-id>`.");
86
+ process.exit(1);
87
+ }
88
+ targetId = await select({
89
+ message: "Switch to which organization?",
90
+ choices: data.organizations.map(o => {
91
+ const isCurrent = o.id === data.activeOrganizationId;
92
+ return {
93
+ name: isCurrent ? o.name : `${o.name} ${chalk.dim(o.id)}`,
94
+ value: o.id,
95
+ disabled: isCurrent ? chalk.dim("(current)") : false
96
+ };
97
+ })
98
+ });
99
+ }
100
+ const targetOrg = data.organizations.find(o => o.id === targetId);
101
+ if (getStoredApiKeyForOrg(targetId)) {
102
+ setActiveOrg(targetId);
103
+ console.log(`Switched to ${targetOrg.name}.`);
104
+ return;
105
+ }
106
+ let response;
107
+ try {
108
+ response = await fetchWithAuth("/sdk/auth/switch-organization", apiKey, { organizationId: targetId }, "POST");
109
+ }
110
+ catch (err) {
111
+ if (err instanceof ApiError && err.status === 401) {
112
+ console.log("Credentials expired. Run `terse auth login`.");
113
+ process.exit(1);
114
+ }
115
+ throw err;
116
+ }
117
+ setActiveOrgToken(response.organization.id, response.apiKey, response.organization.name);
118
+ console.log(`Switched to ${response.organization.name}.`);
119
+ }
120
+ //# sourceMappingURL=authOrg.js.map