@aifabrix/builder 2.53.1 → 2.54.1

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 (321) hide show
  1. package/bin/aifabrix.js +2 -2
  2. package/lib/api/assistants.api.js +8 -5
  3. package/lib/api/channel-identity.api.js +41 -0
  4. package/lib/api/evidence-authoring.api.js +5 -1
  5. package/lib/api/evidence.api.js +2 -0
  6. package/lib/api/types/evidence.types.js +2 -0
  7. package/lib/api/work-search.api.js +136 -0
  8. package/lib/channels/add-channel.js +163 -126
  9. package/lib/channels/approval-guides/chatgpt.js +14 -18
  10. package/lib/channels/approval-guides/claude.js +29 -0
  11. package/lib/channels/approval-guides/index.js +88 -22
  12. package/lib/channels/approval-guides/mcp-client.js +27 -0
  13. package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
  14. package/lib/channels/approval-guides/slack.js +10 -10
  15. package/lib/channels/approval-guides/teams-bot.js +8 -12
  16. package/lib/channels/channel-add-continuations.js +91 -0
  17. package/lib/channels/channel-add-ensure.js +124 -27
  18. package/lib/channels/channel-add-existing.js +160 -28
  19. package/lib/channels/channel-add-failure.js +60 -0
  20. package/lib/channels/channel-add-remaining.js +486 -0
  21. package/lib/channels/channel-add-tty.js +190 -0
  22. package/lib/channels/channel-add-wizard-config.js +138 -0
  23. package/lib/channels/channel-add-wizard.js +250 -0
  24. package/lib/channels/channel-artifact-generator.js +27 -13
  25. package/lib/channels/channel-cardinality.js +83 -0
  26. package/lib/channels/channel-catalog-icon.js +45 -0
  27. package/lib/channels/channel-cli-instructions.js +75 -0
  28. package/lib/channels/channel-configuration-map.js +213 -0
  29. package/lib/channels/channel-credential.js +11 -14
  30. package/lib/channels/channel-definition-project.js +101 -0
  31. package/lib/channels/channel-definition-registry.js +154 -0
  32. package/lib/channels/channel-description.js +59 -2
  33. package/lib/channels/channel-discovery.js +16 -2
  34. package/lib/channels/channel-external-system.js +86 -9
  35. package/lib/channels/channel-install-envelope-actions.js +88 -0
  36. package/lib/channels/channel-install-envelope-microsoft.js +155 -0
  37. package/lib/channels/channel-install-envelope.js +356 -0
  38. package/lib/channels/channel-install-help-md.js +172 -0
  39. package/lib/channels/channel-install-http-payload.js +62 -0
  40. package/lib/channels/channel-install-inventory.js +115 -0
  41. package/lib/channels/channel-install-profiles.js +90 -0
  42. package/lib/channels/channel-instance-collision.js +118 -0
  43. package/lib/channels/channel-instance-key.js +100 -0
  44. package/lib/channels/channel-instance-materialize.js +240 -0
  45. package/lib/channels/channel-integration-generator.js +16 -9
  46. package/lib/channels/channel-integration-template.js +101 -22
  47. package/lib/channels/channel-inventory-fetch.js +79 -0
  48. package/lib/channels/channel-oauth-preflight.js +104 -0
  49. package/lib/channels/channel-package-version.js +76 -0
  50. package/lib/channels/channel-predefined-client.js +154 -0
  51. package/lib/channels/channel-probe.js +7 -2
  52. package/lib/channels/channel-runtime-resolver.js +180 -72
  53. package/lib/channels/channel-status-display.js +86 -16
  54. package/lib/channels/channel-targets.js +106 -92
  55. package/lib/channels/chatgpt-callback.js +318 -0
  56. package/lib/channels/chatgpt-channel-add.js +229 -0
  57. package/lib/channels/chatgpt-preflight.js +396 -0
  58. package/lib/channels/chatgpt-runtime-contract.js +17 -0
  59. package/lib/channels/chatgpt-setup-values.js +124 -0
  60. package/lib/channels/claude-callback.js +67 -0
  61. package/lib/channels/claude-channel-add.js +254 -0
  62. package/lib/channels/claude-runtime-contract.js +40 -0
  63. package/lib/channels/claude-runtime.js +58 -0
  64. package/lib/channels/claude-setup-values.js +89 -0
  65. package/lib/channels/mcp-client/config-merge.js +148 -0
  66. package/lib/channels/mcp-client/ensure-client.js +231 -0
  67. package/lib/channels/mcp-client/paths.js +53 -0
  68. package/lib/channels/mcp-client/profiles.js +122 -0
  69. package/lib/channels/mcp-client/redirect-uris.js +99 -0
  70. package/lib/channels/mcp-client/runtime.js +59 -0
  71. package/lib/channels/mcp-client-channel-add.js +186 -0
  72. package/lib/channels/microsoft-copilot-channel-add.js +117 -7
  73. package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
  74. package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
  75. package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
  76. package/lib/channels/microsoft-copilot-package-prior.js +107 -0
  77. package/lib/channels/microsoft-copilot-package.js +29 -28
  78. package/lib/channels/microsoft-provisioning/a365.js +80 -0
  79. package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
  80. package/lib/channels/microsoft-provisioning/auth.js +179 -0
  81. package/lib/channels/microsoft-provisioning/cli.js +71 -0
  82. package/lib/channels/microsoft-provisioning/constants.js +75 -0
  83. package/lib/channels/microsoft-provisioning/errors.js +117 -0
  84. package/lib/channels/microsoft-provisioning/index.js +55 -0
  85. package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
  86. package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
  87. package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
  88. package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
  89. package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
  90. package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
  91. package/lib/channels/microsoft-provisioning/persist.js +110 -0
  92. package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
  93. package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
  94. package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
  95. package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
  96. package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
  97. package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
  98. package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
  99. package/lib/channels/runtime-tool-catalog.js +5 -2
  100. package/lib/channels/slack-channel-add-portal.js +130 -0
  101. package/lib/channels/slack-channel-add-tty-auth.js +95 -0
  102. package/lib/channels/slack-channel-add.js +258 -0
  103. package/lib/channels/slack-provisioning/apps.js +181 -0
  104. package/lib/channels/slack-provisioning/auth-store.js +110 -0
  105. package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
  106. package/lib/channels/slack-provisioning/auth.js +115 -0
  107. package/lib/channels/slack-provisioning/callbacks.js +41 -0
  108. package/lib/channels/slack-provisioning/cli.js +226 -0
  109. package/lib/channels/slack-provisioning/constants.js +37 -0
  110. package/lib/channels/slack-provisioning/credentials.js +169 -0
  111. package/lib/channels/slack-provisioning/curl-shim.js +132 -0
  112. package/lib/channels/slack-provisioning/developer-install.js +118 -0
  113. package/lib/channels/slack-provisioning/env-file.js +120 -0
  114. package/lib/channels/slack-provisioning/errors.js +47 -0
  115. package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
  116. package/lib/channels/slack-provisioning/index.js +250 -0
  117. package/lib/channels/slack-provisioning/install-cli.js +323 -0
  118. package/lib/channels/slack-provisioning/manifest.js +89 -0
  119. package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
  120. package/lib/channels/slack-provisioning/offer-cli.js +113 -0
  121. package/lib/channels/slack-provisioning/onboard-members.js +122 -0
  122. package/lib/channels/slack-provisioning/onboard.js +89 -0
  123. package/lib/channels/slack-provisioning/persist.js +95 -0
  124. package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
  125. package/lib/channels/slack-provisioning/with-curl-on-path.js +48 -0
  126. package/lib/channels/teams-bot-channel-add.js +94 -0
  127. package/lib/channels/vendor-dataplane-url.js +249 -0
  128. package/lib/cli/setup-certification.help.js +2 -0
  129. package/lib/cli/setup-external-system-help.js +2 -0
  130. package/lib/cli/setup-external-system.js +1 -1
  131. package/lib/commands/channel-add-help.js +366 -0
  132. package/lib/commands/channel-add-setup.js +162 -80
  133. package/lib/commands/channel-configure.js +118 -0
  134. package/lib/commands/channel.js +10 -1
  135. package/lib/commands/governance-upload-external.js +6 -3
  136. package/lib/commands/lifecycle-command-action.js +2 -5
  137. package/lib/commands/lifecycle-external.js +93 -21
  138. package/lib/commands/repair-datasource-test-payload.js +4 -2
  139. package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
  140. package/lib/commands/repair-datasource.js +3 -0
  141. package/lib/commands/repair-external-run.js +59 -25
  142. package/lib/commands/repair-openapi-rest-runtime.js +127 -0
  143. package/lib/commands/repair-orchestration-tag-merge.js +339 -0
  144. package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
  145. package/lib/commands/repair-rbac-platform-preset.js +26 -15
  146. package/lib/commands/repair-rbac-reader-roles.js +8 -21
  147. package/lib/commands/repair-rbac.js +10 -34
  148. package/lib/commands/repair-system-permissions.js +24 -22
  149. package/lib/commands/role-assistant-test-output.js +14 -0
  150. package/lib/commands/role-assistant.js +59 -21
  151. package/lib/commands/test-e2e-external.js +148 -21
  152. package/lib/commands/upload-credential-push-log.js +2 -1
  153. package/lib/commands/upload-publish-context.js +1 -1
  154. package/lib/commands/upload-role-assistant-shell.js +124 -0
  155. package/lib/commands/upload-sidecar-followups.js +6 -3
  156. package/lib/commands/upload.js +18 -3
  157. package/lib/core/secrets-docker-env.js +4 -1
  158. package/lib/core/secrets-env-content.js +17 -3
  159. package/lib/datasource/capability/capability-manifest.js +0 -3
  160. package/lib/datasource/capability/copy-test-payload.js +3 -0
  161. package/lib/external-system/deploy-helpers.js +26 -1
  162. package/lib/external-system/deploy.js +10 -6
  163. package/lib/external-system/download-helpers.js +29 -2
  164. package/lib/external-system/download-role-assistant.js +83 -4
  165. package/lib/external-system/download.js +40 -30
  166. package/lib/external-system/sync-deploy-manifest.js +3 -2
  167. package/lib/external-system/upload-identity.js +42 -0
  168. package/lib/generator/index.js +19 -15
  169. package/lib/generator/split.js +13 -2
  170. package/lib/lifecycle/role-assistant-governance.js +146 -0
  171. package/lib/lifecycle/scenario-upload.js +181 -30
  172. package/lib/programmatic/builder-api-cors.js +143 -0
  173. package/lib/programmatic/builder-api-request.js +6 -0
  174. package/lib/programmatic/builder-api-route-dispatch.js +56 -42
  175. package/lib/programmatic/builder-api-server.js +8 -1
  176. package/lib/programmatic/capability-registry.js +54 -0
  177. package/lib/programmatic/channel-install-help-resolve.js +359 -0
  178. package/lib/programmatic/channel-install-session.js +218 -0
  179. package/lib/programmatic/help-content/channel-onboarding.md +2 -0
  180. package/lib/programmatic/help-content/cip-overview.md +3 -1
  181. package/lib/programmatic/http-raw-response.js +62 -0
  182. package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
  183. package/lib/programmatic/openapi-channel-install-schemas.js +286 -0
  184. package/lib/programmatic/openapi-component-schemas.js +18 -1
  185. package/lib/programmatic/openapi-description-enricher.js +3 -1
  186. package/lib/programmatic/openapi-descriptions.js +74 -3
  187. package/lib/programmatic/openapi-envelope-examples.js +117 -0
  188. package/lib/programmatic/openapi-operation-bindings.js +4 -1
  189. package/lib/programmatic/openapi-schema-descriptions-channel.js +316 -0
  190. package/lib/programmatic/openapi-spec.js +12 -8
  191. package/lib/programmatic/platform-rbac-catalog.js +36 -18
  192. package/lib/programmatic/route-handler-map.js +51 -1
  193. package/lib/programmatic/route-handlers-context.js +2 -1
  194. package/lib/programmatic/run-auth-permissions.js +54 -0
  195. package/lib/programmatic/run-channel-catalog.js +196 -0
  196. package/lib/programmatic/run-channel-install-artifacts.js +137 -0
  197. package/lib/programmatic/run-channel-install-copilot.js +353 -0
  198. package/lib/programmatic/run-channel-install-options.js +232 -0
  199. package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
  200. package/lib/programmatic/run-channel-install.js +346 -0
  201. package/lib/programmatic/run-channel-package.js +87 -7
  202. package/lib/programmatic/workspace-context.js +2 -0
  203. package/lib/role-assistant/evidence-sync.js +4 -2
  204. package/lib/role-assistant/evidence-validation-issues.js +51 -0
  205. package/lib/role-assistant/knowledge-sync.js +10 -4
  206. package/lib/role-assistant/settings.js +49 -2
  207. package/lib/role-assistant/test-cases-evaluate.js +30 -2
  208. package/lib/role-assistant/test-cases-evidence.js +175 -0
  209. package/lib/role-assistant/test-cases-search.js +229 -0
  210. package/lib/role-assistant/test-cases.js +37 -4
  211. package/lib/role-assistant/test-runner-search.js +149 -0
  212. package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
  213. package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
  214. package/lib/role-assistant/test-runner-workhub.js +29 -11
  215. package/lib/role-assistant/test-runner.js +16 -1
  216. package/lib/schema/external-datasource.schema.json +112 -18
  217. package/lib/schema/external-system.schema.json +159 -2
  218. package/lib/schema/mcp-client-profile.schema.json +103 -0
  219. package/lib/utils/app-path-resolve.js +4 -0
  220. package/lib/utils/authentication-env-template.js +44 -6
  221. package/lib/utils/credential-secrets-env.js +6 -1
  222. package/lib/utils/env-copy.js +19 -7
  223. package/lib/utils/external-env-template.js +20 -2
  224. package/lib/utils/paths.js +18 -1
  225. package/lib/utils/platform-shell-package.js +69 -0
  226. package/lib/utils/port-resolver.js +50 -1
  227. package/lib/utils/rewrite-name-flag.js +20 -0
  228. package/lib/utils/role-assistant-paths.js +13 -10
  229. package/lib/utils/schema-resolver.js +11 -1
  230. package/lib/utils/secrets-helpers.js +12 -21
  231. package/lib/utils/token-manager.js +10 -5
  232. package/lib/validation/validate.js +40 -0
  233. package/package.json +1 -1
  234. package/templates/README.md +1 -1
  235. package/templates/applications/builder-api/Dockerfile +1 -1
  236. package/templates/applications/builder-api/env.template +7 -0
  237. package/templates/applications/dataplane/application.yaml +6 -5
  238. package/templates/applications/dataplane/env.template +2 -2
  239. package/templates/applications/dataplane/rbac.yaml +7 -2
  240. package/templates/applications/keycloak/Dockerfile +30 -4
  241. package/templates/applications/keycloak/application.yaml +2 -2
  242. package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
  243. package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
  244. package/templates/applications/keycloak/env.template +3 -0
  245. package/templates/applications/miso-controller/application.yaml +1 -2
  246. package/templates/applications/miso-controller/env.template +2 -0
  247. package/templates/channels/README.md +5 -5
  248. package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
  249. package/templates/channels/chatgpt/channel.json +59 -0
  250. package/templates/channels/chatgpt/icon.svg +1 -0
  251. package/templates/channels/chatgpt/install.template.md.hbs +20 -95
  252. package/templates/channels/chatgpt/integration/README.md +1 -1
  253. package/templates/channels/chatgpt/integration/application.json +2 -2
  254. package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
  255. package/templates/channels/chatgpt/integration/env.template +2 -4
  256. package/templates/channels/chatgpt/integration/rbac.json +13 -0
  257. package/templates/channels/claude/TROUBLESHOOTING.md +41 -0
  258. package/templates/channels/claude/channel.json +59 -0
  259. package/templates/channels/claude/icon.svg +1 -0
  260. package/templates/channels/claude/install.template.md.hbs +21 -0
  261. package/templates/channels/claude/integration/README.md +14 -0
  262. package/templates/channels/claude/integration/application.json +15 -0
  263. package/templates/channels/claude/integration/claude-system.json +59 -0
  264. package/templates/channels/claude/integration/env.template +2 -0
  265. package/templates/channels/claude/integration/rbac.json +13 -0
  266. package/templates/channels/claude/manifest.template.json.hbs +40 -0
  267. package/templates/channels/mcp-client/channel.json +72 -0
  268. package/templates/channels/mcp-client/icon.svg +1 -0
  269. package/templates/channels/mcp-client/install.template.md.hbs +24 -0
  270. package/templates/channels/mcp-client/integration/README.md +13 -0
  271. package/templates/channels/mcp-client/integration/application.json +15 -0
  272. package/templates/channels/mcp-client/integration/env.template +2 -0
  273. package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
  274. package/templates/channels/mcp-client/integration/rbac.json +13 -0
  275. package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
  276. package/templates/channels/mcp-client/profiles/cursor.json +26 -0
  277. package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
  278. package/templates/channels/mcp-client/profiles/vscode.json +29 -0
  279. package/templates/channels/microsoft-copilot/channel.json +73 -0
  280. package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
  281. package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
  282. package/templates/channels/microsoft-copilot/icon.svg +1 -0
  283. package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
  284. package/templates/channels/microsoft-copilot/integration/README.md +1 -1
  285. package/templates/channels/microsoft-copilot/integration/application.json +2 -2
  286. package/templates/channels/microsoft-copilot/integration/env.template +3 -6
  287. package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
  288. package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
  289. package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
  290. package/templates/channels/slack/channel.json +223 -0
  291. package/templates/channels/slack/icon.svg +1 -0
  292. package/templates/channels/slack/install.template.md.hbs +36 -28
  293. package/templates/channels/slack/integration/README.md +245 -22
  294. package/templates/channels/slack/integration/application.json +44 -7
  295. package/templates/channels/slack/integration/env.template +15 -6
  296. package/templates/channels/slack/integration/openapi/openapi.json +126 -0
  297. package/templates/channels/slack/integration/rbac.json +84 -0
  298. package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
  299. package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
  300. package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
  301. package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
  302. package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
  303. package/templates/channels/slack/integration/slack-system.json +155 -77
  304. package/templates/channels/slack/manifest.template.json.hbs +5 -2
  305. package/templates/channels/teams-bot/channel.json +161 -0
  306. package/templates/channels/teams-bot/icon.svg +1 -0
  307. package/templates/channels/teams-bot/install.template.md.hbs +12 -13
  308. package/templates/channels/teams-bot/integration/README.md +5 -4
  309. package/templates/channels/teams-bot/integration/application.json +6 -4
  310. package/templates/channels/teams-bot/integration/env.template +5 -4
  311. package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
  312. package/templates/channels/teams-bot/integration/rbac.json +21 -0
  313. package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
  314. package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
  315. package/templates/channels/web-embed/channel.json +60 -0
  316. package/templates/channels/web-embed/install.template.md.hbs +1 -1
  317. package/templates/channels/web-embed/integration/README.md +2 -2
  318. package/templates/channels/web-embed/integration/application.json +2 -2
  319. package/templates/channels/web-embed/integration/env.template +1 -1
  320. package/templates/channels/web-embed/integration/rbac.json +13 -0
  321. package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Raw HTTP outcomes for builder-api (markdown / ZIP bytes).
