@redocly/redoc 0.130.0-next.9 → 0.131.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/dist/bin.js +1 -1
  3. package/dist/cli/develop.js +1 -1
  4. package/dist/cli/prepare/copy-env-files.js +1 -1
  5. package/dist/cli/prepare/index.js +1 -1
  6. package/dist/cli/stats/collectors/openapi.js +1 -1
  7. package/dist/cli/telemetry/index.js +1 -1
  8. package/dist/client/App.js +1 -1
  9. package/dist/client/ErrorBoundary.js +1 -1
  10. package/dist/client/app/Sidebar/RequestAccessButton.js +2 -2
  11. package/dist/client/app/Sidebar/Sidebar.js +2 -2
  12. package/dist/client/app/Sidebar/helpers/filter-out-versioned-items.js +1 -1
  13. package/dist/client/app/hooks/catalog/useCatalogClassic.js +1 -1
  14. package/dist/client/app/hooks/catalog/useCatalogFilter.js +1 -1
  15. package/dist/client/app/hooks/catalog/useCatalogViewMode.js +1 -1
  16. package/dist/client/app/hooks/catalog/useSearchTracker.js +1 -1
  17. package/dist/client/app/hooks/usePageTimeTracker.js +1 -1
  18. package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
  19. package/dist/client/app/pages/DevLogin/DevLogin.js +1 -1
  20. package/dist/client/app/search/message-handlers.d.ts +29 -0
  21. package/dist/client/app/search/message-handlers.js +1 -0
  22. package/dist/client/app/search/sse-parser.d.ts +10 -0
  23. package/dist/client/app/search/sse-parser.js +2 -0
  24. package/dist/client/app/search/useAiSearch.d.ts +9 -11
  25. package/dist/client/app/search/useAiSearch.js +1 -1
  26. package/dist/client/app/search/useSearch.js +1 -1
  27. package/dist/client/browser-entry.js +5 -5
  28. package/dist/client/constants/ai-search.d.ts +30 -0
  29. package/dist/client/constants/ai-search.js +1 -0
  30. package/dist/client/constants/index.d.ts +2 -0
  31. package/dist/client/constants/index.js +1 -0
  32. package/dist/client/providers/hooks.js +1 -1
  33. package/dist/client/runtime/loader.js +1 -1
  34. package/dist/client/types/ai-search.d.ts +73 -0
  35. package/dist/client/types/ai-search.js +0 -0
  36. package/dist/client/types/index.d.ts +1 -0
  37. package/dist/config/env-config.d.ts +17 -0
  38. package/dist/config/env-config.js +1 -0
  39. package/dist/config/env-schema.d.ts +242 -0
  40. package/dist/config/env-schema.js +3 -0
  41. package/dist/config/env-schemas/api-urls.d.ts +24 -0
  42. package/dist/config/env-schemas/api-urls.js +1 -0
  43. package/dist/config/env-schemas/auth.d.ts +42 -0
  44. package/dist/config/env-schemas/auth.js +1 -0
  45. package/dist/config/env-schemas/catalog.d.ts +12 -0
  46. package/dist/config/env-schemas/catalog.js +1 -0
  47. package/dist/config/env-schemas/database.d.ts +15 -0
  48. package/dist/config/env-schemas/database.js +1 -0
  49. package/dist/config/env-schemas/environment-detection.d.ts +24 -0
  50. package/dist/config/env-schemas/environment-detection.js +1 -0
  51. package/dist/config/env-schemas/feature-flags.d.ts +24 -0
  52. package/dist/config/env-schemas/feature-flags.js +1 -0
  53. package/dist/config/env-schemas/organization-project.d.ts +27 -0
  54. package/dist/config/env-schemas/organization-project.js +1 -0
  55. package/dist/config/env-schemas/scorecards.d.ts +12 -0
  56. package/dist/config/env-schemas/scorecards.js +1 -0
  57. package/dist/config/env-schemas/search.d.ts +21 -0
  58. package/dist/config/env-schemas/search.js +1 -0
  59. package/dist/config/env-schemas/server-config.d.ts +51 -0
  60. package/dist/config/env-schemas/server-config.js +1 -0
  61. package/dist/config/env-schemas/site.d.ts +12 -0
  62. package/dist/config/env-schemas/site.js +1 -0
  63. package/dist/config/env-schemas/ssr.d.ts +18 -0
  64. package/dist/config/env-schemas/ssr.js +1 -0
  65. package/dist/config/env-schemas/telemetry.d.ts +15 -0
  66. package/dist/config/env-schemas/telemetry.js +1 -0
  67. package/dist/config/env-schemas/test.d.ts +22 -0
  68. package/dist/config/env-schemas/test.js +1 -0
  69. package/dist/constants/common.d.ts +1 -1
  70. package/dist/constants/common.js +1 -1
  71. package/dist/constants/l10n/langs/ar.js +1 -1
  72. package/dist/constants/l10n/langs/de.js +1 -1
  73. package/dist/constants/l10n/langs/en.js +1 -1
  74. package/dist/constants/l10n/langs/es.js +1 -1
  75. package/dist/constants/l10n/langs/fr.js +1 -1
  76. package/dist/constants/l10n/langs/hi.js +1 -1
  77. package/dist/constants/l10n/langs/it.js +1 -1
  78. package/dist/constants/l10n/langs/ja.js +1 -1
  79. package/dist/constants/l10n/langs/ko.js +1 -1
  80. package/dist/constants/l10n/langs/pl.js +1 -1
  81. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  82. package/dist/constants/l10n/langs/pt.js +1 -1
  83. package/dist/constants/l10n/langs/ru.js +1 -1
  84. package/dist/constants/l10n/langs/uk.js +1 -1
  85. package/dist/constants/l10n/langs/zh.js +1 -1
  86. package/dist/server/api-routes/import-api-routes-handlers.js +1 -1
  87. package/dist/server/api-routes/run-api-routes-worker.js +1 -1
  88. package/dist/server/constants/common.js +1 -1
  89. package/dist/server/entitlements/entitlements-provider.js +1 -1
  90. package/dist/server/esbuild/esbuild-logger.js +2 -2
  91. package/dist/server/esbuild/esbuild.js +2 -2
  92. package/dist/server/esbuild/plugins/assets-resolver.js +1 -1
  93. package/dist/server/esbuild/plugins/esbuild-compile-resolver.js +1 -1
  94. package/dist/server/esbuild/plugins/styled-components-ssr.js +1 -1
  95. package/dist/server/fs/last-modified-tracker.js +1 -1
  96. package/dist/server/fs/utils/is-loader-cache-enabled.js +1 -1
  97. package/dist/server/node-bundle-entry.js +1 -1
  98. package/dist/server/plugins/analytics/adobe/index.js +1 -1
  99. package/dist/server/plugins/analytics/amplitude/index.js +1 -1
  100. package/dist/server/plugins/analytics/fullstory/index.js +1 -1
  101. package/dist/server/plugins/analytics/ga/index.js +1 -1
  102. package/dist/server/plugins/analytics/gtm/browser-hooks.js +1 -1
  103. package/dist/server/plugins/analytics/gtm/index.js +1 -1
  104. package/dist/server/plugins/analytics/heap/index.js +1 -1
  105. package/dist/server/plugins/analytics/rudderstack/index.js +1 -1
  106. package/dist/server/plugins/analytics/segment/index.js +1 -1
  107. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +36 -61
  108. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  109. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -0
  110. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  111. package/dist/server/plugins/catalog-entities/database/mappers/{create-entity-relation.d.ts → create-entity-relation-read-model.d.ts} +2 -2
  112. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -0
  113. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.d.ts +16 -5
  114. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +21 -17
  115. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +35 -9
  116. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +24 -21
  117. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +36 -39
  118. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +1 -1
  119. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +1 -1
  120. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.d.ts +7 -1
  121. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +1 -1
  122. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +4 -5
  123. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +1 -1
  124. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.d.ts +13 -0
  125. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-entities-exclusion-filter.js +1 -0
  126. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.d.ts +31 -0
  127. package/dist/server/plugins/catalog-entities/database/repositories/utils/build-rbac-filter.js +9 -0
  128. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  129. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -1
  130. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  131. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  132. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  133. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  134. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  135. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +25 -164
  136. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.js +0 -1
  137. package/dist/server/plugins/catalog-entities/types/openapi.d.ts +11 -0
  138. package/dist/server/plugins/catalog-entities/types/openapi.js +0 -0
  139. package/dist/server/plugins/catalog-entities/types/params.d.ts +6 -0
  140. package/dist/server/plugins/catalog-entities/types/params.js +0 -0
  141. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  142. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.d.ts +11 -0
  143. package/dist/server/plugins/catalog-entities/utils/get-not-accessible-catalog-resources.js +1 -0
  144. package/dist/server/plugins/config-parser/index.js +1 -1
  145. package/dist/server/plugins/config-parser/loaders/utils/read-and-validate-config.js +1 -1
  146. package/dist/server/plugins/default-theme/index.js +1 -1
  147. package/dist/server/plugins/entitlements/index.js +1 -1
  148. package/dist/server/plugins/lifecycle.js +2 -2
  149. package/dist/server/plugins/markdown/markdoc/import-user-tags.js +1 -1
  150. package/dist/server/plugins/markdown/markdoc/plugins/render-mermaid.js +1 -1
  151. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  152. package/dist/server/plugins/mcp/auth/auth-handlers.js +1 -1
  153. package/dist/server/plugins/mcp/docs-mcp/tools/docs-mcp-tool.js +1 -1
  154. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
  155. package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
  156. package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
  157. package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
  158. package/dist/server/plugins/mcp/handlers/docs-mcp-handler.js +1 -1
  159. package/dist/server/plugins/mcp/handlers/errors.js +1 -1
  160. package/dist/server/plugins/mcp/handlers/handle-mcp-request.js +1 -1
  161. package/dist/server/plugins/mcp/servers/base-server.js +1 -1
  162. package/dist/server/plugins/nav-utils.js +1 -1
  163. package/dist/server/plugins/openapi-docs/index.js +1 -1
  164. package/dist/server/plugins/openapi-docs/template/helpers.d.ts +1 -1
  165. package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
  166. package/dist/server/plugins/scorecard-classic/index.js +1 -1
  167. package/dist/server/plugins/scorecards/plugin.js +1 -1
  168. package/dist/server/plugins/scorecards/workers/run-scorecards-worker.js +1 -1
  169. package/dist/server/plugins/search/ai-indexer/prepare-ai-search-documents.js +1 -1
  170. package/dist/server/plugins/search/documents/search-documents.js +1 -1
  171. package/dist/server/plugins/search/engines/flexsearch/index.js +1 -1
  172. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  173. package/dist/server/plugins/search/index.js +1 -1
  174. package/dist/server/plugins/search/llmstxt/index.js +5 -5
  175. package/dist/server/plugins/search/utils.js +1 -1
  176. package/dist/server/plugins/sidebars/index.js +2 -2
  177. package/dist/server/plugins/sso/index.js +1 -1
  178. package/dist/server/providers/database/base-repository.js +1 -1
  179. package/dist/server/providers/database/database-connection-factory.js +1 -1
  180. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  181. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +1 -1
  182. package/dist/server/ssr/render.js +1 -1
  183. package/dist/server/ssr/server-side-props/get-server-props-from-user-handler.js +1 -1
  184. package/dist/server/ssr/utils.js +8 -8
  185. package/dist/server/store.d.ts +4 -4
  186. package/dist/server/store.js +1 -1
  187. package/dist/server/telemetry/index.js +1 -1
  188. package/dist/server/tools/notifiers/formatter.js +3 -3
  189. package/dist/server/tools/notifiers/helpers/colors.js +1 -1
  190. package/dist/server/tools/notifiers/logger.js +2 -2
  191. package/dist/server/tools/notifiers/reporter.js +9 -9
  192. package/dist/server/tools/notifiers/terminal-manager.js +4 -4
  193. package/dist/server/utils/envs/load-env-variables.js +1 -1
  194. package/dist/server/utils/is-catalog-entities-enabled.js +1 -1
  195. package/dist/server/utils/is-scorecards-enabled.js +1 -1
  196. package/dist/server/utils/lifecycle-hooks.js +1 -1
  197. package/dist/server/utils/rbac.d.ts +65 -0
  198. package/dist/server/utils/report-all-errors.js +1 -1
  199. package/dist/server/version.js +1 -1
  200. package/dist/server/web-server/auth.js +3 -3
  201. package/dist/server/web-server/handle-api-route-request.js +1 -1
  202. package/dist/server/web-server/http.js +2 -2
  203. package/dist/server/web-server/middleware/apiKeyMiddleware.js +1 -1
  204. package/dist/server/web-server/middleware/catalogAuthMiddleware.d.ts +4 -6
  205. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  206. package/dist/server/web-server/middleware/corsMiddleware.js +1 -1
  207. package/dist/server/web-server/middleware/dynamic-middleware/dynamic-middleware.js +1 -1
  208. package/dist/server/web-server/middleware/idleTimeoutMiddleware.js +1 -1
  209. package/dist/server/web-server/routes/ask-ai.js +1 -1
  210. package/dist/server/web-server/routes/auth.js +1 -1
  211. package/dist/server/web-server/routes/catalog/bff-catalog-related-entities.js +1 -1
  212. package/dist/server/web-server/routes/catalog/bff-catalog.js +1 -1
  213. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  214. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  215. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.d.ts +3 -0
  216. package/dist/server/web-server/routes/catalog/dto/read-entity-dto.js +0 -0
  217. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.d.ts +43 -0
  218. package/dist/server/web-server/routes/catalog/helpers/create-entity-relation-update-schema.js +1 -0
  219. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +6823 -0
  220. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -0
  221. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.d.ts +1102 -0
  222. package/dist/server/web-server/routes/catalog/helpers/create-entity-update-schema.js +1 -0
  223. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.d.ts +10 -0
  224. package/dist/server/web-server/routes/catalog/helpers/has-access-to-entity.js +1 -0
  225. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.d.ts +4 -0
  226. package/dist/server/web-server/routes/catalog/mappers/map-entity-read-model-schema-to-entity-read-dto.js +1 -0
  227. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +4 -0
  228. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.js +1 -0
  229. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +4 -0
  230. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.js +1 -0
  231. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +4 -0
  232. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.js +1 -0
  233. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +13 -0
  234. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.js +1 -0
  235. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +13 -0
  236. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.js +1 -0
  237. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +13 -0
  238. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.js +1 -0
  239. package/dist/server/web-server/routes/dynamic-route.js +1 -1
  240. package/dist/server/web-server/routes/error.js +1 -1
  241. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.d.ts +3 -0
  242. package/dist/server/web-server/routes/helpers/get-current-rbac-teams.js +1 -0
  243. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.d.ts +11 -0
  244. package/dist/server/web-server/routes/helpers/get-rbac-restrictions-data-for-catalog.js +1 -0
  245. package/dist/server/web-server/routes/index.js +1 -1
  246. package/dist/server/web-server/routes/info.js +1 -1
  247. package/dist/server/web-server/routes/mcp-oauth.js +1 -1
  248. package/dist/server/web-server/routes/otel/otel.js +1 -1
  249. package/dist/server/web-server/routes/page-data.js +1 -1
  250. package/dist/server/web-server/routes/path-prefix-redirect.js +1 -1
  251. package/dist/server/web-server/utils.d.ts +2 -2
  252. package/dist/server/workers/worker-pool.js +1 -1
  253. package/package.json +17 -16
  254. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation.js +0 -1
  255. package/dist/server/plugins/catalog-entities/entities/validate-entity.d.ts +0 -8
  256. package/dist/server/plugins/catalog-entities/entities/validate-entity.js +0 -1
  257. package/dist/server/utils/envs/is-build-mode.d.ts +0 -2
  258. package/dist/server/utils/envs/is-build-mode.js +0 -1
  259. package/dist/server/utils/envs/is-develop-mode.d.ts +0 -7
  260. package/dist/server/utils/envs/is-develop-mode.js +0 -1
  261. package/dist/server/utils/envs/is-production-mode.d.ts +0 -10
  262. package/dist/server/utils/envs/is-production-mode.js +0 -1
  263. package/dist/utils/env/is-local-development.d.ts +0 -13
  264. package/dist/utils/env/is-local-development.js +0 -1
  265. package/dist/utils/env/is-production.d.ts +0 -13
  266. package/dist/utils/env/is-production.js +0 -1
  267. package/dist/utils/env/is-web-view.d.ts +0 -14
  268. package/dist/utils/env/is-web-view.js +0 -1
