@sfdxy/anypoint-connect 0.14.0 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +39 -16
  2. package/dist/analysis/LogAnalyzer.d.ts +10 -4
  3. package/dist/analysis/LogAnalyzer.d.ts.map +1 -1
  4. package/dist/analysis/LogAnalyzer.js +29 -18
  5. package/dist/analysis/LogAnalyzer.js.map +1 -1
  6. package/dist/analysis/error-context.d.ts +2 -0
  7. package/dist/analysis/error-context.d.ts.map +1 -1
  8. package/dist/analysis/error-context.js +2 -1
  9. package/dist/analysis/error-context.js.map +1 -1
  10. package/dist/analysis/error-grouper.js +1 -1
  11. package/dist/analysis/error-grouper.js.map +1 -1
  12. package/dist/analysis/filter.d.ts +54 -0
  13. package/dist/analysis/filter.d.ts.map +1 -0
  14. package/dist/analysis/filter.js +100 -0
  15. package/dist/analysis/filter.js.map +1 -0
  16. package/dist/analysis/{utils.d.ts → normalize.d.ts} +1 -1
  17. package/dist/analysis/normalize.d.ts.map +1 -0
  18. package/dist/analysis/{utils.js → normalize.js} +2 -2
  19. package/dist/analysis/normalize.js.map +1 -0
  20. package/dist/analysis/parser.d.ts.map +1 -1
  21. package/dist/analysis/parser.js +45 -17
  22. package/dist/analysis/parser.js.map +1 -1
  23. package/dist/analysis/pattern-detector.js +1 -1
  24. package/dist/analysis/pattern-detector.js.map +1 -1
  25. package/dist/analysis/stats.d.ts +25 -0
  26. package/dist/analysis/stats.d.ts.map +1 -1
  27. package/dist/analysis/stats.js +35 -1
  28. package/dist/analysis/stats.js.map +1 -1
  29. package/dist/analysis/summary.d.ts +51 -0
  30. package/dist/analysis/summary.d.ts.map +1 -0
  31. package/dist/analysis/summary.js +47 -0
  32. package/dist/analysis/summary.js.map +1 -0
  33. package/dist/analysis/types.d.ts +14 -0
  34. package/dist/analysis/types.d.ts.map +1 -1
  35. package/dist/api/ApiManagerApi.d.ts +53 -0
  36. package/dist/api/ApiManagerApi.d.ts.map +1 -1
  37. package/dist/api/ApiManagerApi.js +53 -2
  38. package/dist/api/ApiManagerApi.js.map +1 -1
  39. package/dist/api/CloudHub2Api.d.ts +24 -4
  40. package/dist/api/CloudHub2Api.d.ts.map +1 -1
  41. package/dist/api/CloudHub2Api.js +10 -22
  42. package/dist/api/CloudHub2Api.js.map +1 -1
  43. package/dist/api/DesignCenterApi.d.ts +0 -20
  44. package/dist/api/DesignCenterApi.d.ts.map +1 -1
  45. package/dist/api/DesignCenterApi.js +0 -22
  46. package/dist/api/DesignCenterApi.js.map +1 -1
  47. package/dist/api/ExchangeApi.d.ts +15 -0
  48. package/dist/api/ExchangeApi.d.ts.map +1 -1
  49. package/dist/api/ExchangeApi.js +51 -0
  50. package/dist/api/ExchangeApi.js.map +1 -1
  51. package/dist/api/LogsApi.d.ts +50 -18
  52. package/dist/api/LogsApi.d.ts.map +1 -1
  53. package/dist/api/LogsApi.js +69 -98
  54. package/dist/api/LogsApi.js.map +1 -1
  55. package/dist/api/MonitoringApi.d.ts +137 -93
  56. package/dist/api/MonitoringApi.d.ts.map +1 -1
  57. package/dist/api/MonitoringApi.js +471 -204
  58. package/dist/api/MonitoringApi.js.map +1 -1
  59. package/dist/api/RuntimesApi.d.ts +56 -0
  60. package/dist/api/RuntimesApi.d.ts.map +1 -0
  61. package/dist/api/RuntimesApi.js +58 -0
  62. package/dist/api/RuntimesApi.js.map +1 -0
  63. package/dist/auth/FileStore.js +1 -1
  64. package/dist/auth/FileStore.js.map +1 -1
  65. package/dist/cli.js +4 -2
  66. package/dist/cli.js.map +1 -1
  67. package/dist/client/AnypointClient.d.ts +3 -1
  68. package/dist/client/AnypointClient.d.ts.map +1 -1
  69. package/dist/client/AnypointClient.js +5 -2
  70. package/dist/client/AnypointClient.js.map +1 -1
  71. package/dist/client/smoke-test.d.ts +111 -0
  72. package/dist/client/smoke-test.d.ts.map +1 -0
  73. package/dist/client/smoke-test.js +275 -0
  74. package/dist/client/smoke-test.js.map +1 -0
  75. package/dist/commands/api.d.ts +1 -1
  76. package/dist/commands/api.d.ts.map +1 -1
  77. package/dist/commands/api.js +175 -30
  78. package/dist/commands/api.js.map +1 -1
  79. package/dist/commands/app-change-cli.d.ts +52 -0
  80. package/dist/commands/app-change-cli.d.ts.map +1 -0
  81. package/dist/commands/app-change-cli.js +149 -0
  82. package/dist/commands/app-change-cli.js.map +1 -0
  83. package/dist/commands/apps.d.ts +1 -1
  84. package/dist/commands/apps.d.ts.map +1 -1
  85. package/dist/commands/apps.js +199 -18
  86. package/dist/commands/apps.js.map +1 -1
  87. package/dist/commands/auth.js +1 -1
  88. package/dist/commands/auth.js.map +1 -1
  89. package/dist/commands/compare.d.ts +8 -0
  90. package/dist/commands/compare.d.ts.map +1 -0
  91. package/dist/commands/compare.js +104 -0
  92. package/dist/commands/compare.js.map +1 -0
  93. package/dist/commands/config.js +1 -1
  94. package/dist/commands/config.js.map +1 -1
  95. package/dist/commands/deploy.d.ts +6 -1
  96. package/dist/commands/deploy.d.ts.map +1 -1
  97. package/dist/commands/deploy.js +89 -91
  98. package/dist/commands/deploy.js.map +1 -1
  99. package/dist/commands/design-center.d.ts +1 -1
  100. package/dist/commands/design-center.d.ts.map +1 -1
  101. package/dist/commands/design-center.js +36 -25
  102. package/dist/commands/design-center.js.map +1 -1
  103. package/dist/commands/index.d.ts +1 -0
  104. package/dist/commands/index.d.ts.map +1 -1
  105. package/dist/commands/index.js +1 -0
  106. package/dist/commands/index.js.map +1 -1
  107. package/dist/commands/logs.d.ts +3 -2
  108. package/dist/commands/logs.d.ts.map +1 -1
  109. package/dist/commands/logs.js +142 -17
  110. package/dist/commands/logs.js.map +1 -1
  111. package/dist/commands/monitor.d.ts +5 -6
  112. package/dist/commands/monitor.d.ts.map +1 -1
  113. package/dist/commands/monitor.js +210 -230
  114. package/dist/commands/monitor.js.map +1 -1
  115. package/dist/commands/runtimes.d.ts +7 -0
  116. package/dist/commands/runtimes.d.ts.map +1 -0
  117. package/dist/commands/runtimes.js +66 -0
  118. package/dist/commands/runtimes.js.map +1 -0
  119. package/dist/commands/shared.d.ts +2 -0
  120. package/dist/commands/shared.d.ts.map +1 -1
  121. package/dist/commands/shared.js +16 -1
  122. package/dist/commands/shared.js.map +1 -1
  123. package/dist/{utils/config.d.ts → config/profiles.d.ts} +9 -1
  124. package/dist/config/profiles.d.ts.map +1 -0
  125. package/dist/{utils/config.js → config/profiles.js} +1 -1
  126. package/dist/config/profiles.js.map +1 -0
  127. package/dist/index.d.ts +12 -3
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +12 -2
  130. package/dist/index.js.map +1 -1
  131. package/dist/mcp/prompts.js +7 -7
  132. package/dist/mcp/prompts.js.map +1 -1
  133. package/dist/mcp/server.d.ts +14 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +61 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/mcp/tools/analysis.d.ts.map +1 -1
  138. package/dist/mcp/tools/analysis.js +74 -46
  139. package/dist/mcp/tools/analysis.js.map +1 -1
  140. package/dist/mcp/tools/anypoint-mq.d.ts.map +1 -1
  141. package/dist/mcp/tools/anypoint-mq.js +25 -54
  142. package/dist/mcp/tools/anypoint-mq.js.map +1 -1
  143. package/dist/mcp/tools/api-manager.d.ts +2 -1
  144. package/dist/mcp/tools/api-manager.d.ts.map +1 -1
  145. package/dist/mcp/tools/api-manager.js +154 -89
  146. package/dist/mcp/tools/api-manager.js.map +1 -1
  147. package/dist/mcp/tools/app-inputs.d.ts +92 -0
  148. package/dist/mcp/tools/app-inputs.d.ts.map +1 -0
  149. package/dist/mcp/tools/app-inputs.js +142 -0
  150. package/dist/mcp/tools/app-inputs.js.map +1 -0
  151. package/dist/mcp/tools/apps-deploy.d.ts +13 -0
  152. package/dist/mcp/tools/apps-deploy.d.ts.map +1 -0
  153. package/dist/mcp/tools/apps-deploy.js +358 -0
  154. package/dist/mcp/tools/apps-deploy.js.map +1 -0
  155. package/dist/mcp/tools/apps-lifecycle.d.ts +11 -0
  156. package/dist/mcp/tools/apps-lifecycle.d.ts.map +1 -0
  157. package/dist/mcp/tools/apps-lifecycle.js +244 -0
  158. package/dist/mcp/tools/apps-lifecycle.js.map +1 -0
  159. package/dist/mcp/tools/apps-read.d.ts +9 -0
  160. package/dist/mcp/tools/apps-read.d.ts.map +1 -0
  161. package/dist/mcp/tools/apps-read.js +414 -0
  162. package/dist/mcp/tools/apps-read.js.map +1 -0
  163. package/dist/mcp/tools/artifacts.d.ts +8 -0
  164. package/dist/mcp/tools/artifacts.d.ts.map +1 -0
  165. package/dist/mcp/tools/artifacts.js +81 -0
  166. package/dist/mcp/tools/artifacts.js.map +1 -0
  167. package/dist/mcp/tools/audit.d.ts.map +1 -1
  168. package/dist/mcp/tools/audit.js +9 -17
  169. package/dist/mcp/tools/audit.js.map +1 -1
  170. package/dist/mcp/tools/design-center.d.ts +2 -3
  171. package/dist/mcp/tools/design-center.d.ts.map +1 -1
  172. package/dist/mcp/tools/design-center.js +41 -185
  173. package/dist/mcp/tools/design-center.js.map +1 -1
  174. package/dist/mcp/tools/exchange.d.ts +1 -2
  175. package/dist/mcp/tools/exchange.d.ts.map +1 -1
  176. package/dist/mcp/tools/exchange.js +51 -312
  177. package/dist/mcp/tools/exchange.js.map +1 -1
  178. package/dist/mcp/tools/governance.d.ts +8 -0
  179. package/dist/mcp/tools/governance.d.ts.map +1 -0
  180. package/dist/mcp/tools/governance.js +59 -0
  181. package/dist/mcp/tools/governance.js.map +1 -0
  182. package/dist/mcp/tools/identity.d.ts.map +1 -1
  183. package/dist/mcp/tools/identity.js +15 -36
  184. package/dist/mcp/tools/identity.js.map +1 -1
  185. package/dist/mcp/tools/index.d.ts +5 -1
  186. package/dist/mcp/tools/index.d.ts.map +1 -1
  187. package/dist/mcp/tools/index.js +5 -1
  188. package/dist/mcp/tools/index.js.map +1 -1
  189. package/dist/mcp/tools/logs.d.ts +48 -2
  190. package/dist/mcp/tools/logs.d.ts.map +1 -1
  191. package/dist/mcp/tools/logs.js +204 -54
  192. package/dist/mcp/tools/logs.js.map +1 -1
  193. package/dist/mcp/tools/monitoring.d.ts +1 -2
  194. package/dist/mcp/tools/monitoring.d.ts.map +1 -1
  195. package/dist/mcp/tools/monitoring.js +78 -285
  196. package/dist/mcp/tools/monitoring.js.map +1 -1
  197. package/dist/mcp/tools/object-store.d.ts +1 -1
  198. package/dist/mcp/tools/object-store.d.ts.map +1 -1
  199. package/dist/mcp/tools/object-store.js +19 -59
  200. package/dist/mcp/tools/object-store.js.map +1 -1
  201. package/dist/mcp/tools/profile.d.ts.map +1 -1
  202. package/dist/mcp/tools/profile.js +15 -35
  203. package/dist/mcp/tools/profile.js.map +1 -1
  204. package/dist/mcp/tools/shared.d.ts +43 -0
  205. package/dist/mcp/tools/shared.d.ts.map +1 -1
  206. package/dist/mcp/tools/shared.js +54 -0
  207. package/dist/mcp/tools/shared.js.map +1 -1
  208. package/dist/mcp.d.ts +3 -11
  209. package/dist/mcp.d.ts.map +1 -1
  210. package/dist/mcp.js +4 -56
  211. package/dist/mcp.js.map +1 -1
  212. package/dist/safety/deployment.d.ts +47 -2
  213. package/dist/safety/deployment.d.ts.map +1 -1
  214. package/dist/safety/deployment.js +139 -6
  215. package/dist/safety/deployment.js.map +1 -1
  216. package/dist/safety/guards.d.ts +2 -2
  217. package/dist/safety/guards.d.ts.map +1 -1
  218. package/dist/safety/guards.js +4 -4
  219. package/dist/safety/guards.js.map +1 -1
  220. package/dist/safety/paths.d.ts +29 -0
  221. package/dist/safety/paths.d.ts.map +1 -0
  222. package/dist/safety/paths.js +76 -0
  223. package/dist/safety/paths.js.map +1 -0
  224. package/dist/safety/runtime.d.ts +24 -0
  225. package/dist/safety/runtime.d.ts.map +1 -0
  226. package/dist/safety/runtime.js +59 -0
  227. package/dist/safety/runtime.js.map +1 -0
  228. package/dist/safety/secret-sources.d.ts +51 -0
  229. package/dist/safety/secret-sources.d.ts.map +1 -0
  230. package/dist/safety/secret-sources.js +124 -0
  231. package/dist/safety/secret-sources.js.map +1 -0
  232. package/dist/safety/secrets.d.ts +32 -0
  233. package/dist/safety/secrets.d.ts.map +1 -0
  234. package/dist/safety/secrets.js +91 -0
  235. package/dist/safety/secrets.js.map +1 -0
  236. package/dist/utils/errors.d.ts +14 -1
  237. package/dist/utils/errors.d.ts.map +1 -1
  238. package/dist/utils/errors.js +31 -3
  239. package/dist/utils/errors.js.map +1 -1
  240. package/dist/workflows/app-change.d.ts +124 -0
  241. package/dist/workflows/app-change.d.ts.map +1 -0
  242. package/dist/workflows/app-change.js +305 -0
  243. package/dist/workflows/app-change.js.map +1 -0
  244. package/dist/workflows/app-state.d.ts +60 -0
  245. package/dist/workflows/app-state.d.ts.map +1 -0
  246. package/dist/workflows/app-state.js +95 -0
  247. package/dist/workflows/app-state.js.map +1 -0
  248. package/dist/workflows/artifact-compare.d.ts +134 -0
  249. package/dist/workflows/artifact-compare.d.ts.map +1 -0
  250. package/dist/workflows/artifact-compare.js +419 -0
  251. package/dist/workflows/artifact-compare.js.map +1 -0
  252. package/dist/workflows/asset-naming.d.ts +72 -0
  253. package/dist/workflows/asset-naming.d.ts.map +1 -0
  254. package/dist/workflows/asset-naming.js +116 -0
  255. package/dist/workflows/asset-naming.js.map +1 -0
  256. package/dist/{api/DesignCenterWorkflow.d.ts → workflows/design-center.d.ts} +4 -4
  257. package/dist/workflows/design-center.d.ts.map +1 -0
  258. package/dist/{api/DesignCenterWorkflow.js → workflows/design-center.js} +1 -1
  259. package/dist/workflows/design-center.js.map +1 -0
  260. package/dist/workflows/jar-deployment.d.ts +156 -0
  261. package/dist/workflows/jar-deployment.d.ts.map +1 -0
  262. package/dist/workflows/jar-deployment.js +178 -0
  263. package/dist/workflows/jar-deployment.js.map +1 -0
  264. package/package.json +12 -4
  265. package/dist/analysis/utils.d.ts.map +0 -1
  266. package/dist/analysis/utils.js.map +0 -1
  267. package/dist/api/DesignCenterWorkflow.d.ts.map +0 -1
  268. package/dist/api/DesignCenterWorkflow.js.map +0 -1
  269. package/dist/api/index.d.ts +0 -13
  270. package/dist/api/index.d.ts.map +0 -1
  271. package/dist/api/index.js +0 -13
  272. package/dist/api/index.js.map +0 -1
  273. package/dist/mcp/tools/applications.d.ts +0 -4
  274. package/dist/mcp/tools/applications.d.ts.map +0 -1
  275. package/dist/mcp/tools/applications.js +0 -815
  276. package/dist/mcp/tools/applications.js.map +0 -1
  277. package/dist/utils/config.d.ts.map +0 -1
  278. package/dist/utils/config.js.map +0 -1
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Client application credentials and API smoke tests
3
+ * Shared by the MCP tools and the CLI. Client secrets are resolved on the server, used for
4
+ * one request or one file write, and scrubbed from everything returned.
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import axios from 'axios';
8
+ import { MASKED, redactText } from '../safety/secrets.js';
9
+ import { resolveWritablePath } from '../safety/paths.js';
10
+ import { errorMessage } from '../utils/errors.js';
11
+ /** Methods that run without the write guard. */
12
+ export const SAFE_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
13
+ /** Largest body excerpt returned, in bytes. */
14
+ export const BODY_EXCERPT_BYTES = 4096;
15
+ /** Response headers worth showing; everything else is dropped. */
16
+ const HEADER_ALLOWLIST = [
17
+ 'content-type',
18
+ 'content-length',
19
+ 'date',
20
+ 'location',
21
+ 'retry-after',
22
+ 'www-authenticate',
23
+ 'x-correlation-id',
24
+ 'x-request-id',
25
+ 'x-ratelimit-limit',
26
+ 'x-ratelimit-remaining',
27
+ 'x-ratelimit-reset',
28
+ ];
29
+ /** Mask a client secret as `******…<last4>`; short values are fully masked. */
30
+ export function maskClientSecret(secret) {
31
+ if (!secret)
32
+ return '';
33
+ return secret.length > 8 ? `${MASKED}…${secret.slice(-4)}` : MASKED;
34
+ }
35
+ /** Every form a credential pair can take on the wire, for scrubbing. */
36
+ export function credentialVariants(clientId, clientSecret) {
37
+ const values = [clientId, clientSecret].filter((v) => Boolean(v));
38
+ const variants = [...values, ...values.map((v) => encodeURIComponent(v))];
39
+ if (clientId && clientSecret)
40
+ variants.push(Buffer.from(`${clientId}:${clientSecret}`).toString('base64'));
41
+ return variants;
42
+ }
43
+ /** A client application with the secret masked; safe to print or return. */
44
+ export function describeClientApplication(app) {
45
+ return {
46
+ id: app.id,
47
+ name: app.name,
48
+ description: app.description,
49
+ clientId: app.clientId,
50
+ clientSecret: maskClientSecret(app.clientSecret),
51
+ url: app.url,
52
+ redirectUri: app.redirectUri,
53
+ grantTypes: app.grantTypes,
54
+ };
55
+ }
56
+ function envValue(value, key) {
57
+ if (/^[A-Za-z0-9._~+/=:@-]*$/.test(value))
58
+ return value;
59
+ if (!/['\r\n]/.test(value))
60
+ return `'${value}'`;
61
+ throw new Error(`${key} cannot be written in .env format`);
62
+ }
63
+ /**
64
+ * Write `CLIENT_ID`/`CLIENT_SECRET` in .env format at mode 0600, inside the project root.
65
+ * An existing file is replaced only with `overwrite`, and is removed first so the new file
66
+ * never inherits looser permissions or follows a symlink.
67
+ */
68
+ export function writeCredentialsFile(file, app, options = {}) {
69
+ const target = resolveWritablePath(file, options);
70
+ const content = `CLIENT_ID=${envValue(app.clientId, 'CLIENT_ID')}\nCLIENT_SECRET=${envValue(app.clientSecret, 'CLIENT_SECRET')}\n`;
71
+ if (options.overwrite && fs.existsSync(target))
72
+ fs.rmSync(target);
73
+ fs.writeFileSync(target, content, { mode: 0o600, flag: 'wx' });
74
+ fs.chmodSync(target, 0o600);
75
+ return target;
76
+ }
77
+ function headerFromExpression(expression, fallback) {
78
+ if (typeof expression !== 'string')
79
+ return fallback;
80
+ const match = /headers\[\s*['"]([A-Za-z0-9_-]+)['"]\s*\]/.exec(expression) ?? /headers\.([A-Za-z0-9_-]+)/.exec(expression);
81
+ return match ? match[1] : fallback;
82
+ }
83
+ /**
84
+ * Decide how to send client credentials from the API's policy chain:
85
+ * - an enabled client-id-enforcement policy whose `credentialsOriginHasHttpBasicAuthenticationHeader`
86
+ * is `httpBasicAuthenticationHeader` means HTTP basic auth;
87
+ * - any other enabled client-id-enforcement policy means headers, named from its
88
+ * `clientIdExpression`/`clientSecretExpression` (default `client_id`/`client_secret`);
89
+ * - no such policy means no credentials are needed.
90
+ */
91
+ export function inferCredentialStyle(policies) {
92
+ const policy = policies.find((p) => !p.disabled && /client-id-enforcement/i.test(p.template?.assetId || p.policyTemplateId || ''));
93
+ if (!policy)
94
+ return { mode: 'none' };
95
+ const config = policy.configurationData ?? {};
96
+ if (config.credentialsOriginHasHttpBasicAuthenticationHeader === 'httpBasicAuthenticationHeader') {
97
+ return { mode: 'basic' };
98
+ }
99
+ return {
100
+ mode: 'headers',
101
+ idHeader: headerFromExpression(config.clientIdExpression, 'client_id'),
102
+ secretHeader: headerFromExpression(config.clientSecretExpression, 'client_secret'),
103
+ };
104
+ }
105
+ function joinUrl(base, path) {
106
+ if (!path)
107
+ return base;
108
+ return `${base.replace(/\/+$/, '')}/${path.replace(/^\/+/, '')}`;
109
+ }
110
+ function parseHttpUrl(value, label) {
111
+ let url;
112
+ try {
113
+ url = new URL(value);
114
+ }
115
+ catch {
116
+ throw new Error(`${label} is not an absolute URL: ${value}`);
117
+ }
118
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
119
+ throw new Error(`${label} must be http or https`);
120
+ return url;
121
+ }
122
+ /**
123
+ * Resolve the API instance, target URL, credential style and client application. No secret
124
+ * is fetched here. The URL is the instance's endpoint plus `path`, or `url` when given.
125
+ */
126
+ export async function planSmokeTest(client, orgId, env, input) {
127
+ const method = (input.method || 'GET').toUpperCase();
128
+ if (!/^[A-Z]+$/.test(method))
129
+ throw new Error(`Invalid HTTP method: ${input.method}`);
130
+ const resolved = await client.apiManager.resolveApiInstance(orgId, env, input.api);
131
+ const endpoint = resolved.instance?.endpointUri || resolved.instance?.proxyUri;
132
+ let url;
133
+ if (input.url) {
134
+ url = parseHttpUrl(input.url, 'url').toString();
135
+ }
136
+ else if (endpoint) {
137
+ url = parseHttpUrl(joinUrl(endpoint, input.path), 'API endpoint').toString();
138
+ }
139
+ else {
140
+ throw new Error(`API ${resolved.apiId} has no endpoint URI in ${env.name}; pass url`);
141
+ }
142
+ const policies = await client.apiManager.getPolicies(orgId, env.id, resolved.apiId);
143
+ let credentials = inferCredentialStyle(policies);
144
+ if (credentials.mode === 'none' && input.clientAppId !== undefined) {
145
+ credentials = { mode: 'headers', idHeader: 'client_id', secretHeader: 'client_secret' };
146
+ }
147
+ let clientApp;
148
+ if (input.clientAppId !== undefined) {
149
+ clientApp = { id: input.clientAppId };
150
+ }
151
+ else if (credentials.mode !== 'none') {
152
+ const contracts = await client.apiManager.getContracts(orgId, env.id, resolved.apiId);
153
+ const approved = contracts.filter((c) => (c.status || '').toUpperCase() === 'APPROVED');
154
+ if (approved.length !== 1) {
155
+ const options = approved.map((c) => `${c.application?.name ?? '?'} (${c.application?.id ?? c.applicationId})`);
156
+ throw new Error(approved.length === 0
157
+ ? `API ${resolved.apiId} enforces client credentials but has no approved contracts; pass clientAppId`
158
+ : `API ${resolved.apiId} has ${approved.length} approved contracts; pass clientAppId, one of: ${options.join(', ')}`);
159
+ }
160
+ const id = approved[0].application?.id ?? approved[0].applicationId;
161
+ if (id === undefined)
162
+ throw new Error(`Contract ${approved[0].id} names no client application`);
163
+ clientApp = { id, name: approved[0].application?.name };
164
+ }
165
+ if (clientApp && credentials.mode !== 'none') {
166
+ const target = new URL(url);
167
+ const sameAsEndpoint = endpoint ? new URL(endpoint).origin === target.origin : false;
168
+ if (target.protocol !== 'https:' && !sameAsEndpoint) {
169
+ throw new Error(`Refusing to send client credentials over plain HTTP to ${target.origin}; use https`);
170
+ }
171
+ }
172
+ return {
173
+ api: { id: resolved.apiId, name: resolved.asset?.exchangeAssetName },
174
+ method,
175
+ url,
176
+ credentials,
177
+ clientApp,
178
+ };
179
+ }
180
+ function readExcerpt(stream, limit) {
181
+ return new Promise((resolve) => {
182
+ const chunks = [];
183
+ let total = 0;
184
+ let done = false;
185
+ const finish = (truncated) => {
186
+ if (done)
187
+ return;
188
+ done = true;
189
+ resolve({ bytes: Buffer.concat(chunks).subarray(0, limit), truncated });
190
+ };
191
+ stream.on('data', (chunk) => {
192
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
193
+ chunks.push(buffer);
194
+ total += buffer.length;
195
+ if (total > limit) {
196
+ stream.destroy?.();
197
+ finish(true);
198
+ }
199
+ });
200
+ stream.on('end', () => finish(false));
201
+ stream.on('error', () => finish(total > limit));
202
+ stream.on('close', () => finish(total > limit));
203
+ });
204
+ }
205
+ function describeCredentials(style, clientApp) {
206
+ if (!clientApp || style.mode === 'none')
207
+ return 'none';
208
+ return style.mode === 'basic' ? 'HTTP basic auth' : `headers ${style.idHeader}/${style.secretHeader}`;
209
+ }
210
+ /**
211
+ * Send the planned request. The client secret is fetched here, and every string in the
212
+ * result, and any error message, is scrubbed of the credentials before it is returned.
213
+ */
214
+ export async function executeSmokeTest(client, orgId, plan, input) {
215
+ let secrets = [];
216
+ try {
217
+ const headers = { ...(input.headers ?? {}) };
218
+ const style = plan.credentials;
219
+ if (plan.clientApp && style.mode !== 'none') {
220
+ const app = await client.apiManager.getClientApplication(orgId, plan.clientApp.id);
221
+ secrets = credentialVariants(app.clientId, app.clientSecret);
222
+ plan = { ...plan, clientApp: { id: plan.clientApp.id, name: plan.clientApp.name ?? app.name } };
223
+ if (style.mode === 'basic') {
224
+ headers.Authorization = `Basic ${Buffer.from(`${app.clientId}:${app.clientSecret}`).toString('base64')}`;
225
+ }
226
+ else {
227
+ headers[style.idHeader] = app.clientId;
228
+ headers[style.secretHeader] = app.clientSecret;
229
+ }
230
+ }
231
+ const started = Date.now();
232
+ const response = await axios.request({
233
+ method: plan.method,
234
+ url: plan.url,
235
+ headers,
236
+ data: plan.method === 'GET' || plan.method === 'HEAD' ? undefined : input.body,
237
+ timeout: input.timeoutMs ?? 30000,
238
+ responseType: 'stream',
239
+ maxRedirects: 0,
240
+ validateStatus: () => true,
241
+ });
242
+ const latencyMs = Date.now() - started;
243
+ // Read past the excerpt limit so a secret straddling the cut is still matched whole.
244
+ const { bytes, truncated } = await readExcerpt(response.data, BODY_EXCERPT_BYTES + 1024);
245
+ const excerpt = redactText(bytes.toString('utf8'), secrets).slice(0, BODY_EXCERPT_BYTES);
246
+ const responseHeaders = {};
247
+ for (const name of HEADER_ALLOWLIST) {
248
+ const value = response.headers[name];
249
+ if (value !== undefined && value !== null) {
250
+ responseHeaders[name] = redactText(Array.isArray(value) ? value.join(', ') : String(value), secrets);
251
+ }
252
+ }
253
+ const status = response.status;
254
+ return {
255
+ api: plan.api,
256
+ request: {
257
+ method: plan.method,
258
+ url: redactText(plan.url, secrets),
259
+ credentials: describeCredentials(plan.credentials, plan.clientApp),
260
+ clientApp: plan.clientApp,
261
+ },
262
+ status,
263
+ statusText: redactText(response.statusText || '', secrets),
264
+ latencyMs,
265
+ passed: input.expectStatus !== undefined ? status === input.expectStatus : status < 400,
266
+ expectStatus: input.expectStatus,
267
+ headers: responseHeaders,
268
+ body: { excerpt, truncated: truncated || bytes.length > BODY_EXCERPT_BYTES },
269
+ };
270
+ }
271
+ catch (error) {
272
+ throw new Error(redactText(`Smoke test failed: ${errorMessage(error)}`, secrets));
273
+ }
274
+ }
275
+ //# sourceMappingURL=smoke-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke-test.js","sourceRoot":"","sources":["../../src/client/smoke-test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * API Manager CLI Commands
3
- * anc api list | policies | sla-tiers | alerts
3
+ * anc api list | policies | sla-tiers | alerts | contracts | client-app | smoke
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  export declare function createApiCommand(): Command;
@@ -1 +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;AAMpC,wBAAgB,gBAAgB,IAAI,OAAO,CA8I1C"}
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;AAiCpC,wBAAgB,gBAAgB,IAAI,OAAO,CAuR1C"}
@@ -1,12 +1,29 @@
1
1
  /**
2
2
  * API Manager CLI Commands
3
- * anc api list | policies | sla-tiers | alerts
3
+ * anc api list | policies | sla-tiers | alerts | contracts | client-app | smoke
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import { log } from '../utils/logger.js';
7
7
  import { errorMessage } from '../utils/errors.js';
8
8
  import { printTable } from '../utils/formatter.js';
9
- import { createClient } from './shared.js';
9
+ import { confirmAction, createClient } from './shared.js';
10
+ import { isProductionEnv } from '../safety/guards.js';
11
+ import { redactText } from '../safety/secrets.js';
12
+ import { SAFE_METHODS, credentialVariants, describeClientApplication, executeSmokeTest, planSmokeTest, writeCredentialsFile, } from '../client/smoke-test.js';
13
+ /** Accept a numeric API instance ID or an Exchange asset name. */
14
+ async function resolveApiId(client, orgId, env, apiName) {
15
+ const resolved = await client.apiManager.resolveApiInstance(orgId, env, apiName);
16
+ if (resolved.asset && !/^\d+$/.test(apiName.trim())) {
17
+ log.dim(` Resolved: ${resolved.asset.exchangeAssetName} (ID: ${resolved.apiId})`);
18
+ }
19
+ return resolved.apiId;
20
+ }
21
+ function parseHeader(value, previous = {}) {
22
+ const index = value.indexOf(':');
23
+ if (index <= 0)
24
+ throw new Error(`Header must look like "Name: value": ${value}`);
25
+ return { ...previous, [value.slice(0, index).trim()]: value.slice(index + 1).trim() };
26
+ }
10
27
  export function createApiCommand() {
11
28
  const api = new Command('api').description('Manage API instances, policies, and SLA tiers');
12
29
  api.command('list')
@@ -52,21 +69,7 @@ export function createApiCommand() {
52
69
  const client = createClient();
53
70
  const orgId = await client.getDefaultOrgId();
54
71
  const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
55
- // Try as numeric ID first, then search by name
56
- let apiId;
57
- const numId = parseInt(apiName);
58
- if (!isNaN(numId)) {
59
- apiId = numId;
60
- }
61
- else {
62
- const found = await client.apiManager.findByName(orgId, env.id, apiName);
63
- if (!found) {
64
- log.error(`API "${apiName}" not found in ${env.name}`);
65
- process.exit(1);
66
- }
67
- apiId = found.instance.id;
68
- log.dim(` Resolved: ${found.asset.exchangeAssetName} (ID: ${apiId})`);
69
- }
72
+ const apiId = await resolveApiId(client, orgId, env, apiName);
70
73
  const policies = await client.apiManager.getPolicies(orgId, env.id, apiId);
71
74
  if (policies.length === 0) {
72
75
  log.info('No policies applied');
@@ -97,19 +100,7 @@ export function createApiCommand() {
97
100
  const client = createClient();
98
101
  const orgId = await client.getDefaultOrgId();
99
102
  const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
100
- let apiId;
101
- const numId = parseInt(apiName);
102
- if (!isNaN(numId)) {
103
- apiId = numId;
104
- }
105
- else {
106
- const found = await client.apiManager.findByName(orgId, env.id, apiName);
107
- if (!found) {
108
- log.error(`API "${apiName}" not found in ${env.name}`);
109
- process.exit(1);
110
- }
111
- apiId = found.instance.id;
112
- }
103
+ const apiId = await resolveApiId(client, orgId, env, apiName);
113
104
  const tiers = await client.apiManager.getSlaTiers(orgId, env.id, apiId);
114
105
  if (tiers.length === 0) {
115
106
  log.info('No SLA tiers configured');
@@ -130,6 +121,160 @@ export function createApiCommand() {
130
121
  process.exit(1);
131
122
  }
132
123
  });
124
+ api.command('alerts')
125
+ .description('List alerts configured for an API')
126
+ .argument('<apiName>', 'API name or ID')
127
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
128
+ .action(async (apiName, opts) => {
129
+ try {
130
+ const client = createClient();
131
+ const orgId = await client.getDefaultOrgId();
132
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
133
+ const apiId = await resolveApiId(client, orgId, env, apiName);
134
+ const alerts = await client.apiManager.getAlerts(orgId, env.id, apiId);
135
+ if (alerts.length === 0) {
136
+ log.info('No alerts configured');
137
+ return;
138
+ }
139
+ log.header(`Alerts (${alerts.length})`);
140
+ console.log(JSON.stringify(alerts, null, 2));
141
+ }
142
+ catch (error) {
143
+ log.error(`Failed to list alerts: ${errorMessage(error)}`);
144
+ process.exit(1);
145
+ }
146
+ });
147
+ api.command('contracts')
148
+ .description('List client application contracts on an API')
149
+ .argument('<api>', 'API name or ID')
150
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
151
+ .action(async (apiName, opts) => {
152
+ try {
153
+ const client = createClient();
154
+ const orgId = await client.getDefaultOrgId();
155
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
156
+ const apiId = await resolveApiId(client, orgId, env, apiName);
157
+ const contracts = await client.apiManager.getContracts(orgId, env.id, apiId);
158
+ if (contracts.length === 0) {
159
+ log.info('No contracts');
160
+ return;
161
+ }
162
+ printTable(['Contract ID', 'Client App', 'App ID', 'Tier', 'Status'], contracts.map((c) => [
163
+ String(c.id),
164
+ c.application?.name ?? '-',
165
+ String(c.application?.id ?? c.applicationId ?? '-'),
166
+ c.tier?.name ?? '-',
167
+ c.status,
168
+ ]));
169
+ }
170
+ catch (error) {
171
+ log.error(`Failed to list contracts: ${errorMessage(error)}`);
172
+ process.exitCode = 1;
173
+ }
174
+ });
175
+ api.command('client-app')
176
+ .description('Show a client application with its secret masked')
177
+ .argument('<id>', 'Client application ID')
178
+ .option('--write-credentials <file>', 'Write CLIENT_ID/CLIENT_SECRET in .env format (mode 0600)')
179
+ .option('--overwrite', 'Replace the credentials file when it exists', false)
180
+ .action(async (id, opts) => {
181
+ let secrets = [];
182
+ try {
183
+ const client = createClient();
184
+ const orgId = await client.getDefaultOrgId();
185
+ const app = await client.apiManager.getClientApplication(orgId, id);
186
+ secrets = credentialVariants(undefined, app.clientSecret);
187
+ const view = describeClientApplication(app);
188
+ log.header(`Client application ${view.name}`);
189
+ log.kv('ID', String(view.id));
190
+ log.kv('Client ID', view.clientId);
191
+ log.kv('Client secret', view.clientSecret);
192
+ if (view.description)
193
+ log.kv('Description', view.description);
194
+ if (view.url)
195
+ log.kv('URL', view.url);
196
+ if (opts.writeCredentials) {
197
+ const written = writeCredentialsFile(opts.writeCredentials, app, { overwrite: opts.overwrite });
198
+ log.success(`Credentials written to ${written} (mode 0600)`);
199
+ }
200
+ }
201
+ catch (error) {
202
+ log.error(redactText(`Failed to get client application: ${errorMessage(error)}`, secrets));
203
+ process.exitCode = 1;
204
+ }
205
+ });
206
+ api.command('smoke')
207
+ .description('Send one request to an API with its client credentials and report the result')
208
+ .argument('<api>', 'API name or ID')
209
+ .requiredOption('-e, --env <name>', 'Environment name or ID')
210
+ .option('--path <path>', 'Path appended to the API endpoint URI')
211
+ .option('--url <url>', 'Absolute URL to call instead of the endpoint URI')
212
+ .option('-X, --method <method>', 'HTTP method', 'GET')
213
+ .option('--client-app <id>', 'Client application whose credentials to send')
214
+ .option('-H, --header <header>', 'Extra request header "Name: value" (repeatable)', parseHeader)
215
+ .option('-d, --data <body>', 'Request body')
216
+ .option('--expect <status>', 'Expected status code', (v) => parseInt(v, 10))
217
+ .option('--timeout <ms>', 'Request timeout in milliseconds', (v) => parseInt(v, 10))
218
+ .option('-y, --yes', 'Send a non-GET request without asking for confirmation', false)
219
+ .option('--allow-production', 'Allow a non-GET request in a production environment', false)
220
+ .action(async (apiName, opts) => {
221
+ try {
222
+ const client = createClient();
223
+ const orgId = await client.getDefaultOrgId();
224
+ const env = await client.accessManagement.resolveEnvironment(orgId, opts.env);
225
+ const plan = await planSmokeTest(client, orgId, env, {
226
+ api: apiName,
227
+ path: opts.path,
228
+ url: opts.url,
229
+ method: opts.method,
230
+ clientAppId: opts.clientApp,
231
+ });
232
+ if (!SAFE_METHODS.has(plan.method)) {
233
+ if (isProductionEnv(env.name, env.isProduction) && !opts.allowProduction) {
234
+ log.error(`${plan.method} refused: ${env.name} is production; pass --allow-production.`);
235
+ process.exitCode = 1;
236
+ return;
237
+ }
238
+ if (!opts.yes && !(await confirmAction(`Send ${plan.method} ${plan.url}?`))) {
239
+ log.info('Cancelled');
240
+ return;
241
+ }
242
+ }
243
+ const result = await executeSmokeTest(client, orgId, plan, {
244
+ headers: opts.header,
245
+ body: opts.data,
246
+ expectStatus: opts.expect,
247
+ timeoutMs: opts.timeout,
248
+ });
249
+ log.header(`${result.request.method} ${result.request.url}`);
250
+ log.kv('Status', `${result.status} ${result.statusText}`);
251
+ log.kv('Latency', `${result.latencyMs} ms`);
252
+ log.kv('Credentials', result.request.credentials);
253
+ if (result.request.clientApp) {
254
+ log.kv('Client app', `${result.request.clientApp.name ?? ''} (${result.request.clientApp.id})`);
255
+ }
256
+ for (const [name, value] of Object.entries(result.headers))
257
+ log.kv(` ${name}`, value);
258
+ if (result.body.excerpt) {
259
+ console.log();
260
+ console.log(result.body.excerpt);
261
+ if (result.body.truncated)
262
+ log.dim(' (body truncated)');
263
+ }
264
+ if (result.passed)
265
+ log.success('Passed');
266
+ else {
267
+ log.error(result.expectStatus !== undefined
268
+ ? `Expected ${result.expectStatus}, got ${result.status}`
269
+ : `Failed with ${result.status}`);
270
+ process.exitCode = 1;
271
+ }
272
+ }
273
+ catch (error) {
274
+ log.error(errorMessage(error));
275
+ process.exitCode = 1;
276
+ }
277
+ });
133
278
  return api;
134
279
  }
135
280
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,gBAAgB;IAC5B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAC;IAE5F,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SACd,WAAW,CAAC,sCAAsC,CAAC;SACnD,cAAc,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAE9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC5C,OAAO;YACX,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAE3C,MAAM,IAAI,GAAe,EAAE,CAAC;YAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC;wBACN,KAAK,CAAC,iBAAiB;wBACvB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnB,QAAQ,CAAC,MAAM;wBACf,QAAQ,CAAC,YAAY,IAAI,GAAG;wBAC5B,QAAQ,CAAC,UAAU,IAAI,GAAG;wBAC1B,QAAQ,CAAC,WAAW,IAAI,GAAG;qBAC9B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAED,UAAU,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;SAClB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACvC,cAAc,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9E,+CAA+C;YAC/C,IAAI,KAAa,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,GAAG,CAAC,KAAK,CAAC,QAAQ,OAAO,kBAAkB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,iBAAiB,SAAS,KAAK,GAAG,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAE3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAChC,OAAO;YACX,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,GAAG,CAAC,EAAE,CACF,QAAQ,EACR,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB,IAAI,SAAS,KAAK,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,GAAG,EAAE,CAClG,CAAC;gBACF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC1C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBACtB,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAClB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;SACnB,WAAW,CAAC,2BAA2B,CAAC;SACxC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;SACvC,cAAc,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAI,EAAE,EAAE;QACpC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9E,IAAI,KAAa,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACzE,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,GAAG,CAAC,KAAK,CAAC,QAAQ,OAAO,kBAAkB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;gBACD,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAExE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACpC,OAAO;YACX,CAAC;YAED,UAAU,CACN,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,EACpD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACb,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC5B,CAAC,CAAC,MAAM;qBACH,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,QAAQ,CAAC,CAAC,wBAAwB,GAAG,IAAI,GAAG,CAAC;qBAC5E,IAAI,CAAC,IAAI,CAAC;gBACf,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;aAC7B,CAAC,CACL,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,WAAW,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * CLI helpers for application changes
3
+ * Shared flags and output for `anc apps update`, `anc apps settings set`, `anc apps restart` and
4
+ * `anc deploy`. Secure values can only come from files or environment variables, never from
5
+ * arguments, so they stay out of shell history.
6
+ */
7
+ import type { Command } from 'commander';
8
+ import type { RuntimeSpec } from '../safety/runtime.js';
9
+ import type { AppChangePlan, ChangeMode, SettingsChangeInput, UpdateStrategy } from '../workflows/app-change.js';
10
+ import type { PhaseSnapshot } from '../workflows/app-state.js';
11
+ /** Add the settings flags to a command. */
12
+ export declare function addSettingsOptions(command: Command): Command;
13
+ /** Add the runtime flags to a command. */
14
+ export declare function addRuntimeOptions(command: Command, prefix?: string): Command;
15
+ /** Add the mode, strategy and wait flags to a command. */
16
+ export declare function addRolloutOptions(command: Command): Command;
17
+ export interface SettingsOptions {
18
+ set?: string[];
19
+ fromFile?: string[];
20
+ secureFromFile?: string[];
21
+ secureFromEnv?: string[];
22
+ remove?: string[];
23
+ removeSecure?: string[];
24
+ moveToSecure?: string[];
25
+ }
26
+ export declare function settingsFromOptions(opts: SettingsOptions): SettingsChangeInput;
27
+ export declare function runtimeFromOptions(opts: {
28
+ runtime?: string;
29
+ java?: string;
30
+ releaseChannel?: string;
31
+ }): RuntimeSpec | undefined;
32
+ export declare function rolloutFromOptions(opts: {
33
+ stopStart?: boolean;
34
+ updateStrategy?: string;
35
+ wait?: boolean;
36
+ timeout?: string;
37
+ }): {
38
+ mode: ChangeMode;
39
+ updateStrategy?: UpdateStrategy;
40
+ wait: boolean;
41
+ timeoutMs?: number;
42
+ };
43
+ /** Print an application change preview. Returns false when blockers stop the change. */
44
+ export declare function printAppChange(plan: AppChangePlan): boolean;
45
+ /** Ask for confirmation in production unless forced. Returns false when declined. */
46
+ export declare function confirmIfProduction(plan: AppChangePlan, force: boolean): Promise<boolean>;
47
+ /** A spinner that follows a rollout. */
48
+ export declare function rolloutSpinner(text: string): {
49
+ spinner: import("ora").Ora;
50
+ onStatus: (step: string, snapshot: PhaseSnapshot) => void;
51
+ };
52
+ //# sourceMappingURL=app-change-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-change-cli.d.ts","sourceRoot":"","sources":["../../src/commands/app-change-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAqB5D;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAK,GAAG,OAAO,CAKxE;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAM3D;AAsBD,MAAM,WAAW,eAAe;IAC5B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,mBAAmB,CAc9E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,WAAW,GAAG,SAAS,CAO1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAaA;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CA0B3D;AAED,qFAAqF;AACrF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAG/F;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM;;qBAIlB,MAAM,YAAY,aAAa;EAIvD"}