@sfdxy/anypoint-connect 0.17.0 → 0.18.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.
Files changed (124) hide show
  1. package/README.md +1 -1
  2. package/dist/api/LogsApi.d.ts +74 -10
  3. package/dist/api/LogsApi.d.ts.map +1 -1
  4. package/dist/api/LogsApi.js +312 -19
  5. package/dist/api/LogsApi.js.map +1 -1
  6. package/dist/auth/BearerProvider.d.ts +12 -0
  7. package/dist/auth/BearerProvider.d.ts.map +1 -0
  8. package/dist/auth/BearerProvider.js +18 -0
  9. package/dist/auth/BearerProvider.js.map +1 -0
  10. package/dist/auth/ClientCredentialsProvider.d.ts +23 -0
  11. package/dist/auth/ClientCredentialsProvider.d.ts.map +1 -0
  12. package/dist/auth/ClientCredentialsProvider.js +59 -0
  13. package/dist/auth/ClientCredentialsProvider.js.map +1 -0
  14. package/dist/auth/TokenProvider.d.ts +12 -0
  15. package/dist/auth/TokenProvider.d.ts.map +1 -0
  16. package/dist/auth/TokenProvider.js +2 -0
  17. package/dist/auth/TokenProvider.js.map +1 -0
  18. package/dist/auth/index.d.ts +1 -0
  19. package/dist/auth/index.d.ts.map +1 -1
  20. package/dist/cli.js +6 -0
  21. package/dist/cli.js.map +1 -1
  22. package/dist/client/AnypointClient.d.ts +20 -0
  23. package/dist/client/AnypointClient.d.ts.map +1 -1
  24. package/dist/client/AnypointClient.js +79 -12
  25. package/dist/client/AnypointClient.js.map +1 -1
  26. package/dist/client/HttpClient.d.ts +3 -3
  27. package/dist/client/HttpClient.d.ts.map +1 -1
  28. package/dist/client/HttpClient.js +13 -3
  29. package/dist/client/HttpClient.js.map +1 -1
  30. package/dist/commands/alerts.d.ts.map +1 -1
  31. package/dist/commands/alerts.js +20 -3
  32. package/dist/commands/alerts.js.map +1 -1
  33. package/dist/commands/apps.d.ts.map +1 -1
  34. package/dist/commands/apps.js +43 -1
  35. package/dist/commands/apps.js.map +1 -1
  36. package/dist/commands/auth.d.ts.map +1 -1
  37. package/dist/commands/auth.js +21 -0
  38. package/dist/commands/auth.js.map +1 -1
  39. package/dist/commands/config.d.ts.map +1 -1
  40. package/dist/commands/config.js +20 -1
  41. package/dist/commands/config.js.map +1 -1
  42. package/dist/commands/logs.d.ts +1 -1
  43. package/dist/commands/logs.d.ts.map +1 -1
  44. package/dist/commands/logs.js +60 -10
  45. package/dist/commands/logs.js.map +1 -1
  46. package/dist/commands/monitor.d.ts.map +1 -1
  47. package/dist/commands/monitor.js +29 -1
  48. package/dist/commands/monitor.js.map +1 -1
  49. package/dist/commands/runtimes.d.ts.map +1 -1
  50. package/dist/commands/runtimes.js +38 -5
  51. package/dist/commands/runtimes.js.map +1 -1
  52. package/dist/commands/shared.d.ts.map +1 -1
  53. package/dist/commands/shared.js +1 -7
  54. package/dist/commands/shared.js.map +1 -1
  55. package/dist/config/auth-modes.d.ts +11 -0
  56. package/dist/config/auth-modes.d.ts.map +1 -0
  57. package/dist/config/auth-modes.js +18 -0
  58. package/dist/config/auth-modes.js.map +1 -0
  59. package/dist/config/profiles.d.ts +9 -0
  60. package/dist/config/profiles.d.ts.map +1 -1
  61. package/dist/config/profiles.js +16 -3
  62. package/dist/config/profiles.js.map +1 -1
  63. package/dist/index.d.ts +4 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/mcp/server.d.ts.map +1 -1
  68. package/dist/mcp/server.js +1 -7
  69. package/dist/mcp/server.js.map +1 -1
  70. package/dist/mcp/tools/alerts.d.ts.map +1 -1
  71. package/dist/mcp/tools/alerts.js +26 -12
  72. package/dist/mcp/tools/alerts.js.map +1 -1
  73. package/dist/mcp/tools/app-inputs.d.ts +16 -0
  74. package/dist/mcp/tools/app-inputs.d.ts.map +1 -1
  75. package/dist/mcp/tools/app-inputs.js +27 -1
  76. package/dist/mcp/tools/app-inputs.js.map +1 -1
  77. package/dist/mcp/tools/apps-deploy.d.ts.map +1 -1
  78. package/dist/mcp/tools/apps-deploy.js +18 -2
  79. package/dist/mcp/tools/apps-deploy.js.map +1 -1
  80. package/dist/mcp/tools/apps-lifecycle.d.ts.map +1 -1
  81. package/dist/mcp/tools/apps-lifecycle.js +10 -3
  82. package/dist/mcp/tools/apps-lifecycle.js.map +1 -1
  83. package/dist/mcp/tools/apps-read.d.ts.map +1 -1
  84. package/dist/mcp/tools/apps-read.js +11 -5
  85. package/dist/mcp/tools/apps-read.js.map +1 -1
  86. package/dist/mcp/tools/identity.d.ts.map +1 -1
  87. package/dist/mcp/tools/identity.js +27 -3
  88. package/dist/mcp/tools/identity.js.map +1 -1
  89. package/dist/mcp/tools/monitoring.d.ts.map +1 -1
  90. package/dist/mcp/tools/monitoring.js +5 -3
  91. package/dist/mcp/tools/monitoring.js.map +1 -1
  92. package/dist/mcp/tools/output-schemas.d.ts +83 -0
  93. package/dist/mcp/tools/output-schemas.d.ts.map +1 -0
  94. package/dist/mcp/tools/output-schemas.js +81 -0
  95. package/dist/mcp/tools/output-schemas.js.map +1 -0
  96. package/dist/mcp/tools/shared.d.ts +12 -0
  97. package/dist/mcp/tools/shared.d.ts.map +1 -1
  98. package/dist/mcp/tools/shared.js +8 -0
  99. package/dist/mcp/tools/shared.js.map +1 -1
  100. package/dist/safety/plan-binding.d.ts +21 -0
  101. package/dist/safety/plan-binding.d.ts.map +1 -0
  102. package/dist/safety/plan-binding.js +61 -0
  103. package/dist/safety/plan-binding.js.map +1 -0
  104. package/dist/utils/formatter.d.ts +2 -0
  105. package/dist/utils/formatter.d.ts.map +1 -1
  106. package/dist/utils/formatter.js +4 -0
  107. package/dist/utils/formatter.js.map +1 -1
  108. package/dist/utils/logger.d.ts +2 -0
  109. package/dist/utils/logger.d.ts.map +1 -1
  110. package/dist/utils/logger.js +23 -13
  111. package/dist/utils/logger.js.map +1 -1
  112. package/dist/workflows/alerts.d.ts +12 -2
  113. package/dist/workflows/alerts.d.ts.map +1 -1
  114. package/dist/workflows/alerts.js +40 -4
  115. package/dist/workflows/alerts.js.map +1 -1
  116. package/dist/workflows/app-change.d.ts +7 -0
  117. package/dist/workflows/app-change.d.ts.map +1 -1
  118. package/dist/workflows/app-change.js +35 -1
  119. package/dist/workflows/app-change.js.map +1 -1
  120. package/dist/workflows/jar-deployment.d.ts +1 -0
  121. package/dist/workflows/jar-deployment.d.ts.map +1 -1
  122. package/dist/workflows/jar-deployment.js +4 -1
  123. package/dist/workflows/jar-deployment.js.map +1 -1
  124. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import type { TokenProvider } from './TokenProvider.js';
