@sfdxy/anypoint-connect 0.14.0 → 0.16.2
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 +39 -16
- package/dist/analysis/LogAnalyzer.d.ts +10 -4
- package/dist/analysis/LogAnalyzer.d.ts.map +1 -1
- package/dist/analysis/LogAnalyzer.js +29 -18
- 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/error-grouper.js +1 -1
- package/dist/analysis/error-grouper.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/{utils.d.ts → normalize.d.ts} +1 -1
- package/dist/analysis/normalize.d.ts.map +1 -0
- package/dist/analysis/{utils.js → normalize.js} +2 -2
- package/dist/analysis/normalize.js.map +1 -0
- package/dist/analysis/parser.d.ts.map +1 -1
- package/dist/analysis/parser.js +45 -17
- package/dist/analysis/parser.js.map +1 -1
- package/dist/analysis/pattern-detector.js +1 -1
- package/dist/analysis/pattern-detector.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 +35 -1
- 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/DesignCenterApi.d.ts +0 -20
- package/dist/api/DesignCenterApi.d.ts.map +1 -1
- package/dist/api/DesignCenterApi.js +0 -22
- package/dist/api/DesignCenterApi.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 +50 -18
- package/dist/api/LogsApi.d.ts.map +1 -1
- package/dist/api/LogsApi.js +69 -98
- package/dist/api/LogsApi.js.map +1 -1
- package/dist/api/MonitoringApi.d.ts +137 -93
- package/dist/api/MonitoringApi.d.ts.map +1 -1
- package/dist/api/MonitoringApi.js +471 -204
- package/dist/api/MonitoringApi.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/auth/FileStore.js +1 -1
- package/dist/auth/FileStore.js.map +1 -1
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/client/AnypointClient.d.ts +3 -1
- package/dist/client/AnypointClient.d.ts.map +1 -1
- package/dist/client/AnypointClient.js +5 -2
- 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 +175 -30
- 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 +199 -18
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.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/config.js +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/deploy.d.ts +6 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +89 -91
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/design-center.d.ts +1 -1
- package/dist/commands/design-center.d.ts.map +1 -1
- package/dist/commands/design-center.js +36 -25
- package/dist/commands/design-center.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 +142 -17
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/monitor.d.ts +5 -6
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +210 -230
- package/dist/commands/monitor.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/commands/shared.d.ts +2 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +16 -1
- package/dist/commands/shared.js.map +1 -1
- package/dist/{utils/config.d.ts → config/profiles.d.ts} +9 -1
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/{utils/config.js → config/profiles.js} +1 -1
- package/dist/config/profiles.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/prompts.js +7 -7
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +61 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/analysis.d.ts.map +1 -1
- package/dist/mcp/tools/analysis.js +74 -46
- 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 +25 -54
- 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 +154 -89
- 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 +13 -0
- package/dist/mcp/tools/apps-deploy.d.ts.map +1 -0
- package/dist/mcp/tools/apps-deploy.js +358 -0
- package/dist/mcp/tools/apps-deploy.js.map +1 -0
- package/dist/mcp/tools/apps-lifecycle.d.ts +11 -0
- package/dist/mcp/tools/apps-lifecycle.d.ts.map +1 -0
- package/dist/mcp/tools/apps-lifecycle.js +244 -0
- package/dist/mcp/tools/apps-lifecycle.js.map +1 -0
- package/dist/mcp/tools/apps-read.d.ts +9 -0
- package/dist/mcp/tools/apps-read.d.ts.map +1 -0
- package/dist/mcp/tools/apps-read.js +414 -0
- package/dist/mcp/tools/apps-read.js.map +1 -0
- 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/audit.d.ts.map +1 -1
- package/dist/mcp/tools/audit.js +9 -17
- package/dist/mcp/tools/audit.js.map +1 -1
- package/dist/mcp/tools/design-center.d.ts +2 -3
- package/dist/mcp/tools/design-center.d.ts.map +1 -1
- package/dist/mcp/tools/design-center.js +41 -185
- package/dist/mcp/tools/design-center.js.map +1 -1
- package/dist/mcp/tools/exchange.d.ts +1 -2
- package/dist/mcp/tools/exchange.d.ts.map +1 -1
- package/dist/mcp/tools/exchange.js +51 -312
- package/dist/mcp/tools/exchange.js.map +1 -1
- package/dist/mcp/tools/governance.d.ts +8 -0
- package/dist/mcp/tools/governance.d.ts.map +1 -0
- package/dist/mcp/tools/governance.js +59 -0
- package/dist/mcp/tools/governance.js.map +1 -0
- package/dist/mcp/tools/identity.d.ts.map +1 -1
- package/dist/mcp/tools/identity.js +15 -36
- package/dist/mcp/tools/identity.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +5 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +5 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/logs.d.ts +48 -2
- package/dist/mcp/tools/logs.d.ts.map +1 -1
- package/dist/mcp/tools/logs.js +204 -54
- package/dist/mcp/tools/logs.js.map +1 -1
- package/dist/mcp/tools/monitoring.d.ts +1 -2
- package/dist/mcp/tools/monitoring.d.ts.map +1 -1
- package/dist/mcp/tools/monitoring.js +78 -285
- package/dist/mcp/tools/monitoring.js.map +1 -1
- package/dist/mcp/tools/object-store.d.ts +1 -1
- package/dist/mcp/tools/object-store.d.ts.map +1 -1
- package/dist/mcp/tools/object-store.js +19 -59
- package/dist/mcp/tools/object-store.js.map +1 -1
- package/dist/mcp/tools/profile.d.ts.map +1 -1
- package/dist/mcp/tools/profile.js +15 -35
- package/dist/mcp/tools/profile.js.map +1 -1
- package/dist/mcp/tools/shared.d.ts +43 -0
- package/dist/mcp/tools/shared.d.ts.map +1 -1
- package/dist/mcp/tools/shared.js +54 -0
- package/dist/mcp/tools/shared.js.map +1 -1
- package/dist/mcp.d.ts +3 -11
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +4 -56
- package/dist/mcp.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 +139 -6
- package/dist/safety/deployment.js.map +1 -1
- package/dist/safety/guards.d.ts +2 -2
- package/dist/safety/guards.d.ts.map +1 -1
- package/dist/safety/guards.js +4 -4
- package/dist/safety/guards.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 +14 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +31 -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/{api/DesignCenterWorkflow.d.ts → workflows/design-center.d.ts} +4 -4
- package/dist/workflows/design-center.d.ts.map +1 -0
- package/dist/{api/DesignCenterWorkflow.js → workflows/design-center.js} +1 -1
- package/dist/workflows/design-center.js.map +1 -0
- package/dist/workflows/jar-deployment.d.ts +156 -0
- package/dist/workflows/jar-deployment.d.ts.map +1 -0
- package/dist/workflows/jar-deployment.js +178 -0
- package/dist/workflows/jar-deployment.js.map +1 -0
- package/package.json +12 -4
- package/dist/analysis/utils.d.ts.map +0 -1
- package/dist/analysis/utils.js.map +0 -1
- package/dist/api/DesignCenterWorkflow.d.ts.map +0 -1
- package/dist/api/DesignCenterWorkflow.js.map +0 -1
- package/dist/api/index.d.ts +0 -13
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -13
- package/dist/api/index.js.map +0 -1
- package/dist/mcp/tools/applications.d.ts +0 -4
- package/dist/mcp/tools/applications.d.ts.map +0 -1
- package/dist/mcp/tools/applications.js +0 -815
- package/dist/mcp/tools/applications.js.map +0 -1
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
package/dist/safety/guards.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare function isProductionEnv(envName: string, isProduction?: boolean)
|
|
|
10
10
|
/**
|
|
11
11
|
* Build a deployment summary for confirmation
|
|
12
12
|
*/
|
|
13
|
-
export declare function buildDeploySummary(appName: string, envName: string, existing: CH2Deployment | null, newVersion?: string): string;
|
|
13
|
+
export declare function buildDeploySummary(appName: string, envName: string, existing: CH2Deployment | null, newVersion?: string, isProduction?: boolean): string;
|
|
14
14
|
/**
|
|
15
15
|
* Validate a JAR file exists and looks correct
|
|
16
16
|
*/
|
|
@@ -23,5 +23,5 @@ export declare function validateJarFile(jarPath: string): {
|
|
|
23
23
|
/**
|
|
24
24
|
* Ask for production deployment confirmation
|
|
25
25
|
*/
|
|
26
|
-
export declare function confirmProductionDeploy(envName: string): Promise<boolean>;
|
|
26
|
+
export declare function confirmProductionDeploy(envName: string, isProduction?: boolean): Promise<boolean>;
|
|
27
27
|
//# sourceMappingURL=guards.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/safety/guards.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAIhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/safety/guards.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAIhF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,aAAa,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,OAAO,GACvB,MAAM,CA4BR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAuBA;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAcvG"}
|
package/dist/safety/guards.js
CHANGED
|
@@ -17,9 +17,9 @@ export function isProductionEnv(envName, isProduction) {
|
|
|
17
17
|
/**
|
|
18
18
|
* Build a deployment summary for confirmation
|
|
19
19
|
*/
|
|
20
|
-
export function buildDeploySummary(appName, envName, existing, newVersion) {
|
|
20
|
+
export function buildDeploySummary(appName, envName, existing, newVersion, isProduction) {
|
|
21
21
|
const lines = [];
|
|
22
|
-
if (isProductionEnv(envName)) {
|
|
22
|
+
if (isProductionEnv(envName, isProduction)) {
|
|
23
23
|
lines.push(chalk.red.bold('\n ⚠️ PRODUCTION DEPLOYMENT'));
|
|
24
24
|
lines.push(chalk.red(' ════════════════════════════════════\n'));
|
|
25
25
|
}
|
|
@@ -66,8 +66,8 @@ export function validateJarFile(jarPath) {
|
|
|
66
66
|
/**
|
|
67
67
|
* Ask for production deployment confirmation
|
|
68
68
|
*/
|
|
69
|
-
export async function confirmProductionDeploy(envName) {
|
|
70
|
-
if (!isProductionEnv(envName))
|
|
69
|
+
export async function confirmProductionDeploy(envName, isProduction) {
|
|
70
|
+
if (!isProductionEnv(envName, isProduction))
|
|
71
71
|
return true;
|
|
72
72
|
const rl = readline.createInterface({
|
|
73
73
|
input: process.stdin,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/safety/guards.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAErC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAsB;IACnE,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAC9B,OAAe,EACf,OAAe,EACf,QAA8B,EAC9B,UAAmB;
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/safety/guards.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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-sources.js","sourceRoot":"","sources":["../../src/safety/secret-sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret detection and redaction
|
|
3
|
+
* Keeps secret values out of tool responses, CLI output and error messages.
|
|
4
|
+
*/
|
|
5
|
+
/** The placeholder the platform returns for stored secure property values. */
|
|
6
|
+
export declare const MASKED = "******";
|
|
7
|
+
/**
|
|
8
|
+
* True when a property name looks like it holds a secret. The name is split on `.`, `_`, `-`
|
|
9
|
+
* and camel-case boundaries, so `db.password`, `clientSecret` and `API_KEY` all match while
|
|
10
|
+
* `tokenizer.mode` or `keystore.type` do not.
|
|
11
|
+
*/
|
|
12
|
+
export declare function looksSecret(key: string): boolean;
|
|
13
|
+
/** Mask a value, keeping the last two characters of long values so a caller can tell values apart. */
|
|
14
|
+
export declare function redactValue(value: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Mask secret-looking entries of a flat record. `keys` forces masking for extra names
|
|
17
|
+
* (for example every key of a secure property map).
|
|
18
|
+
*/
|
|
19
|
+
export declare function redactRecord(record: Record<string, string>, options?: {
|
|
20
|
+
keys?: Iterable<string>;
|
|
21
|
+
}): Record<string, string>;
|
|
22
|
+
/**
|
|
23
|
+
* Recursively mask secret-looking fields in an arbitrary JSON value, such as an API error
|
|
24
|
+
* body the platform echoed back.
|
|
25
|
+
*/
|
|
26
|
+
export declare function redactDeep(value: unknown, depth?: number): unknown;
|
|
27
|
+
/**
|
|
28
|
+
* Replace every occurrence of known secret values in free text. Values shorter than four
|
|
29
|
+
* characters are skipped because they would match ordinary text.
|
|
30
|
+
*/
|
|
31
|
+
export declare function redactText(text: string, knownSecrets: Iterable<string>): string;
|
|
32
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/safety/secrets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,MAAM,WAAW,CAAC;AAuB/B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWhD;AAED,sGAAsG;AACtG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAO,GAO7F,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAC9B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAY7D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAM/E"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret detection and redaction
|
|
3
|
+
* Keeps secret values out of tool responses, CLI output and error messages.
|
|
4
|
+
*/
|
|
5
|
+
/** The placeholder the platform returns for stored secure property values. */
|
|
6
|
+
export const MASKED = '******';
|
|
7
|
+
const SECRET_SEGMENTS = new Set([
|
|
8
|
+
'password',
|
|
9
|
+
'passwd',
|
|
10
|
+
'pwd',
|
|
11
|
+
'secret',
|
|
12
|
+
'token',
|
|
13
|
+
'credential',
|
|
14
|
+
'credentials',
|
|
15
|
+
'passphrase',
|
|
16
|
+
'apikey',
|
|
17
|
+
'privatekey',
|
|
18
|
+
'clientsecret',
|
|
19
|
+
]);
|
|
20
|
+
const SECRET_PAIRS = [
|
|
21
|
+
['private', 'key'],
|
|
22
|
+
['api', 'key'],
|
|
23
|
+
['client', 'secret'],
|
|
24
|
+
['access', 'key'],
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* True when a property name looks like it holds a secret. The name is split on `.`, `_`, `-`
|
|
28
|
+
* and camel-case boundaries, so `db.password`, `clientSecret` and `API_KEY` all match while
|
|
29
|
+
* `tokenizer.mode` or `keystore.type` do not.
|
|
30
|
+
*/
|
|
31
|
+
export function looksSecret(key) {
|
|
32
|
+
const segments = key
|
|
33
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
34
|
+
.toLowerCase()
|
|
35
|
+
.split(/[\s._\-/:]+/)
|
|
36
|
+
.filter(Boolean);
|
|
37
|
+
if (segments.some((segment) => SECRET_SEGMENTS.has(segment)))
|
|
38
|
+
return true;
|
|
39
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
40
|
+
if (SECRET_PAIRS.some(([a, b]) => segments[i] === a && segments[i + 1] === b))
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/** Mask a value, keeping the last two characters of long values so a caller can tell values apart. */
|
|
46
|
+
export function redactValue(value) {
|
|
47
|
+
if (value === MASKED)
|
|
48
|
+
return MASKED;
|
|
49
|
+
return value.length > 8 ? `${MASKED}…${value.slice(-2)}` : MASKED;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Mask secret-looking entries of a flat record. `keys` forces masking for extra names
|
|
53
|
+
* (for example every key of a secure property map).
|
|
54
|
+
*/
|
|
55
|
+
export function redactRecord(record, options = {}) {
|
|
56
|
+
const forced = new Set(options.keys ?? []);
|
|
57
|
+
return Object.fromEntries(Object.entries(record).map(([key, value]) => [
|
|
58
|
+
key,
|
|
59
|
+
forced.has(key) || looksSecret(key) ? redactValue(String(value)) : value,
|
|
60
|
+
]));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Recursively mask secret-looking fields in an arbitrary JSON value, such as an API error
|
|
64
|
+
* body the platform echoed back.
|
|
65
|
+
*/
|
|
66
|
+
export function redactDeep(value, depth = 0) {
|
|
67
|
+
if (depth > 20)
|
|
68
|
+
return value;
|
|
69
|
+
if (Array.isArray(value))
|
|
70
|
+
return value.map((item) => redactDeep(item, depth + 1));
|
|
71
|
+
if (value && typeof value === 'object') {
|
|
72
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [
|
|
73
|
+
key,
|
|
74
|
+
looksSecret(key) && typeof item === 'string' ? redactValue(item) : redactDeep(item, depth + 1),
|
|
75
|
+
]));
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Replace every occurrence of known secret values in free text. Values shorter than four
|
|
81
|
+
* characters are skipped because they would match ordinary text.
|
|
82
|
+
*/
|
|
83
|
+
export function redactText(text, knownSecrets) {
|
|
84
|
+
const values = [...new Set(knownSecrets)].filter((v) => v && v !== MASKED && v.length >= 4);
|
|
85
|
+
values.sort((a, b) => b.length - a.length);
|
|
86
|
+
let result = text;
|
|
87
|
+
for (const value of values)
|
|
88
|
+
result = result.split(value).join(MASKED);
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/safety/secrets.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -6,7 +6,20 @@
|
|
|
6
6
|
* Extracts a human-readable message from an unknown error value.
|
|
7
7
|
* For AxiosErrors, prefers the API response body (which often contains
|
|
8
8
|
* a more descriptive message than the generic HTTP status).
|
|
9
|
-
* Safely handles Error instances, strings, and other types.
|
|
9
|
+
* Safely handles Error instances, strings, and other types. Secret-looking
|
|
10
|
+
* fields in an echoed response body are masked.
|
|
10
11
|
*/
|
|
11
12
|
export declare function errorMessage(error: unknown): string;
|
|
13
|
+
/**
|
|
14
|
+
* A metrics query the monitoring service rejected or could not run. Carries the platform's own
|
|
15
|
+
* message (syntax errors, unknown datasources or attributes, oversized limits) so callers never
|
|
16
|
+
* mistake a broken query for "no data".
|
|
17
|
+
*/
|
|
18
|
+
export declare class AmqlQueryError extends Error {
|
|
19
|
+
readonly query: string;
|
|
20
|
+
readonly status?: number | undefined;
|
|
21
|
+
readonly transactionId?: string | undefined;
|
|
22
|
+
constructor(message: string, query: string, status?: number | undefined, transactionId?: string | undefined);
|
|
23
|
+
static from(error: unknown, query: string): AmqlQueryError;
|
|
24
|
+
}
|
|
12
25
|
//# sourceMappingURL=errors.d.ts.map
|