@getpara/cli 2.15.0 → 2.15.1

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 (60) hide show
  1. package/dist/api/client.d.ts +2 -2
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +1 -1
  4. package/dist/auth/polling-flow.d.ts +2 -2
  5. package/dist/auth/polling-flow.d.ts.map +1 -1
  6. package/dist/auth/polling-flow.js +3 -3
  7. package/dist/auth/session-manager.d.ts +3 -3
  8. package/dist/auth/session-manager.d.ts.map +1 -1
  9. package/dist/auth/session-manager.js +8 -8
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +26 -7
  12. package/dist/commands/auth/login.d.ts.map +1 -1
  13. package/dist/commands/auth/login.js +8 -9
  14. package/dist/commands/auth/logout.d.ts.map +1 -1
  15. package/dist/commands/auth/logout.js +7 -8
  16. package/dist/commands/auth/status.d.ts.map +1 -1
  17. package/dist/commands/auth/status.js +4 -5
  18. package/dist/commands/config.js +5 -5
  19. package/dist/commands/create.js +5 -5
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +3 -5
  22. package/dist/commands/keys/archive.d.ts.map +1 -1
  23. package/dist/commands/keys/archive.js +20 -10
  24. package/dist/commands/keys/config/branding.js +5 -5
  25. package/dist/commands/keys/config/categories.d.ts.map +1 -1
  26. package/dist/commands/keys/config/categories.js +19 -1
  27. package/dist/commands/keys/config/index.d.ts.map +1 -1
  28. package/dist/commands/keys/config/index.js +12 -4
  29. package/dist/commands/keys/config/ramps.js +5 -5
  30. package/dist/commands/keys/config/security.js +5 -5
  31. package/dist/commands/keys/config/setup.js +5 -5
  32. package/dist/commands/keys/config/webhooks.d.ts +1 -1
  33. package/dist/commands/keys/config/webhooks.d.ts.map +1 -1
  34. package/dist/commands/keys/config/webhooks.js +15 -14
  35. package/dist/commands/keys/create.js +3 -3
  36. package/dist/commands/keys/get.d.ts.map +1 -1
  37. package/dist/commands/keys/get.js +62 -57
  38. package/dist/commands/keys/list.js +3 -3
  39. package/dist/commands/keys/rotate.d.ts.map +1 -1
  40. package/dist/commands/keys/rotate.js +22 -12
  41. package/dist/commands/orgs/list.js +2 -2
  42. package/dist/commands/orgs/switch.js +2 -2
  43. package/dist/commands/projects/archive.js +2 -2
  44. package/dist/commands/projects/create.js +2 -2
  45. package/dist/commands/projects/list.js +2 -2
  46. package/dist/commands/projects/restore.js +2 -2
  47. package/dist/commands/projects/switch.js +2 -2
  48. package/dist/commands/projects/update.js +2 -2
  49. package/dist/commands/whoami.js +5 -5
  50. package/dist/config/config-manager.d.ts.map +1 -1
  51. package/dist/config/config-manager.js +21 -9
  52. package/dist/config/credential-store.d.ts +4 -4
  53. package/dist/config/credential-store.d.ts.map +1 -1
  54. package/dist/config/credential-store.js +10 -10
  55. package/dist/core/constants.d.ts +11 -5
  56. package/dist/core/constants.d.ts.map +1 -1
  57. package/dist/core/constants.js +33 -18
  58. package/dist/core/types.d.ts +5 -3
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/package.json +2 -3
@@ -1,7 +1,7 @@
1
- import { type Environment } from '../core/constants.js';
1
+ import { type Backend } from '../core/constants.js';
2
2
  import type { Organization, Project, ApiKey, ApiKeyConfig, AuthStatus, WebhookConfig, WebhookConfigWithSecretResponse, WebhookTestResponse, WebhookRotateSecretResponse, UpdateWebhookBody } from './types.js';
3
3
  interface ClientConfig {
4
- environment: Environment;
4
+ backend: Backend;
5
5
  sessionId: string;
6
6
  }
