@redocly/realm 0.136.0-next.1 → 0.136.0-next.11

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 (540) hide show
  1. package/CHANGELOG.md +208 -0
  2. package/dist/bin.js +1 -1
  3. package/dist/cli/build/analytics/collect-analytics.js +1 -1
  4. package/dist/cli/build/index.js +1 -1
  5. package/dist/cli/eject/ejectComponent.d.ts +1 -1
  6. package/dist/cli/eject/ejectTheme.d.ts +1 -1
  7. package/dist/cli/eject/resolveEjectParams.js +1 -1
  8. package/dist/cli/eject/themeOperations.d.ts +2 -2
  9. package/dist/cli/stats/collectors/openapi/index.js +1 -1
  10. package/dist/cli/stats/index.js +1 -1
  11. package/dist/client/App.js +1 -1
  12. package/dist/client/ErrorBoundary.js +1 -1
  13. package/dist/client/ScriptLoader.js +1 -1
  14. package/dist/client/TestProvider.d.ts +1 -1
  15. package/dist/client/TestProvider.js +1 -1
  16. package/dist/client/api-docs-builder-entry.d.ts +3 -0
  17. package/dist/client/api-docs-builder-entry.js +1 -0
  18. package/dist/client/app/ConditionalLink.d.ts +1 -1
  19. package/dist/client/app/Feedback/useSubmitFeedback.js +1 -1
  20. package/dist/client/app/Link.js +1 -1
  21. package/dist/client/app/Sidebar/Sidebar.js +3 -3
  22. package/dist/client/app/Sidebar/helpers/hide-empty-separators.d.ts +13 -0
  23. package/dist/client/app/Sidebar/helpers/hide-empty-separators.js +1 -0
  24. package/dist/client/app/Sidebar/useActions.js +1 -1
  25. package/dist/client/app/Sidebar/useBreadcrumbs.js +1 -1
  26. package/dist/client/app/Sidebar/useSidebarItems.js +1 -1
  27. package/dist/client/app/Sidebar/utils.d.ts +1 -1
  28. package/dist/client/app/Sidebar/utils.js +1 -1
  29. package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
  30. package/dist/client/app/hooks/catalog/useCatalogFilter.d.ts +1 -1
  31. package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
  32. package/dist/client/app/hooks/catalog/useCatalogSearch.js +1 -1
  33. package/dist/client/app/hooks/catalog/useCatalogSort.js +1 -1
  34. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  35. package/dist/client/app/hooks/catalog/useFetchCatalogEntities.d.ts +1 -1
  36. package/dist/client/app/hooks/catalog/useFetchCatalogEntities.js +1 -1
  37. package/dist/client/app/hooks/catalog/useFetchCatalogEntitiesRelations.d.ts +2 -2
  38. package/dist/client/app/hooks/catalog/useFetchCatalogEntitiesRelations.js +1 -1
  39. package/dist/client/app/hooks/catalog/useFetchCatalogEntityRevisions.d.ts +1 -1
  40. package/dist/client/app/hooks/catalog/useSearchTracker.d.ts +2 -5
  41. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  42. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.d.ts +1 -6
  43. package/dist/client/app/hooks/codeHighlight/useCodeHighlight.js +1 -1
  44. package/dist/client/app/hooks/index.d.ts +1 -0
  45. package/dist/client/app/hooks/index.js +1 -1
  46. package/dist/client/app/hooks/products/useCurrentProduct.js +1 -1
  47. package/dist/client/app/hooks/useAutoScroll.js +1 -1
  48. package/dist/client/app/hooks/useBanner.js +1 -1
  49. package/dist/client/app/hooks/useL10nConfig.js +1 -1
  50. package/dist/client/app/hooks/useLoginUrl.js +1 -1
  51. package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
  52. package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
  53. package/dist/client/app/hooks/useUserClaims.js +1 -1
  54. package/dist/client/app/l10n/hooks/index.d.ts +1 -0
  55. package/dist/client/app/l10n/hooks/index.js +1 -1
  56. package/dist/client/app/l10n/hooks/useTranslate.js +1 -1
  57. package/dist/client/app/l10n/hooks/useTranslationKeys.d.ts +2 -0
  58. package/dist/client/app/l10n/hooks/useTranslationKeys.js +1 -0
  59. package/dist/client/app/l10n/initL10n.js +1 -1
  60. package/dist/client/app/markdoc/custom-components/openapi/json-schema.d.ts +1 -1
  61. package/dist/client/app/markdoc/custom-components/openapi/json-schema.js +1 -1
  62. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.d.ts +1 -5
  63. package/dist/client/app/markdoc/custom-components/openapi/openapi-code-sample.js +1 -1
  64. package/dist/client/app/markdoc/custom-components/openapi/openapi-example.js +1 -1
  65. package/dist/client/app/markdoc/custom-components/openapi/openapi-response-sample.js +1 -1
  66. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.d.ts +8 -24
  67. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
  68. package/dist/client/app/markdoc/hooks/use-store.d.ts +8 -6
  69. package/dist/client/app/markdoc/utils/build-replay-operation-source-map.d.ts +20 -0
  70. package/dist/client/app/markdoc/utils/build-replay-operation-source-map.js +1 -0
  71. package/dist/client/app/markdoc/utils/find-api-item.d.ts +15 -0
  72. package/dist/client/app/markdoc/utils/find-api-item.js +1 -0
  73. package/dist/client/app/markdoc/utils/find-code-sample-panel.d.ts +11 -0
  74. package/dist/client/app/markdoc/utils/find-code-sample-panel.js +1 -0
  75. package/dist/client/app/markdoc/utils/find-openapi-response-samples.d.ts +15 -0
  76. package/dist/client/app/markdoc/utils/find-openapi-response-samples.js +1 -0
  77. package/dist/client/app/markdoc/utils/openapi-panel-entry.d.ts +18 -0
  78. package/dist/client/app/markdoc/utils/openapi-panel-entry.js +1 -0
  79. package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
  80. package/dist/client/app/pages/DevLogin/DevLoginForm.d.ts +1 -1
  81. package/dist/client/app/seo/hooks/useHreflangLinks.js +1 -1
  82. package/dist/client/app/useGlobalData.d.ts +1 -1
  83. package/dist/client/app/useMobileMenu.js +1 -1
  84. package/dist/client/app/usePreloadHistory.d.ts +2 -2
  85. package/dist/client/app/usePreloadHistory.js +1 -1
  86. package/dist/client/app/utils/loadAndNavigate.d.ts +2 -2
  87. package/dist/client/app/utils/loadAndNavigate.js +1 -1
  88. package/dist/client/app/utils/resolveRouteBySlug.js +1 -1
  89. package/dist/client/app/utils/same-resolved-route.d.ts +5 -0
  90. package/dist/client/app/utils/same-resolved-route.js +1 -0
  91. package/dist/client/browser-entry.js +2 -2
  92. package/dist/client/providers/hooks.d.ts +1 -1
  93. package/dist/client/providers/hooks.js +1 -1
  94. package/dist/client/providers/page-data/hooks.d.ts +2 -2
  95. package/dist/client/providers/page-data/hooks.js +1 -1
  96. package/dist/client/providers/post-message/PostMessageProvider.js +1 -1
  97. package/dist/client/providers/post-message/use-post-message.d.ts +1 -1
  98. package/dist/client/providers/theme/ThemeDataProvider.js +1 -1
  99. package/dist/client/runtime/loader.js +1 -1
  100. package/dist/client/templates/api-docs/helpers.d.ts +10 -0
  101. package/dist/client/templates/api-docs/helpers.js +1 -0
  102. package/dist/client/templates/api-docs/template.d.ts +17 -0
  103. package/dist/client/templates/api-docs/template.js +14 -0
  104. package/dist/client/templates/openapi-docs/helpers.d.ts +1 -1
  105. package/dist/client/templates/openapi-docs/helpers.js +2 -2
  106. package/dist/client/types/sidebar.d.ts +0 -1
  107. package/dist/client/utils/utils.d.ts +0 -2
  108. package/dist/client/utils/utils.js +1 -1
  109. package/dist/constants/common.d.ts +14 -1
  110. package/dist/constants/common.js +1 -1
  111. package/dist/constants/l10n/langs/ar.js +1 -1
  112. package/dist/constants/l10n/langs/de.js +1 -1
  113. package/dist/constants/l10n/langs/en.js +1 -1
  114. package/dist/constants/l10n/langs/es.js +1 -1
  115. package/dist/constants/l10n/langs/fr.js +1 -1
  116. package/dist/constants/l10n/langs/hi.js +1 -1
  117. package/dist/constants/l10n/langs/it.js +1 -1
  118. package/dist/constants/l10n/langs/ja.js +1 -1
  119. package/dist/constants/l10n/langs/ko.js +1 -1
  120. package/dist/constants/l10n/langs/pl.js +1 -1
  121. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  122. package/dist/constants/l10n/langs/pt.js +1 -1
  123. package/dist/constants/l10n/langs/ru.js +1 -1
  124. package/dist/constants/l10n/langs/uk.js +1 -1
  125. package/dist/constants/l10n/langs/zh.js +1 -1
  126. package/dist/markdoc/tags/index.d.ts +48 -2
  127. package/dist/server/api-routes/helpers/enhance-context.js +1 -1
  128. package/dist/server/api-routes/helpers/read-stream-with-size-limit.d.ts +1 -1
  129. package/dist/server/api-routes/run-api-routes-worker.d.ts +1 -1
  130. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  131. package/dist/server/config/env-config.d.ts +2 -4
  132. package/dist/server/config/env-schema.d.ts +5 -10
  133. package/dist/server/config/env-schemas/feature-flags.d.ts +4 -8
  134. package/dist/server/config/env-schemas/feature-flags.js +1 -1
  135. package/dist/server/constants/common.d.ts +2 -0
  136. package/dist/server/constants/common.js +1 -1
  137. package/dist/server/constants/entitlements.js +1 -1
  138. package/dist/server/constants/plugins/api-docs.d.ts +3 -0
  139. package/dist/server/constants/plugins/api-docs.js +1 -0
  140. package/dist/server/esbuild/esbuild-logger.js +3 -3
  141. package/dist/server/esbuild/esbuild.js +3 -3
  142. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.d.ts +9 -0
  143. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-check.js +1 -0
  144. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.d.ts +2 -0
  145. package/dist/server/esbuild/plugins/api-docs-module-replacer/empty-overlay.js +1 -0
  146. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.d.ts +6 -0
  147. package/dist/server/esbuild/plugins/api-docs-module-replacer/index.js +1 -0
  148. package/dist/server/esbuild/plugins/themes-resolver.js +4 -2
  149. package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
  150. package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
  151. package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
  152. package/dist/server/plugins/api-docs/get-server-props.d.ts +4 -0
  153. package/dist/server/plugins/api-docs/get-server-props.js +1 -0
  154. package/dist/server/plugins/api-docs/get-template-path.d.ts +2 -0
  155. package/dist/server/plugins/api-docs/get-template-path.js +1 -0
  156. package/dist/server/plugins/api-docs/import-api-docs-builder.d.ts +8 -0
  157. package/dist/server/plugins/api-docs/import-api-docs-builder.js +1 -0
  158. package/dist/server/plugins/api-docs/index.d.ts +19 -0
  159. package/dist/server/plugins/api-docs/index.js +1 -0
  160. package/dist/server/plugins/api-docs/loader.d.ts +35 -0
  161. package/dist/server/plugins/api-docs/loader.js +3 -0
  162. package/dist/server/plugins/api-docs/options.d.ts +14 -0
  163. package/dist/server/plugins/api-docs/options.js +1 -0
  164. package/dist/server/plugins/api-docs/search/get-ai-search-documents.d.ts +20 -0
  165. package/dist/server/plugins/api-docs/search/get-ai-search-documents.js +105 -0
  166. package/dist/server/plugins/api-docs/search/search-facets.d.ts +10 -0
  167. package/dist/server/plugins/api-docs/search/search-facets.js +1 -0
  168. package/dist/server/plugins/api-docs/search/search-indexer.d.ts +9 -0
  169. package/dist/server/plugins/api-docs/search/search-indexer.js +1 -0
  170. package/dist/server/plugins/api-docs/search/search-resolver.d.ts +5 -0
  171. package/dist/server/plugins/api-docs/search/search-resolver.js +1 -0
  172. package/dist/server/plugins/api-docs/spec-download.api.d.ts +4 -0
  173. package/dist/server/plugins/api-docs/spec-download.api.js +1 -0
  174. package/dist/server/plugins/api-docs/store-definition-bundles.d.ts +3 -0
  175. package/dist/server/plugins/api-docs/store-definition-bundles.js +1 -0
  176. package/dist/server/plugins/api-docs/utils/build-item-positions.d.ts +17 -0
  177. package/dist/server/plugins/api-docs/utils/build-item-positions.js +1 -0
  178. package/dist/server/plugins/api-docs/utils/build-routes-mapping.d.ts +3 -0
  179. package/dist/server/plugins/api-docs/utils/build-routes-mapping.js +1 -0
  180. package/dist/server/plugins/api-docs/utils/collect-item-routes.d.ts +12 -0
  181. package/dist/server/plugins/api-docs/utils/collect-item-routes.js +1 -0
  182. package/dist/server/plugins/api-docs/utils/decorators.d.ts +26 -0
  183. package/dist/server/plugins/api-docs/utils/decorators.js +1 -0
  184. package/dist/server/plugins/api-docs/utils/format-bundle-error.d.ts +6 -0
  185. package/dist/server/plugins/api-docs/utils/format-bundle-error.js +5 -0
  186. package/dist/server/plugins/api-docs/utils/normalize-api-version.d.ts +2 -0
  187. package/dist/server/plugins/api-docs/utils/normalize-api-version.js +1 -0
  188. package/dist/server/plugins/api-docs/utils/normalize-feedback-options.d.ts +2 -0
  189. package/dist/server/plugins/api-docs/utils/normalize-feedback-options.js +1 -0
  190. package/dist/server/plugins/api-docs/utils/relative-path-to-base-slug.d.ts +20 -0
  191. package/dist/server/plugins/api-docs/utils/relative-path-to-base-slug.js +1 -0
  192. package/dist/server/plugins/api-docs/utils/replace-file-extension.d.ts +2 -0
  193. package/dist/server/plugins/api-docs/utils/replace-file-extension.js +1 -0
  194. package/dist/server/plugins/api-docs/utils/resolve-api-doc-title.d.ts +3 -0
  195. package/dist/server/plugins/api-docs/utils/resolve-api-doc-title.js +1 -0
  196. package/dist/server/plugins/api-docs/utils/resolve-config-rbac.d.ts +10 -0
  197. package/dist/server/plugins/api-docs/utils/resolve-config-rbac.js +1 -0
  198. package/dist/server/plugins/api-docs/utils/to-relative-slug.d.ts +2 -0
  199. package/dist/server/plugins/api-docs/utils/to-relative-slug.js +1 -0
  200. package/dist/server/plugins/api-functions/index.js +1 -1
  201. package/dist/server/plugins/arazzo-docs/index.js +1 -1
  202. package/dist/server/plugins/asyncapi-docs/index.js +1 -1
  203. package/dist/server/plugins/catalog-classic/index.js +1 -1
  204. package/dist/server/plugins/catalog-entities/database/catalog-entities-diff-publisher.d.ts +1 -1
  205. package/dist/server/plugins/catalog-entities/database/catalog-entities-revisions-pruner.d.ts +4 -2
  206. package/dist/server/plugins/catalog-entities/database/catalog-entities-revisions-pruner.js +23 -3
  207. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +5 -5
  208. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
  209. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
  210. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
  211. package/dist/server/plugins/catalog-entities/database/remote-publish-lock-service.d.ts +3 -3
  212. package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.d.ts +2 -2
  213. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -1
  214. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +1 -1
  215. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +1 -1
  216. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +1 -1
  217. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +2 -2
  218. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -1
  219. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +1 -1
  220. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.d.ts +1 -1
  221. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  222. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +13 -5
  223. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  224. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +5 -2
  225. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  226. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +6 -5
  227. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  228. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +12 -5
  229. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  230. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.d.ts +1 -1
  231. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  232. package/dist/server/plugins/catalog-entities/template/index.js +1 -1
  233. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +1 -1
  234. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +1 -1
  235. package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.d.ts +4 -4
  236. package/dist/server/plugins/catalog-entities/utils/openapi-component-content-extractor.js +1 -1
  237. package/dist/server/plugins/catalog-entities/utils/openapi-schema-resolver.d.ts +4 -3
  238. package/dist/server/plugins/catalog-entities/utils/openapi-schema-resolver.js +1 -1
  239. package/dist/server/plugins/config-parser/index.js +1 -1
  240. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  241. package/dist/server/plugins/create-slugify.d.ts +17 -0
  242. package/dist/server/plugins/create-slugify.js +1 -0
  243. package/dist/server/plugins/default-theme/index.js +1 -1
  244. package/dist/server/plugins/dev-onboarding/index.d.ts +1 -1
  245. package/dist/server/plugins/dev-onboarding/index.js +1 -1
  246. package/dist/server/plugins/dev-onboarding/template/App.js +1 -1
  247. package/dist/server/plugins/dev-onboarding/template/AppsList.js +1 -1
  248. package/dist/server/plugins/dev-onboarding/template/components/ApiKeyItem.js +1 -1
  249. package/dist/server/plugins/dev-onboarding/template/components/ApiLogDetails.js +1 -1
  250. package/dist/server/plugins/dev-onboarding/template/components/ApiLogs.js +1 -1
  251. package/dist/server/plugins/dev-onboarding/template/components/CreateApiKey.js +1 -1
  252. package/dist/server/plugins/dev-onboarding/template/components/DeleteAppDialog.js +1 -1
  253. package/dist/server/plugins/dev-onboarding/template/components/EditApis.js +1 -1
  254. package/dist/server/plugins/dev-onboarding/template/components/EditAppDescriptionDialog.js +1 -1
  255. package/dist/server/plugins/dev-onboarding/template/components/EditAppDialog.js +1 -1
  256. package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.js +1 -1
  257. package/dist/server/plugins/dev-onboarding/template/components/RevokeAPIKey.d.ts +1 -1
  258. package/dist/server/plugins/dev-onboarding/template/components/RevokeAPIKey.js +1 -1
  259. package/dist/server/plugins/dev-onboarding/template/components/RollAPIKey.d.ts +1 -1
  260. package/dist/server/plugins/dev-onboarding/template/components/RollAPIKey.js +1 -1
  261. package/dist/server/plugins/dev-onboarding/template/components/UpdateApiKey.js +1 -1
  262. package/dist/server/plugins/dev-onboarding/template/index.js +1 -1
  263. package/dist/server/plugins/entitlements/index.js +1 -1
  264. package/dist/server/plugins/graphql-docs/index.js +1 -1
  265. package/dist/server/plugins/graphql-docs/search/ai/utils.d.ts +1 -1
  266. package/dist/server/plugins/helpers/parse-partials.d.ts +3 -0
  267. package/dist/server/plugins/helpers/parse-partials.js +1 -0
  268. package/dist/server/plugins/l10n/index.js +1 -1
  269. package/dist/server/plugins/lifecycle.js +2 -2
  270. package/dist/server/plugins/markdown/attribute-resolvers/helpers/load-openapi-bundle.d.ts +5 -3
  271. package/dist/server/plugins/markdown/attribute-resolvers/helpers/load-openapi-bundle.js +1 -1
  272. package/dist/server/plugins/markdown/attribute-resolvers/resolve-json-example-ref.js +1 -1
  273. package/dist/server/plugins/markdown/attribute-resolvers/resolve-open-api-ref.js +1 -1
  274. package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-code-samples.js +1 -1
  275. package/dist/server/plugins/markdown/attribute-resolvers/resolve-openapi-response-samples.js +1 -1
  276. package/dist/server/plugins/markdown/index.js +1 -1
  277. package/dist/server/plugins/markdown/markdoc/markdoc-options.d.ts +9 -9
  278. package/dist/server/plugins/markdown/markdoc/plugins/utils.d.ts +5 -0
  279. package/dist/server/plugins/markdown/markdoc/plugins/utils.js +1 -1
  280. package/dist/server/plugins/markdown/runtime-transform.js +1 -1
  281. package/dist/server/plugins/markdown/search/create-render-tag-fn.d.ts +2 -1
  282. package/dist/server/plugins/markdown/search/create-render-tag-fn.js +1 -1
  283. package/dist/server/plugins/markdown/search/get-ai-search-documents.js +9 -9
  284. package/dist/server/plugins/markdown/search/walk-sections.js +1 -1
  285. package/dist/server/plugins/markdown/utils/resolve-markdown-template.d.ts +1 -1
  286. package/dist/server/plugins/mcp/auth/auth-handlers.d.ts +3 -0
  287. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  288. package/dist/server/plugins/mcp/codemode/capabilities/types.d.ts +1 -1
  289. package/dist/server/plugins/mcp/codemode/capabilities/utils.d.ts +1 -1
  290. package/dist/server/plugins/mcp/codemode/code-audit.d.ts +12 -0
  291. package/dist/server/plugins/mcp/codemode/code-audit.js +1 -0
  292. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.d.ts +11 -0
  293. package/dist/server/plugins/mcp/codemode/code-execution-telemetry.js +1 -0
  294. package/dist/server/plugins/mcp/codemode/constants.js +1 -1
  295. package/dist/server/plugins/mcp/codemode/prompts.js +1 -1
  296. package/dist/server/plugins/mcp/codemode/tools/describe-tools.d.ts +2 -3
  297. package/dist/server/plugins/mcp/codemode/tools/execute-schema.d.ts +1 -1
  298. package/dist/server/plugins/mcp/codemode/tools/execute-schema.js +1 -1
  299. package/dist/server/plugins/mcp/codemode/tools/execute.d.ts +1 -0
  300. package/dist/server/plugins/mcp/codemode/tools/execute.js +1 -1
  301. package/dist/server/plugins/mcp/codemode/tools/manage-credentials.d.ts +19 -0
  302. package/dist/server/plugins/mcp/codemode/tools/manage-credentials.js +2 -0
  303. package/dist/server/plugins/mcp/constants.d.ts +3 -1
  304. package/dist/server/plugins/mcp/constants.js +1 -1
  305. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.d.ts +1 -0
  306. package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
  307. package/dist/server/plugins/mcp/docs-mcp/tools/core/create-anonymous-session.d.ts +11 -0
  308. package/dist/server/plugins/mcp/docs-mcp/tools/core/create-anonymous-session.js +1 -0
  309. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/constants.d.ts +4 -0
  310. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/constants.js +1 -0
  311. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/get-graphql-type-list.js +1 -1
  312. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/get-graphql-type.js +7 -4
  313. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/types.d.ts +7 -1
  314. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/types.js +0 -1
  315. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/utils.d.ts +5 -1
  316. package/dist/server/plugins/mcp/docs-mcp/tools/graphql/utils.js +4 -2
  317. package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +4 -0
  318. package/dist/server/plugins/mcp/docs-mcp/tools/index.js +1 -1
  319. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.d.ts +2 -0
  320. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/constants.js +1 -0
  321. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoint-info.js +1 -1
  322. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-endpoints.js +1 -1
  323. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-full-api-description.js +1 -1
  324. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/get-security-schemes.js +1 -1
  325. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/list-apis.js +1 -1
  326. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.d.ts +6 -2
  327. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/load-api-description.js +1 -1
  328. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/types.d.ts +2 -0
  329. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.d.ts +2 -2
  330. package/dist/server/plugins/mcp/docs-mcp/tools/openapi/utils.js +1 -1
  331. package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +3 -3
  332. package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
  333. package/dist/server/plugins/mcp/gateway-mcp/elicitation.d.ts +48 -0
  334. package/dist/server/plugins/mcp/gateway-mcp/elicitation.js +3 -0
  335. package/dist/server/plugins/mcp/gateway-mcp/eligibility.d.ts +5 -17
  336. package/dist/server/plugins/mcp/gateway-mcp/eligibility.js +1 -1
  337. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.d.ts +9 -9
  338. package/dist/server/plugins/mcp/gateway-mcp/fetch/allowed-hosts.js +1 -1
  339. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.d.ts +17 -1
  340. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-bridge.js +1 -1
  341. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-errors.d.ts +11 -0
  342. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-errors.js +1 -0
  343. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-telemetry.d.ts +14 -0
  344. package/dist/server/plugins/mcp/gateway-mcp/fetch/fetch-telemetry.js +1 -0
  345. package/dist/server/plugins/mcp/gateway-mcp/fetch/normalize-path.d.ts +6 -0
  346. package/dist/server/plugins/mcp/gateway-mcp/fetch/normalize-path.js +1 -0
  347. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.d.ts +4 -0
  348. package/dist/server/plugins/mcp/gateway-mcp/fetch/redact.js +1 -0
  349. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-blocklist.d.ts +22 -0
  350. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-blocklist.js +1 -0
  351. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.d.ts +1 -1
  352. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-guard.js +1 -1
  353. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-safe-lookup.d.ts +13 -0
  354. package/dist/server/plugins/mcp/gateway-mcp/fetch/ssrf-safe-lookup.js +1 -0
  355. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.d.ts +8 -1
  356. package/dist/server/plugins/mcp/gateway-mcp/fetch-capability.js +1 -1
  357. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/apply-edge-rate-limit.d.ts +3 -0
  358. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/apply-edge-rate-limit.js +1 -0
  359. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/edge-limiter.d.ts +16 -0
  360. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/edge-limiter.js +1 -0
  361. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.d.ts +2 -0
  362. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/ip-key.js +1 -0
  363. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/limits.d.ts +7 -0
  364. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/limits.js +1 -0
  365. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/rate-limit-telemetry.d.ts +8 -0
  366. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/rate-limit-telemetry.js +1 -0
  367. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/window-counter.d.ts +15 -0
  368. package/dist/server/plugins/mcp/gateway-mcp/rate-limit/window-counter.js +1 -0
  369. package/dist/server/plugins/mcp/gateway-mcp/secret-store.d.ts +27 -0
  370. package/dist/server/plugins/mcp/gateway-mcp/secret-store.js +1 -0
  371. package/dist/server/plugins/mcp/gateway-mcp/subject.d.ts +20 -0
  372. package/dist/server/plugins/mcp/gateway-mcp/subject.js +1 -0
  373. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.d.ts +18 -0
  374. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth-scheme.js +1 -0
  375. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.d.ts +11 -0
  376. package/dist/server/plugins/mcp/gateway-mcp/upstream-auth.js +1 -0
  377. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  378. package/dist/server/plugins/mcp/handlers/errors.d.ts +3 -3
  379. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  380. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  381. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.d.ts +5 -0
  382. package/dist/server/plugins/mcp/handlers/mcp-credentials-handler.js +120 -0
  383. package/dist/server/plugins/mcp/index.d.ts +1 -0
  384. package/dist/server/plugins/mcp/index.js +1 -1
  385. package/dist/server/plugins/mcp/servers/docs-server.d.ts +3 -1
  386. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  387. package/dist/server/plugins/mcp/servers/mcp-server.d.ts +15 -8
  388. package/dist/server/plugins/mcp/servers/mcp-server.js +3 -1
  389. package/dist/server/plugins/mcp/types.d.ts +16 -20
  390. package/dist/server/plugins/mcp/utils/json-schema-validator.d.ts +9 -0
  391. package/dist/server/plugins/mcp/utils/json-schema-validator.js +1 -0
  392. package/dist/server/plugins/mcp/utils/jwt.d.ts +0 -9
  393. package/dist/server/plugins/mcp/utils/jwt.js +1 -1
  394. package/dist/server/plugins/mcp/utils/mode.d.ts +12 -2
  395. package/dist/server/plugins/mcp/utils/mode.js +1 -1
  396. package/dist/server/plugins/mcp/utils/telemetry-attributes.d.ts +8 -0
  397. package/dist/server/plugins/mcp/utils/telemetry-attributes.js +1 -0
  398. package/dist/server/plugins/mcp/utils/xmcp-utils.d.ts +1 -1
  399. package/dist/server/plugins/mcp/utils.d.ts +17 -5
  400. package/dist/server/plugins/mcp/utils.js +1 -1
  401. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  402. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.d.ts +10 -2
  403. package/dist/server/plugins/mcp/workers/mcp-tool-telemetry.js +1 -1
  404. package/dist/server/plugins/openapi-docs/index.js +1 -1
  405. package/dist/server/plugins/openapi-docs/search/get-ai-search-documents.js +16 -16
  406. package/dist/server/plugins/openapi-docs/utils.js +1 -1
  407. package/dist/server/plugins/pages/index.js +1 -1
  408. package/dist/server/plugins/scorecard-classic/compute-scorecard.d.ts +1 -1
  409. package/dist/server/plugins/scorecard-classic/compute-scorecard.js +4 -4
  410. package/dist/server/plugins/scorecard-classic/index.d.ts +1 -1
  411. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  412. package/dist/server/plugins/scorecard-classic/template/ApiDetailsPage.js +1 -1
  413. package/dist/server/plugins/scorecard-classic/template/RuleDetailsPage.js +1 -1
  414. package/dist/server/plugins/scorecard-classic/template/components.d.ts +1 -1
  415. package/dist/server/plugins/scorecard-classic/template/index.js +1 -1
  416. package/dist/server/plugins/scorecard-classic/template/useData.d.ts +1 -1
  417. package/dist/server/plugins/scorecard-classic/template/utils.d.ts +1 -1
  418. package/dist/server/plugins/scorecard-classic/template/views.js +1 -1
  419. package/dist/server/plugins/scorecards/plugin.js +1 -1
  420. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.d.ts +1 -1
  421. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +2 -2
  422. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  423. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  424. package/dist/server/plugins/search/engines/flexsearch/search-index.js +1 -1
  425. package/dist/server/plugins/search/engines/search-engine.d.ts +1 -1
  426. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  427. package/dist/server/plugins/search/index.js +1 -1
  428. package/dist/server/plugins/search/llmstxt/index.d.ts +1 -1
  429. package/dist/server/plugins/search/llmstxt/index.js +4 -4
  430. package/dist/server/plugins/sidebars/index.d.ts +1 -1
  431. package/dist/server/plugins/sidebars/index.js +1 -1
  432. package/dist/server/plugins/sitemap/index.js +1 -1
  433. package/dist/server/plugins/sso/index.js +1 -1
  434. package/dist/server/providers/database/database-path-generator.d.ts +2 -2
  435. package/dist/server/providers/database/utils/storage-limit-validator.d.ts +1 -1
  436. package/dist/server/sandbox/sandbox.js +2 -2
  437. package/dist/server/sandbox/types.d.ts +3 -2
  438. package/dist/server/sandbox/utils/execution-budget.d.ts +4 -3
  439. package/dist/server/sandbox/utils/execution-budget.js +1 -1
  440. package/dist/server/ssr/render.js +1 -1
  441. package/dist/server/ssr/server-side-props/get-default-static-props.d.ts +1 -1
  442. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.d.ts +1 -1
  443. package/dist/server/ssr/template.d.ts +1 -1
  444. package/dist/server/ssr/utils.d.ts +1 -0
  445. package/dist/server/ssr/utils.js +5 -5
  446. package/dist/server/store.d.ts +2 -6
  447. package/dist/server/store.js +1 -1
  448. package/dist/server/tools/notifiers/logger.js +1 -1
  449. package/dist/server/tools/notifiers/reporter.js +6 -6
  450. package/dist/server/types/plugin-hooks.d.ts +1 -1
  451. package/dist/server/types/plugins/common.d.ts +4 -6
  452. package/dist/server/types/plugins/markdown.d.ts +1 -3
  453. package/dist/server/types/plugins/search.d.ts +1 -0
  454. package/dist/server/utils/catalog-classic/get-route-slug-to-catalog-slug-map.test.js +1 -1
  455. package/dist/server/utils/crypto/constants.d.ts +5 -0
  456. package/dist/server/utils/crypto/constants.js +1 -0
  457. package/dist/server/utils/crypto/decrypt-aes-gcm.d.ts +6 -0
  458. package/dist/server/utils/crypto/decrypt-aes-gcm.js +1 -0
  459. package/dist/server/utils/crypto/decrypt-claim-value.d.ts +6 -0
  460. package/dist/server/utils/crypto/decrypt-claim-value.js +1 -0
  461. package/dist/server/utils/crypto/derive-key.d.ts +5 -0
  462. package/dist/server/utils/crypto/derive-key.js +1 -0
  463. package/dist/server/utils/crypto/encrypt-aes-gcm.d.ts +6 -0
  464. package/dist/server/utils/crypto/encrypt-aes-gcm.js +1 -0
  465. package/dist/server/utils/crypto/encrypt-claim-value.d.ts +6 -0
  466. package/dist/server/utils/crypto/encrypt-claim-value.js +1 -0
  467. package/dist/server/utils/l10n/get-build-translate-context.d.ts +7 -0
  468. package/dist/server/utils/l10n/get-build-translate-context.js +1 -0
  469. package/dist/server/utils/llmstxt/agent-feedback-llms-footer.js +1 -1
  470. package/dist/server/utils/rbac.d.ts +4 -0
  471. package/dist/server/utils/rbac.js +1 -1
  472. package/dist/server/utils/report-all-errors.js +1 -1
  473. package/dist/server/utils/sandbox-context.d.ts +18 -0
  474. package/dist/server/utils/sandbox-context.js +1 -0
  475. package/dist/server/utils/shared-data.js +1 -1
  476. package/dist/server/web-server/auth.d.ts +34 -4
  477. package/dist/server/web-server/auth.js +3 -3
  478. package/dist/server/web-server/handle-api-route-request.js +1 -1
  479. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +1 -1
  480. package/dist/server/web-server/middleware/telemetry-middleware.js +1 -1
  481. package/dist/server/web-server/routes/api-routes/api-routes.js +1 -1
  482. package/dist/server/web-server/routes/auth.js +1 -1
  483. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  484. package/dist/server/web-server/routes/catalog/bff-catalog-revisions.js +1 -1
  485. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  486. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  487. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  488. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +1 -1
  489. package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.d.ts +1 -1
  490. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  491. package/dist/server/web-server/routes/feedback.d.ts +1 -1
  492. package/dist/server/web-server/routes/helpers/process-redirects.d.ts +1 -1
  493. package/dist/server/web-server/routes/mcp-routes/a2a.js +1 -1
  494. package/dist/server/web-server/routes/mcp-routes/agent-card.js +1 -1
  495. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.d.ts +10 -6
  496. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.js +1 -1
  497. package/dist/server/web-server/routes/mcp-routes/mcp-routes.js +1 -1
  498. package/dist/server/web-server/routes/mcp-routes/mcp-server-card.js +1 -1
  499. package/dist/server/web-server/routes/mcp-routes/utils/build-agent-card.d.ts +1 -1
  500. package/dist/server/web-server/routes/page-data.js +1 -1
  501. package/dist/server/web-server/routes/resolve-route.js +1 -1
  502. package/dist/server/web-server/routes/search.js +1 -1
  503. package/dist/server/web-server/routes/skills/skill-markdown.js +1 -1
  504. package/dist/server/web-server/routes/skills/skills-index.js +1 -1
  505. package/dist/server/web-server/utils/prepare-list-response.d.ts +1 -1
  506. package/dist/server/workers/api-routes-worker-pool.js +1 -1
  507. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  508. package/dist/server/workers/worker-pool.d.ts +1 -0
  509. package/dist/server/workers/worker-pool.js +1 -1
  510. package/dist/types/entitlements.d.ts +6 -1
  511. package/dist/types/markdoc.d.ts +2 -1
  512. package/dist/utils/l10n/build-i18n-config.d.ts +24 -0
  513. package/dist/utils/l10n/build-i18n-config.js +1 -0
  514. package/dist/utils/l10n/create-translate.d.ts +19 -0
  515. package/dist/utils/l10n/create-translate.js +1 -0
  516. package/dist/utils/url/get-shared-data-fetch-url.d.ts +17 -0
  517. package/dist/utils/url/get-shared-data-fetch-url.js +1 -0
  518. package/dist/utils/url/parse-preview-url.d.ts +22 -0
  519. package/dist/utils/url/parse-preview-url.js +1 -0
  520. package/package.json +21 -20
  521. package/dist/markdoc/helpers/get-operation/get-operation-info-by-id.d.ts +0 -4
  522. package/dist/markdoc/helpers/get-operation/get-operation-info-by-id.js +0 -1
  523. package/dist/markdoc/helpers/get-operation/get-operation-info-by-pointer.d.ts +0 -4
  524. package/dist/markdoc/helpers/get-operation/get-operation-info-by-pointer.js +0 -1
  525. package/dist/markdoc/helpers/get-operation/get-operation.d.ts +0 -14
  526. package/dist/markdoc/helpers/get-operation/get-operation.js +0 -1
  527. package/dist/markdoc/helpers/get-operation/index.d.ts +0 -4
  528. package/dist/markdoc/helpers/get-operation/index.js +0 -1
  529. package/dist/markdoc/helpers/get-operation/types/index.d.ts +0 -4
  530. package/dist/markdoc/helpers/get-operation/types/index.js +0 -0
  531. package/dist/markdoc/helpers/get-operation/types/operation-identifier.d.ts +0 -5
  532. package/dist/markdoc/helpers/get-operation/types/operation-identifier.js +0 -0
  533. package/dist/markdoc/helpers/get-operation/types/operation-info.d.ts +0 -6
  534. package/dist/markdoc/helpers/get-operation/types/operation-info.js +0 -0
  535. package/dist/markdoc/helpers/get-operation/types/operation-parameters.d.ts +0 -3
  536. package/dist/markdoc/helpers/get-operation/types/operation-parameters.js +0 -0
  537. package/dist/server/plugins/markdown/attribute-resolvers/helpers/get-media-content-samples.d.ts +0 -4
  538. package/dist/server/plugins/markdown/attribute-resolvers/helpers/get-media-content-samples.js +0 -1
  539. package/dist/server/plugins/mcp/handlers/sse-keepalive.d.ts +0 -15
  540. package/dist/server/plugins/mcp/handlers/sse-keepalive.js +0 -3
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import type { Credential } from '../../api/types';
3
- export default function RevokeAPIKey({ apiKey: { expiresAt, clientId, clientSecret, id: apiKeyId } }: {
3
+ export default function RevokeAPIKey({ apiKey: { expiresAt, clientId, clientSecret, id: apiKeyId }, }: {
4
4
  apiKey: Credential;
5
5
  }): React.JSX.Element;
6
6
  export declare const ButtonsContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
@@ -1,4 +1,4 @@
1
- import*as e from"react";import r from"styled-components";import{useMutation as h,useQueryClient as x}from"@tanstack/react-query";import{useParams as A}from"react-router-dom";import{Button as b}from"@redocly/theme/components/Button/Button";import{H2 as I}from"@redocly/theme/components/Typography/H2";import{ErrorIcon as P}from"@redocly/theme/icons/ErrorIcon/ErrorIcon";import{Admonition as C}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as R}from"../../../../../client/app/hooks";import{Dialog as K}from"./Dialog";import{ButtonWithLoading as w}from"./ButtonWithLoading";import{Separator as z}from"./ApiKeys";import{getReadableDate as S}from"./AppOverview";const s=5;function _({apiKey:{expiresAt:t,clientId:n,clientSecret:o,id:v}}){const{id:i}=A(),k=x(),[y,d]=e.useState(!1),{translate:a}=R(),g=Number(t)>0?S(t):"Never",u=n||o,p=()=>d(!0),l=()=>d(!1),f=async()=>{await E()},{isPending:m,error:c,mutateAsync:E}=h({mutationKey:["REVOKE_API_KEY"+i],mutationFn:()=>fetch(`/api/api-keys/apps/${i}/credentials/${v}`,{method:"DELETE",body:JSON.stringify({clientId:n,clientSecret:o})}),onSuccess:()=>{k.invalidateQueries({queryKey:["APP:"+i]}),l()}});return e.createElement(e.Fragment,null,e.createElement(D,{onClick:p},e.createElement("span",{"data-translation-key":"dev.app.key.revoke"},a("dev.app.key.revoke","Revoke API key")),e.createElement(P,{size:"24px",color:"#161616"})),e.createElement(K,{open:y,onOpen:p,onClose:l},e.createElement(F,null,e.createElement(e.Fragment,null,e.createElement(I,{"data-translation-key":"dev.revoke.key.dialog.title"},a("dev.revoke.key.dialog.title","Revoke API key")),e.createElement(O,null,e.createElement("span",{"data-translation-key":"dev.revoke.key.dialog.apiKey"},a("dev.revoke.key.dialog.apiKey","API key")),e.createElement("span",null,B(u||"")),e.createElement("span",{"data-translation-key":"dev.revoke.key.dialog.expires"},a("dev.revoke.key.dialog.expires","Expires")),e.createElement("span",null,g)),e.createElement(z,null),e.createElement("div",{"data-translation-key":"dev.revoke.key.dialog.confirmation"},a("dev.revoke.key.dialog.confirmation","Are you sure you want to revoke this API key?")),c&&e.createElement(C,{type:"danger"},c.message),e.createElement($,null,e.createElement(b,{onClick:l,"data-translation-key":"dev.revoke.key.dialog.cancel",variant:"text",size:"large"},a("dev.revoke.key.dialog.cancel","Cancel")),e.createElement(w,{variant:"primary",onClick:f,disabled:m,loading:m,"data-translation-key":"dev.revoke.key.dialog.revoke"},a("dev.revoke.key.dialog.revoke","Revoke API key")))))))}function B(t){if(t.length>s*2){const n=t.slice(0,s),o=t.slice(-s);return`${n} . . . ${o}`}return t}const O=r.div`
1
+ import*as e from"react";import r from"styled-components";import{useMutation as h,useQueryClient as x}from"@tanstack/react-query";import{useParams as A}from"react-router";import{Button as b}from"@redocly/theme/components/Button/Button";import{H2 as I}from"@redocly/theme/components/Typography/H2";import{ErrorIcon as P}from"@redocly/theme/icons/ErrorIcon/ErrorIcon";import{Admonition as C}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as R}from"../../../../../client/app/hooks";import{Dialog as K}from"./Dialog";import{ButtonWithLoading as w}from"./ButtonWithLoading";import{Separator as z}from"./ApiKeys";import{getReadableDate as S}from"./AppOverview";const s=5;function _({apiKey:{expiresAt:t,clientId:n,clientSecret:o,id:v}}){const{id:i}=A(),k=x(),[y,d]=e.useState(!1),{translate:a}=R(),g=Number(t)>0?S(t):"Never",u=n||o,p=()=>d(!0),l=()=>d(!1),f=async()=>{await E()},{isPending:m,error:c,mutateAsync:E}=h({mutationKey:["REVOKE_API_KEY"+i],mutationFn:()=>fetch(`/api/api-keys/apps/${i}/credentials/${v}`,{method:"DELETE",body:JSON.stringify({clientId:n,clientSecret:o})}),onSuccess:()=>{k.invalidateQueries({queryKey:["APP:"+i]}),l()}});return e.createElement(e.Fragment,null,e.createElement(D,{onClick:p},e.createElement("span",{"data-translation-key":"dev.app.key.revoke"},a("dev.app.key.revoke","Revoke API key")),e.createElement(P,{size:"24px",color:"#161616"})),e.createElement(K,{open:y,onOpen:p,onClose:l},e.createElement(F,null,e.createElement(e.Fragment,null,e.createElement(I,{"data-translation-key":"dev.revoke.key.dialog.title"},a("dev.revoke.key.dialog.title","Revoke API key")),e.createElement(O,null,e.createElement("span",{"data-translation-key":"dev.revoke.key.dialog.apiKey"},a("dev.revoke.key.dialog.apiKey","API key")),e.createElement("span",null,B(u||"")),e.createElement("span",{"data-translation-key":"dev.revoke.key.dialog.expires"},a("dev.revoke.key.dialog.expires","Expires")),e.createElement("span",null,g)),e.createElement(z,null),e.createElement("div",{"data-translation-key":"dev.revoke.key.dialog.confirmation"},a("dev.revoke.key.dialog.confirmation","Are you sure you want to revoke this API key?")),c&&e.createElement(C,{type:"danger"},c.message),e.createElement($,null,e.createElement(b,{onClick:l,"data-translation-key":"dev.revoke.key.dialog.cancel",variant:"text",size:"large"},a("dev.revoke.key.dialog.cancel","Cancel")),e.createElement(w,{variant:"primary",onClick:f,disabled:m,loading:m,"data-translation-key":"dev.revoke.key.dialog.revoke"},a("dev.revoke.key.dialog.revoke","Revoke API key")))))))}function B(t){if(t.length>s*2){const n=t.slice(0,s),o=t.slice(-s);return`${n} . . . ${o}`}return t}const O=r.div`
2
2
  display: grid;
3
3
  grid-template-columns: 1fr 1fr;
4
4
 
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import type { Credential } from '../../api/types';
3
- export default function RollAPIKey({ apiKey: { expiresAt, clientId, clientSecret, id: apiKeyId } }: {
3
+ export default function RollAPIKey({ apiKey: { expiresAt, clientId, clientSecret, id: apiKeyId }, }: {
4
4
  apiKey: Credential;
5
5
  }): React.JSX.Element;
6
6
  export declare const ButtonsContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never> & Partial<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>>> & string;
@@ -1,4 +1,4 @@
1
- import*as e from"react";import o from"styled-components";import{useMutation as E,useQueryClient as x}from"@tanstack/react-query";import{useParams as A}from"react-router-dom";import{Button as b}from"@redocly/theme/components/Button/Button";import{H2 as P}from"@redocly/theme/components/Typography/H2";import{RenewIcon as I}from"@redocly/theme/icons/RenewIcon/RenewIcon";import{Admonition as R}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as C}from"../../../../../client/app/l10n/hooks";import{Dialog as w}from"./Dialog";import{ButtonWithLoading as K}from"./ButtonWithLoading";import{Separator as z}from"./ApiKeys";import{getReadableDate as S}from"./AppOverview";const s=5;function _({apiKey:{expiresAt:t,clientId:n,clientSecret:l,id:y}}){const{id:r}=A(),{translate:a}=C(),g=x(),[u,d]=e.useState(!1),f=Number(t)>0?S(t):"Never",v=n||l,p=()=>d(!0),i=()=>d(!1),k=async()=>{await h()},{isPending:m,error:c,mutateAsync:h}=E({mutationKey:["ROLL_API_KEY"+r],mutationFn:()=>fetch(`/api/api-keys/apps/${r}/credentials/${y}`,{method:"PUT",body:JSON.stringify({clientId:n,clientSecret:l})}),onSuccess:()=>{g.invalidateQueries({queryKey:["APP:"+r]}),i()}});return e.createElement(e.Fragment,null,e.createElement($,{onClick:p},e.createElement("span",{"data-translation-key":"dev.app.key.roll"},a("dev.app.key.roll","Roll API key")),e.createElement(I,{size:"20px",color:"#161616"})),e.createElement(w,{open:u,onOpen:p,onClose:i},e.createElement(F,null,e.createElement(e.Fragment,null,e.createElement(P,{"data-translation-key":"dev.roll.key.dialog.title"},a("dev.roll.key.dialog.title","Roll API key")),e.createElement(O,null,e.createElement("span",{"data-translation-key":"dev.roll.key.dialog.apiKey"},a("dev.roll.key.dialog.apiKey","API key")),e.createElement("span",null,B(v||"")),e.createElement("span",{"data-translation-key":"dev.roll.key.dialog.expires"},a("dev.roll.key.dialog.expires","Expires")),e.createElement("span",null,f)),e.createElement(z,null),e.createElement("div",{"data-translation-key":"dev.roll.key.dialog.confirmation"},a("dev.roll.key.dialog.confirmation","Are you sure you want to roll this API key?")),c&&e.createElement(R,{type:"danger"},c.message),e.createElement(L,null,e.createElement(b,{onClick:i,"data-translation-key":"dev.roll.key.dialog.cancel",variant:"text",size:"large"},a("dev.roll.key.dialog.cancel","Cancel")),e.createElement(K,{variant:"primary",onClick:k,disabled:m,loading:m,"data-translation-key":"dev.roll.key.dialog.roll"},a("dev.roll.key.dialog.roll","Roll API key")))))))}function B(t){if(t.length>s*2){const n=t.slice(0,s),l=t.slice(-s);return`${n} . . . ${l}`}return t}const O=o.div`
1
+ import*as e from"react";import o from"styled-components";import{useMutation as E,useQueryClient as x}from"@tanstack/react-query";import{useParams as A}from"react-router";import{Button as b}from"@redocly/theme/components/Button/Button";import{H2 as P}from"@redocly/theme/components/Typography/H2";import{RenewIcon as I}from"@redocly/theme/icons/RenewIcon/RenewIcon";import{Admonition as R}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as C}from"../../../../../client/app/l10n/hooks";import{Dialog as w}from"./Dialog";import{ButtonWithLoading as K}from"./ButtonWithLoading";import{Separator as z}from"./ApiKeys";import{getReadableDate as S}from"./AppOverview";const s=5;function _({apiKey:{expiresAt:t,clientId:n,clientSecret:l,id:y}}){const{id:r}=A(),{translate:a}=C(),g=x(),[u,d]=e.useState(!1),f=Number(t)>0?S(t):"Never",v=n||l,p=()=>d(!0),i=()=>d(!1),k=async()=>{await h()},{isPending:m,error:c,mutateAsync:h}=E({mutationKey:["ROLL_API_KEY"+r],mutationFn:()=>fetch(`/api/api-keys/apps/${r}/credentials/${y}`,{method:"PUT",body:JSON.stringify({clientId:n,clientSecret:l})}),onSuccess:()=>{g.invalidateQueries({queryKey:["APP:"+r]}),i()}});return e.createElement(e.Fragment,null,e.createElement($,{onClick:p},e.createElement("span",{"data-translation-key":"dev.app.key.roll"},a("dev.app.key.roll","Roll API key")),e.createElement(I,{size:"20px",color:"#161616"})),e.createElement(w,{open:u,onOpen:p,onClose:i},e.createElement(F,null,e.createElement(e.Fragment,null,e.createElement(P,{"data-translation-key":"dev.roll.key.dialog.title"},a("dev.roll.key.dialog.title","Roll API key")),e.createElement(O,null,e.createElement("span",{"data-translation-key":"dev.roll.key.dialog.apiKey"},a("dev.roll.key.dialog.apiKey","API key")),e.createElement("span",null,B(v||"")),e.createElement("span",{"data-translation-key":"dev.roll.key.dialog.expires"},a("dev.roll.key.dialog.expires","Expires")),e.createElement("span",null,f)),e.createElement(z,null),e.createElement("div",{"data-translation-key":"dev.roll.key.dialog.confirmation"},a("dev.roll.key.dialog.confirmation","Are you sure you want to roll this API key?")),c&&e.createElement(R,{type:"danger"},c.message),e.createElement(L,null,e.createElement(b,{onClick:i,"data-translation-key":"dev.roll.key.dialog.cancel",variant:"text",size:"large"},a("dev.roll.key.dialog.cancel","Cancel")),e.createElement(K,{variant:"primary",onClick:k,disabled:m,loading:m,"data-translation-key":"dev.roll.key.dialog.roll"},a("dev.roll.key.dialog.roll","Roll API key")))))))}function B(t){if(t.length>s*2){const n=t.slice(0,s),l=t.slice(-s);return`${n} . . . ${l}`}return t}const O=o.div`
2
2
  display: grid;
3
3
  grid-template-columns: 1fr 1fr;
4
4
 
@@ -1 +1 @@
1
- import*as e from"react";import{useMutation as E,useQueryClient as A}from"@tanstack/react-query";import{useParams as C}from"react-router-dom";import{Button as h}from"@redocly/theme/components/Button/Button";import{H3 as v}from"@redocly/theme/components/Typography/H3";import{Admonition as P}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as S}from"../../../../../client/app/l10n/hooks";import{ButtonWithLoading as b}from"./ButtonWithLoading";import{Dialog as U}from"./Dialog";import I from"./ApisList";import{ButtonsWrapper as T}from"./ApiKeyItem";function W(p){const m=A(),{credential:a,open:c,onClose:n,onOpen:u}=p,{translate:i}=S(),{id:o}=C(),r=e.useMemo(()=>a.apiProductsStatus?.map(t=>t.apiId||t.id),[a]),[l,y]=e.useState(r),{isPending:d,error:s,mutateAsync:g}=E({mutationKey:["MUTATE_CRED"+o],mutationFn:()=>fetch(`/api/api-keys/apps/${o}/credentials/${a.id}`,{method:"PUT",body:JSON.stringify({apiProductIds:l,clientId:a.clientId,clientSecret:a.clientSecret})}).then(t=>t.json()),onSuccess:()=>{m.invalidateQueries({queryKey:["APP:"+o]})}}),f=async()=>{await g(),n()},k=t=>{y(t||[])};return e.createElement(e.Fragment,null,e.createElement(U,{open:c,onClose:n,onOpen:u},e.createElement(e.Fragment,null,e.createElement(v,{"data-translation-key":"dev.update.key.dialog.title"},i("dev.update.key.dialog.title","Update key")),e.createElement(I,{initialEnabledApis:r,onChange:k}),s?e.createElement(P,{type:"danger"}," ",s.message," "):null,e.createElement(T,null,e.createElement(h,{onClick:n,"data-translation-key":"dev.update.key.dialog.cancel"},i("dev.update.key.dialog.cancel","Cancel")),e.createElement(b,{variant:"primary",onClick:f,disabled:d||l.length<1,loading:d,"data-translation-key":"dev.update.key.dialog.update"},i("dev.update.key.dialog.update","Update key"))))))}export{W as UpdateKey};
1
+ import*as e from"react";import{useMutation as E,useQueryClient as A}from"@tanstack/react-query";import{useParams as C}from"react-router";import{Button as h}from"@redocly/theme/components/Button/Button";import{H3 as v}from"@redocly/theme/components/Typography/H3";import{Admonition as P}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as S}from"../../../../../client/app/l10n/hooks";import{ButtonWithLoading as b}from"./ButtonWithLoading";import{Dialog as U}from"./Dialog";import I from"./ApisList";import{ButtonsWrapper as T}from"./ApiKeyItem";function W(p){const m=A(),{credential:a,open:c,onClose:n,onOpen:u}=p,{translate:i}=S(),{id:o}=C(),r=e.useMemo(()=>a.apiProductsStatus?.map(t=>t.apiId||t.id),[a]),[l,y]=e.useState(r),{isPending:d,error:s,mutateAsync:g}=E({mutationKey:["MUTATE_CRED"+o],mutationFn:()=>fetch(`/api/api-keys/apps/${o}/credentials/${a.id}`,{method:"PUT",body:JSON.stringify({apiProductIds:l,clientId:a.clientId,clientSecret:a.clientSecret})}).then(t=>t.json()),onSuccess:()=>{m.invalidateQueries({queryKey:["APP:"+o]})}}),f=async()=>{await g(),n()},k=t=>{y(t||[])};return e.createElement(e.Fragment,null,e.createElement(U,{open:c,onClose:n,onOpen:u},e.createElement(e.Fragment,null,e.createElement(v,{"data-translation-key":"dev.update.key.dialog.title"},i("dev.update.key.dialog.title","Update key")),e.createElement(I,{initialEnabledApis:r,onChange:k}),s?e.createElement(P,{type:"danger"}," ",s.message," "):null,e.createElement(T,null,e.createElement(h,{onClick:n,"data-translation-key":"dev.update.key.dialog.cancel"},i("dev.update.key.dialog.cancel","Cancel")),e.createElement(b,{variant:"primary",onClick:f,disabled:d||l.length<1,loading:d,"data-translation-key":"dev.update.key.dialog.update"},i("dev.update.key.dialog.update","Update key"))))))}export{W as UpdateKey};
@@ -1 +1 @@
1
- import*as e from"react";import{Navigate as r,Route as t,Routes as n}from"react-router-dom";import{QueryClientProvider as l,QueryClient as o}from"@tanstack/react-query";import m from"./AppsList";import a from"./App";const i=new o({defaultOptions:{queries:{refetchOnWindowFocus:!1}}});function p(u){return e.createElement(l,{client:i},e.createElement(n,null,e.createElement(t,{path:"/",element:e.createElement(m,null)},e.createElement(t,{path:"/:id",element:e.createElement(a,null)})),e.createElement(t,{path:"*",element:e.createElement(r,{to:"..",replace:!0})})))}export{p as default};
1
+ import*as e from"react";import{Navigate as r,Route as t,Routes as n}from"react-router";import{QueryClientProvider as l,QueryClient as o}from"@tanstack/react-query";import m from"./AppsList";import a from"./App";const i=new o({defaultOptions:{queries:{refetchOnWindowFocus:!1}}});function p(u){return e.createElement(l,{client:i},e.createElement(n,null,e.createElement(t,{path:"/",element:e.createElement(m,null)},e.createElement(t,{path:"/:id",element:e.createElement(a,null)})),e.createElement(t,{path:"*",element:e.createElement(r,{to:"..",replace:!0})})))}export{p as default};
@@ -1 +1 @@
1
- import{writeFileSync as F}from"node:fs";import S from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as b}from"../../constants/common.js";import{envConfig as O}from"../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as C}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as R}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as $,isPathIgnored as M}from"../../utils/index.js";import{isGraphqlDoc as k}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as D}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as E}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as p}from"../../../config/product-gates.js";import{isAsyncapiDoc as _}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as I}from"../../../cli/telemetry/helpers/trace-step.js";import{getBilledCatalogBuildPagesCount as j}from"./utils/get-billed-catalog-build-pages-count.js";async function X(){return{id:"entitlements",async afterRoutesCreated(g,u){await I("build.plugin.entitlements",async t=>{const i=R.instance(),s=[],n=[],r=[],a=[],l=[];for(const{relativePath:e}of u.fs.scan())M(e)||(D(e)?s.push(e):k(e)?r.push(e):C(e)?a.push(e):await E(e,u)?n.push(e):await _(e,u)&&l.push(e));const c=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",s.length.toString()),t?.setAttribute("isMarkdownSupported",(!!c).toString()),s.length>0&&!c&&o.warn(`The product you are using ("${p}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const d=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",n.length.toString()),t?.setAttribute("isOpenApiSupported",(!!d).toString()),n.length>0&&!d&&o.warn(`The product you are using ("${p}") does not support OpenAPI documents. The following files are ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const f=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",l.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!f).toString()),l.length>0&&!f&&o.warn(`The product you are using ("${p}") does not support AsyncAPI documents. The following files are ignored: ${l.map(()=>"%rp").join(", ")}`,...l);const m=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",r.length.toString()),t?.setAttribute("isGraphqlSupported",(!!m).toString()),r.length>0&&!m&&o.warn(`The product you are using ("${p}") does not support GraphQL documents. The following files are ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const A=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!A).toString()),a.length>0&&!A&&o.warn(`The product you are using ("${p}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const P=(await u.getConfig()).entitiesCatalog,T=$(g.getAllRoutes()),{total:y}=await j(g.serverOutDir,P),h=T+y;t?.setAttribute("totalBilledPages",h.toString());const w=O.REDOCLY_METADATA_OUTPUT_FOLDER;w&&(o.info("Save total pages..."),F(S.join(w,b),JSON.stringify({totalPages:h},null)))})}}}export{X as entitlementsPlugin};
1
+ import{writeFileSync as F}from"node:fs";import S from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as b}from"../../constants/common.js";import{envConfig as O}from"../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as C}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as R}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as $,isPathIgnored as M}from"../../utils/index.js";import{isGraphqlDoc as k}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as D}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as E}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as p}from"../../../config/product-gates.js";import{isAsyncapiDoc as _}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as I}from"../../../cli/telemetry/helpers/trace-step.js";import{getBilledCatalogBuildPagesCount as j}from"./utils/get-billed-catalog-build-pages-count.js";async function X(){return{id:"entitlements",async afterRoutesCreated(g,u){await I("com.redocly.build.plugin.entitlements",async t=>{const i=R.instance(),s=[],n=[],r=[],a=[],l=[];for(const{relativePath:e}of u.fs.scan())M(e)||(D(e)?s.push(e):k(e)?r.push(e):C(e)?a.push(e):await E(e,u)?n.push(e):await _(e,u)&&l.push(e));const c=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",s.length.toString()),t?.setAttribute("isMarkdownSupported",(!!c).toString()),s.length>0&&!c&&o.warn(`The product you are using ("${p}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const d=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",n.length.toString()),t?.setAttribute("isOpenApiSupported",(!!d).toString()),n.length>0&&!d&&o.warn(`The product you are using ("${p}") does not support OpenAPI documents. The following files are ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const m=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",l.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!m).toString()),l.length>0&&!m&&o.warn(`The product you are using ("${p}") does not support AsyncAPI documents. The following files are ignored: ${l.map(()=>"%rp").join(", ")}`,...l);const f=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",r.length.toString()),t?.setAttribute("isGraphqlSupported",(!!f).toString()),r.length>0&&!f&&o.warn(`The product you are using ("${p}") does not support GraphQL documents. The following files are ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const A=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!A).toString()),a.length>0&&!A&&o.warn(`The product you are using ("${p}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const P=(await u.getConfig()).entitiesCatalog,y=$(g.getAllRoutes()),{total:T}=await j(g.serverOutDir,P),h=y+T;t?.setAttribute("totalBilledPages",h.toString());const w=O.REDOCLY_METADATA_OUTPUT_FOLDER;w&&(o.info("Save total pages..."),F(S.join(w,b),JSON.stringify({totalPages:h},null)))})}}}export{X as entitlementsPlugin};
@@ -1 +1 @@
1
- import{writeFileSync as v}from"node:fs";import C from"node:path";import{REDOCLY_TEAMS_RBAC as $}from"@redocly/config";import{combineUrls as q}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as w}from"../../constants/common.js";import{GRAPHQL_TEMPLATE_ID as O,GRAPHQL_SPEC_SLUG as Q,PUBLIC_RBAC_SCOPE_ITEM as H}from"../../../constants/common.js";import{removeTrailingSlash as I}from"../../../utils/url/remove-trailing-slash.js";import{getTemplatePath as N}from"./get-template-path.js";import{searchResolver as F}from"./search/search-resolver.js";import{graphqlDocLoader as M,graphqlDocsLoader as U}from"./graphql-doc-loader.js";import{getAiDocumentsStore as _}from"./search/ai/get-ai-search-document.js";import{fromCurrentDir as k}from"../../utils/paths.js";import{ensureDir as x}from"../../utils/fs.js";import{telemetryTraceStep as B}from"../../../cli/telemetry/helpers/trace-step.js";const j="graphql-docs-",R="graphql-spec-download";async function nt(){return{id:"graphql",requiredEntitlements:["graphql"],loaders:{"graphql-doc":M,"load-graphql-docs":U},processContent:async(t,{fs:l,cache:n,isPathIgnored:i,withPathPrefix:p})=>{await B("build.plugin.graphql_docs",async()=>{t.createRequestHandler(R,k(import.meta.url,"./spec-download.api.js")),t.addApiRoute({slug:Q+"/*",requestHandlerId:R,httpMethod:"all",[$]:H,getStaticData:async()=>({props:{}})});const m=t.createTemplate(O,N("./template/GraphQLDocs.js"));for(const{relativePath:o}of l.scan(/(\.gql|\.graphql)$/)){if(await i(o))continue;const h=await n.load(o,"graphql-doc");if(!h.data)continue;K(h.data.content,t.outdir,o);const{menu:A,content:G,settings:u,metadata:T,store:d}=h.data,L=`${j}${o}`;await t.createSharedData(L,G);const c=[{key:"graphQlSettings",id:L}],b=A.getGroups(),y=A.getSidebarItems(),g={type:"graphql",title:b[0].name,...T},s=[{slugSuffix:"",fsPath:o,templateId:m,getStaticData:S(void 0,u,p),sharedData:c,getAiDocumentsStore:_({label:u.info?.title??"GraphQL Overview",groupName:"overview",metadata:g,actions:t,store:d,includeInLLMsTxt:!0})}];for(const r of b){const f=`${r.id}`;s.push({slugSuffix:f,fsPath:o,templateId:m,getStaticData:S(r,u,p),sharedData:c});for(const e of r.typeGroups){const a=`${e.id}`;s.push({slugSuffix:a,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:c,getAiDocumentsStore:_({label:e.name,groupName:e.name,metadata:g,actions:t,store:d,isTypeGroup:!0,items:new Set(e.items)})});for(const E of e.items){const P=`${e.id}/${E}`;s.push({slugSuffix:P,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:c,getAiDocumentsStore:_({label:E,groupName:e.name,metadata:g,actions:t,store:d})})}}}if(!s.length)return;const D=s[s.length-1];D.metadata=g,D.getSidebar=r=>{function f(e){return e.map(a=>({...a,slug:a.slug&&I(q(r.baseSlug,a.slug)),routeSlug:a.routeSlug&&I(q(r.baseSlug,a.routeSlug)),link:a.link&&I(q(r.baseSlug,a.link)),items:a.items&&f(a.items)}))}return f(y)},D.getSearchDocuments=F(t,d);for(const r of s)t.addRoute(r)}})}}}function S(t,l,n){return async function(i){return{props:{seo:{title:t?.name??l.info?.title??"GraphQL Overview"},settings:{...l,location:{section:t?.id},sidebar:{hide:!0},baseUrlPath:n(i.baseSlug)},disableAutoScroll:!0}}}}function K(t,l,n){const i=w.slice(1);v(x(C.resolve(l,`${i}/${n}`)),t,"utf8")}export{nt as graphqlDocsPlugin,K as storeGqlSchema};
1
+ import{writeFileSync as v}from"node:fs";import C from"node:path";import{REDOCLY_TEAMS_RBAC as $}from"@redocly/config";import{combineUrls as q}from"@redocly/theme/core/utils";import{PUBLIC_API_DEFINITIONS_FOLDER as w}from"../../constants/common.js";import{GRAPHQL_TEMPLATE_ID as O,GRAPHQL_SPEC_SLUG as Q,PUBLIC_RBAC_SCOPE_ITEM as H}from"../../../constants/common.js";import{removeTrailingSlash as I}from"../../../utils/url/remove-trailing-slash.js";import{getTemplatePath as N}from"./get-template-path.js";import{searchResolver as F}from"./search/search-resolver.js";import{graphqlDocLoader as M,graphqlDocsLoader as U}from"./graphql-doc-loader.js";import{getAiDocumentsStore as A}from"./search/ai/get-ai-search-document.js";import{fromCurrentDir as k}from"../../utils/paths.js";import{ensureDir as x}from"../../utils/fs.js";import{telemetryTraceStep as B}from"../../../cli/telemetry/helpers/trace-step.js";const j="graphql-docs-",R="graphql-spec-download";async function nt(){return{id:"graphql",requiredEntitlements:["graphql"],loaders:{"graphql-doc":M,"load-graphql-docs":U},processContent:async(t,{fs:l,cache:n,isPathIgnored:i,withPathPrefix:p})=>{await B("com.redocly.build.plugin.graphqlDocs",async()=>{t.createRequestHandler(R,k(import.meta.url,"./spec-download.api.js")),t.addApiRoute({slug:Q+"/*",requestHandlerId:R,httpMethod:"all",[$]:H,getStaticData:async()=>({props:{}})});const m=t.createTemplate(O,N("./template/GraphQLDocs.js"));for(const{relativePath:o}of l.scan(/(\.gql|\.graphql)$/)){if(await i(o))continue;const h=await n.load(o,"graphql-doc");if(!h.data)continue;K(h.data.content,t.outdir,o);const{menu:_,content:y,settings:u,metadata:G,store:c}=h.data,L=`${j}${o}`;await t.createSharedData(L,y);const d=[{key:"graphQlSettings",id:L}],b=_.getGroups(),T=_.getSidebarItems(),g={type:"graphql",title:b[0].name,...G},s=[{slugSuffix:"",fsPath:o,templateId:m,getStaticData:S(void 0,u,p),sharedData:d,getAiDocumentsStore:A({label:u.info?.title??"GraphQL Overview",groupName:"overview",metadata:g,actions:t,store:c,includeInLLMsTxt:!0})}];for(const r of b){const f=`${r.id}`;s.push({slugSuffix:f,fsPath:o,templateId:m,getStaticData:S(r,u,p),sharedData:d});for(const e of r.typeGroups){const a=`${e.id}`;s.push({slugSuffix:a,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:d,getAiDocumentsStore:A({label:e.name,groupName:e.name,metadata:g,actions:t,store:c,isTypeGroup:!0,items:new Set(e.items)})});for(const E of e.items){const P=`${e.id}/${E}`;s.push({slugSuffix:P,fsPath:o,templateId:m,getStaticData:S(e,u,p),sharedData:d,getAiDocumentsStore:A({label:E,groupName:e.name,metadata:g,actions:t,store:c})})}}}if(!s.length)return;const D=s[s.length-1];D.metadata=g,D.getSidebar=r=>{function f(e){return e.map(a=>({...a,slug:a.slug&&I(q(r.baseSlug,a.slug)),routeSlug:a.routeSlug&&I(q(r.baseSlug,a.routeSlug)),link:a.link&&I(q(r.baseSlug,a.link)),items:a.items&&f(a.items)}))}return f(T)},D.getSearchDocuments=F(t,c);for(const r of s)t.addRoute(r)}})}}}function S(t,l,n){return async function(i){return{props:{seo:{title:t?.name??l.info?.title??"GraphQL Overview"},settings:{...l,location:{section:t?.id},sidebar:{hide:!0},baseUrlPath:n(i.baseSlug)},disableAutoScroll:!0}}}}function K(t,l,n){const i=w.slice(1);v(x(C.resolve(l,`${i}/${n}`)),t,"utf8")}export{nt as graphqlDocsPlugin,K as storeGqlSchema};
@@ -8,7 +8,7 @@ type GetSearchDocumentParams = {
8
8
  items?: Set<string>;
9
9
  };
10
10
  type GetSearchDocumentReturnType = GraphQLSearchDocument | (GraphQLSearchDocument | undefined)[] | undefined;
11
- export declare function getSearchDocument({ label, groupName, store, isTypeGroup, items }: GetSearchDocumentParams): GetSearchDocumentReturnType;
11
+ export declare function getSearchDocument({ label, groupName, store, isTypeGroup, items, }: GetSearchDocumentParams): GetSearchDocumentReturnType;
12
12
  export declare function convertDocumentToMarkdown(document: GraphQLSearchDocument, baseLevel?: number): string;
13
13
  export {};
14
14
  //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,3 @@
1
+ import { type Node } from '@markdoc/markdoc';
2
+ export declare function parsePartials(partials?: Record<string, any>): Record<string, Node[] | Node> | undefined;
3
+ //# sourceMappingURL=parse-partials.d.ts.map
@@ -0,0 +1 @@
1
+ import{Ast as i}from"@markdoc/markdoc";function o(r){if(r)return Object.entries(r).reduce((e,[t,n])=>(e[t]=i.fromJSON(JSON.stringify(n)),e),{})}export{o as parsePartials};
@@ -1 +1 @@
1
- import g from"path";import{DEFAULT_LOCALE_PLACEHOLDER as d,TRANSLATIONS_FILE_NAME as h}from"../../../constants/common.js";import{I18N_DIR_NAME as y,L10N_DIR_NAME as A}from"../../constants/common.js";import{logger as m}from"../../tools/notifiers/logger.js";import{reporter as w}from"../../tools/notifiers/reporter.js";import{EntitlementsProvider as O}from"../../entitlements/entitlements-provider.js";import{isL10nPath as E}from"../../fs/utils/is-l10n-path.js";import{isOpenapiDoc as I}from"../openapi-docs/is-openapi-doc.js";import{telemetryTraceStep as N}from"../../../cli/telemetry/helpers/trace-step.js";async function $(){return{id:"l10n",async processContent(n,i){await N("build.plugin.l10n",async a=>{const{fs:t,cache:c,getConfig:r}=i,e={},p=O.instance(),l=await r();a?.setAttribute("config",JSON.stringify(l.l10n||{}));const s=l.l10n?.defaultLocale||d;if(p.canAccessFeature("l10n")){await F(i);for(const{relativePath:o}of t.scan(/(^|.*[\/\\])translations\.yaml$/)){const u=await c.load(o,"yaml"),L=P(o)||s;e[L]={translation:u.data||{}}}}e[s]={translation:{...e[s]?.translation||{}}};const f=l.l10n?.locales||[d,...t.localeFolders].map(o=>({code:o.toLowerCase(),name:o}));a?.setAttribute("locales",JSON.stringify(f)),n.setGlobalData({l10n:{translations:e,defaultLocale:s,locales:f.map(o=>({code:o.code,name:o.name||o.code}))}})})}}}function P(n){return n.indexOf("/")>0?n.split("/")[1]:void 0}async function F(n){const i=n.fs.scan();for(const{isVirtual:a,realRelativePath:t}of i){if(a)continue;if(E(t)&&t.endsWith(".page.tsx")&&await w.panicOnBuild(`The file %rp is not allowed in ${A} or ${y} folders`,t),g.posix.basename(t)===h){const r=/^(?:@(i18n|l10n)[\/\\][^\/\\]+[\/\\])?translations\.yaml$/.test(t),e=await I(t,n);!r&&!e&&m.warn("The file %rp is in the wrong location. Make sure it is located in the root directory or in the locale root directory.",t),r&&e&&m.warn("It looks like the file %rp might be an OpenAPI definition and is located in a location reserved for translation files. Please rename it or move to another directory if it is not a translations file",t)}}}export{$ as l10nPlugin};
1
+ import g from"path";import{DEFAULT_LOCALE_PLACEHOLDER as d,TRANSLATIONS_FILE_NAME as h}from"../../../constants/common.js";import{I18N_DIR_NAME as y,L10N_DIR_NAME as A}from"../../constants/common.js";import{logger as m}from"../../tools/notifiers/logger.js";import{reporter as w}from"../../tools/notifiers/reporter.js";import{EntitlementsProvider as O}from"../../entitlements/entitlements-provider.js";import{isL10nPath as E}from"../../fs/utils/is-l10n-path.js";import{isOpenapiDoc as I}from"../openapi-docs/is-openapi-doc.js";import{telemetryTraceStep as N}from"../../../cli/telemetry/helpers/trace-step.js";async function $(){return{id:"l10n",async processContent(n,i){await N("com.redocly.build.plugin.l10n",async a=>{const{fs:t,cache:c,getConfig:r}=i,e={},p=O.instance(),l=await r();a?.setAttribute("config",JSON.stringify(l.l10n||{}));const s=l.l10n?.defaultLocale||d;if(p.canAccessFeature("l10n")){await F(i);for(const{relativePath:o}of t.scan(/(^|.*[\/\\])translations\.yaml$/)){const u=await c.load(o,"yaml"),L=P(o)||s;e[L]={translation:u.data||{}}}}e[s]={translation:{...e[s]?.translation||{}}};const f=l.l10n?.locales||[d,...t.localeFolders].map(o=>({code:o.toLowerCase(),name:o}));a?.setAttribute("locales",JSON.stringify(f)),n.setGlobalData({l10n:{translations:e,defaultLocale:s,locales:f.map(o=>({code:o.code,name:o.name||o.code}))}})})}}}function P(n){return n.indexOf("/")>0?n.split("/")[1]:void 0}async function F(n){const i=n.fs.scan();for(const{isVirtual:a,realRelativePath:t}of i){if(a)continue;if(E(t)&&t.endsWith(".page.tsx")&&await w.panicOnBuild(`The file %rp is not allowed in ${A} or ${y} folders`,t),g.posix.basename(t)===h){const r=/^(?:@(i18n|l10n)[\/\\][^\/\\]+[\/\\])?translations\.yaml$/.test(t),e=await I(t,n);!r&&!e&&m.warn("The file %rp is in the wrong location. Make sure it is located in the root directory or in the locale root directory.",t),r&&e&&m.warn("It looks like the file %rp might be an OpenAPI definition and is located in a location reserved for translation files. Please rename it or move to another directory if it is not a translations file",t)}}}export{$ as l10nPlugin};
@@ -1,2 +1,2 @@
1
- import B from"@redocly/portal-plugin-mock-server";import _ from"path";import{REDOCLY_ROUTE_RBAC as x}from"@redocly/config";import{combineUrls as v,withPathPrefix as N}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as k}from"../constants/common.js";import{removeTrailingSlash as T}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as L}from"../../utils/url/remove-leading-slash.js";import{isTruthy as j}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as F}from"../../utils/path/normalize-route-slug.js";import{slash as q}from"../../utils/path/slash.js";import{parsePathVersions as V}from"../../utils/path/parse-path-versions.js";import{reporter as b}from"../tools/notifiers/reporter.js";import{logger as h}from"../tools/notifiers/logger.js";import{envConfig as S}from"../config/env-config.js";import{shaDirPathShort as $}from"../utils/crypto/sha-dir-path-short.js";import{writeServerRebuildTrigger as M}from"../esbuild/generate.js";import{customPagesPlugin as z}from"../../server/plugins/pages/index.js";import{openAPIDocsPlugin as H}from"../../server/plugins/openapi-docs/index.js";import{asyncAPIDocsPlugin as I}from"../../server/plugins/asyncapi-docs/index.js";import{configParserPlugin as U}from"./config-parser/index.js";import{markdownPlugin as G}from"./markdown/index.js";import{generateBrowserPluginsModule as W,generateClientRoutes as K,generateTemplatesModule as Y}from"../esbuild/generate.js";import{graphqlDocsPlugin as J}from"./graphql-docs/index.js";import{searchPlugin as Q}from"./search/index.js";import{skillsPlugin as X}from"./skills/index.js";import{defaultThemePlugin as Z}from"./default-theme/index.js";import{apiKeyMgmtPlugin as ee}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as te}from"./api-functions/index.js";import{scorecardClassicPlugin as oe}from"./scorecard-classic/index.js";import{lintPlugin as ie}from"./lint/index.js";import{resolveExternalPlugins as re}from"../external-plugins/resolve-external-plugins.js";import{sidebarsPlugin as ne}from"./sidebars/index.js";import{l10nPlugin as se}from"./l10n/index.js";import{validateRedirects as ae}from"../utils/redirects/validate-redirects.js";import{analyticsPlugins as le}from"./analytics/index.js";import{sitemapPlugin as ue}from"./sitemap/index.js";import{entitlementsPlugin as ce}from"./entitlements/index.js";import{getBilledPagesCount as fe,slug as me}from"../utils/index.js";import{telemetry as de}from"../../cli/telemetry/index.js";import{telemetryTraceStep as E}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as D}from"../entitlements/entitlements-provider.js";import{enforceLoginPlugin as pe}from"./enforce-login/index.js";import{ssoPlugin as ge}from"./sso/index.js";import{Cache as Pe}from"../fs/cache.js";import{ContentFs as he}from"../fs/content-fs.js";import{findProductBySlug as ye}from"../utils/product.js";import{parseBaseName as Re}from"./utils.js";import{isRouteReserved as we}from"./get-reserved-routes.js";import{catalogClassicPlugin as Ce}from"./catalog-classic/index.js";import{arazzoDocsPlugin as ve}from"./arazzo-docs/index.js";const be=[U,pe,ge,Z,se,G,H,I,ve,oe,ie,te,z,J,ee,Ce,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>S.NEW_CATALOG_ENABLED??!1},{importPath:"./scorecards/plugin.js",loadCondition:()=>S.NEW_SCORECARDS_ENABLED??!1},{importPath:"./mcp/index.js",loadCondition:()=>D.instance().canAccessFeature("mcp")},ne,ue,ce,Q,X,B,...le];async function bt(t,e=be){return await E("build.plugins_init",async()=>{const r=[],w=D.instance(),y={};for(const s of e){let d;if("loadCondition"in s){if(!s.loadCondition())continue;const o=await import(s.importPath);if(!o.default||typeof o.default!="function"){await b.panicOnBuild(`Dynamic plugin ${s.importPath} does not export a default export or it is not a function`);continue}d=o.default}else d=s;const R=await d(t);for(const[o,l]of Object.entries(R.loaders||{}))y[o]&&await b.panicOnBuild(`Duplicate loader with name ${o}`),y[o]=l;(!R.requiredEntitlements||R.requiredEntitlements?.every(o=>w.canAccessFeature(o)))&&r.push(R)}const u=new he(t.contentDir);await u.ready;const m=new Pe(u);return m.setLoaders(y),h.verbose("All plugins instantiated"),{pluginInstances:r,lifecycleContext:Ae(u,m)}})}function O(t){h.verbose("Generating templates"),E("build.write_client_entries",()=>{Y(t),W(t),K(t)})}async function Ee(t){const e=t.getAllRoutes();fe(e)||await b.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function Et(t,e,r,w={}){const y=D.instance();try{await E("build.plugins_run",async()=>{e.startPluginsRun();const u=S.isDevelopMode&&e.buildRevision>0,m=u?Array.from(e.apiRoutesRequestHandlers.keys()).sort().join(","):"";let s=[];await E("build.plugins_process_content",async o=>{for(const i of t){const a=h.startTiming();await i.processContent?.(e,r),h.verboseTime(a,`processContent for ${i.id}`)}s=(await re(e.contentDir,e.config.plugins)).map(i=>i.lifecyclePlugin).filter(i=>j(i)&&(!i.requiredEntitlements||i.requiredEntitlements?.every(a=>y.canAccessFeature(a)))),r.cache.setLoaders(Object.fromEntries(s.flatMap(i=>Object.entries(i.loaders||{}))));for(const i of s){const a=h.startTiming();await i.processContent?.(e,r),h.verboseTime(a,`processContent for ${i.id}`)}o?.setAttribute("externalPluginsProcessed",s.length.toString())});const d=await Se(e,r),R=[...t,...s];if(O(e),S.isDevelopMode?await e.userCodeReady:e.buildRevision++,await E("build.plugins_after_routes_created",async()=>{for(const o of R){const l=h.startTiming();await o.afterRoutesCreated?.(e,d),h.verboseTime(l,`afterRoutesCreated for ${o.id}`)}}),ae(e),await e.reportUnsetEnvVars(),await Ee(e),O(e),u){const o=Array.from(e.apiRoutesRequestHandlers.keys()).sort().join(",");m!==o&&(e.markRequestHandlersEntryOutdated(),M(e.serverOutDir))}})}catch(u){const m="Unhandled error in plugin. "+u.message+`
2
- `+u.stack;de.sendCliErrorCaughtMessage({message:m}),w.failFast?await b.panic(m):await b.panicOnBuild(m)}finally{e.finishPluginsRun()}}async function Se(t,e){const{cache:r,fs:w}=e,y=await e.getConfig(),u=Object.values(y.products||{}),m=(await r.load("versions-config","versions-config")).data,s=(await r.load("content-slugs","content-slugs")).data;for(const{duplicateInAllLocales:o,slugSuffix:l,sharedData:i=[],redirectFrom:a=[],...c}of t.newRoutes){const f=F(c.slug?c.slug:d(c.fsPath)),g=T(l?v(f,l):f),n={...c,[x]:{slug:g,fsPath:c.fsPath},slug:g,baseSlug:f,versions:R(c.fsPath,l),product:ye(u,g,d)};we(g,y)&&await b.panicOnBuildContentError(`Route "${g}" is reserved and cannot be used. Please choose a different slug for "${c.fsPath}".`),t.routesByFsPath.set(n.fsPath,n.slug),t.routesBySlug.set(n.slug,n);for(const{key:P,id:p}of i)t.addRouteSharedData(n.slug,P,p);for(const P of a)t.addRedirect(P.from,{type:P.type,to:n.slug});if(o)for(const P of w.localeFolders){const p={...n,slug:"/"+P.toLowerCase()+n.slug};t.routesByFsPath.set(p.fsPath,p.slug),t.routesBySlug.set(p.slug,p);for(const{key:C,id:A}of i)t.addRouteSharedData(p.slug,C,A);for(const C of a){const A=v(w.localizationFolder,P,C.from);t.addRedirect(A,{type:C.type,to:p.slug},{trackOriginalSource:!1})}}}return t.newRoutes=[],{...e,slugify:d};function d(o){const l=q(o).replace(new RegExp("^(@i18n|@l10n)\\/"),""),i=s.fileSlugs.get(l)||s.dirSlugs.get(T(l));if(i)return i;const{baseName:a,isIndexFile:c}=Re(o);let f=_.dirname(o.replace(new RegExp("^(@i18n|@l10n)\\/"),""));return f=f==="."?"/":f,v("/",me(c?f:v(f,a)),"/")}function R(o,l=""){const i=V(o);if(!i?.versionName)return;const{versionFolderPath:a,filePathInVersion:c,versionName:f}=i,g=m.get(a);if(g)return g.versions.map(n=>{const P=g.defaultVersion===n.version,p=L(v(a,k+n.version,c)),C=d(p);return{version:n.version,label:n.name||n.version,link:F(v(C,l)),default:P,active:f===n.version,folderId:$(`${a}`)}})}}function Ae(t,e){return{fs:t,cache:e,getConfig:async(r=".")=>(await e.load(r,"nearest-redocly-config",t.localeFolders)).data,isPathIgnored:async r=>(await e.load(r,"is-ignored")).data,withPathPrefix:N,logger:h}}export{be as INTERNAL_PLUGINS,Ae as createLifecycleContext,bt as initPlugins,Et as runPlugins,O as writeClientEntries};
1
+ import F from"@redocly/portal-plugin-mock-server";import{REDOCLY_ROUTE_RBAC as B}from"@redocly/config";import{combineUrls as E,withPathPrefix as k}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as x}from"../constants/common.js";import{removeTrailingSlash as L}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as N}from"../../utils/url/remove-leading-slash.js";import{isTruthy as j}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as D}from"../../utils/path/normalize-route-slug.js";import{parsePathVersions as q}from"../../utils/path/parse-path-versions.js";import{reporter as w}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{envConfig as S}from"../config/env-config.js";import{shaDirPathShort as V}from"../utils/crypto/sha-dir-path-short.js";import{writeServerRebuildTrigger as _}from"../esbuild/generate.js";import{customPagesPlugin as $}from"../../server/plugins/pages/index.js";import{apiDocsPlugin as M}from"../../server/plugins/api-docs/index.js";import{configParserPlugin as z}from"./config-parser/index.js";import{createSlugify as H}from"./create-slugify.js";import{markdownPlugin as U}from"./markdown/index.js";import{generateBrowserPluginsModule as G,generateClientRoutes as I,generateTemplatesModule as W}from"../esbuild/generate.js";import{searchPlugin as K}from"./search/index.js";import{skillsPlugin as Y}from"./skills/index.js";import{defaultThemePlugin as J}from"./default-theme/index.js";import{apiKeyMgmtPlugin as Q}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as X}from"./api-functions/index.js";import{scorecardClassicPlugin as Z}from"./scorecard-classic/index.js";import{lintPlugin as ee}from"./lint/index.js";import{resolveExternalPlugins as te}from"../external-plugins/resolve-external-plugins.js";import{sidebarsPlugin as oe}from"./sidebars/index.js";import{l10nPlugin as ie}from"./l10n/index.js";import{validateRedirects as re}from"../utils/redirects/validate-redirects.js";import{analyticsPlugins as ne}from"./analytics/index.js";import{sitemapPlugin as se}from"./sitemap/index.js";import{entitlementsPlugin as ae}from"./entitlements/index.js";import{getBilledPagesCount as le}from"../utils/index.js";import{telemetry as ce}from"../../cli/telemetry/index.js";import{telemetryTraceStep as b}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as T}from"../entitlements/entitlements-provider.js";import{enforceLoginPlugin as ue}from"./enforce-login/index.js";import{ssoPlugin as fe}from"./sso/index.js";import{Cache as me}from"../fs/cache.js";import{ContentFs as de}from"../fs/content-fs.js";import{findProductBySlug as ge}from"../utils/product.js";import{isRouteReserved as pe}from"./get-reserved-routes.js";import{catalogClassicPlugin as Pe}from"./catalog-classic/index.js";import{arazzoDocsPlugin as ye}from"./arazzo-docs/index.js";const he=[z,ue,fe,J,ie,U,M,ye,Z,ee,X,$,Q,Pe,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>S.NEW_CATALOG_ENABLED??!1},{importPath:"./scorecards/plugin.js",loadCondition:()=>S.NEW_SCORECARDS_ENABLED??!1},{importPath:"./mcp/index.js",loadCondition:()=>T.instance().canAccessFeature("mcp")},oe,se,ae,K,Y,F,...ne];async function gt(t,e=he){return await b("com.redocly.build.pluginsInit",async()=>{const r=[],R=T.instance(),y={};for(const s of e){let u;if("loadCondition"in s){if(!s.loadCondition())continue;const o=await import(s.importPath);if(!o.default||typeof o.default!="function"){await w.panicOnBuild(`Dynamic plugin ${s.importPath} does not export a default export or it is not a function`);continue}u=o.default}else u=s;const h=await u(t);for(const[o,f]of Object.entries(h.loaders||{}))y[o]&&await w.panicOnBuild(`Duplicate loader with name ${o}`),y[o]=f;(!h.requiredEntitlements||h.requiredEntitlements?.every(o=>R.canAccessFeature(o)))&&r.push(h)}const l=new de(t.contentDir);await l.ready;const c=new me(l);return c.setLoaders(y),P.verbose("All plugins instantiated"),{pluginInstances:r,lifecycleContext:we(l,c)}})}function O(t){P.verbose("Generating templates"),b("com.redocly.build.writeClientEntries",()=>{W(t),G(t),I(t)})}async function Re(t){const e=t.getAllRoutes();le(e)||await w.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function pt(t,e,r,R={}){const y=T.instance();try{await b("com.redocly.build.pluginsRun",async()=>{e.startPluginsRun();const l=S.isDevelopMode&&e.buildRevision>0,c=l?Array.from(e.apiRoutesRequestHandlers.keys()).sort().join(","):"";let s=[];await b("com.redocly.build.pluginsProcessContent",async o=>{for(const i of t){const a=P.startTiming();await i.processContent?.(e,r),P.verboseTime(a,`processContent for ${i.id}`)}s=(await te(e.contentDir,e.config.plugins)).map(i=>i.lifecyclePlugin).filter(i=>j(i)&&(!i.requiredEntitlements||i.requiredEntitlements?.every(a=>y.canAccessFeature(a)))),r.cache.setLoaders(Object.fromEntries(s.flatMap(i=>Object.entries(i.loaders||{}))));for(const i of s){const a=P.startTiming();await i.processContent?.(e,r),P.verboseTime(a,`processContent for ${i.id}`)}o?.setAttribute("externalPluginsProcessed",s.length.toString())});const u=await Ce(e,r),h=[...t,...s];if(O(e),S.isDevelopMode?await e.userCodeReady:e.buildRevision++,await b("com.redocly.build.pluginsAfterRoutesCreated",async()=>{for(const o of h){const f=P.startTiming();await o.afterRoutesCreated?.(e,u),P.verboseTime(f,`afterRoutesCreated for ${o.id}`)}}),re(e),await e.reportUnsetEnvVars(),await Re(e),O(e),l){const o=Array.from(e.apiRoutesRequestHandlers.keys()).sort().join(",");c!==o&&(e.markRequestHandlersEntryOutdated(),_(e.serverOutDir))}})}catch(l){const c="Unhandled error in plugin. "+l.message+`
2
+ `+l.stack;ce.sendCliErrorCaughtMessage([{id:"cli",object:"error",uri:"urn:redocly:realm:cli:error:cli",message:c}]),R.failFast?await w.panic(c):await w.panicOnBuild(c)}finally{e.finishPluginsRun()}}async function Ce(t,e){const{cache:r,fs:R}=e,y=await e.getConfig(),l=Object.values(y.products||{}),c=(await r.load("versions-config","versions-config")).data,s=(await r.load("content-slugs","content-slugs")).data,u=H(s);for(const{duplicateInAllLocales:o,slugSuffix:f,sharedData:i=[],redirectFrom:a=[],...d}of t.newRoutes){const v=D(d.slug?d.slug:u(d.fsPath)),g=L(f?E(v,f):v),n={...d,[B]:{slug:g,fsPath:d.fsPath},slug:g,baseSlug:v,versions:h(d.fsPath,f),product:ge(l,g,u)};pe(g,y)&&await w.panicOnBuildContentError(`Route "${g}" is reserved and cannot be used. Please choose a different slug for "${d.fsPath}".`),t.routesByFsPath.set(n.fsPath,n.slug),t.routesBySlug.set(n.slug,n);for(const{key:p,id:m}of i)t.addRouteSharedData(n.slug,p,m);for(const p of a)t.addRedirect(p.from,{type:p.type,to:n.slug});if(o)for(const p of R.localeFolders){const m={...n,slug:"/"+p.toLowerCase()+n.slug};t.routesByFsPath.set(m.fsPath,m.slug),t.routesBySlug.set(m.slug,m);for(const{key:C,id:A}of i)t.addRouteSharedData(m.slug,C,A);for(const C of a){const A=E(R.localizationFolder,p,C.from);t.addRedirect(A,{type:C.type,to:m.slug},{trackOriginalSource:!1})}}}return t.newRoutes=[],{...e,slugify:u};function h(o,f=""){const i=q(o);if(!i?.versionName)return;const{versionFolderPath:a,filePathInVersion:d,versionName:v}=i,g=c.get(a);if(g)return g.versions.map(n=>{const p=g.defaultVersion===n.version,m=N(E(a,x+n.version,d)),C=u(m);return{version:n.version,label:n.name||n.version,link:D(E(C,f)),default:p,active:v===n.version,folderId:V(`${a}`)}})}}function we(t,e){return{fs:t,cache:e,getConfig:async(r=".")=>(await e.load(r,"nearest-redocly-config",t.localeFolders)).data,isPathIgnored:async r=>(await e.load(r,"is-ignored")).data,withPathPrefix:k,logger:P}}export{he as INTERNAL_PLUGINS,we as createLifecycleContext,gt as initPlugins,pt as runPlugins,O as writeClientEntries};
@@ -1,7 +1,9 @@
1
1
  import type { Node } from '@markdoc/markdoc';
2
+ import type { OpenAPIDefinition, RawApiDocsOptions } from '@redocly/api-docs';
2
3
  import type { LifecycleContext } from '../../../../types';
3
- import type { BundledDefinition } from '../../../openapi-docs/load-definition.js';
4
- type OpenapiBundle = Pick<BundledDefinition, 'definition' | 'rawOptions'>;
4
+ export type OpenapiBundle = {
5
+ definition: OpenAPIDefinition;
6
+ rawOptions: RawApiDocsOptions;
7
+ };
5
8
  export declare function loadOpenapiBundle(node: Node, context: LifecycleContext): Promise<OpenapiBundle | undefined>;
6
- export {};
7
9
  //# sourceMappingURL=load-openapi-bundle.d.ts.map
@@ -1 +1 @@
1
- import{OPENAPI_SHARED_DATA_PREFIX as n}from"../../../../constants/plugins/openapi-docs.js";import{getNodeAttribute as a}from"../../../../../markdoc/helpers/get-node-attribute.js";import{logger as d}from"../../../../tools/notifiers/logger.js";async function l(r,i){const e=a(r,"descriptionFile");if(typeof e!="string"||!e.startsWith(n))return;const o=e.slice(n.length);try{const{data:t}=await i.cache.load(o,"load-oas");return t?.[0]}catch(t){d.verbose(`Failed to load OpenAPI definition ${o} for the ${r.tag} tag: ${t instanceof Error?t.message:"Unknown error"}`);return}}export{l as loadOpenapiBundle};
1
+ import{API_DOCS_SHARED_DATA_PREFIX as r}from"../../../../constants/plugins/api-docs.js";import{getNodeAttribute as p}from"../../../../../markdoc/helpers/get-node-attribute.js";import{logger as s}from"../../../../tools/notifiers/logger.js";async function l(i,a){const e=p(i,"descriptionFile");if(typeof e!="string"||!e.startsWith(r))return;const o=e.slice(r.length);try{const{data:t}=await a.cache.load(o,"api-doc"),n=t?.find(d=>d.type==="openapi");return n?{definition:n.document,rawOptions:n.options}:void 0}catch(t){s.verbose(`Failed to load OpenAPI definition ${o} for the ${i.tag} tag: ${t instanceof Error?t.message:"Unknown error"}`);return}}export{l as loadOpenapiBundle};
@@ -1 +1 @@
1
- import{JsonPointer as w}from"@redocly/openapi-docs";import{isObject as d}from"../../../../utils/guards/is-object.js";import{getNodeAttribute as u}from"../../../../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as s}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{MdResolveError as p}from"./md-resolve-error.js";import{resolvePathInMarkdown as $}from"../resolve-path-in-markdown.js";async function b(e,o,m,{context:n,actions:h}){const r=u(e,o);try{if(!d(r)||typeof r.$ref!="string"){try{JSON.stringify(r)}catch(i){throw new Error(`Invalid JSON value: ${i.message}`)}s(e,o+"Resolved",r);return}const[t,f]=r.$ref.split("#");if(!t)throw new Error(`Invalid $ref. Path to file is required: ${r.$ref}`);const l=$(t,m,h.contentDir),c=await n.fs.getFileInfo(l);if(!c)throw new Error(`Invalid $ref. No such file: ${l}`);let a;try{a=(await n.cache.load(c.realRelativePath,"yaml")).data}catch(i){throw new Error(`Invalid file format. File must be valid json or yaml: ${l} ${i?.message||""}`)}if(!f){s(e,o+"Resolved",a);return}const v=w.get(a,f);s(e,o+"Resolved",v)}catch(t){throw s(e,o+"ResolvedErrors",[t.message]),new p(t.message,{rawLink:""})}}export{b as resolveJsonExampleRef};
1
+ import{JsonPointer as w}from"@redocly/api-docs";import{isObject as d}from"../../../../utils/guards/is-object.js";import{getNodeAttribute as u}from"../../../../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as s}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{MdResolveError as p}from"./md-resolve-error.js";import{resolvePathInMarkdown as $}from"../resolve-path-in-markdown.js";async function b(e,o,m,{context:n,actions:h}){const r=u(e,o);try{if(!d(r)||typeof r.$ref!="string"){try{JSON.stringify(r)}catch(i){throw new Error(`Invalid JSON value: ${i.message}`)}s(e,o+"Resolved",r);return}const[t,f]=r.$ref.split("#");if(!t)throw new Error(`Invalid $ref. Path to file is required: ${r.$ref}`);const l=$(t,m,h.contentDir),c=await n.fs.getFileInfo(l);if(!c)throw new Error(`Invalid $ref. No such file: ${l}`);let a;try{a=(await n.cache.load(c.realRelativePath,"yaml")).data}catch(i){throw new Error(`Invalid file format. File must be valid json or yaml: ${l} ${i?.message||""}`)}if(!f){s(e,o+"Resolved",a);return}const v=w.get(a,f);s(e,o+"Resolved",v)}catch(t){throw s(e,o+"ResolvedErrors",[t.message]),new p(t.message,{rawLink:""})}}export{b as resolveJsonExampleRef};
@@ -1 +1 @@
1
- import f from"node:path";import{OPENAPI_SHARED_DATA_PREFIX as p}from"../../../constants/plugins/openapi-docs.js";import{getNodeAttribute as A}from"../../../../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as w}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{isOpenapiDoc as d}from"../../openapi-docs/is-openapi-doc.js";import{MdResolveError as a}from"./md-resolve-error.js";import{getLinkOriginalAttrName as g}from"./utils.js";async function O(r,t,e,{context:n}){const s=g(t);let o=r[s]||A(r,t);if(o||await d(e,n)&&(o=f.basename(e)),r[s]=o,!o)return;const i=f.posix.join(f.posix.dirname(e),o),m=p+i;if(w(r,t,m),!n.fs.exists(i))throw new a(`Definition file ${i} does not exist`,{rawLink:i});if(await n.isPathIgnored(i))throw new a(`Definition file ${i} is ignored in config`,{rawLink:i});return{sharedDataId:m}}export{O as resolveOpenApiRef};
1
+ import f from"node:path";import{API_DOCS_SHARED_DATA_PREFIX as p}from"../../../constants/plugins/api-docs.js";import{getNodeAttribute as A}from"../../../../markdoc/helpers/get-node-attribute.js";import{setNodeAttributeValue as w}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{isOpenapiDoc as d}from"../../openapi-docs/is-openapi-doc.js";import{MdResolveError as a}from"./md-resolve-error.js";import{getLinkOriginalAttrName as g}from"./utils.js";async function R(r,t,e,{context:n}){const s=g(t);let o=r[s]||A(r,t);if(o||await d(e,n)&&(o=f.basename(e)),r[s]=o,!o)return;const i=f.posix.join(f.posix.dirname(e),o),m=p+i;if(w(r,t,m),!n.fs.exists(i))throw new a(`Definition file ${i} does not exist`,{rawLink:i});if(await n.isPathIgnored(i))throw new a(`Definition file ${i} is ignored in config`,{rawLink:i});return{sharedDataId:m}}export{R as resolveOpenApiRef};
@@ -1 +1 @@
1
- import{normalizeOptions as y}from"@redocly/openapi-docs";import{buildCodeSamples as f}from"@redocly/openapi-docs/lib/services/code-samples/build-code-samples.js";import{getOperation as v}from"../../../../markdoc/helpers/get-operation/index.js";import{setNodeAttributeValue as O}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{getMediaContentSamples as S}from"./helpers/get-media-content-samples.js";import{loadOpenapiBundle as b}from"./helpers/load-openapi-bundle.js";import{getOptionalAttribute as a}from"./utils.js";const h={curl:"shell",JavaScript:"javascript","Node.js":"javascript",Python:"python",Java:"java","Java8+Apache":"java","C#":"csharp","C#+Newtonsoft":"csharp",PHP:"php",Go:"go",Ruby:"ruby",R:"r"},C=(e,n)=>typeof n=="string"?n:String(e??"");async function K(e,n,w,{context:u}){const o=await b(e,u);if(!o)return;const m=a(e,"language"),r={exampleKey:a(e,"exampleKey"),mimeType:a(e,"mimeType"),parameters:a(e,"parameters"),requestBody:a(e,"requestBody"),environments:a(e,"environments"),environment:a(e,"environment")},c=m?{...o.rawOptions,codeSamples:{...o.rawOptions.codeSamples,languages:[{lang:m}]}}:o.rawOptions,i=y(c),s=v({definition:o.definition,options:c},{operationId:a(e,"operationId"),pointer:a(e,"pointer")},i,r);if(!s)return;const p=f(s,i,o.definition,r,C).map(t=>({lang:h[t.lang]??t.lang.toLowerCase(),title:t.label??t.lang,source:t.source})),g=i.codeSamples.languages??[],l=g.find(({lang:t})=>t==="Payload");if(l){const t=S(s.payload?.requestBodyContent,r.exampleKey,l.label??"Payload"),d=g.indexOf(l);p.splice(d,0,...t)}p.length&&O(e,n,p)}export{K as resolveOpenapiCodeSamples};
1
+ import{buildCodeSamples as y,getRequestBodySamples as v,normalizeOptions as d,resolveOperationSampleContext as f}from"@redocly/api-docs";import{setNodeAttributeValue as S}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{loadOpenapiBundle as O}from"./helpers/load-openapi-bundle.js";import{getOptionalAttribute as t}from"./utils.js";const b={curl:"shell",JavaScript:"javascript","Node.js":"javascript",Python:"python",Java:"java","Java8+Apache":"java","C#":"csharp","C#+Newtonsoft":"csharp",PHP:"php",Go:"go",Ruby:"ruby",R:"r"};async function B(e,c,h,{context:u}){const o=await O(e,u);if(!o)return;const s=t(e,"language"),r={exampleKey:t(e,"exampleKey"),mimeType:t(e,"mimeType"),parameters:t(e,"parameters"),requestBody:t(e,"requestBody"),environments:t(e,"environments"),environment:t(e,"environment")},g={...o.rawOptions,...o.rawOptions.mockServer&&{mockServer:{...o.rawOptions.mockServer,position:"off"}},...s&&{codeSamples:{...o.rawOptions.codeSamples,languages:[{lang:s}]}}},l=d(g),n=f(o.definition,l,{operationId:t(e,"operationId"),pointer:t(e,"pointer")});if(!n)return;const i=y(n,r).map(a=>({lang:b[a.lang]??a.lang.toLowerCase(),title:a.label??a.lang,source:a.source})),m=l.codeSamples?.languages??[],p=m.findIndex(({lang:a})=>a==="Payload");if(p!==-1){const a=v(n,{exampleKey:r.exampleKey,mimeType:r.mimeType,titlePrefix:m[p].label});i.splice(p,0,...a)}i.length&&S(e,c,i)}export{B as resolveOpenapiCodeSamples};
@@ -1 +1 @@
1
- import{normalizeOptions as s}from"@redocly/openapi-docs";import{getOperation as l}from"../../../../markdoc/helpers/get-operation/index.js";import{setNodeAttributeValue as f}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{getMediaContentSamples as c}from"./helpers/get-media-content-samples.js";import{loadOpenapiBundle as u}from"./helpers/load-openapi-bundle.js";import{getOptionalAttribute as o}from"./utils.js";async function h(t,a,O,{context:m}){const e=await u(t,m);if(!e)return;const i=o(t,"exampleKey"),n=l({definition:e.definition,options:e.rawOptions},{operationId:o(t,"operationId"),pointer:o(t,"pointer")},s(e.rawOptions),{exampleKey:i});if(!n)return;const r=(n.responses??[]).flatMap(p=>c(p.content,i,`${p.code}`));r.length&&f(t,a,r)}export{h as resolveOpenapiResponseSamples};
1
+ import{getResponseSamples as s,normalizeOptions as l,resolveOperationSampleContext as m}from"@redocly/api-docs";import{setNodeAttributeValue as f}from"../../../../markdoc/helpers/set-node-attribute-value.js";import{loadOpenapiBundle as u}from"./helpers/load-openapi-bundle.js";import{getOptionalAttribute as o}from"./utils.js";async function g(e,p,c,{context:r}){const t=await u(e,r);if(!t)return;const a=o(e,"exampleKey"),i=m(t.definition,l(t.rawOptions),{operationId:o(e,"operationId"),pointer:o(e,"pointer")});if(!i)return;const n=s(i,{exampleKey:a});n.length&&f(e,p,n)}export{g as resolveOpenapiResponseSamples};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as y}from"@redocly/config";import{MARKDOC_PARTIALS_DATA_KEY as D}from"../../constants/common.js";import{reporter as R}from"../../tools/notifiers/reporter.js";import{canAccessFeature as g}from"../../utils/entitlements/can-access-feature.js";import{extractMdFirstHeading as A,getAst as T}from"./compiler.js";import{getTemplatePath as w}from"./get-template-path.js";import{prepareMarkdocPartials as M}from"./markdoc/partials.js";import{searchResolver as C}from"./search/search-resolver.js";import{markdownStaticDataLoader as E}from"./markdown-static-data-loader.js";import{makeErrorRoute as I}from"../error-route.js";import{validateRbacConfig as O}from"../validate-rbac-config.js";import{findFrontmatterSlugs as _,getSidebarSharedDataId as G,resolveFrontmatterSlugs as L}from"../utils.js";import{isPartial as j}from"./is-partial.js";import{markdownFrontmatterLoader as B}from"./markdown-frontmatter-loader.js";import{resolveRawPartials as K}from"./markdoc/resolve-raw-partials.js";import{getAiDocumentsStore as N}from"./search/get-ai-search-documents.js";import{registerPageProps as Y}from"../register-page-props.js";import{resolveMarkdownTemplate as q}from"./utils/resolve-markdown-template.js";import{sanitizeMalformedMdContent as z}from"./utils/sanitize-malformed-md-content.js";import{telemetryTraceStep as H}from"../../../cli/telemetry/helpers/trace-step.js";async function le(h){return{id:"markdoc",requiredEntitlements:["markdown"],loaders:{"markdown-frontmatter":B,"markdown-ast":async(e,t)=>{const i=await t.fs.read(e),m=await t.getConfig(),s=await K(i,e,m?.markdown?.partialsFolders,t),n=z(s);return T(e,n)}},processContent:async(e,t)=>{await H("build.plugin.markdown",async i=>{const{markdown:m}=await t.getConfig();i?.setAttribute("config",JSON.stringify(m||{}));const s=m?.partialsFolders??[],n=e.createTemplate("markdown","@redocly/theme/core/templates/Markdown"),S=e.registerServerPropsGetter("markdown",w("./get-server-props.js"));e.createTemplate("error",w("../../../client/app/Error/ErrorDetails.js"));for(const o of t.fs.scan(/\.md$/))if(!await t.isPathIgnored(o.relativePath)&&!j(o.relativePath,s))try{await k(o)}catch(a){e.addRoute(I(o.relativePath,a)),i?.error(a),await R.panicOnBuild("Failed to create route for markdown file: %s",a.message)}async function k(o){const{relativePath:a,realRelativePath:b}=o,{data:{frontmatter:r}}=await t.cache.load(a,"markdown-frontmatter"),P=r?.metadata||{},F=await _(a,"markdown-frontmatter",r,t),p=L(F,a);let d=null;r?.sidebar&&(d=await G(r.sidebar,a,t.fs));let u=n;const f=q({realRelativePath:b,frontmatter:r,markdown:m,contentDir:h.contentDir});f&&(u=e.createTemplate(f.templateRef,f.templatePath)),r?.rbac&&(g("rbac")?O({content:{[a]:r.rbac}}):r.rbac=void 0),g("banner")||(r.banner=void 0),await Y(o,t.fs,e),(p.length?p.reverse():[void 0]).forEach(v=>{e.addRoute({excludeFromSearch:r?.excludeFromSearch||!1,slug:v,fsPath:a,templateId:u,sharedData:d?[{id:d,key:"sidebar"}]:void 0,redirectFrom:Object.entries(r.redirects||{}).map(([l,{type:c}])=>({type:c||301,from:l})),[y]:r?.rbac,getNavText:async()=>(r?.seo?.title||await A(a,t)||"").toString(),metadata:{type:"markdown",...P},async getStaticData(l,c){return E(o,l,t,r,c)},getSearchDocuments:C(r,a,e.getSearchFacets,e.setSearchFacets),getAiDocumentsStore:N(e.getSearchFacets,r),serverPropsGetterIds:[S]})})}})},afterRoutesCreated:async(e,t)=>{const i=await M(t,e);e.setGlobalConfig({[D]:i})}}}export{le as markdownPlugin};
1
+ import{REDOCLY_TEAMS_RBAC as v}from"@redocly/config";import{MARKDOC_PARTIALS_DATA_KEY as D}from"../../constants/common.js";import{reporter as R}from"../../tools/notifiers/reporter.js";import{canAccessFeature as g}from"../../utils/entitlements/can-access-feature.js";import{extractMdFirstHeading as A,getAst as T}from"./compiler.js";import{getTemplatePath as w}from"./get-template-path.js";import{prepareMarkdocPartials as M}from"./markdoc/partials.js";import{searchResolver as C}from"./search/search-resolver.js";import{markdownStaticDataLoader as E}from"./markdown-static-data-loader.js";import{makeErrorRoute as I}from"../error-route.js";import{validateRbacConfig as O}from"../validate-rbac-config.js";import{findFrontmatterSlugs as _,getSidebarSharedDataId as G,resolveFrontmatterSlugs as L}from"../utils.js";import{isPartial as j}from"./is-partial.js";import{markdownFrontmatterLoader as B}from"./markdown-frontmatter-loader.js";import{resolveRawPartials as K}from"./markdoc/resolve-raw-partials.js";import{getAiDocumentsStore as N}from"./search/get-ai-search-documents.js";import{registerPageProps as Y}from"../register-page-props.js";import{resolveMarkdownTemplate as q}from"./utils/resolve-markdown-template.js";import{sanitizeMalformedMdContent as z}from"./utils/sanitize-malformed-md-content.js";import{telemetryTraceStep as H}from"../../../cli/telemetry/helpers/trace-step.js";async function ce(h){return{id:"markdoc",requiredEntitlements:["markdown"],loaders:{"markdown-frontmatter":B,"markdown-ast":async(e,t)=>{const i=await t.fs.read(e),m=await t.getConfig(),s=await K(i,e,m?.markdown?.partialsFolders,t),n=z(s);return T(e,n)}},processContent:async(e,t)=>{await H("com.redocly.build.plugin.markdown",async i=>{const{markdown:m}=await t.getConfig();i?.setAttribute("config",JSON.stringify(m||{}));const s=m?.partialsFolders??[],n=e.createTemplate("markdown","@redocly/theme/core/templates/Markdown"),S=e.registerServerPropsGetter("markdown",w("./get-server-props.js"));e.createTemplate("error",w("../../../client/app/Error/ErrorDetails.js"));for(const o of t.fs.scan(/\.md$/))if(!await t.isPathIgnored(o.relativePath)&&!j(o.relativePath,s))try{await k(o)}catch(a){e.addRoute(I(o.relativePath,a)),i?.error(a),await R.panicOnBuild("Failed to create route for markdown file: %s",a.message)}async function k(o){const{relativePath:a,realRelativePath:b}=o,{data:{frontmatter:r}}=await t.cache.load(a,"markdown-frontmatter"),P=r?.metadata||{},y=await _(a,"markdown-frontmatter",r,t),p=L(y,a);let d=null;r?.sidebar&&(d=await G(r.sidebar,a,t.fs));let u=n;const l=q({realRelativePath:b,frontmatter:r,markdown:m,contentDir:h.contentDir});l&&(u=e.createTemplate(l.templateRef,l.templatePath)),r?.rbac&&(g("rbac")?O({content:{[a]:r.rbac}}):r.rbac=void 0),g("banner")||(r.banner=void 0),await Y(o,t.fs,e),(p.length?p.reverse():[void 0]).forEach(F=>{e.addRoute({excludeFromSearch:r?.excludeFromSearch||!1,slug:F,fsPath:a,templateId:u,sharedData:d?[{id:d,key:"sidebar"}]:void 0,redirectFrom:Object.entries(r.redirects||{}).map(([c,{type:f}])=>({type:f||301,from:c})),[v]:r?.rbac,getNavText:async()=>(r?.seo?.title||await A(a,t)||"").toString(),metadata:{type:"markdown",...P},async getStaticData(c,f){return E(o,c,t,r,f)},getSearchDocuments:C(r,a,e.getSearchFacets,e.setSearchFacets),getAiDocumentsStore:N(e.getSearchFacets,r),serverPropsGetterIds:[S]})})}})},afterRoutesCreated:async(e,t)=>{const i=await M(t,e);e.setGlobalConfig({[D]:i})}}}export{ce as markdownPlugin};
@@ -24,7 +24,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
24
24
  };
