@axtrabase/cli 0.1.2 → 0.1.4

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 (50) hide show
  1. package/README.md +39 -4
  2. package/dist/api-types.d.ts +39 -0
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +71 -20
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/context.d.ts +62 -0
  8. package/dist/commands/context.d.ts.map +1 -1
  9. package/dist/commands/context.js +82 -6
  10. package/dist/commands/context.js.map +1 -1
  11. package/dist/commands/keys.js +16 -0
  12. package/dist/commands/keys.js.map +1 -1
  13. package/dist/commands/login.js +14 -0
  14. package/dist/commands/login.js.map +1 -1
  15. package/dist/commands/permissions.js +13 -3
  16. package/dist/commands/permissions.js.map +1 -1
  17. package/dist/commands/status.js +22 -3
  18. package/dist/commands/status.js.map +1 -1
  19. package/dist/commands/tables.js +69 -12
  20. package/dist/commands/tables.js.map +1 -1
  21. package/dist/config/environments.d.ts +43 -0
  22. package/dist/config/environments.d.ts.map +1 -0
  23. package/dist/config/environments.js +43 -0
  24. package/dist/config/environments.js.map +1 -0
  25. package/dist/config/resolve.d.ts +25 -4
  26. package/dist/config/resolve.d.ts.map +1 -1
  27. package/dist/config/resolve.js +59 -11
  28. package/dist/config/resolve.js.map +1 -1
  29. package/dist/config/store.d.ts +4 -2
  30. package/dist/config/store.d.ts.map +1 -1
  31. package/dist/config/store.js +1 -0
  32. package/dist/config/store.js.map +1 -1
  33. package/dist/exit-codes.d.ts.map +1 -1
  34. package/dist/exit-codes.js +8 -0
  35. package/dist/exit-codes.js.map +1 -1
  36. package/dist/generators/typescript.d.ts +15 -0
  37. package/dist/generators/typescript.d.ts.map +1 -1
  38. package/dist/generators/typescript.js +126 -11
  39. package/dist/generators/typescript.js.map +1 -1
  40. package/dist/prompt-masked.d.ts +3 -1
  41. package/dist/prompt-masked.d.ts.map +1 -1
  42. package/dist/prompt-masked.js +23 -2
  43. package/dist/prompt-masked.js.map +1 -1
  44. package/dist/report-error.d.ts +16 -1
  45. package/dist/report-error.d.ts.map +1 -1
  46. package/dist/report-error.js +45 -2
  47. package/dist/report-error.js.map +1 -1
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/package.json +11 -11
@@ -22,6 +22,20 @@ async function runLogin(options) {
22
22
  const apiUrl = resolveApiUrl(options.apiUrl);
23
23
  const dashboardUrl = resolveDashboardUrl(options.dashboardUrl);
24
24
  const tokenPageUrl = `${dashboardUrl}/account/cli-tokens`;
25
+ // `login` is interactive by definition: it ends in a pasted secret. In an
26
+ // agent or CI environment there is no terminal to paste at, so fail here
27
+ // rather than opening a browser nobody can see and then blocking on a
28
+ // prompt nobody can answer (Sprint #11 P1-10). promptMasked enforces the
29
+ // same contract if stdin closes mid-flight; this is the early, explicit
30
+ // path that also avoids the pointless browser launch.
31
+ if (!process.stdin.isTTY) {
32
+ throw new CliError("AXTRA_CLI_NON_INTERACTIVE", "axtrabase login is interactive — it ends by pasting a CLI token — and there is no terminal attached.\n\n" +
33
+ "For an agent or CI environment, supply the token directly instead of logging in:\n" +
34
+ " export AXTRABASE_CLI_TOKEN=axcli_...\n\n" +
35
+ `Generate one at ${tokenPageUrl}\n` +
36
+ "The token is read fresh on every command and is never written to disk. " +
37
+ "Revoke it with `axtrabase logout --revoke` when the session is done.", { status: 0 });
38
+ }
25
39
  if (options.open === false) {
26
40
  printLine(`Visit this URL to generate a CLI token:`);
27
41
  printLine(tokenPageUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -48,14 +48,24 @@ async function runList(options) {
48
48
  printLine("No table permissions granted yet.");
49
49
  return;
50
50
  }
51
- printLine(renderTable(["TABLE", "API KEY", "ENABLED", "ACCESS"], rows.map((row) => {
51
+ // A grant on a revoked key confers nothing. Showing it unmarked made this
52
+ // output actively misleading — a revoked key's five canRead rows read as
53
+ // "access is granted" while the only usable key showed nothing. Say so
54
+ // here rather than making a reader cross-check `keys list`.
55
+ printLine(renderTable(["TABLE", "API KEY", "ENABLED", "ACCESS", "KEY STATUS"], rows.map((row) => {
52
56
  const key = keyById.get(row.apiKeyId);
57
+ const revoked = row.isEffective === false || Boolean(row.keyRevokedAt);
53
58
  return [
54
59
  row.table,
55
- key ? `${key.name} (${key.prefix})` : row.apiKeyId,
60
+ key ? `${key.name} (${key.prefix})` : (row.apiKeyName ?? row.apiKeyId),
56
61
  row.isEnabled ? "yes" : "no",
57
- accessShorthand(row)
62
+ revoked ? `${accessShorthand(row)} (inactive)` : accessShorthand(row),
63
+ revoked ? "REVOKED" : "active"
58
64
  ];
59
65
  })));
66
+ if (rows.some((row) => row.isEffective === false || Boolean(row.keyRevokedAt))) {
67
+ printLine();
68
+ printLine("Rows marked REVOKED belong to revoked API keys and grant no access.");
69
+ }
60
70
  }
61
71
  //# sourceMappingURL=permissions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAU1D;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,WAAW,GAAG,OAAO;SACxB,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,+DAA+D,CAAC,CAAC;IAEhF,WAAW;SACR,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC;SACtE,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;SACtD,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAsB,CAAC;QAC3D,MAAM,oBAAoB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,eAAe,CAAC,GAA2B;IAClD,OAAO,CACL,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAA2B;IAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,MAAM,CAAC,GAAG,CAA2B,oBAAoB,SAAS,qBAAqB,CAAC;QACxF,MAAM,CAAC,GAAG,CAAkB,oBAAoB,SAAS,WAAW,CAAC;KACtE,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM;QACzB,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC;QACzE,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAErE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,mCAAmC,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,SAAS,CACP,WAAW,CACT,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EACzC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO;YACL,GAAG,CAAC,KAAK;YACT,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ;YAClD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC5B,eAAe,CAAC,GAAG,CAAC;SACrB,CAAC;IACJ,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { resolveActiveProjectId } from "../active-project.js";
2
- import { resolveApiUrl } from "../config/resolve.js";
2
+ import { resolveApiUrl, resolveDashboardUrl, resolveEnvironment } from "../config/resolve.js";
3
3
  import { requireControlPlaneClient } from "../http/authenticated-client.js";
4
4
  import { printJson, printKeyValueBlock } from "../output/print.js";
5
5
  import { runWithErrorHandling } from "../report-error.js";
@@ -24,8 +24,25 @@ async function runStatus(options) {
24
24
  const client = requireControlPlaneClient({ apiUrl: options.apiUrl });
25
25
  const projectId = await resolveActiveProjectId(client, options.project);
26
26
  const { data } = await client.get(`/api/v1/projects/${projectId}/context`);
27
+ // Sprint #11 P0-2: which environment a command is actually talking to must
28
+ // be obvious, and the API/dashboard pair must be visible together — the
29
+ // clean-room tester had a staging API and a production dashboard with
30
+ // nothing on screen to reveal it.
31
+ const environment = resolveEnvironment();
32
+ const apiUrl = resolveApiUrl(options.apiUrl);
33
+ const dashboardUrl = resolveDashboardUrl();
27
34
  if (options.json) {
28
- printJson({ authenticated: true, ...data });
35
+ printJson({
36
+ authenticated: true,
37
+ environment: {
38
+ name: environment.name,
39
+ deployed: environment.deployed,
40
+ apiUrl,
41
+ dashboardUrl,
42
+ docsUrl: environment.docsUrl
43
+ },
44
+ ...data
45
+ });
29
46
  return;
30
47
  }
31
48
  const connectionConnected = data.connection?.status === "CONNECTED";
@@ -40,7 +57,9 @@ async function runStatus(options) {
40
57
  ["Tables available", String(data.tableCounts.available)],
41
58
  ["Tables enabled", String(data.tableCounts.enabled)],
42
59
  ["API keys", `${data.apiKeys.length} active`],
43
- ["API", resolveApiUrl(options.apiUrl)]
60
+ ["Environment", environment.deployed ? environment.name : `${environment.name} (not deployed)`],
61
+ ["API", apiUrl],
62
+ ["Dashboard", dashboardUrl]
44
63
  ]);
45
64
  }
46
65
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAS1D;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CAAC,KAAK;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAiB,CAAC;QACtD,MAAM,oBAAoB,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAsB;IAC7C,MAAM,MAAM,GAAG,yBAAyB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,SAAS,UAAU,CACxC,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,CAAC;IACpE,kBAAkB,CAAC;QACjB,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACvB,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,GAAG,CAAC;QAChD,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B;YACE,sBAAsB;YACtB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB;SAC3F;QACD,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC;QAC7C,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACvC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -85,13 +85,22 @@ async function runDescribe(tableName, options) {
85
85
  const projectId = await resolveActiveProjectId(client, options.project);
86
86
  const { data } = await client.get(`/api/v1/projects/${projectId}/tables/${tableName}/metadata`);
87
87
  if (options.json) {
88
- printJson({
89
- ...data,
90
- metadataGaps: [
91
- "Incoming (one-to-many) relationships are not resolved.",
92
- "Choice/option-set values are not resolved — only which columns are choice-typed."
93
- ]
94
- });
88
+ // Report only gaps that are actually present in THIS response, rather
89
+ // than a hardcoded list of the layer's old limitations. An absent
90
+ // (null/undefined) field means "not resolved"; an empty array means
91
+ // "none exist" — see Sprint #11 P0-4/P0-5.
92
+ const metadataGaps = [];
93
+ if (data.relationships === null || data.relationships === undefined) {
94
+ metadataGaps.push("Relationships were not resolved for this table.");
95
+ }
96
+ const unresolvedChoices = data.columns
97
+ .filter((column) => (column.type === "choice" || column.type === "state" || column.type === "status") &&
98
+ (column.options === null || column.options === undefined))
99
+ .map((column) => column.logicalName);
100
+ if (unresolvedChoices.length > 0) {
101
+ metadataGaps.push(`Choice values were not resolved for: ${unresolvedChoices.join(", ")}.`);
102
+ }
103
+ printJson({ ...data, metadataGaps });
95
104
  return;
96
105
  }
97
106
  printKeyValueBlock([
@@ -99,17 +108,50 @@ async function runDescribe(tableName, options) {
99
108
  ["Logical name", data.logicalName],
100
109
  ["Entity set", data.entitySetName],
101
110
  ["Type", data.isCustomEntity ? "Custom" : "Standard"],
111
+ ["Ownership", data.ownershipType ?? "—"],
102
112
  ["Primary ID", data.primaryIdAttribute],
103
113
  ["Primary name", data.primaryNameAttribute ?? "—"]
104
114
  ]);
105
115
  printLine();
106
116
  printLine("Columns:");
107
- printLine(renderTable(["LOGICAL NAME", "TYPE", "REQUIRED", "LOOKUP TARGET"], data.columns.map((column) => [
117
+ printLine(renderTable(["LOGICAL NAME", "TYPE", "REQUIRED", "SOURCE", "LOOKUP TARGET"], data.columns.map((column) => [
108
118
  column.logicalName,
109
- column.type,
119
+ column.isMultiSelect ? `${column.type} (multi)` : column.type,
110
120
  column.isRequired ? "yes" : "no",
121
+ // Calculated/rollup columns are derived — an agent must not write them.
122
+ column.source && column.source !== "stored" ? column.source : "—",
111
123
  column.lookupTargets?.join(", ") || "—"
112
124
  ])));
125
+ const choiceColumns = data.columns.filter((column) => column.options !== null && column.options !== undefined);
126
+ if (choiceColumns.length > 0) {
127
+ printLine();
128
+ printLine("Choice values:");
129
+ for (const column of choiceColumns) {
130
+ const options = column.options ?? [];
131
+ if (options.length === 0) {
132
+ printLine(`- ${column.logicalName}: (no options defined)`);
133
+ continue;
134
+ }
135
+ printLine(`- ${column.logicalName}:`);
136
+ for (const option of options) {
137
+ printLine(` ${option.value} = ${option.label ?? "(no label)"}`);
138
+ }
139
+ }
140
+ }
141
+ if (data.relationships && data.relationships.length > 0) {
142
+ printLine();
143
+ printLine("Relationships:");
144
+ printLine(renderTable(["KIND", "NAME", "RELATED TABLE", "VIA COLUMN"], data.relationships.map((relationship) => [
145
+ relationship.kind,
146
+ relationship.name,
147
+ relationship.kind === "many-to-many"
148
+ ? (relationship.relatedTable ?? "—")
149
+ : relationship.kind === "many-to-one"
150
+ ? (relationship.referencedTable ?? "—")
151
+ : (relationship.referencingTable ?? "—"),
152
+ relationship.referencingColumn ?? "—"
153
+ ])));
154
+ }
113
155
  if (data.permissions.length > 0) {
114
156
  printLine();
115
157
  printLine("Permissions:");
@@ -122,8 +164,23 @@ async function runDescribe(tableName, options) {
122
164
  (permission.canDelete ? "D" : "-")
123
165
  ])));
124
166
  }
125
- printLine();
126
- printLine("Note: incoming relationships and choice-option values are not resolved yet —");
127
- printLine("only outgoing lookups (above) and which columns are choice-typed are known.");
167
+ // Only report gaps that are real for this table. An empty relationships
168
+ // list means "none exist" and needs no note at all.
169
+ const notes = [];
170
+ if (data.relationships === null || data.relationships === undefined) {
171
+ notes.push("Relationships were not resolved for this table.");
172
+ }
173
+ const unresolvedChoices = data.columns
174
+ .filter((column) => (column.type === "choice" || column.type === "state" || column.type === "status") &&
175
+ (column.options === null || column.options === undefined))
176
+ .map((column) => column.logicalName);
177
+ if (unresolvedChoices.length > 0) {
178
+ notes.push(`Choice values were not resolved for: ${unresolvedChoices.join(", ")}.`);
179
+ }
180
+ if (notes.length > 0) {
181
+ printLine();
182
+ for (const note of notes)
183
+ printLine(`Note: ${note}`);
184
+ }
128
185
  }
129
186
  //# sourceMappingURL=tables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/commands/tables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/commands/tables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The canonical AxtraBase environment registry — one place that knows which
3
+ * origins belong together (Sprint #11 P0-2).
4
+ *
5
+ * The clean-room test failed because the API origin and the dashboard origin
6
+ * were resolved wholly independently: pointing the CLI at staging left the
7
+ * dashboard on the production default, so `axtrabase login` opened an origin
8
+ * that isn't deployed and the real staging dashboard had to be found
9
+ * out-of-band. Origins are therefore paired here as a unit, and never
10
+ * defaulted one at a time.
11
+ *
12
+ * Staging runs on axtraxia.com (the trading-name domain the platform is
13
+ * deployed under today); production is reserved on axtrabase.com and does
14
+ * NOT exist yet — see PROGRESS.md. `DEFAULT_ENVIRONMENT` is staging for
15
+ * exactly that reason: defaulting to an undeployed production is what made
16
+ * a fresh install unusable. Flip it when production is live.
17
+ */
18
+ export interface AxtraEnvironment {
19
+ name: AxtraEnvironmentName;
20
+ apiUrl: string;
21
+ dashboardUrl: string;
22
+ docsUrl: string;
23
+ /** False while the environment has no deployment behind it, so CLI output can say so plainly. */
24
+ deployed: boolean;
25
+ }
26
+ export type AxtraEnvironmentName = "staging" | "production";
27
+ export declare const ENVIRONMENTS: Record<AxtraEnvironmentName, AxtraEnvironment>;
28
+ /**
29
+ * The environment a fresh install talks to. Staging is the only deployed
30
+ * environment today (Sprint #11 P1-14: the supported live environment must
31
+ * be obvious without source-repository knowledge).
32
+ */
33
+ export declare const DEFAULT_ENVIRONMENT: AxtraEnvironmentName;
34
+ export declare const ENVIRONMENT_NAMES: AxtraEnvironmentName[];
35
+ export declare function isEnvironmentName(value: string): value is AxtraEnvironmentName;
36
+ /**
37
+ * Which known environment an origin belongs to, or undefined for a custom
38
+ * origin (a local API, a preview stack). Used to pair a dashboard to an
39
+ * explicitly-set API URL, and to detect a cross-environment mismatch.
40
+ */
41
+ export declare function environmentForApiUrl(apiUrl: string): AxtraEnvironment | undefined;
42
+ export declare function environmentForDashboardUrl(dashboardUrl: string): AxtraEnvironment | undefined;
43
+ //# sourceMappingURL=environments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE5D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAevE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,oBAAgC,CAAC;AAEnE,eAAO,MAAM,iBAAiB,EAAgC,oBAAoB,EAAE,CAAC;AAErF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,oBAAoB,CAE9E;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAGjF;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAG7F"}
@@ -0,0 +1,43 @@
1
+ export const ENVIRONMENTS = {
2
+ staging: {
3
+ name: "staging",
4
+ apiUrl: "https://api-stg.axtraxia.com",
5
+ dashboardUrl: "https://app-stg.axtraxia.com",
6
+ docsUrl: "https://docs-stg.axtraxia.com",
7
+ deployed: true
8
+ },
9
+ production: {
10
+ name: "production",
11
+ apiUrl: "https://api.axtrabase.com",
12
+ dashboardUrl: "https://app.axtrabase.com",
13
+ docsUrl: "https://docs.axtrabase.com",
14
+ deployed: false
15
+ }
16
+ };
17
+ /**
18
+ * The environment a fresh install talks to. Staging is the only deployed
19
+ * environment today (Sprint #11 P1-14: the supported live environment must
20
+ * be obvious without source-repository knowledge).
21
+ */
22
+ export const DEFAULT_ENVIRONMENT = "staging";
23
+ export const ENVIRONMENT_NAMES = Object.keys(ENVIRONMENTS);
24
+ export function isEnvironmentName(value) {
25
+ return ENVIRONMENT_NAMES.includes(value);
26
+ }
27
+ function normaliseOrigin(url) {
28
+ return url.trim().replace(/\/$/, "").toLowerCase();
29
+ }
30
+ /**
31
+ * Which known environment an origin belongs to, or undefined for a custom
32
+ * origin (a local API, a preview stack). Used to pair a dashboard to an
33
+ * explicitly-set API URL, and to detect a cross-environment mismatch.
34
+ */
35
+ export function environmentForApiUrl(apiUrl) {
36
+ const origin = normaliseOrigin(apiUrl);
37
+ return Object.values(ENVIRONMENTS).find((env) => normaliseOrigin(env.apiUrl) === origin);
38
+ }
39
+ export function environmentForDashboardUrl(dashboardUrl) {
40
+ const origin = normaliseOrigin(dashboardUrl);
41
+ return Object.values(ENVIRONMENTS).find((env) => normaliseOrigin(env.dashboardUrl) === origin);
42
+ }
43
+ //# sourceMappingURL=environments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/config/environments.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAC,MAAM,YAAY,GAAmD;IAC1E,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,8BAA8B;QACtC,YAAY,EAAE,8BAA8B;QAC5C,OAAO,EAAE,+BAA+B;QACxC,QAAQ,EAAE,IAAI;KACf;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,2BAA2B;QACzC,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAyB,SAAS,CAAC;AAEnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAA2B,CAAC;AAErF,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,YAAoB;IAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,CAAC;AACjG,CAAC"}
@@ -1,8 +1,29 @@
1
- export declare const DEFAULT_API_URL = "https://api.axtrabase.com";
2
- export declare const DEFAULT_DASHBOARD_URL = "https://app.axtrabase.com";
3
- /** explicit flag > environment variable > saved config > production default (build brief §6). */
1
+ import { type AxtraEnvironment, type AxtraEnvironmentName } from "./environments.js";
2
+ /**
3
+ * Kept as the *default environment's* origins rather than hard-coded
4
+ * production ones, so nothing can reintroduce the Sprint #11 P0-2 split
5
+ * where the API defaulted to one environment and the dashboard to another.
6
+ */
7
+ export declare const DEFAULT_API_URL: string;
8
+ export declare const DEFAULT_DASHBOARD_URL: string;
9
+ /** explicit flag > AXTRABASE_ENV > saved config > DEFAULT_ENVIRONMENT. */
10
+ export declare function resolveEnvironmentName(flagValue?: string): AxtraEnvironmentName;
11
+ export declare function resolveEnvironment(flagValue?: string): AxtraEnvironment;
12
+ /** explicit flag > AXTRABASE_API_URL > saved config > the active environment's API origin. */
4
13
  export declare function resolveApiUrl(flagValue?: string): string;
5
- /** Same precedence as resolveApiUrl — the dashboard is a separate origin from the API, so it gets its own override (see docs/cli.md). */
14
+ /**
15
+ * Resolved as one half of a PAIR, never independently (Sprint #11 P0-2).
16
+ *
17
+ * After the usual explicit sources, the dashboard follows whichever
18
+ * environment the resolved API URL belongs to — so configuring only the API
19
+ * can never again leave the dashboard pointing at a different (or
20
+ * undeployed) environment. A custom API origin with no dashboard override
21
+ * falls back to the active environment's dashboard.
22
+ *
23
+ * An explicit dashboard that belongs to a *different* known environment than
24
+ * the resolved API is a mismatch and throws rather than being silently
25
+ * accepted: that combination cannot produce a working login.
26
+ */
6
27
  export declare function resolveDashboardUrl(flagValue?: string): string;
7
28
  /** explicit flag > AXTRABASE_PROJECT environment variable > saved config (build brief §9, §26). */
8
29
  export declare function resolveProjectId(flagValue?: string): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAC3D,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,yIAAyI;AACzI,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,aAAa,GAAG,SAAS,CAMxD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAA2C,CAAC;AACxE,eAAO,MAAM,qBAAqB,QAAiD,CAAC;AAMpF,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAa/E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAEvE;AAED,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B9D;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEvE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,aAAa,GAAG,SAAS,CAMxD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,SAAS,CAGlD"}
@@ -1,22 +1,70 @@
1
1
  import { CredentialStore } from "./credentials.js";
2
2
  import { ConfigStore } from "./store.js";
3
- export const DEFAULT_API_URL = "https://api.axtrabase.com";
4
- export const DEFAULT_DASHBOARD_URL = "https://app.axtrabase.com";
5
- /** explicit flag > environment variable > saved config > production default (build brief §6). */
3
+ import { CliError } from "../http/errors.js";
4
+ import { DEFAULT_ENVIRONMENT, ENVIRONMENTS, environmentForApiUrl, environmentForDashboardUrl, isEnvironmentName } from "./environments.js";
5
+ /**
6
+ * Kept as the *default environment's* origins rather than hard-coded
7
+ * production ones, so nothing can reintroduce the Sprint #11 P0-2 split
8
+ * where the API defaulted to one environment and the dashboard to another.
9
+ */
10
+ export const DEFAULT_API_URL = ENVIRONMENTS[DEFAULT_ENVIRONMENT].apiUrl;
11
+ export const DEFAULT_DASHBOARD_URL = ENVIRONMENTS[DEFAULT_ENVIRONMENT].dashboardUrl;
12
+ function trimTrailingSlash(value) {
13
+ return value.replace(/\/$/, "");
14
+ }
15
+ /** explicit flag > AXTRABASE_ENV > saved config > DEFAULT_ENVIRONMENT. */
16
+ export function resolveEnvironmentName(flagValue) {
17
+ const raw = flagValue ?? process.env.AXTRABASE_ENV ?? new ConfigStore().read().environment;
18
+ if (raw === undefined)
19
+ return DEFAULT_ENVIRONMENT;
20
+ const value = raw.trim().toLowerCase();
21
+ if (!isEnvironmentName(value)) {
22
+ throw new CliError("AXTRA_CLI_VALIDATION_ERROR", `Unknown AxtraBase environment "${raw}". Expected one of: ${Object.keys(ENVIRONMENTS).join(", ")}.`, { status: 0 });
23
+ }
24
+ return value;
25
+ }
26
+ export function resolveEnvironment(flagValue) {
27
+ return ENVIRONMENTS[resolveEnvironmentName(flagValue)];
28
+ }
29
+ /** explicit flag > AXTRABASE_API_URL > saved config > the active environment's API origin. */
6
30
  export function resolveApiUrl(flagValue) {
7
31
  const value = flagValue ??
8
32
  process.env.AXTRABASE_API_URL ??
9
33
  new ConfigStore().read().apiUrl ??
10
- DEFAULT_API_URL;
11
- return value.replace(/\/$/, "");
34
+ resolveEnvironment().apiUrl;
35
+ return trimTrailingSlash(value);
12
36
  }
13
- /** Same precedence as resolveApiUrl — the dashboard is a separate origin from the API, so it gets its own override (see docs/cli.md). */
37
+ /**
38
+ * Resolved as one half of a PAIR, never independently (Sprint #11 P0-2).
39
+ *
40
+ * After the usual explicit sources, the dashboard follows whichever
41
+ * environment the resolved API URL belongs to — so configuring only the API
42
+ * can never again leave the dashboard pointing at a different (or
43
+ * undeployed) environment. A custom API origin with no dashboard override
44
+ * falls back to the active environment's dashboard.
45
+ *
46
+ * An explicit dashboard that belongs to a *different* known environment than
47
+ * the resolved API is a mismatch and throws rather than being silently
48
+ * accepted: that combination cannot produce a working login.
49
+ */
14
50
  export function resolveDashboardUrl(flagValue) {
15
- const value = flagValue ??
16
- process.env.AXTRABASE_DASHBOARD_URL ??
17
- new ConfigStore().read().dashboardUrl ??
18
- DEFAULT_DASHBOARD_URL;
19
- return value.replace(/\/$/, "");
51
+ const apiUrl = resolveApiUrl();
52
+ const apiEnvironment = environmentForApiUrl(apiUrl);
53
+ const explicit = flagValue ?? process.env.AXTRABASE_DASHBOARD_URL ?? new ConfigStore().read().dashboardUrl;
54
+ if (explicit !== undefined) {
55
+ const dashboardUrl = trimTrailingSlash(explicit);
56
+ const dashboardEnvironment = environmentForDashboardUrl(dashboardUrl);
57
+ if (apiEnvironment &&
58
+ dashboardEnvironment &&
59
+ dashboardEnvironment.name !== apiEnvironment.name) {
60
+ throw new CliError("AXTRA_CLI_ENVIRONMENT_MISMATCH", `The configured API (${apiUrl}) is AxtraBase ${apiEnvironment.name}, but the configured dashboard (${dashboardUrl}) is ${dashboardEnvironment.name}. ` +
61
+ `Logging in against mismatched origins cannot work. Set both to one environment — "axtrabase config set environment ${apiEnvironment.name}" pairs them for you.`, { status: 0 });
62
+ }
63
+ return dashboardUrl;
64
+ }
65
+ // No explicit dashboard: pair it to the API's environment when the API is
66
+ // a known origin, otherwise fall back to the active environment.
67
+ return trimTrailingSlash((apiEnvironment ?? resolveEnvironment()).dashboardUrl);
20
68
  }
21
69
  /** explicit flag > AXTRABASE_PROJECT environment variable > saved config (build brief §9, §26). */
22
70
  export function resolveProjectId(flagValue) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAEjE,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,KAAK,GACT,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM;QAC/B,eAAe,CAAC;IAClB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,yIAAyI;AACzI,MAAM,UAAU,mBAAmB,CAAC,SAAkB;IACpD,MAAM,KAAK,GACT,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACnC,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY;QACrC,qBAAqB,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,gBAAgB,CAAC,SAAkB;IACjD,OAAO,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAkB;IACtD,OAAO,SAAS,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC;AAC9D,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAE/E,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC5C,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EAGlB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC;AAEpF,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACvD,MAAM,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;IAC3F,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC;IAElD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,QAAQ,CAChB,4BAA4B,EAC5B,kCAAkC,GAAG,uBAAuB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACnG,EAAE,MAAM,EAAE,CAAC,EAAE,CACd,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACnD,OAAO,YAAY,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,SAAkB;IAC9C,MAAM,KAAK,GACT,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM;QAC/B,kBAAkB,EAAE,CAAC,MAAM,CAAC;IAC9B,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAkB;IACpD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEpD,MAAM,QAAQ,GACZ,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC;IAE5F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;QACtE,IACE,cAAc;YACd,oBAAoB;YACpB,oBAAoB,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,EACjD,CAAC;YACD,MAAM,IAAI,QAAQ,CAChB,gCAAgC,EAChC,uBAAuB,MAAM,kBAAkB,cAAc,CAAC,IAAI,mCAAmC,YAAY,QAAQ,oBAAoB,CAAC,IAAI,IAAI;gBACpJ,sHAAsH,cAAc,CAAC,IAAI,uBAAuB,EAClK,EAAE,MAAM,EAAE,CAAC,EAAE,CACd,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,0EAA0E;IAC1E,iEAAiE;IACjE,OAAO,iBAAiB,CAAC,CAAC,cAAc,IAAI,kBAAkB,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAClF,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,gBAAgB,CAAC,SAAkB;IACjD,OAAO,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAkB;IACtD,OAAO,SAAS,IAAI,IAAI,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC;AAC9D,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACjD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAE/E,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC5C,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
@@ -1,7 +1,9 @@
1
1
  export interface CliConfig {
2
- /** Overrides the default AxtraBase API origin — see http/base-url.ts for the full precedence order. */
2
+ /** Selects a whole AxtraBase environment (api + dashboard + docs origins together) — see config/environments.ts. Preferred over setting apiUrl/dashboardUrl by hand. */
3
+ environment?: string;
4
+ /** Overrides the active environment's API origin — see http/base-url.ts for the full precedence order. */
3
5
  apiUrl?: string;
4
- /** Where `axtrabase login` sends a user to generate a CLI token. Independent of apiUrl — the dashboard and API are separate origins (see docs/cli.md). */
6
+ /** Overrides the dashboard origin `axtrabase login` sends a user to. Normally unnecessary: the dashboard is paired to the API's environment automatically (Sprint #11 P0-2), and an override belonging to a different environment is rejected rather than silently used. */
5
7
  dashboardUrl?: string;
6
8
  organisationId?: string;
7
9
  organisationSlug?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,uGAAuG;IACvG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0JAA0J;IAC1J,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAeD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,IAAI,IAAI,SAAS;IAiBjB,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAK9B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;IAM5C,+GAA+G;IAC/G,KAAK,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,SAAS;CAMvC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,wKAAwK;IACxK,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4QAA4Q;IAC5Q,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgBD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,IAAI,IAAI,SAAS;IAiBjB,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAK9B,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;IAM5C,+GAA+G;IAC/G,KAAK,CAAC,GAAG,EAAE,MAAM,SAAS,GAAG,SAAS;CAMvC"}
@@ -2,6 +2,7 @@ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { dirname } from "node:path";
3
3
  import { configFilePath } from "./paths.js";
4
4
  const CONFIG_KEYS = [
5
+ "environment",
5
6
  "apiUrl",
6
7
  "dashboardUrl",
7
8
  "organisationId",
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAa5C,MAAM,WAAW,GAAG;IAClB,QAAQ;IACR,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,aAAa;CACkC,CAAC;AAElD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAQ,WAAiC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACtB,IAAI;QACF,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,qIAAqI;YACrI,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAiB;QACrB,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+GAA+G;IAC/G,KAAK,CAAC,GAAoB;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,MAA+B;IAC/C,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAe5C,MAAM,WAAW,GAAG;IAClB,aAAa;IACb,QAAQ;IACR,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,WAAW;IACX,aAAa;CACkC,CAAC;AAElD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAQ,WAAiC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACtB,IAAI;QACF,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,qIAAqI;YACrI,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAiB;QACrB,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,KAAyB;QAC9B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+GAA+G;IAC/G,KAAK,CAAC,GAAoB;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,MAA+B;IAC/C,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEpE,qLAAqL;AACrL,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAwB3D"}
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAEpE,qLAAqL;AACrL,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAgC3D"}
@@ -21,6 +21,11 @@ export function exitCodeForErrorCode(code) {
21
21
  case "AXTRA_API_KEY_REVOKED":
22
22
  case "AXTRA_CLI_NOT_LOGGED_IN":
23
23
  case "AXTRA_CLI_NO_API_KEY":
24
+ case "AXTRA_CLI_NON_INTERACTIVE":
25
+ // AXTRA_CLI_NON_INTERACTIVE is `login` with no terminal to prompt at.
26
+ // Its remedy is supplying a credential (AXTRABASE_CLI_TOKEN), so agents
27
+ // and CI get the same "authentication required" signal they already
28
+ // branch on. See prompt-masked.ts (Sprint #11 P1-10).
24
29
  return EXIT_CODES.AUTHENTICATION_REQUIRED;
25
30
  case "AXTRA_AUTHORISATION_ERROR":
26
31
  case "AXTRA_TABLE_PERMISSION_DENIED":
@@ -33,6 +38,9 @@ export function exitCodeForErrorCode(code) {
33
38
  case "AXTRA_VALIDATION_ERROR":
34
39
  case "AXTRA_CLI_VALIDATION_ERROR":
35
40
  case "AXTRA_CLI_NO_ACTIVE_PROJECT":
41
+ case "AXTRA_CLI_ENVIRONMENT_MISMATCH":
42
+ // A mismatched API/dashboard pair is misconfiguration the caller can
43
+ // fix, not a server-side failure — see config/environments.ts.
36
44
  return EXIT_CODES.INVALID_ARGUMENTS;
37
45
  default:
38
46
  return EXIT_CODES.GENERIC_FAILURE;
@@ -1 +1 @@
1
- {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,CAAC;IAClB,uBAAuB,EAAE,CAAC;IAC1B,oBAAoB,EAAE,CAAC;IACvB,SAAS,EAAE,CAAC;IACZ,oBAAoB,EAAE,CAAC;IACvB,iBAAiB,EAAE,CAAC;CACZ,CAAC;AAIX,qLAAqL;AACrL,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,4BAA4B,CAAC;QAClC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,sBAAsB;YACzB,OAAO,UAAU,CAAC,uBAAuB,CAAC;QAC5C,KAAK,2BAA2B,CAAC;QACjC,KAAK,+BAA+B;YAClC,OAAO,UAAU,CAAC,oBAAoB,CAAC;QACzC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,uBAAuB;YAC1B,OAAO,UAAU,CAAC,SAAS,CAAC;QAC9B,KAAK,4BAA4B;YAC/B,OAAO,UAAU,CAAC,oBAAoB,CAAC;QACzC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,4BAA4B,CAAC;QAClC,KAAK,6BAA6B;YAChC,OAAO,UAAU,CAAC,iBAAiB,CAAC;QACtC;YACE,OAAO,UAAU,CAAC,eAAe,CAAC;IACtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,OAAO,EAAE,CAAC;IACV,eAAe,EAAE,CAAC;IAClB,uBAAuB,EAAE,CAAC;IAC1B,oBAAoB,EAAE,CAAC;IACvB,SAAS,EAAE,CAAC;IACZ,oBAAoB,EAAE,CAAC;IACvB,iBAAiB,EAAE,CAAC;CACZ,CAAC;AAIX,qLAAqL;AACrL,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,4BAA4B,CAAC;QAClC,KAAK,yBAAyB,CAAC;QAC/B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,uBAAuB,CAAC;QAC7B,KAAK,yBAAyB,CAAC;QAC/B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,2BAA2B;YAC9B,sEAAsE;YACtE,wEAAwE;YACxE,oEAAoE;YACpE,sDAAsD;YACtD,OAAO,UAAU,CAAC,uBAAuB,CAAC;QAC5C,KAAK,2BAA2B,CAAC;QACjC,KAAK,+BAA+B;YAClC,OAAO,UAAU,CAAC,oBAAoB,CAAC;QACzC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,uBAAuB;YAC1B,OAAO,UAAU,CAAC,SAAS,CAAC;QAC9B,KAAK,4BAA4B;YAC/B,OAAO,UAAU,CAAC,oBAAoB,CAAC;QACzC,KAAK,wBAAwB,CAAC;QAC9B,KAAK,4BAA4B,CAAC;QAClC,KAAK,6BAA6B,CAAC;QACnC,KAAK,gCAAgC;YACnC,qEAAqE;YACrE,+DAA+D;YAC/D,OAAO,UAAU,CAAC,iBAAiB,CAAC;QACtC;YACE,OAAO,UAAU,CAAC,eAAe,CAAC;IACtC,CAAC;AACH,CAAC"}