7
7
  export declare class ParaApiClient {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ const REQUEST_TIMEOUT_MS = 3e4;
13
13
  class ParaApiClient {
14
14
  constructor(config) {
15
15
  this.config = config;
16
- this.baseUrl = BASE_URLS[config.environment];
16
+ this.baseUrl = BASE_URLS[config.backend];
17
17
  this.sessionId = config.sessionId;
18
18
  }
19
19
  baseUrl;
@@ -1,7 +1,7 @@
1
- import { type Environment } from '../core/constants.js';
1
+ import { type Backend } from '../core/constants.js';
2
2
  import type { SessionInfo } from '../core/types.js';
3
3
  export interface PollingLoginOptions {
4
4
  openBrowser?: boolean;
5
5
  }
6
- export declare function startPollingLogin(environment: Environment, opts?: PollingLoginOptions): Promise<SessionInfo>;
6
+ export declare function startPollingLogin(backend: Backend, opts?: PollingLoginOptions): Promise<SessionInfo>;
7
7
  //# sourceMappingURL=polling-flow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"polling-flow.d.ts","sourceRoot":"","sources":["../../src/auth/polling-flow.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAepD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsEtH"}
1
+ {"version":3,"file":"polling-flow.d.ts","sourceRoot":"","sources":["../../src/auth/polling-flow.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEhG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAepD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsE9G"}
@@ -9,12 +9,12 @@ function generateCodeVerifier() {
9
9
  function generateCodeChallenge(verifier) {
10
10
  return createHash("sha256").update(verifier).digest("base64url");
11
11
  }
12
- async function startPollingLogin(environment, opts = {}) {
12
+ async function startPollingLogin(backend, opts = {}) {
13
13
  const { openBrowser = true } = opts;
14
14
  const codeVerifier = generateCodeVerifier();
15
15
  const codeChallenge = generateCodeChallenge(codeVerifier);
16
- const portalUrl = PORTAL_URLS[environment];
17
- const baseUrl = BASE_URLS[environment];
16
+ const portalUrl = PORTAL_URLS[backend];
17
+ const baseUrl = BASE_URLS[backend];
18
18
  const createResponse = await fetch(`${baseUrl}/cli/auth/session-lookup`, {
19
19
  method: "POST",
20
20
  headers: {
@@ -1,7 +1,7 @@
1
- import type { Environment } from '../core/constants.js';
1
+ import type { Backend } from '../core/constants.js';
2
2
  import type { SessionInfo } from '../core/types.js';
3
3
  import { storeSession, clearSession } from '../config/credential-store.js';
4
- export declare function resolveSession(environment: Environment): Promise<SessionInfo | null>;
5
- export declare function ensureAuthenticated(environment: Environment): Promise<SessionInfo>;
4
+ export declare function resolveSession(backend: Backend): Promise<SessionInfo | null>;
5
+ export declare function ensureAuthenticated(backend: Backend): Promise<SessionInfo>;
6
6
  export { storeSession, clearSession };
7
7
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAc,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGvF,wBAAsB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAE1F;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAuCxF;AAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/auth/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAc,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGvF,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAElF;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAuChF;AAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -1,20 +1,20 @@
1
1
  import { AuthError } from "../core/error-handler.js";
2
2
  import { getSession, storeSession, clearSession } from "../config/credential-store.js";
3
3
  import { ParaApiClient } from "../api/client.js";
4
- async function resolveSession(environment) {
5
- return getSession(environment);
4
+ async function resolveSession(backend) {
5
+ return getSession(backend);
6
6
  }
7
- async function ensureAuthenticated(environment) {
8
- const session = await resolveSession(environment);
7
+ async function ensureAuthenticated(backend) {
8
+ const session = await resolveSession(backend);
9
9
  if (!session) {
10
10
  throw new AuthError("Not authenticated. Run `para login` to authenticate.");
11
11
  }
12
12
  if (session.expiresAt && Date.now() > session.expiresAt) {
13
- await clearSession(environment);
13
+ await clearSession(backend);
14
14
  throw new AuthError("Session expired. Run `para login` to re-authenticate.", true);
15
15
  }
16
16
  try {
17
- const client = new ParaApiClient({ environment, sessionId: session.sessionId });
17
+ const client = new ParaApiClient({ backend, sessionId: session.sessionId });
18
18
  const status = await client.getAuthStatus();
19
19
  const updated = {
20
20
  sessionId: session.sessionId,
@@ -23,12 +23,12 @@ async function ensureAuthenticated(environment) {
23
23
  expiresAt: status.sessionExpiresAt ?? session.expiresAt
24
24
  };
25
25
  if (updated.email !== session.email || updated.userId !== session.userId || updated.expiresAt !== session.expiresAt) {
26
- await storeSession(environment, updated);
26
+ await storeSession(backend, updated);
27
27
  }
28
28
  return updated;
29
29
  } catch (error) {
30
30
  if (error instanceof AuthError) {
31
- await clearSession(environment);
31
+ await clearSession(backend);
32
32
  throw new AuthError("Session is no longer valid. Run `para login` to re-authenticate.", true);
33
33
  }
34
34
  throw error;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAwBxD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEhE;AAsFD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CA6B3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAKpE;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAwBxD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEhE;AAwFD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAuC3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAKpE;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvD"}
package/dist/cli.js CHANGED
@@ -1,5 +1,12 @@
1
1
  import { Command } from "commander";
2
- import { CLI_VERSION, CLI_NAME, DEFAULT_ENVIRONMENT, parseEnvironment } from "./core/constants.js";
2
+ import {
3
+ CLI_VERSION,
4
+ CLI_NAME,
5
+ DEFAULT_BACKEND,
6
+ DEFAULT_KEY_ENVIRONMENT,
7
+ parseBackend,
8
+ parseKeyEnvironment
9
+ } from "./core/constants.js";
3
10
  import { OutputFormatter } from "./output/formatter.js";
4
11
  import { handleError, setJsonMode } from "./core/error-handler.js";
5
12
  import { setNonInteractive } from "./output/prompts.js";
@@ -11,7 +18,7 @@ function isCi() {
11
18
  }
12
19
  const GLOBAL_OPTIONS_TEXT = `
13
20
  Global Options:
14
- -e, --environment <env> Target environment (default: BETA)
21
+ -e, --environment <env> Key environment: beta or prod (default: beta)
15
22
  --json Output as JSON
16
23
  --org <id> Organization ID override
17
24
  --project <id> Project ID override
@@ -51,7 +58,11 @@ Setup:
51
58
  Run "para <command> --help" for more information on a specific command.
52
59
  `;
53
60
  function createProgram() {
54
- const program = new Command().name(CLI_NAME).description("Unified CLI for Para SDK").version(CLI_VERSION, "-v, --version").option("--json", "Output as JSON", false).option("-e, --environment <env>", "Target environment (default: BETA)", (value) => parseEnvironment(value)).option("--org <id>", "Organization ID override").option("--project <id>", "Project ID override").option("-q, --quiet", "Suppress non-essential output", false).option("--no-input", "Disable interactive prompts (auto-detected in CI)").showHelpAfterError('Run "para --help" for available commands.').exitOverride();
61
+ const program = new Command().name(CLI_NAME).description("Unified CLI for Para SDK").version(CLI_VERSION, "-v, --version").option("--json", "Output as JSON", false).option(
62
+ "-e, --environment <env>",
63
+ "Key environment: beta or prod (default: beta)",
64
+ (value) => parseKeyEnvironment(value)
65
+ ).option("--org <id>", "Organization ID override").option("--project <id>", "Project ID override").option("-q, --quiet", "Suppress non-essential output", false).option("--no-input", "Disable interactive prompts (auto-detected in CI)").showHelpAfterError('Run "para --help" for available commands.').exitOverride();
55
66
  const originalHelpInfo = program.helpInformation.bind(program);
56
67
  program.helpInformation = function() {
57
68
  if (this.parent) {
@@ -82,14 +93,21 @@ function createProgram() {
82
93
  }
83
94
  async function getGlobalOptions(cmd) {
84
95
  const opts = cmd.optsWithGlobals();
85
- let environment;
96
+ let keyEnvironment;
86
97
  if (opts.environment) {
87
- environment = parseEnvironment(opts.environment);
98
+ keyEnvironment = parseKeyEnvironment(opts.environment);
88
99
  } else {
89
100
  const projectConfig = await readProjectConfig(process.cwd()).catch(() => ({}));
90
101
  const globalConfig = await readGlobalConfig();
91
102
  const configEnv = projectConfig.environment ?? globalConfig.defaultEnvironment;
92
- environment = configEnv ? parseEnvironment(configEnv) : DEFAULT_ENVIRONMENT;
103
+ keyEnvironment = configEnv ? parseKeyEnvironment(configEnv) : DEFAULT_KEY_ENVIRONMENT;
104
+ }
105
+ let backend;
106
+ const backendEnv = process.env["PARA_BACKEND"];
107
+ if (backendEnv) {
108
+ backend = parseBackend(backendEnv);
109
+ } else {
110
+ backend = DEFAULT_BACKEND;
93
111
  }
94
112
  const json = opts.json ?? false;
95
113
  if (json) setJsonMode(true);
@@ -97,7 +115,8 @@ async function getGlobalOptions(cmd) {
97
115
  if (noInput) setNonInteractive(true);
98
116
  return {
99
117
  json,
100
- environment,
118
+ backend,
119
+ keyEnvironment,
101
120
  org: opts.org,
102
121
  project: opts.project,
103
122
  quiet: opts.quiet ?? false,
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA8C1D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6C1D"}
@@ -9,7 +9,7 @@ function registerLoginCommand(parent) {
9
9
  const opts = await getGlobalOptions(actionCmd);
10
10
  const formatter = createFormatter(opts);
11
11
  try {
12
- const existing = await ensureAuthenticated(opts.environment);
12
+ const existing = await ensureAuthenticated(opts.backend);
13
13
  formatter.success(`Already authenticated as ${existing.email || existing.userId}`);
14
14
  formatter.flush();
15
15
  return;
@@ -17,27 +17,26 @@ function registerLoginCommand(parent) {
17
17
  }
18
18
  const spinner = createSpinner();
19
19
  spinner.start("Waiting for browser authentication...");
20
- const session = await startPollingLogin(opts.environment, {
20
+ const session = await startPollingLogin(opts.backend, {
21
21
  openBrowser: cmdOpts.browser
22
22
  });
23
23
  spinner.stop("Browser authentication complete.");
24
- await storeSession(opts.environment, session);
25
- formatter.json({ email: session.email, userId: session.userId, environment: opts.environment });
24
+ await storeSession(opts.backend, session);
25
+ formatter.json({ email: session.email, userId: session.userId, backend: opts.backend });
26
26
  formatter.success(`Authenticated as ${session.email || session.userId}`);
27
- await autoResolveContext(session, opts.environment, formatter);
27
+ await autoResolveContext(session, opts.backend, formatter);
28
28
  formatter.flush();
29
29
  });
30
30
  addExamples(
31
31
  cmd,
32
32
  `Examples:
33
33
  $ para login Opens the developer portal \u2014 sign in and the CLI picks up your session
34
- $ para login --no-browser Prints a URL to open manually (useful for SSH/CI)
35
- $ para login -e DEV Sign in against a local dev server`
34
+ $ para login --no-browser Prints a URL to open manually (useful for SSH/CI)`
36
35
  );
37
36
  }
38
- async function autoResolveContext(session, environment, formatter) {
37
+ async function autoResolveContext(session, backend, formatter) {
39
38
  try {
40
- const client = new ParaApiClient({ environment, sessionId: session.sessionId });
39
+ const client = new ParaApiClient({ backend, sessionId: session.sessionId });
41
40
  let userId = session.userId;
42
41
  if (!userId) {
43
42
  const status = await client.getAuthStatus();
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA8C3D"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6C3D"}
@@ -8,10 +8,10 @@ function registerLogoutCommand(parent) {
8
8
  const opts = await getGlobalOptions(actionCmd);
9
9
  const formatter = createFormatter(opts);
10
10
  try {
11
- const session = await resolveSession(opts.environment);
11
+ const session = await resolveSession(opts.backend);
12
12
  if (session?.sessionId) {
13
13
  const client = new ParaApiClient({
14
- environment: opts.environment,
14
+ backend: opts.backend,
15
15
  sessionId: session.sessionId
16
16
  });
17
17
  await client.logout().catch(() => {
@@ -25,19 +25,18 @@ function registerLogoutCommand(parent) {
25
25
  formatter.json({ loggedOut: true, scope: "all" });
26
26
  formatter.success("Cleared all stored sessions and context.");
27
27
  } else {
28
- await clearSession(opts.environment);
28
+ await clearSession(opts.backend);
29
29
  await updateGlobalConfig({ defaultOrganizationId: void 0, defaultProjectId: void 0 });
30
- formatter.json({ loggedOut: true, scope: opts.environment });
31
- formatter.success(`Cleared session and context for ${opts.environment} environment.`);
30
+ formatter.json({ loggedOut: true, scope: opts.backend });
31
+ formatter.success(`Cleared session and context for ${opts.backend} backend.`);
32
32
  }
33
33
  formatter.flush();
34
34
  });
35
35
  addExamples(
36
36
  cmd,
37
37
  `Examples:
38
- $ para logout Sign out of the current environment (BETA by default)
39
- $ para logout --all Sign out of every environment at once
40
- $ para logout -e PROD Sign out of production only`
38
+ $ para logout Sign out of the current backend
39
+ $ para logout --all Sign out of every backend at once`
41
40
  );
42
41
  }
43
42
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAuD/D"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAsD/D"}
@@ -6,11 +6,11 @@ function registerAuthStatusCommand(parent) {
6
6
  const opts = await getGlobalOptions(actionCmd);
7
7
  const formatter = createFormatter(opts);
8
8
  try {
9
- const session = await ensureAuthenticated(opts.environment);
9
+ const session = await ensureAuthenticated(opts.backend);
10
10
  if (opts.json) {
11
11
  formatter.json({
12
12
  authenticated: true,
13
- environment: opts.environment,
13
+ backend: opts.backend,
14
14
  email: session.email || void 0,
15
15
  userId: session.userId || void 0,
16
16
  expiresAt: session.expiresAt || void 0
@@ -18,7 +18,7 @@ function registerAuthStatusCommand(parent) {
18
18
  } else {
19
19
  formatter.detail([
20
20
  { label: "Status", value: "Authenticated" },
21
- { label: "Environment", value: opts.environment },
21
+ { label: "Backend", value: opts.backend },
22
22
  ...session.email ? [{ label: "Email", value: session.email }] : [],
23
23
  ...session.expiresAt ? [
24
24
  {
@@ -31,7 +31,7 @@ function registerAuthStatusCommand(parent) {
31
31
  } catch (error) {
32
32
  if (error instanceof AuthError) {
33
33
  if (opts.json) {
34
- formatter.json({ authenticated: false, environment: opts.environment });
34
+ formatter.json({ authenticated: false, backend: opts.backend });
35
35
  } else {
36
36
  formatter.warn(error.message);
37
37
  }
@@ -45,7 +45,6 @@ function registerAuthStatusCommand(parent) {
45
45
  cmd,
46
46
  `Examples:
47
47
  $ para auth status Show session validity, email, and expiration
48
- $ para auth status -e PROD Check auth for a specific environment
49
48
  $ para auth status --json Output status as JSON (useful in scripts)`
50
49
  );
51
50
  }
@@ -1,7 +1,7 @@
1
1
  import { getGlobalOptions, createFormatter, helpText } from "../cli.js";
2
2
  import { readGlobalConfig, updateGlobalConfig, removeGlobalConfigKey } from "../config/config-store.js";
3
3
  import { readProjectConfig, writeProjectConfig } from "../config/project-config.js";
4
- import { parseEnvironment } from "../core/constants.js";
4
+ import { parseKeyEnvironment } from "../core/constants.js";
5
5
  const VALID_KEYS = ["defaultOrganizationId", "defaultProjectId", "defaultEnvironment"];
6
6
  function registerConfigCommand(program) {
7
7
  const config = program.command("config").description("View or update CLI configuration");
@@ -62,8 +62,8 @@ Valid keys: defaultOrganizationId, defaultProjectId, defaultEnvironment`)
62
62
  config.command("set").description("Set a configuration value").argument("<key>", "Configuration key").argument("<value>", "Configuration value").option("--local", "Write to project .pararc instead of global config").addHelpText(
63
63
  "after",
64
64
  helpText(`Examples:
65
- $ para config set defaultEnvironment BETA Set global default environment
66
- $ para config set defaultEnvironment DEV --local Set for this project only
65
+ $ para config set defaultEnvironment beta Set global default environment
66
+ $ para config set defaultEnvironment prod --local Set for this project only
67
67
 
68
68
  Valid keys: defaultOrganizationId, defaultProjectId, defaultEnvironment`)
69
69
  ).action(async (key, value, cmdOpts, cmd) => {
@@ -75,9 +75,9 @@ Valid keys: defaultOrganizationId, defaultProjectId, defaultEnvironment`)
75
75
  }
76
76
  if (key === "defaultEnvironment" || key === "environment") {
77
77
  try {
78
- parseEnvironment(value);
78
+ parseKeyEnvironment(value);
79
79
  } catch {
80
- formatter.error(`Invalid environment "${value}". Valid values: DEV, SANDBOX, BETA, PROD`);
80
+ formatter.error(`Invalid environment "${value}". Valid values: beta, prod`);
81
81
  process.exit(2);
82
82
  }
83
83
  }
@@ -295,7 +295,7 @@ function isNonInteractive(appName, opts) {
295
295
  const CREATE_NEW = "__create_new__";
296
296
  async function connectProjectApiKey(targetDir, scaffoldConfig, opts, silent) {
297
297
  try {
298
- const session = await ensureAuthenticated(opts.environment);
298
+ const session = await ensureAuthenticated(opts.backend);
299
299
  if (!silent) {
300
300
  const shouldConnect = await confirm(
301
301
  `Signed in as ${session.email || session.userId}. Connect to a Para project to auto-configure your API key?`
@@ -303,7 +303,7 @@ async function connectProjectApiKey(targetDir, scaffoldConfig, opts, silent) {
303
303
  if (!shouldConnect) return false;
304
304
  }
305
305
  const client = new ParaApiClient({
306
- environment: opts.environment,
306
+ backend: opts.backend,
307
307
  sessionId: session.sessionId
308
308
  });
309
309
  const config = await resolveConfig(opts);
@@ -370,7 +370,7 @@ async function connectProjectApiKey(targetDir, scaffoldConfig, opts, silent) {
370
370
  p.log.success(`Created project "${newProject.name}"`);
371
371
  }
372
372
  }
373
- const keys = await client.getApiKeys(orgId, projectId, opts.environment);
373
+ const keys = await client.getApiKeys(orgId, projectId, opts.keyEnvironment);
374
374
  const activeKeys = keys.filter((k) => !k.archived);
375
375
  let apiKeyValue;
376
376
  if (silent) {
@@ -401,7 +401,7 @@ async function connectProjectApiKey(targetDir, scaffoldConfig, opts, silent) {
401
401
  if (!v.trim()) return "Name is required.";
402
402
  }
403
403
  });
404
- const newKey = await client.createApiKey(orgId, projectId, opts.environment, { name: keyName });
404
+ const newKey = await client.createApiKey(orgId, projectId, opts.keyEnvironment, { name: keyName });
405
405
  apiKeyValue = newKey.apiKey;
406
406
  p.log.success(`Created API key "${keyName}"`);
407
407
  }
@@ -409,7 +409,7 @@ async function connectProjectApiKey(targetDir, scaffoldConfig, opts, silent) {
409
409
  const envExamplePath = path.join(targetDir, ".env.example");
410
410
  const envPath = path.join(targetDir, ".env");
411
411
  const envContent = await readFile(envExamplePath);
412
- const envWithKey = envContent.replaceAll("your_api_key_here", apiKeyValue).replace(/PARA_ENVIRONMENT=\w+/, `PARA_ENVIRONMENT=${opts.environment}`);
412
+ const envWithKey = envContent.replaceAll("your_api_key_here", apiKeyValue).replace(/PARA_ENVIRONMENT=\w+/, `PARA_ENVIRONMENT=${opts.keyEnvironment}`);
413
413
  await writeFile(envPath, envWithKey);
414
414
  if (silent) {
415
415
  console.log(pc.green("\u2713"), "API key written to .env");
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C1D"}
@@ -24,11 +24,9 @@ multiple projects so each repo automatically uses the right context.`)
24
24
  return;
25
25
  }
26
26
  const config = await resolveConfig(opts, cwd);
27
- const environment = opts.noInput ? opts.environment : await select("Select default environment:", [
28
- { value: "BETA", label: "Beta (default)" },
29
- { value: "PROD", label: "Production" },
30
- { value: "SANDBOX", label: "Sandbox (internal testing)" },
31
- { value: "DEV", label: "Development (local)" }
27
+ const environment = opts.noInput ? opts.keyEnvironment : await select("Select default key environment:", [
28
+ { value: "beta", label: "Beta (default)" },
29
+ { value: "prod", label: "Production" }
32
30
  ]);
33
31
  await writeProjectConfig(cwd, {
34
32
  environment,
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAkDhE"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/commands/keys/archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA4DhE"}
@@ -4,25 +4,39 @@ import { resolveConfig } from "../../config/config-manager.js";
4
4
  import { ParaApiClient } from "../../api/client.js";
5
5
  import { CliError } from "../../core/error-handler.js";
6
6
  import { confirm } from "../../output/prompts.js";
7
+ import { resolveKeyId } from "./config/categories.js";
7
8
  function registerKeysArchiveCommand(parent) {
8
- parent.command("archive").description("Archive (revoke) an API key").argument("<key-id>", "API key ID to archive").option("-y, --yes", "Skip confirmation prompt").addHelpText(
9
+ parent.command("archive").description("Archive (revoke) an API key").argument("[key-id]", "API key ID to archive (resolved from project + environment if omitted)").option("-y, --yes", "Skip confirmation prompt").addHelpText(
9
10
  "after",
10
11
  helpText(`Examples:
11
- $ para keys archive abc-123 Revoke a key (asks for confirmation)
12
+ $ para keys archive Archive the beta key (asks for confirmation)
13
+ $ para keys archive -e prod Archive the prod key
14
+ $ para keys archive abc-123 Archive a specific key by ID
12
15
  $ para keys archive abc-123 -y Skip confirmation (for scripts)
13
16
 
14
17
  This is irreversible \u2014 the archived key stops working immediately.
15
18
  Use "para keys list --include-archived" to see archived keys.`)
16
- ).action(async (keyId, cmdOpts, cmd) => {
19
+ ).action(async (keyIdArg, cmdOpts, cmd) => {
17
20
  const opts = await getGlobalOptions(cmd);
18
21
  const formatter = createFormatter(opts);
19
22
  const config = await resolveConfig(opts);
20
- const session = await ensureAuthenticated(config.environment);
23
+ const session = await ensureAuthenticated(config.backend);
21
24
  if (!config.organizationId || !config.projectId) {
22
25
  throw new CliError(
23
26
  "Organization and project required. Run `para orgs switch` and `para projects switch`, or pass --org and --project."
24
27
  );
25
28
  }
29
+ const client = new ParaApiClient({
30
+ backend: config.backend,
31
+ sessionId: session.sessionId
32
+ });
33
+ const { keyId, key } = await resolveKeyId(
34
+ client,
35
+ config.organizationId,
36
+ config.projectId,
37
+ config.keyEnvironment,
38
+ keyIdArg
39
+ );
26
40
  if (!cmdOpts.yes) {
27
41
  const confirmed = await confirm("Are you sure you want to archive this API key? It will stop working immediately.");
28
42
  if (!confirmed) {
@@ -31,15 +45,11 @@ Use "para keys list --include-archived" to see archived keys.`)
31
45
  return;
32
46
  }
33
47
  }
34
- const client = new ParaApiClient({
35
- environment: config.environment,
36
- sessionId: session.sessionId
37
- });
38
- await client.deleteApiKey(config.organizationId, config.projectId, config.environment, keyId);
48
+ await client.deleteApiKey(config.organizationId, config.projectId, config.keyEnvironment, keyId);
39
49
  if (opts.json) {
40
50
  formatter.json({ id: keyId, archived: true });
41
51
  } else {
42
- formatter.success(`Archived API key ${keyId}`);
52
+ formatter.success(`Archived ${key.displayName || key.name} (${key.environment})`);
43
53
  }
44
54
  formatter.flush();
45
55
  });
@@ -26,28 +26,28 @@ function registerBrandingConfigCommand(parent) {
26
26
  const opts = await getGlobalOptions(cmd);
27
27
  const formatter = createFormatter(opts);
28
28
  const config = await resolveConfig(opts);
29
- const session = await ensureAuthenticated(config.environment);
29
+ const session = await ensureAuthenticated(config.backend);
30
30
  if (!config.organizationId || !config.projectId) {
31
31
  throw new CliError(
32
32
  "Organization and project required. Run `para orgs switch` and `para projects switch`, or pass --org and --project."
33
33
  );
34
34
  }
35
35
  const client = new ParaApiClient({
36
- environment: config.environment,
36
+ backend: config.backend,
37
37
  sessionId: session.sessionId
38
38
  });
39
39
  const { keyId, key } = await resolveKeyId(
40
40
  client,
41
41
  config.organizationId,
42
42
  config.projectId,
43
- config.environment,
43
+ config.keyEnvironment,
44
44
  keyIdArg
45
45
  );
46
46
  await runBrandingAction(
47
47
  client,
48
48
  config.organizationId,
49
49
  config.projectId,
50
- config.environment,
50
+ config.keyEnvironment,
51
51
  keyId,
52
52
  key,
53
53
  formatter,
@@ -237,7 +237,7 @@ async function runBrandingAction(client, orgId, projectId, environment, keyId, c
237
237
  }
238
238
  await client.updateApiKey(orgId, projectId, environment, keyId, updates);
239
239
  formatter.json({ keyId, updated: updates });
240
- formatter.success("Updated branding settings.");
240
+ formatter.success(`Updated branding on ${currentKey.displayName || currentKey.name} (${currentKey.environment})`);
241
241
  formatter.flush();
242
242
  }
243
243
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/config/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMpE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,UAAU,EAAE,WAAW,EAMnC,CAAC;AAIF,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BzC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
1
+ {"version":3,"file":"categories.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/config/categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAMpE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,UAAU,EAAE,WAAW,EAMnC,CAAC;AAIF,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAsDzC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -20,6 +20,24 @@ async function resolveKeyId(client, orgId, projectId, environment, keyIdArg) {
20
20
  if (active.length === 0) {
21
21
  throw new CliError("No API keys found. Run `para keys create` first.");
22
22
  }
23
+ const envMatch = active.filter((k) => k.environment === environment);
24
+ if (envMatch.length === 1) {
25
+ p.log.info(`Using ${envMatch[0].environment} key (${maskSecret(envMatch[0].apiKey)})`);
26
+ return { keyId: envMatch[0].id, key: envMatch[0] };
27
+ }
28
+ if (envMatch.length > 1) {
29
+ const selected2 = await select(
30
+ `Multiple ${environment} keys found. Select one:`,
31
+ envMatch.map((k) => ({
32
+ value: k.id,
33
+ label: k.displayName || k.name,
34
+ hint: maskSecret(k.apiKey)
35
+ }))
36
+ );
37
+ const key2 = envMatch.find((k) => k.id === selected2);
38
+ if (!key2) throw new CliError("Selected API key no longer exists. Please try again.");
39
+ return { keyId: selected2, key: key2 };
40
+ }
23
41
  if (active.length === 1) {
24
42
  p.log.info(`Using key ${active[0].displayName || active[0].name} (${maskSecret(active[0].apiKey)})`);
25
43
  return { keyId: active[0].id, key: active[0] };
@@ -28,7 +46,7 @@ async function resolveKeyId(client, orgId, projectId, environment, keyIdArg) {
28
46
  "Select API key:",
29
47
  active.map((k) => ({
30
48
  value: k.id,
31
- label: k.displayName || k.name,
49
+ label: `${k.displayName || k.name} (${k.environment})`,
32
50
  hint: maskSecret(k.apiKey)
33
51
  }))
34
52
  );
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAmD/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/keys/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA2D/D"}