25
25
  }>>): import("@markdoc/markdoc").MaybePromise<import("@markdoc/markdoc").RenderableTreeNodes>;
26
26
  validate?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
27
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
27
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
28
28
  tags: Record<string, import("@markdoc/markdoc").Schema>;
29
29
  variables: Record<string, any>;
30
30
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -45,7 +45,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
45
45
  selfClosing?: boolean;
46
46
  inline?: boolean;
47
47
  transform?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
48
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
48
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
49
49
  tags: Record<string, import("@markdoc/markdoc").Schema>;
50
50
  variables: Record<string, any>;
51
51
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -57,7 +57,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
57
57
  };
58
58
  }>>): import("@markdoc/markdoc").MaybePromise<import("@markdoc/markdoc").RenderableTreeNodes>;
59
59
  validate?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
60
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
60
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
61
61
  tags: Record<string, import("@markdoc/markdoc").Schema>;
62
62
  variables: Record<string, any>;
63
63
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -78,7 +78,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
78
78
  selfClosing?: boolean;
79
79
  inline?: boolean;
80
80
  transform?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
81
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
81
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
82
82
  tags: Record<string, import("@markdoc/markdoc").Schema>;
83
83
  variables: Record<string, any>;
84
84
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -90,7 +90,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
90
90
  };
