@redocly/revel 0.138.0-next.7 → 0.138.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/CHANGELOG.md +288 -0
  2. package/dist/api-schemas/mcp-fetch-count.d.ts +24 -0
  3. package/dist/api-schemas/mcp-fetch-count.js +1 -0
  4. package/dist/bin.js +0 -0
  5. package/dist/cli/build/analytics/collect-analytics.js +1 -1
  6. package/dist/cli/build/analytics/collectors/get-processed-config-stats-usage.js +1 -1
  7. package/dist/cli/build/index.js +1 -1
  8. package/dist/cli/develop.js +1 -1
  9. package/dist/cli/eject/ejectTheme.js +1 -1
  10. package/dist/cli/translations/collect-config-translations.js +1 -1
  11. package/dist/client/App.js +1 -1
  12. package/dist/client/app/ReviewComments/ReviewComments.js +2 -2
  13. package/dist/client/app/l10n/hooks/useTranslationKeys.js +1 -1
  14. package/dist/client/app/markdoc/custom-components/openapi/openapi-example.js +1 -1
  15. package/dist/client/app/markdoc/custom-components/openapi/openapi-response-sample.js +1 -1
  16. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
  17. package/dist/client/app/markdoc/hooks/use-store.d.ts +2 -3
  18. package/dist/client/app/pages/Invite/Invite.js +1 -1
  19. package/dist/client/app/search/useSearch.js +1 -1
  20. package/dist/client/app/utils/loadAndNavigate.js +1 -1
  21. package/dist/client/polyfills.js +1 -1
  22. package/dist/client/runtime/loader.js +1 -1
  23. package/dist/client/utils/catalog/parse-filter-query.js +1 -1
  24. package/dist/compiled/svgo/svgo-node.js +39 -39
  25. package/dist/constants/api.d.ts +1 -0
  26. package/dist/constants/api.js +1 -1
  27. package/dist/constants/common.d.ts +6 -0
  28. package/dist/constants/common.js +1 -1
  29. package/dist/constants/l10n/langs/ar.js +1 -1
  30. package/dist/constants/l10n/langs/de.js +1 -1
  31. package/dist/constants/l10n/langs/en.js +1 -1
  32. package/dist/constants/l10n/langs/es.js +1 -1
  33. package/dist/constants/l10n/langs/fr.js +1 -1
  34. package/dist/constants/l10n/langs/hi.js +1 -1
  35. package/dist/constants/l10n/langs/it.js +1 -1
  36. package/dist/constants/l10n/langs/ja.js +1 -1
  37. package/dist/constants/l10n/langs/ko.js +1 -1
  38. package/dist/constants/l10n/langs/pl.js +1 -1
  39. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  40. package/dist/constants/l10n/langs/pt.js +1 -1
  41. package/dist/constants/l10n/langs/ru.js +1 -1
  42. package/dist/constants/l10n/langs/uk.js +1 -1
  43. package/dist/constants/l10n/langs/zh.js +1 -1
  44. package/dist/markdoc/helpers/get-inner-text.js +2 -2
  45. package/dist/markdoc/helpers/guards/is-prompt-node.d.ts +13 -0
  46. package/dist/markdoc/helpers/guards/is-prompt-node.js +1 -0
  47. package/dist/server/config/env-config.d.ts +0 -4
  48. package/dist/server/config/env-schema.d.ts +0 -10
  49. package/dist/server/config/env-schemas/feature-flags.d.ts +0 -8
  50. package/dist/server/config/env-schemas/feature-flags.js +1 -1
  51. package/dist/server/constants/entitlements.js +1 -1
  52. package/dist/server/entitlements/entitlements-provider.js +1 -1
  53. package/dist/server/esbuild/esbuild.js +3 -3
  54. package/dist/server/esbuild/plugins/on-rebuild.js +1 -1
  55. package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
  56. package/dist/server/esbuild/plugins/yaml-loader.js +1 -1
  57. package/dist/server/fs/content-fs.js +1 -1
  58. package/dist/server/fs/utils/is-l10n-root-file.d.ts +3 -0
  59. package/dist/server/fs/utils/is-l10n-root-file.js +1 -0
  60. package/dist/server/plugins/analytics/amplitude/index.js +1 -1
  61. package/dist/server/plugins/analytics/heap/browser-hooks.js +1 -1
  62. package/dist/server/plugins/api-docs/index.js +1 -1
  63. package/dist/server/plugins/api-docs/loader.js +3 -3
  64. package/dist/server/plugins/api-docs/spec-download.api.js +1 -1
  65. package/dist/server/plugins/api-docs/utils/apply-nav-item-to-root.js +1 -1
  66. package/dist/server/plugins/api-docs/utils/decorators.d.ts +11 -0
  67. package/dist/server/plugins/api-docs/utils/decorators.js +1 -1
  68. package/dist/server/plugins/arazzo-docs/arazzo-doc-loader.js +2 -2
  69. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  70. package/dist/server/plugins/catalog-entities/utils/extract-parts-from-channels-message-ref.js +1 -1
  71. package/dist/server/plugins/config-parser/format-custom-tags.js +1 -1
  72. package/dist/server/plugins/config-parser/loaders/content-slugs-loader.js +1 -1
  73. package/dist/server/plugins/config-parser/loaders/versions-config-loader.js +1 -1
  74. package/dist/server/plugins/config-parser/resolve-mutual-exclusion.js +1 -1
  75. package/dist/server/plugins/config-parser/safe-parse.js +1 -1
  76. package/dist/server/plugins/default-theme/resolve-logo.js +1 -1
  77. package/dist/server/plugins/dev-onboarding/api/adapters/apigee/adapter.js +2 -2
  78. package/dist/server/plugins/dev-onboarding/api/adapters/gravitee/client.js +2 -2
  79. package/dist/server/plugins/dev-onboarding/api/combine.js +1 -1
  80. package/dist/server/plugins/dev-onboarding/template/components/ApiKeyOverview.js +3 -3
  81. package/dist/server/plugins/dev-onboarding/template/components/AppOverview.js +1 -1
  82. package/dist/server/plugins/dev-onboarding/template/components/useSortableData.js +1 -1
  83. package/dist/server/plugins/markdown/attribute-resolvers/code-walkthrough/file-chunk-parser.d.ts +1 -1
  84. package/dist/server/plugins/markdown/attribute-resolvers/index.js +1 -1
  85. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  86. package/dist/server/plugins/markdown/attribute-resolvers/resolve-svg-content.js +1 -1
  87. package/dist/server/plugins/markdown/attribute-resolvers/resolve-tag-raw-content.d.ts +4 -0
  88. package/dist/server/plugins/markdown/attribute-resolvers/resolve-tag-raw-content.js +2 -0
  89. package/dist/server/plugins/markdown/compiler.js +1 -1
  90. package/dist/server/plugins/markdown/create-source-lines-reader.d.ts +7 -0
  91. package/dist/server/plugins/markdown/create-source-lines-reader.js +1 -0
  92. package/dist/server/plugins/markdown/html/normalize-html-headings.d.ts +9 -0
  93. package/dist/server/plugins/markdown/html/normalize-html-headings.js +1 -0
  94. package/dist/server/plugins/markdown/markdoc/markdoc-options.js +1 -1
  95. package/dist/server/plugins/markdown/markdoc/plugins/utils.d.ts +1 -1
  96. package/dist/server/plugins/markdown/markdoc/plugins/utils.js +1 -1
  97. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  98. package/dist/server/plugins/markdown/search/get-ai-search-documents.js +2 -2
  99. package/dist/server/plugins/markdown/search/search-resolver.js +1 -1
  100. package/dist/server/plugins/markdown/search/to-markdown.js +13 -13
  101. package/dist/server/plugins/markdown/search/walk-sections.d.ts +3 -1
  102. package/dist/server/plugins/markdown/search/walk-sections.js +3 -3
  103. package/dist/server/plugins/markdown/utils/sanitize-malformed-md-content.js +2 -2
  104. package/dist/server/plugins/mcp/audit/audit-log.d.ts +1 -1
  105. package/dist/server/plugins/mcp/audit/audit-log.js +1 -1
  106. package/dist/server/plugins/mcp/audit/code-credentials.d.ts +9 -0
  107. package/dist/server/plugins/mcp/audit/code-credentials.js +2 -0
  108. package/dist/server/plugins/mcp/codemode/capabilities/fetch/index.js +5 -5
  109. package/dist/server/plugins/mcp/codemode/capabilities/types.d.ts +3 -1
  110. package/dist/server/plugins/mcp/codemode/capabilities/utils.d.ts +2 -1
  111. package/dist/server/plugins/mcp/codemode/capabilities/utils.js +3 -3
  112. package/dist/server/plugins/mcp/codemode/code-audit.d.ts +4 -3
  113. package/dist/server/plugins/mcp/codemode/code-execution-audit.js +1 -1
  114. package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.js +1 -1
  115. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  116. package/dist/server/plugins/mcp/docs-mcp/tools/core/utils.js +1 -1
  117. package/dist/server/plugins/mcp/docs-mcp/tools/core/whoami.js +1 -1
  118. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  119. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.d.ts +12 -3
  120. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.js +1 -1
  121. package/dist/server/plugins/mcp/docs-mcp/utils/resolve-refs.d.ts +2 -2
  122. package/dist/server/plugins/mcp/docs-mcp/utils/resolve-refs.js +1 -1
  123. package/dist/server/plugins/mcp/gateway-mcp/allowed-http-methods.d.ts +11 -0
  124. package/dist/server/plugins/mcp/gateway-mcp/allowed-http-methods.js +1 -0
  125. package/dist/server/plugins/mcp/gateway-mcp/api-call-operations.d.ts +32 -0
  126. package/dist/server/plugins/mcp/gateway-mcp/api-call-operations.js +1 -0
  127. package/dist/server/plugins/mcp/gateway-mcp/callable-apis.d.ts +7 -4
  128. package/dist/server/plugins/mcp/gateway-mcp/callable-apis.js +1 -1
  129. package/dist/server/plugins/mcp/gateway-mcp/caller-api-calls.d.ts +9 -0
  130. package/dist/server/plugins/mcp/gateway-mcp/caller-api-calls.js +1 -0
  131. package/dist/server/plugins/mcp/gateway-mcp/credential-validation.js +1 -1
  132. package/dist/server/plugins/mcp/gateway-mcp/elicitation.d.ts +1 -0
  133. package/dist/server/plugins/mcp/gateway-mcp/elicitation.js +5 -5
  134. package/dist/server/plugins/mcp/gateway-mcp/eligibility.d.ts +8 -4
  135. package/dist/server/plugins/mcp/gateway-mcp/eligibility.js +1 -1
  136. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-audit.d.ts +2 -1
  137. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-audit.js +1 -1
  138. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.d.ts +11 -1
  139. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -1
  140. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.d.ts +11 -0
  141. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.js +1 -1
  142. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.js +1 -1
  143. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count-client.d.ts +4 -0
  144. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count-client.js +1 -0
  145. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count-secret.d.ts +4 -0
  146. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count-secret.js +1 -0
  147. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count.d.ts +11 -0
  148. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-count.js +1 -0
  149. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-counter-repository.d.ts +13 -0
  150. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-counter-repository.js +13 -0
  151. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{limits.d.ts → fetch-limiter/fetch-limits.d.ts} +1 -1
  152. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/fetch-limiter/fetch-limits.js +1 -0
  153. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{apply-edge-rate-limit.d.ts → request-limiter/apply-edge-rate-limit.d.ts} +1 -1
  154. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/request-limiter/apply-edge-rate-limit.js +1 -0
  155. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{edge-limiter.d.ts → request-limiter/edge-limiter.d.ts} +3 -3
  156. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/request-limiter/edge-limiter.js +1 -0
  157. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/request-limiter/rate-limit-telemetry.js +1 -0
  158. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/request-limiter/request-limits.d.ts +6 -0
  159. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/request-limiter/request-limits.js +1 -0
  160. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/utils/ip-key.js +1 -0
  161. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{window-counter.d.ts → utils/window-counter.d.ts} +1 -1
  162. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/utils/window-counter.js +1 -0
  163. package/dist/server/plugins/mcp/gateway-mcp/route-pattern.d.ts +18 -0
  164. package/dist/server/plugins/mcp/gateway-mcp/route-pattern.js +1 -0
  165. package/dist/server/plugins/mcp/gateway-mcp/secret-store.d.ts +9 -3
  166. package/dist/server/plugins/mcp/gateway-mcp/secret-store.js +1 -1
  167. package/dist/server/plugins/mcp/gateway-mcp/subject.js +1 -1
  168. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.d.ts +2 -0
  169. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.js +2 -2
  170. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.d.ts +0 -2
  171. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.js +1 -1
  172. package/dist/server/plugins/mcp/handlers/credentials-page/constants.d.ts +7 -0
  173. package/dist/server/plugins/mcp/handlers/credentials-page/constants.js +1 -0
  174. package/dist/server/plugins/mcp/handlers/credentials-page/form-contract.d.ts +5 -0
  175. package/dist/server/plugins/mcp/handlers/credentials-page/form-contract.js +1 -0
  176. package/dist/server/plugins/mcp/handlers/credentials-page/form-page.d.ts +14 -0
  177. package/dist/server/plugins/mcp/handlers/credentials-page/form-page.js +62 -0
  178. package/dist/server/plugins/mcp/handlers/credentials-page/layout.d.ts +17 -0
  179. package/dist/server/plugins/mcp/handlers/credentials-page/layout.js +11 -0
  180. package/dist/server/plugins/mcp/handlers/credentials-page/outcome-pages.d.ts +10 -0
  181. package/dist/server/plugins/mcp/handlers/credentials-page/outcome-pages.js +11 -0
  182. package/dist/server/plugins/mcp/handlers/credentials-page/site-branding.d.ts +10 -0
  183. package/dist/server/plugins/mcp/handlers/credentials-page/site-branding.js +1 -0
  184. package/dist/server/plugins/mcp/handlers/credentials-page/styles.d.ts +4 -0
  185. package/dist/server/plugins/mcp/handlers/credentials-page/styles.js +186 -0
  186. package/dist/server/plugins/mcp/handlers/credentials-page/types.d.ts +32 -0
  187. package/dist/server/plugins/mcp/handlers/credentials-page/types.js +0 -0
  188. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  189. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  190. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.d.ts +0 -1
  191. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.js +1 -1
  192. package/dist/server/plugins/mcp/index.js +1 -1
  193. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  194. package/dist/server/plugins/mcp/servers/mcp-server.js +2 -2
  195. package/dist/server/plugins/mcp/types.d.ts +16 -1
  196. package/dist/server/plugins/mcp/utils/mode.d.ts +4 -1
  197. package/dist/server/plugins/mcp/utils/mode.js +1 -1
  198. package/dist/server/plugins/mcp/utils/xmcp-utils.d.ts +3 -5
  199. package/dist/server/plugins/mcp/utils/xmcp-utils.js +1 -1
  200. package/dist/server/plugins/nav-utils.js +1 -1
  201. package/dist/server/plugins/scorecard-classic/loaders/scorecard.js +1 -1
  202. package/dist/server/plugins/scorecard-classic/template/components.js +1 -1
  203. package/dist/server/plugins/scorecard-classic/template/useData.js +1 -1
  204. package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
  205. package/dist/server/plugins/search/engines/flexsearch/index.js +2 -2
  206. package/dist/server/plugins/sidebars/index.js +2 -2
  207. package/dist/server/plugins/sidebars/tabs.js +1 -1
  208. package/dist/server/plugins/sidebars/utils.js +1 -1
  209. package/dist/server/providers/database/client.d.ts +5 -0
  210. package/dist/server/providers/database/client.js +1 -1
  211. package/dist/server/providers/database/copy-migrations.js +1 -1
  212. package/dist/server/providers/database/database-connections-manager.js +1 -1
  213. package/dist/server/providers/database/has-project-database.d.ts +3 -0
  214. package/dist/server/providers/database/has-project-database.js +1 -0
  215. package/dist/server/store.d.ts +2 -0
  216. package/dist/server/store.js +1 -1
  217. package/dist/server/tools/notifiers/formatter.js +1 -1
  218. package/dist/server/tools/notifiers/helpers/privacy/mask-email.js +1 -1
  219. package/dist/server/tools/notifiers/logger.js +1 -1
  220. package/dist/server/types/plugins/markdown.d.ts +2 -0
  221. package/dist/server/types/web-server.d.ts +1 -0
  222. package/dist/server/utils/codeframes/codeframes.js +2 -2
  223. package/dist/server/utils/entitlements/read-entitlement-number.d.ts +3 -0
  224. package/dist/server/utils/entitlements/read-entitlement-number.js +1 -0
  225. package/dist/server/utils/fs.js +1 -1
  226. package/dist/server/utils/is-api-download-link.d.ts +1 -0
  227. package/dist/server/utils/is-api-download-link.js +1 -1
  228. package/dist/server/utils/rbac.js +1 -1
  229. package/dist/server/utils/redact-url.d.ts +3 -2
  230. package/dist/server/utils/redact-url.js +1 -1
  231. package/dist/server/utils/sandbox-context.d.ts +7 -4
  232. package/dist/server/utils/sandbox-context.js +1 -1
  233. package/dist/server/web-server/auth.d.ts +0 -1
  234. package/dist/server/web-server/auth.js +4 -4
  235. package/dist/server/web-server/dev-server.js +1 -1
  236. package/dist/server/web-server/http.d.ts +2 -1
  237. package/dist/server/web-server/http.js +2 -2
  238. package/dist/server/web-server/jwt/token-types.d.ts +1 -0
  239. package/dist/server/web-server/jwt/token-types.js +1 -1
  240. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  241. package/dist/server/web-server/middleware/dynamic-middleware/hono-compose.js +1 -1
  242. package/dist/server/web-server/middleware/responseHeadersMiddleware.js +1 -1
  243. package/dist/server/web-server/routes/auth.d.ts +1 -1
  244. package/dist/server/web-server/routes/auth.js +1 -1
  245. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +1756 -1756
  246. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +295 -295
  247. package/dist/server/web-server/routes/cors-proxy.js +2 -2
  248. package/dist/server/web-server/routes/index.js +1 -1
  249. package/dist/server/web-server/routes/mcp-routes/mcp-consent-page.d.ts +24 -0
  250. package/dist/server/web-server/routes/mcp-routes/mcp-consent-page.js +35 -0
  251. package/dist/server/web-server/routes/mcp-routes/mcp-fetch-count.d.ts +8 -0
  252. package/dist/server/web-server/routes/mcp-routes/mcp-fetch-count.js +1 -0
  253. package/dist/server/web-server/routes/mcp-routes/mcp-oauth-store.d.ts +15 -0
  254. package/dist/server/web-server/routes/mcp-routes/mcp-oauth-store.js +1 -0
  255. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.d.ts +3 -1
  256. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.js +1 -1
  257. package/dist/server/web-server/routes/mcp-routes/mcp-routes.js +1 -1
  258. package/dist/server/web-server/routes/mcp-routes/mcp-server-card.js +1 -1
  259. package/dist/server/web-server/routes/resolve-route.js +1 -1
  260. package/dist/server/workers/worker-pool.js +1 -1
  261. package/dist/types/entitlements.d.ts +2 -0
  262. package/dist/utils/time/debounce.js +1 -1
  263. package/package.json +10 -11
  264. package/dist/client/app/utils/withLoadProgress.d.ts +0 -2
  265. package/dist/client/app/utils/withLoadProgress.js +0 -1
  266. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/apply-edge-rate-limit.js +0 -1
  267. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/edge-limiter.js +0 -1
  268. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.js +0 -1
  269. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/limits.js +0 -1
  270. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/rate-limit-telemetry.js +0 -1
  271. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/window-counter.js +0 -1
  272. package/dist/server/plugins/mcp/handlers/mcp-credentials-page.d.ts +0 -12
  273. package/dist/server/plugins/mcp/handlers/mcp-credentials-page.js +0 -225
  274. /package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{rate-limit-telemetry.d.ts → request-limiter/rate-limit-telemetry.d.ts} +0 -0
  275. /package/dist/server/plugins/mcp/gateway-mcp/rate-limit/{ip-key.d.ts → utils/ip-key.d.ts} +0 -0