3
+ *
4
+ * @fileoverview Bypass JSON envelope for help.md and artifact downloads
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ /**
12
+ * @param {Object} params
13
+ * @param {string} params.contentType
14
+ * @param {string|Buffer} params.body
15
+ * @param {string} [params.fileName]
16
+ * @returns {{ __httpRaw: true, contentType: string, body: string|Buffer, fileName?: string }}
17
+ */
18
+ function createHttpRawResult(params) {
19
+ const result = {
20
+ __httpRaw: true,
21
+ contentType: params.contentType,
22
+ body: params.body
23
+ };
24
+ if (params.fileName) {
25
+ result.fileName = params.fileName;
26
+ }
27
+ return result;
28
+ }
29
+
30
+ /**
31
+ * @param {unknown} result
32
+ * @returns {boolean}
33
+ */
34
+ function isHttpRawResult(result) {
35
+ return Boolean(result && typeof result === 'object' && result.__httpRaw === true);
36
+ }
37
+
38
+ /**
39
+ * @param {import('http').ServerResponse} res
40
+ * @param {Object} raw
41
+ * @param {string} [requestId]
42
+ * @returns {void}
43
+ */
44
+ function sendRaw(res, raw, requestId) {
45
+ const headers = {
46
+ 'Content-Type': raw.contentType || 'application/octet-stream'
47
+ };
48
+ if (requestId) {
49
+ headers['X-Request-Id'] = requestId;
50
+ }
51
+ if (raw.fileName) {
52
+ headers['Content-Disposition'] = `attachment; filename="${raw.fileName}"`;
53
+ }
54
+ res.writeHead(200, headers);
55
+ res.end(raw.body);
56
+ }
57
+
58
+ module.exports = {
59
+ createHttpRawResult,
60
+ isHttpRawResult,
61
+ sendRaw
62
+ };
@@ -0,0 +1,179 @@
1
+ /**
2
+ * OpenAPI operation bindings for generic channel install routes.
3
+ *
4
+ * @fileoverview Keep openapi-operation-bindings.js under the line limit
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const SYSTEM_KEY_PARAM = {
12
+ name: 'systemKey',
13
+ in: 'path',
14
+ required: true,
15
+ schema: { $ref: '#/components/schemas/SystemKey' },
16
+ description: 'Channel target key (slack, chatgpt, claude, microsoft-copilot, teams-bot, web-embed, mcp-client).'
17
+ };
18
+
19
+ const ARTIFACT_ID_PARAM = {
20
+ name: 'artifactId',
21
+ in: 'path',
22
+ required: true,
23
+ schema: { type: 'string' },
24
+ description: 'Artifact id from the help document download link (for example appPackage).'
25
+ };
26
+
27
+ const PROVIDER_PARAM = {
28
+ name: 'provider',
29
+ in: 'path',
30
+ required: true,
31
+ schema: { type: 'string' },
32
+ description: 'Vendor callback provider key (opaque; used only to resume install).'
33
+ };
34
+
35
+ /**
36
+ * @param {string} schemaName
37
+ * @param {boolean} [required]
38
+ * @returns {Object}
39
+ */
40
+ function jsonRequestBody(schemaName, required = false) {
41
+ return {
42
+ required,
43
+ content: {
44
+ 'application/json': {
45
+ schema: { $ref: `#/components/schemas/${schemaName}` }
46
+ }
47
+ }
48
+ };
49
+ }
50
+
51
+ /** @type {Record<string, Object>} */
52
+ const CHANNEL_INSTALL_BINDINGS = {
53
+ listChannelTargets: {
54
+ queryParameters: [
55
+ {
56
+ name: 'allowExperimental',
57
+ in: 'query',
58
+ required: false,
59
+ schema: { type: 'boolean' },
60
+ description: 'When true, include experimental channel targets such as web-embed.'
61
+ }
62
+ ],
63
+ successResponse: 'ListChannelTargetsResponse'
64
+ },
65
+ getChannelDefinitionDetail: {
66
+ parameters: [
67
+ {
68
+ name: 'definitionKey',
69
+ in: 'path',
70
+ required: true,
71
+ schema: { $ref: '#/components/schemas/SystemKey' },
72
+ description: 'Channel definition key (catalog identity, not the Connected System instance key).'
73
+ }
74
+ ],
75
+ successResponse: 'ChannelDefinitionDetailResponse'
76
+ },
77
+ getChannelInstallation: {
78
+ parameters: [
79
+ {
80
+ name: 'definitionKey',
81
+ in: 'path',
82
+ required: true,
83
+ schema: { $ref: '#/components/schemas/SystemKey' },
84
+ description: 'Channel definition key.'
85
+ },
86
+ {
87
+ name: 'systemKey',
88
+ in: 'path',
89
+ required: true,
90
+ schema: { $ref: '#/components/schemas/SystemKey' },
91
+ description: 'Connected System instance key for this installation.'
92
+ }
93
+ ],
94
+ successResponse: 'ChannelInstallationDetailResponse'
95
+ },
96
+ runChannelInstall: {
97
+ parameters: [SYSTEM_KEY_PARAM],
98
+ requestBody: jsonRequestBody('ChannelInstallRequest', true),
99
+ successResponse: 'ChannelInstallHelpResponse'
100
+ },
101
+ getChannelInstall: {
102
+ parameters: [SYSTEM_KEY_PARAM],
103
+ queryParameters: [
104
+ {
105
+ name: 'verbose',
106
+ in: 'query',
107
+ required: false,
108
+ schema: { type: 'boolean' },
109
+ description: 'When true, return the full machine envelope (remainingSteps, useValues). Default JSON already includes phase and userActions.'
110
+ }
111
+ ],
112
+ successResponse: 'ChannelInstallHelpResponse'
113
+ },
114
+ getChannelInstallHelp: {
115
+ parameters: [SYSTEM_KEY_PARAM],
116
+ successResponse: 'ChannelInstallHelpResponse',
117
+ extraSuccessContent: {
118
+ 'text/markdown': {
119
+ schema: { type: 'string', description: 'Help document body (same remaining steps as INSTALL.md).' }
120
+ }
121
+ }
122
+ },
123
+ continueChannelInstall: {
124
+ parameters: [SYSTEM_KEY_PARAM],
125
+ requestBody: jsonRequestBody('ChannelInstallContinueRequest'),
126
+ successResponse: 'ChannelInstallHelpResponse'
127
+ },
128
+ listChannelArtifacts: {
129
+ parameters: [SYSTEM_KEY_PARAM],
130
+ successResponse: 'ListChannelArtifactsResponse'
131
+ },
132
+ getChannelArtifact: {
133
+ parameters: [SYSTEM_KEY_PARAM, ARTIFACT_ID_PARAM],
134
+ successResponse: 'ChannelArtifactBytesResponse',
135
+ extraSuccessContent: {
136
+ 'application/zip': {
137
+ schema: { type: 'string', format: 'binary', description: 'Package ZIP bytes.' }
138
+ }
139
+ }
140
+ },
141
+ getChannelCallback: {
142
+ parameters: [SYSTEM_KEY_PARAM, PROVIDER_PARAM],
143
+ successResponse: 'ChannelInstallHelpResponse'
144
+ },
145
+ postChannelCallback: {
146
+ parameters: [SYSTEM_KEY_PARAM, PROVIDER_PARAM],
147
+ requestBody: jsonRequestBody('EmptyRequestBody'),
148
+ successResponse: 'ChannelInstallHelpResponse'
149
+ },
150
+ buildChannelPackage: {
151
+ parameters: [SYSTEM_KEY_PARAM],
152
+ requestBody: jsonRequestBody('ChannelPackageRequest'),
153
+ successResponse: 'ChannelPackageResponse'
154
+ },
155
+ getChannelPackageSummary: {
156
+ parameters: [SYSTEM_KEY_PARAM],
157
+ successResponse: 'ChannelPackageSummaryResponse'
158
+ },
159
+ getChannelPackageZip: {
160
+ parameters: [SYSTEM_KEY_PARAM],
161
+ successResponse: 'ChannelPackageZipResponse'
162
+ },
163
+ getChannelBranding: {
164
+ parameters: [SYSTEM_KEY_PARAM],
165
+ successResponse: 'ChannelBrandingResponse'
166
+ },
167
+ patchChannelBranding: {
168
+ parameters: [SYSTEM_KEY_PARAM],
169
+ requestBody: jsonRequestBody('ChannelBrandingPatchRequest'),
170
+ successResponse: 'ChannelBrandingResponse'
171
+ },
172
+ getAuthPermissions: {
173
+ successResponse: 'AuthPermissionsResponse'
174
+ }
175
+ };
176
+
177
+ module.exports = {
178
+ CHANNEL_INSTALL_BINDINGS
179
+ };
@@ -0,0 +1,286 @@
1
+ /**
2
+ * OpenAPI request/result schemas for generic channel install.
3
+ *
4
+ * @fileoverview Default HTTP is help markdown plus phase and userActions
5
+ * @author AI Fabrix Team
6
+ * @version 1.0.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ const { frozenObject, schemaRef } = require('./openapi-schema-helpers');
12
+
13
+ /** @type {Record<string, Object>} */
14
+ const OPENAPI_CHANNEL_INSTALL_REQUEST_SCHEMAS = {
15
+ ChannelInstallRequest: frozenObject(
16
+ {
17
+ name: { type: 'string', minLength: 1 },
18
+ systemKey: { type: 'string' },
19
+ configuration: { type: 'object', additionalProperties: { type: 'string' } },
20
+ runtimeSystemKey: { type: 'string' },
21
+ force: { type: 'boolean' },
22
+ probe: { type: 'boolean' },
23
+ dryRun: { type: 'boolean' },
24
+ allowExperimental: { type: 'boolean' },
25
+ onboardUsers: { type: 'boolean' },
26
+ profile: { type: 'string' },
27
+ token: { type: 'string', minLength: 1 }
28
+ },
29
+ ['name']
30
+ ),
31
+ ChannelInstallContinueRequest: frozenObject({
32
+ token: { type: 'string', minLength: 1 },
33
+ retryLogin: { type: 'string' }
34
+ }),
35
+ ChannelPackageRequest: frozenObject({
36
+ name: { type: 'string' },
37
+ description: { type: 'string' },
38
+ baseName: { type: 'string' },
39
+ environment: { type: 'string' },
40
+ dataplaneUrl: { type: 'string', format: 'uri' },
41
+ dryRun: { type: 'boolean' },
42
+ branding: schemaRef('ChannelBrandingFields')
43
+ }),
44
+ ChannelBrandingPatchRequest: frozenObject({
45
+ displayName: { type: 'string' },
46
+ description: { type: 'string' },
47
+ iconColorPath: { type: 'string' },
48
+ iconOutlinePath: { type: 'string' }
49
+ })
50
+ };
51
+
52
+ /** @type {Record<string, Object>} */
53
+ const OPENAPI_CHANNEL_INSTALL_RESULT_SCHEMAS = {
54
+ ChannelProvisioning: frozenObject(
55
+ {
56
+ mode: { type: 'string', enum: ['automatic', 'guided', 'cli'] }
57
+ },
58
+ ['mode']
59
+ ),
60
+ ChannelRuntimeTarget: frozenObject(
61
+ {
62
+ defaultSystemKey: { type: 'string' },
63
+ configurable: { type: 'boolean' },
64
+ systemKey: { type: 'string' }
65
+ },
66
+ ['defaultSystemKey']
67
+ ),
68
+ ChannelInstallationSummary: frozenObject(
69
+ {
70
+ count: { type: 'integer', minimum: 0 },
71
+ statusRollup: { type: 'string' }
72
+ },
73
+ ['count']
74
+ ),
75
+ ChannelInstallationRow: frozenObject(
76
+ {
77
+ key: { type: 'string' },
78
+ displayName: { type: 'string' },
79
+ version: { type: ['string', 'null'] },
80
+ lifecycle: { type: ['string', 'null'] },
81
+ availability: { type: ['string', 'null'] },
82
+ authenticationStatus: { type: ['string', 'null'] },
83
+ connectedSystemKey: { type: 'string' },
84
+ runtimeTarget: { type: 'object', additionalProperties: { type: 'string' } }
85
+ },
86
+ ['key', 'connectedSystemKey']
87
+ ),
88
+ ChannelDefinitionChannel: frozenObject({
89
+ definitionKey: { type: 'string' },
90
+ provisioning: schemaRef('ChannelProvisioning'),
91
+ runtimeTarget: schemaRef('ChannelRuntimeTarget'),
92
+ experimental: { type: 'boolean' },
93
+ maxInstances: { type: 'integer', minimum: 1 },
94
+ profiles: { type: 'array', items: schemaRef('ChannelTargetProfile') }
95
+ }),
96
+ ChannelDefinitionDetailData: frozenObject(
97
+ {
98
+ key: { type: 'string' },
99
+ displayName: { type: 'string' },
100
+ description: { type: 'string' },
101
+ type: { type: 'string' },
102
+ systemKind: { type: 'string' },
103
+ configuration: { type: 'array', items: { type: 'object' } },
104
+ channel: schemaRef('ChannelDefinitionChannel'),
105
+ cliInstructions: { type: 'string' },
106
+ iconHref: { type: 'string' },
107
+ installations: { type: 'array', items: schemaRef('ChannelInstallationRow') },
108
+ maxInstances: { type: 'integer', minimum: 1 },
109
+ installationCount: { type: 'integer', minimum: 0 },
110
+ canInstall: { type: 'boolean' },
111
+ blockedReason: { type: 'string' }
112
+ },
113
+ ['key', 'displayName', 'channel', 'installations']
114
+ ),
115
+ ChannelInstallationDetailData: frozenObject(
116
+ {
117
+ definition: {
118
+ type: 'object',
119
+ properties: {
120
+ key: { type: 'string' },
121
+ displayName: { type: 'string' },
122
+ provisioning: schemaRef('ChannelProvisioning')
123
+ },
124
+ additionalProperties: false
125
+ },
126
+ installation: schemaRef('ChannelInstallationRow')
127
+ },
128
+ ['definition', 'installation']
129
+ ),
130
+ ChannelTargetProfile: frozenObject(
131
+ {
132
+ key: { type: 'string' },
133
+ displayLabel: { type: 'string' }
134
+ },
135
+ ['key', 'displayLabel']
136
+ ),
137
+ ChannelTargetRow: frozenObject(
138
+ {
139
+ key: { type: 'string' },
140
+ displayLabel: { type: 'string' },
141
+ description: { type: 'string' },
142
+ experimental: { type: 'boolean' },
143
+ provisioning: schemaRef('ChannelProvisioning'),
144
+ runtimeTarget: schemaRef('ChannelRuntimeTarget'),
145
+ installationSummary: schemaRef('ChannelInstallationSummary'),
146
+ installations: { type: 'array', items: schemaRef('ChannelInstallationRow') },
147
+ profiles: { type: 'array', items: schemaRef('ChannelTargetProfile') },
148
+ configuration: { type: 'array', items: { type: 'object' } },
149
+ cliInstructions: { type: 'string' },
150
+ iconHref: { type: 'string' },
151
+ maxInstances: { type: 'integer', minimum: 1 },
152
+ installationCount: { type: 'integer', minimum: 0 },
153
+ canInstall: { type: 'boolean' },
154
+ blockedReason: { type: 'string' }
155
+ },
156
+ ['key', 'displayLabel', 'description', 'experimental']
157
+ ),
158
+ ListChannelTargetsData: frozenObject(
159
+ {
160
+ channels: { type: 'array', items: schemaRef('ChannelTargetRow') }
161
+ },
162
+ ['channels']
163
+ ),
164
+ ChannelUserAction: frozenObject(
165
+ {
166
+ id: { type: 'string' },
167
+ kind: { type: 'string' },
168
+ label: { type: 'string' },
169
+ required: { type: 'boolean' },
170
+ resume: { type: 'string' },
171
+ href: { type: 'string' },
172
+ field: { type: 'string' },
173
+ artifactId: { type: 'string' },
174
+ command: { type: 'string' },
175
+ value: { type: 'string' },
176
+ text: { type: 'string' }
177
+ },
178
+ ['id', 'kind', 'label']
179
+ ),
180
+ ChannelInstallVerdict: frozenObject(
181
+ {
182
+ ok: { type: 'boolean' },
183
+ label: { type: 'string' }
184
+ },
185
+ ['ok']
186
+ ),
187
+ ChannelInstallVerdicts: frozenObject({
188
+ runtime: schemaRef('ChannelInstallVerdict'),
189
+ oauth: schemaRef('ChannelInstallVerdict'),
190
+ vendorSession: schemaRef('ChannelInstallVerdict')
191
+ }),
192
+ ChannelInstallHelpData: frozenObject(
193
+ {
194
+ helpMarkdown: { type: 'string' },
195
+ helpMarkdownContentType: { type: 'string', enum: ['text/markdown'] },
196
+ refreshHintSeconds: { type: 'integer', minimum: 1 },
197
+ phase: { type: 'string' },
198
+ userActions: { type: 'array', items: schemaRef('ChannelUserAction') },
199
+ verdicts: schemaRef('ChannelInstallVerdicts'),
200
+ definitionKey: { type: 'string' },
201
+ installationKey: { type: 'string' },
202
+ systemKey: { type: 'string' }
203
+ },
204
+ ['helpMarkdown', 'helpMarkdownContentType', 'phase']
205
+ ),
206
+ AuthPermissionsData: frozenObject(
207
+ {
208
+ permissions: { type: 'array', items: { type: 'string' } }
209
+ },
210
+ ['permissions']
211
+ ),
212
+ ChannelArtifactRow: frozenObject(
213
+ {
214
+ id: { type: 'string' },
215
+ kind: { type: 'string' },
216
+ fileName: { type: 'string' },
217
+ contentType: { type: 'string' },
218
+ href: { type: 'string' }
219
+ },
220
+ ['id', 'href']
221
+ ),
222
+ ListChannelArtifactsData: frozenObject(
223
+ {
224
+ artifacts: { type: 'array', items: schemaRef('ChannelArtifactRow') }
225
+ },
226
+ ['artifacts']
227
+ ),
228
+ ChannelArtifactBytesData: frozenObject(
229
+ {
230
+ fileName: { type: 'string' },
231
+ contentType: { type: 'string' },
232
+ byteLength: { type: 'integer', minimum: 0 }
233
+ },
234
+ ['fileName', 'contentType', 'byteLength']
235
+ ),
236
+ ChannelPackageLinks: frozenObject({
237
+ readme: { type: 'string' },
238
+ zip: { type: ['string', 'null'] }
239
+ }),
240
+ ChannelPackageData: frozenObject(
241
+ {
242
+ channelTarget: { type: 'string' },
243
+ installReady: { type: 'boolean' },
244
+ blocker: { type: ['string', 'null'] },
245
+ artifactHash: { type: 'string' },
246
+ links: schemaRef('ChannelPackageLinks')
247
+ },
248
+ ['channelTarget', 'installReady']
249
+ ),
250
+ ChannelPackageSummaryData: frozenObject(
251
+ {
252
+ channelTarget: { type: 'string' },
253
+ installReady: { type: 'boolean' },
254
+ blocker: { type: ['string', 'null'] },
255
+ links: schemaRef('ChannelPackageLinks')
256
+ },
257
+ ['channelTarget', 'installReady']
258
+ ),
259
+ ChannelPackageZipData: frozenObject(
260
+ {
261
+ fileName: { type: 'string' },
262
+ contentType: { type: 'string' },
263
+ byteLength: { type: 'integer', minimum: 0 },
264
+ zipBase64: { type: 'string' }
265
+ },
266
+ ['fileName', 'contentType', 'byteLength', 'zipBase64']
267
+ ),
268
+ ChannelBrandingFields: frozenObject({
269
+ displayName: { type: 'string' },
270
+ description: { type: 'string' },
271
+ iconColorPath: { type: 'string' },
272
+ iconOutlinePath: { type: 'string' }
273
+ }),
274
+ ChannelBrandingData: frozenObject(
275
+ {
276
+ systemKey: { type: 'string' },
277
+ branding: schemaRef('ChannelBrandingFields')
278
+ },
279
+ ['systemKey', 'branding']
280
+ )
281
+ };
282
+
283
+ module.exports = {
284
+ OPENAPI_CHANNEL_INSTALL_REQUEST_SCHEMAS,
285
+ OPENAPI_CHANNEL_INSTALL_RESULT_SCHEMAS
286
+ };
@@ -22,6 +22,10 @@ const {
22
22
  OPENAPI_EVIDENCE_RESULT_SCHEMAS
23
23
  } = require('./openapi-evidence-schemas');
