@sfdxy/anypoint-connect 0.1.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 (138) hide show
  1. package/README.md +481 -0
  2. package/dist/api/AccessManagementApi.d.ts +42 -0
  3. package/dist/api/AccessManagementApi.d.ts.map +1 -0
  4. package/dist/api/AccessManagementApi.js +48 -0
  5. package/dist/api/AccessManagementApi.js.map +1 -0
  6. package/dist/api/ApiManagerApi.d.ts +87 -0
  7. package/dist/api/ApiManagerApi.d.ts.map +1 -0
  8. package/dist/api/ApiManagerApi.js +79 -0
  9. package/dist/api/ApiManagerApi.js.map +1 -0
  10. package/dist/api/CloudHub2Api.d.ts +167 -0
  11. package/dist/api/CloudHub2Api.d.ts.map +1 -0
  12. package/dist/api/CloudHub2Api.js +132 -0
  13. package/dist/api/CloudHub2Api.js.map +1 -0
  14. package/dist/api/DesignCenterApi.d.ts +118 -0
  15. package/dist/api/DesignCenterApi.d.ts.map +1 -0
  16. package/dist/api/DesignCenterApi.js +259 -0
  17. package/dist/api/DesignCenterApi.js.map +1 -0
  18. package/dist/api/ExchangeApi.d.ts +92 -0
  19. package/dist/api/ExchangeApi.d.ts.map +1 -0
  20. package/dist/api/ExchangeApi.js +74 -0
  21. package/dist/api/ExchangeApi.js.map +1 -0
  22. package/dist/api/LogsApi.d.ts +66 -0
  23. package/dist/api/LogsApi.d.ts.map +1 -0
  24. package/dist/api/LogsApi.js +175 -0
  25. package/dist/api/LogsApi.js.map +1 -0
  26. package/dist/api/MonitoringApi.d.ts +72 -0
  27. package/dist/api/MonitoringApi.d.ts.map +1 -0
  28. package/dist/api/MonitoringApi.js +133 -0
  29. package/dist/api/MonitoringApi.js.map +1 -0
  30. package/dist/api/index.d.ts +8 -0
  31. package/dist/api/index.d.ts.map +1 -0
  32. package/dist/api/index.js +8 -0
  33. package/dist/api/index.js.map +1 -0
  34. package/dist/auth/FileStore.d.ts +15 -0
  35. package/dist/auth/FileStore.d.ts.map +1 -0
  36. package/dist/auth/FileStore.js +63 -0
  37. package/dist/auth/FileStore.js.map +1 -0
  38. package/dist/auth/OAuthFlow.d.ts +36 -0
  39. package/dist/auth/OAuthFlow.d.ts.map +1 -0
  40. package/dist/auth/OAuthFlow.js +156 -0
  41. package/dist/auth/OAuthFlow.js.map +1 -0
  42. package/dist/auth/TokenManager.d.ts +40 -0
  43. package/dist/auth/TokenManager.d.ts.map +1 -0
  44. package/dist/auth/TokenManager.js +119 -0
  45. package/dist/auth/TokenManager.js.map +1 -0
  46. package/dist/auth/TokenStore.d.ts +18 -0
  47. package/dist/auth/TokenStore.d.ts.map +1 -0
  48. package/dist/auth/TokenStore.js +5 -0
  49. package/dist/auth/TokenStore.js.map +1 -0
  50. package/dist/auth/index.d.ts +5 -0
  51. package/dist/auth/index.d.ts.map +1 -0
  52. package/dist/auth/index.js +4 -0
  53. package/dist/auth/index.js.map +1 -0
  54. package/dist/cli.d.ts +7 -0
  55. package/dist/cli.d.ts.map +1 -0
  56. package/dist/cli.js +28 -0
  57. package/dist/cli.js.map +1 -0
  58. package/dist/client/AnypointClient.d.ts +41 -0
  59. package/dist/client/AnypointClient.d.ts.map +1 -0
  60. package/dist/client/AnypointClient.js +76 -0
  61. package/dist/client/AnypointClient.js.map +1 -0
  62. package/dist/client/Cache.d.ts +15 -0
  63. package/dist/client/Cache.d.ts.map +1 -0
  64. package/dist/client/Cache.js +42 -0
  65. package/dist/client/Cache.js.map +1 -0
  66. package/dist/client/HttpClient.d.ts +26 -0
  67. package/dist/client/HttpClient.d.ts.map +1 -0
  68. package/dist/client/HttpClient.js +69 -0
  69. package/dist/client/HttpClient.js.map +1 -0
  70. package/dist/client/RateLimiter.d.ts +20 -0
  71. package/dist/client/RateLimiter.d.ts.map +1 -0
  72. package/dist/client/RateLimiter.js +48 -0
  73. package/dist/client/RateLimiter.js.map +1 -0
  74. package/dist/commands/api.d.ts +7 -0
  75. package/dist/commands/api.d.ts.map +1 -0
  76. package/dist/commands/api.js +144 -0
  77. package/dist/commands/api.js.map +1 -0
  78. package/dist/commands/apps.d.ts +7 -0
  79. package/dist/commands/apps.d.ts.map +1 -0
  80. package/dist/commands/apps.js +156 -0
  81. package/dist/commands/apps.js.map +1 -0
  82. package/dist/commands/auth.d.ts +7 -0
  83. package/dist/commands/auth.d.ts.map +1 -0
  84. package/dist/commands/auth.js +103 -0
  85. package/dist/commands/auth.js.map +1 -0
  86. package/dist/commands/config.d.ts +7 -0
  87. package/dist/commands/config.d.ts.map +1 -0
  88. package/dist/commands/config.js +125 -0
  89. package/dist/commands/config.js.map +1 -0
  90. package/dist/commands/deploy.d.ts +7 -0
  91. package/dist/commands/deploy.d.ts.map +1 -0
  92. package/dist/commands/deploy.js +145 -0
  93. package/dist/commands/deploy.js.map +1 -0
  94. package/dist/commands/design-center.d.ts +7 -0
  95. package/dist/commands/design-center.d.ts.map +1 -0
  96. package/dist/commands/design-center.js +183 -0
  97. package/dist/commands/design-center.js.map +1 -0
  98. package/dist/commands/exchange.d.ts +7 -0
  99. package/dist/commands/exchange.d.ts.map +1 -0
  100. package/dist/commands/exchange.js +134 -0
  101. package/dist/commands/exchange.js.map +1 -0
  102. package/dist/commands/index.d.ts +7 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +7 -0
  105. package/dist/commands/index.js.map +1 -0
  106. package/dist/commands/logs.d.ts +8 -0
  107. package/dist/commands/logs.d.ts.map +1 -0
  108. package/dist/commands/logs.js +115 -0
  109. package/dist/commands/logs.js.map +1 -0
  110. package/dist/commands/monitor.d.ts +8 -0
  111. package/dist/commands/monitor.d.ts.map +1 -0
  112. package/dist/commands/monitor.js +129 -0
  113. package/dist/commands/monitor.js.map +1 -0
  114. package/dist/index.d.ts +19 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +22 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/mcp.d.ts +7 -0
  119. package/dist/mcp.d.ts.map +1 -0
  120. package/dist/mcp.js +993 -0
  121. package/dist/mcp.js.map +1 -0
  122. package/dist/safety/guards.d.ts +27 -0
  123. package/dist/safety/guards.d.ts.map +1 -0
  124. package/dist/safety/guards.js +83 -0
  125. package/dist/safety/guards.js.map +1 -0
  126. package/dist/utils/config.d.ts +57 -0
  127. package/dist/utils/config.d.ts.map +1 -0
  128. package/dist/utils/config.js +117 -0
  129. package/dist/utils/config.js.map +1 -0
  130. package/dist/utils/formatter.d.ts +21 -0
  131. package/dist/utils/formatter.d.ts.map +1 -0
  132. package/dist/utils/formatter.js +58 -0
  133. package/dist/utils/formatter.js.map +1 -0
  134. package/dist/utils/logger.d.ts +16 -0
  135. package/dist/utils/logger.d.ts.map +1 -0
  136. package/dist/utils/logger.js +43 -0
  137. package/dist/utils/logger.js.map +1 -0
  138. package/package.json +71 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * HTTP Client