2
+ export interface ClientCredentialsConfig {
3
+ clientId: string;
4
+ clientSecret: string;
5
+ baseUrl?: string;
6
+ }
7
+ /**
8
+ * Service authentication: a Connected App's client credentials exchanged for a token. The token lives
9
+ * in memory only (never the human token file), concurrent callers share one exchange, and it is
10
+ * renewed shortly before it expires. It uses its own request, not the authenticated client, so token
11
+ * acquisition cannot call itself.
12
+ */
13
+ export declare class ClientCredentialsProvider implements TokenProvider {
14
+ readonly unauthorizedMessage = "The service token was rejected. Check that the Connected App is still valid and has access to this organization.";
15
+ private readonly config;
16
+ private cached;
17
+ private pending;
18
+ constructor(config: ClientCredentialsConfig);
19
+ invalidate(): void;
20
+ getAccessToken(): Promise<string>;
21
+ private acquire;
22
+ }
23
+ //# sourceMappingURL=ClientCredentialsProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientCredentialsProvider.d.ts","sourceRoot":"","sources":["../../src/auth/ClientCredentialsProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQxD,MAAM,WAAW,uBAAuB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;GAKG;AACH,qBAAa,yBAA0B,YAAW,aAAa;IAC3D,QAAQ,CAAC,mBAAmB,sHAC2F;IACvH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAqD;IACnE,OAAO,CAAC,OAAO,CAAgC;gBAEnC,MAAM,EAAE,uBAAuB;IAO3C,UAAU,IAAI,IAAI;IAIZ,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YAQzB,OAAO;CAyBxB"}
@@ -0,0 +1,59 @@
1
+ const DEFAULT_BASE_URL = 'https://anypoint.mulesoft.com';
2
+ /** Used when the platform omits `expires_in`: a short lifetime, so a missing field never over-trusts a token. */
3
+ const FALLBACK_LIFETIME_SECONDS = 600;
4
+ const RENEW_BEFORE_EXPIRY_MS = 60_000;
5
+ const TOKEN_REQUEST_TIMEOUT_MS = 30_000;
6
+ /**
7
+ * Service authentication: a Connected App's client credentials exchanged for a token. The token lives
8
+ * in memory only (never the human token file), concurrent callers share one exchange, and it is
9
+ * renewed shortly before it expires. It uses its own request, not the authenticated client, so token
10
+ * acquisition cannot call itself.
11
+ */
12
+ export class ClientCredentialsProvider {
13
+ unauthorizedMessage = 'The service token was rejected. Check that the Connected App is still valid and has access to this organization.';
14
+ config;
15
+ cached = null;
16
+ pending = null;
17
+ constructor(config) {
18
+ if (!config.clientId || !config.clientSecret) {
19
+ throw new Error('client_credentials authentication needs a client ID and secret.');
20
+ }
21
+ this.config = config;
22
+ }
23
+ invalidate() {
24
+ this.cached = null;
25
+ }
26
+ async getAccessToken() {
27
+ if (this.cached && this.cached.expiresAt - Date.now() > RENEW_BEFORE_EXPIRY_MS)
28
+ return this.cached.token;
29
+ this.pending ??= this.acquire().finally(() => {
30
+ this.pending = null;
31
+ });
32
+ return this.pending;
33
+ }
34
+ async acquire() {
35
+ const url = `${this.config.baseUrl || DEFAULT_BASE_URL}/accounts/api/v2/oauth2/token`;
36
+ const response = await fetch(url, {
37
+ method: 'POST',
38
+ signal: AbortSignal.timeout(TOKEN_REQUEST_TIMEOUT_MS), // a hung endpoint must not block every request
39
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
40
+ body: new URLSearchParams({
41
+ grant_type: 'client_credentials',
42
+ client_id: this.config.clientId,
43
+ client_secret: this.config.clientSecret,
44
+ }).toString(),
45
+ });
46
+ const data = (await response.json().catch(() => ({})));
47
+ if (!response.ok || !data.access_token) {
48
+ // Only the platform's own error fields: never the request, which carries the secret.
49
+ const detail = [data.error, data.error_description].filter(Boolean).join(': ');
50
+ throw new Error(`Service token request failed (HTTP ${response.status})${detail ? `: ${detail}` : ''}`);
51
+ }
52
+ const seconds = Number.isFinite(data.expires_in) && data.expires_in > 0
53
+ ? data.expires_in
54
+ : FALLBACK_LIFETIME_SECONDS;
55
+ this.cached = { token: data.access_token, expiresAt: Date.now() + seconds * 1000 };
56
+ return data.access_token;
57
+ }
58
+ }
59
+ //# sourceMappingURL=ClientCredentialsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientCredentialsProvider.js","sourceRoot":"","sources":["../../src/auth/ClientCredentialsProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * What the HTTP client needs from authentication: a valid access token for the next request.
3
+ * `TokenManager` (human login), `ClientCredentialsProvider` and `BearerProvider` all satisfy it.
4
+ */
5
+ export interface TokenProvider {
6
+ getAccessToken(): Promise<string>;
7
+ /** Shown instead of a bare 401 when the platform rejects the token and nothing can renew it. */
8
+ readonly unauthorizedMessage?: string;
9
+ /** Drop a cached token the platform rejected, so the next request gets a fresh one. */
10
+ invalidate?(): void;
11
+ }
12
+ //# sourceMappingURL=TokenProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenProvider.d.ts","sourceRoot":"","sources":["../../src/auth/TokenProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,gGAAgG;IAChG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,uFAAuF;IACvF,UAAU,CAAC,IAAI,IAAI,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=TokenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenProvider.js","sourceRoot":"","sources":["../../src/auth/TokenProvider.ts"],"names":[],"mappings":""}
@@ -2,4 +2,5 @@ export { OAuthFlow, type OAuthConfig, type OAuthCallbackOptions } from './OAuthF
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';
5
+ export type { TokenProvider } from './TokenProvider.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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,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"}
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;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/cli.js CHANGED
@@ -16,6 +16,7 @@ import { createDesignCenterCommand } from './commands/design-center.js';
16
16
  import { createRuntimesCommand } from './commands/runtimes.js';
