@axtrabase/cli 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -4
- package/dist/api-types.d.ts +34 -0
- package/dist/api-types.d.ts.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +38 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts +62 -0
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +82 -6
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/keys.js +16 -0
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/login.js +14 -0
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/status.js +22 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tables.js +69 -12
- package/dist/commands/tables.js.map +1 -1
- package/dist/config/environments.d.ts +43 -0
- package/dist/config/environments.d.ts.map +1 -0
- package/dist/config/environments.js +43 -0
- package/dist/config/environments.js.map +1 -0
- package/dist/config/resolve.d.ts +25 -4
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +59 -11
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/store.d.ts +4 -2
- package/dist/config/store.d.ts.map +1 -1
- package/dist/config/store.js +1 -0
- package/dist/config/store.js.map +1 -1
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +8 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/generators/typescript.d.ts.map +1 -1
- package/dist/generators/typescript.js +23 -6
- package/dist/generators/typescript.js.map +1 -1
- package/dist/prompt-masked.d.ts +3 -1
- package/dist/prompt-masked.d.ts.map +1 -1
- package/dist/prompt-masked.js +23 -2
- package/dist/prompt-masked.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +11 -11
package/dist/commands/tables.js
CHANGED
|
@@ -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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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"}
|
package/dist/config/resolve.d.ts
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
/**
|
|
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,
|
|
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"}
|
package/dist/config/resolve.js
CHANGED
|
@@ -1,22 +1,70 @@
|
|
|
1
1
|
import { CredentialStore } from "./credentials.js";
|
|
2
2
|
import { ConfigStore } from "./store.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/**
|
|
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
|
-
|
|
11
|
-
return value
|
|
34
|
+
resolveEnvironment().apiUrl;
|
|
35
|
+
return trimTrailingSlash(value);
|
|
12
36
|
}
|
|
13
|
-
/**
|
|
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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"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"}
|
package/dist/config/store.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export interface CliConfig {
|
|
2
|
-
/**
|
|
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
|
-
/**
|
|
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,
|
|
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"}
|
package/dist/config/store.js
CHANGED
package/dist/config/store.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/exit-codes.d.ts.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/exit-codes.js
CHANGED
|
@@ -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;
|
package/dist/exit-codes.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/generators/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/generators/typescript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AA4D1E,gIAAgI;AAChI,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAItE;AAwBD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAGhF"}
|
|
@@ -23,6 +23,10 @@ const TS_TYPE_BY_COLUMN_TYPE = {
|
|
|
23
23
|
owner: "string",
|
|
24
24
|
state: "number",
|
|
25
25
|
status: "number",
|
|
26
|
+
// Dataverse serves File/Image content as a base64 string (or a file id) —
|
|
27
|
+
// never a structured object — over the Web API.
|
|
28
|
+
file: "string",
|
|
29
|
+
image: "string",
|
|
26
30
|
unknown: "unknown"
|
|
27
31
|
};
|
|
28
32
|
function toPascalCase(logicalName) {
|
|
@@ -32,10 +36,21 @@ function toPascalCase(logicalName) {
|
|
|
32
36
|
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
33
37
|
.join("");
|
|
34
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Requiredness is part of the schema contract, so it survives into the
|
|
41
|
+
* generated type: a Dataverse-required column is emitted as present and
|
|
42
|
+
* non-nullable, everything else stays optional + nullable (a Dataverse read
|
|
43
|
+
* need not return every column). Emitting required business fields as
|
|
44
|
+
* optional silently told every consumer a value might be absent when the
|
|
45
|
+
* platform guarantees it (Sprint #11 P1-8).
|
|
46
|
+
*/
|
|
35
47
|
function fieldLine(column) {
|
|
36
48
|
const tsType = TS_TYPE_BY_COLUMN_TYPE[column.type] ?? "unknown";
|
|
37
|
-
|
|
38
|
-
|
|
49
|
+
// The primary key is always present; a required column is guaranteed by
|
|
50
|
+
// Dataverse to hold a value.
|
|
51
|
+
const alwaysPresent = column.isPrimaryId || column.isRequired;
|
|
52
|
+
const optional = alwaysPresent ? "" : "?";
|
|
53
|
+
const nullable = alwaysPresent ? "" : " | null";
|
|
39
54
|
return ` ${column.logicalName}${optional}: ${tsType}${nullable};`;
|
|
40
55
|
}
|
|
41
56
|
/** Generates a single `export interface` for one table's columns, over metadata fetched via HTTP (never Dataverse directly). */
|
|
@@ -55,10 +70,12 @@ function generatedHeader(tableNames) {
|
|
|
55
70
|
" * Generated by `axtrabase schema export --format typescript` — do not edit by hand.",
|
|
56
71
|
` * Tables: ${tableNames.join(", ")}`,
|
|
57
72
|
" *",
|
|
58
|
-
" *
|
|
59
|
-
" *
|
|
60
|
-
" *
|
|
61
|
-
" *
|
|
73
|
+
" * What these interfaces do NOT encode. AxtraBase resolves all of it —",
|
|
74
|
+
" * run `axtrabase tables describe <table>` to see it — it is simply not",
|
|
75
|
+
" * expressed in the generated types:",
|
|
76
|
+
" * - Relationships (many-to-one, one-to-many, many-to-many).",
|
|
77
|
+
" * - Choice option values: a choice column is typed `number` (the",
|
|
78
|
+
" * underlying option value), not a literal union of its known options.",
|
|
62
79
|
" */",
|
|
63
80
|
""
|
|
64
81
|
].join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/generators/typescript.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,sBAAsB,GAA2B;IACrD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,WAAW;SACf,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,MAAmB;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAChE,MAAM,
|
|
1
|
+
{"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/generators/typescript.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,sBAAsB,GAA2B;IACrD,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,0EAA0E;IAC1E,gDAAgD;IAChD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,WAAW;SACf,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,MAAmB;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;IAChE,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC;IAC9D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,OAAO,KAAK,MAAM,CAAC,WAAW,GAAG,QAAQ,KAAK,MAAM,GAAG,QAAQ,GAAG,CAAC;AACrE,CAAC;AAED,gIAAgI;AAChI,MAAM,UAAU,iBAAiB,CAAC,KAA4B;IAC5D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,CAAC,oBAAoB,IAAI,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAAoB;IAC3C,OAAO;QACL,KAAK;QACL,sFAAsF;QACtF,cAAc,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACrC,IAAI;QACJ,wEAAwE;QACxE,yEAAyE;QACzE,sCAAsC;QACtC,8DAA8D;QAC9D,mEAAmE;QACnE,0EAA0E;QAC1E,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA+B;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9F,CAAC"}
|
package/dist/prompt-masked.d.ts
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* brief §5 treats the token as sensitive from the moment it's entered).
|
|
5
5
|
* Falls back to an unmasked `readline` prompt when stdin isn't a TTY (piped
|
|
6
6
|
* input, most test environments) since there's no terminal to mask against
|
|
7
|
-
* and raw mode isn't available there anyway.
|
|
7
|
+
* and raw mode isn't available there anyway. That fallback rejects with
|
|
8
|
+
* `AXTRA_CLI_NON_INTERACTIVE` if stdin closes without an answer, rather than
|
|
9
|
+
* hanging — see promptUnmasked.
|
|
8
10
|
*
|
|
9
11
|
* Control characters (Enter, Backspace, Ctrl-C, Ctrl-D) are matched via
|
|
10
12
|
* `String.fromCharCode` rather than escape-sequence literals in this file's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-masked.d.ts","sourceRoot":"","sources":["../src/prompt-masked.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt-masked.d.ts","sourceRoot":"","sources":["../src/prompt-masked.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDhE"}
|
package/dist/prompt-masked.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createInterface } from "node:readline";
|
|
2
|
+
import { CliError } from "./http/errors.js";
|
|
2
3
|
const ENTER_CHARS = new Set(["\n", "\r"]);
|
|
3
4
|
const BACKSPACE_CHARS = new Set([String.fromCharCode(127), "\b"]);
|
|
4
5
|
const CTRL_C = String.fromCharCode(3);
|
|
@@ -9,7 +10,9 @@ const CTRL_D = String.fromCharCode(4);
|
|
|
9
10
|
* brief §5 treats the token as sensitive from the moment it's entered).
|
|
10
11
|
* Falls back to an unmasked `readline` prompt when stdin isn't a TTY (piped
|
|
11
12
|
* input, most test environments) since there's no terminal to mask against
|
|
12
|
-
* and raw mode isn't available there anyway.
|
|
13
|
+
* and raw mode isn't available there anyway. That fallback rejects with
|
|
14
|
+
* `AXTRA_CLI_NON_INTERACTIVE` if stdin closes without an answer, rather than
|
|
15
|
+
* hanging — see promptUnmasked.
|
|
13
16
|
*
|
|
14
17
|
* Control characters (Enter, Backspace, Ctrl-C, Ctrl-D) are matched via
|
|
15
18
|
* `String.fromCharCode` rather than escape-sequence literals in this file's
|
|
@@ -64,12 +67,30 @@ export function promptMasked(promptText) {
|
|
|
64
67
|
});
|
|
65
68
|
}
|
|
66
69
|
function promptUnmasked(promptText) {
|
|
67
|
-
return new Promise((resolve) => {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
68
71
|
const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: false });
|
|
72
|
+
// readline's `question` callback only ever fires on a completed line, so
|
|
73
|
+
// a stdin that reaches EOF with nothing on it (an agent or CI job running
|
|
74
|
+
// `axtrabase login` with no terminal and no piped answer) would otherwise
|
|
75
|
+
// leave this promise pending forever — the command hung and the caller
|
|
76
|
+
// saw raw Node runtime output instead of an AxtraBase error. Settling on
|
|
77
|
+
// `close` makes that case deliberate. See Sprint #11 P1-10.
|
|
78
|
+
let answered = false;
|
|
69
79
|
rl.question(promptText, (answer) => {
|
|
80
|
+
answered = true;
|
|
70
81
|
rl.close();
|
|
71
82
|
resolve(answer.trim());
|
|
72
83
|
});
|
|
84
|
+
rl.on("close", () => {
|
|
85
|
+
if (answered)
|
|
86
|
+
return;
|
|
87
|
+
reject(new CliError("AXTRA_CLI_NON_INTERACTIVE", "axtrabase login needs an interactive terminal to accept a pasted CLI token, and stdin provided none.\n\n" +
|
|
88
|
+
"For an agent or CI environment, supply the token directly instead of logging in:\n" +
|
|
89
|
+
" export AXTRABASE_CLI_TOKEN=axcli_...\n\n" +
|
|
90
|
+
"The token is read fresh on every command and is never written to disk. " +
|
|
91
|
+
"Create one from the dashboard (`axtrabase config get dashboard-url` shows which environment you are on), " +
|
|
92
|
+
"and revoke it with `axtrabase logout --revoke` when the session is done.", { status: 0 }));
|
|
93
|
+
});
|
|
73
94
|
});
|
|
74
95
|
}
|
|
75
96
|
//# sourceMappingURL=prompt-masked.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-masked.js","sourceRoot":"","sources":["../src/prompt-masked.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-masked.js","sourceRoot":"","sources":["../src/prompt-masked.ts"],"names":[],"mappings":"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"}
|