@@ -1,159 +1,23 @@
1
- import type { FromSchema } from 'json-schema-to-ts';
2
1
  import type { EntityLinkFileSchema, EntityContactFileSchema } from '@redocly/config';
3
- export declare const entityRelationReadModelSchema: {
4
- readonly type: "object";
5
- readonly properties: {
6
- readonly id: {
7
- readonly type: "string";
8
- };
9
- readonly organizationId: {
10
- readonly type: "string";
11
- };
12
- readonly projectId: {
13
- readonly type: "string";
14
- };
15
- readonly sourceKey: {
16
- readonly type: "string";
17
- };
18
- readonly targetKey: {
19
- readonly type: "string";
20
- };
21
- readonly sourceVersion: {
22
- readonly type: readonly ["string", "null"];
23
- };
24
- readonly sourceRevision: {
25
- readonly type: readonly ["string", "null"];
26
- };
27
- readonly targetVersion: {
28
- readonly type: readonly ["string", "null"];
29
- };
30
- readonly targetRevision: {
31
- readonly type: readonly ["string", "null"];
32
- };
33
- readonly type: {
34
- readonly type: "string";
35
- };
36
- readonly createdAt: {
37
- readonly type: readonly ["string", "null"];
38
- };
39
- readonly updatedAt: {
40
- readonly type: readonly ["string", "null"];
41
- };
42
- };
43
- readonly required: readonly ["id", "organizationId", "projectId", "sourceKey", "targetKey", "type"];
44
- readonly additionalProperties: false;
45
- };
46
- export declare const entityReadModelSchema: {
47
- readonly type: "object";
48
- readonly properties: {
49
- readonly type: {
50
- readonly type: "string";
51
- };
52
- readonly key: {
53
- readonly type: "string";
54
- };
55
- readonly title: {
56
- readonly type: "string";
57
- };
58
- readonly summary: {
59
- readonly type: readonly ["string", "null"];
60
- };
61
- readonly tags: {
62
- readonly type: readonly ["array", "null"];
63
- readonly items: {
64
- readonly type: "string";
65
- };
66
- };
67
- readonly metadata: {
68
- readonly type: readonly ["object", "null"];
69
- readonly additionalProperties: true;
70
- };
71
- readonly git: {
72
- readonly type: readonly ["array", "null"];
73
- readonly items: {
74
- readonly type: "string";
75
- };
76
- };
77
- readonly contact: {
78
- readonly type: readonly ["object", "null"];
79
- };
80
- readonly links: {
81
- readonly type: readonly ["array", "null"];
82
- readonly items: {
83
- readonly type: "object";
84
- };
85
- };
86
- readonly id: {
87
- readonly type: "string";
88
- };
89
- readonly source: {
90
- readonly type: "string";
91
- };
92
- readonly sourceFile: {
93
- readonly type: readonly ["string", "null"];
94
- };
95
- readonly version: {
96
- readonly type: readonly ["string", "null"];
97
- };
98
- readonly revision: {
99
- readonly type: readonly ["string", "null"];
100
- };
101
- readonly hash: {
102
- readonly type: readonly ["string", "null"];
103
- };
104
- readonly isCurrent: {
105
- readonly type: readonly ["boolean", "null"];
106
- };
107
- readonly isDefaultVersion: {
108
- readonly type: readonly ["boolean", "null"];
109
- };
110
- readonly createdAt: {
111
- readonly type: readonly ["string", "null"];
112
- };
113
- readonly updatedAt: {
114
- readonly type: readonly ["string", "null"];
115
- };
116
- };
117
- readonly required: readonly ["type", "key", "title", "id", "source"];
118
- readonly additionalProperties: false;
119
- };
120
- export declare const relatedEntitySchema: {
121
- readonly type: "object";
122
- readonly properties: {
123
- readonly id: {
124
- readonly type: "string";
125
- };
126
- readonly key: {
127
- readonly type: "string";
128
- };
129
- readonly title: {
130
- readonly type: "string";
131
- };
132
- readonly type: {
133
- readonly type: "string";
134
- };
135
- readonly summary: {
136
- readonly type: readonly ["string", "null"];
137
- };
138
- readonly source: {
139
- readonly type: "string";
140
- };
141
- readonly sourceFile: {
142
- readonly type: readonly ["string", "null"];
143
- };
144
- readonly createdAt: {
145
- readonly type: readonly ["string", "null"];
146
- };
147
- readonly updatedAt: {
148
- readonly type: readonly ["string", "null"];
149
- };
150
- };
151
- readonly required: readonly ["id", "key", "title", "type", "source"];
152
- readonly additionalProperties: false;
2
+ export type EntityRelationReadModelSchema = {
3
+ id: string;
4
+ organizationId: string;
5
+ projectId: string;
6
+ sourceKey: string;
7
+ targetKey: string;
8
+ sourceVersion?: string | null;
9
+ sourceRevision?: string | null;
10
+ targetVersion?: string | null;
11
+ targetRevision?: string | null;
12
+ type: string;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ object: 'catalogEntityRelation';
153
16
  };
154
- export type EntityRelationReadModelSchema = FromSchema<typeof entityRelationReadModelSchema>;
155
- export type RelatedEntitySchema = FromSchema<typeof relatedEntitySchema>;
156
17
  export type EntityReadModelSchema = {
18
+ id: string;
19
+ organizationId: string;
20
+ projectId: string;
157
21
  type: string;
158
22
  key: string;
159
23
  title: string;
@@ -163,21 +27,18 @@ export type EntityReadModelSchema = {
163
27
  git?: string[] | null;
164
28
  contact?: EntityContactFileSchema | null;
165
29
  links?: EntityLinkFileSchema[] | null;
166
- id: string;
167
30
  source: string;
168
31
  sourceFile?: string | null;
169
- version?: string | null;
32
+ version: string;
170
33
  revision: string;
171
- hash?: string | null;
172
- isCurrent?: boolean | null;
173
- isDefaultVersion?: boolean | null;
174
- isDeleted?: boolean | null;
175
- createdAt?: string | null;
176
- updatedAt?: string | null;
34
+ isCurrent: boolean;
35
+ isDefaultVersion: boolean;
36
+ isDeleted: boolean;
177
37
  object: 'catalogEntity';
178
- domains?: RelatedEntitySchema[];
179
- owners?: RelatedEntitySchema[];
38
+ createdAt: string;
39
+ updatedAt: string;
180
40
  rbacTeams?: string[] | null;
41
+ hash?: string | null;
181
42
  };
182
- export type EntityRevisionSummary = Pick<EntityReadModelSchema, 'version' | 'revision' | 'isCurrent' | 'createdAt' | 'updatedAt' | 'isDefaultVersion' | 'isDeleted'>;
43
+ export type EntityRevisionSummary = Pick<EntityReadModelSchema, 'version' | 'revision' | 'isCurrent' | 'createdAt' | 'updatedAt' | 'isDefaultVersion'>;
183
44
  //# sourceMappingURL=read-model-schemas.d.ts.map
@@ -1 +0,0 @@
1
- const t={type:"object",properties:{id:{type:"string"},organizationId:{type:"string"},projectId:{type:"string"},sourceKey:{type:"string"},targetKey:{type:"string"},sourceVersion:{type:["string","null"]},sourceRevision:{type:["string","null"]},targetVersion:{type:["string","null"]},targetRevision:{type:["string","null"]},type:{type:"string"},createdAt:{type:["string","null"]},updatedAt:{type:["string","null"]}},required:["id","organizationId","projectId","sourceKey","targetKey","type"],additionalProperties:!1},e={type:"object",properties:{type:{type:"string"},key:{type:"string"},title:{type:"string"},summary:{type:["string","null"]},tags:{type:["array","null"],items:{type:"string"}},metadata:{type:["object","null"],additionalProperties:!0},git:{type:["array","null"],items:{type:"string"}},contact:{type:["object","null"]},links:{type:["array","null"],items:{type:"object"}},id:{type:"string"},source:{type:"string"},sourceFile:{type:["string","null"]},version:{type:["string","null"]},revision:{type:["string","null"]},hash:{type:["string","null"]},isCurrent:{type:["boolean","null"]},isDefaultVersion:{type:["boolean","null"]},createdAt:{type:["string","null"]},updatedAt:{type:["string","null"]}},required:["type","key","title","id","source"],additionalProperties:!1},r={type:"object",properties:{id:{type:"string"},key:{type:"string"},title:{type:"string"},type:{type:"string"},summary:{type:["string","null"]},source:{type:"string"},sourceFile:{type:["string","null"]},createdAt:{type:["string","null"]},updatedAt:{type:["string","null"]}},required:["id","key","title","type","source"],additionalProperties:!1};export{e as entityReadModelSchema,t as entityRelationReadModelSchema,r as relatedEntitySchema};
@@ -0,0 +1,11 @@
1
+ import type { REDOCLY_TEAMS_RBAC } from '@redocly/config';
2
+ import type { OpenAPIOperation, OpenAPISchema } from '@redocly/openapi-docs';
3
+ export type RedoclyOpenAPISchema = OpenAPISchema & {
4
+ [REDOCLY_TEAMS_RBAC]?: Record<string, string>;
5
+ 'x-rbac'?: Record<string, string>;
6
+ };
7
+ export type RedoclyOpenapiOperation = OpenAPIOperation & {
8
+ [REDOCLY_TEAMS_RBAC]?: Record<string, string>;
9
+ 'x-rbac'?: Record<string, string>;
10
+ };
11
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1,6 @@
1
+ export type GetEntityByIdParams = {
2
+ rbacTeams?: string[];
3
+ excludedTypes?: string[];
4
+ excludedEntities?: string[];
5
+ };
6
+ //# sourceMappingURL=params.d.ts.map
@@ -1 +1 @@
1
- const i="error";class n{#t=new Set;#e;#s;#i=0;#o=0;addExtractor(t){this.#t.add(t)}increaseSkippedFilesCount(){this.#i++}increaseProcessedFilesCount(){this.#o++}async getCatalogEntitiesData(t){this.#e=this.#a(t),this.#s=this.#n(t);const[s,e]=await Promise.allSettled([this.#e,this.#s]);return{totalEntitiesCount:s.status==="fulfilled"?s.value:i,countOfEntitiesByType:e.status==="fulfilled"?e.value:i,extractors:Array.from(this.#t),totalFilesSkippedByHash:this.#i,totalProcessedFiles:this.#o}}async#a(t){return(await t.getEntities({limit:1,filter:{field:"is_deleted",operator:"equal",value:!1}})).page.total}async#n(t){return(await t.getEntitiesCountByTypes()).reduce((e,{type:o,count:a})=>(e[o]=a,e),{})}}const r=new n;export{n as CatalogDataCollector,r as catalogDataCollector};
1
+ const i="error";class n{#t=new Set;#e;#s;#i=0;#a=0;addExtractor(t){this.#t.add(t)}increaseSkippedFilesCount(){this.#i++}increaseProcessedFilesCount(){this.#a++}async getCatalogEntitiesData(t){this.#e=this.#o(t),this.#s=this.#n(t);const[s,e]=await Promise.allSettled([this.#e,this.#s]);return{totalEntitiesCount:s.status==="fulfilled"?s.value:i,countOfEntitiesByType:e.status==="fulfilled"?e.value:i,extractors:Array.from(this.#t),totalFilesSkippedByHash:this.#i,totalProcessedFiles:this.#a}}async#o(t){return(await t.getEntities({paginationParams:{limit:1,filter:{field:"is_deleted",operator:"equal",value:!1}}})).page.total}async#n(t){return(await t.getEntitiesCountByTypes()).reduce((e,{type:a,count:o})=>(e[a]=o,e),{})}}const r=new n;export{n as CatalogDataCollector,r as catalogDataCollector};
@@ -0,0 +1,11 @@
1
+ import type { RedoclyConfig } from '@redocly/config';
2
+ export declare function getNotAccessibleCatalogResources({ rbacConfig, currentRbacTeams, accessLevel, }: {
3
+ rbacConfig: RedoclyConfig['rbac'];
4
+ currentRbacTeams: string[];
5
+ accessLevel?: 'READ' | 'WRITE';
6
+ }): {
7
+ catalogs: string[];
8
+ types: string[];
9
+ entities: string[];
10
+ };
11
+ //# sourceMappingURL=get-not-accessible-catalog-resources.d.ts.map
@@ -0,0 +1 @@
1
+ import{RBAC_ALL_OTHER_TEAMS as c}from"../../../../constants/common.js";const g=["read","triage","write","maintain","admin"],r=["write","maintain","admin"];function E({rbacConfig:i,currentRbacTeams:s,accessLevel:n="READ"}){const a=[],f=[],e=[];if(n==="READ")for(const[t,o]of Object.entries(i?.entitiesCatalog?.catalogs??{}))o&&(l(o,s,n)||a.push(t));for(const[t,o]of Object.entries(i?.entitiesCatalog?.entitiesTypes??{}))o&&(l(o,s,n)||f.push(t));i?.entitiesCatalog?.entitiesGroups?.forEach(t=>{l(t.config,s,n)||e.push(...t.entities??[])});for(const[t,o]of Object.entries(i?.entitiesCatalog?.entities??{}))o&&(l(o,s,n)||e.push(t));return{catalogs:[...new Set(a)],types:[...new Set(f)],entities:[...new Set(e)]}}function l(i,s,n){const a=i[c],f=n==="WRITE"?r:g,e=[];for(const t of s)i[t]?e.push(i[t]):a&&e.push(a);return e.length>0&&e.some(t=>f.includes(t.toLowerCase()))}export{E as getNotAccessibleCatalogResources};
@@ -1 +1 @@
1
- import y from"path";import{REDOCLY_ROUTE_RBAC as n,REDOCLY_TEAMS_RBAC as b}from"@redocly/config";import{deepMerge as h}from"../../../utils/object/deep-merge.js";import{buildWildcardRedirectsTree as R}from"../../utils/redirects/build-wildcard-redirects-tree.js";import{formatCustomScripts as m,formatCustomLinks as C}from"./format-custom-tags.js";import{applyL10nToRbacConfig as S,resolveDirectoryHashes as D}from"../../utils/rbac.js";import{copySeoAssets as P}from"./copy-seo-assets.js";import{normalizeRedirectSources as T}from"./normalize-redirect-sources.js";import{applyL10nToRedirects as v}from"./apply-l10n-to-redirects.js";import{DEFAULT_LOADERS as A}from"./loaders/index.js";import{resolveSearchFacets as L}from"./resolve-search-facets.js";import{telemetryTraceStep as w}from"../../../cli/telemetry/helpers/trace-step.js";async function U(){return{id:"Config Parser",loaders:A,async processContent(o,{getConfig:c,fs:i}){await w("build.plugin.config_parser",async t=>{const{contentDir:e,setGlobalConfig:s,setGlobalData:f}=o,r=await c(),a={outdir:o.outdir,contentDir:e},p=await m(r.scripts?.head,a),g=await C(r.links,a),u=await m(r.scripts?.body,a),d=h(r,{headScriptTags:p,linkTags:g,postBodyScriptTags:u});t?.setAttribute("config",JSON.stringify(d));const l=r.redirects?T(r.redirects):{};s({...d,requiresLogin:!!r.requiresLogin,rbac:S(i,r.rbac||{}),directoryPaths:await D(i,r.rbac),seo:r.seo&&await P(r.seo,a.contentDir,a.outdir),redirects:v(l,r.l10n),wildcardRedirectsTree:R(l)}),L(r.search?.filters?.facets||[],o.getSearchFacets,o.setSearchFacets),f({removeAttribution:!!r.removeAttribution})})},async afterRoutesCreated(o){const c=o.getGlobalConfig("rbac"),i=o.getGlobalConfig("directoryPaths");if(!(!c||Object.keys(c).length===0))for(const t of o.getAllRoutes()){if(t.versions&&i)for(const e of t.versions){const s=i[e.folderId],r=s==="."||s==="/"?"":s;e[n]={slug:e.link,fsPath:y.posix.join(r,"@"+e.version,"index.md")}}t[n]||t[b]||(t[n]={slug:t.slug,fsPath:t.fsPath})}}}}export{U as configParserPlugin};
1
+ import R from"path";import{REDOCLY_ROUTE_RBAC as l,REDOCLY_TEAMS_RBAC as m}from"@redocly/config";import{deepMerge as C}from"../../../utils/object/deep-merge.js";import{buildWildcardRedirectsTree as S}from"../../utils/redirects/build-wildcard-redirects-tree.js";import{formatCustomScripts as g,formatCustomLinks as D}from"./format-custom-tags.js";import{applyL10nToRbacConfig as P,resolveDirectoryHashes as T}from"../../utils/rbac.js";import{copySeoAssets as v}from"./copy-seo-assets.js";import{normalizeRedirectSources as A}from"./normalize-redirect-sources.js";import{applyL10nToRedirects as L}from"./apply-l10n-to-redirects.js";import{DEFAULT_LOADERS as w}from"./loaders/index.js";import{resolveSearchFacets as O}from"./resolve-search-facets.js";import{telemetryTraceStep as E}from"../../../cli/telemetry/helpers/trace-step.js";async function H(){return{id:"Config Parser",loaders:w,async processContent(t,{getConfig:n,fs:i}){await E("build.plugin.config_parser",async o=>{const{contentDir:e,setGlobalConfig:a,setGlobalData:d}=t,r=await n(),c={outdir:t.outdir,contentDir:e},u=await g(r.scripts?.head,c),b=await D(r.links,c),y=await g(r.scripts?.body,c),f=C(r,{headScriptTags:u,linkTags:b,postBodyScriptTags:y});o?.setAttribute("config",JSON.stringify(f));const p=r.redirects?A(r.redirects):{},h=f.banner?.map(s=>typeof s=="object"&&s!==null&&s.rbac?{...s,[m]:s.rbac}:s);a({...f,banner:h,requiresLogin:!!r.requiresLogin,rbac:P(i,r.rbac||{}),directoryPaths:await T(i,r.rbac),seo:r.seo&&await v(r.seo,c.contentDir,c.outdir),redirects:L(p,r.l10n),wildcardRedirectsTree:S(p)}),O(r.search?.filters?.facets||[],t.getSearchFacets,t.setSearchFacets),d({removeAttribution:!!r.removeAttribution})})},async afterRoutesCreated(t){const n=t.getGlobalConfig("rbac"),i=t.getGlobalConfig("directoryPaths");if(!(!n||Object.keys(n).length===0))for(const o of t.getAllRoutes()){if(o.versions&&i)for(const e of o.versions){const a=i[e.folderId],r=a==="."||a==="/"?"":a;e[l]={slug:e.link,fsPath:R.posix.join(r,"@"+e.version,"index.md")}}o[l]||o[m]||(o[l]={slug:o.slug,fsPath:o.fsPath})}}}}export{H as configParserPlugin};
@@ -1 +1 @@
1
- import w from"path";import{lintConfig as T,loadConfig as A,createConfigTypes as U}from"@redocly/openapi-core";import{deepMerge as L}from"../../../../../utils/object/deep-merge.js";import{readEnvVariable as R}from"../../../../utils/envs/read-env-variable.js";import{logger as l}from"../../../../tools/notifiers/logger.js";import{BRANCH_ENV_PREFIX as $}from"../../../../../constants/common.js";import{sanitizeBranchName as E}from"../../../../utils/envs/sanitize-branch-name.js";import{safeParsePartial as q}from"../../safe-parse.js";import{formatConfigProblem as x}from"../../format-error.js";import{ExternalResolver as B}from"../../../../fs/utils/external-ref-resolver.js";import{resolveMutuallyExclusiveProps as j}from"../../resolve-mutual-exclusion.js";function m(o,e,t,i){e in o&&o[e]&&typeof o[e]=="string"&&(/^https?:\/\/.*/.test(o[e])||i(new Error(`Invalid ${t} URL: "${o[e]}". ${t} must start with "http://" or "https://".`)))}function N(o,e){if("access"in o&&o.access&&typeof o.access=="object"){const t=o.access;m(t,"logoutReturnUrl","access.logoutReturnUrl",e),m(t,"residency","access.residency",e);const i=["requiresLogin","logoutReturnUrl","residency","sso","rbac"];for(const n of i)n in t&&t[n]!==void 0&&n in o&&o[n]!==void 0&&e(new Error(`Property '${n}' is defined both at root level and in 'access' object. Please use 'access.${n}' to define this configuration.`))}}async function G(o,e,t,i){const g=e.getFileInfo(o)?.realRelativePath||o;async function d(){const c=new B(e),u=w.join(e.cwd,g),r=await A({configPath:u,externalRefResolver:c}),p=await i(r.resolvedConfig);if(p===void 0)return r.resolvedConfig;const P=[...r.document?.source?await T({config:r,externalConfigTypes:U(p,r)}):[],...r.document?.source?j(r.resolvedConfig,r.document?.source):[]];if(P.length>0)for(const C of P)t(new Error(x(C,e.cwd)));return r.resolvedConfig}const a=await e.exists(o)?await d():{},b=I(a),y=await i(a);m(a,"residency","Residency",t),m(a,"logoutReturnUrl","Logout return URL",t),N(a,t);let f=y?q(y,a):a;const{env:h}=f;if(h){const c=R("REDOCLY_ENV")||"development",u=h[c]||{},r=R("PUBLIC_REDOCLY_BRANCH_NAME")||"",p=r?E(r):"",v=p&&h[`${$}${p}`]||{};f=L(f,v,u)}const s=M(f,b);if(s.imports&&s.imports.length>0){l.warn("The 'imports' property is deprecated. Please use 'plugins' property instead.");const c=new Set([...s.plugins||[],...s.imports.map(u=>w.posix.join(u,"plugin.js"))]);s.plugins=Array.from(c),delete s.imports}if(s.catalog&&(l.warn("The 'catalog' property is deprecated. Please use 'catalogClassic' property instead."),s.catalogClassic={...s.catalog},delete s.catalog),s.scorecard&&(l.warn("The 'scorecard' property is deprecated. Please use 'scorecardClassic' property instead."),s.scorecardClassic=s.scorecard,delete s.scorecard),s.search?.ai){l.warn("The 'search.ai' property is deprecated. Please use 'aiAssistant' property instead.");const c={...s.search?.ai,...s.aiAssistant,suggestions:s.aiAssistant?.suggestions?.length?s.aiAssistant.suggestions:s.search?.ai.suggestions||[]};s.aiAssistant=c,delete s.search.ai}return _(s)}function _(o){const e="access"in o?o.access:void 0;if(!e||typeof e!="object")return o;const t={...o},i=[{name:"requiresLogin",type:"boolean"},{name:"logoutReturnUrl",type:"string"},{name:"residency",type:"string"},{name:"sso",type:"string | string[]"},{name:"rbac",type:"object"}],n=[];for(const g of i){const d=g.name;d in t&&t[d]!==void 0&&!(d in e)&&n.push(d)}return n.length>0&&l.warn(`The following properties at root level are deprecated: ${n.join(", ")}. Please move them to the 'access' object.`),"requiresLogin"in e&&e.requiresLogin!==void 0&&(t.requiresLogin=e.requiresLogin),"logoutReturnUrl"in e&&e.logoutReturnUrl!==void 0&&(t.logoutReturnUrl=e.logoutReturnUrl),"residency"in e&&e.residency!==void 0&&(t.residency=e.residency),"sso"in e&&e.sso!==void 0&&(t.sso=e.sso),"rbac"in e&&e.rbac!==void 0&&(t.rbac=e.rbac),delete t.access,t}function I(o){if(!o.theme)return[];l.warn("The 'theme' property in redocly.yaml is deprecated. Please move all of the properties from 'theme' to the root of the config.");const e=[];for(const t of Object.keys(o.theme))o[t]==null?e.push(t):l.warn(`Detected both '${t}' and 'theme.${t}' properties in redocly.yaml. The 'theme.${t}' property will be ignored and needs to be removed or merged into the '${t}'.`);return e}function M(o,e){if(!o.theme||e.length===0)return o;const t={...o};for(const i of e)t[i]=o.theme[i];return delete t.theme,t}export{G as readAndValidateConfig};
1
+ import P from"path";import{lintConfig as C,loadConfig as T,createConfigTypes as A}from"@redocly/openapi-core";import{deepMerge as U}from"../../../../../utils/object/deep-merge.js";import{logger as l}from"../../../../tools/notifiers/logger.js";import{BRANCH_ENV_PREFIX as $}from"../../../../../constants/common.js";import{sanitizeBranchName as L}from"../../../../utils/envs/sanitize-branch-name.js";import{safeParsePartial as E}from"../../safe-parse.js";import{formatConfigProblem as q}from"../../format-error.js";import{ExternalResolver as x}from"../../../../fs/utils/external-ref-resolver.js";import{resolveMutuallyExclusiveProps as B}from"../../resolve-mutual-exclusion.js";function g(o,e,t,r){e in o&&o[e]&&typeof o[e]=="string"&&(/^https?:\/\/.*/.test(o[e])||r(new Error(`Invalid ${t} URL: "${o[e]}". ${t} must start with "http://" or "https://".`)))}function j(o,e){if("access"in o&&o.access&&typeof o.access=="object"){const t=o.access;g(t,"logoutReturnUrl","access.logoutReturnUrl",e),g(t,"residency","access.residency",e);const r=["requiresLogin","logoutReturnUrl","residency","sso","rbac"];for(const n of r)n in t&&t[n]!==void 0&&n in o&&o[n]!==void 0&&e(new Error(`Property '${n}' is defined both at root level and in 'access' object. Please use 'access.${n}' to define this configuration.`))}}async function X(o,e,t,r){const h=e.getFileInfo(o)?.realRelativePath||o;async function d(){const a=new x(e),u=P.join(e.cwd,h),i=await T({configPath:u,externalRefResolver:a}),p=await r(i.resolvedConfig);if(p===void 0)return i.resolvedConfig;const m=[...i.document?.source?await C({config:i,externalConfigTypes:A(p,i)}):[],...i.document?.source?B(i.resolvedConfig,i.document?.source):[]];if(m.length>0)for(const b of m)t(new Error(q(b,e.cwd)));return i.resolvedConfig}const c=await e.exists(o)?await d():{},R=M(c),w=await r(c);g(c,"residency","Residency",t),g(c,"logoutReturnUrl","Logout return URL",t),j(c,t);let f=w?E(w,c):c;const{env:y}=f;if(y){const{envConfig:a}=await import("../../../../../config/env-config.js"),u=a.redoclyEnv,i=y[u]||{},p=a.PUBLIC_REDOCLY_BRANCH_NAME||"",v=p?L(p):"",m=v&&y[`${$}${v}`]||{};f=U(f,m,i)}const s=N(f,R);if(s.imports&&s.imports.length>0){l.warn("The 'imports' property is deprecated. Please use 'plugins' property instead.");const a=new Set([...s.plugins||[],...s.imports.map(u=>P.posix.join(u,"plugin.js"))]);s.plugins=Array.from(a),delete s.imports}if(s.catalog&&(l.warn("The 'catalog' property is deprecated. Please use 'catalogClassic' property instead."),s.catalogClassic={...s.catalog},delete s.catalog),s.scorecard&&(l.warn("The 'scorecard' property is deprecated. Please use 'scorecardClassic' property instead."),s.scorecardClassic=s.scorecard,delete s.scorecard),s.search?.ai){l.warn("The 'search.ai' property is deprecated. Please use 'aiAssistant' property instead.");const a={...s.search?.ai,...s.aiAssistant,suggestions:s.aiAssistant?.suggestions?.length?s.aiAssistant.suggestions:s.search?.ai.suggestions||[]};s.aiAssistant=a,delete s.search.ai}return I(s)}function I(o){const e="access"in o?o.access:void 0;if(!e||typeof e!="object")return o;const t={...o},r=[{name:"requiresLogin",type:"boolean"},{name:"logoutReturnUrl",type:"string"},{name:"residency",type:"string"},{name:"sso",type:"string | string[]"},{name:"rbac",type:"object"}],n=[];for(const h of r){const d=h.name;d in t&&t[d]!==void 0&&!(d in e)&&n.push(d)}return n.length>0&&l.warn(`The following properties at root level are deprecated: ${n.join(", ")}. Please move them to the 'access' object.`),"requiresLogin"in e&&e.requiresLogin!==void 0&&(t.requiresLogin=e.requiresLogin),"logoutReturnUrl"in e&&e.logoutReturnUrl!==void 0&&(t.logoutReturnUrl=e.logoutReturnUrl),"residency"in e&&e.residency!==void 0&&(t.residency=e.residency),"sso"in e&&e.sso!==void 0&&(t.sso=e.sso),"rbac"in e&&e.rbac!==void 0&&(t.rbac=e.rbac),delete t.access,t}function M(o){if(!o.theme)return[];l.warn("The 'theme' property in redocly.yaml is deprecated. Please move all of the properties from 'theme' to the root of the config.");const e=[];for(const t of Object.keys(o.theme))o[t]==null?e.push(t):l.warn(`Detected both '${t}' and 'theme.${t}' properties in redocly.yaml. The 'theme.${t}' property will be ignored and needs to be removed or merged into the '${t}'.`);return e}function N(o,e){if(!o.theme||e.length===0)return o;const t={...o};for(const r of e)t[r]=o.theme[r];return delete t.theme,t}export{X as readAndValidateConfig};
@@ -1 +1 @@
1
- import{REDOCLY_TEAMS_RBAC as c}from"@redocly/config";import{DEV_LOGIN_SLUG as u,INVITE_SLUG as T,PUBLIC_RBAC_SCOPE_ITEM as m,UI_ACCESSIBLE_CONFIG_PROPS as b,CONFIG_FILE_NAME as n,DEFAULT_SSO_IDP_TITLE as P}from"../../../constants/common.js";import{isDevelopMode as _}from"../../utils/envs/is-develop-mode.js";import{getTemplatePath as s}from"./get-template-path.js";import{resolveLinksFromConfig as p}from"../nav-utils.js";import{resolveLogoConfig as F}from"./resolve-logo.js";import{extractTeamNames as E}from"./extract-team-names.js";import{resolveProductsConfig as O}from"./resolve-products-config.js";import{getExcludedFromLinkCheckerPatterns as y}from"../sidebars/utils.js";import{resolveEntitiesCatalogConfig as A}from"./resolve-catalog-entities.js";import{telemetryTraceStep as j}from"../../../cli/telemetry/helpers/trace-step.js";async function q(r){return{id:"Default Theme",async processContent(e){await j("build.plugin.default_theme",async()=>{const t=v(e),a=Object.keys(e.getConfig()?.ssoDirect||{}).length>0,i=e.createTemplate("invite",s("../../../../dist/client/app/pages/Invite/Invite.js"));if(e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:T,[c]:m,fsPath:T,templateId:i}),r.devLogin&&a){const o={frontmatter:{},seo:{title:"Login page"},authIdps:f(t),rbac:{teams:E(e.getConfig().rbac)}},l=e.createTemplate("dev-login",s("../../../../dist/client/app/pages/DevLogin/DevLogin.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:u,[c]:m,fsPath:u,templateId:l,getStaticData:async()=>({props:o})})}else if(t.length>1){const o={frontmatter:{},seo:{title:"Login page"},authIdps:f(t)},l=e.createTemplate("login",s("../../../../dist/client/app/pages/Login/Login.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,slug:u,[c]:m,fsPath:u,templateId:l,getStaticData:async()=>({props:o})})}e.createTemplate("404",s("../../../../dist/client/app/pages/404/404.js")),e.createTemplate("403",s("../../../../dist/client/app/pages/403/403.js")),e.createTemplate("403OIDC",s("../../../../dist/client/app/pages/403/403OIDC.js")),_()&&e.createTemplate("compilation-error",s("../../../../dist/client/app/pages/CompilationError/CompilationError.js"))})},async afterRoutesCreated(e,t){const{contentDir:a,outdir:i}=e,o=e.getConfig(),{navbar:l,footer:S,userMenu:g,search:I,breadcrumbs:L,products:D}=o,C=Object.keys(o?.ssoDirect||{}).length>0,d=y(o),h={navFile:n,excludedFromLinkCheckerPatterns:d};e.setGlobalData({...k(o),navbar:await p(l,a,e,t,h),footer:await p(S,a,e,t,h),breadcrumbs:{...L,prefixItems:await p(L?.prefixItems||[],a,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},userMenu:{...g,hide:g?.hide??!C,menu:await p(g?.items,a,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},logo:await F(o.logo,n,i,t.fs),auth:{idpsInfo:f(v(e)),devLogin:r.devLogin&&C},products:await O(D,e,t),search:{...I,suggestedPages:await p(I?.suggestedPages,a,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},entitiesCatalog:await A(o.entitiesCatalog,n,i,t.fs),headScriptTags:void 0,linkTags:void 0,postBodyScriptTags:void 0,preBodyScriptTags:void 0})}}}function v(r){const e=r.getConfig().ssoDirect;return Object.entries(e||{}).map(([a,i])=>({idpId:a,type:i.type,title:i.title}))}function f(r){return process.env.LOCALHOST_LOGIN==="true"?r:r.filter(t=>t.title!==P)}function k(r){const e={};for(const t of b)r[t]&&(e[t]=r[t]);return e}export{q as defaultThemePlugin,k as pickUiAccessibleConfig};
1
+ import{REDOCLY_TEAMS_RBAC as c}from"@redocly/config";import{DEV_LOGIN_SLUG as g,INVITE_SLUG as T,PUBLIC_RBAC_SCOPE_ITEM as m,UI_ACCESSIBLE_CONFIG_PROPS as P,CONFIG_FILE_NAME as n,DEFAULT_SSO_IDP_TITLE as _}from"../../../constants/common.js";import{envConfig as v}from"../../../config/env-config.js";import{getTemplatePath as s}from"./get-template-path.js";import{resolveLinksFromConfig as p}from"../nav-utils.js";import{resolveLogoConfig as F}from"./resolve-logo.js";import{extractTeamNames as E}from"./extract-team-names.js";import{resolveProductsConfig as O}from"./resolve-products-config.js";import{getExcludedFromLinkCheckerPatterns as y}from"../sidebars/utils.js";import{resolveEntitiesCatalogConfig as A}from"./resolve-catalog-entities.js";import{telemetryTraceStep as j}from"../../../cli/telemetry/helpers/trace-step.js";async function q(r){return{id:"Default Theme",async processContent(e){await j("build.plugin.default_theme",async()=>{const t=S(e),o=Object.keys(e.getConfig()?.ssoDirect||{}).length>0,a=e.createTemplate("invite",s("../../../../dist/client/app/pages/Invite/Invite.js"));if(e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:T,[c]:m,fsPath:T,templateId:a}),r.devLogin&&o){const i={frontmatter:{},seo:{title:"Login page"},authIdps:f(t),rbac:{teams:E(e.getConfig().rbac)}},l=e.createTemplate("dev-login",s("../../../../dist/client/app/pages/DevLogin/DevLogin.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,excludeFromSearch:!0,slug:g,[c]:m,fsPath:g,templateId:l,getStaticData:async()=>({props:i})})}else if(t.length>1){const i={frontmatter:{},seo:{title:"Login page"},authIdps:f(t)},l=e.createTemplate("login",s("../../../../dist/client/app/pages/Login/Login.js"));e.addRoute({duplicateInAllLocales:!0,excludeFromSidebar:!0,slug:g,[c]:m,fsPath:g,templateId:l,getStaticData:async()=>({props:i})})}e.createTemplate("404",s("../../../../dist/client/app/pages/404/404.js")),e.createTemplate("403",s("../../../../dist/client/app/pages/403/403.js")),e.createTemplate("403OIDC",s("../../../../dist/client/app/pages/403/403OIDC.js")),v.isDevelopMode&&e.createTemplate("compilation-error",s("../../../../dist/client/app/pages/CompilationError/CompilationError.js"))})},async afterRoutesCreated(e,t){const{contentDir:o,outdir:a}=e,i=e.getConfig(),{navbar:l,footer:D,userMenu:u,search:I,breadcrumbs:C,products:b}=i,L=Object.keys(i?.ssoDirect||{}).length>0,d=y(i),h={navFile:n,excludedFromLinkCheckerPatterns:d};e.setGlobalData({...k(i),navbar:await p(l,o,e,t,h),footer:await p(D,o,e,t,h),breadcrumbs:{...C,prefixItems:await p(C?.prefixItems||[],o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},userMenu:{...u,hide:u?.hide??!L,menu:await p(u?.items,o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},logo:await F(i.logo,n,a,t.fs),auth:{idpsInfo:f(S(e)),devLogin:r.devLogin&&L},products:await O(b,e,t),search:{...I,suggestedPages:await p(I?.suggestedPages,o,e,t,{navFile:n,excludedFromLinkCheckerPatterns:d})},entitiesCatalog:await A(i.entitiesCatalog,n,a,t.fs),headScriptTags:void 0,linkTags:void 0,postBodyScriptTags:void 0,preBodyScriptTags:void 0})}}}function S(r){const e=r.getConfig().ssoDirect;return Object.entries(e||{}).map(([o,a])=>({idpId:o,type:a.type,title:a.title}))}function f(r){return v.LOCALHOST_LOGIN==="true"?r:r.filter(t=>t.title!==_)}function k(r){const e={};for(const t of P)r[t]&&(e[t]=r[t]);return e}export{q as defaultThemePlugin,k as pickUiAccessibleConfig};
@@ -1 +1 @@
1
- import{writeFileSync as P}from"node:fs";import T from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as y}from"../../constants/common.js";import{readEnvVariable as F}from"../../utils/envs/read-env-variable.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as b}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as S}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as O,isPathIgnored as R}from"../../utils/index.js";import{isGraphqlDoc as $}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as E}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as M}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as l}from"../../../config/product-gates.js";import{isAsyncapiDoc as k}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as _}from"../../../cli/telemetry/helpers/trace-step.js";async function Y(){return{id:"entitlements",async afterRoutesCreated(w,u){await _("build.plugin.entitlements",async t=>{const i=S.instance(),r=[],n=[],s=[],a=[],p=[];for(const{relativePath:e}of u.fs.scan())R(e)||(E(e)?r.push(e):$(e)?s.push(e):b(e)?a.push(e):await M(e,u)?n.push(e):await k(e,u)&&p.push(e));const g=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",r.length.toString()),t?.setAttribute("isMarkdownSupported",(!!g).toString()),r.length>0&&!g&&o.warn(`The product you are using ("${l}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const c=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",n.length.toString()),t?.setAttribute("isOpenApiSupported",(!!c).toString()),n.length>0&&!c&&o.warn(`The product you are using ("${l}") does not support OpenAPI documents. The following files are ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const d=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",p.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!d).toString()),p.length>0&&!d&&o.warn(`The product you are using ("${l}") does not support AsyncAPI documents. The following files are ignored: ${p.map(()=>"%rp").join(", ")}`,...p);const m=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",s.length.toString()),t?.setAttribute("isGraphqlSupported",(!!m).toString()),s.length>0&&!m&&o.warn(`The product you are using ("${l}") does not support GraphQL documents. The following files are ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const f=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!f).toString()),a.length>0&&!f&&o.warn(`The product you are using ("${l}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const A=O(w.getAllRoutes());t?.setAttribute("totalBilledPages",A.toString());const h=F("REDOCLY_METADATA_OUTPUT_FOLDER");h&&(o.info("Save total pages..."),P(T.join(h,y),JSON.stringify({totalPages:A},null)))})}}}export{Y as entitlementsPlugin};
1
+ import{writeFileSync as P}from"node:fs";import T from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as y}from"../../constants/common.js";import{envConfig as F}from"../../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as S}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as b}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as O,isPathIgnored as R}from"../../utils/index.js";import{isGraphqlDoc as $}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as M}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as k}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as l}from"../../../config/product-gates.js";import{isAsyncapiDoc as E}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as _}from"../../../cli/telemetry/helpers/trace-step.js";async function z(){return{id:"entitlements",async afterRoutesCreated(w,u){await _("build.plugin.entitlements",async t=>{const i=b.instance(),n=[],r=[],s=[],a=[],p=[];for(const{relativePath:e}of u.fs.scan())R(e)||(M(e)?n.push(e):$(e)?s.push(e):S(e)?a.push(e):await k(e,u)?r.push(e):await E(e,u)&&p.push(e));const g=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",n.length.toString()),t?.setAttribute("isMarkdownSupported",(!!g).toString()),n.length>0&&!g&&o.warn(`The product you are using ("${l}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const c=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",r.length.toString()),t?.setAttribute("isOpenApiSupported",(!!c).toString()),r.length>0&&!c&&o.warn(`The product you are using ("${l}") does not support OpenAPI documents. The following files are ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const d=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",p.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!d).toString()),p.length>0&&!d&&o.warn(`The product you are using ("${l}") does not support AsyncAPI documents. The following files are ignored: ${p.map(()=>"%rp").join(", ")}`,...p);const m=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",s.length.toString()),t?.setAttribute("isGraphqlSupported",(!!m).toString()),s.length>0&&!m&&o.warn(`The product you are using ("${l}") does not support GraphQL documents. The following files are ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const f=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!f).toString()),a.length>0&&!f&&o.warn(`The product you are using ("${l}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const A=O(w.getAllRoutes());t?.setAttribute("totalBilledPages",A.toString());const h=F.REDOCLY_METADATA_OUTPUT_FOLDER;h&&(o.info("Save total pages..."),P(T.join(h,y),JSON.stringify({totalPages:A},null)))})}}}export{z as entitlementsPlugin};
@@ -1,2 +1,2 @@
1
- import _ from"@redocly/portal-plugin-mock-server";import B from"path";import{REDOCLY_ROUTE_RBAC as x}from"@redocly/config";import{combineUrls as v,withPathPrefix as O}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as N}from"../constants/common.js";import{removeTrailingSlash as D}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as L}from"../../utils/url/remove-leading-slash.js";import{isTruthy as V}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as F}from"../../utils/path/normalize-route-slug.js";import{slash as j}from"../../utils/path/slash.js";import{parsePathVersions as k}from"../../utils/path/parse-path-versions.js";import{reporter as E}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{isDevelopMode as $}from"../utils/envs/is-develop-mode.js";import{shaDirPathShort as z}from"../utils/crypto/sha-dir-path-short.js";import{customPagesPlugin as M}from"../../server/plugins/pages/index.js";import{openAPIDocsPlugin as q}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 H}from"../esbuild/generate.js";import{graphqlDocsPlugin as Y}from"./graphql-docs/index.js";import{searchPlugin as J}from"./search/index.js";import{defaultThemePlugin as Q}from"./default-theme/index.js";import{apiKeyMgmtPlugin as X}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as Z}from"./api-functions/index.js";import{scorecardClassicPlugin as ee}from"./scorecard-classic/index.js";import{lintPlugin as te}from"./lint/index.js";import{resolvePlugins as oe}from"../config/external-plugins.js";import{sidebarsPlugin as ie}from"./sidebars/index.js";import{l10nPlugin as ne}from"./l10n/index.js";import{analyticsPlugins as re}from"./analytics/index.js";import{sitemapPlugin as se}from"./sitemap/index.js";import{entitlementsPlugin as ae}from"./entitlements/index.js";import{getBilledPagesCount as le,slug as ce}from"../utils/index.js";import{telemetry as ue}from"../../cli/telemetry/index.js";import{telemetryTraceStep as b}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as A}from"../entitlements/entitlements-provider.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 pe}from"../utils/product.js";import{parseBaseName as ge}from"./utils.js";import{isRouteReserved as Pe}from"./get-reserved-routes.js";import{catalogClassicPlugin as he}from"./catalog-classic/index.js";import{arazzoDocsPlugin as ye}from"./arazzo-docs/index.js";const we=[U,fe,Q,ne,G,q,I,ye,ee,te,Z,M,Y,X,he,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>process.env.NEW_CATALOG_ENABLED==="true"},{importPath:"./scorecards/plugin.js",loadCondition:()=>process.env.NEW_SCORECARDS_ENABLED==="true"},{importPath:"./mcp/index.js",loadCondition:()=>A.instance().canAccessFeature("mcp")},ie,se,ae,J,_,...re];async function gt(o,t=we){return await b("build.plugins_init",async()=>{const n=[],C=A.instance(),h={};for(const f of t){let a;if("loadCondition"in f){if(!f.loadCondition())continue;const e=await import(f.importPath);if(!e.default||typeof e.default!="function"){await E.panicOnBuild(`Dynamic plugin ${f.importPath} does not export a default export or it is not a function`);continue}a=e.default}else a=f;const d=await a(o);for(const[e,i]of Object.entries(d.loaders||{}))h[e]&&await E.panicOnBuild(`Duplicate loader with name ${e}`),h[e]=i;(!d.requiredEntitlements||d.requiredEntitlements?.every(e=>C.canAccessFeature(e)))&&n.push(d)}const s=new de(o.contentDir);await s.ready;const u=new me(s);return u.setLoaders(h),P.verbose("All plugins instantiated"),{pluginInstances:n,lifecycleContext:ve(s,u)}})}function T(o){P.verbose("Generating templates"),b("build.write_client_entries",()=>{H(o),W(o),K(o)})}async function Ce(o){const t=o.getAllRoutes();le(t)||await E.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function Pt(o,t,n,C={}){const h=A.instance();try{await b("build.plugins_run",async()=>{t.startPluginsRun();let s=[];await b("build.plugins_process_content",async a=>{for(const e of o){const i=P.startTiming();await e.processContent?.(t,n),P.verboseTime(i,`processContent for ${e.id}`)}s=(await oe(t.contentDir,t.config.plugins)).map(e=>e.lifecyclePlugin).filter(e=>V(e)&&(!e.requiredEntitlements||e.requiredEntitlements?.every(i=>h.canAccessFeature(i)))),n.cache.setLoaders(Object.fromEntries(s.flatMap(e=>Object.entries(e.loaders||{}))));for(const e of s){const i=P.startTiming();await e.processContent?.(t,n),P.verboseTime(i,`processContent for ${e.id}`)}a?.setAttribute("externalPluginsProcessed",s.length.toString())});const u=await Re(t,n),f=[...o,...s];T(t),$()?await t.userCodeReady:t.buildRevision++,await b("build.plugins_after_routes_created",async()=>{for(const a of f){const d=P.startTiming();await a.afterRoutesCreated?.(t,u),P.verboseTime(d,`afterRoutesCreated for ${a.id}`)}}),await t.reportUnsetEnvVars(),await Ce(t),T(t)})}catch(s){const u="Unhandled error in plugin. "+s.message+`
2
- `+s.stack;ue.sendCliErrorCaughtMessage({message:u}),C.failFast?await E.panic(u):await E.panicOnBuild(u)}finally{t.finishPluginsRun()}}async function Re(o,t){const{cache:n,fs:C}=t,h=await t.getConfig(),s=Object.values(h.products||{}),u=(await n.load("versions-config","versions-config")).data,f=(await n.load("content-slugs","content-slugs")).data;for(const{duplicateInAllLocales:e,slugSuffix:i,sharedData:y=[],redirectFrom:w=[],...l}of o.newRoutes){const c=F(l.slug?l.slug:a(l.fsPath)),p=D(i?v(c,i):c),r={...l,[x]:{slug:p,fsPath:l.fsPath},slug:p,baseSlug:c,versions:d(l.fsPath,i),product:pe(s,p,a)};Pe(p,h)&&await E.panicOnBuildContentError(`Route "${p}" is reserved and cannot be used. Please choose a different slug for "${l.fsPath}".`),o.routesByFsPath.set(r.fsPath,r.slug),o.routesBySlug.set(r.slug,r);for(const{key:g,id:m}of y)o.addRouteSharedData(r.slug,g,m);for(const g of w)o.addRedirect(g.from,{type:g.type,to:r.slug});if(e)for(const g of C.localeFolders){const m={...r,slug:"/"+g.toLowerCase()+r.slug};o.routesByFsPath.set(m.fsPath,m.slug),o.routesBySlug.set(m.slug,m);for(const{key:R,id:S}of y)o.addRouteSharedData(m.slug,R,S);for(const R of w){const S=v(C.localizationFolder,g,R.from);o.addRedirect(S,{type:R.type,to:m.slug})}}}return o.newRoutes=[],{...t,slugify:a};function a(e){const i=j(e).replace(new RegExp("^(@i18n|@l10n)\\/"),""),y=f.fileSlugs.get(i)||f.dirSlugs.get(D(i));if(y)return y;const{baseName:w,isIndexFile:l}=ge(e);let c=B.dirname(e.replace(new RegExp("^(@i18n|@l10n)\\/"),""));return c=c==="."?"/":c,v("/",ce(l?c:v(c,w)),"/")}function d(e,i=""){const y=k(e);if(!y?.versionName)return;const{versionFolderPath:w,filePathInVersion:l,versionName:c}=y,p=u.get(w);if(p)return p.versions.map(r=>{const g=p.defaultVersion===r.version,m=L(v(w,N+r.version,l)),R=a(m);return{version:r.version,label:r.name||r.version,link:F(v(R,i)),default:g,active:c===r.version,folderId:z(`${w}`)}})}}function ve(o,t){return{fs:o,cache:t,getConfig:async(n=".")=>(await t.load(n,"nearest-redocly-config",o.localeFolders)).data,isPathIgnored:async n=>(await t.load(n,"is-ignored")).data,withPathPrefix:O,logger:P}}export{we as INTERNAL_PLUGINS,ve as createLifecycleContext,gt as initPlugins,Pt as runPlugins,T as writeClientEntries};
1
+ import B from"@redocly/portal-plugin-mock-server";import x from"path";import{REDOCLY_ROUTE_RBAC as O}from"@redocly/config";import{combineUrls as v,withPathPrefix as N}from"@redocly/theme/core/utils";import{VERSION_SEPARATOR as L}from"../constants/common.js";import{removeTrailingSlash as F}from"../../utils/url/remove-trailing-slash.js";import{removeLeadingSlash as V}from"../../utils/url/remove-leading-slash.js";import{isTruthy as j}from"../../utils/guards/is-truthy.js";import{normalizeRouteSlug as T}from"../../utils/path/normalize-route-slug.js";import{slash as k}from"../../utils/path/slash.js";import{parsePathVersions as $}from"../../utils/path/parse-path-versions.js";import{reporter as E}from"../tools/notifiers/reporter.js";import{logger as P}from"../tools/notifiers/logger.js";import{envConfig as A}from"../../config/env-config.js";import{shaDirPathShort as z}from"../utils/crypto/sha-dir-path-short.js";import{customPagesPlugin as M}from"../../server/plugins/pages/index.js";import{openAPIDocsPlugin as q}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 H}from"../esbuild/generate.js";import{graphqlDocsPlugin as Y}from"./graphql-docs/index.js";import{searchPlugin as J}from"./search/index.js";import{defaultThemePlugin as Q}from"./default-theme/index.js";import{apiKeyMgmtPlugin as X}from"./dev-onboarding/index.js";import{apiFunctionsPlugin as Z}from"./api-functions/index.js";import{scorecardClassicPlugin as ee}from"./scorecard-classic/index.js";import{lintPlugin as te}from"./lint/index.js";import{resolvePlugins as oe}from"../config/external-plugins.js";import{sidebarsPlugin as ie}from"./sidebars/index.js";import{l10nPlugin as ne}from"./l10n/index.js";import{analyticsPlugins as re}from"./analytics/index.js";import{sitemapPlugin as se}from"./sitemap/index.js";import{entitlementsPlugin as ae}from"./entitlements/index.js";import{getBilledPagesCount as le,slug as ce}from"../utils/index.js";import{telemetry as ue}from"../../cli/telemetry/index.js";import{telemetryTraceStep as b}from"../../cli/telemetry/helpers/trace-step.js";import{EntitlementsProvider as D}from"../entitlements/entitlements-provider.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{parseBaseName as pe}from"./utils.js";import{isRouteReserved as Pe}from"./get-reserved-routes.js";import{catalogClassicPlugin as he}from"./catalog-classic/index.js";import{arazzoDocsPlugin as ye}from"./arazzo-docs/index.js";const Ce=[U,fe,Q,ne,G,q,I,ye,ee,te,Z,M,Y,X,he,{importPath:"./catalog-entities/plugin.js",loadCondition:()=>A.NEW_CATALOG_ENABLED==="true"},{importPath:"./scorecards/plugin.js",loadCondition:()=>A.NEW_SCORECARDS_ENABLED==="true"},{importPath:"./mcp/index.js",loadCondition:()=>D.instance().canAccessFeature("mcp")},ie,se,ae,J,B,...re];async function pt(o,t=Ce){return await b("build.plugins_init",async()=>{const n=[],w=D.instance(),h={};for(const f of t){let a;if("loadCondition"in f){if(!f.loadCondition())continue;const e=await import(f.importPath);if(!e.default||typeof e.default!="function"){await E.panicOnBuild(`Dynamic plugin ${f.importPath} does not export a default export or it is not a function`);continue}a=e.default}else a=f;const d=await a(o);for(const[e,i]of Object.entries(d.loaders||{}))h[e]&&await E.panicOnBuild(`Duplicate loader with name ${e}`),h[e]=i;(!d.requiredEntitlements||d.requiredEntitlements?.every(e=>w.canAccessFeature(e)))&&n.push(d)}const s=new de(o.contentDir);await s.ready;const u=new me(s);return u.setLoaders(h),P.verbose("All plugins instantiated"),{pluginInstances:n,lifecycleContext:ve(s,u)}})}function _(o){P.verbose("Generating templates"),b("build.write_client_entries",()=>{H(o),W(o),K(o)})}async function we(o){const t=o.getAllRoutes();le(t)||await E.panicOnBuild("No routes created by plugins. Please check your project configuration.")}async function Pt(o,t,n,w={}){const h=D.instance();try{await b("build.plugins_run",async()=>{t.startPluginsRun();let s=[];await b("build.plugins_process_content",async a=>{for(const e of o){const i=P.startTiming();await e.processContent?.(t,n),P.verboseTime(i,`processContent for ${e.id}`)}s=(await oe(t.contentDir,t.config.plugins)).map(e=>e.lifecyclePlugin).filter(e=>j(e)&&(!e.requiredEntitlements||e.requiredEntitlements?.every(i=>h.canAccessFeature(i)))),n.cache.setLoaders(Object.fromEntries(s.flatMap(e=>Object.entries(e.loaders||{}))));for(const e of s){const i=P.startTiming();await e.processContent?.(t,n),P.verboseTime(i,`processContent for ${e.id}`)}a?.setAttribute("externalPluginsProcessed",s.length.toString())});const u=await Re(t,n),f=[...o,...s];_(t),A.isDevelopMode?await t.userCodeReady:t.buildRevision++,await b("build.plugins_after_routes_created",async()=>{for(const a of f){const d=P.startTiming();await a.afterRoutesCreated?.(t,u),P.verboseTime(d,`afterRoutesCreated for ${a.id}`)}}),await t.reportUnsetEnvVars(),await we(t),_(t)})}catch(s){const u="Unhandled error in plugin. "+s.message+`
2
+ `+s.stack;ue.sendCliErrorCaughtMessage({message:u}),w.failFast?await E.panic(u):await E.panicOnBuild(u)}finally{t.finishPluginsRun()}}async function Re(o,t){const{cache:n,fs:w}=t,h=await t.getConfig(),s=Object.values(h.products||{}),u=(await n.load("versions-config","versions-config")).data,f=(await n.load("content-slugs","content-slugs")).data;for(const{duplicateInAllLocales:e,slugSuffix:i,sharedData:y=[],redirectFrom:C=[],...l}of o.newRoutes){const c=T(l.slug?l.slug:a(l.fsPath)),g=F(i?v(c,i):c),r={...l,[O]:{slug:g,fsPath:l.fsPath},slug:g,baseSlug:c,versions:d(l.fsPath,i),product:ge(s,g,a)};Pe(g,h)&&await E.panicOnBuildContentError(`Route "${g}" is reserved and cannot be used. Please choose a different slug for "${l.fsPath}".`),o.routesByFsPath.set(r.fsPath,r.slug),o.routesBySlug.set(r.slug,r);for(const{key:p,id:m}of y)o.addRouteSharedData(r.slug,p,m);for(const p of C)o.addRedirect(p.from,{type:p.type,to:r.slug});if(e)for(const p of w.localeFolders){const m={...r,slug:"/"+p.toLowerCase()+r.slug};o.routesByFsPath.set(m.fsPath,m.slug),o.routesBySlug.set(m.slug,m);for(const{key:R,id:S}of y)o.addRouteSharedData(m.slug,R,S);for(const R of C){const S=v(w.localizationFolder,p,R.from);o.addRedirect(S,{type:R.type,to:m.slug})}}}return o.newRoutes=[],{...t,slugify:a};function a(e){const i=k(e).replace(new RegExp("^(@i18n|@l10n)\\/"),""),y=f.fileSlugs.get(i)||f.dirSlugs.get(F(i));if(y)return y;const{baseName:C,isIndexFile:l}=pe(e);let c=x.dirname(e.replace(new RegExp("^(@i18n|@l10n)\\/"),""));return c=c==="."?"/":c,v("/",ce(l?c:v(c,C)),"/")}function d(e,i=""){const y=$(e);if(!y?.versionName)return;const{versionFolderPath:C,filePathInVersion:l,versionName:c}=y,g=u.get(C);if(g)return g.versions.map(r=>{const p=g.defaultVersion===r.version,m=V(v(C,L+r.version,l)),R=a(m);return{version:r.version,label:r.name||r.version,link:T(v(R,i)),default:p,active:c===r.version,folderId:z(`${C}`)}})}}function ve(o,t){return{fs:o,cache:t,getConfig:async(n=".")=>(await t.load(n,"nearest-redocly-config",o.localeFolders)).data,isPathIgnored:async n=>(await t.load(n,"is-ignored")).data,withPathPrefix:N,logger:P}}export{Ce as INTERNAL_PLUGINS,ve as createLifecycleContext,pt as initPlugins,Pt as runPlugins,_ as writeClientEntries};
@@ -1 +1 @@
1
- import{pathToFileURL as o}from"url";import{isDevelopMode as e}from"../../../utils/envs/is-develop-mode.js";async function a(t){if(process.env.REDOCLY_STATIC_BUNDLE)return await import("@redocly-markdoc/schema");try{const r=e()?"js":"mjs";return await import(o(`${t}/user-tags-entry.${r}`)+"?"+new Date)}catch(r){if(e())return{schema:{}};throw r}}export{a as importUserTags};
1
+ import{pathToFileURL as o}from"url";import{envConfig as r}from"../../../../config/env-config.js";async function n(t){if(r.isRuntimeMode)return await import("@redocly-markdoc/schema");try{const e=r.isDevelopMode?"js":"mjs";return await import(o(`${t}/user-tags-entry.${e}`)+"?"+new Date)}catch(e){if(r.isDevelopMode)return{schema:{}};throw e}}export{n as importUserTags};
@@ -1 +1 @@
1
- import{nanoid as p}from"nanoid";import{logger as h}from"../../../../tools/notifiers/logger.js";import{sha as m}from"../../../../utils/crypto/sha.js";const a={};function i(e){if(e.toLowerCase().includes("gantt")&&!e.toLowerCase().includes("todaymarker off")){const o=new Date().toISOString().split("T")[0];return m(e+o)}return m(e)}async function y(e,c="default"){if(e.length===0)return[];const r=[];for(let t=0;t<e.length;t++){const n=i(e[t]);a[n]||r.push(e[t])}if(r.length){const t=process.env.REDOCLY_MERMAID_MICROSERVICE_URL||"https://api.redocly.com/mermaid",n=h.startTiming(),d=p(),f=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json","x-request-id":process.env.REQUEST_ID||""},body:JSON.stringify({definitions:r,rayId:d,theme:c,organizationId:process.env.ORGANIZATION_ID})});if(f.status!==200)throw new Error(`Something went wrong during remote rendering. Please, save this Ray ID: ${d} and contact Redocly team.`);h.verboseTime(n,"Rendered mermaid diagrams (%s)",r.length);const g=await f.json();for(let s=0;s<r.length;s++){const l=i(r[s]);a[l]=g[s]}}const o=[];for(let t=0;t<e.length;t++){const n=i(e[t]);o.push(a[n])}return o}export{a as cache,i as generateDiagramHash,y as renderMermaid};
1
+ import{nanoid as R}from"nanoid";import{envConfig as i}from"../../../../../config/env-config.js";import{logger as h}from"../../../../tools/notifiers/logger.js";import{sha as g}from"../../../../utils/crypto/sha.js";const s={};function c(t){if(t.toLowerCase().includes("gantt")&&!t.toLowerCase().includes("todaymarker off")){const o=new Date().toISOString().split("T")[0];return g(t+o)}return g(t)}async function O(t,d="default"){if(t.length===0)return[];const r=[];for(let e=0;e<t.length;e++){const n=c(t[e]);s[n]||r.push(t[e])}if(r.length){const e=i.REDOCLY_MERMAID_MICROSERVICE_URL||"https://api.redocly.com/mermaid",n=h.startTiming(),f=R(),m=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","x-request-id":i.REQUEST_ID||""},body:JSON.stringify({definitions:r,rayId:f,theme:d,organizationId:i.ORGANIZATION_ID})});if(m.status!==200)throw new Error(`Something went wrong during remote rendering. Please, save this Ray ID: ${f} and contact Redocly team.`);h.verboseTime(n,"Rendered mermaid diagrams (%s)",r.length);const l=await m.json();for(let a=0;a<r.length;a++){const p=c(r[a]);s[p]=l[a]}}const o=[];for(let e=0;e<t.length;e++){const n=c(t[e]);o.push(s[n])}return o}export{s as cache,c as generateDiagramHash,O as renderMermaid};
@@ -1 +1 @@
1
- import A from"path";import{REDOCLY_TEAMS_RBAC as m,REDOCLY_ROUTE_RBAC as y}from"@redocly/config";import{removeTrailingSlash as R}from"../../../utils/url/remove-trailing-slash.js";import{addLeadingSlash as S}from"../../../utils/url/add-leading-slash.js";import{resolveFrontmatterKeys as P}from"../resolve-frontmatter-keys.js";import{resolveItem as T}from"../nav-utils.js";const C=new WeakMap;async function _(l,i,s,e,a){const o=await s.getConfig(),{ast:d,compoundHash:n,info:c}=await a.parseMarkdoc(l,s),g={...o.markdown?.editPage,...e.markdown?.editPage},t=i.fsPath!=null?s.fs.getFileInfo(i.fsPath):null,f=!g?.hide&&g?.baseUrl?{to:R(g.baseUrl)+S(t?.realRelativePath||i.fsPath||"")}:void 0,k={...o.feedback,...e.feedback},u=e.feedback?{type:k.type||"sentiment",settings:k.settings||{},hide:e.feedback?.hide}:void 0;let w=C.get(d),r=w?.ast;(!r||w?.compoundHash!==n)&&(r=JSON.stringify(d),C.set(d,{ast:r,compoundHash:n}));let h;e.navigation&&(h={...e.navigation,nextButton:await L(e.navigation.nextButton,i,a,s),previousButton:await L(e.navigation.previousButton,i,a,s)});const p=e?.seo?await P(e.seo,["image"],i.fsPath||"",a,s):void 0,v=c.tagList;Array.isArray(v)&&v.includes("code-walkthrough")&&(e.markdown=e.markdown||{},e.markdown.toc={hide:!0},e.footer=e.footer||{},e.footer={hide:!0});const b=e?.seo?.title||await i.getNavText?.();return{ast:r,frontmatter:await P({...e,...u!==void 0?{feedback:u}:{},...p!==void 0?{seo:p}:{},...h!==void 0?{navigation:h}:{}},o.markdown?.frontMatterKeysToResolve||["image","links"],i.fsPath||"",a,s),editPage:f,props:{metadata:{markdoc:{tagList:c.tagList}},seo:{...p,...b?{title:b}:{}}},[m]:i[m],[y]:i[y]}}async function L(l,i,s,e){if(!l||typeof l!="object")return;let a=l,o,d;if("page"in a&&typeof a.page=="string"){const{page:t,...f}=a;a=f,o=t}if("label"in a&&typeof a.label=="string"){const{label:t,...f}=a;a=f,d=t}let n;if(o){const t=await T({page:o},i.fsPath?A.dirname(i.fsPath):".",s,e,{navFile:i.fsPath||""});n=Array.isArray(t)?t[0]:t,n=n?.type!=="error"?n:void 0}const c=n?.routeSlug,g=d??n?.label;return{...a,label:g,link:c}}export{_ as markdownStaticDataLoader};
1
+ import R from"path";import{REDOCLY_TEAMS_RBAC as b,REDOCLY_ROUTE_RBAC as C}from"@redocly/config";import{removeTrailingSlash as S}from"../../../utils/url/remove-trailing-slash.js";import{addLeadingSlash as T}from"../../../utils/url/add-leading-slash.js";import{resolveFrontmatterKeys as m}from"../resolve-frontmatter-keys.js";import{resolveItem as B}from"../nav-utils.js";const A=new WeakMap;async function F(l,i,s,e,a){const d=await s.getConfig(),{ast:t,compoundHash:n,info:c}=await a.parseMarkdoc(l,s),g={...d.markdown?.editPage,...e.markdown?.editPage},o=i.fsPath!=null?s.fs.getFileInfo(i.fsPath):null,f=!g?.hide&&g?.baseUrl?{to:S(g.baseUrl)+T(o?.realRelativePath||i.fsPath||"")}:void 0,u={...d.feedback,...e.feedback},w=e.feedback?{type:u.type||"sentiment",settings:u.settings||{},hide:e.feedback?.hide}:void 0;Array.isArray(e.banner)&&(e.banner=e.banner.map(r=>r&&r.rbac?{...r,[b]:r.rbac}:r));let v=A.get(t),h=v?.ast;(!h||v?.compoundHash!==n)&&(h=JSON.stringify(t),A.set(t,{ast:h,compoundHash:n}));let p;e.navigation&&(p={...e.navigation,nextButton:await L(e.navigation.nextButton,i,a,s),previousButton:await L(e.navigation.previousButton,i,a,s)});const k=e?.seo?await m(e.seo,["image"],i.fsPath||"",a,s):void 0,y=c.tagList;Array.isArray(y)&&y.includes("code-walkthrough")&&(e.markdown=e.markdown||{},e.markdown.toc={hide:!0},e.footer=e.footer||{},e.footer={hide:!0});const P=e?.seo?.title||await i.getNavText?.();return{ast:h,frontmatter:await m({...e,...w!==void 0?{feedback:w}:{},...k!==void 0?{seo:k}:{},...p!==void 0?{navigation:p}:{}},d.markdown?.frontMatterKeysToResolve||["image","links"],i.fsPath||"",a,s),editPage:f,props:{metadata:{markdoc:{tagList:c.tagList}},seo:{...k,...P?{title:P}:{}}},[b]:i[b],[C]:i[C]}}async function L(l,i,s,e){if(!l||typeof l!="object")return;let a=l,d,t;if("page"in a&&typeof a.page=="string"){const{page:o,...f}=a;a=f,d=o}if("label"in a&&typeof a.label=="string"){const{label:o,...f}=a;a=f,t=o}let n;if(d){const o=await B({page:d},i.fsPath?R.dirname(i.fsPath):".",s,e,{navFile:i.fsPath||""});n=Array.isArray(o)?o[0]:o,n=n?.type!=="error"?n:void 0}const c=n?.routeSlug,g=t??n?.label;return{...a,label:g,link:c}}export{F as markdownStaticDataLoader};
@@ -1 +1 @@
1
- import{extractTokenFromAuthHeader as u}from"../utils/jwt.js";import{getUserParamsFromCookies as d}from"../../../web-server/auth.js";import{DEFAULT_ANONYMOUS_VISITOR_TEAM as i,RBAC_ALL_OTHER_TEAMS as a}from"../../../../constants/common.js";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 p(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 m(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,idp_access_token: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}}:{isAuthenticated:!1,isTokenValid:!1}}function k(e){return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":`Bearer realm="${e}/.well-known/oauth-protected-resource/mcp"`,"Access-Control-Allow-Origin":"*"}})}function T(){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{T as constructInvalidTokenResponse,k as constructUnauthorizedResponse,m as handleMcpAuth,p as shouldHandleMcpAuth};
1
+ import{extractTokenFromAuthHeader as u}from"../../../plugins/mcp/utils/jwt.js";import{getUserParamsFromCookies as d}from"../../../web-server/auth.js";import{DEFAULT_ANONYMOUS_VISITOR_TEAM as o,RBAC_ALL_OTHER_TEAMS as a,ServerRoutes as l}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[o]&&e[o]!=="none"||e[a]&&e[a]!=="none")}function k(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 s=t.teamFoldersBaseRoles;return c(s)?!0:e}async function R(e,t){const r=e.headers.get("Authorization");if(!r)return{isAuthenticated:!1};const s=u(r),i=t?.config?.ssoDirect||{},n=s?await d(i,{authorization:s,idp_access_token: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}}:{isAuthenticated:!1,isTokenValid:!1}}function O(e){return new Response(JSON.stringify({error:"unauthorized",message:"Authentication required"}),{status:401,headers:{"Content-Type":"application/json","WWW-Authenticate":`Bearer realm="${e}${l.MCP_OAUTH_PROTECTED_RESOURCE}${h("/mcp")}"`,"Access-Control-Allow-Origin":"*"}})}function _(){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{_ as constructInvalidTokenResponse,O as constructUnauthorizedResponse,R as handleMcpAuth,k as shouldHandleMcpAuth};
@@ -1 +1 @@
1
- import{telemetry as i}from"../../../../telemetry/index.js";import{mcpToolWorkers as n,MCP_TOOL_WORKER_KEY as a}from"../../../../workers/mcp-tool-worker-pool.js";import{findApiDescriptionByName as p}from"../utils.js";import{getApiDescriptionFromFs as u}from"./utils.js";function f(o,t,s){return{toolName:o,args:t,context:s}}class g{schema;constructor(t){this.schema=t}getContext(t){const s={};for(const e of this.requiredContext)s[e]=t[e];return{...s,apiDescriptionsMap:t.apiDescriptionsMap}}register(t){const s=async(e,r)=>{const c=f(this.name,e,this.getContext(t));return await n.exec(a,[c],{timeout:6e4})};t.server.tool(this.name,this.description,this.schema,s)}async execute(t,s){try{const e=await this.executeAction(t,s);return i.sendMcpToolCalledMessage({server_type:"docs",tool:this.name}),e}catch(e){throw i.sendMcpErrorMessage({server_type:"docs",tool:this.name,message:e instanceof Error?e.message:String(e),stack:e instanceof Error&&e.stack||""}),e}}async getApiDefinition(t,s){if(!s.outdir||!s.accessInfo)throw new Error("Missing required context: outdir and accessInfo");const e=p(s.apiDescriptionsMap,t);if(!e)return{success:!1,response:{content:[{type:"text",text:`No API found matching "${t}".`}]}};const r=await u({relativePath:e.relativePath||"",outdir:s.outdir,accessInfo:s.accessInfo});return r?{success:!0,definition:r}:{success:!1,response:{content:[{type:"text",text:`Spec not found from the file system with "${t}".`}]}}}}export{g as DocsMcpTool};
1
+ import{telemetry as i}from"../../../../telemetry/index.js";import{mcpToolWorkers as n,MCP_TOOL_WORKER_KEY as a}from"../../../../workers/mcp-tool-worker-pool.js";import{findApiDescriptionByName as p}from"../utils.js";import{getApiDescriptionFromFs as u}from"./utils.js";function f(o,t,s){return{toolName:o,args:t,context:s}}class g{schema;constructor(t){this.schema=t}getContext(t){const s={};for(const e of this.requiredContext)s[e]=t[e];return{...s,apiDescriptionsMap:t.apiDescriptionsMap}}register(t){const s=async(e,r)=>{const c=f(this.name,e,this.getContext(t));return await n.exec(a,[c],{timeout:6e4})};t.server.tool(this.name,this.description,this.schema,s)}async execute(t,s){try{const e=await this.executeAction(t,s);return i.sendMcpToolCalledMessage([{object:"mcp_server",server_type:"docs",tool:this.name}]),e}catch(e){throw i.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:this.name,message:e instanceof Error?e.message:String(e),stack:e instanceof Error&&e.stack||""}]),e}}async getApiDefinition(t,s){if(!s.outdir||!s.accessInfo)throw new Error("Missing required context: outdir and accessInfo");const e=p(s.apiDescriptionsMap,t);if(!e)return{success:!1,response:{content:[{type:"text",text:`No API found matching "${t}".`}]}};const r=await u({relativePath:e.relativePath||"",outdir:s.outdir,accessInfo:s.accessInfo});return r?{success:!0,definition:r}:{success:!1,response:{content:[{type:"text",text:`Spec not found from the file system with "${t}".`}]}}}}export{g as DocsMcpTool};
@@ -1 +1 @@
1
- import{resolveParameters as T,resolveRequestBody as y,resolveResponses as P}from"../utils.js";import{isMcpEndpoint as g}from"./utils.js";import{DocsMcpTool as x}from"./docs-mcp-tool.js";import{checkEndpointAndDeleteXMcp as v}from"../../utils/xmcp-utils.js";const p=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","TRACE"],S={type:"object",required:["name","path","method"],additionalProperties:!1,properties:{name:{type:"string",description:"API name (or part of it)",minLength:1},path:{type:"string",description:"Endpoint path (e.g. /api/v1/users)",minLength:1},method:{type:"string",description:"HTTP method (GET, POST, PUT, DELETE, etc.)",enum:[...p,...p.map(r=>r.toLowerCase())],minLength:1}}};class D extends x{name="get-endpoint-info";description="Get comprehensive information about specific endpoint including parameters, security, and examples";requiredContext=["outdir","accessInfo"];constructor(){super(S)}async executeAction(a,c){const{name:d,path:o,method:i}=a,n=await this.getApiDefinition(d,c);if(!n.success)return n.response;const{definition:e}=n,m=o.startsWith("/")?o:`/${o}`,{title:u=""}=e.info||{},s=e.paths?.[m],h=i.toLowerCase();if(!s)return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const t=s[h];if(!g(t)||!v(t,"docs"))return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const f=s?.parameters||[],l=t.parameters||[],E={...t,parameters:T({pathParams:f,opParams:l,definition:e}),requestBody:y(t.requestBody,e),responses:P(t.responses,e)};return{content:[{type:"text",text:JSON.stringify({api:u,version:e.info?.version||"",servers:e.servers||[],endpoint:{path:o,method:i.toUpperCase(),...E},globalSecurity:e.security||[],securitySchemes:e.components?.securitySchemes||[]},null,2)}]}}}export{D as GetEndpointInfoTool};
1
+ import{resolveParameters as T,resolveRequestBody as y,resolveResponses as P}from"../utils.js";import{isMcpEndpoint as g}from"./utils.js";import{DocsMcpTool as x}from"./docs-mcp-tool.js";import{checkEndpointAndDeleteXMcp as v}from"../../utils/xmcp-utils.js";const p=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","TRACE"],S={type:"object",required:["name","path","method"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},path:{type:"string",description:"Endpoint path (e.g. /api/v1/users)",minLength:1},method:{type:"string",description:"HTTP method (GET, POST, PUT, DELETE, etc.)",enum:[...p,...p.map(r=>r.toLowerCase())],minLength:1}}};class D extends x{name="get-endpoint-info";description="Get comprehensive information about specific endpoint including parameters, security, and examples";requiredContext=["outdir","accessInfo"];constructor(){super(S)}async executeAction(c,a){const{name:d,path:o,method:i}=c,n=await this.getApiDefinition(d,a);if(!n.success)return n.response;const{definition:e}=n,m=o.startsWith("/")?o:`/${o}`,{title:u=""}=e.info||{},s=e.paths?.[m],h=i.toLowerCase();if(!s)return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const t=s[h];if(!g(t)||!v(t,"docs"))return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const l=s?.parameters||[],E=t.parameters||[],f={...t,parameters:T({pathParams:l,opParams:E,definition:e}),requestBody:y(t.requestBody,e),responses:P(t.responses,e)};return{content:[{type:"text",text:JSON.stringify({api:u,version:e.info?.version||"",servers:e.servers||[],endpoint:{path:o,method:i.toUpperCase(),...f},globalSecurity:e.security||[],securitySchemes:e.components?.securitySchemes||[]},null,2)}]}}}export{D as GetEndpointInfoTool};
@@ -1 +1 @@
1
- import{DocsMcpTool as r}from"./docs-mcp-tool.js";import{getEndpointsFromPaths as p}from"./utils.js";const c={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name (or part of it)",minLength:1}}};class u extends r{name="get-endpoints";description="Get all endpoints for a specific API";requiredContext=["outdir","accessInfo"];constructor(){super(c)}async executeAction(o,i){const{name:s}=o,e=await this.getApiDefinition(s,i);if(!e.success)return e.response;const{definition:t}=e,n=p(t);return n.length===0?{content:[{type:"text",text:"No endpoints found"}]}:{content:[{type:"text",text:JSON.stringify({api:t.info?.title||"",version:t.info?.version||"",servers:t.servers||[],endpoints:n},null,2)}]}}}export{u as GetEndpointsTool};
1
+ import{DocsMcpTool as r}from"./docs-mcp-tool.js";import{getEndpointsFromPaths as c}from"./utils.js";const p={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1}}};class u extends r{name="get-endpoints";description="Get all endpoints for a specific API";requiredContext=["outdir","accessInfo"];constructor(){super(p)}async executeAction(o,i){const{name:s}=o,t=await this.getApiDefinition(s,i);if(!t.success)return t.response;const{definition:e}=t,n=c(e);return n.length===0?{content:[{type:"text",text:"No endpoints found"}]}:{content:[{type:"text",text:JSON.stringify({api:e.info?.title||"",version:e.info?.version||"",servers:e.servers||[],endpoints:n},null,2)}]}}}export{u as GetEndpointsTool};
@@ -1 +1 @@
1
- import{DocsMcpTool as r}from"./docs-mcp-tool.js";const s={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name (or part of it)",minLength:1}}};class a extends r{name="get-full-api-description";description="Get the complete OpenAPI description";requiredContext=["outdir","accessInfo"];constructor(){super(s)}async executeAction(i,n){const{name:o}=i,e=await this.getApiDefinition(o,n);if(!e.success)return e.response;const{definition:t}=e;return{content:[{type:"text",text:JSON.stringify({api:t.info?.title||"",version:t.info?.version||"",definition:t},null,2)}]}}}export{a as GetFullApiDescriptionTool};
1
+ import{DocsMcpTool as s}from"./docs-mcp-tool.js";const r={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1}}};class a extends s{name="get-full-api-description";description="Get the complete OpenAPI description";requiredContext=["outdir","accessInfo"];constructor(){super(r)}async executeAction(i,n){const{name:o}=i,e=await this.getApiDefinition(o,n);if(!e.success)return e.response;const{definition:t}=e;return{content:[{type:"text",text:JSON.stringify({api:t.info?.title||"",version:t.info?.version||"",definition:t},null,2)}]}}}export{a as GetFullApiDescriptionTool};
@@ -1 +1 @@
1
- import{DocsMcpTool as o}from"./docs-mcp-tool.js";const r={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name (or part of it)",minLength:1}}};class p extends o{name="get-security-schemes";description="Get the security schemes for a specific API";requiredContext=["outdir","accessInfo"];constructor(){super(r)}async executeAction(s,i){const{name:n}=s,t=await this.getApiDefinition(n,i);if(!t.success)return t.response;const{definition:e}=t;return{content:[{type:"text",text:JSON.stringify({name:e.info?.title,version:e.info?.version,securitySchemes:e.components?.securitySchemes||[],security:e.security||[]},null,2)}]}}}export{p as GetSecuritySchemesTool};
1
+ import{DocsMcpTool as c}from"./docs-mcp-tool.js";const o={type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1}}};class p extends c{name="get-security-schemes";description="Get the security schemes for a specific API";requiredContext=["outdir","accessInfo"];constructor(){super(o)}async executeAction(s,i){const{name:n}=s,t=await this.getApiDefinition(n,i);if(!t.success)return t.response;const{definition:e}=t;return{content:[{type:"text",text:JSON.stringify({name:e.info?.title,version:e.info?.version,securitySchemes:e.components?.securitySchemes||[],security:e.security||[]},null,2)}]}}}export{p as GetSecuritySchemesTool};
@@ -1 +1 @@
1
- import{createMcpRequestHandler as D}from"./mcp-request-handler.js";import{createDocsMcpServer as v}from"../servers/docs-server.js";import{filterApiDescriptionsByRbac as h}from"../utils.js";import{createInternalServerError as y}from"./errors.js";import{McpServerType as m}from"../constants.js";import{telemetry as f}from"../../../telemetry/index.js";import{constructInvalidTokenResponse as A,constructUnauthorizedResponse as L,handleMcpAuth as S,shouldHandleMcpAuth as b}from"../auth/auth-handlers.js";async function I(r,s,i,n){try{f.initialize();const e=s,t=e?.props?.config?.apiDescriptionsMap||{},a=e?.props?.outdir||"",o=e?.props?.config?.mcpDocsServerName||"Docs MCP server",u=new URL(n.url).origin,{user:c,config:{rbac:p={},mcp:l={}}}=r,d=h(t,c,p,r.config.requiresLogin||!1),g=l.docs?.name||o,M={rbac:p,email:c?.email,teams:c?.teams,isAuthenticated:!!c?.isAuthenticated,requiresLogin:r.config.requiresLogin||!1};return await v({name:g,baseUrl:u,headers:i,apiDescriptionsMap:d,outdir:a,accessInfo:M})}catch(e){throw f.sendMcpErrorMessage({server_type:m.Docs,message:e?.message||"",stack:e?.stack||""}),y(e?.message||"Internal server error mcp docs")}}const R=D({createServerInstance:I,serverType:m.Docs}),w=async(r,s,i)=>{const n=!!s?.config?.requiresLogin,e=s?.config?.rbac;if(b(n,e)){const{isAuthenticated:t,isTokenValid:a,currentUser:o}=await S(r,s);if(!t)return L(new URL(r.url).origin);if(!a)return A();o&&(s.user=o)}return R(r,s,i)};var E=w;export{E as default};
1
+ import{createMcpRequestHandler as v}from"./mcp-request-handler.js";import{createDocsMcpServer as D}from"../servers/docs-server.js";import{filterApiDescriptionsByRbac as h}from"../utils.js";import{createInternalServerError as y}from"./errors.js";import{McpServerType as m}from"../constants.js";import{telemetry as f}from"../../../telemetry/index.js";import{constructInvalidTokenResponse as b,constructUnauthorizedResponse as A,handleMcpAuth as L,shouldHandleMcpAuth as S}from"../auth/auth-handlers.js";async function I(r,s,i,n){try{f.initialize();const e=s,t=e?.props?.config?.apiDescriptionsMap||{},a=e?.props?.outdir||"",o=e?.props?.config?.mcpDocsServerName||"Docs MCP server",u=new URL(n.url).origin,{user:c,config:{rbac:p={},mcp:l={}}}=r,d=h(t,c,p,r.config.requiresLogin||!1),g=l.docs?.name||o,M={rbac:p,email:c?.email,teams:c?.teams,isAuthenticated:!!c?.isAuthenticated,requiresLogin:r.config.requiresLogin||!1};return await D({name:g,baseUrl:u,headers:i,apiDescriptionsMap:d,outdir:a,accessInfo:M})}catch(e){throw f.sendMcpErrorMessage([{object:"mcp_server",server_type:m.Docs,message:e?.message||"",stack:e?.stack||""}]),y(e?.message||"Internal server error mcp docs")}}const R=v({createServerInstance:I,serverType:m.Docs}),w=async(r,s,i)=>{const n=!!s?.config?.requiresLogin,e=s?.config?.rbac;if(S(n,e)){const{isAuthenticated:t,isTokenValid:a,currentUser:o}=await L(r,s);if(!t)return A(new URL(r.url).origin);if(!a)return b();o&&(s.user=o)}return R(r,s,i)};var E=w;export{E as default};
@@ -1 +1 @@
1
- import{telemetry as c}from"../../../telemetry/index.js";import{McpErrorCodes as s,McpServerType as d}from"../constants.js";class n extends Error{code;data;requestId;constructor(e,t,o,a){super(t),this.name="McpError",this.code=e,this.data=o,this.requestId=a}createErrorResponse(){const e={jsonrpc:"2.0",error:{code:this.code,message:this.message,...this.data?{data:this.data}:{}},id:this.requestId??null},t=i(this.code);return new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":"application/json"}})}}function i(r){switch(r){case s.InvalidRequest:case s.InvalidParams:return 400;case s.MethodNotFound:return 404;case s.ServerError:return 405;case s.InternalError:default:return 500}}function m(r){return new n(s.ServerError,"Method not allowed",void 0,r).createErrorResponse()}function u(r,e=d.Docs,t){const o=r instanceof Error?r.message:String(r),a=r instanceof Error?r.stack:void 0;return c.sendMcpErrorMessage({server_type:e,message:o,stack:a||""}),new n(s.InternalError,"Internal server error mcp",o,t).createErrorResponse()}function f(r="Invalid request",e){return new n(s.InvalidRequest,r,void 0,e).createErrorResponse()}function h(r="Invalid parameters",e){return new n(s.InvalidParams,r,void 0,e).createErrorResponse()}async function v(r,e,t){try{return await r()}catch(o){return c.sendMcpErrorMessage({server_type:e,message:o?.message||"",stack:o?.stack||""}),t&&t(),u(o,e)}}export{n as McpError,u as createInternalServerError,h as createInvalidParamsError,f as createInvalidRequestError,m as createMethodNotAllowedError,v as withErrorHandling};
1
+ import{telemetry as c}from"../../../telemetry/index.js";import{McpErrorCodes as s,McpServerType as d}from"../constants.js";class n extends Error{code;data;requestId;constructor(e,t,o,a){super(t),this.name="McpError",this.code=e,this.data=o,this.requestId=a}createErrorResponse(){const e={jsonrpc:"2.0",error:{code:this.code,message:this.message,...this.data?{data:this.data}:{}},id:this.requestId??null},t=i(this.code);return new Response(JSON.stringify(e),{status:t,headers:{"Content-Type":"application/json"}})}}function i(r){switch(r){case s.InvalidRequest:case s.InvalidParams:return 400;case s.MethodNotFound:return 404;case s.ServerError:return 405;case s.InternalError:default:return 500}}function m(r){return new n(s.ServerError,"Method not allowed",void 0,r).createErrorResponse()}function p(r,e=d.Docs,t){const o=r instanceof Error?r.message:String(r),a=r instanceof Error?r.stack:void 0;return c.sendMcpErrorMessage([{object:"mcp_server",server_type:e,message:o,stack:a||""}]),new n(s.InternalError,"Internal server error mcp",o,t).createErrorResponse()}function f(r="Invalid request",e){return new n(s.InvalidRequest,r,void 0,e).createErrorResponse()}function h(r="Invalid parameters",e){return new n(s.InvalidParams,r,void 0,e).createErrorResponse()}async function v(r,e,t){try{return await r()}catch(o){return c.sendMcpErrorMessage([{object:"mcp_server",server_type:e,message:o?.message||"",stack:o?.stack||""}]),t&&t(),p(o,e)}}export{n as McpError,p as createInternalServerError,h as createInvalidParamsError,f as createInvalidRequestError,m as createMethodNotAllowedError,v as withErrorHandling};
@@ -1 +1 @@
1
- import{withPathPrefix as m}from"@redocly/theme/core/utils";import{importApiRoutesHandler as d}from"../../../api-routes/import-api-routes-handlers.js";import{enhanceContext as f}from"../../../api-routes/helpers/enhance-context.js";import{telemetry as h}from"../../../telemetry/index.js";import{KvService as A}from"../../../persistence/kv/services/kv-service.js";async function v(n,a,t){const e=a.get("auth"),i=await t.resolveRouteStaticData(n)||{},r=m(n.slug),{requestHandlers:o}=await d(t.serverOutDir),c=o[n.requestHandlerId],p=(await c()).default,u=async()=>await A.getInstance({baseDbDir:t.serverOutDir,sqldRemoteDatabaseUrl:process.env.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),l=f({honoCtx:a,ctx:{user:{teams:e.teams,email:e.claims.email,claims:e.claims,idpAccessToken:e.idpAccessToken,idpId:e.claims.idpId,isAuthenticated:e.isAuthenticated},config:t.config},telemetry:h,getKv:u}),s=await p(a.req.raw,l,{...i,props:{...i.props,routeSlug:r,outdir:t.outdir}});return s instanceof Response?s:typeof s=="string"?new Response(s,{headers:{"Content-Type":"text/plain"}}):new Response(JSON.stringify(s),{headers:{"Content-Type":"application/json"}})}export{v as handleMcpRequest};
1
+ import{withPathPrefix as d}from"@redocly/theme/core/utils";import{importApiRoutesHandler as f}from"../../../api-routes/import-api-routes-handlers.js";import{enhanceContext as h}from"../../../api-routes/helpers/enhance-context.js";import{telemetry as A}from"../../../telemetry/index.js";import{KvService as D}from"../../../persistence/kv/services/kv-service.js";import{envConfig as o}from"../../../../config/env-config.js";async function y(a,s,t){const e=s.get("auth"),i=await t.resolveRouteStaticData(a)||{},r=d(a.slug),{requestHandlers:c}=await f(t.serverOutDir),p=c[a.requestHandlerId],m=(await p()).default,u=async()=>await D.getInstance({baseDbDir:t.serverOutDir,sqldRemoteDatabaseUrl:o.SQLD_REMOTE_DATABASE_URL,sqldRemoteDatabaseAuthToken:o.SQLD_REMOTE_DATABASE_AUTH_TOKEN}),l=h({honoCtx:s,ctx:{user:{teams:e.teams,email:e.claims.email,claims:e.claims,idpAccessToken:e.idpAccessToken,idpId:e.claims.idpId,isAuthenticated:e.isAuthenticated},config:t.config},telemetry:A,getKv:u}),n=await m(s.req.raw,l,{...i,props:{...i.props,routeSlug:r,outdir:t.outdir}});return n instanceof Response?n:typeof n=="string"?new Response(n,{headers:{"Content-Type":"text/plain"}}):new Response(JSON.stringify(n),{headers:{"Content-Type":"application/json"}})}export{y as handleMcpRequest};
@@ -1 +1 @@
1
- import{McpServer as t}from"@redocly/mcp-typescript-sdk/server/mcp.js";import{StreamableHTTPServerTransport as s}from"@redocly/mcp-typescript-sdk/server/streamableHttp.js";import{telemetry as i}from"../../../telemetry/index.js";class p{server;transport;#r;#t=!1;constructor(e){this.server=new t(e,{capabilities:{logging:{}}}),this.transport=new s({sessionIdGenerator:void 0})}async initialize(){return this.registerTools(),await this.server.connect(this.transport),{server:this.server,transport:this.transport,cleanup:this.cleanup.bind(this)}}clearCleanupTimeout(){this.#r&&(clearTimeout(this.#r),this.#r=void 0)}#e;async cleanup(){return this.#e?this.#e:(this.#e=this.#s(),this.#e)}async#s(){if(!this.#t){this.#t=!0,this.clearCleanupTimeout();try{this.transport.close()}catch(e){throw i.sendMcpErrorMessage({server_type:this.getServerType(),message:e?.message||"Unknown cleanup error",stack:e?.stack||""}),e}}}}async function h(r,...e){return await new r(...e).initialize()}export{p as BaseMcpServer,h as createMcpServerInstance};
1
+ import{McpServer as t}from"@redocly/mcp-typescript-sdk/server/mcp.js";import{StreamableHTTPServerTransport as s}from"@redocly/mcp-typescript-sdk/server/streamableHttp.js";import{telemetry as i}from"../../../telemetry/index.js";class p{server;transport;#r;#t=!1;constructor(e){this.server=new t(e,{capabilities:{logging:{}}}),this.transport=new s({sessionIdGenerator:void 0})}async initialize(){return this.registerTools(),await this.server.connect(this.transport),{server:this.server,transport:this.transport,cleanup:this.cleanup.bind(this)}}clearCleanupTimeout(){this.#r&&(clearTimeout(this.#r),this.#r=void 0)}#e;async cleanup(){return this.#e?this.#e:(this.#e=this.#s(),this.#e)}async#s(){if(!this.#t){this.#t=!0,this.clearCleanupTimeout();try{this.transport.close()}catch(e){throw i.sendMcpErrorMessage([{object:"mcp_server",server_type:this.getServerType(),message:e?.message||"Unknown cleanup error",stack:e?.stack||""}]),e}}}}async function h(r,...e){return await new r(...e).initialize()}export{p as BaseMcpServer,h as createMcpServerInstance};