3
+ * Axios wrapper with authentication and rate limiting
4
+ */
5
+ import { type AxiosRequestConfig } from 'axios';
6
+ import type { TokenManager } from '../auth/TokenManager.js';
7
+ import { type RateLimiterConfig } from './RateLimiter.js';
8
+ export interface HttpClientConfig {
9
+ baseUrl?: string;
10
+ tokenManager: TokenManager;
11
+ rateLimiter?: RateLimiterConfig;
12
+ timeout?: number;
13
+ }
14
+ export declare class HttpClient {
15
+ private readonly client;
16
+ private readonly tokenManager;
17
+ private readonly rateLimiter;
18
+ constructor(config: HttpClientConfig);
19
+ get<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;
20
+ post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
21
+ put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
22
+ patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
23
+ delete<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;
24
+ download(url: string, config?: AxiosRequestConfig): Promise<Buffer>;
25
+ }
26
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +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;IAOvF,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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * HTTP Client
3
+ * Axios wrapper with authentication and rate limiting
4
+ */
5
+ import axios from 'axios';
6
+ import { RateLimiter } from './RateLimiter.js';
7
+ const DEFAULT_BASE_URL = 'https://anypoint.mulesoft.com';
8
+ export class HttpClient {
9
+ client;
10
+ tokenManager;
11
+ rateLimiter;
12
+ constructor(config) {
13
+ this.tokenManager = config.tokenManager;
14
+ this.rateLimiter = new RateLimiter(config.rateLimiter);
15
+ this.client = axios.create({
16
+ baseURL: config.baseUrl || DEFAULT_BASE_URL,
17
+ timeout: config.timeout || 30000,
18
+ headers: {
19
+ 'Content-Type': 'application/json',
20
+ },
21
+ });
22
+ // Add auth interceptor
23
+ this.client.interceptors.request.use(async (requestConfig) => {
24
+ const accessToken = await this.tokenManager.getAccessToken();
25
+ requestConfig.headers.Authorization = `Bearer ${accessToken}`;
26
+ return requestConfig;
27
+ });
28
+ }
29
+ async get(url, config) {
30
+ return this.rateLimiter.execute(async () => {
31
+ const response = await this.client.get(url, config);
32
+ return response.data;
33
+ });
34
+ }
35
+ async post(url, data, config) {
36
+ return this.rateLimiter.execute(async () => {
37
+ const response = await this.client.post(url, data, config);
38
+ return response.data;
39
+ });
40
+ }
41
+ async put(url, data, config) {
42
+ return this.rateLimiter.execute(async () => {
43
+ const response = await this.client.put(url, data, config);
44
+ return response.data;
45
+ });
46
+ }
47
+ async patch(url, data, config) {
48
+ return this.rateLimiter.execute(async () => {
49
+ const response = await this.client.patch(url, data, config);
50
+ return response.data;
51
+ });
52
+ }
53
+ async delete(url, config) {
54
+ return this.rateLimiter.execute(async () => {
55
+ const response = await this.client.delete(url, config);
56
+ return response.data;
57
+ });
58
+ }
59
+ async download(url, config) {
60
+ return this.rateLimiter.execute(async () => {
61
+ const response = await this.client.get(url, {
62
+ ...config,
63
+ responseType: 'arraybuffer',
64
+ });
65
+ return Buffer.from(response.data);
66
+ });
67
+ }
68
+ }
69
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/client/HttpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Rate Limiter
3
+ * Simple token bucket rate limiter
4
+ */
5
+ export interface RateLimiterConfig {
6
+ requestsPerMinute?: number;
7
+ concurrentRequests?: number;
8
+ }
9
+ export declare class RateLimiter {
10
+ private readonly maxConcurrent;
11
+ private readonly minIntervalMs;
12
+ private running;
13
+ private lastRequestTime;
14
+ private queue;
15
+ constructor(config?: RateLimiterConfig);
16
+ execute<T>(fn: () => Promise<T>): Promise<T>;
17
+ private waitForSlot;
18
+ private releaseSlot;
19
+ }
20
+ //# sourceMappingURL=RateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../src/client/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAAyB;gBAE1B,MAAM,CAAC,EAAE,iBAAiB;IAMhC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAYpC,WAAW;IAiBzB,OAAO,CAAC,WAAW;CAItB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Rate Limiter
3
+ * Simple token bucket rate limiter
4
+ */
5
+ export class RateLimiter {
6
+ maxConcurrent;
7
+ minIntervalMs;
8
+ running = 0;
9
+ lastRequestTime = 0;
10
+ queue = [];
11
+ constructor(config) {
12
+ this.maxConcurrent = config?.concurrentRequests ?? 10;
13
+ const rpm = config?.requestsPerMinute ?? 100;
14
+ this.minIntervalMs = (60 * 1000) / rpm;
15
+ }
16
+ async execute(fn) {
17
+ await this.waitForSlot();
18
+ this.running++;
19
+ try {
20
+ return await fn();
21
+ }
22
+ finally {
23
+ this.running--;
24
+ this.releaseSlot();
25
+ }
26
+ }
27
+ async waitForSlot() {
28
+ // Wait for concurrency slot
29
+ if (this.running >= this.maxConcurrent) {
30
+ await new Promise((resolve) => {
31
+ this.queue.push(resolve);
32
+ });
33
+ }
34
+ // Wait for rate limit interval
35
+ const now = Date.now();
36
+ const elapsed = now - this.lastRequestTime;
37
+ if (elapsed < this.minIntervalMs) {
38
+ await new Promise((resolve) => setTimeout(resolve, this.minIntervalMs - elapsed));
39
+ }
40
+ this.lastRequestTime = Date.now();
41
+ }
42
+ releaseSlot() {
43
+ const next = this.queue.shift();
44
+ if (next)
45
+ next();
46
+ }
47
+ }
48
+ //# sourceMappingURL=RateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimiter.js","sourceRoot":"","sources":["../../src/client/RateLimiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,OAAO,WAAW;IACH,aAAa,CAAS;IACtB,aAAa,CAAS;IAC/B,OAAO,GAAG,CAAC,CAAC;IACZ,eAAe,GAAG,CAAC,CAAC;IACpB,KAAK,GAAsB,EAAE,CAAC;IAEtC,YAAY,MAA0B;QAClC,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,EAAE,iBAAiB,IAAI,GAAG,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,EAAoB;QACjC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC;YACD,OAAO,MAAM,EAAE,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,4BAA4B;QAC5B,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,+BAA+B;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,CAAC;IAEO,WAAW;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI;YAAE,IAAI,EAAE,CAAC;IACrB,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * API Manager CLI Commands
3
+ * anc api list | policies | sla-tiers | alerts
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function createApiCommand(): Command;
7
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,gBAAgB,IAAI,OAAO,CA8I1C"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * API Manager CLI Commands
3
+ * anc api list | policies | sla-tiers | alerts
4
+ */
5
+ import { Command } from 'commander';
6
+ import { getConfig } from '../utils/config.js';
7
+ import { log } from '../utils/logger.js';
8
+ import { printTable } from '../utils/formatter.js';
9
+ import { AnypointClient } from '../client/AnypointClient.js';
10
+ function createClient() {
11
+ const config = getConfig();
12
+ return new AnypointClient({
13
+ clientId: config.clientId,
14
+ clientSecret: config.clientSecret,
15
+ redirectUri: config.callbackUrl,
16
+ baseUrl: config.baseUrl,
17
+ });
18
+ }
19
+ export function createApiCommand() {
20
+ const api = new Command('api').description('Manage API instances, policies, and SLA tiers');
21
+ api.command('list')
22
+ .description('List API instances in an environment')
23
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
24
+ .action(async (opts) => {
25
+ try {
26
+ const client = createClient();
27
+ const orgId = await client.getDefaultOrgId();
28
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
29
+ const assets = await client.apiManager.getApis(orgId, env.id);
30
+ if (assets.length === 0) {
31
+ log.info(`No API instances in ${env.name}`);
32
+ return;
33
+ }
34
+ log.header(`API Instances in ${env.name}`);
35
+ const rows = [];
36
+ for (const asset of assets) {
37
+ for (const instance of asset.apis) {
38
+ rows.push([
39
+ asset.exchangeAssetName,
40
+ String(instance.id),
41
+ instance.status,
42
+ instance.assetVersion || '-',
43
+ instance.technology || '-',
44
+ instance.endpointUri || '-',
45
+ ]);
46
+ }
47
+ }
48
+ printTable(['API Name', 'ID', 'Status', 'Version', 'Technology', 'Endpoint'], rows);
49
+ }
50
+ catch (error) {
51
+ log.error(`Failed: ${error instanceof Error ? error.message : error}`);
52
+ process.exit(1);
53
+ }
54
+ });
55
+ api.command('policies')
56
+ .description('List policies applied to an API')
57
+ .argument('<apiName>', 'API name or ID')
58
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
59
+ .action(async (apiName, opts) => {
60
+ try {
61
+ const client = createClient();
62
+ const orgId = await client.getDefaultOrgId();
63
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
64
+ // Try as numeric ID first, then search by name
65
+ let apiId;
66
+ const numId = parseInt(apiName);
67
+ if (!isNaN(numId)) {
68
+ apiId = numId;
69
+ }
70
+ else {
71
+ const found = await client.apiManager.findByName(orgId, env.id, apiName);
72
+ if (!found) {
73
+ log.error(`API "${apiName}" not found in ${env.name}`);
74
+ process.exit(1);
75
+ }
76
+ apiId = found.instance.id;
77
+ log.dim(` Resolved: ${found.asset.exchangeAssetName} (ID: ${apiId})`);
78
+ }
79
+ const policies = await client.apiManager.getPolicies(orgId, env.id, apiId);
80
+ if (policies.length === 0) {
81
+ log.info('No policies applied');
82
+ return;
83
+ }
84
+ log.header(`Policies (${policies.length})`);
85
+ for (const p of policies) {
86
+ log.kv('Policy', `${p.template?.assetId || p.policyTemplateId || 'unknown'} v${p.template?.assetVersion || '?'}`);
87
+ log.kv(' Order', String(p.order ?? '-'));
88
+ log.kv(' Disabled', String(p.disabled ?? false));
89
+ if (p.configurationData) {
90
+ log.kv(' Config', JSON.stringify(p.configurationData));
91
+ }
92
+ console.log();
93
+ }
94
+ }
95
+ catch (error) {
96
+ log.error(`Failed: ${error instanceof Error ? error.message : error}`);
97
+ process.exit(1);
98
+ }
99
+ });
100
+ api.command('sla-tiers')
101
+ .description('List SLA tiers for an API')
102
+ .argument('<apiName>', 'API name or ID')
103
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
104
+ .action(async (apiName, opts) => {
105
+ try {
106
+ const client = createClient();
107
+ const orgId = await client.getDefaultOrgId();
108
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
109
+ let apiId;
110
+ const numId = parseInt(apiName);
111
+ if (!isNaN(numId)) {
112
+ apiId = numId;
113
+ }
114
+ else {
115
+ const found = await client.apiManager.findByName(orgId, env.id, apiName);
116
+ if (!found) {
117
+ log.error(`API "${apiName}" not found in ${env.name}`);
118
+ process.exit(1);
119
+ }
120
+ apiId = found.instance.id;
121
+ }
122
+ const tiers = await client.apiManager.getSlaTiers(orgId, env.id, apiId);
123
+ if (tiers.length === 0) {
124
+ log.info('No SLA tiers configured');
125
+ return;
126
+ }
127
+ printTable(['Name', 'Status', 'Auto-Approve', 'Limits', 'Apps'], tiers.map((t) => [
128
+ t.name,
129
+ t.status,
130
+ t.autoApprove ? 'Yes' : 'No',
131
+ t.limits
132
+ .map((l) => `${l.maximumRequests} req/${l.timePeriodInMilliseconds / 1000}s`)
133
+ .join(', '),
134
+ String(t.applicationCount),
135
+ ]));
136
+ }
137
+ catch (error) {
138
+ log.error(`Failed: ${error instanceof Error ? error.message : error}`);
139
+ process.exit(1);
140
+ }
141
+ });
142
+ return api;
143
+ }
144
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Apps CLI Commands
3
+ * anc apps list | status
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function createAppsCommand(): Command;
7
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,iBAAiB,IAAI,OAAO,CA2J3C"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Apps CLI Commands
3
+ * anc apps list | status
4
+ */
5
+ import { Command } from 'commander';
6
+ import { getConfig } from '../utils/config.js';
7
+ import { log } from '../utils/logger.js';
8
+ import { printTable } from '../utils/formatter.js';
9
+ import { AnypointClient } from '../client/AnypointClient.js';
10
+ import { isProductionEnv, confirmProductionDeploy } from '../safety/guards.js';
11
+ function createClient() {
12
+ const config = getConfig();
13
+ return new AnypointClient({
14
+ clientId: config.clientId,
15
+ clientSecret: config.clientSecret,
16
+ redirectUri: config.callbackUrl,
17
+ baseUrl: config.baseUrl,
18
+ });
19
+ }
20
+ export function createAppsCommand() {
21
+ const apps = new Command('apps').description('Manage deployed applications');
22
+ apps.command('list')
23
+ .description('List deployed applications')
24
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
25
+ .action(async (opts) => {
26
+ try {
27
+ const client = createClient();
28
+ const orgId = await client.getDefaultOrgId();
29
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
30
+ const deployments = await client.cloudHub2.getDeployments(orgId, env.id);
31
+ if (deployments.length === 0) {
32
+ log.info(`No applications deployed in ${env.name}`);
33
+ return;
34
+ }
35
+ log.header(`Applications in ${env.name} (${deployments.length})`);
36
+ printTable(['Name', 'Status', 'Version', 'Runtime', 'Replicas'], deployments.map((d) => [
37
+ d.name,
38
+ d.status,
39
+ d.application?.ref?.version || '-',
40
+ d.target?.deploymentSettings?.runtime?.version || '-',
41
+ String(d.target?.replicas?.length || 0),
42
+ ]));
43
+ }
44
+ catch (error) {
45
+ log.error(`Failed to list apps: ${error instanceof Error ? error.message : error}`);
46
+ process.exit(1);
47
+ }
48
+ });
49
+ apps.command('status')
50
+ .description('Get detailed status of an application')
51
+ .argument('<appName>', 'Application name')
52
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
53
+ .action(async (appName, opts) => {
54
+ try {
55
+ const client = createClient();
56
+ const orgId = await client.getDefaultOrgId();
57
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
58
+ const deployment = await client.cloudHub2.findByName(orgId, env.id, appName);
59
+ if (!deployment) {
60
+ log.error(`Application "${appName}" not found in ${env.name}`);
61
+ process.exit(1);
62
+ }
63
+ log.header(`${deployment.name}`);
64
+ log.kv('Status', deployment.status);
65
+ log.kv('Version', deployment.application?.ref?.version || '-');
66
+ log.kv('Runtime', deployment.target?.deploymentSettings?.runtime?.version || '-');
67
+ log.kv('Group ID', deployment.application?.ref?.groupId || '-');
68
+ log.kv('Artifact ID', deployment.application?.ref?.artifactId || '-');
69
+ if (deployment.target?.replicas) {
70
+ console.log();
71
+ log.bold(' Replicas:');
72
+ for (const replica of deployment.target.replicas) {
73
+ log.kv(` ${replica.id}`, `${replica.state} (${replica.deploymentLocation || 'unknown'})`);
74
+ }
75
+ }
76
+ if (deployment.target?.deploymentSettings?.http?.inbound?.publicUrl) {
77
+ console.log();
78
+ log.kv('Public URL', deployment.target.deploymentSettings.http.inbound.publicUrl);
79
+ }
80
+ }
81
+ catch (error) {
82
+ log.error(`Failed to get status: ${error instanceof Error ? error.message : error}`);
83
+ process.exit(1);
84
+ }
85
+ });
86
+ apps.command('restart')
87
+ .description('Restart an application')
88
+ .argument('<appName>', 'Application name')
89
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
90
+ .option('--force', 'Skip production confirmation', false)
91
+ .action(async (appName, opts) => {
92
+ try {
93
+ const client = createClient();
94
+ const orgId = await client.getDefaultOrgId();
95
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
96
+ const deployment = await client.cloudHub2.findByName(orgId, env.id, appName);
97
+ if (!deployment) {
98
+ log.error(`Application "${appName}" not found in ${env.name}`);
99
+ process.exit(1);
100
+ }
101
+ if (isProductionEnv(env.name, env.isProduction) && !opts.force) {
102
+ const confirmed = await confirmProductionDeploy(env.name);
103
+ if (!confirmed) {
104
+ log.warn('Restart cancelled');
105
+ return;
106
+ }
107
+ }
108
+ log.info(`Restarting ${appName} in ${env.name}...`);
109
+ await client.cloudHub2.restartApp(orgId, env.id, deployment.id);
110
+ log.success(`Restart initiated for ${appName}`);
111
+ }
112
+ catch (error) {
113
+ log.error(`Restart failed: ${error instanceof Error ? error.message : error}`);
114
+ process.exit(1);
115
+ }
116
+ });
117
+ apps.command('scale')
118
+ .description('Scale application replicas')
119
+ .argument('<appName>', 'Application name')
120
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
121
+ .requiredOption('--replicas <n>', 'Number of replicas')
122
+ .option('--force', 'Skip production confirmation', false)
123
+ .action(async (appName, opts) => {
124
+ try {
125
+ const client = createClient();
126
+ const orgId = await client.getDefaultOrgId();
127
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
128
+ const deployment = await client.cloudHub2.findByName(orgId, env.id, appName);
129
+ if (!deployment) {
130
+ log.error(`Application "${appName}" not found in ${env.name}`);
131
+ process.exit(1);
132
+ }
133
+ const replicas = parseInt(opts.replicas);
134
+ if (isNaN(replicas) || replicas < 1) {
135
+ log.error('Replicas must be a positive integer');
136
+ process.exit(1);
137
+ }
138
+ if (isProductionEnv(env.name, env.isProduction) && !opts.force) {
139
+ const confirmed = await confirmProductionDeploy(env.name);
140
+ if (!confirmed) {
141
+ log.warn('Scale cancelled');
142
+ return;
143
+ }
144
+ }
145
+ log.info(`Scaling ${appName} to ${replicas} replica(s) in ${env.name}...`);
146
+ await client.cloudHub2.scaleApp(orgId, env.id, deployment.id, replicas);
147
+ log.success(`Scaled ${appName} to ${replicas} replica(s)`);
148
+ }
149
+ catch (error) {
150
+ log.error(`Scale failed: ${error instanceof Error ? error.message : error}`);
151
+ process.exit(1);
152
+ }
153
+ });
154
+ return apps;
155
+ }
156
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/commands/apps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Auth CLI Commands
3
+ * anc auth login | logout | status
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare function createAuthCommand(): Command;
7
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,iBAAiB,IAAI,OAAO,CAsG3C"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Auth CLI Commands
3
+ * anc auth login | logout | status
4
+ */
5
+ import { Command } from 'commander';
6
+ import open from 'open';
7
+ import ora from 'ora';
8
+ import { getConfig } from '../utils/config.js';
9
+ import { log } from '../utils/logger.js';
10
+ import { AnypointClient } from '../client/AnypointClient.js';
11
+ export function createAuthCommand() {
12
+ const auth = new Command('auth').description('Manage Anypoint Platform authentication');
13
+ auth.command('login')
14
+ .description('Authenticate with Anypoint Platform via OAuth')
15
+ .action(async () => {
16
+ try {
17
+ const config = getConfig();
18
+ const client = new AnypointClient({
19
+ clientId: config.clientId,
20
+ clientSecret: config.clientSecret,
21
+ redirectUri: config.callbackUrl,
22
+ baseUrl: config.baseUrl,
23
+ });
24
+ const authUrl = client.getAuthorizeUrl();
25
+ log.info('Opening browser for authentication...');
26
+ log.dim(` ${authUrl}`);
27
+ // Start listening for callback before opening browser
28
+ const authPromise = client.authenticate();
29
+ // Open browser
30
+ await open(authUrl);
31
+ const spinner = ora('Waiting for authentication...').start();
32
+ await authPromise;
33
+ spinner.stop();
34
+ // Verify by fetching user info
35
+ const me = await client.whoami();
36
+ log.success(`Authenticated as ${me.firstName} ${me.lastName} (${me.username})`);
37
+ log.kv('Organization', me.organization.name);
38
+ }
39
+ catch (error) {
40
+ log.error(`Authentication failed: ${error instanceof Error ? error.message : error}`);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ auth.command('logout')
45
+ .description('Clear stored credentials')
46
+ .action(async () => {
47
+ try {
48
+ const config = getConfig();
49
+ const client = new AnypointClient({
50
+ clientId: config.clientId,
51
+ clientSecret: config.clientSecret,
52
+ redirectUri: config.callbackUrl,
53
+ baseUrl: config.baseUrl,
54
+ });
55
+ await client.logout();
56
+ log.success('Logged out successfully');
57
+ }
58
+ catch (error) {
59
+ log.error(`Logout failed: ${error instanceof Error ? error.message : error}`);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ auth.command('status')
64
+ .description('Show current authentication status')
65
+ .action(async () => {
66
+ try {
67
+ const config = getConfig();
68
+ const client = new AnypointClient({
69
+ clientId: config.clientId,
70
+ clientSecret: config.clientSecret,
71
+ redirectUri: config.callbackUrl,
72
+ baseUrl: config.baseUrl,
73
+ });
74
+ const status = await client.getAuthStatus();
75
+ if (!status.authenticated) {
76
+ log.warn('Not authenticated. Run: anc auth login');
77
+ return;
78
+ }
79
+ log.success('Authenticated');
80
+ if (status.expiresAt) {
81
+ log.kv('Token Expires', status.expiresAt.toLocaleString());
82
+ log.kv('Expired', status.isExpired ? 'Yes' : 'No');
83
+ log.kv('Can Refresh', status.canRefresh ? 'Yes' : 'No');
84
+ }
85
+ // Show user info
86
+ try {
87
+ const me = await client.whoami();
88
+ log.kv('User', `${me.firstName} ${me.lastName} (${me.username})`);
89
+ log.kv('Organization', me.organization.name);
90
+ log.kv('Org ID', me.organization.id);
91
+ }
92
+ catch {
93
+ log.dim(' Could not fetch user details (token may need refresh)');
94
+ }
95
+ }
96
+ catch (error) {
97
+ log.error(`Status check failed: ${error instanceof Error ? error.message : error}`);
98
+ process.exit(1);
99
+ }
100
+ });
101
+ return auth;
102
+ }
103
+ //# sourceMappingURL=auth.js.map