@sfdxy/anypoint-connect 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -114
- package/dist/api/ExchangeApi.d.ts +1 -1
- package/dist/api/ExchangeApi.d.ts.map +1 -1
- package/dist/api/ExchangeApi.js +3 -1
- package/dist/api/ExchangeApi.js.map +1 -1
- package/dist/auth/OAuthCallbackPage.d.ts +23 -0
- package/dist/auth/OAuthCallbackPage.d.ts.map +1 -0
- package/dist/auth/OAuthCallbackPage.js +155 -0
- package/dist/auth/OAuthCallbackPage.js.map +1 -0
- package/dist/auth/OAuthFlow.d.ts +7 -1
- package/dist/auth/OAuthFlow.d.ts.map +1 -1
- package/dist/auth/OAuthFlow.js +42 -32
- package/dist/auth/OAuthFlow.js.map +1 -1
- package/dist/auth/TokenManager.d.ts +2 -0
- package/dist/auth/TokenManager.d.ts.map +1 -1
- package/dist/auth/TokenManager.js +34 -9
- package/dist/auth/TokenManager.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.d.ts +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +13 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools/exchange.d.ts.map +1 -1
- package/dist/mcp/tools/exchange.js +43 -13
- package/dist/mcp/tools/exchange.js.map +1 -1
- package/dist/safety/artifact.d.ts +13 -0
- package/dist/safety/artifact.d.ts.map +1 -0
- package/dist/safety/artifact.js +58 -0
- package/dist/safety/artifact.js.map +1 -0
- package/package.json +7 -4
package/dist/auth/OAuthFlow.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Browser-based OAuth2 authorization code flow for Anypoint Platform
|
|
4
4
|
*/
|
|
5
5
|
import * as http from 'http';
|
|
6
|
+
import { OAUTH_CALLBACK_HEADERS, renderOAuthCallbackPage } from './OAuthCallbackPage.js';
|
|
6
7
|
const DEFAULT_BASE_URL = 'https://anypoint.mulesoft.com';
|
|
7
8
|
export class OAuthFlow {
|
|
8
9
|
config;
|
|
@@ -27,7 +28,7 @@ export class OAuthFlow {
|
|
|
27
28
|
/**
|
|
28
29
|
* Start local callback server and wait for authorization code
|
|
29
30
|
*/
|
|
30
|
-
async waitForCallback(port = 3000, callbackPath = '/api/callback', timeoutMs = 120000) {
|
|
31
|
+
async waitForCallback(port = 3000, callbackPath = '/api/callback', timeoutMs = 120000, options = {}) {
|
|
31
32
|
return new Promise((resolve, reject) => {
|
|
32
33
|
const server = http.createServer((req, res) => {
|
|
33
34
|
const parsedUrl = new URL(req.url || '', `http://localhost`);
|
|
@@ -37,47 +38,56 @@ export class OAuthFlow {
|
|
|
37
38
|
const error = parsedUrl.searchParams.get('error');
|
|
38
39
|
const error_description = parsedUrl.searchParams.get('error_description');
|
|
39
40
|
if (error) {
|
|
40
|
-
res.writeHead(400,
|
|
41
|
-
res.end(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
<p style="color: #888;">You can close this window.</p>
|
|
48
|
-
</body>
|
|
49
|
-
</html>
|
|
50
|
-
`);
|
|
41
|
+
res.writeHead(400, OAUTH_CALLBACK_HEADERS);
|
|
42
|
+
res.end(renderOAuthCallbackPage({
|
|
43
|
+
status: 'error',
|
|
44
|
+
title: 'Authentication was not completed',
|
|
45
|
+
message: 'Anypoint Platform did not authorize this local session.',
|
|
46
|
+
detail: error_description || error,
|
|
47
|
+
}));
|
|
51
48
|
server.close();
|
|
52
49
|
reject(new Error(`OAuth error: ${error_description || error}`));
|
|
53
50
|
return;
|
|
54
51
|
}
|
|
55
|
-
if (code
|
|
56
|
-
res.writeHead(
|
|
57
|
-
res.end(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
</body>
|
|
65
|
-
</html>
|
|
66
|
-
`);
|
|
67
|
-
server.close();
|
|
68
|
-
resolve({ code: code, state: state });
|
|
52
|
+
if (!code || !state) {
|
|
53
|
+
res.writeHead(400, OAUTH_CALLBACK_HEADERS);
|
|
54
|
+
res.end(renderOAuthCallbackPage({
|
|
55
|
+
status: 'error',
|
|
56
|
+
title: 'The callback was incomplete',
|
|
57
|
+
message: 'The authorization response did not contain both a code and state value.',
|
|
58
|
+
detail: 'Return to the terminal and start the login again if it does not continue.',
|
|
59
|
+
}));
|
|
60
|
+
return;
|
|
69
61
|
}
|
|
70
|
-
|
|
71
|
-
res.writeHead(400,
|
|
72
|
-
res.end(
|
|
62
|
+
if (options.expectedState && state !== options.expectedState) {
|
|
63
|
+
res.writeHead(400, OAUTH_CALLBACK_HEADERS);
|
|
64
|
+
res.end(renderOAuthCallbackPage({
|
|
65
|
+
status: 'error',
|
|
66
|
+
title: 'The callback could not be verified',
|
|
67
|
+
message: 'This response did not match the login request started by the CLI.',
|
|
68
|
+
detail: 'For your safety, no authorization code was accepted.',
|
|
69
|
+
}));
|
|
70
|
+
return;
|
|
73
71
|
}
|
|
72
|
+
res.writeHead(200, OAUTH_CALLBACK_HEADERS);
|
|
73
|
+
res.end(renderOAuthCallbackPage({
|
|
74
|
+
status: 'success',
|
|
75
|
+
title: 'Authentication successful',
|
|
76
|
+
message: 'Anypoint Platform returned control to Anypoint Connect securely.',
|
|
77
|
+
}));
|
|
78
|
+
server.close();
|
|
79
|
+
resolve({ code, state });
|
|
74
80
|
}
|
|
75
81
|
else {
|
|
76
|
-
res.writeHead(404,
|
|
77
|
-
res.end(
|
|
82
|
+
res.writeHead(404, OAUTH_CALLBACK_HEADERS);
|
|
83
|
+
res.end(renderOAuthCallbackPage({
|
|
84
|
+
status: 'error',
|
|
85
|
+
title: 'Callback page not found',
|
|
86
|
+
message: 'This local server only accepts the configured OAuth callback path.',
|
|
87
|
+
}));
|
|
78
88
|
}
|
|
79
89
|
});
|
|
80
|
-
server.listen(port, () => {
|
|
90
|
+
server.listen(port, options.hostname || 'localhost', () => {
|
|
81
91
|
// Server started, waiting for callback
|
|
82
92
|
});
|
|
83
93
|
const timeout = setTimeout(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthFlow.js","sourceRoot":"","sources":["../../src/auth/OAuthFlow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"OAuthFlow.js","sourceRoot":"","sources":["../../src/auth/OAuthFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ export declare class TokenManager {
|
|
|
21
21
|
private readonly oauthFlow;
|
|
22
22
|
private store;
|
|
23
23
|
private cachedTokens;
|
|
24
|
+
private pendingState;
|
|
24
25
|
constructor(config: TokenManagerConfig);
|
|
25
26
|
getStatus(): Promise<AuthStatus>;
|
|
26
27
|
/**
|
|
@@ -37,5 +38,6 @@ export declare class TokenManager {
|
|
|
37
38
|
setAccessToken(accessToken: string, expiresInSeconds?: number): Promise<void>;
|
|
38
39
|
private getTokens;
|
|
39
40
|
private generateState;
|
|
41
|
+
private getLoopbackHostname;
|
|
40
42
|
}
|
|
41
43
|
//# sourceMappingURL=TokenManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../../src/auth/TokenManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIlE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAA+B;
|
|
1
|
+
{"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../../src/auth/TokenManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIlE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,EAAE,kBAAkB;IAWhC,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAmBtC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA0CvC,eAAe,IAAI,MAAM;IAMzB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAgCvC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAclC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAW3E,SAAS;IASvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,mBAAmB;CAY9B"}
|
|
@@ -9,6 +9,7 @@ export class TokenManager {
|
|
|
9
9
|
oauthFlow;
|
|
10
10
|
store;
|
|
11
11
|
cachedTokens = null;
|
|
12
|
+
pendingState = null;
|
|
12
13
|
constructor(config) {
|
|
13
14
|
this.config = config;
|
|
14
15
|
this.oauthFlow = new OAuthFlow({
|
|
@@ -77,24 +78,38 @@ export class TokenManager {
|
|
|
77
78
|
}
|
|
78
79
|
getAuthorizeUrl() {
|
|
79
80
|
const state = this.generateState();
|
|
81
|
+
this.pendingState = state;
|
|
80
82
|
return this.oauthFlow.getAuthorizeUrl(state);
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
83
85
|
* Perform full OAuth flow with browser
|
|
84
86
|
*/
|
|
85
87
|
async authenticate() {
|
|
88
|
+
if (!this.pendingState) {
|
|
89
|
+
throw new Error('Authentication was not initialized. Generate the authorization URL first.');
|
|
90
|
+
}
|
|
86
91
|
const redirectUrl = new URL(this.config.redirectUri);
|
|
92
|
+
const hostname = this.getLoopbackHostname(redirectUrl);
|
|
87
93
|
const port = parseInt(redirectUrl.port) || 3000;
|
|
88
94
|
const callbackPath = redirectUrl.pathname;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
const expectedState = this.pendingState;
|
|
96
|
+
try {
|
|
97
|
+
// Start callback server first
|
|
98
|
+
const callbackPromise = this.oauthFlow.waitForCallback(port, callbackPath, 120000, {
|
|
99
|
+
expectedState,
|
|
100
|
+
hostname,
|
|
101
|
+
});
|
|
102
|
+
// Wait for callback and exchange code
|
|
103
|
+
const { code } = await callbackPromise;
|
|
104
|
+
const tokens = await this.oauthFlow.exchangeCode(code);
|
|
105
|
+
// Save tokens
|
|
106
|
+
await this.store.save(tokens);
|
|
107
|
+
this.cachedTokens = tokens;
|
|
108
|
+
return tokens;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.pendingState = null;
|
|
112
|
+
}
|
|
98
113
|
}
|
|
99
114
|
async refresh() {
|
|
100
115
|
const tokens = await this.getTokens();
|
|
@@ -130,5 +145,15 @@ export class TokenManager {
|
|
|
130
145
|
generateState() {
|
|
131
146
|
return crypto.randomUUID();
|
|
132
147
|
}
|
|
148
|
+
getLoopbackHostname(redirectUrl) {
|
|
149
|
+
if (redirectUrl.protocol !== 'http:') {
|
|
150
|
+
throw new Error('OAuth callback URL must use HTTP on a loopback host.');
|
|
151
|
+
}
|
|
152
|
+
const hostname = redirectUrl.hostname.replace(/^\[|\]$/g, '');
|
|
153
|
+
if (!['localhost', '127.0.0.1', '::1'].includes(hostname)) {
|
|
154
|
+
throw new Error('OAuth callback URL must use localhost, 127.0.0.1, or ::1.');
|
|
155
|
+
}
|
|
156
|
+
return hostname;
|
|
157
|
+
}
|
|
133
158
|
}
|
|
134
159
|
//# sourceMappingURL=TokenManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../../src/auth/TokenManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiB3C,MAAM,OAAO,YAAY;IACJ,MAAM,CAAqB;IAC3B,SAAS,CAAY;IAC9B,KAAK,CAAa;IAClB,YAAY,GAA0B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../../src/auth/TokenManager.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { OAuthFlow, type OAuthConfig } from './OAuthFlow.js';
|
|
1
|
+
export { OAuthFlow, type OAuthConfig, type OAuthCallbackOptions } from './OAuthFlow.js';
|
|
2
2
|
export { TokenManager, type TokenManagerConfig, type AuthStatus } from './TokenManager.js';
|
|
3
3
|
export { FileStore } from './FileStore.js';
|
|
4
4
|
export type { TokenStore, AnypointTokens } from './TokenStore.js';
|
package/dist/auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA+C,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,YAAY,EAA4C,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -40,7 +40,7 @@ export function createAuthCommand() {
|
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
auth.command('logout')
|
|
43
|
-
.description('Clear stored
|
|
43
|
+
.description('Clear stored OAuth tokens (keeps the Client ID and Secret)')
|
|
44
44
|
.option('-p, --profile <name>', 'Profile to log out')
|
|
45
45
|
.action(async (options) => {
|
|
46
46
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,iBAAiB;IAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;IAExF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC5C,IAAI,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,gDAAgD,WAAW,MAAM,CAAC,CAAC;YAC5E,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;YAExB,sDAAsD;YACtD,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAE1C,eAAe;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;YAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;YAE7D,MAAM,WAAW,CAAC;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,+BAA+B;YAC/B,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;YAChF,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7C,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,0BAA0B,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,6 @@
|
|
|
3
3
|
* anc config init | show | set <key> <value> | path | profiles | use <profile>
|
|
4
4
|
*/
|
|
5
5
|
import { Command } from 'commander';
|
|
6
|
+
export declare function promptForClientSecret(existingSecret?: string): Promise<string>;
|
|
6
7
|
export declare function createConfigCommand(): Command;
|
|
7
8
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAsB,qBAAqB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpF;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CA0L7C"}
|
package/dist/commands/config.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { Command } from 'commander';
|
|
6
6
|
import * as readline from 'readline';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
|
+
import password from '@inquirer/password';
|
|
8
9
|
import { log } from '../utils/logger.js';
|
|
9
10
|
import { errorMessage } from '../utils/errors.js';
|
|
10
11
|
import { readSavedConfig, writeSavedConfig, updateSavedConfig, hasSavedConfig, getConfigDir, getProfileDir, listProfiles, resolveProfile, writeProjectConfig, DEFAULT_CALLBACK_URL, } from '../utils/config.js';
|
|
@@ -16,6 +17,16 @@ function ask(rl, prompt, defaultValue) {
|
|
|
16
17
|
});
|
|
17
18
|
});
|
|
18
19
|
}
|
|
20
|
+
export async function promptForClientSecret(existingSecret) {
|
|
21
|
+
const existingSecretHint = existingSecret
|
|
22
|
+
? ` (leave blank to keep the secret ending ${existingSecret.slice(-4)})`
|
|
23
|
+
: '';
|
|
24
|
+
const enteredSecret = await password({
|
|
25
|
+
message: `Client Secret${existingSecretHint}:`,
|
|
26
|
+
mask: true,
|
|
27
|
+
});
|
|
28
|
+
return enteredSecret || existingSecret || '';
|
|
29
|
+
}
|
|
19
30
|
export function createConfigCommand() {
|
|
20
31
|
const config = new Command('config').description('Manage Anypoint Connect configuration');
|
|
21
32
|
// ── config init ──────────────────────────────────
|
|
@@ -41,13 +52,11 @@ export function createConfigCommand() {
|
|
|
41
52
|
log.dim(` Tokens saved to: ~/.anypoint-connect/profiles/${profileName}/tokens.enc (AES-256-GCM)`);
|
|
42
53
|
console.log();
|
|
43
54
|
const clientId = await ask(rl, ' Client ID:', existing?.clientId);
|
|
44
|
-
const clientSecret = await ask(rl, ' Client Secret:', existing?.clientSecret ? '••••••' + existing.clientSecret.slice(-4) : undefined);
|
|
45
55
|
const callbackUrl = await ask(rl, ' Callback URL:', existing?.callbackUrl || DEFAULT_CALLBACK_URL);
|
|
46
56
|
const baseUrl = await ask(rl, ' Base URL:', existing?.baseUrl || 'https://anypoint.mulesoft.com');
|
|
47
57
|
const defaultEnv = await ask(rl, ' Default Environment (optional):', existing?.defaultEnv);
|
|
48
58
|
rl.close();
|
|
49
|
-
|
|
50
|
-
const resolvedSecret = clientSecret.startsWith('••••••') && existing?.clientSecret ? existing.clientSecret : clientSecret;
|
|
59
|
+
const resolvedSecret = await promptForClientSecret(existing?.clientSecret);
|
|
51
60
|
if (!clientId || !resolvedSecret) {
|
|
52
61
|
log.error('Client ID and Client Secret are required');
|
|
53
62
|
process.exit(1);
|
|
@@ -63,6 +72,7 @@ export function createConfigCommand() {
|
|
|
63
72
|
console.log();
|
|
64
73
|
log.success(`Configuration saved for profile "${profileName}"!`);
|
|
65
74
|
log.kv('Location', `${getProfileDir(profileName)}/config.json`);
|
|
75
|
+
log.dim(' The Client Secret is stored in this user-only file; OAuth tokens are encrypted separately.');
|
|
66
76
|
console.log();
|
|
67
77
|
log.info('Next step: authenticate with Anypoint Platform');
|
|
68
78
|
log.dim(` anc auth login${profileName !== 'default' ? ` --profile ${profileName}` : ''}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GAEvB,MAAM,oBAAoB,CAAC;AAE5B,SAAS,GAAG,CAAC,EAAsB,EAAE,MAAc,EAAE,YAAqB;IACtE,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;IAC7F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,uCAAuC,CAAC,CAAC;IAE1F,oDAAoD;IACpD,MAAM;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QAC5C,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QAE9C,IAAI,QAAQ,IAAI,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,6CAA6C,WAAW,qCAAqC,CAAC,CAAC;YACxG,GAAG,CAAC,GAAG,CAAC,kBAAkB,aAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,qCAAqC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,wDAAwD,WAAW,cAAc,CAAC,CAAC;YAC3F,GAAG,CAAC,GAAG,CAAC,mDAAmD,WAAW,2BAA2B,CAAC,CAAC;YACnG,OAAO,CAAC,GAAG,EAAE,CAAC;YAEd,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEnE,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { AnypointClient, type AnypointClientConfig } from './client/AnypointClient.js';
|
|
5
5
|
export { TokenManager, type TokenManagerConfig, type AuthStatus } from './auth/TokenManager.js';
|
|
6
|
-
export { OAuthFlow, type OAuthConfig } from './auth/OAuthFlow.js';
|
|
6
|
+
export { OAuthFlow, type OAuthConfig, type OAuthCallbackOptions } from './auth/OAuthFlow.js';
|
|
7
7
|
export { FileStore } from './auth/FileStore.js';
|
|
8
8
|
export type { TokenStore, AnypointTokens } from './auth/TokenStore.js';
|
|
9
9
|
export { AccessManagementApi, type UserProfile, type Environment, type OrgEntitlements, type OrgSubscription, type OrgDetails, } from './api/AccessManagementApi.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvF,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGvF,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,EACH,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,UAAU,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,GACtC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACH,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EACH,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,GAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACrH,OAAO,EACH,aAAa,EACb,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,GACpC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACzG,OAAO,EACH,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EAAE,cAAc,EAA6B,MAAM,4BAA4B,CAAC;AAEvF,OAAO;AACP,OAAO,EAAE,YAAY,EAA4C,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,OAAO,EAAE,cAAc,EAA6B,MAAM,4BAA4B,CAAC;AAEvF,OAAO;AACP,OAAO,EAAE,YAAY,EAA4C,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,SAAS,EAA+C,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,OAAO;AACP,OAAO,EACH,mBAAmB,GAMtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACH,YAAY,GAUf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACH,aAAa,GAQhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAgD,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,aAAa,EAAiE,MAAM,wBAAwB,CAAC;AACtH,OAAO,EACH,eAAe,GAMlB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAkD,MAAM,+BAA+B,CAAC;AACrH,OAAO,EACH,aAAa,GAGhB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,WAAW,GAKd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAoD,MAAM,wBAAwB,CAAC;AACzG,OAAO,EACH,cAAc,GAIjB,MAAM,yBAAyB,CAAC;AAEjC,QAAQ;AACR,OAAO,EAAE,UAAU,EAAyB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAmB,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAA0B,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/exchange.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/exchange.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,QA8gB9E"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* search_exchange, download_api_spec, compare_environments, get_exchange_asset,
|
|
4
4
|
* publish_app_jar, deploy_jar
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import { readFile } from 'node:fs/promises';
|
|
7
|
+
import { inspectArtifact, verifyArtifactDigest } from '../../safety/artifact.js';
|
|
7
8
|
import { z } from 'zod';
|
|
8
9
|
import { mcpError, mcpText, dryRunPreview } from './shared.js';
|
|
9
10
|
import { validateJarFile } from '../../safety/guards.js';
|
|
@@ -197,16 +198,24 @@ export function registerExchangeTools(server, client) {
|
|
|
197
198
|
assetId: z
|
|
198
199
|
.string()
|
|
199
200
|
.optional()
|
|
200
|
-
.describe('Exchange asset ID.
|
|
201
|
-
assetVersion: z
|
|
201
|
+
.describe('Exchange asset ID. Defaults to the embedded Maven artifactId; explicit publication mappings are preserved.'),
|
|
202
|
+
assetVersion: z
|
|
203
|
+
.string()
|
|
204
|
+
.optional()
|
|
205
|
+
.describe('Exchange asset version. Defaults to the embedded Maven version.'),
|
|
202
206
|
groupId: z.string().optional().describe('Exchange group ID (default: the organization ID).'),
|
|
207
|
+
expectedSha256: z
|
|
208
|
+
.string()
|
|
209
|
+
.regex(/^[a-fA-F0-9]{64}$/)
|
|
210
|
+
.optional()
|
|
211
|
+
.describe('SHA-256 returned by the build or publication preview; rejects changed artifact bytes.'),
|
|
203
212
|
confirm: z
|
|
204
213
|
.boolean()
|
|
205
214
|
.optional()
|
|
206
215
|
.describe('Set true to upload. When omitted/false, returns a dry-run preview and uploads nothing.'),
|
|
207
216
|
},
|
|
208
217
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },
|
|
209
|
-
}, async ({ jarPath, assetId, assetVersion, groupId, confirm }) => {
|
|
218
|
+
}, async ({ jarPath, assetId, assetVersion, groupId, expectedSha256, confirm }) => {
|
|
210
219
|
try {
|
|
211
220
|
const check = validateJarFile(jarPath);
|
|
212
221
|
if (!check.valid) {
|
|
@@ -214,12 +223,20 @@ export function registerExchangeTools(server, client) {
|
|
|
214
223
|
}
|
|
215
224
|
const orgId = await client.getDefaultOrgId();
|
|
216
225
|
const resolvedGroupId = groupId || orgId;
|
|
217
|
-
const
|
|
218
|
-
const
|
|
226
|
+
const bytes = await readFile(jarPath);
|
|
227
|
+
const artifact = inspectArtifact(bytes, undefined, Boolean(assetId && assetVersion));
|
|
228
|
+
verifyArtifactDigest(bytes, expectedSha256);
|
|
229
|
+
const resolvedAssetId = assetId || artifact.coordinates?.artifactId;
|
|
230
|
+
const resolvedVersion = assetVersion || artifact.coordinates?.version;
|
|
231
|
+
if (!resolvedAssetId || !resolvedVersion) {
|
|
232
|
+
throw new Error('Embedded Maven identity is unavailable; supply explicit assetId and assetVersion');
|
|
233
|
+
}
|
|
219
234
|
if (!confirm) {
|
|
220
235
|
return dryRunPreview({
|
|
221
236
|
action: 'publish app jar to Exchange',
|
|
222
237
|
jarPath,
|
|
238
|
+
artifact,
|
|
239
|
+
expectedSha256: artifact.sha256,
|
|
223
240
|
coordinates: {
|
|
224
241
|
groupId: resolvedGroupId,
|
|
225
242
|
assetId: resolvedAssetId,
|
|
@@ -228,7 +245,7 @@ export function registerExchangeTools(server, client) {
|
|
|
228
245
|
},
|
|
229
246
|
});
|
|
230
247
|
}
|
|
231
|
-
const result = await client.exchange.publishAppAsset(orgId, resolvedGroupId, resolvedAssetId, resolvedVersion, jarPath);
|
|
248
|
+
const result = await client.exchange.publishAppAsset(orgId, resolvedGroupId, resolvedAssetId, resolvedVersion, jarPath, artifact.sha256);
|
|
232
249
|
return mcpText({
|
|
233
250
|
message: `✅ Published "${result.assetId}" v${result.version} to Exchange`,
|
|
234
251
|
coordinates: {
|
|
@@ -256,11 +273,11 @@ export function registerExchangeTools(server, client) {
|
|
|
256
273
|
assetId: z
|
|
257
274
|
.string()
|
|
258
275
|
.optional()
|
|
259
|
-
.describe('Exchange asset ID (also used as the deployment artifactId).
|
|
276
|
+
.describe('Exchange asset ID (also used as the deployment artifactId). Defaults to embedded Maven artifactId.'),
|
|
260
277
|
assetVersion: z
|
|
261
278
|
.string()
|
|
262
279
|
.optional()
|
|
263
|
-
.describe('Exchange asset
|
|
280
|
+
.describe('Exchange asset and deployment version. Defaults to the embedded Maven version.'),
|
|
264
281
|
groupId: z.string().optional().describe('Exchange/Maven group ID (default: the organization ID).'),
|
|
265
282
|
// create-only settings (rejected when the app already exists)
|
|
266
283
|
runtime: z.string().optional().describe('[new app only] Mule runtime version (default: "4.8.0").'),
|
|
@@ -285,13 +302,18 @@ export function registerExchangeTools(server, client) {
|
|
|
285
302
|
.boolean()
|
|
286
303
|
.optional()
|
|
287
304
|
.describe('Wait for the deployment to reach a running state (default: false).'),
|
|
305
|
+
expectedSha256: z
|
|
306
|
+
.string()
|
|
307
|
+
.regex(/^[a-fA-F0-9]{64}$/)
|
|
308
|
+
.optional()
|
|
309
|
+
.describe('SHA-256 returned by the build or publication preview; rejects changed artifact bytes.'),
|
|
288
310
|
confirm: z
|
|
289
311
|
.boolean()
|
|
290
312
|
.optional()
|
|
291
313
|
.describe('Set true to publish and deploy. When omitted/false, returns a dry-run preview only.'),
|
|
292
314
|
},
|
|
293
315
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },
|
|
294
|
-
}, async ({ jarPath, appName, environment, assetId, assetVersion, groupId, runtime, replicas, region, vcores, properties, secureProperties, jvmArgs, wait, confirm, }) => {
|
|
316
|
+
}, async ({ jarPath, appName, environment, assetId, assetVersion, groupId, runtime, replicas, region, vcores, properties, secureProperties, jvmArgs, wait, expectedSha256, confirm, }) => {
|
|
295
317
|
try {
|
|
296
318
|
const check = validateJarFile(jarPath);
|
|
297
319
|
if (!check.valid) {
|
|
@@ -301,8 +323,14 @@ export function registerExchangeTools(server, client) {
|
|
|
301
323
|
const env = await client.accessManagement.resolveEnvironment(orgId, environment);
|
|
302
324
|
const existing = await client.cloudHub2.findDetailByName(orgId, env.id, appName);
|
|
303
325
|
const resolvedGroupId = groupId || orgId;
|
|
304
|
-
const
|
|
305
|
-
const
|
|
326
|
+
const bytes = await readFile(jarPath);
|
|
327
|
+
const artifact = inspectArtifact(bytes, undefined, Boolean(assetId && assetVersion));
|
|
328
|
+
verifyArtifactDigest(bytes, expectedSha256);
|
|
329
|
+
const resolvedAssetId = assetId || artifact.coordinates?.artifactId;
|
|
330
|
+
const resolvedVersion = assetVersion || artifact.coordinates?.version;
|
|
331
|
+
if (!resolvedAssetId || !resolvedVersion) {
|
|
332
|
+
throw new Error('Embedded Maven identity is unavailable; supply explicit assetId and assetVersion');
|
|
333
|
+
}
|
|
306
334
|
// An update must not restate infra — reject create-only settings for an existing app.
|
|
307
335
|
if (existing) {
|
|
308
336
|
const rejected = [
|
|
@@ -329,6 +357,8 @@ export function registerExchangeTools(server, client) {
|
|
|
329
357
|
if (!confirm) {
|
|
330
358
|
return dryRunPreview({
|
|
331
359
|
action,
|
|
360
|
+
artifact,
|
|
361
|
+
expectedSha256: artifact.sha256,
|
|
332
362
|
app: appName,
|
|
333
363
|
environment: env.name,
|
|
334
364
|
publish: {
|
|
@@ -355,7 +385,7 @@ export function registerExchangeTools(server, client) {
|
|
|
355
385
|
});
|
|
356
386
|
}
|
|
357
387
|
// 1) Publish the jar to Exchange.
|
|
358
|
-
const published = await client.exchange.publishAppAsset(orgId, resolvedGroupId, resolvedAssetId, resolvedVersion, jarPath);
|
|
388
|
+
const published = await client.exchange.publishAppAsset(orgId, resolvedGroupId, resolvedAssetId, resolvedVersion, jarPath, artifact.sha256);
|
|
359
389
|
// 2) Deploy: safe ref-only update for an existing app, full create otherwise.
|
|
360
390
|
let deployment;
|
|
361
391
|
if (existing) {
|