@@ -1,225 +0,0 @@
1
- import{withPathPrefix as g}from"@redocly/theme/core/utils";import{MCP_CREDENTIALS_ROUTE as C}from"../../../constants/mcp.js";import{ELICITATION_TTL_MS as f}from"../gateway-mcp/secret-store.js";const b=6,v=`<svg class="logo" width="193" height="56" viewBox="0 0 193 56" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Redocly">
2
- <g clip-path="url(#redocly-logo-clip)">
3
- <path d="M84.3634 40.7533H80.0357L73.199 30.9849H69.8119V40.8155H66.1738V14.5592H76.3353C78.9067 14.5592 80.9139 15.368 82.2308 16.9857C83.5483 18.5412 84.1756 20.5322 84.1756 22.8343C84.1756 25.0119 83.6107 26.7541 82.4193 28.3095C81.2902 29.865 79.5339 30.7361 77.2134 30.8605L84.3634 40.7533ZM69.8743 17.8568V27.6251H76.2098C79.22 27.6251 80.5999 25.4475 80.5999 22.7098C80.5999 20.0344 79.22 17.7945 76.3353 17.7945H69.8743V17.8568Z" fill="currentColor"/>
4
- <path d="M103.117 33.225H88.5654C89.0042 36.1492 91.2623 38.078 94.3355 38.078C96.5312 38.078 98.5384 37.0203 99.4789 35.3403C99.8553 35.4648 100.357 35.7137 101.047 35.9626L102.553 36.4603C101.047 39.5091 97.9111 41.1889 94.2731 41.1889C91.701 41.1889 89.506 40.3179 87.6873 38.638C85.931 36.8959 85.1152 34.7182 85.1152 31.9184C85.1152 29.1185 85.9934 26.9409 87.6873 25.2609C89.4436 23.5188 91.6386 22.71 94.2731 22.71C96.8445 22.71 98.9771 23.581 100.608 25.2609C102.302 26.9409 103.18 29.1807 103.18 31.9184C103.117 32.5405 103.117 32.9139 103.117 33.225ZM99.6674 30.4873C99.228 27.563 97.0954 25.7587 94.21 25.7587C91.1999 25.7587 88.9418 27.6252 88.5654 30.4873H99.6674Z" fill="currentColor"/>
5
- <path d="M120.994 40.7532V38.0155C119.802 40.0066 117.356 41.1265 114.659 41.1265C112.087 41.1265 110.018 40.2555 108.198 38.5755C106.442 36.8334 105.627 34.6557 105.627 31.9181C105.627 29.1183 106.505 26.9406 108.198 25.2607C109.892 23.5808 112.087 22.7098 114.596 22.7098C117.293 22.7098 119.74 23.7675 120.931 25.7585V13.377H124.444V40.8154L120.994 40.7532ZM110.833 27.6873C109.704 28.745 109.202 30.176 109.202 31.9181C109.202 33.6603 109.704 35.0913 110.833 36.2112C111.962 37.3312 113.342 37.8911 114.973 37.8911C116.604 37.8911 117.983 37.3934 119.175 36.3357C120.367 35.2157 120.931 33.7847 120.931 31.9803C120.931 30.1138 120.304 28.745 119.113 27.6873C117.92 26.6295 116.54 26.1318 114.973 26.1318C113.342 26.0696 111.962 26.5673 110.833 27.6873Z" fill="currentColor"/>
6
- <path d="M129.461 25.1985C131.279 23.4564 133.475 22.6476 136.172 22.6476C138.806 22.6476 141.064 23.5186 142.883 25.1985C144.702 26.8784 145.581 29.1183 145.581 31.8559C145.581 34.5935 144.702 36.8334 142.821 38.5756C141.002 40.3177 138.806 41.1266 136.172 41.1266C133.6 41.1266 131.342 40.2555 129.523 38.5756C127.704 36.8957 126.826 34.6558 126.826 31.8559C126.826 29.0561 127.704 26.8784 129.461 25.1985ZM140.375 27.6251C139.246 26.5673 137.803 26.0696 136.172 26.0696C134.541 26.0696 133.099 26.5673 131.907 27.6251C130.778 28.6828 130.213 30.1138 130.213 31.8559C130.213 33.6603 130.778 35.0913 131.907 36.2112C133.099 37.3312 134.479 37.8289 136.172 37.8289C137.803 37.8289 139.246 37.3312 140.375 36.2112C141.566 35.0913 142.13 33.6603 142.13 31.8559C142.13 30.1138 141.503 28.6828 140.375 27.6251Z" fill="currentColor"/>
7
- <path d="M163.896 25.4474L161.262 27.6873C160.133 26.5674 158.69 26.0074 156.997 26.0074C155.366 26.0074 153.923 26.5051 152.732 27.6251C151.54 28.6828 150.976 30.1138 150.976 31.856C150.976 33.5981 151.54 35.0913 152.732 36.149C153.923 37.269 155.303 37.829 156.997 37.829C158.753 37.829 160.133 37.269 161.262 36.0869L163.959 38.3267C162.14 40.2555 159.882 41.251 156.997 41.251C154.362 41.251 152.105 40.3799 150.285 38.7C148.404 36.9579 147.525 34.718 147.525 31.9804C147.525 29.2428 148.404 27.0651 150.285 25.323C152.167 23.5808 154.362 22.772 156.997 22.772C159.819 22.6476 162.14 23.5808 163.896 25.4474Z" fill="currentColor"/>
8
- <path d="M171.987 13.377H168.475V40.8154H171.987V13.377Z" fill="currentColor"/>
9
- <path d="M181.898 49.4639H178.26L182.024 40.3177L174.873 23.0209H178.574L183.968 35.9624L189.3 23.0209H193L181.898 49.4639Z" fill="currentColor"/>
10
- <path d="M47.2308 43.491C45.8508 42.5576 44.3455 41.6866 42.8401 41.0644C45.4745 39.9445 47.9207 38.389 49.8651 36.398C53.754 32.5404 56.2002 27.1896 56.2002 21.341C56.2002 15.4303 53.8167 10.1417 49.8651 6.28409C45.9763 2.36431 40.6448 0 34.6861 0H1.63081C1.19174 0 0.752681 0.186656 0.501787 0.497751C0.18817 0.746628 0 1.18215 0 1.61769C0 2.05322 0.18817 2.48875 0.501787 2.73763C0.752681 3.04872 1.19174 3.23538 1.63081 3.23538C6.64866 3.23538 11.2275 5.2886 14.5518 8.52397C17.8134 11.8216 19.8833 16.3635 19.8833 21.341C19.8833 26.3185 17.8134 30.8605 14.5518 34.1581C11.2275 37.3935 6.64866 39.4467 1.63081 39.4467C1.44264 39.4467 1.37992 39.5089 1.19174 39.5089C0.501787 39.6956 0 40.2556 0 41.0022V41.1888C0 42.0599 0.689956 42.6821 1.50536 42.6821H2.57166C6.20962 42.8687 9.59667 44.0509 12.3565 46.0419C15.3672 48.2195 17.688 51.2061 18.9425 54.7526C19.1307 55.3747 19.8206 55.8102 20.4478 55.8102H53.5658C54.0676 55.8102 54.5694 55.5614 54.8203 55.1258C55.1339 54.6903 55.1966 54.1926 55.0085 53.6948C53.5031 49.5884 50.806 46.0419 47.2308 43.491ZM16.8098 36.398C20.6987 32.5404 23.1449 27.1896 23.1449 21.341C23.1449 15.4303 20.7615 10.1417 16.8098 6.28409C15.6181 5.10194 14.3009 4.04422 12.8583 3.17316H34.6861C39.704 3.17316 44.2828 5.22638 47.6071 8.46173C50.8687 11.7594 52.9385 16.3013 52.9385 21.2788C52.9385 26.2563 50.8687 30.7983 47.6071 34.0959C44.2828 37.3313 39.704 39.3845 34.6861 39.3845C34.5606 39.3845 34.4979 39.3845 34.3725 39.4467H12.7956C14.2382 38.7001 15.6181 37.6424 16.8098 36.398ZM14.1755 43.491C13.7992 43.242 13.3601 42.9932 12.9838 42.6821H35.6896C39.3276 42.8687 42.7146 44.0509 45.4745 46.0419C47.858 47.7218 49.8024 49.9617 51.1196 52.6371H21.4514C19.946 48.9662 17.3744 45.8552 14.1755 43.491Z" fill="currentColor"/>
11
- <path d="M29.668 21.3412C29.668 22.2122 30.3579 22.8966 31.2361 22.8966H47.1679C48.0459 22.8966 48.7359 22.2122 48.7359 21.3412C48.7359 20.4701 48.0459 19.7856 47.1679 19.7856H31.2988C30.3579 19.7856 29.668 20.5323 29.668 21.3412Z" fill="currentColor"/>
12
- <path d="M28.5385 29.2427H44.4703C45.3484 29.2427 46.0383 28.5583 46.0383 27.6873C46.0383 26.8162 45.3484 26.1318 44.4703 26.1318H28.5385C27.6604 26.1318 26.9705 26.8162 26.9705 27.6873C26.9077 28.5583 27.6604 29.2427 28.5385 29.2427Z" fill="currentColor"/>
13
- <path d="M28.5385 16.6127H44.4703C45.3484 16.6127 46.0383 15.9282 46.0383 15.0572C46.0383 14.1861 45.3484 13.5017 44.4703 13.5017H28.5385C27.6604 13.5017 26.9705 14.1861 26.9705 15.0572C26.9077 15.8661 27.6604 16.6127 28.5385 16.6127Z" fill="currentColor"/>
14
- </g>
15
- <defs><clipPath id="redocly-logo-clip"><rect width="193" height="56" fill="white"/></clipPath></defs>
16
- </svg>`;function r(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function c(){return r(g(C))}function s(e){return`<!doctype html>
17
- <html lang="en">
18
- <head>
19
- <meta charset="utf-8">
20
- <meta name="viewport" content="width=device-width, initial-scale=1">
21
- <meta name="robots" content="noindex">
22
- <title>API credentials</title>
23
- <style>
24
- :root{
25
- color-scheme:light dark;
26
- --font:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
27
- --font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
28
- --page-bg:#ededf2;
29
- --card-bg:#fbfbfc;
30
- --border:#dcdde5;
31
- --border-strong:#c4c6d1;
32
- --text:#1a1c21;
33
- --text-muted:#6e6f7a;
34
- --brand:#2467f2;
35
- --action:#1f7cff;
36
- --action-hover:#3072db;
37
- --action-ring:rgba(31,124,255,.25);
38
- --code-bg:#ededf2;
39
- --danger:#c74b55;
40
- --danger-hover:#a9434c;
41
- --error-bg:#fef2f2;
42
- --error-border:#f5a3aa;
43
- --error-text:#8b3c42;
44
- }
45
- @media (prefers-color-scheme:dark){:root{
46
- --page-bg:#12141a;
47
- --card-bg:#22242b;
48
- --border:#2a2b33;
49
- --border-strong:#3b3c45;
50
- --text:#fbfbfc;
51
- --text-muted:#9b9ca8;
52
- --brand:#2467f2;
53
- --action:#1f7cff;
54
- --action-hover:#3072db;
55
- --action-ring:rgba(31,124,255,.35);
56
- --code-bg:#2a2b33;
57
- --danger:#e5535f;
58
- --danger-hover:#ef858d;
59
- --error-bg:#2a1517;
60
- --error-border:#8b3c42;
61
- --error-text:#f5a3aa;
62
- }}
63
- *{box-sizing:border-box}
64
- body{font-family:var(--font);margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--page-bg);color:var(--text);padding:1.5rem;font-size:14px;line-height:1.5}
65
- .card{width:100%;max-width:26rem;background:var(--card-bg);border:1px solid var(--border);border-radius:8px;box-shadow:0 1px 2px rgba(26,28,33,.04),0 8px 24px -12px rgba(26,28,33,.18);padding:2rem}
66
- .logo{color:var(--brand);height:28px;width:auto;display:block;margin:0 0 1.5rem}
67
- h1{font-size:1.25rem;line-height:1.3;font-weight:600;margin:0 0 .5rem;letter-spacing:-.01em}
68
- .section{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border)}
69
- .section h2{font-size:.9375rem;font-weight:600;margin:0 0 .5rem;display:flex;align-items:center;gap:.5rem}
70
- .badge{font-size:.6875rem;font-weight:600;line-height:1;padding:.25rem .5rem;border-radius:999px;border:1px solid var(--border-strong);color:var(--text-muted);background:var(--code-bg)}
71
- .badge.stored{color:var(--action);border-color:var(--action)}
72
- p{margin:.75rem 0 0}
73
- p.hint{color:var(--text-muted);font-size:.8125rem;line-height:1.45}
74
- p.error{margin:1rem 0 0;padding:.75rem;border:1px solid var(--error-border);border-radius:6px;background:var(--error-bg);color:var(--error-text);font-size:.8125rem;line-height:1.45}
75
- label{display:block;margin:1rem 0 .25rem;font-weight:600;font-size:.8125rem}
76
- input[type=password],input[type=text]{width:100%;padding:.625rem .75rem;font-size:.9375rem;font-family:var(--font);border:1px solid var(--border-strong);border-radius:6px;background:var(--card-bg);color:var(--text)}
77
- input::placeholder{color:var(--text-muted)}
78
- input:focus{outline:none;border-color:var(--action);box-shadow:0 0 0 3px var(--action-ring)}
79
- button{margin-top:1.25rem;padding:.625rem 1.25rem;font-size:.9375rem;font-weight:600;font-family:var(--font);color:#fff;background:var(--action);border:1px solid transparent;border-radius:6px;cursor:pointer}
80
- button:hover{background:var(--action-hover)}
81
- button:focus-visible{outline:2px solid var(--action);outline-offset:2px}
82
- button.danger{background:transparent;color:var(--danger);border-color:var(--border-strong)}
83
- button.danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}
84
- button.danger:focus-visible{outline-color:var(--danger)}
85
- code{font-family:var(--font-mono);background:var(--code-bg);padding:.125rem .375rem;border-radius:4px;font-size:.8125em}
86
- label.check{display:flex;align-items:center;gap:.5rem;margin-top:.75rem;font-weight:400;font-size:.8125rem;color:var(--text-muted)}
87
- label.check input{width:auto;margin:0}
88
- footer{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--border);font-size:.75rem;color:var(--text-muted);text-align:center;line-height:1.45}
89
- </style>
90
- </head>
91
- <body><main class="card">${v}${e}</main></body>
92
- </html>`}function l(e){return`<h1>\u{1F512} ${r(e)}</h1>`}function d(){return"<footer>Secured by Redocly &middot; Credentials never enter the AI conversation</footer>"}function u(){return`<p class="hint">This link expires ${Math.round(f/6e4)} minutes after it was issued. If it stops working, request a new one in your AI client.</p>`}function h({name:e,schemeLabel:t,schemes:o}){return o&&o.length>1?e:t?`${e} (${t})`:e}function y(e){return`
93
- <div class="section">
94
- <h2>Remove stored credentials</h2>
95
- <p class="hint">This API already has credentials stored. Enter new credentials to replace them, or remove them to make calls anonymous again.</p>
96
- <form method="post" action="${c()}" autocomplete="off">
97
- <input type="hidden" name="token" value="${r(e)}">
98
- <input type="hidden" name="mode" value="clear">
99
- <button class="danger" type="submit">Remove credentials</button>
100
- </form>
101
- </div>`}function Z(e,t,o){const n=o?`<p class="error">${r(o)}</p>`:"";if(e.schemes&&e.schemes.length>1)return I(e,e.schemes,t,n);const a=e.hasExistingSecret?y(t):"",i=h(e);switch(e.auth.kind){case"bearer":return $(i,t,a,n);case"apiKey":return x(i,t,e.auth.header,a,n);case"cookie":return k(i,t,e.auth.name,a,n);case"oauth2ClientCredentials":return w(i,t,e.auth.scopes,a,n);default:return A(i,t,a,n)}}function $(e,t,o,n){return s(`
102
- ${l(`Credentials for ${e}`)}
103
- ${n}
104
- <p class="hint">Encrypted and visible only to you for 24 hours (anonymous) or 30 days (signed in).<br />Sent to the API as the <code>Authorization header</code>. It never passes through the AI conversation.</p>
105
- <form method="post" action="${c()}" autocomplete="off">
106
- <input type="hidden" name="token" value="${r(t)}">
107
- <input type="hidden" name="mode" value="token">
108
- <label for="secret">API token</label>
109
- <input type="password" id="secret" name="secret" placeholder="your API token" required autofocus>
110
- <p class="hint">Paste your token with or without the <code>Bearer prefix</code>. The prefix is added automatically, if missing.</p>
111
- <button type="submit">Save credentials</button>
112
- </form>
113
- ${o}
114
- ${u()}
115
- ${d()}`)}function x(e,t,o,n,a){return s(`
116
- ${l(`Credentials for ${e}`)}
117
- ${a}
118
- <p class="hint">Encrypted and visible only to you for 24 hours (anonymous) or 30 days (signed in).<br />Sent to the API as the <code>${r(o)}</code> header. It never passes through the AI conversation.</p>
119
- <form method="post" action="${c()}" autocomplete="off">
120
- <input type="hidden" name="token" value="${r(t)}">
121
- <input type="hidden" name="mode" value="token">
122
- <label for="secret">${r(o)} value</label>
123
- <input type="password" id="secret" name="secret" placeholder="value" required autofocus>
124
- <button type="submit">Save credentials</button>
125
- </form>
126
- ${n}
127
- ${u()}
128
- ${d()}`)}function k(e,t,o,n,a){return s(`
129
- ${l(`Credentials for ${e}`)}
130
- ${a}
131
- <p class="hint">Encrypted and visible only to you for 24 hours (anonymous) or 30 days (signed in).<br />Sent to the API as the <code>${r(o)}</code> cookie. It never passes through the AI conversation.</p>
132
- <form method="post" action="${c()}" autocomplete="off">
133
- <input type="hidden" name="token" value="${r(t)}">
134
- <input type="hidden" name="mode" value="token">
135
- <label for="secret">${r(o)} cookie value</label>
136
- <input type="password" id="secret" name="secret" placeholder="value" required autofocus>
137
- <p class="hint">Paste only the value. It's sent as <code>${r(o)}=&lt;value&gt;</code>.</p>
138
- <button type="submit">Save credentials</button>
139
- </form>
140
- ${n}
141
- ${u()}
142
- ${d()}`)}function w(e,t,o,n,a){const i=o.length>0?o.map(r).join(", "):"default scopes";return s(`
143
- ${l(`Credentials for ${e}`)}
144
- ${a}
145
- <p class="hint">Paste your token, or provide your OAuth2 client credentials.</p>
146
- <div class="section">
147
- <h2>I have a token</h2>
148
- <form method="post" action="${c()}" autocomplete="off">
149
- <input type="hidden" name="token" value="${r(t)}">
150
- <input type="hidden" name="mode" value="token">
151
- <label for="secret">API token</label>
152
- <input type="password" id="secret" name="secret" placeholder="your API token" required autofocus>
153
- <p class="hint"><code>Bearer</code> prefix is added automatically, if missing.</p>
154
- <button type="submit">Save token</button>
155
- </form>
156
- </div>
157
- <div class="section">
158
- <h2>Exchange client credentials</h2>
159
- <p class="hint">We request a token from the API on your behalf. Scopes: ${i}.</p>
160
- <form method="post" action="${c()}" autocomplete="off">
161
- <input type="hidden" name="token" value="${r(t)}">
162
- <input type="hidden" name="mode" value="client-credentials">
163
- <label for="client_id">Client ID</label>
164
- <input type="text" id="client_id" name="client_id" required>
165
- <label for="client_secret">Client secret</label>
166
- <input type="password" id="client_secret" name="client_secret" required>
167
- <button type="submit">Exchange &amp; save</button>
168
- </form>
169
- </div>
170
- ${n}
171
- ${u()}
172
- ${d()}`)}function A(e,t,o,n){return s(`
173
- ${l(`Credentials for ${e}`)}
174
- ${n}
175
- <p class="hint">The value is stored and encrypted only for you for 24 hours (anonymous) or 30 days (signed in).<br />It is sent to the API as the <code>Authorization</code> header. It never passes through the AI conversation.</p>
176
- <form method="post" action="${c()}" autocomplete="off">
177
- <input type="hidden" name="token" value="${r(t)}">
178
- <input type="hidden" name="mode" value="token">
179
- <label for="secret">Authorization header value</label>
180
- <input type="password" id="secret" name="secret" placeholder="Bearer &lt;your token&gt;" required autofocus>
181
- <button type="submit">Save credentials</button>
182
- </form>
183
- ${o}
184
- ${u()}
185
- ${d()}`)}function I(e,t,o,n){const a=t.map((i,p)=>P(i,p)).join(`
186
- `);return s(`
187
- ${l(`Credentials for ${e.name}`)}
188
- ${n}
189
- <p class="hint">This API accepts more than one kind of credential. Fill in the one(s) you have and leave the rest blank - each value is stored encrypted for you only (24 hours for anonymous callers, 30 days when signed in) and sent straight to the API. It never passes through the AI conversation.</p>
190
- <form method="post" action="${c()}" autocomplete="off">
191
- <input type="hidden" name="token" value="${r(o)}">
192
- <input type="hidden" name="mode" value="multi">
193
- ${a}
194
- <button type="submit">Save credentials</button>
195
- </form>
196
- ${u()}
197
- ${d()}`)}function P(e,t){const o=M(e.auth),n=e.label?`<p class="hint">${r(e.label)}</p>`:"",a=S(e.operations),i=e.hasExistingSecret?`<label class="check"><input type="checkbox" name="remove__${t}" value="1"> Remove the stored credential</label>`:"",p=e.hasExistingSecret?'<span class="badge stored">Stored</span>':'<span class="badge">Not set</span>';return`
198
- <div class="section">
199
- <h2>${r(e.name)} ${p}</h2>
200
- <p class="hint">Sent to the API as the <code>${r(o.code)}</code> ${o.suffix}.</p>
201
- ${n}
202
- ${a}
203
- ${_(e.auth,t)}
204
- ${i}
205
- </div>`}function _(e,t){const o=`secret__${t}`;if(e.kind==="oauth2ClientCredentials"){const a=e.scopes.length>0?e.scopes.map(r).join(", "):"default scopes";return`<label for="${o}">API token</label>
206
- <input type="password" id="${o}" name="${o}" placeholder="paste a token you already have">
207
- <p class="hint">Or exchange client credentials for one (scopes: ${a}). We add <code>Bearer</code> automatically.</p>
208
- <label for="client_id__${t}">Client ID</label>
209
- <input type="text" id="client_id__${t}" name="client_id__${t}">
210
- <label for="client_secret__${t}">Client secret</label>
211
- <input type="password" id="client_secret__${t}" name="client_secret__${t}">`}const n=H(e);return`<label for="${o}">${r(n)}</label>
212
- <input type="password" id="${o}" name="${o}" placeholder="value">`}function H(e){switch(e.kind){case"apiKey":return`${e.header} value`;case"cookie":return`${e.name} cookie value`;case"bearer":return"API token";default:return"Authorization header value"}}function M(e){switch(e.kind){case"apiKey":return{code:e.header,suffix:"header"};case"cookie":return{code:e.name,suffix:"cookie"};case"bearer":return{code:"Authorization",suffix:"header (bearer token)"};case"oauth2ClientCredentials":return{code:"Authorization",suffix:"header (OAuth2 bearer token)"};default:return{code:"Authorization",suffix:"header"}}}function S(e){if(!e||e.length===0)return"";const t=e.slice(0,b).map(r).join(", "),o=e.length-b,n=o>0?`, and ${o} more`:"";return`<p class="hint">Used by ${t}${n}.</p>`}function E(e){return s(`
213
- ${l("Credentials removed")}
214
- <p>Credentials for ${r(h(e))} are removed. Calls to the API are anonymous again until you add new credentials.</p>
215
- ${d()}`)}function R(e,t){const o=t.saved.length===0?"Credentials removed":t.removed.length===0?"Credentials saved":"Credentials updated",n=[t.saved.length>0?`<p>Saved: ${m(t.saved)}.</p>`:"",t.removed.length>0?`<p>Removed: ${m(t.removed)}.</p>`:"",t.stored.length>0?`<p>${r(e.name)} now has stored credentials for ${m(t.stored)}.</p>`:`<p>${r(e.name)} has no stored credentials. Calls to the API are anonymous until you add new ones.</p>`];return s(`
216
- ${l(o)}
217
- ${n.join(`
218
- `)}
219
- <p>Retry in your AI client, or confirm any prompt it left open. You can close this tab.</p>
220
- <p class="hint">This link is single-use and is now spent. To change anything, request a new one in your AI client.</p>
221
- ${d()}`)}function m(e){return e.map(t=>`<code>${r(t)}</code>`).join(", ")}function F(e){return s(`
222
- ${l("Credentials saved")}
223
- <p>Credentials for ${r(h(e))} are saved. Retry in your AI client, or confirm any prompt it left open. You can close this tab.</p>
224
- <p class="hint">This link is single-use and is now spent. To change anything, request a new one in your AI client.</p>
225
- ${d()}`)}function q(){return s(`${l("Link expired")}<p>This credentials link is invalid, already used, or older than ${Math.round(f/6e4)} minutes. Retry in your AI client to get a fresh link.</p>${d()}`)}export{E as clearedPage,Z as formPage,R as multiOutcomePage,q as notFoundPage,F as successPage};