@sfdxy/anypoint-connect 0.15.0 → 0.16.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 +32 -14
- package/dist/analysis/LogAnalyzer.d.ts +9 -3
- package/dist/analysis/LogAnalyzer.d.ts.map +1 -1
- package/dist/analysis/LogAnalyzer.js +28 -17
- package/dist/analysis/LogAnalyzer.js.map +1 -1
- package/dist/analysis/error-context.d.ts +2 -0
- package/dist/analysis/error-context.d.ts.map +1 -1
- package/dist/analysis/error-context.js +2 -1
- package/dist/analysis/error-context.js.map +1 -1
- package/dist/analysis/filter.d.ts +54 -0
- package/dist/analysis/filter.d.ts.map +1 -0
- package/dist/analysis/filter.js +100 -0
- package/dist/analysis/filter.js.map +1 -0
- package/dist/analysis/parser.d.ts.map +1 -1
- package/dist/analysis/parser.js +31 -14
- package/dist/analysis/parser.js.map +1 -1
- package/dist/analysis/stats.d.ts +25 -0
- package/dist/analysis/stats.d.ts.map +1 -1
- package/dist/analysis/stats.js +34 -0
- package/dist/analysis/stats.js.map +1 -1
- package/dist/analysis/summary.d.ts +51 -0
- package/dist/analysis/summary.d.ts.map +1 -0
- package/dist/analysis/summary.js +47 -0
- package/dist/analysis/summary.js.map +1 -0
- package/dist/analysis/types.d.ts +14 -0
- package/dist/analysis/types.d.ts.map +1 -1
- package/dist/api/ApiManagerApi.d.ts +53 -0
- package/dist/api/ApiManagerApi.d.ts.map +1 -1
- package/dist/api/ApiManagerApi.js +53 -2
- package/dist/api/ApiManagerApi.js.map +1 -1
- package/dist/api/CloudHub2Api.d.ts +24 -4
- package/dist/api/CloudHub2Api.d.ts.map +1 -1
- package/dist/api/CloudHub2Api.js +10 -22
- package/dist/api/CloudHub2Api.js.map +1 -1
- package/dist/api/ExchangeApi.d.ts +15 -0
- package/dist/api/ExchangeApi.d.ts.map +1 -1
- package/dist/api/ExchangeApi.js +51 -0
- package/dist/api/ExchangeApi.js.map +1 -1
- package/dist/api/LogsApi.d.ts +72 -19
- package/dist/api/LogsApi.d.ts.map +1 -1
- package/dist/api/LogsApi.js +116 -99
- package/dist/api/LogsApi.js.map +1 -1
- package/dist/api/RuntimesApi.d.ts +56 -0
- package/dist/api/RuntimesApi.d.ts.map +1 -0
- package/dist/api/RuntimesApi.js +58 -0
- package/dist/api/RuntimesApi.js.map +1 -0
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/AnypointClient.d.ts +2 -0
- package/dist/client/AnypointClient.d.ts.map +1 -1
- package/dist/client/AnypointClient.js +3 -0
- package/dist/client/AnypointClient.js.map +1 -1
- package/dist/client/smoke-test.d.ts +111 -0
- package/dist/client/smoke-test.d.ts.map +1 -0
- package/dist/client/smoke-test.js +275 -0
- package/dist/client/smoke-test.js.map +1 -0
- package/dist/commands/api.d.ts +1 -1
- package/dist/commands/api.d.ts.map +1 -1
- package/dist/commands/api.js +147 -10
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/app-change-cli.d.ts +52 -0
- package/dist/commands/app-change-cli.d.ts.map +1 -0
- package/dist/commands/app-change-cli.js +149 -0
- package/dist/commands/app-change-cli.js.map +1 -0
- package/dist/commands/apps.d.ts +1 -1
- package/dist/commands/apps.d.ts.map +1 -1
- package/dist/commands/apps.js +198 -17
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/compare.d.ts +8 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +104 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/deploy.d.ts +4 -3
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +59 -33
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/logs.d.ts +3 -2
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +158 -17
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/runtimes.d.ts +7 -0
- package/dist/commands/runtimes.d.ts.map +1 -0
- package/dist/commands/runtimes.js +66 -0
- package/dist/commands/runtimes.js.map +1 -0
- package/dist/config/profiles.d.ts +8 -0
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/analysis.d.ts.map +1 -1
- package/dist/mcp/tools/analysis.js +74 -30
- package/dist/mcp/tools/analysis.js.map +1 -1
- package/dist/mcp/tools/anypoint-mq.d.ts.map +1 -1
- package/dist/mcp/tools/anypoint-mq.js +5 -2
- package/dist/mcp/tools/anypoint-mq.js.map +1 -1
- package/dist/mcp/tools/api-manager.d.ts +2 -1
- package/dist/mcp/tools/api-manager.d.ts.map +1 -1
- package/dist/mcp/tools/api-manager.js +127 -38
- package/dist/mcp/tools/api-manager.js.map +1 -1
- package/dist/mcp/tools/app-inputs.d.ts +92 -0
- package/dist/mcp/tools/app-inputs.d.ts.map +1 -0
- package/dist/mcp/tools/app-inputs.js +142 -0
- package/dist/mcp/tools/app-inputs.js.map +1 -0
- package/dist/mcp/tools/apps-deploy.d.ts +6 -1
- package/dist/mcp/tools/apps-deploy.d.ts.map +1 -1
- package/dist/mcp/tools/apps-deploy.js +279 -307
- package/dist/mcp/tools/apps-deploy.js.map +1 -1
- package/dist/mcp/tools/apps-lifecycle.d.ts +3 -0
- package/dist/mcp/tools/apps-lifecycle.d.ts.map +1 -1
- package/dist/mcp/tools/apps-lifecycle.js +105 -136
- package/dist/mcp/tools/apps-lifecycle.js.map +1 -1
- package/dist/mcp/tools/apps-read.d.ts +2 -1
- package/dist/mcp/tools/apps-read.d.ts.map +1 -1
- package/dist/mcp/tools/apps-read.js +177 -14
- package/dist/mcp/tools/apps-read.js.map +1 -1
- package/dist/mcp/tools/artifacts.d.ts +8 -0
- package/dist/mcp/tools/artifacts.d.ts.map +1 -0
- package/dist/mcp/tools/artifacts.js +81 -0
- package/dist/mcp/tools/artifacts.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +1 -0
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +1 -0
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/logs.d.ts +50 -2
- package/dist/mcp/tools/logs.d.ts.map +1 -1
- package/dist/mcp/tools/logs.js +221 -38
- package/dist/mcp/tools/logs.js.map +1 -1
- package/dist/mcp/tools/shared.d.ts +27 -0
- package/dist/mcp/tools/shared.d.ts.map +1 -1
- package/dist/mcp/tools/shared.js +42 -0
- package/dist/mcp/tools/shared.js.map +1 -1
- package/dist/safety/deployment.d.ts +47 -2
- package/dist/safety/deployment.d.ts.map +1 -1
- package/dist/safety/deployment.js +148 -14
- package/dist/safety/deployment.js.map +1 -1
- package/dist/safety/paths.d.ts +29 -0
- package/dist/safety/paths.d.ts.map +1 -0
- package/dist/safety/paths.js +76 -0
- package/dist/safety/paths.js.map +1 -0
- package/dist/safety/runtime.d.ts +24 -0
- package/dist/safety/runtime.d.ts.map +1 -0
- package/dist/safety/runtime.js +59 -0
- package/dist/safety/runtime.js.map +1 -0
- package/dist/safety/secret-sources.d.ts +51 -0
- package/dist/safety/secret-sources.d.ts.map +1 -0
- package/dist/safety/secret-sources.js +124 -0
- package/dist/safety/secret-sources.js.map +1 -0
- package/dist/safety/secrets.d.ts +32 -0
- package/dist/safety/secrets.d.ts.map +1 -0
- package/dist/safety/secrets.js +91 -0
- package/dist/safety/secrets.js.map +1 -0
- package/dist/utils/errors.d.ts +2 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +5 -3
- package/dist/utils/errors.js.map +1 -1
- package/dist/workflows/app-change.d.ts +124 -0
- package/dist/workflows/app-change.d.ts.map +1 -0
- package/dist/workflows/app-change.js +305 -0
- package/dist/workflows/app-change.js.map +1 -0
- package/dist/workflows/app-state.d.ts +60 -0
- package/dist/workflows/app-state.d.ts.map +1 -0
- package/dist/workflows/app-state.js +95 -0
- package/dist/workflows/app-state.js.map +1 -0
- package/dist/workflows/artifact-compare.d.ts +134 -0
- package/dist/workflows/artifact-compare.d.ts.map +1 -0
- package/dist/workflows/artifact-compare.js +419 -0
- package/dist/workflows/artifact-compare.js.map +1 -0
- package/dist/workflows/asset-naming.d.ts +72 -0
- package/dist/workflows/asset-naming.d.ts.map +1 -0
- package/dist/workflows/asset-naming.js +116 -0
- package/dist/workflows/asset-naming.js.map +1 -0
- package/dist/workflows/jar-deployment.d.ts +76 -39
- package/dist/workflows/jar-deployment.d.ts.map +1 -1
- package/dist/workflows/jar-deployment.js +125 -64
- package/dist/workflows/jar-deployment.js.map +1 -1
- package/package.json +3 -3
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* These are pure functions (no I/O) so they unit-test cleanly.
|
|
11
11
|
*/
|
|
12
|
+
import { MASKED, looksSecret, redactValue } from './secrets.js';
|
|
12
13
|
export const DEFAULT_RUNTIME = '4.8.0';
|
|
13
14
|
export const DEFAULT_REGION = 'cloudhub-us-east-2';
|
|
14
15
|
export const DEFAULT_VCORES = '0.1';
|
|
@@ -52,14 +53,15 @@ export function parseVcores(vcores) {
|
|
|
52
53
|
export function buildCreatePayload(input) {
|
|
53
54
|
const region = input.region || DEFAULT_REGION;
|
|
54
55
|
const vCores = parseVcores(input.vcores ?? DEFAULT_VCORES);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
// Always sent, even when empty: a create without the properties service ends FAILED with
|
|
57
|
+
// "Cannot invoke ResourceRef.getId() because r is null".
|
|
58
|
+
const configuration = {
|
|
59
|
+
'mule.agent.application.properties.service': {
|
|
58
60
|
applicationName: input.appName,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}
|
|
61
|
+
properties: input.properties ?? {},
|
|
62
|
+
secureProperties: input.secureProperties ?? {},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
63
65
|
return {
|
|
64
66
|
name: input.appName,
|
|
65
67
|
application: {
|
|
@@ -71,13 +73,17 @@ export function buildCreatePayload(input) {
|
|
|
71
73
|
},
|
|
72
74
|
desiredState: 'STARTED',
|
|
73
75
|
...(vCores !== undefined ? { vCores } : {}),
|
|
74
|
-
|
|
76
|
+
configuration,
|
|
75
77
|
},
|
|
76
78
|
target: {
|
|
77
79
|
provider: 'MC',
|
|
78
80
|
targetId: region,
|
|
79
81
|
deploymentSettings: {
|
|
80
|
-
runtime: {
|
|
82
|
+
runtime: {
|
|
83
|
+
version: input.runtime || DEFAULT_RUNTIME,
|
|
84
|
+
...(input.releaseChannel ? { releaseChannel: input.releaseChannel } : {}),
|
|
85
|
+
...(input.javaVersion ? { java: input.javaVersion } : {}),
|
|
86
|
+
},
|
|
81
87
|
http: {
|
|
82
88
|
inbound: {
|
|
83
89
|
publicUrl: `${input.appName}.${regionToSubdomain(region)}.cloudhub.io`,
|
|
@@ -138,15 +144,143 @@ export function resolveRollbackTarget(existing, specs, toVersion) {
|
|
|
138
144
|
const previousArtifact = priorSpecs.find((spec) => spec.application?.ref && !refsEqual(spec.application.ref, current));
|
|
139
145
|
return previousArtifact ? { ref: previousArtifact.application.ref, sourceSpecId: previousArtifact.version } : null;
|
|
140
146
|
}
|
|
141
|
-
/**
|
|
142
|
-
export function
|
|
147
|
+
/** Read the properties service of a live deployment. */
|
|
148
|
+
export function currentSettings(existing) {
|
|
143
149
|
const configuration = existing.application.configuration ?? {};
|
|
144
150
|
const service = (configuration['mule.agent.application.properties.service'] ??
|
|
145
151
|
{});
|
|
152
|
+
return { properties: { ...(service.properties ?? {}) }, secureProperties: { ...(service.secureProperties ?? {}) } };
|
|
153
|
+
}
|
|
154
|
+
export function isEmptySettingsChange(change) {
|
|
155
|
+
if (!change)
|
|
156
|
+
return true;
|
|
157
|
+
return (Object.keys(change.properties ?? {}).length === 0 &&
|
|
158
|
+
Object.keys(change.secureProperties ?? {}).length === 0 &&
|
|
159
|
+
(change.removeProperties ?? []).length === 0 &&
|
|
160
|
+
(change.removeSecureProperties ?? []).length === 0 &&
|
|
161
|
+
(change.moveToSecure ?? []).length === 0);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Plan a settings change against the live deployment.
|
|
165
|
+
*
|
|
166
|
+
* The platform stores secure values encrypted and returns them as `******`. Sending `******` back
|
|
167
|
+
* for a key keeps its stored value, so every untouched secure key is resent masked; that is what
|
|
168
|
+
* lets one secret change without wiping the others. Removal works because the full maps are sent.
|
|
169
|
+
*/
|
|
170
|
+
export function planSettingsChange(existing, change) {
|
|
171
|
+
const current = currentSettings(existing);
|
|
172
|
+
const next = { properties: { ...current.properties }, secureProperties: { ...current.secureProperties } };
|
|
173
|
+
const warnings = [];
|
|
174
|
+
const errors = [];
|
|
175
|
+
const diff = {
|
|
176
|
+
added: [],
|
|
177
|
+
changed: [],
|
|
178
|
+
removed: [],
|
|
179
|
+
secureAdded: [],
|
|
180
|
+
secureChanged: [],
|
|
181
|
+
secureRemoved: [],
|
|
182
|
+
movedToSecure: [],
|
|
183
|
+
};
|
|
184
|
+
const setPlain = change.properties ?? {};
|
|
185
|
+
const setSecure = change.secureProperties ?? {};
|
|
186
|
+
const removePlain = new Set(change.removeProperties ?? []);
|
|
187
|
+
const removeSecure = new Set(change.removeSecureProperties ?? []);
|
|
188
|
+
const moves = new Set(change.moveToSecure ?? []);
|
|
189
|
+
for (const key of Object.keys(setPlain)) {
|
|
190
|
+
if (key in setSecure)
|
|
191
|
+
errors.push(`"${key}" is given as both a plain and a secure property`);
|
|
192
|
+
if (removePlain.has(key))
|
|
193
|
+
errors.push(`"${key}" is both set and removed`);
|
|
194
|
+
if (moves.has(key))
|
|
195
|
+
errors.push(`"${key}" is both set as plain and moved to secure`);
|
|
196
|
+
if (setPlain[key] === MASKED)
|
|
197
|
+
errors.push(`"${key}": "${MASKED}" is not a valid plain property value`);
|
|
198
|
+
}
|
|
199
|
+
for (const key of Object.keys(setSecure)) {
|
|
200
|
+
if (removeSecure.has(key))
|
|
201
|
+
errors.push(`"${key}" is both set and removed`);
|
|
202
|
+
if (setSecure[key] === MASKED && !(key in current.secureProperties)) {
|
|
203
|
+
errors.push(`"${key}": "${MASKED}" keeps a stored secret, but no secure property "${key}" exists`);
|
|
204
|
+
}
|
|
205
|
+
if (key in current.properties && !removePlain.has(key) && !moves.has(key)) {
|
|
206
|
+
errors.push(`"${key}" already exists as a plain property. Use moveToSecure to move its current value, or add it to removeProperties`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
for (const key of moves) {
|
|
210
|
+
if (!(key in current.properties)) {
|
|
211
|
+
if (key in current.secureProperties)
|
|
212
|
+
warnings.push(`"${key}" is already a secure property`);
|
|
213
|
+
else
|
|
214
|
+
errors.push(`"${key}" cannot move to secure: no plain property with that name`);
|
|
215
|
+
}
|
|
216
|
+
if (key in setSecure)
|
|
217
|
+
errors.push(`"${key}" is both moved and given a new secure value`);
|
|
218
|
+
}
|
|
219
|
+
if (errors.length)
|
|
220
|
+
throw new Error(`Invalid settings change:\n- ${errors.join('\n- ')}`);
|
|
221
|
+
const showValue = (key, value) => value === undefined ? undefined : looksSecret(key) ? redactValue(value) : value;
|
|
222
|
+
for (const key of removePlain) {
|
|
223
|
+
if (!(key in next.properties)) {
|
|
224
|
+
warnings.push(`"${key}" is not a plain property; nothing to remove`);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
delete next.properties[key];
|
|
228
|
+
diff.removed.push(key);
|
|
229
|
+
}
|
|
230
|
+
for (const key of removeSecure) {
|
|
231
|
+
if (!(key in next.secureProperties)) {
|
|
232
|
+
warnings.push(`"${key}" is not a secure property; nothing to remove`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
delete next.secureProperties[key];
|
|
236
|
+
diff.secureRemoved.push(key);
|
|
237
|
+
}
|
|
238
|
+
for (const key of moves) {
|
|
239
|
+
if (!(key in current.properties))
|
|
240
|
+
continue;
|
|
241
|
+
next.secureProperties[key] = current.properties[key];
|
|
242
|
+
delete next.properties[key];
|
|
243
|
+
diff.movedToSecure.push(key);
|
|
244
|
+
}
|
|
245
|
+
for (const [key, value] of Object.entries(setPlain)) {
|
|
246
|
+
const before = current.properties[key];
|
|
247
|
+
if (before === value)
|
|
248
|
+
continue;
|
|
249
|
+
next.properties[key] = value;
|
|
250
|
+
if (before === undefined)
|
|
251
|
+
diff.added.push({ key, to: showValue(key, value) });
|
|
252
|
+
else
|
|
253
|
+
diff.changed.push({ key, from: showValue(key, before), to: showValue(key, value) });
|
|
254
|
+
if (looksSecret(key)) {
|
|
255
|
+
warnings.push(`"${key}" looks like a secret but is stored as plain text; consider secureProperties`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
for (const [key, value] of Object.entries(setSecure)) {
|
|
259
|
+
if (value === MASKED)
|
|
260
|
+
continue;
|
|
261
|
+
if (key in current.secureProperties)
|
|
262
|
+
diff.secureChanged.push(key);
|
|
263
|
+
else
|
|
264
|
+
diff.secureAdded.push(key);
|
|
265
|
+
next.secureProperties[key] = value;
|
|
266
|
+
}
|
|
267
|
+
const changed = diff.added.length +
|
|
268
|
+
diff.changed.length +
|
|
269
|
+
diff.removed.length +
|
|
270
|
+
diff.secureAdded.length +
|
|
271
|
+
diff.secureChanged.length +
|
|
272
|
+
diff.secureRemoved.length +
|
|
273
|
+
diff.movedToSecure.length >
|
|
274
|
+
0;
|
|
146
275
|
return {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
276
|
+
service: {
|
|
277
|
+
applicationName: existing.name,
|
|
278
|
+
properties: next.properties,
|
|
279
|
+
secureProperties: next.secureProperties,
|
|
280
|
+
},
|
|
281
|
+
diff,
|
|
282
|
+
warnings,
|
|
283
|
+
changed,
|
|
150
284
|
};
|
|
151
285
|
}
|
|
152
286
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/safety/deployment.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/safety/deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-scoped file access
|
|
3
|
+
* Every file a tool reads secrets from or writes output to must sit inside the project root,
|
|
4
|
+
* so a tool call cannot reach arbitrary files on the machine.
|
|
5
|
+
*/
|
|
6
|
+
/** Environment variable that pins the project root, for MCP servers started outside the project. */
|
|
7
|
+
export declare const PROJECT_ROOT_ENV = "ANYPOINT_CONNECT_PROJECT_ROOT";
|
|
8
|
+
/** The git toplevel of the working directory, or the working directory itself. */
|
|
9
|
+
export declare function resolveProjectRoot(cwd?: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve a path for reading. The real path (symlinks followed) must stay inside the root,
|
|
12
|
+
* and the file must be a regular file no larger than `maxBytes`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveReadablePath(file: string, options?: {
|
|
15
|
+
projectRoot?: string;
|
|
16
|
+
maxBytes?: number;
|
|
17
|
+
}): {
|
|
18
|
+
path: string;
|
|
19
|
+
size: number;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a path for writing. The parent directory must exist inside the root, and an
|
|
23
|
+
* existing file is only replaced when `overwrite` is set.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveWritablePath(file: string, options?: {
|
|
26
|
+
projectRoot?: string;
|
|
27
|
+
overwrite?: boolean;
|
|
28
|
+
}): string;
|
|
29
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/safety/paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,kCAAkC,CAAC;AAEhE,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CActE;AAOD;;;GAGG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAWhC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAarH"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-scoped file access
|
|
3
|
+
* Every file a tool reads secrets from or writes output to must sit inside the project root,
|
|
4
|
+
* so a tool call cannot reach arbitrary files on the machine.
|
|
5
|
+
*/
|
|
6
|
+
import { execFileSync } from 'node:child_process';
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
/** Environment variable that pins the project root, for MCP servers started outside the project. */
|
|
10
|
+
export const PROJECT_ROOT_ENV = 'ANYPOINT_CONNECT_PROJECT_ROOT';
|
|
11
|
+
/** The git toplevel of the working directory, or the working directory itself. */
|
|
12
|
+
export function resolveProjectRoot(cwd = process.cwd()) {
|
|
13
|
+
const pinned = process.env[PROJECT_ROOT_ENV];
|
|
14
|
+
if (pinned)
|
|
15
|
+
return fs.realpathSync(path.resolve(pinned));
|
|
16
|
+
try {
|
|
17
|
+
const top = execFileSync('git', ['rev-parse', '--show-toplevel'], {
|
|
18
|
+
cwd,
|
|
19
|
+
encoding: 'utf8',
|
|
20
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
21
|
+
}).trim();
|
|
22
|
+
if (top)
|
|
23
|
+
return fs.realpathSync(top);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Not a git checkout; fall back to the working directory.
|
|
27
|
+
}
|
|
28
|
+
return fs.realpathSync(path.resolve(cwd));
|
|
29
|
+
}
|
|
30
|
+
function isInside(root, candidate) {
|
|
31
|
+
const relative = path.relative(root, candidate);
|
|
32
|
+
return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a path for reading. The real path (symlinks followed) must stay inside the root,
|
|
36
|
+
* and the file must be a regular file no larger than `maxBytes`.
|
|
37
|
+
*/
|
|
38
|
+
export function resolveReadablePath(file, options = {}) {
|
|
39
|
+
const root = fs.realpathSync(options.projectRoot ?? resolveProjectRoot());
|
|
40
|
+
const absolute = path.resolve(root, file);
|
|
41
|
+
if (!fs.existsSync(absolute))
|
|
42
|
+
throw new Error(`File not found: ${file}`);
|
|
43
|
+
const real = fs.realpathSync(absolute);
|
|
44
|
+
if (!isInside(root, real))
|
|
45
|
+
throw new Error(`File must be inside the project root (${root}): ${file}`);
|
|
46
|
+
const stat = fs.statSync(real);
|
|
47
|
+
if (!stat.isFile())
|
|
48
|
+
throw new Error(`Not a regular file: ${file}`);
|
|
49
|
+
const maxBytes = options.maxBytes ?? 1024 * 1024;
|
|
50
|
+
if (stat.size > maxBytes)
|
|
51
|
+
throw new Error(`File exceeds ${maxBytes} bytes: ${file}`);
|
|
52
|
+
return { path: real, size: stat.size };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve a path for writing. The parent directory must exist inside the root, and an
|
|
56
|
+
* existing file is only replaced when `overwrite` is set.
|
|
57
|
+
*/
|
|
58
|
+
export function resolveWritablePath(file, options = {}) {
|
|
59
|
+
const root = fs.realpathSync(options.projectRoot ?? resolveProjectRoot());
|
|
60
|
+
const absolute = path.resolve(root, file);
|
|
61
|
+
const parent = path.dirname(absolute);
|
|
62
|
+
if (!fs.existsSync(parent))
|
|
63
|
+
throw new Error(`Directory not found: ${path.dirname(file)}`);
|
|
64
|
+
const realParent = fs.realpathSync(parent);
|
|
65
|
+
const target = path.join(realParent, path.basename(absolute));
|
|
66
|
+
if (!isInside(root, target))
|
|
67
|
+
throw new Error(`File must be inside the project root (${root}): ${file}`);
|
|
68
|
+
if (fs.existsSync(target)) {
|
|
69
|
+
if (fs.lstatSync(target).isSymbolicLink())
|
|
70
|
+
throw new Error(`Refusing to write through a symlink: ${file}`);
|
|
71
|
+
if (!options.overwrite)
|
|
72
|
+
throw new Error(`File exists: ${file}. Pass overwrite to replace it.`);
|
|
73
|
+
}
|
|
74
|
+
return target;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/safety/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime version checks
|
|
3
|
+
* Validate a requested Mule runtime against what the deployment target accepts, and suggest the
|
|
4
|
+
* nearest supported version when the current one has been retired. Pure functions.
|
|
5
|
+
*/
|
|
6
|
+
import type { RuntimeVersion } from '../api/RuntimesApi.js';
|
|
7
|
+
export interface RuntimeSpec {
|
|
8
|
+
/** Base version ("4.9.0") or a version prefix ("4.9"). */
|
|
9
|
+
version: string;
|
|
10
|
+
java?: string;
|
|
11
|
+
releaseChannel?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Split a deployment's runtime string ("4.8.5:4e-java8") into its base version and Java version. */
|
|
14
|
+
export declare function parseRuntimeString(value: string, java?: string): RuntimeSpec;
|
|
15
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
16
|
+
/** The newest catalog entry matching the spec, or undefined when the target does not offer it. */
|
|
17
|
+
export declare function resolveRuntime(catalog: RuntimeVersion[], spec: RuntimeSpec): RuntimeVersion | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Nearest supported versions for an unsupported runtime, best first: the newest patch of the same
|
|
20
|
+
* minor, then the oldest newer LTS, then the newest version overall. Java 17 is preferred when the
|
|
21
|
+
* original Java version is no longer offered.
|
|
22
|
+
*/
|
|
23
|
+
export declare function suggestRuntimes(catalog: RuntimeVersion[], current: RuntimeSpec, limit?: number): string[];
|
|
24
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/safety/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,WAAW;IACxB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAI5E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAMD,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAMvG;AAOD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAmBpG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime version checks
|
|
3
|
+
* Validate a requested Mule runtime against what the deployment target accepts, and suggest the
|
|
4
|
+
* nearest supported version when the current one has been retired. Pure functions.
|
|
5
|
+
*/
|
|
6
|
+
/** Split a deployment's runtime string ("4.8.5:4e-java8") into its base version and Java version. */
|
|
7
|
+
export function parseRuntimeString(value, java) {
|
|
8
|
+
const [base, tag = ''] = value.split(':');
|
|
9
|
+
const fromTag = /java(\d+)/i.exec(tag)?.[1];
|
|
10
|
+
return { version: base, ...((java ?? fromTag) ? { java: java ?? fromTag } : {}) };
|
|
11
|
+
}
|
|
12
|
+
export function compareVersions(a, b) {
|
|
13
|
+
const pa = a.split('.').map((part) => parseInt(part, 10) || 0);
|
|
14
|
+
const pb = b.split('.').map((part) => parseInt(part, 10) || 0);
|
|
15
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
16
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
17
|
+
if (diff !== 0)
|
|
18
|
+
return diff;
|
|
19
|
+
}
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
const minorOf = (version) => version.split('.').slice(0, 2).join('.');
|
|
23
|
+
const supportsJava = (candidate, java) => !java || candidate.java.length === 0 || candidate.java.includes(java);
|
|
24
|
+
/** The newest catalog entry matching the spec, or undefined when the target does not offer it. */
|
|
25
|
+
export function resolveRuntime(catalog, spec) {
|
|
26
|
+
return catalog
|
|
27
|
+
.filter((v) => v.version === spec.version || v.version.startsWith(`${spec.version}.`))
|
|
28
|
+
.filter((v) => !spec.releaseChannel || v.releaseChannel?.toUpperCase() === spec.releaseChannel.toUpperCase())
|
|
29
|
+
.filter((v) => supportsJava(v, spec.java))
|
|
30
|
+
.sort((a, b) => compareVersions(b.version, a.version))[0];
|
|
31
|
+
}
|
|
32
|
+
function label(v, java) {
|
|
33
|
+
const javaPart = java && v.java.includes(java) ? java : v.java.includes('17') ? '17' : v.java[v.java.length - 1];
|
|
34
|
+
return [v.version, v.releaseChannel, javaPart ? `java${javaPart}` : undefined].filter(Boolean).join(' ');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Nearest supported versions for an unsupported runtime, best first: the newest patch of the same
|
|
38
|
+
* minor, then the oldest newer LTS, then the newest version overall. Java 17 is preferred when the
|
|
39
|
+
* original Java version is no longer offered.
|
|
40
|
+
*/
|
|
41
|
+
export function suggestRuntimes(catalog, current, limit = 3) {
|
|
42
|
+
const javaOffered = !current.java || catalog.some((v) => v.java.includes(current.java));
|
|
43
|
+
const java = javaOffered ? current.java : '17';
|
|
44
|
+
const usable = catalog.filter((v) => supportsJava(v, java));
|
|
45
|
+
const pool = usable.length > 0 ? usable : catalog;
|
|
46
|
+
const byNewest = [...pool].sort((a, b) => compareVersions(b.version, a.version));
|
|
47
|
+
const picks = [];
|
|
48
|
+
const add = (v) => {
|
|
49
|
+
if (v && !picks.some((p) => p.version === v.version && p.releaseChannel === v.releaseChannel))
|
|
50
|
+
picks.push(v);
|
|
51
|
+
};
|
|
52
|
+
add(byNewest.find((v) => minorOf(v.version) === minorOf(current.version)));
|
|
53
|
+
add([...pool]
|
|
54
|
+
.filter((v) => v.releaseChannel?.toUpperCase() === 'LTS' && compareVersions(v.version, current.version) > 0)
|
|
55
|
+
.sort((a, b) => compareVersions(a.version, b.version))[0]);
|
|
56
|
+
add(byNewest[0]);
|
|
57
|
+
return picks.slice(0, limit).map((v) => label(v, java));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/safety/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret sources
|
|
3
|
+
* Property values resolved on the server from a project file or environment variables,
|
|
4
|
+
* so the values never travel in a tool call or appear in a transcript.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export declare const fileSecretSourceSchema: z.ZodObject<{
|
|
8
|
+
file: z.ZodString;
|
|
9
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
env: "env";
|
|
11
|
+
json: "json";
|
|
12
|
+
properties: "properties";
|
|
13
|
+
}>>;
|
|
14
|
+
keys: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
|
+
rename: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
16
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
export declare const envSecretSourceSchema: z.ZodObject<{
|
|
19
|
+
env: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
export declare const secretSourceSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
22
|
+
file: z.ZodString;
|
|
23
|
+
format: z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
env: "env";
|
|
25
|
+
json: "json";
|
|
26
|
+
properties: "properties";
|
|
27
|
+
}>>;
|
|
28
|
+
keys: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
|
+
rename: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
30
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
32
|
+
env: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
33
|
+
}, z.core.$strip>]>;
|
|
34
|
+
export type FileSecretSource = z.infer<typeof fileSecretSourceSchema>;
|
|
35
|
+
export type EnvSecretSource = z.infer<typeof envSecretSourceSchema>;
|
|
36
|
+
export type SecretSource = z.infer<typeof secretSourceSchema>;
|
|
37
|
+
/** Parse a Java `.properties` file: `=`/`:`/space separators, comments, continuations, escapes. */
|
|
38
|
+
export declare function parseProperties(text: string): Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Resolve one source into property values. Errors name keys and files, never values.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveSecretSource(source: SecretSource, options?: {
|
|
43
|
+
projectRoot?: string;
|
|
44
|
+
env?: NodeJS.ProcessEnv;
|
|
45
|
+
}): Record<string, string>;
|
|
46
|
+
/** Resolve several sources in order; later sources win on duplicate keys. */
|
|
47
|
+
export declare function resolveSecretSources(sources: SecretSource[] | undefined, options?: {
|
|
48
|
+
projectRoot?: string;
|
|
49
|
+
env?: NodeJS.ProcessEnv;
|
|
50
|
+
}): Record<string, string>;
|
|
51
|
+
//# sourceMappingURL=secret-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-sources.d.ts","sourceRoot":"","sources":["../../src/safety/secret-sources.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,sBAAsB;;;;;;;;;;iBAYjC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAIhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;mBAA2D,CAAC;AAE3F,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BpE;AAkCD;;GAEG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GAChE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BxB;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EACnC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GAChE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret sources
|
|
3
|
+
* Property values resolved on the server from a project file or environment variables,
|
|
4
|
+
* so the values never travel in a tool call or appear in a transcript.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import { parse as parseDotenv } from 'dotenv';
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { resolveReadablePath } from './paths.js';
|
|
11
|
+
export const fileSecretSourceSchema = z.object({
|
|
12
|
+
file: z.string().describe('Path inside the project root to a .env, .properties or flat JSON file'),
|
|
13
|
+
format: z
|
|
14
|
+
.enum(['env', 'properties', 'json'])
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('File format. Default: from the extension (.json, .properties, otherwise env)'),
|
|
17
|
+
keys: z.array(z.string()).optional().describe('Only take these keys from the file (default: all)'),
|
|
18
|
+
rename: z
|
|
19
|
+
.record(z.string(), z.string())
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Map a file key to a different property name, e.g. {"DB_PASSWORD": "db.password"}'),
|
|
22
|
+
prefix: z.string().optional().describe('Prefix added to every property name taken from the file'),
|
|
23
|
+
});
|
|
24
|
+
export const envSecretSourceSchema = z.object({
|
|
25
|
+
env: z
|
|
26
|
+
.record(z.string(), z.string())
|
|
27
|
+
.describe('Map of property name to the environment variable that holds its value in the server process'),
|
|
28
|
+
});
|
|
29
|
+
export const secretSourceSchema = z.union([fileSecretSourceSchema, envSecretSourceSchema]);
|
|
30
|
+
/** Parse a Java `.properties` file: `=`/`:`/space separators, comments, continuations, escapes. */
|
|
31
|
+
export function parseProperties(text) {
|
|
32
|
+
const result = {};
|
|
33
|
+
const lines = text.split(/\r?\n/);
|
|
34
|
+
for (let i = 0; i < lines.length; i++) {
|
|
35
|
+
let line = lines[i].replace(/^\s+/, '');
|
|
36
|
+
if (!line || line.startsWith('#') || line.startsWith('!'))
|
|
37
|
+
continue;
|
|
38
|
+
while (/(^|[^\\])(\\\\)*\\$/.test(line) && i + 1 < lines.length) {
|
|
39
|
+
line = line.slice(0, -1) + lines[++i].replace(/^\s+/, '');
|
|
40
|
+
}
|
|
41
|
+
let separator = -1;
|
|
42
|
+
for (let j = 0; j < line.length; j++) {
|
|
43
|
+
if (line[j] === '\\') {
|
|
44
|
+
j++;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (line[j] === '=' || line[j] === ':' || /\s/.test(line[j])) {
|
|
48
|
+
separator = j;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const rawKey = separator === -1 ? line : line.slice(0, separator);
|
|
53
|
+
let rest = separator === -1 ? '' : line.slice(separator);
|
|
54
|
+
rest = rest.replace(/^\s*[=:]?\s*/, '');
|
|
55
|
+
result[unescapeProperties(rawKey)] = unescapeProperties(rest);
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
function unescapeProperties(value) {
|
|
60
|
+
return value.replace(/\\(u[0-9a-fA-F]{4}|.)/g, (_, escape) => {
|
|
61
|
+
if (escape.startsWith('u') && escape.length === 5)
|
|
62
|
+
return String.fromCharCode(parseInt(escape.slice(1), 16));
|
|
63
|
+
return { t: '\t', n: '\n', r: '\r', f: '\f' }[escape] ?? escape;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function detectFormat(file) {
|
|
67
|
+
const ext = path.extname(file).toLowerCase();
|
|
68
|
+
if (ext === '.json')
|
|
69
|
+
return 'json';
|
|
70
|
+
if (ext === '.properties')
|
|
71
|
+
return 'properties';
|
|
72
|
+
return 'env';
|
|
73
|
+
}
|
|
74
|
+
function parseFile(text, format, file) {
|
|
75
|
+
if (format === 'env')
|
|
76
|
+
return parseDotenv(text);
|
|
77
|
+
if (format === 'properties')
|
|
78
|
+
return parseProperties(text);
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(text);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw new Error(`Secret source ${file} is not valid JSON`);
|
|
85
|
+
}
|
|
86
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
87
|
+
throw new Error(`Secret source ${file} must be a flat JSON object`);
|
|
88
|
+
}
|
|
89
|
+
const entries = Object.entries(parsed);
|
|
90
|
+
const invalid = entries.filter(([, value]) => typeof value !== 'string').map(([key]) => key);
|
|
91
|
+
if (invalid.length)
|
|
92
|
+
throw new Error(`Secret source ${file} has non-string values for: ${invalid.join(', ')}`);
|
|
93
|
+
return Object.fromEntries(entries);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolve one source into property values. Errors name keys and files, never values.
|
|
97
|
+
*/
|
|
98
|
+
export function resolveSecretSource(source, options = {}) {
|
|
99
|
+
if ('env' in source) {
|
|
100
|
+
const env = options.env ?? process.env;
|
|
101
|
+
const missing = Object.entries(source.env)
|
|
102
|
+
.filter(([, variable]) => env[variable] === undefined || env[variable] === '')
|
|
103
|
+
.map(([, variable]) => variable);
|
|
104
|
+
if (missing.length)
|
|
105
|
+
throw new Error(`Environment variables not set in the server process: ${missing.join(', ')}`);
|
|
106
|
+
return Object.fromEntries(Object.entries(source.env).map(([key, variable]) => [key, env[variable]]));
|
|
107
|
+
}
|
|
108
|
+
const resolved = resolveReadablePath(source.file, { projectRoot: options.projectRoot });
|
|
109
|
+
const values = parseFile(fs.readFileSync(resolved.path, 'utf8'), source.format ?? detectFormat(source.file), source.file);
|
|
110
|
+
const selected = source.keys ?? Object.keys(values);
|
|
111
|
+
const missing = selected.filter((key) => !(key in values));
|
|
112
|
+
if (missing.length)
|
|
113
|
+
throw new Error(`Keys not found in ${source.file}: ${missing.join(', ')}`);
|
|
114
|
+
const result = {};
|
|
115
|
+
for (const key of selected) {
|
|
116
|
+
result[`${source.prefix ?? ''}${source.rename?.[key] ?? key}`] = values[key];
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
/** Resolve several sources in order; later sources win on duplicate keys. */
|
|
121
|
+
export function resolveSecretSources(sources, options = {}) {
|
|
122
|
+
return Object.assign({}, ...(sources ?? []).map((source) => resolveSecretSource(source, options)));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=secret-sources.js.map
|