@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYnD;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAGjC,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM;gBAH/B,OAAO,EAAE,MAAM,EACN,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,aAAa,CAAC,EAAE,MAAM,YAAA;IAMnC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;CAc7D"}
|
package/dist/utils/errors.js
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
* Shared error formatting for CLI and MCP error handling
|
|
4
4
|
*/
|
|
5
5
|
import { AxiosError } from 'axios';
|
|
6
|
+
import { redactDeep } from '../safety/secrets.js';
|
|
6
7
|
/**
|
|
7
8
|
* Extracts a human-readable message from an unknown error value.
|
|
8
9
|
* For AxiosErrors, prefers the API response body (which often contains
|
|
9
10
|
* a more descriptive message than the generic HTTP status).
|
|
10
|
-
* Safely handles Error instances, strings, and other types.
|
|
11
|
+
* Safely handles Error instances, strings, and other types. Secret-looking
|
|
12
|
+
* fields in an echoed response body are masked.
|
|
11
13
|
*/
|
|
12
14
|
export function errorMessage(error) {
|
|
13
15
|
if (error instanceof AxiosError && error.response) {
|
|
@@ -17,11 +19,37 @@ export function errorMessage(error) {
|
|
|
17
19
|
if (data && typeof data === 'object') {
|
|
18
20
|
if ('message' in data)
|
|
19
21
|
return String(data.message);
|
|
20
|
-
// Some APIs return { error: '...' } or { status, ... } — show
|
|
21
|
-
return `HTTP ${error.response.status}: ${JSON.stringify(data)}`;
|
|
22
|
+
// Some APIs return { error: '...' } or { status, ... } — show the body, masked
|
|
23
|
+
return `HTTP ${error.response.status}: ${JSON.stringify(redactDeep(data))}`;
|
|
22
24
|
}
|
|
23
25
|
return `HTTP ${error.response.status || 'unknown'}`;
|
|
24
26
|
}
|
|
25
27
|
return error instanceof Error ? error.message : String(error);
|
|
26
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* A metrics query the monitoring service rejected or could not run. Carries the platform's own
|
|
31
|
+
* message (syntax errors, unknown datasources or attributes, oversized limits) so callers never
|
|
32
|
+
* mistake a broken query for "no data".
|
|
33
|
+
*/
|
|
34
|
+
export class AmqlQueryError extends Error {
|
|
35
|
+
query;
|
|
36
|
+
status;
|
|
37
|
+
transactionId;
|
|
38
|
+
constructor(message, query, status, transactionId) {
|
|
39
|
+
super(message);
|
|
40
|
+
this.query = query;
|
|
41
|
+
this.status = status;
|
|
42
|
+
this.transactionId = transactionId;
|
|
43
|
+
this.name = 'AmqlQueryError';
|
|
44
|
+
}
|
|
45
|
+
static from(error, query) {
|
|
46
|
+
if (error instanceof AxiosError && error.response) {
|
|
47
|
+
const data = error.response.data;
|
|
48
|
+
const detail = typeof data?.message === 'string' ? data.message : errorMessage(error);
|
|
49
|
+
const transactionId = typeof data?.['X-ANYPNT-TRX-ID'] === 'string' ? data['X-ANYPNT-TRX-ID'] : undefined;
|
|
50
|
+
return new AmqlQueryError(`AMQL query failed (HTTP ${error.response.status}): ${detail}`, query, error.response.status, transactionId);
|
|
51
|
+
}
|
|
52
|
+
return new AmqlQueryError(`AMQL query failed: ${errorMessage(error)}`, query);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
27
55
|
//# sourceMappingURL=errors.js.map
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7D,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,SAAS,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAE,IAA4B,CAAC,OAAO,CAAC,CAAC;YAC5E,+EAA+E;YAC/E,OAAO,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,OAAO,QAAQ,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGxB;IACA;IACA;IAJb,YACI,OAAe,EACN,KAAa,EACb,MAAe,EACf,aAAsB;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAS;QACf,kBAAa,GAAb,aAAa,CAAS;QAG/B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,KAAc,EAAE,KAAa;QACrC,IAAI,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAsE,CAAC;YACnG,MAAM,MAAM,GAAG,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtF,MAAM,aAAa,GAAG,OAAO,IAAI,EAAE,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1G,OAAO,IAAI,cAAc,CACrB,2BAA2B,KAAK,CAAC,QAAQ,CAAC,MAAM,MAAM,MAAM,EAAE,EAC9D,KAAK,EACL,KAAK,CAAC,QAAQ,CAAC,MAAM,EACrB,aAAa,CAChB,CAAC;QACN,CAAC;QACD,OAAO,IAAI,cAAc,CAAC,sBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClF,CAAC;CACJ"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application change workflow
|
|
3
|
+
* One plan and one PATCH for every change to an existing CloudHub 2.0 application: artifact,
|
|
4
|
+
* runtime, settings and update strategy, applied in place or as stop, change, start. Shared by
|
|
5
|
+
* the MCP tools and the CLI so previews, runtime checks, secret handling and waits match.
|
|
6
|
+
*/
|
|
7
|
+
import type { AnypointClient } from '../client/AnypointClient.js';
|
|
8
|
+
import type { Environment } from '../api/AccessManagementApi.js';
|
|
9
|
+
import type { ArtifactRef, CH2Deployment, DeploymentPatch } from '../api/CloudHub2Api.js';
|
|
10
|
+
import { type DeploymentChange, type SettingsChange, type SettingsPlan } from '../safety/deployment.js';
|
|
11
|
+
import { type RuntimeSpec } from '../safety/runtime.js';
|
|
12
|
+
import { type SecretSource } from '../safety/secret-sources.js';
|
|
13
|
+
import { type PhaseSnapshot } from './app-state.js';
|
|
14
|
+
export type ChangeMode = 'inPlace' | 'stopStart';
|
|
15
|
+
export type UpdateStrategy = 'rolling' | 'recreate';
|
|
16
|
+
/** A settings change as callers express it: inline values plus server-side sources. */
|
|
17
|
+
export interface SettingsChangeInput extends SettingsChange {
|
|
18
|
+
propertiesFrom?: SecretSource[];
|
|
19
|
+
securePropertiesFrom?: SecretSource[];
|
|
20
|
+
}
|
|
21
|
+
/** Resolve file and environment sources into values. Returns the secret values for output scrubbing. */
|
|
22
|
+
export declare function resolveSettingsInput(input: SettingsChangeInput | undefined, options?: {
|
|
23
|
+
projectRoot?: string;
|
|
24
|
+
env?: NodeJS.ProcessEnv;
|
|
25
|
+
}): {
|
|
26
|
+
change: SettingsChange | undefined;
|
|
27
|
+
secretValues: string[];
|
|
28
|
+
};
|
|
29
|
+
export interface AppChangeRequest {
|
|
30
|
+
orgId: string;
|
|
31
|
+
env: Environment;
|
|
32
|
+
appName: string;
|
|
33
|
+
/** Prefetched deployment detail; looked up by name when omitted. */
|
|
34
|
+
existing?: CH2Deployment | null;
|
|
35
|
+
ref?: Partial<ArtifactRef>;
|
|
36
|
+
runtime?: RuntimeSpec;
|
|
37
|
+
settings?: SettingsChange;
|
|
38
|
+
updateStrategy?: UpdateStrategy;
|
|
39
|
+
mode?: ChangeMode;
|
|
40
|
+
/** Restart even when nothing else changes (stop then start). */
|
|
41
|
+
restart?: boolean;
|
|
42
|
+
/** Values to scrub from every response and error. */
|
|
43
|
+
secretValues?: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface RuntimeCheck {
|
|
46
|
+
checked: boolean;
|
|
47
|
+
reason?: string;
|
|
48
|
+
targetId: string;
|
|
49
|
+
current: {
|
|
50
|
+
version: string;
|
|
51
|
+
java?: string;
|
|
52
|
+
releaseChannel?: string;
|
|
53
|
+
supported?: boolean;
|
|
54
|
+
};
|
|
55
|
+
requested?: {
|
|
56
|
+
version: string;
|
|
57
|
+
java?: string;
|
|
58
|
+
releaseChannel?: string;
|
|
59
|
+
supported?: boolean;
|
|
60
|
+
};
|
|
61
|
+
suggestions?: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface AppChangePlan {
|
|
64
|
+
request: AppChangeRequest;
|
|
65
|
+
existing: CH2Deployment;
|
|
66
|
+
mode: ChangeMode;
|
|
67
|
+
patch: DeploymentPatch;
|
|
68
|
+
changes: DeploymentChange[];
|
|
69
|
+
settings?: SettingsPlan;
|
|
70
|
+
runtimeCheck: RuntimeCheck;
|
|
71
|
+
steps: string[];
|
|
72
|
+
warnings: string[];
|
|
73
|
+
/** Problems that stop the change before anything is written. */
|
|
74
|
+
blockers: string[];
|
|
75
|
+
production: boolean;
|
|
76
|
+
/** Nothing would change. */
|
|
77
|
+
noop: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** Build the plan: what changes, the single PATCH body, the runtime check and the steps. Nothing is written. */
|
|
80
|
+
export declare function planAppChange(client: AnypointClient, request: AppChangeRequest): Promise<AppChangePlan>;
|
|
81
|
+
/** A serializable preview of the plan. Never contains secret values. */
|
|
82
|
+
export declare function describeAppChange(plan: AppChangePlan): {
|
|
83
|
+
preserved: string;
|
|
84
|
+
production?: boolean | undefined;
|
|
85
|
+
noop?: boolean | undefined;
|
|
86
|
+
blockers?: string[] | undefined;
|
|
87
|
+
warnings?: string[] | undefined;
|
|
88
|
+
runtimeCheck: RuntimeCheck;
|
|
89
|
+
steps: string[];
|
|
90
|
+
settings?: import("../safety/deployment.js").SettingsDiff | undefined;
|
|
91
|
+
app: string;
|
|
92
|
+
environment: string;
|
|
93
|
+
mode: ChangeMode;
|
|
94
|
+
current: {
|
|
95
|
+
ref: ArtifactRef;
|
|
96
|
+
runtime: {
|
|
97
|
+
version: string;
|
|
98
|
+
releaseChannel?: string;
|
|
99
|
+
java?: string;
|
|
100
|
+
} | undefined;
|
|
101
|
+
updateStrategy: string;
|
|
102
|
+
desiredState: string;
|
|
103
|
+
phase: import("./app-state.js").AppPhase;
|
|
104
|
+
};
|
|
105
|
+
changes: DeploymentChange[];
|
|
106
|
+
};
|
|
107
|
+
export interface AppChangeResult {
|
|
108
|
+
deployment: CH2Deployment;
|
|
109
|
+
performed: string[];
|
|
110
|
+
snapshot?: PhaseSnapshot;
|
|
111
|
+
timedOut?: boolean;
|
|
112
|
+
/** The stop step ran but the start step did not; the app is left stopped. */
|
|
113
|
+
leftStopped?: boolean;
|
|
114
|
+
}
|
|
115
|
+
export interface ExecuteOptions {
|
|
116
|
+
wait?: boolean;
|
|
117
|
+
timeoutMs?: number;
|
|
118
|
+
pollIntervalMs?: number;
|
|
119
|
+
graceMs?: number;
|
|
120
|
+
onStatus?: (step: string, snapshot: PhaseSnapshot) => void;
|
|
121
|
+
}
|
|
122
|
+
/** Apply a plan. Errors and results are scrubbed of the request's secret values. */
|
|
123
|
+
export declare function executeAppChange(client: AnypointClient, plan: AppChangePlan, options?: ExecuteOptions): Promise<AppChangeResult>;
|
|
124
|
+
//# sourceMappingURL=app-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-change.d.ts","sourceRoot":"","sources":["../../src/workflows/app-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application change workflow
|
|
3
|
+
* One plan and one PATCH for every change to an existing CloudHub 2.0 application: artifact,
|
|
4
|
+
* runtime, settings and update strategy, applied in place or as stop, change, start. Shared by
|
|
5
|
+
* the MCP tools and the CLI so previews, runtime checks, secret handling and waits match.
|
|
6
|
+
*/
|
|
7
|
+
import { isEmptySettingsChange, mergeForArtifactUpdate, planSettingsChange, } from '../safety/deployment.js';
|
|
8
|
+
import { isProductionEnv } from '../safety/guards.js';
|
|
9
|
+
import { parseRuntimeString, resolveRuntime, suggestRuntimes } from '../safety/runtime.js';
|
|
10
|
+
import { looksSecret, redactText } from '../safety/secrets.js';
|
|
11
|
+
import { resolveSecretSources } from '../safety/secret-sources.js';
|
|
12
|
+
import { errorMessage } from '../utils/errors.js';
|
|
13
|
+
import { deploymentPhase, waitForAppPhase } from './app-state.js';
|
|
14
|
+
/** Resolve file and environment sources into values. Returns the secret values for output scrubbing. */
|
|
15
|
+
export function resolveSettingsInput(input, options = {}) {
|
|
16
|
+
if (!input)
|
|
17
|
+
return { change: undefined, secretValues: [] };
|
|
18
|
+
const properties = { ...resolveSecretSources(input.propertiesFrom, options), ...(input.properties ?? {}) };
|
|
19
|
+
const secureProperties = {
|
|
20
|
+
...resolveSecretSources(input.securePropertiesFrom, options),
|
|
21
|
+
...(input.secureProperties ?? {}),
|
|
22
|
+
};
|
|
23
|
+
const change = {
|
|
24
|
+
...(Object.keys(properties).length ? { properties } : {}),
|
|
25
|
+
...(Object.keys(secureProperties).length ? { secureProperties } : {}),
|
|
26
|
+
...(input.removeProperties?.length ? { removeProperties: input.removeProperties } : {}),
|
|
27
|
+
...(input.removeSecureProperties?.length ? { removeSecureProperties: input.removeSecureProperties } : {}),
|
|
28
|
+
...(input.moveToSecure?.length ? { moveToSecure: input.moveToSecure } : {}),
|
|
29
|
+
};
|
|
30
|
+
const secretValues = [
|
|
31
|
+
...Object.values(secureProperties),
|
|
32
|
+
...Object.entries(properties)
|
|
33
|
+
.filter(([key]) => looksSecret(key))
|
|
34
|
+
.map(([, value]) => value),
|
|
35
|
+
];
|
|
36
|
+
return { change: isEmptySettingsChange(change) ? undefined : change, secretValues };
|
|
37
|
+
}
|
|
38
|
+
function refsDiffer(a, b) {
|
|
39
|
+
return (a.groupId !== b.groupId ||
|
|
40
|
+
a.artifactId !== b.artifactId ||
|
|
41
|
+
a.version !== b.version ||
|
|
42
|
+
a.packaging !== b.packaging);
|
|
43
|
+
}
|
|
44
|
+
async function loadCatalog(client, orgId, targetId) {
|
|
45
|
+
try {
|
|
46
|
+
const target = await client.runtimes.getTarget(orgId, targetId);
|
|
47
|
+
if (!target)
|
|
48
|
+
return { reason: `target ${targetId} is not in the organization's runtime catalog` };
|
|
49
|
+
if (target.runtimes.length === 0)
|
|
50
|
+
return { reason: `target ${targetId} lists no runtime versions` };
|
|
51
|
+
return { catalog: target.runtimes };
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return { reason: `runtime catalog unavailable: ${errorMessage(error)}` };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Pick the Java version to send: requested, else the current one if still offered, else 17, else the newest offered. */
|
|
58
|
+
function chooseJava(resolved, requested, current) {
|
|
59
|
+
if (requested)
|
|
60
|
+
return requested;
|
|
61
|
+
if (!resolved || resolved.java.length === 0)
|
|
62
|
+
return current;
|
|
63
|
+
if (current && resolved.java.includes(current))
|
|
64
|
+
return current;
|
|
65
|
+
if (resolved.java.includes('17'))
|
|
66
|
+
return '17';
|
|
67
|
+
return resolved.java[resolved.java.length - 1];
|
|
68
|
+
}
|
|
69
|
+
/** Build the plan: what changes, the single PATCH body, the runtime check and the steps. Nothing is written. */
|
|
70
|
+
export async function planAppChange(client, request) {
|
|
71
|
+
const existing = request.existing ?? (await client.cloudHub2.findDetailByName(request.orgId, request.env.id, request.appName));
|
|
72
|
+
if (!existing)
|
|
73
|
+
throw new Error(`Application "${request.appName}" not found in ${request.env.name}`);
|
|
74
|
+
const mode = request.mode ?? (request.restart ? 'stopStart' : 'inPlace');
|
|
75
|
+
const changes = [];
|
|
76
|
+
const warnings = [];
|
|
77
|
+
const blockers = [];
|
|
78
|
+
const patch = {};
|
|
79
|
+
const settings = existing.target?.deploymentSettings ?? {};
|
|
80
|
+
// Artifact
|
|
81
|
+
if (request.ref && Object.values(request.ref).some((v) => v !== undefined)) {
|
|
82
|
+
const nextRef = mergeForArtifactUpdate(existing, request.ref).application.ref;
|
|
83
|
+
if (refsDiffer(existing.application.ref, nextRef)) {
|
|
84
|
+
patch.application = { ...patch.application, ref: nextRef };
|
|
85
|
+
for (const field of ['groupId', 'artifactId', 'version', 'packaging']) {
|
|
86
|
+
if (existing.application.ref[field] !== nextRef[field]) {
|
|
87
|
+
changes.push({ field: `ref.${field}`, from: existing.application.ref[field], to: nextRef[field] });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Settings
|
|
93
|
+
let settingsPlan;
|
|
94
|
+
if (!isEmptySettingsChange(request.settings)) {
|
|
95
|
+
settingsPlan = planSettingsChange(existing, request.settings);
|
|
96
|
+
warnings.push(...settingsPlan.warnings);
|
|
97
|
+
if (settingsPlan.changed) {
|
|
98
|
+
patch.application = {
|
|
99
|
+
...patch.application,
|
|
100
|
+
configuration: { 'mule.agent.application.properties.service': settingsPlan.service },
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Runtime
|
|
105
|
+
const currentRuntime = settings.runtime ?? { version: 'unknown' };
|
|
106
|
+
const current = parseRuntimeString(currentRuntime.version, currentRuntime.java);
|
|
107
|
+
const { catalog, reason } = await loadCatalog(client, request.orgId, existing.target.targetId);
|
|
108
|
+
const runtimeCheck = {
|
|
109
|
+
checked: Boolean(catalog),
|
|
110
|
+
...(reason ? { reason } : {}),
|
|
111
|
+
targetId: existing.target.targetId,
|
|
112
|
+
current: {
|
|
113
|
+
version: current.version,
|
|
114
|
+
...(current.java ? { java: current.java } : {}),
|
|
115
|
+
...(currentRuntime.releaseChannel ? { releaseChannel: currentRuntime.releaseChannel } : {}),
|
|
116
|
+
...(catalog
|
|
117
|
+
? { supported: Boolean(resolveRuntime(catalog, { version: current.version, java: current.java })) }
|
|
118
|
+
: {}),
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
let nextRuntime;
|
|
122
|
+
if (request.runtime) {
|
|
123
|
+
const resolved = catalog ? resolveRuntime(catalog, request.runtime) : undefined;
|
|
124
|
+
runtimeCheck.requested = {
|
|
125
|
+
version: request.runtime.version,
|
|
126
|
+
...(request.runtime.java ? { java: request.runtime.java } : {}),
|
|
127
|
+
...(request.runtime.releaseChannel ? { releaseChannel: request.runtime.releaseChannel } : {}),
|
|
128
|
+
...(catalog ? { supported: Boolean(resolved) } : {}),
|
|
129
|
+
};
|
|
130
|
+
if (catalog && !resolved) {
|
|
131
|
+
runtimeCheck.suggestions = suggestRuntimes(catalog, request.runtime.java ? request.runtime : { ...request.runtime, java: current.java });
|
|
132
|
+
blockers.push(`Runtime ${request.runtime.version}${request.runtime.java ? ` (Java ${request.runtime.java})` : ''} is not offered by ${existing.target.targetId}. Nearest supported: ${runtimeCheck.suggestions.join('; ') || 'none listed'}`);
|
|
133
|
+
}
|
|
134
|
+
nextRuntime = {
|
|
135
|
+
version: resolved?.version ?? request.runtime.version,
|
|
136
|
+
...((request.runtime.releaseChannel ?? resolved?.releaseChannel ?? currentRuntime.releaseChannel)
|
|
137
|
+
? {
|
|
138
|
+
releaseChannel: request.runtime.releaseChannel ?? resolved?.releaseChannel ?? currentRuntime.releaseChannel,
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
...(chooseJava(resolved, request.runtime.java, current.java)
|
|
142
|
+
? { java: chooseJava(resolved, request.runtime.java, current.java) }
|
|
143
|
+
: {}),
|
|
144
|
+
};
|
|
145
|
+
if (!catalog)
|
|
146
|
+
warnings.push(`Runtime ${nextRuntime.version} was not validated (${reason})`);
|
|
147
|
+
if (nextRuntime.version !== current.version)
|
|
148
|
+
changes.push({ field: 'runtime', from: current.version, to: nextRuntime.version });
|
|
149
|
+
if (nextRuntime.java && nextRuntime.java !== current.java)
|
|
150
|
+
changes.push({ field: 'java', from: current.java, to: nextRuntime.java });
|
|
151
|
+
if (nextRuntime.releaseChannel && nextRuntime.releaseChannel !== currentRuntime.releaseChannel) {
|
|
152
|
+
changes.push({
|
|
153
|
+
field: 'releaseChannel',
|
|
154
|
+
from: currentRuntime.releaseChannel,
|
|
155
|
+
to: nextRuntime.releaseChannel,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (changes.every((c) => !['runtime', 'java', 'releaseChannel'].includes(c.field)))
|
|
159
|
+
nextRuntime = undefined;
|
|
160
|
+
}
|
|
161
|
+
// Update strategy
|
|
162
|
+
const strategyChange = request.updateStrategy && request.updateStrategy !== (settings.updateStrategy ?? 'rolling')
|
|
163
|
+
? request.updateStrategy
|
|
164
|
+
: undefined;
|
|
165
|
+
if (strategyChange)
|
|
166
|
+
changes.push({ field: 'updateStrategy', from: settings.updateStrategy ?? 'rolling', to: strategyChange });
|
|
167
|
+
if (nextRuntime || strategyChange) {
|
|
168
|
+
// The live target is restated exactly as read, so only the runtime and strategy differ.
|
|
169
|
+
patch.target = {
|
|
170
|
+
provider: existing.target.provider,
|
|
171
|
+
targetId: existing.target.targetId,
|
|
172
|
+
replicas: existing.target.replicas,
|
|
173
|
+
deploymentSettings: {
|
|
174
|
+
...settings,
|
|
175
|
+
...(nextRuntime ? { runtime: nextRuntime } : {}),
|
|
176
|
+
...(strategyChange ? { updateStrategy: strategyChange } : {}),
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const createsSpec = Boolean(patch.application?.ref || patch.application?.configuration || patch.target);
|
|
181
|
+
if (catalog && runtimeCheck.current.supported === false && !nextRuntime && createsSpec) {
|
|
182
|
+
runtimeCheck.suggestions = suggestRuntimes(catalog, current);
|
|
183
|
+
blockers.push(`The app's current runtime ${current.version}${current.java ? ` (Java ${current.java})` : ''} is no longer offered by ${existing.target.targetId}, so the platform will reject a new spec. Pass runtime with one of: ${runtimeCheck.suggestions.join('; ') || 'none listed'}`);
|
|
184
|
+
}
|
|
185
|
+
const noop = !createsSpec && !request.restart;
|
|
186
|
+
if (mode === 'stopStart' && !noop)
|
|
187
|
+
patch.application = { ...patch.application, desiredState: 'STARTED' };
|
|
188
|
+
if (settingsPlan?.changed)
|
|
189
|
+
warnings.push('Applying a settings change restarts the application.');
|
|
190
|
+
if (mode === 'inPlace' && createsSpec && (settings.updateStrategy ?? 'rolling') === 'rolling' && !strategyChange) {
|
|
191
|
+
warnings.push('Rolling update: old and new replicas overlap briefly. For apps with streaming or polling listeners use mode stopStart, or set updateStrategy recreate.');
|
|
192
|
+
}
|
|
193
|
+
if (mode === 'inPlace' && existing.application.desiredState === 'STOPPED' && createsSpec) {
|
|
194
|
+
warnings.push('The application is stopped; the change applies but it stays stopped until started.');
|
|
195
|
+
}
|
|
196
|
+
const steps = noop
|
|
197
|
+
? []
|
|
198
|
+
: mode === 'stopStart'
|
|
199
|
+
? [
|
|
200
|
+
...(existing.application.desiredState !== 'STOPPED'
|
|
201
|
+
? ['stop the application and wait until it is stopped']
|
|
202
|
+
: []),
|
|
203
|
+
createsSpec ? 'apply the change and start in one update' : 'start the application',
|
|
204
|
+
'wait until every replica runs the new spec',
|
|
205
|
+
]
|
|
206
|
+
: ['apply the change in one update (one new spec)', 'wait until every replica runs the new spec'];
|
|
207
|
+
return {
|
|
208
|
+
request,
|
|
209
|
+
existing,
|
|
210
|
+
mode,
|
|
211
|
+
patch,
|
|
212
|
+
changes,
|
|
213
|
+
...(settingsPlan ? { settings: settingsPlan } : {}),
|
|
214
|
+
runtimeCheck,
|
|
215
|
+
steps,
|
|
216
|
+
warnings,
|
|
217
|
+
blockers,
|
|
218
|
+
production: isProductionEnv(request.env.name, request.env.isProduction),
|
|
219
|
+
noop,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/** A serializable preview of the plan. Never contains secret values. */
|
|
223
|
+
export function describeAppChange(plan) {
|
|
224
|
+
const { existing, request } = plan;
|
|
225
|
+
const preview = {
|
|
226
|
+
app: existing.name,
|
|
227
|
+
environment: request.env.name,
|
|
228
|
+
mode: plan.mode,
|
|
229
|
+
current: {
|
|
230
|
+
ref: existing.application.ref,
|
|
231
|
+
runtime: existing.target?.deploymentSettings?.runtime,
|
|
232
|
+
updateStrategy: existing.target?.deploymentSettings?.updateStrategy ?? 'rolling',
|
|
233
|
+
desiredState: existing.application.desiredState,
|
|
234
|
+
phase: deploymentPhase(existing).phase,
|
|
235
|
+
},
|
|
236
|
+
changes: plan.changes,
|
|
237
|
+
...(plan.settings ? { settings: plan.settings.diff } : {}),
|
|
238
|
+
runtimeCheck: plan.runtimeCheck,
|
|
239
|
+
steps: plan.steps,
|
|
240
|
+
...(plan.warnings.length ? { warnings: plan.warnings } : {}),
|
|
241
|
+
...(plan.blockers.length ? { blockers: plan.blockers } : {}),
|
|
242
|
+
...(plan.noop ? { noop: true } : {}),
|
|
243
|
+
...(plan.production ? { production: true } : {}),
|
|
244
|
+
preserved: 'target, replicas, resources, other settings and stored secure values',
|
|
245
|
+
};
|
|
246
|
+
return JSON.parse(redactText(JSON.stringify(preview), request.secretValues ?? []));
|
|
247
|
+
}
|
|
248
|
+
/** Apply a plan. Errors and results are scrubbed of the request's secret values. */
|
|
249
|
+
export async function executeAppChange(client, plan, options = {}) {
|
|
250
|
+
if (plan.blockers.length)
|
|
251
|
+
throw new Error(plan.blockers.join('\n'));
|
|
252
|
+
const { orgId, env, secretValues = [] } = plan.request;
|
|
253
|
+
const { existing } = plan;
|
|
254
|
+
const performed = [];
|
|
255
|
+
if (plan.noop)
|
|
256
|
+
return { deployment: existing, performed };
|
|
257
|
+
// `previous` enables the staleness check, needed only when the target state looks like the
|
|
258
|
+
// starting state (an in-place update of a running app). Stop and start are told apart by state.
|
|
259
|
+
const waitFor = (step, previous, sentAt, expectedSpecVersion) => waitForAppPhase(client.cloudHub2, orgId, env.id, existing.id, {
|
|
260
|
+
expectedSpecVersion,
|
|
261
|
+
previousModifiedDate: previous?.lastModifiedDate,
|
|
262
|
+
sinceChange: sentAt,
|
|
263
|
+
timeoutMs: options.timeoutMs,
|
|
264
|
+
pollIntervalMs: options.pollIntervalMs,
|
|
265
|
+
graceMs: options.graceMs,
|
|
266
|
+
onStatus: options.onStatus ? (snapshot) => options.onStatus?.(step, snapshot) : undefined,
|
|
267
|
+
});
|
|
268
|
+
try {
|
|
269
|
+
let before = existing;
|
|
270
|
+
if (plan.mode === 'stopStart' && existing.application.desiredState !== 'STOPPED') {
|
|
271
|
+
const sentAt = Date.now();
|
|
272
|
+
await client.cloudHub2.setDesiredState(orgId, env.id, existing.id, 'STOPPED');
|
|
273
|
+
performed.push('stop requested');
|
|
274
|
+
const stopped = await waitFor('stop', undefined, sentAt);
|
|
275
|
+
if (!stopped.snapshot.settled) {
|
|
276
|
+
throw new Error(`Stop did not complete (${stopped.snapshot.phase}${stopped.timedOut ? ', timed out' : ''}); the change was not applied. The app may still be stopping.`);
|
|
277
|
+
}
|
|
278
|
+
performed.push('stopped');
|
|
279
|
+
before = stopped.deployment;
|
|
280
|
+
}
|
|
281
|
+
const sentAt = Date.now();
|
|
282
|
+
const deployment = await client.cloudHub2.patchDeployment(orgId, env.id, existing.id, plan.patch);
|
|
283
|
+
performed.push(plan.mode === 'stopStart' ? 'change applied and start requested' : 'change applied');
|
|
284
|
+
if (!options.wait)
|
|
285
|
+
return { deployment, performed };
|
|
286
|
+
const expected = deployment.desiredVersion && deployment.desiredVersion !== before.desiredVersion
|
|
287
|
+
? deployment.desiredVersion
|
|
288
|
+
: undefined;
|
|
289
|
+
const wasRunning = before.application.desiredState !== 'STOPPED';
|
|
290
|
+
const result = await waitFor('apply', wasRunning ? before : undefined, sentAt, expected);
|
|
291
|
+
performed.push(result.snapshot.settled ? 'settled' : `wait ended in ${result.snapshot.phase}`);
|
|
292
|
+
return { deployment: result.deployment, performed, snapshot: result.snapshot, timedOut: result.timedOut };
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
const leftStopped = performed.includes('stopped') && !performed.some((step) => step.startsWith('change applied'));
|
|
296
|
+
const message = redactText(errorMessage(error), secretValues);
|
|
297
|
+
const err = new Error(leftStopped
|
|
298
|
+
? `${message}\nThe application was stopped and is still stopped. Steps done: ${performed.join(', ')}`
|
|
299
|
+
: performed.length
|
|
300
|
+
? `${message}\nSteps done: ${performed.join(', ')}`
|
|
301
|
+
: message);
|
|
302
|
+
throw err;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=app-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-change.js","sourceRoot":"","sources":["../../src/workflows/app-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment state model
|
|
3
|
+
* One interpretation of CloudHub 2.0 deployment, application and replica status, shared by
|
|
4
|
+
* status reads and every wait loop. It hides the transient FAILED the platform reports while
|
|
5
|
+
* a stopped app starts, and never treats a status left over from the previous spec as settled.
|
|
6
|
+
*/
|
|
7
|
+
import type { CH2Deployment } from '../api/CloudHub2Api.js';
|
|
8
|
+
/** The slice of the CloudHub 2.0 API the wait loop needs. */
|
|
9
|
+
export interface DeploymentReader {
|
|
10
|
+
getDeployment(orgId: string, envId: string, deploymentId: string): Promise<CH2Deployment>;
|
|
11
|
+
}
|
|
12
|
+
export interface WaitOptions extends PhaseOptions {
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
pollIntervalMs?: number;
|
|
15
|
+
onStatus?: (snapshot: PhaseSnapshot, deployment: CH2Deployment) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface WaitResult {
|
|
18
|
+
deployment: CH2Deployment;
|
|
19
|
+
snapshot: PhaseSnapshot;
|
|
20
|
+
timedOut: boolean;
|
|
21
|
+
waitedMs: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Poll until the deployment is terminal (settled, failed past the grace window, or degraded)
|
|
25
|
+
* or the timeout passes. Never throws for a failed deployment; the caller reads the snapshot.
|
|
26
|
+
*/
|
|
27
|
+
export declare function waitForAppPhase(api: DeploymentReader, orgId: string, envId: string, deploymentId: string, options?: WaitOptions): Promise<WaitResult>;
|
|
28
|
+
export type AppPhase = 'RUNNING' | 'STARTING' | 'UPDATING' | 'DEGRADED' | 'FAILED' | 'STOPPING' | 'STOPPED';
|
|
29
|
+
export interface PhaseSnapshot {
|
|
30
|
+
phase: AppPhase;
|
|
31
|
+
/** The app reached its desired state on the expected spec. */
|
|
32
|
+
settled: boolean;
|
|
33
|
+
/** Waiting longer will not change the outcome (settled, failed or degraded past the grace window). */
|
|
34
|
+
terminal: boolean;
|
|
35
|
+
reason?: string;
|
|
36
|
+
desiredState: string;
|
|
37
|
+
platformStatus: string;
|
|
38
|
+
replicas: {
|
|
39
|
+
total: number;
|
|
40
|
+
started: number;
|
|
41
|
+
onSpec: number;
|
|
42
|
+
failed: number;
|
|
43
|
+
};
|
|
44
|
+
specVersion?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface PhaseOptions {
|
|
47
|
+
/** Spec version the change produced; replicas must run it to count as settled. */
|
|
48
|
+
expectedSpecVersion?: string;
|
|
49
|
+
/** The deployment's `lastModifiedDate` before the change; an unchanged value means the change is not visible yet. */
|
|
50
|
+
previousModifiedDate?: number;
|
|
51
|
+
/** When the change was sent (local epoch ms), the start of the grace window. Defaults to the deployment's last modification. */
|
|
52
|
+
sinceChange?: number;
|
|
53
|
+
/** How long a FAILED status is treated as start-up noise. Default 90 s. */
|
|
54
|
+
graceMs?: number;
|
|
55
|
+
now?: number;
|
|
56
|
+
}
|
|
57
|
+
export declare const DEFAULT_GRACE_MS = 90000;
|
|
58
|
+
/** Interpret a deployment detail as a single phase. Pure; safe to call on every poll. */
|
|
59
|
+
export declare function deploymentPhase(deployment: CH2Deployment, options?: PhaseOptions): PhaseSnapshot;
|
|
60
|
+
//# sourceMappingURL=app-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../src/workflows/app-state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC7B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7F;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3E;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACjC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,WAAgB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qHAAqH;IACrH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gIAAgI;IAChI,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAKvC,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,GAAE,YAAiB,GAAG,aAAa,CAgEpG"}
|