24
24
  const { OPENAPI_HELP_RESULT_SCHEMAS } = require('./openapi-help-schemas');
25
+ const {
26
+ OPENAPI_CHANNEL_INSTALL_REQUEST_SCHEMAS,
27
+ OPENAPI_CHANNEL_INSTALL_RESULT_SCHEMAS
28
+ } = require('./openapi-channel-install-schemas');
25
29
 
26
30
  const RESPONSE_ENVELOPES = [
27
31
  ['ListSystemsResponse', 'ListSystemsData'],
@@ -55,7 +59,18 @@ const RESPONSE_ENVELOPES = [
55
59
  ['EvidenceDownloadResponse', 'EvidenceDownloadData'],
56
60
  ['EvidenceUploadResponse', 'EvidenceUploadData'],
57
61
  ['EvidenceActivateResponse', 'EvidenceActivateData'],
58
- ['BuilderHelpResponse', 'BuilderHelpData']
62
+ ['BuilderHelpResponse', 'BuilderHelpData'],
63
+ ['ListChannelTargetsResponse', 'ListChannelTargetsData'],
64
+ ['ChannelDefinitionDetailResponse', 'ChannelDefinitionDetailData'],
65
+ ['ChannelInstallationDetailResponse', 'ChannelInstallationDetailData'],
66
+ ['ChannelInstallHelpResponse', 'ChannelInstallHelpData'],
67
+ ['ListChannelArtifactsResponse', 'ListChannelArtifactsData'],
68
+ ['ChannelArtifactBytesResponse', 'ChannelArtifactBytesData'],
69
+ ['ChannelPackageResponse', 'ChannelPackageData'],
70
+ ['ChannelPackageSummaryResponse', 'ChannelPackageSummaryData'],
71
+ ['ChannelPackageZipResponse', 'ChannelPackageZipData'],
72
+ ['ChannelBrandingResponse', 'ChannelBrandingData'],
73
+ ['AuthPermissionsResponse', 'AuthPermissionsData']
59
74
  ];
60
75
 
61
76
  /**
@@ -70,11 +85,13 @@ function buildOpenApiComponentSchemas() {
70
85
  ...OPENAPI_REQUEST_SCHEMAS,
71
86
  ...OPENAPI_MANIFEST_REQUEST_SCHEMAS,
72
87
  ...OPENAPI_EVIDENCE_REQUEST_SCHEMAS,
88
+ ...OPENAPI_CHANNEL_INSTALL_REQUEST_SCHEMAS,
73
89
  ...OPENAPI_RESULT_SCHEMAS,
74
90
  ...OPENAPI_APPLY_RESULT_SCHEMAS,
75
91
  ...OPENAPI_MANIFEST_RESULT_SCHEMAS,
76
92
  ...OPENAPI_EVIDENCE_RESULT_SCHEMAS,
77
93
  ...OPENAPI_HELP_RESULT_SCHEMAS,
94
+ ...OPENAPI_CHANNEL_INSTALL_RESULT_SCHEMAS,
78
95
  EmptyResultData: { type: 'object', properties: {}, additionalProperties: false },
79
96
  ...envelopes
80
97
  });
@@ -15,6 +15,7 @@ const { MANIFEST_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-
15
15
  const { MCP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-mcp');
16
16
  const { HELP_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-help');
17
17
  const { EVIDENCE_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-evidence');
18
+ const { CHANNEL_INSTALL_SCHEMA_DESCRIPTIONS } = require('./openapi-schema-descriptions-channel');
18
19
 
19
20
  /** @type {Record<string, Object>} */
20
21
  const MERGED_SCHEMA_DESCRIPTIONS = {
@@ -24,7 +25,8 @@ const MERGED_SCHEMA_DESCRIPTIONS = {
24
25
  ...MANIFEST_SCHEMA_DESCRIPTIONS,
25
26
  ...MCP_SCHEMA_DESCRIPTIONS,
26
27
  ...HELP_SCHEMA_DESCRIPTIONS,
27
- ...EVIDENCE_SCHEMA_DESCRIPTIONS
28
+ ...EVIDENCE_SCHEMA_DESCRIPTIONS,
29
+ ...CHANNEL_INSTALL_SCHEMA_DESCRIPTIONS
28
30
  };
29
31
 
30
32
  /**
@@ -198,7 +198,8 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
198
198
  },
199
199
  health: {
200
200
  summary: 'Liveness probe',
201
- description: 'Returns ok when the builder-api process is running. No authentication.',
201
+ description:
202
+ 'Returns ok when the builder-api process is running. Portal availability probe. Empty channel catalog is not a down signal. No authentication.',
202
203
  tags: ['infra']
203
204
  },
204
205
  ready: {
@@ -239,12 +240,13 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
239
240
  buildChannelPackage: {
240
241
  summary: 'Build channel package',
241
242
  description:
242
- 'Build vendor channel package from External AI Discovery plus optional workspace branding. Returns summary, README/ZIP links, and installReady. Mutating.',
243
+ 'Build vendor channel package from External AI Discovery plus optional workspace branding. Returns summary, README/ZIP links, and installReady (package-import readiness, not channel-installed). Mutating.',
243
244
  tags: ['channel']
244
245
  },
245
246
  getChannelPackageSummary: {
246
247
  summary: 'Get channel package summary',
247
- description: 'Return last built channel package summary and README/ZIP links. Read-only.',
248
+ description:
249
+ 'Return last built channel package summary and README/ZIP links. installReady is package-import readiness, not channel-installed. Read-only.',
248
250
  tags: ['channel']
249
251
  },
250
252
  getChannelPackageZip: {
@@ -263,6 +265,75 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
263
265
  description:
264
266
  'Update optional package branding overrides stored in the Builder API workspace. Mutating.',
265
267
  tags: ['channel']
268
+ },
269
+ listChannelTargets: {
270
+ summary: 'List live channel definitions',
271
+ description:
272
+ 'List live Channel Definitions. Each row has key, displayLabel, description, experimental, provisioning, runtimeTarget, installationSummary, installationCount, and canInstall. Optional maxInstances and blockedReason when capped. Catalog is information-only; publishing uses POST install. Read-only.',
273
+ tags: ['infra']
274
+ },
275
+ getChannelDefinitionDetail: {
276
+ summary: 'Get a Channel Definition',
277
+ description:
278
+ 'Return a safe Channel Definition (identity, configuration, provisioning, runtimeTarget, profiles, optional maxInstances) plus installations projected from Dataplane Connected Systems. Includes canInstall. Unknown definition keys return 404. Known definitions with no instances return installations []. Read-only.',
279
+ tags: ['infra']
280
+ },
281
+ getChannelInstallation: {
282
+ summary: 'Get a Channel installation',
283
+ description:
284
+ 'Return one Channel installation projected from a Dataplane Connected System. 404 only when that instance does not exist for the definition. Read-only.',
285
+ tags: ['infra']
286
+ },
287
+ runChannelInstall: {
288
+ summary: 'Install a channel',
289
+ description:
290
+ 'Scaffold, upload, and configure a channel from a Channel Definition. Path systemKey is the definition key. Body name is required; optional systemKey is the Connected System instance key; configuration is a generic propertyKey map. Returns help markdown plus phase, safe userActions, definitionKey, installationKey, and systemKey (the instance). Mutating.',
291
+ tags: ['infra']
292
+ },
293
+ getChannelInstall: {
294
+ summary: 'Get channel install help',
295
+ description:
296
+ 'Return install help markdown plus phase and safe userActions for this path systemKey. Help is generated from the current envelope on each GET. The definition key returns the last install session (continue). An instance key returns that installation’s help, from its session or generated from the instance package. verbose=true returns the full machine envelope. Read-only.',
297
+ tags: ['infra']
298
+ },
299
+ getChannelInstallHelp: {
300
+ summary: 'Download channel install help.md',
301
+ description: 'Return the current install help document as text/markdown. Human-only; no userActions. Read-only.',
302
+ tags: ['infra']
303
+ },
304
+ continueChannelInstall: {
305
+ summary: 'Continue channel install',
306
+ description:
307
+ 'Resume install after the human follows the help document. Path systemKey may be the catalog definition key or the Connected System instance key. Empty body is valid and continues Microsoft device-code login without issuing a new code. Optional token is used once and not stored. retryLogin=true restarts vendor login and issues a new handshake. Returns the same default HTTP as POST install (help markdown, phase, safe userActions). Mutating.',
308
+ tags: ['infra']
309
+ },
310
+ listChannelArtifacts: {
311
+ summary: 'List channel install artifacts',
312
+ description: 'List downloadable files linked from the install help document. Read-only.',
313
+ tags: ['infra']
314
+ },
315
+ getChannelArtifact: {
316
+ summary: 'Download a channel install artifact',
317
+ description: 'Return artifact bytes (ZIP as application/zip). Read-only.',
318
+ tags: ['infra']
319
+ },
320
+ getChannelCallback: {
321
+ summary: 'Resume channel install from vendor redirect',
322
+ description:
323
+ 'Vendor callback (GET). Stores access through existing credentials. Never echoes tokens. Mutating.',
324
+ tags: ['infra']
325
+ },
326
+ postChannelCallback: {
327
+ summary: 'Resume channel install from vendor POST',
328
+ description:
329
+ 'Vendor callback (POST). Stores access through existing credentials. Never echoes tokens. Mutating.',
330
+ tags: ['infra']
331
+ },
332
+ getAuthPermissions: {
333
+ summary: 'Read current-user permissions',
334
+ description:
335
+ 'Thin forward of the controller current-user permissions list. Used to preflight Integration Client installs. Read-only.',
336
+ tags: ['infra']
266
337
  }
267
338
  });
268
339