17
17
  import { createAlertsCommand } from './commands/alerts.js';
18
18
  import { VERSION } from './version.js';
19
+ import { log } from './utils/logger.js';
19
20
  import { migrateIfNeeded } from './config/profiles.js';
20
21
  // Auto-migrate legacy config to profiles/default/ if needed
21
22
  migrateIfNeeded();
@@ -26,6 +27,11 @@ program
26
27
  .version(VERSION)
27
28
  // Program options only before the subcommand, so `apps update --version 1.2.0` reaches the subcommand
28
29
  .enablePositionalOptions();
30
+ // Under --json, stdout carries only the result; progress and notices go to stderr.
31
+ program.hook('preAction', (_program, action) => {
32
+ if (action.opts().json)
33
+ log.toStderr();
34
+ });
29
35
  program.addCommand(createConfigCommand());
30
36
  program.addCommand(createAuthCommand());
31
37
  program.addCommand(createAppsCommand());
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,4DAA4D;AAC5D,eAAe,EAAE,CAAC;AAElB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CACR,mNAAmN,CACtN;KACA,OAAO,CAAC,OAAO,CAAC;IACjB,sGAAsG;KACrG,uBAAuB,EAAE,CAAC;AAE/B,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAChD,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,OAAO;KACF,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,4DAA4D;AAC5D,eAAe,EAAE,CAAC;AAElB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CACR,mNAAmN,CACtN;KACA,OAAO,CAAC,OAAO,CAAC;IACjB,sGAAsG;KACrG,uBAAuB,EAAE,CAAC;AAE/B,mFAAmF;AACnF,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;IAC3C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI;QAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAChD,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAE1C,OAAO;KACF,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC9C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -18,6 +18,8 @@ import { AnypointMQApi } from '../api/AnypointMQApi.js';
18
18
  import { ObjectStoreApi } from '../api/ObjectStoreApi.js';
