@copado/agentia-cli 0.6.0-alpha.0 → 0.7.0-alpha.0
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 +1025 -7
- package/dist/commands/auth/get.d.ts +23 -0
- package/dist/commands/auth/get.js +73 -0
- package/dist/commands/auth/get.js.map +1 -0
- package/dist/commands/auth/set.d.ts +21 -0
- package/dist/commands/auth/set.js +113 -0
- package/dist/commands/auth/set.js.map +1 -0
- package/dist/commands/environment/auth/status.d.ts +13 -0
- package/dist/commands/environment/auth/status.js +36 -0
- package/dist/commands/environment/auth/status.js.map +1 -0
- package/dist/commands/environment/auth/web/login.d.ts +15 -0
- package/dist/commands/environment/auth/web/login.js +55 -0
- package/dist/commands/environment/auth/web/login.js.map +1 -0
- package/dist/commands/environment/create.d.ts +22 -0
- package/dist/commands/environment/create.js +41 -0
- package/dist/commands/environment/create.js.map +1 -0
- package/dist/commands/environment/get.d.ts +10 -0
- package/dist/commands/environment/get.js +30 -0
- package/dist/commands/environment/get.js.map +1 -0
- package/dist/commands/environment/list.d.ts +17 -0
- package/dist/commands/environment/list.js +69 -0
- package/dist/commands/environment/list.js.map +1 -0
- package/dist/commands/environment/update.d.ts +23 -0
- package/dist/commands/environment/update.js +70 -0
- package/dist/commands/environment/update.js.map +1 -0
- package/dist/commands/job/get.d.ts +14 -0
- package/dist/commands/job/get.js +33 -0
- package/dist/commands/job/get.js.map +1 -0
- package/dist/commands/job/kill.d.ts +14 -0
- package/dist/commands/job/kill.js +34 -0
- package/dist/commands/job/kill.js.map +1 -0
- package/dist/commands/job/list.d.ts +18 -0
- package/dist/commands/job/list.js +68 -0
- package/dist/commands/job/list.js.map +1 -0
- package/dist/commands/job/pause.d.ts +14 -0
- package/dist/commands/job/pause.js +34 -0
- package/dist/commands/job/pause.js.map +1 -0
- package/dist/commands/job/resume.d.ts +14 -0
- package/dist/commands/job/resume.js +34 -0
- package/dist/commands/job/resume.js.map +1 -0
- package/dist/commands/job/run.d.ts +15 -0
- package/dist/commands/job/run.js +40 -0
- package/dist/commands/job/run.js.map +1 -0
- package/dist/commands/mcp/start.d.ts +7 -0
- package/dist/commands/mcp/start.js +15 -0
- package/dist/commands/mcp/start.js.map +1 -0
- package/dist/commands/metadata/content/compare.d.ts +40 -0
- package/dist/commands/metadata/content/compare.js +127 -0
- package/dist/commands/metadata/content/compare.js.map +1 -0
- package/dist/commands/metadata/content/get.d.ts +39 -0
- package/dist/commands/metadata/content/get.js +158 -0
- package/dist/commands/metadata/content/get.js.map +1 -0
- package/dist/commands/metadata/dependency/list.d.ts +49 -0
- package/dist/commands/metadata/dependency/list.js +216 -0
- package/dist/commands/metadata/dependency/list.js.map +1 -0
- package/dist/commands/metadata/index/compare.d.ts +34 -0
- package/dist/commands/metadata/index/compare.js +100 -0
- package/dist/commands/metadata/index/compare.js.map +1 -0
- package/dist/commands/metadata/list.d.ts +56 -0
- package/dist/commands/metadata/list.js +133 -0
- package/dist/commands/metadata/list.js.map +1 -0
- package/dist/commands/metadata/refresh/deleted.d.ts +15 -0
- package/dist/commands/metadata/refresh/deleted.js +55 -0
- package/dist/commands/metadata/refresh/deleted.js.map +1 -0
- package/dist/commands/metadata/refresh/run.d.ts +23 -0
- package/dist/commands/metadata/refresh/run.js +95 -0
- package/dist/commands/metadata/refresh/run.js.map +1 -0
- package/dist/commands/metadata/refresh/status.d.ts +14 -0
- package/dist/commands/metadata/refresh/status.js +49 -0
- package/dist/commands/metadata/refresh/status.js.map +1 -0
- package/dist/commands/pipeline/connection/list.d.ts +12 -0
- package/dist/commands/pipeline/connection/list.js +39 -0
- package/dist/commands/pipeline/connection/list.js.map +1 -0
- package/dist/commands/pipeline/get.d.ts +14 -0
- package/dist/commands/pipeline/get.js +33 -0
- package/dist/commands/pipeline/get.js.map +1 -0
- package/dist/commands/pipeline/list.d.ts +11 -0
- package/dist/commands/pipeline/list.js +30 -0
- package/dist/commands/pipeline/list.js.map +1 -0
- package/dist/commands/project/default/get.d.ts +21 -0
- package/dist/commands/project/default/get.js +44 -0
- package/dist/commands/project/default/get.js.map +1 -0
- package/dist/commands/project/default/set.d.ts +21 -0
- package/dist/commands/project/default/set.js +55 -0
- package/dist/commands/project/default/set.js.map +1 -0
- package/dist/commands/project/default/unset.d.ts +21 -0
- package/dist/commands/project/default/unset.js +45 -0
- package/dist/commands/project/default/unset.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agentia-command.d.ts +7 -0
- package/dist/lib/agentia-command.js +28 -0
- package/dist/lib/agentia-command.js.map +1 -0
- package/dist/lib/agentia-oauth-error-codes.d.ts +17 -0
- package/dist/lib/agentia-oauth-error-codes.js +30 -0
- package/dist/lib/agentia-oauth-error-codes.js.map +1 -0
- package/dist/lib/assert.d.ts +1 -0
- package/dist/lib/assert.js +7 -0
- package/dist/lib/assert.js.map +1 -0
- package/dist/lib/cicd-gateway.d.ts +57 -0
- package/dist/lib/cicd-gateway.js +221 -0
- package/dist/lib/cicd-gateway.js.map +1 -0
- package/dist/lib/cicd-region.d.ts +4 -0
- package/dist/lib/cicd-region.js +8 -0
- package/dist/lib/cicd-region.js.map +1 -0
- package/dist/lib/credential-store.d.ts +18 -0
- package/dist/lib/credential-store.js +43 -0
- package/dist/lib/credential-store.js.map +1 -0
- package/dist/lib/defaults-store.d.ts +12 -0
- package/dist/lib/defaults-store.js +142 -0
- package/dist/lib/defaults-store.js.map +1 -0
- package/dist/lib/dependency-from-changes.d.ts +6 -0
- package/dist/lib/dependency-from-changes.js +97 -0
- package/dist/lib/dependency-from-changes.js.map +1 -0
- package/dist/lib/environment-auth-status.d.ts +18 -0
- package/dist/lib/environment-auth-status.js +74 -0
- package/dist/lib/environment-auth-status.js.map +1 -0
- package/dist/lib/environment-auth.d.ts +26 -0
- package/dist/lib/environment-auth.js +150 -0
- package/dist/lib/environment-auth.js.map +1 -0
- package/dist/lib/environment-credential-selection.d.ts +14 -0
- package/dist/lib/environment-credential-selection.js +60 -0
- package/dist/lib/environment-credential-selection.js.map +1 -0
- package/dist/lib/environment-flags.d.ts +81 -0
- package/dist/lib/environment-flags.js +134 -0
- package/dist/lib/environment-flags.js.map +1 -0
- package/dist/lib/environment-types.d.ts +84 -0
- package/dist/lib/environment-types.js +52 -0
- package/dist/lib/environment-types.js.map +1 -0
- package/dist/lib/format.d.ts +5 -0
- package/dist/lib/format.js +8 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/job-types.d.ts +85 -0
- package/dist/lib/job-types.js +115 -0
- package/dist/lib/job-types.js.map +1 -0
- package/dist/lib/loopback-callback-server.d.ts +35 -0
- package/dist/lib/loopback-callback-server.js +162 -0
- package/dist/lib/loopback-callback-server.js.map +1 -0
- package/dist/lib/mcp/redaction.d.ts +2 -0
- package/dist/lib/mcp/redaction.js +24 -0
- package/dist/lib/mcp/redaction.js.map +1 -0
- package/dist/lib/mcp/result.d.ts +37 -0
- package/dist/lib/mcp/result.js +39 -0
- package/dist/lib/mcp/result.js.map +1 -0
- package/dist/lib/mcp/server.d.ts +5 -0
- package/dist/lib/mcp/server.js +24 -0
- package/dist/lib/mcp/server.js.map +1 -0
- package/dist/lib/mcp/tools.d.ts +235 -0
- package/dist/lib/mcp/tools.js +683 -0
- package/dist/lib/mcp/tools.js.map +1 -0
- package/dist/lib/metadata-common.d.ts +159 -0
- package/dist/lib/metadata-common.js +234 -0
- package/dist/lib/metadata-common.js.map +1 -0
- package/dist/lib/metadata-refresh.d.ts +68 -0
- package/dist/lib/metadata-refresh.js +104 -0
- package/dist/lib/metadata-refresh.js.map +1 -0
- package/dist/lib/open-browser.d.ts +8 -0
- package/dist/lib/open-browser.js +40 -0
- package/dist/lib/open-browser.js.map +1 -0
- package/dist/lib/pipeline-flags.d.ts +10 -0
- package/dist/lib/pipeline-flags.js +18 -0
- package/dist/lib/pipeline-flags.js.map +1 -0
- package/dist/lib/pipeline-types.d.ts +84 -0
- package/dist/lib/pipeline-types.js +67 -0
- package/dist/lib/pipeline-types.js.map +1 -0
- package/dist/lib/project-default-flags.d.ts +41 -0
- package/dist/lib/project-default-flags.js +82 -0
- package/dist/lib/project-default-flags.js.map +1 -0
- package/dist/lib/project-defaults.d.ts +23 -0
- package/dist/lib/project-defaults.js +51 -0
- package/dist/lib/project-defaults.js.map +1 -0
- package/dist/lib/user-context-types.d.ts +12 -0
- package/dist/lib/user-context-types.js +2 -0
- package/dist/lib/user-context-types.js.map +1 -0
- package/oclif.manifest.json +2315 -2
- package/package.json +5 -3
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import * as https from 'node:https';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { URL } from 'node:url';
|
|
4
|
+
import { v7 as uuidv7 } from 'uuid';
|
|
5
|
+
import { CICD_REGIONS, cicdBaseUrl } from './cicd-region.js';
|
|
6
|
+
import { getCicdBaseUrl, getCredential } from './credential-store.js';
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
const packageJson = require('../../package.json');
|
|
9
|
+
const CICD_API_PATH = '/json/v1/webhook/cicd-api';
|
|
10
|
+
const CICD_VALIDATION_ENDPOINT = '/health';
|
|
11
|
+
export function gatewayUserAgent() {
|
|
12
|
+
return `agentia-cli/${packageJson.version}`;
|
|
13
|
+
}
|
|
14
|
+
export function createTransactionId() {
|
|
15
|
+
return uuidv7();
|
|
16
|
+
}
|
|
17
|
+
export function normalizeCicdBaseUrl(value) {
|
|
18
|
+
let url;
|
|
19
|
+
try {
|
|
20
|
+
url = new URL(value);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error('CICD base URL must be a valid absolute HTTPS URL.');
|
|
24
|
+
}
|
|
25
|
+
if (url.protocol !== 'https:') {
|
|
26
|
+
throw new Error('CICD base URL must use HTTPS.');
|
|
27
|
+
}
|
|
28
|
+
return url.origin;
|
|
29
|
+
}
|
|
30
|
+
function extractCicdErrorDetailMessage(details) {
|
|
31
|
+
if (details === undefined) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(details)) {
|
|
35
|
+
const messages = details
|
|
36
|
+
.map((detail) => detail?.message)
|
|
37
|
+
.filter((message) => typeof message === 'string' && message.trim().length > 0);
|
|
38
|
+
return messages.length > 0 ? messages.join('\n') : undefined;
|
|
39
|
+
}
|
|
40
|
+
if (typeof details.message === 'string' && details.message.trim().length > 0) {
|
|
41
|
+
return details.message;
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
export function formatCicdGatewayError(status, raw) {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(raw);
|
|
48
|
+
const detailMessage = extractCicdErrorDetailMessage(parsed.data?.details);
|
|
49
|
+
const message = detailMessage ?? parsed.message;
|
|
50
|
+
if (message !== undefined && message.trim().length > 0) {
|
|
51
|
+
return new Error(message);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Fall through to the generic error below.
|
|
56
|
+
}
|
|
57
|
+
return new Error(`CICD Gateway request failed (${status}): ${raw}`);
|
|
58
|
+
}
|
|
59
|
+
function createCicdGatewayError(parsed) {
|
|
60
|
+
const detailMessage = extractCicdErrorDetailMessage(parsed.data?.details);
|
|
61
|
+
const message = detailMessage ?? parsed.message;
|
|
62
|
+
if (message !== undefined && message.trim().length > 0) {
|
|
63
|
+
return new Error(message);
|
|
64
|
+
}
|
|
65
|
+
return new Error('CICD Gateway request failed.');
|
|
66
|
+
}
|
|
67
|
+
function buildOuterHeaders(transactionId) {
|
|
68
|
+
return {
|
|
69
|
+
'User-Agent': gatewayUserAgent(),
|
|
70
|
+
'x-transaction-id': transactionId,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function cicdApiUrl(serverUrl, apiKey) {
|
|
74
|
+
const endpoint = new URL(CICD_API_PATH, serverUrl);
|
|
75
|
+
endpoint.searchParams.set('api_key', apiKey);
|
|
76
|
+
return endpoint;
|
|
77
|
+
}
|
|
78
|
+
export function maskedCicdApiUrl(serverUrl) {
|
|
79
|
+
const endpoint = new URL(CICD_API_PATH, serverUrl);
|
|
80
|
+
endpoint.searchParams.set('api_key', '<masked>');
|
|
81
|
+
return endpoint.toString();
|
|
82
|
+
}
|
|
83
|
+
function defaultHttpsJsonRequest(url, method, headers, body) {
|
|
84
|
+
const payload = body === undefined ? '' : JSON.stringify(body);
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
const req = https.request({
|
|
87
|
+
headers: {
|
|
88
|
+
Accept: 'application/json',
|
|
89
|
+
'Content-Length': Buffer.byteLength(payload).toString(),
|
|
90
|
+
'Content-Type': 'application/json',
|
|
91
|
+
...headers,
|
|
92
|
+
},
|
|
93
|
+
hostname: url.hostname,
|
|
94
|
+
method,
|
|
95
|
+
path: `${url.pathname}${url.search}`,
|
|
96
|
+
}, (res) => {
|
|
97
|
+
const chunks = [];
|
|
98
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
99
|
+
res.on('end', () => {
|
|
100
|
+
const raw = Buffer.concat(chunks).toString('utf8');
|
|
101
|
+
const status = res.statusCode ?? 0;
|
|
102
|
+
if (status >= 400) {
|
|
103
|
+
reject(formatCicdGatewayError(status, raw));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
resolve(raw);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
req.on('error', (error) => reject(error));
|
|
110
|
+
req.write(payload);
|
|
111
|
+
req.end();
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
let httpRequestFn = defaultHttpsJsonRequest;
|
|
115
|
+
function resolveCicdCredentials() {
|
|
116
|
+
const apiKey = getCredential('cicd');
|
|
117
|
+
if (apiKey === null || apiKey.trim().length === 0) {
|
|
118
|
+
throw new Error('CICD API key is not configured. Run `agentia auth set --cicd <key> [--region <region> | --custom-url <url>]`.');
|
|
119
|
+
}
|
|
120
|
+
const baseUrl = getCicdBaseUrl();
|
|
121
|
+
if (baseUrl === null) {
|
|
122
|
+
throw new Error('CICD endpoint is not configured. Run `agentia auth set --cicd <key> [--region <region> | --custom-url <url>]`.');
|
|
123
|
+
}
|
|
124
|
+
return { apiKey, baseUrl };
|
|
125
|
+
}
|
|
126
|
+
function unwrapResponse(parsed) {
|
|
127
|
+
const data = (parsed && typeof parsed === 'object' && 'data' in parsed ? parsed.data : undefined) ?? parsed.result;
|
|
128
|
+
if (data === undefined) {
|
|
129
|
+
return parsed;
|
|
130
|
+
}
|
|
131
|
+
return data;
|
|
132
|
+
}
|
|
133
|
+
async function executeRequest(credentials, request, onDebugRequest) {
|
|
134
|
+
const raw = await sendRequest(credentials, request, onDebugRequest);
|
|
135
|
+
let parsed;
|
|
136
|
+
try {
|
|
137
|
+
parsed = JSON.parse(raw);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
throw new Error(`CICD Gateway returned non-JSON response: ${raw}`);
|
|
141
|
+
}
|
|
142
|
+
if (parsed.status === 'error') {
|
|
143
|
+
throw createCicdGatewayError(parsed);
|
|
144
|
+
}
|
|
145
|
+
return unwrapResponse(parsed);
|
|
146
|
+
}
|
|
147
|
+
async function sendRequest(credentials, request, onDebugRequest) {
|
|
148
|
+
const endpoint = cicdApiUrl(credentials.baseUrl, credentials.apiKey);
|
|
149
|
+
const transactionId = createTransactionId();
|
|
150
|
+
const outerHeaders = buildOuterHeaders(transactionId);
|
|
151
|
+
if (onDebugRequest) {
|
|
152
|
+
onDebugRequest({
|
|
153
|
+
body: request,
|
|
154
|
+
headers: {
|
|
155
|
+
Accept: 'application/json',
|
|
156
|
+
'Content-Type': 'application/json',
|
|
157
|
+
...outerHeaders,
|
|
158
|
+
},
|
|
159
|
+
method: 'POST',
|
|
160
|
+
url: maskedCicdApiUrl(credentials.baseUrl),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return httpRequestFn(endpoint, 'POST', outerHeaders, request);
|
|
164
|
+
}
|
|
165
|
+
export async function discoverCicdBaseUrl(apiKey) {
|
|
166
|
+
for (const region of CICD_REGIONS) {
|
|
167
|
+
const baseUrl = cicdBaseUrl(region);
|
|
168
|
+
try {
|
|
169
|
+
// Sequential probing is intentional: stop at the first region that validates.
|
|
170
|
+
// eslint-disable-next-line no-await-in-loop
|
|
171
|
+
await validateCredentialsAtBaseUrl(apiKey, baseUrl);
|
|
172
|
+
return baseUrl;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
throw new Error('CICD API key could not be validated. Specify --region or --custom-url.');
|
|
179
|
+
}
|
|
180
|
+
export async function resolveAndValidateCicdEndpoint(apiKey, options) {
|
|
181
|
+
if (options.customUrl !== undefined) {
|
|
182
|
+
const baseUrl = normalizeCicdBaseUrl(options.customUrl);
|
|
183
|
+
await validateCredentialsAtBaseUrl(apiKey, baseUrl);
|
|
184
|
+
return baseUrl;
|
|
185
|
+
}
|
|
186
|
+
if (options.region !== undefined) {
|
|
187
|
+
const baseUrl = cicdBaseUrl(options.region);
|
|
188
|
+
await validateCredentialsAtBaseUrl(apiKey, baseUrl);
|
|
189
|
+
return baseUrl;
|
|
190
|
+
}
|
|
191
|
+
return discoverCicdBaseUrl(apiKey);
|
|
192
|
+
}
|
|
193
|
+
async function validateCredentialsAtBaseUrl(apiKey, baseUrl) {
|
|
194
|
+
await sendRequest({
|
|
195
|
+
apiKey,
|
|
196
|
+
baseUrl,
|
|
197
|
+
}, {
|
|
198
|
+
endpoint: CICD_VALIDATION_ENDPOINT,
|
|
199
|
+
method: 'GET',
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// Test-only hook
|
|
203
|
+
export function setHttpRequestForTests(requestFn) {
|
|
204
|
+
httpRequestFn = requestFn;
|
|
205
|
+
}
|
|
206
|
+
// Test-only hook
|
|
207
|
+
export function resetHttpRequestForTests() {
|
|
208
|
+
httpRequestFn = defaultHttpsJsonRequest;
|
|
209
|
+
}
|
|
210
|
+
export class CicdGateway {
|
|
211
|
+
static async call(request, onDebugRequest) {
|
|
212
|
+
return executeRequest(resolveCicdCredentials(), request, onDebugRequest);
|
|
213
|
+
}
|
|
214
|
+
static async resolveAndValidateEndpoint(apiKey, options) {
|
|
215
|
+
return resolveAndValidateCicdEndpoint(apiKey, options);
|
|
216
|
+
}
|
|
217
|
+
static async validateCredentials(apiKey, baseUrl) {
|
|
218
|
+
await validateCredentialsAtBaseUrl(apiKey, baseUrl);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=cicd-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cicd-gateway.js","sourceRoot":"","sources":["../../src/lib/cicd-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const CICD_REGIONS: readonly ["na", "emea", "emea2", "apac", "apac2"];
|
|
2
|
+
export type CicdRegion = (typeof CICD_REGIONS)[number];
|
|
3
|
+
export declare function isCicdRegion(value: string): value is CicdRegion;
|
|
4
|
+
export declare function cicdBaseUrl(region: CicdRegion): string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const CICD_REGIONS = ['na', 'emea', 'emea2', 'apac', 'apac2'];
|
|
2
|
+
export function isCicdRegion(value) {
|
|
3
|
+
return CICD_REGIONS.includes(value);
|
|
4
|
+
}
|
|
5
|
+
export function cicdBaseUrl(region) {
|
|
6
|
+
return `https://${region}.api.copado.com`;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=cicd-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cicd-region.js","sourceRoot":"","sources":["../../src/lib/cicd-region.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAI7E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAQ,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const KEYRING_SERVICE = "agentia-cli";
|
|
2
|
+
export type CredentialType = 'cicd' | 'crt';
|
|
3
|
+
export declare const ALL_CREDENTIAL_TYPES: CredentialType[];
|
|
4
|
+
export interface KeyringEntry {
|
|
5
|
+
deletePassword(): boolean;
|
|
6
|
+
getPassword(): null | string;
|
|
7
|
+
setPassword(password: string): void;
|
|
8
|
+
}
|
|
9
|
+
export type EntryFactory = (service: string, account: string) => KeyringEntry;
|
|
10
|
+
export declare function setCredential(type: CredentialType, secret: string): void;
|
|
11
|
+
export declare function getCredential(type: CredentialType): null | string;
|
|
12
|
+
export declare function deleteCredential(type: CredentialType): boolean;
|
|
13
|
+
export declare function setCicdBaseUrl(baseUrl: string): void;
|
|
14
|
+
export declare function getCicdBaseUrl(): null | string;
|
|
15
|
+
export declare function credentialLabel(type: CredentialType): string;
|
|
16
|
+
export declare function maskSecret(secret: string): string;
|
|
17
|
+
export declare function setEntryFactoryForTests(factory: EntryFactory): void;
|
|
18
|
+
export declare function resetEntryFactoryForTests(): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Entry } from '@napi-rs/keyring';
|
|
2
|
+
export const KEYRING_SERVICE = 'agentia-cli';
|
|
3
|
+
export const ALL_CREDENTIAL_TYPES = ['cicd', 'crt'];
|
|
4
|
+
const CREDENTIAL_ACCOUNTS = {
|
|
5
|
+
cicd: 'copado-cicd-api-key',
|
|
6
|
+
crt: 'copado-crt-pat-token',
|
|
7
|
+
};
|
|
8
|
+
const CICD_BASE_URL_ACCOUNT = 'copado-cicd-base-url';
|
|
9
|
+
const defaultEntryFactory = (service, account) => new Entry(service, account);
|
|
10
|
+
let entryFactory = defaultEntryFactory;
|
|
11
|
+
export function setCredential(type, secret) {
|
|
12
|
+
entryFactory(KEYRING_SERVICE, CREDENTIAL_ACCOUNTS[type]).setPassword(secret);
|
|
13
|
+
}
|
|
14
|
+
export function getCredential(type) {
|
|
15
|
+
return entryFactory(KEYRING_SERVICE, CREDENTIAL_ACCOUNTS[type]).getPassword();
|
|
16
|
+
}
|
|
17
|
+
export function deleteCredential(type) {
|
|
18
|
+
return entryFactory(KEYRING_SERVICE, CREDENTIAL_ACCOUNTS[type]).deletePassword();
|
|
19
|
+
}
|
|
20
|
+
export function setCicdBaseUrl(baseUrl) {
|
|
21
|
+
entryFactory(KEYRING_SERVICE, CICD_BASE_URL_ACCOUNT).setPassword(baseUrl);
|
|
22
|
+
}
|
|
23
|
+
export function getCicdBaseUrl() {
|
|
24
|
+
return entryFactory(KEYRING_SERVICE, CICD_BASE_URL_ACCOUNT).getPassword();
|
|
25
|
+
}
|
|
26
|
+
export function credentialLabel(type) {
|
|
27
|
+
return type === 'cicd' ? 'Copado API key (CICD)' : 'PAT token (CRT)';
|
|
28
|
+
}
|
|
29
|
+
export function maskSecret(secret) {
|
|
30
|
+
if (secret.length > 10) {
|
|
31
|
+
return `${secret.slice(0, 5)}...${secret.slice(-5)}`;
|
|
32
|
+
}
|
|
33
|
+
return `${secret.slice(0, 5)}...`;
|
|
34
|
+
}
|
|
35
|
+
// Test-only hook
|
|
36
|
+
export function setEntryFactoryForTests(factory) {
|
|
37
|
+
entryFactory = factory;
|
|
38
|
+
}
|
|
39
|
+
// Test-only hook
|
|
40
|
+
export function resetEntryFactoryForTests() {
|
|
41
|
+
entryFactory = defaultEntryFactory;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=credential-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/lib/credential-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AAEtC,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAA;AAI5C,MAAM,CAAC,MAAM,oBAAoB,GAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAErE,MAAM,mBAAmB,GAAmC;IAC1D,IAAI,EAAE,qBAAqB;IAC3B,GAAG,EAAE,sBAAsB;CAC5B,CAAA;AAED,MAAM,qBAAqB,GAAG,sBAAsB,CAAA;AAUpD,MAAM,mBAAmB,GAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAE3F,IAAI,YAAY,GAAiB,mBAAmB,CAAA;AAEpD,MAAM,UAAU,aAAa,CAAC,IAAoB,EAAE,MAAc;IAChE,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAoB;IAChD,OAAO,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,OAAO,YAAY,CAAC,eAAe,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,YAAY,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,WAAW,EAAE,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,OAAO,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,iBAAiB,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACvB,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,CAAC;IAED,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA;AACnC,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,uBAAuB,CAAC,OAAqB;IAC3D,YAAY,GAAG,OAAO,CAAA;AACxB,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,yBAAyB;IACvC,YAAY,GAAG,mBAAmB,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ProjectDefaultKey, type ProjectDefaults, type ProjectDefaultScope, type ResolvedProjectDefault } from './project-defaults.js';
|
|
2
|
+
export type DefaultsStorePaths = {
|
|
3
|
+
globalPath: string;
|
|
4
|
+
localPath: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function readDefaults(scope: ProjectDefaultScope): Promise<ProjectDefaults>;
|
|
7
|
+
export declare function writeDefaults(scope: ProjectDefaultScope, updates: ProjectDefaults): Promise<ProjectDefaults>;
|
|
8
|
+
export declare function unsetDefaults(scope: ProjectDefaultScope, keys: ProjectDefaultKey[]): Promise<ProjectDefaults>;
|
|
9
|
+
export declare function resolveDefaults(localDefaults: ProjectDefaults, globalDefaults: ProjectDefaults, keys: ProjectDefaultKey[]): ResolvedProjectDefault[];
|
|
10
|
+
export declare function getDefaultsStorePaths(): DefaultsStorePaths;
|
|
11
|
+
export declare function setDefaultsStorePathsForTests(nextPaths: Partial<DefaultsStorePaths>): void;
|
|
12
|
+
export declare function resetDefaultsStorePathsForTests(): void;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { PROJECT_DEFAULT_KEYS, } from './project-defaults.js';
|
|
5
|
+
const DEFAULTS_SECTION = 'defaults';
|
|
6
|
+
const OCLIF_CONFIG_DIR = 'agentia-cli';
|
|
7
|
+
const LOCAL_CONFIG_DIR = '.agentia';
|
|
8
|
+
const CONFIG_FILE_NAME = 'config.json';
|
|
9
|
+
const ENV_GLOBAL_CONFIG_PATH = 'AGENTIA_TEST_GLOBAL_CONFIG_PATH';
|
|
10
|
+
const ENV_LOCAL_CONFIG_PATH = 'AGENTIA_TEST_LOCAL_CONFIG_PATH';
|
|
11
|
+
const defaultPaths = {
|
|
12
|
+
globalPath: path.join(homedir(), '.config', OCLIF_CONFIG_DIR, CONFIG_FILE_NAME),
|
|
13
|
+
localPath: path.join(process.cwd(), LOCAL_CONFIG_DIR, CONFIG_FILE_NAME),
|
|
14
|
+
};
|
|
15
|
+
let paths = defaultPaths;
|
|
16
|
+
function resolvePaths() {
|
|
17
|
+
const globalPath = process.env[ENV_GLOBAL_CONFIG_PATH];
|
|
18
|
+
const localPath = process.env[ENV_LOCAL_CONFIG_PATH];
|
|
19
|
+
if (globalPath !== undefined && localPath !== undefined) {
|
|
20
|
+
return { globalPath, localPath };
|
|
21
|
+
}
|
|
22
|
+
return paths;
|
|
23
|
+
}
|
|
24
|
+
function configPathForScope(scope) {
|
|
25
|
+
const resolvedPaths = resolvePaths();
|
|
26
|
+
return scope === 'global' ? resolvedPaths.globalPath : resolvedPaths.localPath;
|
|
27
|
+
}
|
|
28
|
+
function isRecord(value) {
|
|
29
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
30
|
+
}
|
|
31
|
+
function isValidDefaultValue(key, value) {
|
|
32
|
+
if (key === 'assignMe') {
|
|
33
|
+
return typeof value === 'boolean';
|
|
34
|
+
}
|
|
35
|
+
return typeof value === 'string';
|
|
36
|
+
}
|
|
37
|
+
function parseDefaultsSection(section) {
|
|
38
|
+
if (!isRecord(section)) {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
const defaults = {};
|
|
42
|
+
for (const key of PROJECT_DEFAULT_KEYS) {
|
|
43
|
+
const value = section[key];
|
|
44
|
+
if (value === undefined) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (isValidDefaultValue(key, value)) {
|
|
48
|
+
defaults[key] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return defaults;
|
|
52
|
+
}
|
|
53
|
+
async function readConfigDocument(filePath) {
|
|
54
|
+
try {
|
|
55
|
+
const contents = await readFile(filePath, 'utf8');
|
|
56
|
+
const parsed = JSON.parse(contents);
|
|
57
|
+
if (!isRecord(parsed)) {
|
|
58
|
+
throw new Error(`Config file at ${filePath} must contain a JSON object.`);
|
|
59
|
+
}
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error.code === 'ENOENT') {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
if (error instanceof SyntaxError) {
|
|
67
|
+
throw new TypeError(`Config file at ${filePath} contains invalid JSON.`);
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function writeConfigDocument(filePath, document) {
|
|
73
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
74
|
+
const tempPath = `${filePath}.${process.pid}.tmp`;
|
|
75
|
+
try {
|
|
76
|
+
await writeFile(tempPath, `${JSON.stringify(document, null, 2)}\n`, 'utf8');
|
|
77
|
+
await rename(tempPath, filePath);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
await unlink(tempPath).catch(() => { });
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export async function readDefaults(scope) {
|
|
85
|
+
const document = await readConfigDocument(configPathForScope(scope));
|
|
86
|
+
return parseDefaultsSection(document[DEFAULTS_SECTION]);
|
|
87
|
+
}
|
|
88
|
+
export async function writeDefaults(scope, updates) {
|
|
89
|
+
const filePath = configPathForScope(scope);
|
|
90
|
+
const document = await readConfigDocument(filePath);
|
|
91
|
+
const currentDefaults = parseDefaultsSection(document[DEFAULTS_SECTION]);
|
|
92
|
+
const nextDefaults = { ...currentDefaults, ...updates };
|
|
93
|
+
document[DEFAULTS_SECTION] = nextDefaults;
|
|
94
|
+
await writeConfigDocument(filePath, document);
|
|
95
|
+
return nextDefaults;
|
|
96
|
+
}
|
|
97
|
+
export async function unsetDefaults(scope, keys) {
|
|
98
|
+
const filePath = configPathForScope(scope);
|
|
99
|
+
const document = await readConfigDocument(filePath);
|
|
100
|
+
const currentDefaults = parseDefaultsSection(document[DEFAULTS_SECTION]);
|
|
101
|
+
const nextDefaults = { ...currentDefaults };
|
|
102
|
+
for (const key of keys) {
|
|
103
|
+
delete nextDefaults[key];
|
|
104
|
+
}
|
|
105
|
+
document[DEFAULTS_SECTION] = nextDefaults;
|
|
106
|
+
await writeConfigDocument(filePath, document);
|
|
107
|
+
return nextDefaults;
|
|
108
|
+
}
|
|
109
|
+
export function resolveDefaults(localDefaults, globalDefaults, keys) {
|
|
110
|
+
return keys.map((key) => {
|
|
111
|
+
if (localDefaults[key] !== undefined) {
|
|
112
|
+
return {
|
|
113
|
+
key,
|
|
114
|
+
source: 'local',
|
|
115
|
+
value: localDefaults[key],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (globalDefaults[key] !== undefined) {
|
|
119
|
+
return {
|
|
120
|
+
key,
|
|
121
|
+
source: 'global',
|
|
122
|
+
value: globalDefaults[key],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return { key };
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
export function getDefaultsStorePaths() {
|
|
129
|
+
return { ...resolvePaths() };
|
|
130
|
+
}
|
|
131
|
+
// Test-only hook
|
|
132
|
+
export function setDefaultsStorePathsForTests(nextPaths) {
|
|
133
|
+
paths = { ...paths, ...nextPaths };
|
|
134
|
+
}
|
|
135
|
+
// Test-only hook
|
|
136
|
+
export function resetDefaultsStorePathsForTests() {
|
|
137
|
+
paths = {
|
|
138
|
+
globalPath: path.join(homedir(), '.config', OCLIF_CONFIG_DIR, CONFIG_FILE_NAME),
|
|
139
|
+
localPath: path.join(process.cwd(), LOCAL_CONFIG_DIR, CONFIG_FILE_NAME),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=defaults-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults-store.js","sourceRoot":"","sources":["../../src/lib/defaults-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DependencySelection, ModuleType } from './metadata-common.js';
|
|
2
|
+
export type GitChangedFilesFn = (baseRef: string) => Promise<string[]>;
|
|
3
|
+
export declare function resolveChangedPath(path: string, moduleType?: ModuleType): DependencySelection | undefined;
|
|
4
|
+
export declare function selectionsFromChangedFiles(baseRef: string, moduleType?: ModuleType): Promise<DependencySelection[]>;
|
|
5
|
+
export declare function setGitChangedFilesForTests(fn: GitChangedFilesFn): void;
|
|
6
|
+
export declare function resetGitChangedFilesForTests(): void;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
let gitChangedFilesFn = defaultGitChangedFiles;
|
|
5
|
+
async function defaultGitChangedFiles(baseRef) {
|
|
6
|
+
const { stdout } = await execFileAsync('git', ['diff', '--name-only', `${baseRef}...HEAD`]);
|
|
7
|
+
return stdout
|
|
8
|
+
.split(/\r?\n/)
|
|
9
|
+
.map((line) => line.trim())
|
|
10
|
+
.filter(Boolean);
|
|
11
|
+
}
|
|
12
|
+
function fileBaseName(path, suffix) {
|
|
13
|
+
const name = path.split('/').pop() ?? path;
|
|
14
|
+
return name.endsWith(suffix) ? name.slice(0, -suffix.length) : name;
|
|
15
|
+
}
|
|
16
|
+
function parentDirectory(path) {
|
|
17
|
+
const parts = path.split('/');
|
|
18
|
+
return parts.length > 1 ? (parts.at(-2) ?? '') : '';
|
|
19
|
+
}
|
|
20
|
+
function resolveSalesforceSelection(path) {
|
|
21
|
+
if (path.endsWith('.cls') && path.includes('/classes/')) {
|
|
22
|
+
return { name: fileBaseName(path, '.cls'), type: 'ApexClass' };
|
|
23
|
+
}
|
|
24
|
+
if (path.endsWith('.trigger') && path.includes('/triggers/')) {
|
|
25
|
+
return { name: fileBaseName(path, '.trigger'), type: 'ApexTrigger' };
|
|
26
|
+
}
|
|
27
|
+
if (path.includes('/lwc/')) {
|
|
28
|
+
return { name: parentDirectory(path), type: 'LightningComponentBundle' };
|
|
29
|
+
}
|
|
30
|
+
if (path.includes('/aura/')) {
|
|
31
|
+
return { name: parentDirectory(path), type: 'AuraDefinitionBundle' };
|
|
32
|
+
}
|
|
33
|
+
if (path.endsWith('.flow-meta.xml') && path.includes('/flows/')) {
|
|
34
|
+
return { name: fileBaseName(path, '.flow-meta.xml'), type: 'Flow' };
|
|
35
|
+
}
|
|
36
|
+
if (path.endsWith('.layout-meta.xml') && path.includes('/layouts/')) {
|
|
37
|
+
return { name: fileBaseName(path, '.layout-meta.xml'), type: 'Layout' };
|
|
38
|
+
}
|
|
39
|
+
if (path.endsWith('.permissionset-meta.xml') && path.includes('/permissionsets/')) {
|
|
40
|
+
return { name: fileBaseName(path, '.permissionset-meta.xml'), type: 'PermissionSet' };
|
|
41
|
+
}
|
|
42
|
+
const objectMatch = path.match(/\/objects\/([^/]+)\/\1\.object-meta\.xml$/);
|
|
43
|
+
if (objectMatch) {
|
|
44
|
+
return { name: objectMatch[1], type: 'CustomObject' };
|
|
45
|
+
}
|
|
46
|
+
const fieldMatch = path.match(/\/objects\/([^/]+)\/fields\/([^/]+)\.field-meta\.xml$/);
|
|
47
|
+
if (fieldMatch) {
|
|
48
|
+
return { name: `${fieldMatch[1]}.${fieldMatch[2]}`, type: 'CustomField' };
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function resolveVlocitySelection(path) {
|
|
53
|
+
const parts = path.split('/').filter(Boolean);
|
|
54
|
+
const vlocityIndex = parts.findIndex((part) => part.toLowerCase() === 'vlocity');
|
|
55
|
+
if (vlocityIndex === -1 || parts.length <= vlocityIndex + 2) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
name: parts[vlocityIndex + 2],
|
|
60
|
+
type: parts[vlocityIndex + 1],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function resolveChangedPath(path, moduleType) {
|
|
64
|
+
if (path.endsWith('-meta.xml') && !path.includes('/objects/')) {
|
|
65
|
+
return resolveSalesforceSelection(path);
|
|
66
|
+
}
|
|
67
|
+
if (moduleType === 'vlocity') {
|
|
68
|
+
return resolveVlocitySelection(path) ?? resolveSalesforceSelection(path);
|
|
69
|
+
}
|
|
70
|
+
return resolveSalesforceSelection(path);
|
|
71
|
+
}
|
|
72
|
+
export async function selectionsFromChangedFiles(baseRef, moduleType) {
|
|
73
|
+
const files = await gitChangedFilesFn(baseRef);
|
|
74
|
+
if (files.length === 0) {
|
|
75
|
+
throw new Error(`No changed files were found against ${baseRef}.`);
|
|
76
|
+
}
|
|
77
|
+
const byKey = new Map();
|
|
78
|
+
for (const file of files) {
|
|
79
|
+
const selection = resolveChangedPath(file, moduleType);
|
|
80
|
+
if (selection) {
|
|
81
|
+
byKey.set(`${selection.type}:${selection.name}`, selection);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (byKey.size === 0) {
|
|
85
|
+
throw new Error('No resolvable metadata selections were found from changed files.');
|
|
86
|
+
}
|
|
87
|
+
return [...byKey.values()];
|
|
88
|
+
}
|
|
89
|
+
// Test-only hook
|
|
90
|
+
export function setGitChangedFilesForTests(fn) {
|
|
91
|
+
gitChangedFilesFn = fn;
|
|
92
|
+
}
|
|
93
|
+
// Test-only hook
|
|
94
|
+
export function resetGitChangedFilesForTests() {
|
|
95
|
+
gitChangedFilesFn = defaultGitChangedFiles;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=dependency-from-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-from-changes.js","sourceRoot":"","sources":["../../src/lib/dependency-from-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CicdGateway } from './cicd-gateway.js';
|
|
2
|
+
export type EnvironmentAuthStatusOptions = {
|
|
3
|
+
credentialId?: string;
|
|
4
|
+
environmentId: string;
|
|
5
|
+
};
|
|
6
|
+
export type EnvironmentAuthStatusResult = {
|
|
7
|
+
credentialId: string;
|
|
8
|
+
credentialName: string;
|
|
9
|
+
environmentId: string;
|
|
10
|
+
message?: string;
|
|
11
|
+
validated: boolean;
|
|
12
|
+
};
|
|
13
|
+
export type EnvironmentAuthStatusDeps = {
|
|
14
|
+
gatewayCall?: typeof CicdGateway.call;
|
|
15
|
+
};
|
|
16
|
+
export declare function setEnvironmentAuthStatusDepsForTests(deps: EnvironmentAuthStatusDeps | undefined): void;
|
|
17
|
+
export declare function resetEnvironmentAuthStatusDepsForTests(): void;
|
|
18
|
+
export declare function runEnvironmentAuthStatus(options: EnvironmentAuthStatusOptions, deps?: EnvironmentAuthStatusDeps): Promise<EnvironmentAuthStatusResult>;
|