91
91
  }>>): import("@markdoc/markdoc").MaybePromise<import("@markdoc/markdoc").RenderableTreeNodes>;
92
92
  validate?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
93
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
93
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
94
94
  tags: Record<string, import("@markdoc/markdoc").Schema>;
95
95
  variables: Record<string, any>;
96
96
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -110,7 +110,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
110
110
  selfClosing?: boolean;
111
111
  inline?: boolean;
112
112
  transform?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
113
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
113
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
114
114
  tags: Record<string, import("@markdoc/markdoc").Schema>;
115
115
  variables: Record<string, any>;
116
116
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -122,7 +122,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
122
122
  };
123
123
  }>>): import("@markdoc/markdoc").MaybePromise<import("@markdoc/markdoc").RenderableTreeNodes>;
124
124
  validate?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
125
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
125
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
126
126
  tags: Record<string, import("@markdoc/markdoc").Schema>;
127
127
  variables: Record<string, any>;
128
128
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -144,7 +144,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
144
144
  selfClosing?: boolean;
145
145
  inline?: boolean;
146
146
  transform?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
147
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
147
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
148
148
  tags: Record<string, import("@markdoc/markdoc").Schema>;
149
149
  variables: Record<string, any>;
150
150
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -156,7 +156,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
156
156
  };