19
19
  import { RuntimesApi } from '../api/RuntimesApi.js';
20
20
  import { AlertsApi } from '../api/AlertsApi.js';
21
+ import { type Config } from '../config/profiles.js';
22
+ import { type AuthMode } from '../config/auth-modes.js';
21
23
  export interface AnypointClientConfig {
22
24
  clientId: string;
23
25
  clientSecret: string;
@@ -25,9 +27,20 @@ export interface AnypointClientConfig {
25
27
  baseUrl?: string;
26
28
  cacheTtlMinutes?: number;
27
29
  profileName?: string;
30
+ /** How to authenticate. The browser login when unset, so existing callers are unchanged. */
31
+ authMode?: AuthMode;
32
+ /** The organization to operate in. Required for `client_credentials` and `bearer`. */
33
+ orgId?: string;
34
+ /** The token for `bearer` mode. */
35
+ accessToken?: string;
28
36
  }
29
37
  export declare class AnypointClient {
38
+ /** Only the browser login has a token manager; service modes hold their token in memory. */
30
39
  private readonly tokenManager;
40
+ private readonly authMode;
41
+ private readonly configuredOrgId;
42
+ private readonly provider;
43
+ private userOrgId;
31
44
  private readonly httpClient;
32
45
  private readonly cache;
33
46
  readonly accessManagement: AccessManagementApi;
@@ -44,13 +57,20 @@ export declare class AnypointClient {
44
57
  readonly objectStore: ObjectStoreApi;
45
58
  readonly runtimes: RuntimesApi;
46
59
  readonly alerts: AlertsApi;
60
+ /** A client for a resolved profile configuration. */
61
+ static fromConfig(config: Config): AnypointClient;
47
62
  constructor(config: AnypointClientConfig);
63
+ getAuthMode(): AuthMode;
64
+ /** The browser login's token manager; service modes have none, and say so. */
65
+ private browserLogin;
48
66
  getAuthStatus(): Promise<AuthStatus>;
49
67
  getAuthorizeUrl(): string;
50
68
  authenticate(): Promise<void>;
51
69
  refreshToken(): Promise<void>;
52
70
  logout(): Promise<void>;
71
+ /** The signed-in person. Service identities are not people, so this is for the browser login only. */
53
72
  whoami(): Promise<UserProfile>;
73
+ /** The configured organization, else the signed-in user's own (looked up once). */
54
74
  getDefaultOrgId(): Promise<string>;
55
75
  clearCache(): void;
56
76
  /** Expose cache instance for diagnostics (read-only stats) */
@@ -1 +1 @@
1
- {"version":3,"file":"AnypointClient.d.ts","sourceRoot":"","sources":["../../src/client/AnypointClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAG9B,SAAgB,gBAAgB,EAAE,mBAAmB,CAAC;IACtD,SAAgB,SAAS,EAAE,YAAY,CAAC;IACxC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,UAAU,EAAE,aAAa,CAAC;IAC1C,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,UAAU,EAAE,aAAa,CAAC;IAC1C,SAAgB,YAAY,EAAE,eAAe,CAAC;IAC9C,SAAgB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3D,SAAgB,UAAU,EAAE,aAAa,CAAC;IAC1C,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,UAAU,EAAE,aAAa,CAAC;IAC1C,SAAgB,WAAW,EAAE,cAAc,CAAC;IAC5C,SAAgB,QAAQ,EAAE,WAAW,CAAC;IACtC,SAAgB,MAAM,EAAE,SAAS,CAAC;gBAEtB,MAAM,EAAE,oBAAoB;IAkClC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAI1C,eAAe,IAAI,MAAM;IAInB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;IAI9B,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxC,UAAU,IAAI,IAAI;IAIlB,8DAA8D;IAC9D,QAAQ,IAAI,KAAK;CAGpB"}
1
+ {"version":3,"file":"AnypointClient.d.ts","sourceRoot":"","sources":["../../src/client/AnypointClient.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@
3
3
  * Main facade providing unified access to all Anypoint APIs
4
4
  */
5
5
  import { TokenManager } from '../auth/index.js';
6
+ import { BearerProvider } from '../auth/BearerProvider.js';
7
+ import { ClientCredentialsProvider } from '../auth/ClientCredentialsProvider.js';
6
8
  import { HttpClient } from './HttpClient.js';
7
9
  import { Cache } from './Cache.js';
8
10
  import { AccessManagementApi } from '../api/AccessManagementApi.js';
@@ -20,8 +22,14 @@ import { ObjectStoreApi } from '../api/ObjectStoreApi.js';
20
22
  import { RuntimesApi } from '../api/RuntimesApi.js';
21
23
  import { AlertsApi } from '../api/AlertsApi.js';
22
24
  import { DEFAULT_CALLBACK_URL } from '../config/profiles.js';
25
+ import { DEFAULT_AUTH_MODE, isServiceMode } from '../config/auth-modes.js';
23
26
  export class AnypointClient {
27
+ /** Only the browser login has a token manager; service modes hold their token in memory. */
24
28
  tokenManager;
29
+ authMode;
30
+ configuredOrgId;
31
+ provider;
32
+ userOrgId;
25
33
  httpClient;
26
34
  cache;
27
35
  // API clients
@@ -39,18 +47,51 @@ export class AnypointClient {
39
47
  objectStore;
40
48
  runtimes;
41
49
  alerts;
42
- constructor(config) {
43
- this.tokenManager = new TokenManager({
50
+ /** A client for a resolved profile configuration. */
51
+ static fromConfig(config) {
52
+ return new AnypointClient({
44
53
  clientId: config.clientId,
45
54
  clientSecret: config.clientSecret,
46
- redirectUri: config.redirectUri || DEFAULT_CALLBACK_URL,
55
+ redirectUri: config.callbackUrl,
47
56
  baseUrl: config.baseUrl,
48
- profileName: config.profileName,
57
+ profileName: config.profile,
58
+ authMode: config.authMode,
59
+ orgId: config.orgId,
60
+ accessToken: config.accessToken,
49
61
  });
62
+ }
63
+ constructor(config) {
64
+ this.authMode = config.authMode ?? DEFAULT_AUTH_MODE;
65
+ this.configuredOrgId = config.orgId || undefined;
66
+ if (isServiceMode(this.authMode) && !this.configuredOrgId) {
67
+ throw new Error(`The ${this.authMode} mode needs an explicit organization (orgId).`);
68
+ }
69
+ if (this.authMode === 'client_credentials') {
70
+ this.tokenManager = null;
71
+ this.provider = new ClientCredentialsProvider({
72
+ clientId: config.clientId,
73
+ clientSecret: config.clientSecret,
74
+ baseUrl: config.baseUrl,
75
+ });
76
+ }
77
+ else if (this.authMode === 'bearer') {
78
+ this.tokenManager = null;
79
+ this.provider = new BearerProvider(config.accessToken);
80
+ }
81
+ else {
82
+ this.tokenManager = new TokenManager({
83
+ clientId: config.clientId,
84
+ clientSecret: config.clientSecret,
85
+ redirectUri: config.redirectUri || DEFAULT_CALLBACK_URL,
86
+ baseUrl: config.baseUrl,
87
+ profileName: config.profileName,
88
+ });
89
+ this.provider = this.tokenManager;
90
+ }
50
91
  this.cache = new Cache(config.cacheTtlMinutes || 5);
51
92
  this.httpClient = new HttpClient({
52
93
  baseUrl: config.baseUrl || 'https://anypoint.mulesoft.com',
53
- tokenManager: this.tokenManager,
94
+ tokenProvider: this.provider,
54
95
  });
55
96
  this.accessManagement = new AccessManagementApi(this.httpClient, this.cache);
56
97
  this.cloudHub2 = new CloudHub2Api(this.httpClient, this.cache);
@@ -68,29 +109,55 @@ export class AnypointClient {
68
109
  this.alerts = new AlertsApi(this.httpClient);
69
110
  }
70
111
  // ── Auth ──────────────────────────────────────────
112
+ getAuthMode() {
113
+ return this.authMode;
114
+ }
115
+ /** The browser login's token manager; service modes have none, and say so. */
116
+ browserLogin(action) {
117
+ if (!this.tokenManager) {
118
+ throw new Error(`${action} is not available with ${this.authMode} authentication; there is no browser login.`);
119
+ }
120
+ return this.tokenManager;
121
+ }
71
122
  async getAuthStatus() {
72
- return this.tokenManager.getStatus();
123
+ if (this.tokenManager)
124
+ return this.tokenManager.getStatus();
125
+ // Service modes: authenticated when a token can be obtained now.
126
+ try {
127
+ await this.provider.getAccessToken();
128
+ return { authenticated: true };
129
+ }
130
+ catch {
131
+ return { authenticated: false };
132
+ }
73
133
  }
74
134
  getAuthorizeUrl() {
75
- return this.tokenManager.getAuthorizeUrl();
135
+ return this.browserLogin('Login').getAuthorizeUrl();
76
136
  }
77
137
  async authenticate() {
78
- await this.tokenManager.authenticate();
138
+ await this.browserLogin('Login').authenticate();
79
139
  }
80
140
  async refreshToken() {
81
- await this.tokenManager.refresh();
141
+ await this.browserLogin('Token refresh').refresh();
82
142
  }
83
143
  async logout() {
84
- await this.tokenManager.logout();
144
+ await this.browserLogin('Logout').logout();
85
145
  this.cache.clear();
86
146
  }
87
147
  // ── Convenience ───────────────────────────────────
148
+ /** The signed-in person. Service identities are not people, so this is for the browser login only. */
88
149
  async whoami() {
150
+ if (isServiceMode(this.authMode)) {
151
+ throw new Error(`whoami is not available with ${this.authMode} authentication; the organization comes from configuration.`);
152
+ }
89
153
  return this.accessManagement.getMe();
90
154
  }
155
+ /** The configured organization, else the signed-in user's own (looked up once). */
91
156
  async getDefaultOrgId() {
92
- const me = await this.whoami();
93
- return me.organization.id;
157
+ if (this.configuredOrgId)
158
+ return this.configuredOrgId;
159
+ this.userOrgId ??= (await this.whoami()).organization.id;
160
+ return this.userOrgId;
94
161
  }
95
162
  clearCache() {
96
163
  this.cache.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"AnypointClient.js","sourceRoot":"","sources":["../../src/client/AnypointClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAoB,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAW7D,MAAM,OAAO,cAAc;IACN,YAAY,CAAe;IAC3B,UAAU,CAAa;IACvB,KAAK,CAAQ;IAE9B,cAAc;IACE,gBAAgB,CAAsB;IACtC,SAAS,CAAe;IACxB,IAAI,CAAU;IACd,UAAU,CAAgB;IAC1B,QAAQ,CAAc;IACtB,UAAU,CAAgB;IAC1B,YAAY,CAAkB;IAC9B,oBAAoB,CAAuB;IAC3C,UAAU,CAAgB;IAC1B,QAAQ,CAAc;IACtB,UAAU,CAAgB;IAC1B,WAAW,CAAiB;IAC5B,QAAQ,CAAc;IACtB,MAAM,CAAY;IAElC,YAAY,MAA4B;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,oBAAoB;YACvD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,+BAA+B;YAC1D,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvF,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,qDAAqD;IAErD,KAAK,CAAC,aAAa;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,qDAAqD;IAErD,KAAK,CAAC,MAAM;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B,CAAC;IAED,UAAU;QACN,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;CACJ"}
1
+ {"version":3,"file":"AnypointClient.js","sourceRoot":"","sources":["../../src/client/AnypointClient.ts"],"names":[],"mappings":"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"}
@@ -3,17 +3,17 @@
3
3
  * Axios wrapper with authentication and rate limiting
4
4
  */
5
5
  import { type AxiosRequestConfig } from 'axios';
6
- import type { TokenManager } from '../auth/TokenManager.js';
6
+ import type { TokenProvider } from '../auth/TokenProvider.js';
7
7
  import { type RateLimiterConfig } from './RateLimiter.js';
8
8
  export interface HttpClientConfig {
9
9
  baseUrl?: string;
10
- tokenManager: TokenManager;
10
+ tokenProvider: TokenProvider;
11
11
  rateLimiter?: RateLimiterConfig;
12
12
  timeout?: number;
13
13
  }
14
14
  export declare class HttpClient {
15
15
  private readonly client;
16
- private readonly tokenManager;
16
+ private readonly tokenProvider;
17
17
  private readonly rateLimiter;
18
18
  constructor(config: HttpClientConfig);
19
19
  get<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAsB,KAAK,kBAAkB,EAAsB,MAAM,OAAO,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIvE,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,MAAM,EAAE,gBAAgB;IAoB9B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOtE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAO7F;;;;;;OAMG;IACG,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAUhG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOtF,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOxF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOzE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAS5E"}
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAsB,KAAK,kBAAkB,EAAsB,MAAM,OAAO,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIvE,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,MAAM,EAAE,gBAAgB;IA+B9B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOtE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAO7F;;;;;;OAMG;IACG,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAUhG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOtF,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOxF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAOzE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;CAS5E"}
@@ -7,10 +7,10 @@ import { RateLimiter } from './RateLimiter.js';
7
7
  const DEFAULT_BASE_URL = 'https://anypoint.mulesoft.com';
8
8
  export class HttpClient {
9
9
  client;
10
- tokenManager;
10
+ tokenProvider;
11
11
  rateLimiter;
12
12
  constructor(config) {
13
- this.tokenManager = config.tokenManager;
13
+ this.tokenProvider = config.tokenProvider;
14
14
  this.rateLimiter = new RateLimiter(config.rateLimiter);
15
15
  this.client = axios.create({
16
16
  baseURL: config.baseUrl || DEFAULT_BASE_URL,
@@ -21,10 +21,20 @@ export class HttpClient {
21
21
  });
22
22
  // Add auth interceptor
23
23
  this.client.interceptors.request.use(async (requestConfig) => {
24
- const accessToken = await this.tokenManager.getAccessToken();
24
+ const accessToken = await this.tokenProvider.getAccessToken();
25
25
  requestConfig.headers.Authorization = `Bearer ${accessToken}`;
26
26
  return requestConfig;
27
27
  });
28
+ // A token that cannot be renewed (a supplied bearer or a service token) gets a plain
29
+ // explanation instead of the platform's bare 401.
30
+ this.client.interceptors.response.use(undefined, (error) => {
31
+ const hint = this.tokenProvider.unauthorizedMessage;
32
+ if (hint && axios.isAxiosError(error) && error.response?.status === 401) {
33
+ this.tokenProvider.invalidate?.();
34
+ throw new Error(`${hint} (HTTP 401)`, { cause: error });
35
+ }
36
+ throw error;
37
+ });
28
38
  }
29
39
  async get(url, config) {
30
40
  return this.rateLimiter.execute(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/commands/alerts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgHpC,wBAAgB,mBAAmB,IAAI,OAAO,CAwS7C"}
1
+ {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/commands/alerts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiHpC,wBAAgB,mBAAmB,IAAI,OAAO,CAuU7C"}
@@ -18,7 +18,7 @@ import { printTable } from '../utils/formatter.js';
18
18
  import { ALERT_METRIC_IDS, ALERT_OPERATORS } from '../api/AlertsApi.js';
19
19
  import { confirmProductionWrite, isProductionEnv } from '../safety/guards.js';
20
20
  import { checkPreapproval } from '../safety/preapproval.js';
21
- import { CHANGE_IN_PROGRESS, alertEnvironment, executeDeleteAlert, executeUpdateAlert, normalizeAlert, normalizeRuntimeManagerAlert, planCreateAlert, planUpdateAlert, previewPayload, readAlertForDelete, targetsApp, } from '../workflows/alerts.js';
21
+ import { CHANGE_IN_PROGRESS, alertEnvironment, executeDeleteAlert, executeUpdateAlert, alertWait, normalizeAlert, normalizeRuntimeManagerAlert, planCreateAlert, planUpdateAlert, previewPayload, readAlertForDelete, targetsApp, } from '../workflows/alerts.js';
22
22
  import { createClient } from './shared.js';
23
23
  const collect = (value, previous = []) => [...previous, value];
24
24
  const list = (value) => value
@@ -232,6 +232,18 @@ export function createAlertsCommand() {
232
232
  process.exitCode = 1;
233
233
  }
234
234
  });
235
+ const WAIT_OPTION = [
236
+ '--wait <seconds>',
237
+ 'Keep checking the list this long for the change to apply',
238
+ number('--wait'),
239
+ ];
240
+ /** Ctrl-C while waiting stops the wait and reports what was last seen; the write is not repeated. */
241
+ function cancelOnSigint() {
242
+ const controller = new AbortController();
243
+ const onSigint = () => controller.abort();
244
+ process.once('SIGINT', onSigint);
245
+ return { signal: controller.signal, done: () => process.off('SIGINT', onSigint) };
246
+ }
235
247
  async function runUpdate(id, patch, tool, opts) {
236
248
  try {
237
249
  const client = createClient();
@@ -251,7 +263,8 @@ export function createAlertsCommand() {
251
263
  log.warn('Cancelled');
252
264
  return;
253
265
  }
254
- const result = await executeUpdateAlert(client, plan);
266
+ const cancel = cancelOnSigint();
267
+ const result = await executeUpdateAlert(client, plan, alertWait(opts.wait, cancel.signal)).finally(cancel.done);
255
268
  if (result.verified)
256
269
  log.success(result.message);
257
270
  else
@@ -272,6 +285,7 @@ export function createAlertsCommand() {
272
285
  .option('--threshold <n>', 'Threshold in the metric unit', number('--threshold'))
273
286
  .option('--duration <minutes>', 'Minutes the condition must hold', number('--duration'));
274
287
  addNotificationOptions(update)
288
+ .option(...WAIT_OPTION)
275
289
  .option('--dry-run', 'Show the change, then stop', false)
276
290
  .option('--force', 'Skip the production confirmation prompt', false)
277
291
  .action(async (id, opts) => {
@@ -292,6 +306,7 @@ export function createAlertsCommand() {
292
306
  .command(name)
293
307
  .description(`${name === 'enable' ? 'Enable' : 'Disable'} an alert`)
294
308
  .argument('<id>', 'Alert ID')
309
+ .option(...WAIT_OPTION)
295
310
  .option('--dry-run', 'Show the change, then stop', false)
296
311
  .option('--force', 'Skip the production confirmation prompt', false)
297
312
  .action(async (id, opts) => {
@@ -304,6 +319,7 @@ export function createAlertsCommand() {
304
319
  .argument('<id>', 'Alert ID')
305
320
  .option('--confirm <name>', 'Delete only if the alert has this exact name')
306
321
  .option('--allow-production', 'Explicitly allow deletion in a production environment', false)
322
+ .option(...WAIT_OPTION)
307
323
  .action(async (id, opts) => {
308
324
  try {
309
325
  const client = createClient();
@@ -342,7 +358,8 @@ export function createAlertsCommand() {
342
358
  }
343
359
  log.warn(`Production deletion pre-approved (${decision.preapprovalSource})`);
344
360
  }
345
- const result = await executeDeleteAlert(client, orgId, alert);
361
+ const cancel = cancelOnSigint();
362
+ const result = await executeDeleteAlert(client, orgId, alert, alertWait(opts.wait, cancel.signal)).finally(cancel.done);
346
363
  if (result.verifiedAbsent)
347
364
  log.success(result.message);
348
365
  else