@reximo/cli 0.1.0-alpha.2 → 0.1.0-alpha.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.
- package/README.md +124 -5
- package/package.json +3 -2
- package/src/client/generated/index.d.ts +1 -0
- package/src/client/generated/index.js +7 -0
- package/src/client/generated/index.js.map +1 -0
- package/src/client/generated/reximo-api-client.generated.d.ts +306 -0
- package/src/client/generated/reximo-api-client.generated.js +282 -0
- package/src/client/generated/reximo-api-client.generated.js.map +1 -0
- package/src/client/reximo-client.d.ts +101 -1
- package/src/client/reximo-client.js +275 -1
- package/src/client/reximo-client.js.map +1 -1
- package/src/index.d.ts +1 -1
- package/src/index.js +3 -1
- package/src/index.js.map +1 -1
- package/src/lib/config.d.ts +18 -2
- package/src/lib/config.js +61 -10
- package/src/lib/config.js.map +1 -1
- package/src/lib/prompt.d.ts +1 -0
- package/src/lib/prompt.js +6 -0
- package/src/lib/prompt.js.map +1 -0
- package/src/lib/prompts.d.ts +17 -0
- package/src/lib/prompts.js +98 -0
- package/src/lib/prompts.js.map +1 -0
- package/src/lib/run-cli.d.ts +6 -0
- package/src/lib/run-cli.js +441 -20
- package/src/lib/run-cli.js.map +1 -1
|
@@ -1,7 +1,131 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createReximoClient = createReximoClient;
|
|
4
|
+
const generated_1 = require("./generated");
|
|
5
|
+
function extractApiErrorMessage(error, fallback) {
|
|
6
|
+
if (!(error instanceof generated_1.ReximoApiError)) {
|
|
7
|
+
return error instanceof Error ? error.message : fallback;
|
|
8
|
+
}
|
|
9
|
+
const body = error.body;
|
|
10
|
+
if (body && typeof body === 'object') {
|
|
11
|
+
const data = 'data' in body && body.data && typeof body.data === 'object'
|
|
12
|
+
? body.data
|
|
13
|
+
: null;
|
|
14
|
+
const message = data?.['translated'] ?? data?.['message'];
|
|
15
|
+
if (typeof message === 'string' && message.trim().length > 0) {
|
|
16
|
+
return message;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
function unwrapResponseData(response, fallback) {
|
|
22
|
+
if (response && typeof response === 'object' && 'data' in response) {
|
|
23
|
+
const wrapped = response;
|
|
24
|
+
if (wrapped.data !== undefined) {
|
|
25
|
+
return wrapped.data;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (response === null || response === undefined) {
|
|
29
|
+
throw new Error(fallback);
|
|
30
|
+
}
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
function isRecord(value) {
|
|
34
|
+
return typeof value === 'object' && value !== null;
|
|
35
|
+
}
|
|
36
|
+
function normalizePagination(pagination, itemCount) {
|
|
37
|
+
if (isRecord(pagination)) {
|
|
38
|
+
const page = typeof pagination['page'] === 'number' ? pagination['page'] : 1;
|
|
39
|
+
const pageSize = typeof pagination['pageSize'] === 'number' ? pagination['pageSize'] : itemCount;
|
|
40
|
+
const total = typeof pagination['total'] === 'number' ? pagination['total'] : itemCount;
|
|
41
|
+
const totalPages = typeof pagination['totalPages'] === 'number'
|
|
42
|
+
? pagination['totalPages']
|
|
43
|
+
: pageSize > 0
|
|
44
|
+
? Math.ceil(total / pageSize)
|
|
45
|
+
: 0;
|
|
46
|
+
return {
|
|
47
|
+
page,
|
|
48
|
+
pageSize,
|
|
49
|
+
total,
|
|
50
|
+
totalPages,
|
|
51
|
+
hasNext: typeof pagination['hasNext'] === 'boolean' ? pagination['hasNext'] : page < totalPages,
|
|
52
|
+
hasPrevious: typeof pagination['hasPrevious'] === 'boolean' ? pagination['hasPrevious'] : page > 1
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
page: 1,
|
|
57
|
+
pageSize: itemCount,
|
|
58
|
+
total: itemCount,
|
|
59
|
+
totalPages: itemCount > 0 ? 1 : 0,
|
|
60
|
+
hasNext: false,
|
|
61
|
+
hasPrevious: false
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function unwrapPaginatedResponse(response, fallback) {
|
|
65
|
+
if (Array.isArray(response)) {
|
|
66
|
+
return {
|
|
67
|
+
data: response,
|
|
68
|
+
metadata: {
|
|
69
|
+
pagination: normalizePagination(undefined, response.length)
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (!isRecord(response)) {
|
|
74
|
+
throw new Error(fallback);
|
|
75
|
+
}
|
|
76
|
+
const directData = response['data'];
|
|
77
|
+
if (Array.isArray(directData)) {
|
|
78
|
+
return {
|
|
79
|
+
data: directData,
|
|
80
|
+
metadata: {
|
|
81
|
+
pagination: normalizePagination(response['metadata'], directData.length)
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (isRecord(directData) && Array.isArray(directData['data'])) {
|
|
86
|
+
const nestedData = directData['data'];
|
|
87
|
+
return {
|
|
88
|
+
data: nestedData,
|
|
89
|
+
metadata: {
|
|
90
|
+
pagination: normalizePagination(directData['metadata'], nestedData.length)
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
throw new Error(fallback);
|
|
95
|
+
}
|
|
96
|
+
function normalizeProjectSummary(value) {
|
|
97
|
+
if (!isRecord(value)) {
|
|
98
|
+
throw new Error('Project entry is not an object');
|
|
99
|
+
}
|
|
100
|
+
if (typeof value['id'] !== 'number' ||
|
|
101
|
+
typeof value['organizationId'] !== 'number' ||
|
|
102
|
+
typeof value['createdBy'] !== 'number' ||
|
|
103
|
+
typeof value['key'] !== 'string' ||
|
|
104
|
+
typeof value['name'] !== 'string' ||
|
|
105
|
+
(value['visibility'] !== "public" /* ProjectVisibility.Public */ &&
|
|
106
|
+
value['visibility'] !== "private" /* ProjectVisibility.Private */)) {
|
|
107
|
+
throw new Error('Project entry is missing required fields');
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
id: value['id'],
|
|
111
|
+
organizationId: value['organizationId'],
|
|
112
|
+
createdBy: value['createdBy'],
|
|
113
|
+
key: value['key'],
|
|
114
|
+
name: value['name'],
|
|
115
|
+
visibility: value['visibility'],
|
|
116
|
+
isMember: typeof value['isMember'] === 'boolean' ? value['isMember'] : undefined,
|
|
117
|
+
createdAt: typeof value['createdAt'] === 'string'
|
|
118
|
+
? value['createdAt']
|
|
119
|
+
: new Date(String(value['createdAt'])).toISOString(),
|
|
120
|
+
updatedAt: typeof value['updatedAt'] === 'string'
|
|
121
|
+
? value['updatedAt']
|
|
122
|
+
: new Date(String(value['updatedAt'])).toISOString()
|
|
123
|
+
};
|
|
124
|
+
}
|
|
4
125
|
function createReximoClient(config) {
|
|
126
|
+
const apiClient = new generated_1.ReximoApiClient({
|
|
127
|
+
baseUrl: config.apiBaseUrl ?? ''
|
|
128
|
+
});
|
|
5
129
|
return {
|
|
6
130
|
isConfigured() {
|
|
7
131
|
return Boolean(config.apiBaseUrl);
|
|
@@ -9,9 +133,159 @@ function createReximoClient(config) {
|
|
|
9
133
|
describeTarget() {
|
|
10
134
|
return {
|
|
11
135
|
apiBaseUrl: config.apiBaseUrl,
|
|
12
|
-
|
|
136
|
+
hasAccessToken: Boolean(config.accessToken),
|
|
137
|
+
hasRefreshToken: Boolean(config.refreshToken),
|
|
138
|
+
organizationId: config.organizationId,
|
|
13
139
|
profile: config.profile
|
|
14
140
|
};
|
|
141
|
+
},
|
|
142
|
+
async login(input) {
|
|
143
|
+
try {
|
|
144
|
+
const request = {
|
|
145
|
+
email: input.email,
|
|
146
|
+
password: input.password
|
|
147
|
+
};
|
|
148
|
+
const response = await apiClient.login(request, {
|
|
149
|
+
tenantId: input.organizationId
|
|
150
|
+
});
|
|
151
|
+
return unwrapResponseData(response, 'Login response missing data object');
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
throw new Error(extractApiErrorMessage(error, 'Login request failed'));
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
async refreshToken(input) {
|
|
158
|
+
try {
|
|
159
|
+
const request = {
|
|
160
|
+
refreshToken: input.refreshToken
|
|
161
|
+
};
|
|
162
|
+
const response = await apiClient.refreshToken(request, {
|
|
163
|
+
tenantId: input.organizationId
|
|
164
|
+
});
|
|
165
|
+
return unwrapResponseData(response, 'Refresh token response missing data object');
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
throw new Error(extractApiErrorMessage(error, 'Refresh token request failed'));
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
async getMyOrganizations(input) {
|
|
172
|
+
try {
|
|
173
|
+
const response = await apiClient.getMyOrganizations({
|
|
174
|
+
accessToken: input.accessToken,
|
|
175
|
+
tenantId: input.organizationId
|
|
176
|
+
});
|
|
177
|
+
if (!Array.isArray(response.data)) {
|
|
178
|
+
throw new Error('Organization response missing data array');
|
|
179
|
+
}
|
|
180
|
+
return response.data;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
throw new Error(extractApiErrorMessage(error, 'Get organizations request failed'));
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
async getMe(input) {
|
|
187
|
+
try {
|
|
188
|
+
const response = await apiClient.getMe({
|
|
189
|
+
accessToken: input.accessToken,
|
|
190
|
+
tenantId: input.organizationId
|
|
191
|
+
});
|
|
192
|
+
if (!response || typeof response !== 'object' || !('data' in response)) {
|
|
193
|
+
throw new Error('Profile response missing data object');
|
|
194
|
+
}
|
|
195
|
+
return response.data;
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
throw new Error(extractApiErrorMessage(error, 'Get current user request failed'));
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
async logout(input) {
|
|
202
|
+
try {
|
|
203
|
+
const response = await apiClient.logout({
|
|
204
|
+
refreshToken: input.refreshToken
|
|
205
|
+
}, {
|
|
206
|
+
accessToken: input.accessToken,
|
|
207
|
+
tenantId: input.organizationId
|
|
208
|
+
});
|
|
209
|
+
return unwrapResponseData(response, 'Logout response missing data object');
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
throw new Error(extractApiErrorMessage(error, 'Logout request failed'));
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
async listIssues(input) {
|
|
216
|
+
try {
|
|
217
|
+
const response = await apiClient.listIssues({
|
|
218
|
+
...input,
|
|
219
|
+
tenantId: input.organizationId
|
|
220
|
+
});
|
|
221
|
+
return unwrapPaginatedResponse(response, 'Issue list response missing data array');
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
throw new Error(extractApiErrorMessage(error, 'List issues request failed'));
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
async createIssue(input) {
|
|
228
|
+
try {
|
|
229
|
+
const response = await apiClient.createIssue(input.issue, {
|
|
230
|
+
accessToken: input.accessToken,
|
|
231
|
+
tenantId: input.organizationId
|
|
232
|
+
});
|
|
233
|
+
return unwrapResponseData(response, 'Create issue response missing data object');
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
throw new Error(extractApiErrorMessage(error, 'Create issue request failed'));
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
async getIssue(input) {
|
|
240
|
+
try {
|
|
241
|
+
const response = await apiClient.getIssue(input.issueId, {
|
|
242
|
+
accessToken: input.accessToken,
|
|
243
|
+
tenantId: input.organizationId
|
|
244
|
+
});
|
|
245
|
+
return unwrapResponseData(response, 'Get issue response missing data object');
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
throw new Error(extractApiErrorMessage(error, 'Get issue request failed'));
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
async updateIssue(input) {
|
|
252
|
+
try {
|
|
253
|
+
const response = await apiClient.updateIssue(input.issueId, input.issue, {
|
|
254
|
+
accessToken: input.accessToken,
|
|
255
|
+
tenantId: input.organizationId
|
|
256
|
+
});
|
|
257
|
+
return unwrapResponseData(response, 'Update issue response missing data object');
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
throw new Error(extractApiErrorMessage(error, 'Update issue request failed'));
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
async deleteIssue(input) {
|
|
264
|
+
try {
|
|
265
|
+
await apiClient.deleteIssue(input.issueId, {
|
|
266
|
+
accessToken: input.accessToken,
|
|
267
|
+
tenantId: input.organizationId
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
throw new Error(extractApiErrorMessage(error, 'Delete issue request failed'));
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
async listProjects(input) {
|
|
275
|
+
try {
|
|
276
|
+
const response = await apiClient.listProjects({
|
|
277
|
+
...input,
|
|
278
|
+
tenantId: input.organizationId
|
|
279
|
+
});
|
|
280
|
+
const unwrapped = unwrapPaginatedResponse(response, 'Project list response missing data array');
|
|
281
|
+
return {
|
|
282
|
+
data: unwrapped.data.map((project) => normalizeProjectSummary(project)),
|
|
283
|
+
metadata: unwrapped.metadata
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
throw new Error(extractApiErrorMessage(error, 'List projects request failed'));
|
|
288
|
+
}
|
|
15
289
|
}
|
|
16
290
|
};
|
|
17
291
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reximo-client.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/client/reximo-client.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reximo-client.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/client/reximo-client.ts"],"names":[],"mappings":"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"}
|
package/src/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { runCli, type CliDependencies } from './lib/run-cli';
|
|
2
|
-
export { loadResolvedConfig, getDefaultConfigPath, type LoadResolvedConfigOptions, type ResolvedConfig } from './lib/config';
|
|
2
|
+
export { DEFAULT_API_BASE_URL, loadResolvedConfig, getDefaultConfigPath, saveProfileConfig, type LoadResolvedConfigOptions, type PersistedConfigFile, type PersistedProfileConfig, type ResolvedConfig } from './lib/config';
|
|
3
3
|
export { createReximoClient, type ReximoClient } from './client/reximo-client';
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createReximoClient = exports.getDefaultConfigPath = exports.loadResolvedConfig = exports.runCli = void 0;
|
|
3
|
+
exports.createReximoClient = exports.saveProfileConfig = exports.getDefaultConfigPath = exports.loadResolvedConfig = exports.DEFAULT_API_BASE_URL = exports.runCli = void 0;
|
|
4
4
|
var run_cli_1 = require("./lib/run-cli");
|
|
5
5
|
Object.defineProperty(exports, "runCli", { enumerable: true, get: function () { return run_cli_1.runCli; } });
|
|
6
6
|
var config_1 = require("./lib/config");
|
|
7
|
+
Object.defineProperty(exports, "DEFAULT_API_BASE_URL", { enumerable: true, get: function () { return config_1.DEFAULT_API_BASE_URL; } });
|
|
7
8
|
Object.defineProperty(exports, "loadResolvedConfig", { enumerable: true, get: function () { return config_1.loadResolvedConfig; } });
|
|
8
9
|
Object.defineProperty(exports, "getDefaultConfigPath", { enumerable: true, get: function () { return config_1.getDefaultConfigPath; } });
|
|
10
|
+
Object.defineProperty(exports, "saveProfileConfig", { enumerable: true, get: function () { return config_1.saveProfileConfig; } });
|
|
9
11
|
var reximo_client_1 = require("./client/reximo-client");
|
|
10
12
|
Object.defineProperty(exports, "createReximoClient", { enumerable: true, get: function () { return reximo_client_1.createReximoClient; } });
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/reximo-cli/src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,iGAAA,MAAM,OAAA;AACf,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/reximo-cli/src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,iGAAA,MAAM,OAAA;AACf,uCASsB;AARpB,8GAAA,oBAAoB,OAAA;AACpB,4GAAA,kBAAkB,OAAA;AAClB,8GAAA,oBAAoB,OAAA;AACpB,2GAAA,iBAAiB,OAAA;AAMnB,wDAA+E;AAAtE,mHAAA,kBAAkB,OAAA"}
|
package/src/lib/config.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export type LoadResolvedConfigOptions = {
|
|
|
2
2
|
env?: NodeJS.ProcessEnv;
|
|
3
3
|
homeDirectory?: string;
|
|
4
4
|
};
|
|
5
|
+
export declare const DEFAULT_API_BASE_URL = "https://api.reximo.app";
|
|
5
6
|
export declare const enum ConfigSource {
|
|
6
7
|
Env = "env",
|
|
7
8
|
Config = "config",
|
|
@@ -13,14 +14,29 @@ export type ResolvedConfig = {
|
|
|
13
14
|
configPath: string;
|
|
14
15
|
configFileFound: boolean;
|
|
15
16
|
apiBaseUrl: string | null;
|
|
16
|
-
|
|
17
|
+
accessToken: string | null;
|
|
18
|
+
refreshToken: string | null;
|
|
19
|
+
organizationId: string | null;
|
|
17
20
|
sources: {
|
|
18
21
|
profile: ConfigSource;
|
|
19
22
|
apiBaseUrl: ConfigSource;
|
|
20
|
-
|
|
23
|
+
accessToken: ConfigSource;
|
|
24
|
+
refreshToken: ConfigSource;
|
|
25
|
+
organizationId: ConfigSource;
|
|
21
26
|
configPath: ConfigSource.Env | ConfigSource.Default;
|
|
22
27
|
};
|
|
23
28
|
};
|
|
29
|
+
export type PersistedProfileConfig = {
|
|
30
|
+
apiBaseUrl?: string | null;
|
|
31
|
+
accessToken?: string | null;
|
|
32
|
+
refreshToken?: string | null;
|
|
33
|
+
organizationId?: string | null;
|
|
34
|
+
};
|
|
35
|
+
export type PersistedConfigFile = {
|
|
36
|
+
profile?: string;
|
|
37
|
+
profiles?: Record<string, PersistedProfileConfig>;
|
|
38
|
+
};
|
|
24
39
|
export declare function getDefaultConfigPath(homeDirectory?: string): string;
|
|
25
40
|
export declare function loadResolvedConfig(options?: LoadResolvedConfigOptions): ResolvedConfig;
|
|
41
|
+
export declare function saveProfileConfig(profileConfig: PersistedProfileConfig, options?: LoadResolvedConfigOptions): ResolvedConfig;
|
|
26
42
|
export declare function redactToken(token: string | null, includeSensitive: boolean): string | null;
|
package/src/lib/config.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_API_BASE_URL = void 0;
|
|
3
4
|
exports.getDefaultConfigPath = getDefaultConfigPath;
|
|
4
5
|
exports.loadResolvedConfig = loadResolvedConfig;
|
|
6
|
+
exports.saveProfileConfig = saveProfileConfig;
|
|
5
7
|
exports.redactToken = redactToken;
|
|
6
8
|
const tslib_1 = require("tslib");
|
|
7
9
|
const node_fs_1 = require("node:fs");
|
|
8
10
|
const node_os_1 = require("node:os");
|
|
9
11
|
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
12
|
+
exports.DEFAULT_API_BASE_URL = 'https://api.reximo.app';
|
|
10
13
|
function getDefaultConfigPath(homeDirectory = (0, node_os_1.homedir)()) {
|
|
11
14
|
return node_path_1.default.join(homeDirectory, '.reximo', 'config.json');
|
|
12
15
|
}
|
|
@@ -21,6 +24,10 @@ function readConfigFile(configPath) {
|
|
|
21
24
|
}
|
|
22
25
|
return parsed;
|
|
23
26
|
}
|
|
27
|
+
function writeConfigFile(configPath, configFile) {
|
|
28
|
+
(0, node_fs_1.mkdirSync)(node_path_1.default.dirname(configPath), { recursive: true });
|
|
29
|
+
(0, node_fs_1.writeFileSync)(configPath, `${JSON.stringify(configFile, null, 2)}\n`, 'utf8');
|
|
30
|
+
}
|
|
24
31
|
function getProfileConfig(configFile, profile) {
|
|
25
32
|
return configFile.profiles?.[profile] ?? {};
|
|
26
33
|
}
|
|
@@ -33,6 +40,24 @@ function resolveValueSource(valueFromEnv, valueFromConfig) {
|
|
|
33
40
|
}
|
|
34
41
|
return "unset" /* ConfigSource.Unset */;
|
|
35
42
|
}
|
|
43
|
+
function resolveProfileSource(profileFromEnv, configProfile) {
|
|
44
|
+
if (profileFromEnv) {
|
|
45
|
+
return "env" /* ConfigSource.Env */;
|
|
46
|
+
}
|
|
47
|
+
if (configProfile) {
|
|
48
|
+
return "config" /* ConfigSource.Config */;
|
|
49
|
+
}
|
|
50
|
+
return "default" /* ConfigSource.Default */;
|
|
51
|
+
}
|
|
52
|
+
function resolveApiBaseUrlSource(apiBaseUrlFromEnv, apiBaseUrlFromConfig) {
|
|
53
|
+
if (apiBaseUrlFromEnv) {
|
|
54
|
+
return "env" /* ConfigSource.Env */;
|
|
55
|
+
}
|
|
56
|
+
if (apiBaseUrlFromConfig) {
|
|
57
|
+
return "config" /* ConfigSource.Config */;
|
|
58
|
+
}
|
|
59
|
+
return "default" /* ConfigSource.Default */;
|
|
60
|
+
}
|
|
36
61
|
function loadResolvedConfig(options = {}) {
|
|
37
62
|
const env = options.env ?? process.env;
|
|
38
63
|
const configPathFromEnv = env['REXIMO_CONFIG'];
|
|
@@ -43,25 +68,51 @@ function loadResolvedConfig(options = {}) {
|
|
|
43
68
|
const profile = profileFromEnv ?? configFile.profile ?? 'default';
|
|
44
69
|
const profileConfig = getProfileConfig(configFile, profile);
|
|
45
70
|
const apiBaseUrlFromEnv = env['REXIMO_API_BASE_URL'];
|
|
46
|
-
const
|
|
71
|
+
const accessTokenFromEnv = env['REXIMO_TOKEN'];
|
|
72
|
+
const refreshTokenFromEnv = env['REXIMO_REFRESH_TOKEN'];
|
|
73
|
+
const organizationIdFromEnv = env['REXIMO_ORGANIZATION_ID'];
|
|
74
|
+
const apiBaseUrlFromConfig = profileConfig.apiBaseUrl;
|
|
75
|
+
const accessTokenFromConfig = profileConfig.accessToken ?? profileConfig.token;
|
|
47
76
|
return {
|
|
48
77
|
profile,
|
|
49
78
|
configPath,
|
|
50
79
|
configFileFound,
|
|
51
|
-
apiBaseUrl: apiBaseUrlFromEnv ??
|
|
52
|
-
|
|
80
|
+
apiBaseUrl: apiBaseUrlFromEnv ?? apiBaseUrlFromConfig ?? exports.DEFAULT_API_BASE_URL,
|
|
81
|
+
accessToken: accessTokenFromEnv ?? accessTokenFromConfig ?? null,
|
|
82
|
+
refreshToken: refreshTokenFromEnv ?? profileConfig.refreshToken ?? null,
|
|
83
|
+
organizationId: organizationIdFromEnv ?? profileConfig.organizationId ?? null,
|
|
53
84
|
sources: {
|
|
54
|
-
profile: profileFromEnv
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
apiBaseUrl: resolveValueSource(apiBaseUrlFromEnv, profileConfig.apiBaseUrl),
|
|
60
|
-
token: resolveValueSource(tokenFromEnv, profileConfig.token),
|
|
85
|
+
profile: resolveProfileSource(profileFromEnv, configFile.profile),
|
|
86
|
+
apiBaseUrl: resolveApiBaseUrlSource(apiBaseUrlFromEnv, apiBaseUrlFromConfig),
|
|
87
|
+
accessToken: resolveValueSource(accessTokenFromEnv, accessTokenFromConfig),
|
|
88
|
+
refreshToken: resolveValueSource(refreshTokenFromEnv, profileConfig.refreshToken),
|
|
89
|
+
organizationId: resolveValueSource(organizationIdFromEnv, profileConfig.organizationId),
|
|
61
90
|
configPath: configPathFromEnv ? "env" /* ConfigSource.Env */ : "default" /* ConfigSource.Default */
|
|
62
91
|
}
|
|
63
92
|
};
|
|
64
93
|
}
|
|
94
|
+
function saveProfileConfig(profileConfig, options = {}) {
|
|
95
|
+
const resolved = loadResolvedConfig(options);
|
|
96
|
+
const configFile = readConfigFile(resolved.configPath);
|
|
97
|
+
const profiles = { ...(configFile.profiles ?? {}) };
|
|
98
|
+
const existingProfile = { ...(profiles[resolved.profile] ?? {}) };
|
|
99
|
+
for (const [key, value] of Object.entries(profileConfig)) {
|
|
100
|
+
if (value === undefined) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (value === null) {
|
|
104
|
+
delete existingProfile[key];
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
existingProfile[key] = value;
|
|
108
|
+
}
|
|
109
|
+
profiles[resolved.profile] = existingProfile;
|
|
110
|
+
writeConfigFile(resolved.configPath, {
|
|
111
|
+
profile: configFile.profile ?? resolved.profile,
|
|
112
|
+
profiles
|
|
113
|
+
});
|
|
114
|
+
return loadResolvedConfig(options);
|
|
115
|
+
}
|
|
65
116
|
function redactToken(token, includeSensitive) {
|
|
66
117
|
if (!token) {
|
|
67
118
|
return null;
|
package/src/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { createDefaultPromptAdapter, type PromptAdapter, type PromptChoice } from './prompts';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultPromptAdapter = void 0;
|
|
4
|
+
var prompts_1 = require("./prompts");
|
|
5
|
+
Object.defineProperty(exports, "createDefaultPromptAdapter", { enumerable: true, get: function () { return prompts_1.createDefaultPromptAdapter; } });
|
|
6
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/prompt.ts"],"names":[],"mappings":";;;AAAA,qCAA8F;AAArF,qHAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Writable } from './output';
|
|
2
|
+
export type PromptChoice = {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
};
|
|
6
|
+
export type PromptAdapter = {
|
|
7
|
+
isInteractive(): boolean;
|
|
8
|
+
promptText(label: string): Promise<string>;
|
|
9
|
+
promptPassword(label: string): Promise<string>;
|
|
10
|
+
select(label: string, choices: PromptChoice[]): Promise<string>;
|
|
11
|
+
};
|
|
12
|
+
type CreateDefaultPromptAdapterOptions = {
|
|
13
|
+
stdin: NodeJS.ReadStream;
|
|
14
|
+
stdout: Writable;
|
|
15
|
+
};
|
|
16
|
+
export declare function createDefaultPromptAdapter(options: CreateDefaultPromptAdapterOptions): PromptAdapter;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultPromptAdapter = createDefaultPromptAdapter;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const node_readline_1 = tslib_1.__importDefault(require("node:readline"));
|
|
6
|
+
const promises_1 = require("node:readline/promises");
|
|
7
|
+
function trimAnswer(answer) {
|
|
8
|
+
return answer.trim();
|
|
9
|
+
}
|
|
10
|
+
async function askQuestion(stdin, stdout, message) {
|
|
11
|
+
const rl = (0, promises_1.createInterface)({
|
|
12
|
+
input: stdin,
|
|
13
|
+
output: stdout
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
return trimAnswer(await rl.question(message));
|
|
17
|
+
}
|
|
18
|
+
finally {
|
|
19
|
+
rl.close();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async function askHiddenQuestion(stdin, stdout, message) {
|
|
23
|
+
if (!stdin.isTTY || typeof stdin.setRawMode !== 'function') {
|
|
24
|
+
return askQuestion(stdin, stdout, message);
|
|
25
|
+
}
|
|
26
|
+
node_readline_1.default.emitKeypressEvents(stdin);
|
|
27
|
+
const previousRawMode = stdin.isRaw;
|
|
28
|
+
stdin.setRawMode(true);
|
|
29
|
+
stdin.resume();
|
|
30
|
+
stdout.write(message);
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
let value = '';
|
|
33
|
+
const cleanup = () => {
|
|
34
|
+
stdin.removeListener('keypress', onKeypress);
|
|
35
|
+
stdin.setRawMode(previousRawMode ?? false);
|
|
36
|
+
stdin.pause();
|
|
37
|
+
stdout.write('\n');
|
|
38
|
+
};
|
|
39
|
+
const onKeypress = (chunk, key) => {
|
|
40
|
+
if (key.name === 'return' || key.name === 'enter') {
|
|
41
|
+
cleanup();
|
|
42
|
+
resolve(trimAnswer(value));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (key.name === 'backspace') {
|
|
46
|
+
if (value.length > 0) {
|
|
47
|
+
value = value.slice(0, -1);
|
|
48
|
+
stdout.write('\b \b');
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (key.ctrl && key.name === 'c') {
|
|
53
|
+
cleanup();
|
|
54
|
+
reject(new Error('Prompt cancelled'));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (chunk) {
|
|
58
|
+
value += chunk;
|
|
59
|
+
stdout.write('*');
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
stdin.on('keypress', onKeypress);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function createDefaultPromptAdapter(options) {
|
|
66
|
+
const { stdin, stdout } = options;
|
|
67
|
+
return {
|
|
68
|
+
isInteractive() {
|
|
69
|
+
const stdoutWithTty = stdout;
|
|
70
|
+
return Boolean(stdin.isTTY && stdoutWithTty.isTTY);
|
|
71
|
+
},
|
|
72
|
+
promptText(label) {
|
|
73
|
+
return askQuestion(stdin, stdout, `${label}: `);
|
|
74
|
+
},
|
|
75
|
+
promptPassword(label) {
|
|
76
|
+
return askHiddenQuestion(stdin, stdout, `${label}: `);
|
|
77
|
+
},
|
|
78
|
+
async select(label, choices) {
|
|
79
|
+
if (choices.length === 0) {
|
|
80
|
+
throw new Error('No choices available');
|
|
81
|
+
}
|
|
82
|
+
for (const [index, choice] of choices.entries()) {
|
|
83
|
+
stdout.write(`${index + 1}. ${choice.label}\n`);
|
|
84
|
+
}
|
|
85
|
+
const answer = await askQuestion(stdin, stdout, `${label} [1-${choices.length}]: `);
|
|
86
|
+
const selectedIndex = Number.parseInt(answer, 10);
|
|
87
|
+
if (!Number.isInteger(selectedIndex) || selectedIndex < 1 || selectedIndex > choices.length) {
|
|
88
|
+
throw new Error(`Invalid selection: ${answer}`);
|
|
89
|
+
}
|
|
90
|
+
const selectedChoice = choices[selectedIndex - 1];
|
|
91
|
+
if (!selectedChoice) {
|
|
92
|
+
throw new Error(`Invalid selection: ${answer}`);
|
|
93
|
+
}
|
|
94
|
+
return selectedChoice.value;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../../../packages/reximo-cli/src/lib/prompts.ts"],"names":[],"mappings":"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"}
|