157
157
  }>>): import("@markdoc/markdoc").MaybePromise<import("@markdoc/markdoc").RenderableTreeNodes>;
158
158
  validate?(node: import("@markdoc/markdoc").Node, config: Readonly<Partial<{
159
- nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial</*elided*/ any>, string>>>;
159
+ nodes: Partial<Record<import("@markdoc/markdoc").NodeType, import("@markdoc/markdoc").Schema<Partial<any>, string>>>;
160
160
  tags: Record<string, import("@markdoc/markdoc").Schema>;
161
161
  variables: Record<string, any>;
162
162
  functions: Record<string, import("@markdoc/markdoc").ConfigFunction>;
@@ -4,6 +4,11 @@ export declare function getHeadingData(node: Tag | Node): {
4
4
  id: any;
5
5
  depth: any;
6
6
  } | undefined;
7
+ export declare function getNumberedItemHeadingData(node: Tag | Node): {
8
+ value: string;
9
+ id: any;
10
+ depth: any;
11
+ } | undefined;
7
12
  export declare function extractFirstHeading(ast: Node): undefined | string;
8
13
  export declare const EXIT: unique symbol;
9
14
  /**
@@ -1 +1 @@
1
- import{isNode as l}from"../../../../../markdoc/helpers/guards/is-node.js";import{isStringNode as s}from"../../../../../markdoc/helpers/guards/is-string-node.js";import{getNodeAttribute as c}from"../../../../../markdoc/helpers/get-node-attribute.js";import{getInnerText as a}from"../../../../../markdoc/helpers/get-inner-text.js";function p(t){const r=c(t,"level");if(r)return{value:a(t.children),id:c(t,"id"),depth:r}}function h(t){let r;return f(t,i=>{if(l(i)&&i.type==="heading")return r=p(i)?.value,o}),r}const o=Symbol("Exit visitor");function f(t,r){if(!t)return;const i=r(t);if(i===o)return i;for(const e of t.children){if(!e||s(e))continue;const n=f(e,r);if(n===o)return n}const u=t.slots||{};for(const e of Object.values(u)){if(!e||s(e))continue;const n=f(e,r);if(n===o)return n}}export{o as EXIT,h as extractFirstHeading,p as getHeadingData,f as visit};
1
+ import{isNode as l}from"../../../../../markdoc/helpers/guards/is-node.js";import{isStringNode as f}from"../../../../../markdoc/helpers/guards/is-string-node.js";import{getNodeAttribute as o}from"../../../../../markdoc/helpers/get-node-attribute.js";import{getInnerText as a}from"../../../../../markdoc/helpers/get-inner-text.js";function d(t){const e=o(t,"level");if(e)return{value:a(t.children),id:o(t,"id"),depth:e}}function x(t){const e=o(t,"headlineLevel"),r=o(t,"anchorId"),s=o(t,"headline");if(!(!e||!r||!Array.isArray(s)))return{value:a(s),id:r,depth:e}}function v(t){let e;return u(t,r=>{if(l(r)&&r.type==="heading")return e=d(r)?.value,c}),e}const c=Symbol("Exit visitor");function u(t,e){if(!t)return;const r=e(t);if(r===c)return r;for(const i of t.children){if(!i||f(i))continue;const n=u(i,e);if(n===c)return n}const s=t.slots||{};for(const i of Object.values(s)){if(!i||f(i))continue;const n=u(i,e);if(n===c)return n}}export{c as EXIT,v as extractFirstHeading,d as getHeadingData,x as getNumberedItemHeadingData,u as visit};
@@ -1 +1 @@
1
- import u from"@markdoc/markdoc";import{isTag as b}from"../../../markdoc/helpers/guards/is-tag.js";import{slugger as l}from"../../utils/index.js";import{getMarkdocOptions as f}from"./markdoc/markdoc-options.js";import{visit as h,getHeadingData as k}from"./markdoc/plugins/utils.js";import{renderDiagramsWithVariants as v}from"./markdoc/plugins/render-diagrams.js";import{deepStringify as y}from"./markdoc/utils/deep-stringify.js";import{stringifyTagChildrenObjects as D}from"./utils/stringify-tag-children-objects.js";async function _(d,a,p){const g=await f(p),i=[],t=[],s=y(a.variables?.pageProps),{headers:H,...c}=a.variables||{};l.reset();const o=u.transform(d,{...g,...a,variables:{...c,pageProps:s}});let m=0;h(o,r=>{if(b(r)){switch(r.name){case"Heading":r.attributes.__idx=m,m++;const n=k(r);n&&i.push(n);break;case"Diagram":t.push({tag:r,input:{type:r.attributes.diagramType,source:r.attributes.diagramSource}});break}D(r)}});const e=await v(t.map(r=>r.input));for(let r=0;r<t.length;r++)t[r].tag.attributes.diagramError=e[r].error,t[r].tag.attributes.diagramHtml=e[r].light,t[r].tag.attributes.diagramHtmlDark=e[r].dark;return{headings:i,renderableAst:o,pageProps:s}}export{_ as transformMdAst};
1
+ import b from"@markdoc/markdoc";import{isTag as f}from"../../../markdoc/helpers/guards/is-tag.js";import{slugger as l}from"../../utils/index.js";import{getMarkdocOptions as h}from"./markdoc/markdoc-options.js";import{visit as k,getHeadingData as D,getNumberedItemHeadingData as H}from"./markdoc/plugins/utils.js";import{renderDiagramsWithVariants as v}from"./markdoc/plugins/render-diagrams.js";import{deepStringify as y}from"./markdoc/utils/deep-stringify.js";import{stringifyTagChildrenObjects as T}from"./utils/stringify-tag-children-objects.js";async function _(p,t,g){const u=await h(g),e=[],a=[],s=y(t.variables?.pageProps),{headers:w,...c}=t.variables||{};l.reset();const o=b.transform(p,{...u,...t,variables:{...c,pageProps:s}});let m=0;k(o,r=>{if(f(r)){switch(r.name){case"Heading":r.attributes.__idx=m,m++;const n=D(r);n&&e.push(n);break;case"NumberedItem":const d=H(r);d&&e.push(d);break;case"Diagram":a.push({tag:r,input:{type:r.attributes.diagramType,source:r.attributes.diagramSource}});break}T(r)}});const i=await v(a.map(r=>r.input));for(let r=0;r<a.length;r++)a[r].tag.attributes.diagramError=i[r].error,a[r].tag.attributes.diagramHtml=i[r].light,a[r].tag.attributes.diagramHtmlDark=i[r].dark;return{headings:e,renderableAst:o,pageProps:s}}export{_ as transformMdAst};
@@ -1,4 +1,5 @@
1
1
  import type { MarkdocTagSchema } from '@redocly/theme/markdoc/tags/types';
2
+ import type { TFunction } from '@redocly/theme/core/types';
2
3
  import type { RenderTagFn } from '../../../types/plugins/markdown';
3
- export declare function createRenderTagFn(markdocTags: Record<string, MarkdocTagSchema> | undefined): RenderTagFn;
4
+ export declare function createRenderTagFn(markdocTags: Record<string, MarkdocTagSchema> | undefined, locale: string, translate: TFunction): RenderTagFn;
4
5
  //# sourceMappingURL=create-render-tag-fn.d.ts.map
@@ -1 +1 @@
1
- function t(e){return(r,n)=>{if(r.tag)return e?.[r.tag]?.renderForLlms?.(r,n)}}export{t as createRenderTagFn};
1
+ function a(e,n,t){return(r,u)=>{if(r.tag)return e?.[r.tag]?.renderForLlms?.(r,{...u,locale:n,translate:t})}}export{a as createRenderTagFn};
@@ -1,9 +1,9 @@
1
- import _ from"@markdoc/markdoc";import D from"node:path";import{AI_SEARCH_CHUNK_SIZE as E,AI_SEARCH_DOCUMENT_CHUNK_SIZE as M}from"../../../constants/plugins/search.js";import{slugger as P}from"../../../../utils/slugger.js";import{joinSectionContent as U}from"./join-section-content.js";import{toMarkdown as b}from"./to-markdown.js";import{AstToSearchNodeTransformer as I}from"./walk-sections.js";import{createRenderTagFn as x}from"./create-render-tag-fn.js";import{getLocaleFromRelativePath as y}from"../../../fs/utils/get-locale-from-relative-path.js";import{HeadingNode as L}from"./nodes/heading-node.js";import{extractDocumentSearchFacets as H}from"./search-facets.js";import{formatDocumentMetadata as K}from"../../search/utils.js";import{TagNode as N}from"./nodes/tag-node.js";import{MARKDOC_PARTIALS_DATA_KEY as R}from"../../../constants/common.js";const j=Symbol(),et=(n,r)=>async(e,c,i,s)=>{if(r?.excludeFromSearch)return;P.reset();const a=await e.getNavText?.()||D.basename(e.fsPath),u=_.Ast.fromJSON(c.ast),f=new I({partials:s.getGlobalConfig(R)||{},renderTag:x(s.markdocOptions.tags),getInnerContent:b,ast:u,skipConditionals:!0}),d=Array.from(f.transform());return{async getLLMsTxts(){const o=r?.seo,g=o&&typeof o=="object"&&"description"in o?String(o.description):void 0,C=U(d);return[{title:a,description:g,slug:e.slug,fsPath:e.fsPath,content:C,includeInLLMsTxt:!0}]},async getSearchDocuments(){return F(e,d,n,a)}}};function F(n,r,e,c){const i=n.slug,s=new Map,a=n.metadata||{},u=H(a,e),f=K(a),d=f?`Metadata:
2
- ${f}
3
- `:"";let o=[];for(const t of r)if(t instanceof L){o.splice(t.attributes.level-1,6);const l=t.attributes.level>2,m=o[o.length-1]?.title,S=o[o.length-1]?.url,T=l&&m?m:O(c,t),A=l&&S?S:t.getUrl(i),h={title:T,content:"",url:A,level:t.attributes.level,toc:o.map(v=>p(v.section)).join(`
4
- `)};(t.attributes.level>1||p(t)!==c)&&(h.content+=h.content?`
5
- `:"",h.content+=t.content.trimEnd()),s.set(t.id,h),o.push({section:t,title:T,url:A})}else if(t instanceof N)s.set(t.id,{title:t.content,content:t.content,url:t.getUrl(i),level:t.attributes.level+1,toc:o.map(l=>p(l.section)).concat(t.content).join(`
6
- `)});else{const l=t.parentNode?.id??j,m=s.get(l)??{title:c,content:"",url:i,level:1/0,toc:""};m.content+=m.content?`
7
- `:"",m.content+=t.content.trimEnd(),s.set(l,m)}const g=w(Array.from(s.values())),C=y(n.fsPath);return g.filter(t=>t.content).map(t=>({title:t.title,url:t.url,content:[d,t.toc||`# ${c}`,t.content].filter(Boolean).join(`
8
- `),fsPath:n.fsPath,locale:C,product:n.product?.name,facets:u}))}function k(n){return n.length/4}function w(n){if(n.length===0)return[];const r=[];let e=n[0];for(let c=1;c<n.length;c++){const i=n[c],s=k(e.content),a=k(i.content),u=c===n.length-1;a<E&&(s<M||u)&&i.level>e.level?e.content+=`
9
- `+i.content:(r.push(e),e=i)}return r.push(e),r}function O(n,r){return r.content===n?n:`${n} \u2192 ${p(r)}`}function p(n){return n.content.replace(/^#+/,"").trim()}export{et as getAiDocumentsStore};
1
+ import _ from"@markdoc/markdoc";import D from"node:path";import{AI_SEARCH_CHUNK_SIZE as b,AI_SEARCH_DOCUMENT_CHUNK_SIZE as E}from"../../../constants/plugins/search.js";import{slugger as M}from"../../../../utils/slugger.js";import{joinSectionContent as P}from"./join-section-content.js";import{toMarkdown as U}from"./to-markdown.js";import{AstToSearchNodeTransformer as x}from"./walk-sections.js";import{createRenderTagFn as I}from"./create-render-tag-fn.js";import{getBuildTranslateContext as y}from"../../../utils/l10n/get-build-translate-context.js";import{getLocaleFromRelativePath as L}from"../../../fs/utils/get-locale-from-relative-path.js";import{HeadingNode as H}from"./nodes/heading-node.js";import{extractDocumentSearchFacets as K}from"./search-facets.js";import{formatDocumentMetadata as N}from"../../search/utils.js";import{TagNode as R}from"./nodes/tag-node.js";import{MARKDOC_PARTIALS_DATA_KEY as j}from"../../../constants/common.js";const w=Symbol(),rt=(n,o)=>async(e,r,i,c)=>{if(o?.excludeFromSearch)return;M.reset();const l=await e.getNavText?.()||D.basename(e.fsPath),f=_.Ast.fromJSON(r.ast),{locale:d,translate:C}=await y(e.slug,c.getGlobalData?.().l10n),s=new x({partials:c.getGlobalConfig(j)||{},renderTag:I(c.markdocOptions.tags,d,C),getInnerContent:U,ast:f,skipConditionals:!0}),g=Array.from(s.transform());return{async getLLMsTxts(){const u=o?.seo,t=u&&typeof u=="object"&&"description"in u?String(u.description):void 0,a=P(g);return[{title:l,description:t,slug:e.slug,fsPath:e.fsPath,content:a,includeInLLMsTxt:!0}]},async getSearchDocuments(){return F(e,g,n,l)}}};function F(n,o,e,r){const i=n.slug,c=new Map,l=n.metadata||{},f=K(l,e),d=N(l),C=d?`Metadata:
2
+ ${d}
3
+ `:"";let s=[];for(const t of o)if(t instanceof H){s.splice(t.attributes.level-1,6);const a=t.attributes.level>2,m=s[s.length-1]?.title,S=s[s.length-1]?.url,T=a&&m?m:$(r,t),A=a&&S?S:t.getUrl(i),h={title:T,content:"",url:A,level:t.attributes.level,toc:s.map(v=>p(v.section)).join(`
4
+ `)};(t.attributes.level>1||p(t)!==r)&&(h.content+=h.content?`
5
+ `:"",h.content+=t.content.trimEnd()),c.set(t.id,h),s.push({section:t,title:T,url:A})}else if(t instanceof R)c.set(t.id,{title:t.content,content:t.content,url:t.getUrl(i),level:t.attributes.level+1,toc:s.map(a=>p(a.section)).concat(t.content).join(`
6
+ `)});else{const a=t.parentNode?.id??w,m=c.get(a)??{title:r,content:"",url:i,level:1/0,toc:""};m.content+=m.content?`
7
+ `:"",m.content+=t.content.trimEnd(),c.set(a,m)}const g=O(Array.from(c.values())),u=L(n.fsPath);return g.filter(t=>t.content).map(t=>({title:t.title,url:t.url,content:[C,t.toc||`# ${r}`,t.content].filter(Boolean).join(`
8
+ `),fsPath:n.fsPath,locale:u,product:n.product?.name,facets:f}))}function k(n){return n.length/4}function O(n){if(n.length===0)return[];const o=[];let e=n[0];for(let r=1;r<n.length;r++){const i=n[r],c=k(e.content),l=k(i.content),f=r===n.length-1;l<b&&(c<E||f)&&i.level>e.level?e.content+=`
9
+ `+i.content:(o.push(e),e=i)}return o.push(e),o}function $(n,o){return o.content===n?n:`${n} \u2192 ${p(o)}`}function p(n){return n.content.replace(/^#+/,"").trim()}export{rt as getAiDocumentsStore};
@@ -1,3 +1,3 @@
1
- import{logger as N}from"../../../tools/notifiers/logger.js";import{isNode as f}from"../../../../markdoc/helpers/guards/is-node.js";import{isConditionalNode as T}from"../../../../markdoc/helpers/guards/is-conditional-node.js";import{isContentNode as m}from"../../../../markdoc/helpers/guards/is-content-node.js";import{getNodeAttribute as u}from"../../../../markdoc/helpers/get-node-attribute.js";import{extractRbacFromCondition as w}from"../../../../markdoc/helpers/extract-rbac-from-condition-node.js";import{TextNode as n}from"./nodes/text-node.js";import{TAG_TITLE_ATTRIBUTES as b,TagNode as p}from"./nodes/tag-node.js";import{HeadingNode as y}from"./nodes/heading-node.js";import{joinSectionContent as d}from"./join-section-content.js";class B{#s;#o;#e;#r;#c;constructor({ast:i,partials:t,skipConditionals:r=!1,getInnerContent:s,renderTag:o}){if(this.#s=i,this.#o=t,this.#e=r,this.#r=s,this.#c=o,!this.#s||!f(this.#s))throw new Error("ast is not a valid Markdoc Node.")}#i(){return{skipConditionals:this.#e,renderTag:this.#c}}*transform(){yield*this.#n(this.#s,{parentNode:null})}*#n(i,t,r=this.#r){if(!(!i||!f(i))){if(T(i)){if(this.#e)return;const s=w(i);s&&s.length>0&&(yield*this.#t(i,{...t,rbacTeams:s},r));return}if(m(i)){yield new n({node:i,content:r([i],this.#i()),...t});return}if(i.type==="heading"){yield new y({node:i,content:r([i],this.#i()),rbacTeams:t?.rbacTeams});return}if(i.type==="tag"){yield*this.#l(i,t,r);return}yield*this.#t(i,t,r)}}*#l(i,t,r=this.#r){switch(i.tag){case"partial":{const s=i.attributes.file,o=i.attributes.variables??{};if(s&&this.#o[s]){yield*this.#n(this.#o[s],t,(e,l)=>r(e,{...l,variables:o}));return}N.warn(`Could not create search indexes for partial \u201C${s}\u201D: file not found`);return}case"cards":case"tabs":case"code-walkthrough":{yield*this.#t(i,t,r);return}case"markdoc-example":{const s=r([i],this.#i());yield new n({node:i,content:s,...t});return}case"code-snippet":{const s=u(i,"title"),o=r([i],this.#i());if(s){const e=new p({node:i,content:s,...t});t={...t,parentNode:e},yield e}o&&(yield new n({node:i,content:o,...t}));return}default:{const s=this.#h(i,t,r);if(s){yield*s;return}const o=b.find(c=>c in i.attributes),e=(o&&u(i,o))??"",l=typeof e=="string"?e:r([e]);if(l){const c=new p({node:i,content:l,...t});t={...t,parentNode:c},yield c}if(a(i))yield*this.#t(i,t,r);else{const c=r([i],this.#i());c&&(yield new n({node:i,content:c,...t}))}return}}}#h(i,t,r){const s=()=>a(i)?d([...this.#t(i,t,r)]):"",o=this.#c?.(i,{getBody:s});return o===void 0?void 0:[new n({node:i,content:o.endsWith(`
1
+ import{logger as N}from"../../../tools/notifiers/logger.js";import{isNode as f}from"../../../../markdoc/helpers/guards/is-node.js";import{isConditionalNode as T}from"../../../../markdoc/helpers/guards/is-conditional-node.js";import{isContentNode as m}from"../../../../markdoc/helpers/guards/is-content-node.js";import{getNodeAttribute as u}from"../../../../markdoc/helpers/get-node-attribute.js";import{extractRbacFromCondition as w}from"../../../../markdoc/helpers/extract-rbac-from-condition-node.js";import{TextNode as n}from"./nodes/text-node.js";import{TAG_TITLE_ATTRIBUTES as b,TagNode as p}from"./nodes/tag-node.js";import{HeadingNode as y}from"./nodes/heading-node.js";import{joinSectionContent as d}from"./join-section-content.js";class B{#s;#o;#e;#r;#c;constructor({ast:i,partials:t,skipConditionals:r=!1,getInnerContent:s,renderTag:o}){if(this.#s=i,this.#o=t,this.#e=r,this.#r=s,this.#c=o,!this.#s||!f(this.#s))throw new Error("ast is not a valid Markdoc Node.")}#i(i={}){return{skipConditionals:this.#e,renderTag:this.#c,...i}}*transform(){yield*this.#n(this.#s,{parentNode:null})}*#n(i,t,r=this.#r){if(!(!i||!f(i))){if(T(i)){if(this.#e)return;const s=w(i);s&&s.length>0&&(yield*this.#t(i,{...t,rbacTeams:s},r));return}if(m(i)){yield new n({node:i,content:r([i],this.#i()),...t});return}if(i.type==="heading"){yield new y({node:i,content:r([i],this.#i()),rbacTeams:t?.rbacTeams});return}if(i.type==="tag"){yield*this.#l(i,t,r);return}yield*this.#t(i,t,r)}}*#l(i,t,r=this.#r){switch(i.tag){case"partial":{const s=i.attributes.file,o=i.attributes.variables??{};if(s&&this.#o[s]){yield*this.#n(this.#o[s],t,(e,l)=>r(e,{...l,variables:o}));return}N.warn(`Could not create search indexes for partial \u201C${s}\u201D: file not found`);return}case"cards":case"tabs":case"code-walkthrough":{yield*this.#t(i,t,r);return}case"markdoc-example":{const s=r([i],this.#i());yield new n({node:i,content:s,...t});return}case"code-snippet":{const s=u(i,"title"),o=r([i],this.#i());if(s){const e=new p({node:i,content:s,...t});t={...t,parentNode:e},yield e}o&&(yield new n({node:i,content:o,...t}));return}default:{const s=this.#h(i,t,r);if(s){yield*s;return}const o=b.find(c=>c in i.attributes),e=(o&&u(i,o))??"",l=typeof e=="string"?e:r([e]);if(l){const c=new p({node:i,content:l,...t});t={...t,parentNode:c},yield c}if(a(i))yield*this.#t(i,t,r);else{const c=r([i],this.#i());c&&(yield new n({node:i,content:c,...t}))}return}}}#h(i,t,r){const s=()=>a(i)?d([...this.#t(i,t,r)]):"",o=this.#c?.(i,{getBody:s});return o===void 0?void 0:[new n({node:i,content:o.endsWith(`
2
2
  `)?o:`${o}
3
3
  `,...t})]}*#t(i,t,r=this.#r){for(const s of[...Object.values(i.slots),...i.children])for(const o of this.#n(s,t,r))o instanceof y&&(t={...t,parentNode:o}),yield o}}function a(h){return h.children.length>0||Object.keys(h.slots).length>0}export{B as AstToSearchNodeTransformer};
@@ -9,5 +9,5 @@ export type ResolveMarkdownTemplateParams = {
9
9
  markdown?: MarkdownConfig;
10
10
  contentDir: string;
11
11
  };
12
- export declare function resolveMarkdownTemplate({ realRelativePath, frontmatter, markdown, contentDir }: ResolveMarkdownTemplateParams): ResolvedMarkdownTemplate | null;
12
+ export declare function resolveMarkdownTemplate({ realRelativePath, frontmatter, markdown, contentDir, }: ResolveMarkdownTemplateParams): ResolvedMarkdownTemplate | null;
13
13
  //# sourceMappingURL=resolve-markdown-template.d.ts.map
@@ -1,5 +1,7 @@
1
1
  import type { ApiFunctionsContext, ApiFunctionsUser } from '@redocly/config';
2
+ import type { Store } from '../../../store.js';
2
3
  export declare function shouldHandleMcpAuth(requiresLogin: boolean, rbacConfig?: Record<string, unknown>): boolean;
4
+ export declare function isMcpContentProtected(store: Store): boolean;
3
5
  export declare function handleMcpAuth(request: Request, context: ApiFunctionsContext): Promise<{
4
6
  isAuthenticated: boolean;
5
7
  isTokenValid?: boolean;
@@ -7,5 +9,6 @@ export declare function handleMcpAuth(request: Request, context: ApiFunctionsCon
7
9
  accessToken?: string;
8
10
  }>;
9
11
  export declare function constructUnauthorizedResponse(baseUrl: string): Response;
12
+ export declare function constructForbiddenResponse(): Response;
10
13
  export declare function constructInvalidTokenResponse(): Response;
11
14
  //# sourceMappingURL=auth-handlers.d.ts.map
@@ -1 +1 @@
1
- import{extractTokenFromAuthHeader as u}from"../../../plugins/mcp/utils/jwt.js";import{getUserParamsFromCookies as d}from"../../../web-server/auth.js";import{ServerRoutes as l}from"../../../../constants/api.js";import{DEFAULT_ANONYMOUS_VISITOR_TEAM as i,RBAC_ALL_OTHER_TEAMS as a}from"../../../../constants/common.js";import{withPathPrefix as h}from"@redocly/theme/core/utils";function c(e){return!e||typeof e!="object"||Object.keys(e).length===0?!1:!(e[i]&&e[i]!=="none"||e[a]&&e[a]!=="none")}function R(e,t){if(!t||Object.keys(t).length===0)return e;const r=t.content;if(r&&Object.keys(r).length>0&&Object.values(r).some(c))return!0;const o=t.teamFoldersBaseRoles;return c(o)?!0:e}async function O(e,t){const r=e.headers.get("Authorization");if(!r)return{isAuthenticated:!1};const o=u(r),s=t?.config?.ssoDirect||{},n=o?await d(s,{authorization:o}):{};return o&&n&&n.isAuthenticated?{isAuthenticated:!0,isTokenValid:!0,currentUser:{teams:n.teams||[],email:n.email||"",claims:n,isAuthenticated:!0,idpAccessToken:n.idpAccessToken||void 0,idpId:n.idpId||void 0},accessToken:o}:{isAuthenticated:!1,isTokenValid:!1}}function _(e){return e=e.replace(/^http:\/\//,"https://"),new Response(JSON.stringify({error:"unauthorized",message:"Authentication required"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":`Bearer resource_metadata="${e}${l.MCP_OAUTH_PROTECTED_RESOURCE}${h("/mcp")}"`,"Access-Control-Allow-Origin":"*"}})}function g(){return new Response(JSON.stringify({error:"invalid_token",message:"Invalid or expired token"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":'Bearer error="invalid_token", error_description="Invalid or expired token"',"Access-Control-Allow-Origin":"*"}})}export{g as constructInvalidTokenResponse,_ as constructUnauthorizedResponse,O as handleMcpAuth,R as shouldHandleMcpAuth};
1
+ import{extractTokenFromAuthHeader as u}from"../../../plugins/mcp/utils/jwt.js";import{getUserParamsFromCookies as d}from"../../../web-server/auth.js";import{ServerRoutes as l}from"../../../../constants/api.js";import{DEFAULT_ANONYMOUS_VISITOR_TEAM as a,RBAC_ALL_OTHER_TEAMS as c,RbacFeatures as f}from"../../../../constants/common.js";import{withPathPrefix as p}from"@redocly/theme/core/utils";function i(e){return!e||typeof e!="object"||Object.keys(e).length===0?!1:!(e[a]&&e[a]!=="none"||e[c]&&e[c]!=="none")}function h(e,t){if(!t||Object.keys(t).length===0)return e;const r=t.content;if(r&&Object.keys(r).length>0&&Object.values(r).some(i))return!0;const s=t.teamFoldersBaseRoles;if(i(s))return!0;const o=t.features;return i(o?.[f.MCP])?!0:e}function g(e){const t=e.getConfig().access;return h(!!t?.requiresLogin,t?.rbac||{})}async function C(e,t){const r=e.headers.get("Authorization");if(!r)return{isAuthenticated:!1};const s=u(r),o=t?.config?.ssoDirect||{},n=s?await d(o,{authorization:s}):{};return s&&n&&n.isAuthenticated?{isAuthenticated:!0,isTokenValid:!0,currentUser:{teams:n.teams||[],email:n.email||"",claims:n,isAuthenticated:!0,idpAccessToken:n.idpAccessToken||void 0,idpId:n.idpId||void 0},accessToken:s}:{isAuthenticated:!1,isTokenValid:!1}}function _(e){return e=e.replace(/^http:\/\//,"https://"),new Response(JSON.stringify({error:"unauthorized",message:"Authentication required"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":`Bearer resource_metadata="${e}${l.MCP_OAUTH_PROTECTED_RESOURCE}${p("/mcp")}"`,"Access-Control-Allow-Origin":"*"}})}function y(){return new Response(JSON.stringify({error:"forbidden",message:"You do not have access to this MCP server"}),{status:403,headers:{"Content-Type":"application/json","Access-Control-Allow-Origin":"*"}})}function x(){return new Response(JSON.stringify({error:"invalid_token",message:"Invalid or expired token"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":'Bearer error="invalid_token", error_description="Invalid or expired token"',"Access-Control-Allow-Origin":"*"}})}export{y as constructForbiddenResponse,x as constructInvalidTokenResponse,_ as constructUnauthorizedResponse,C as handleMcpAuth,g as isMcpContentProtected,h as shouldHandleMcpAuth};
@@ -1,4 +1,4 @@
1
- import type { ToolAnnotations } from '@redocly/mcp-typescript-sdk/types.js';
1
+ import type { ToolAnnotations } from '@modelcontextprotocol/server';
2
2
  import type { McpToolContext } from '../../types.js';
3
3
  /** A capability is a per-request-gated global the code-mode sandbox exposes beyond the schema-driven `tools.*` surface. */
4
4
  export type SandboxCapability = {
@@ -1,4 +1,4 @@
1
- import type { ToolAnnotations } from '@redocly/mcp-typescript-sdk/types.js';
1
+ import type { ToolAnnotations } from '@modelcontextprotocol/server';
2
2
  import type { McpToolSchema } from '../../../../types';
3
3
  import type { McpToolContext } from '../../types.js';
4
4
  import type { SandboxCapability } from './types.js';
@@ -0,0 +1,12 @@
1
+ export type CodeAudit = {
2
+ sha256: string;
3
+ length: number;
4
+ flags: string;
5
+ };
6
+ /**
7
+ * Fingerprint model-supplied code for the audit trail. The body itself is never reported — it can
8
+ * contain data the model already pulled from a customer API — so callers get a hash plus flags for
9
+ * patterns worth reviewing. The sandbox blocks all of the flagged targets; a flag is an attempt.
10
+ */
11
+ export declare function auditCode(code: string): CodeAudit;
12
+ //# sourceMappingURL=code-audit.d.ts.map
@@ -0,0 +1 @@
1
+ import{createHash as e}from"node:crypto";const n=/(169\.254\.169\.254|metadata\.google\.internal|\.consul\b|\.internal\b|localhost|127\.0\.0\.1|\b10\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|\b192\.168\.\d{1,3}\.\d{1,3}\b|\b172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}\b)/i,a=/(process\s*(?:\.\s*env\b|\[)|globalThis|require\s*\(|__proto__)/;function r(t){const s=[];return a.test(t)&&s.push("env_probe"),n.test(t)&&s.push("internal_target"),{sha256:e("sha256").update(t,"utf8").digest("hex"),length:t.length,flags:s.sort().join(",")}}export{r as auditCode};