@redocly/redoc-reef 0.139.0-next.8 → 0.140.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +245 -0
  2. package/dist/api-schemas/search-facets.js +1 -1
  3. package/dist/api-schemas/search.d.ts +1 -0
  4. package/dist/api-schemas/search.js +1 -1
  5. package/dist/cli/develop.js +1 -1
  6. package/dist/cli/eject/resolveEjectParams.js +1 -1
  7. package/dist/client/app/Sidebar/PoweredByRedocly.d.ts +14 -0
  8. package/dist/client/app/Sidebar/PoweredByRedocly.js +40 -0
  9. package/dist/client/app/Sidebar/Sidebar.js +3 -3
  10. package/dist/client/app/hooks/useL10nConfig.d.ts +1 -0
  11. package/dist/client/app/markdoc/custom-components/openapi/replay-openapi.js +1 -1
  12. package/dist/client/app/utils/programmatic-scroll.js +1 -1
  13. package/dist/client/app/webmcp/tools/api-tools.js +1 -1
  14. package/dist/client/app/webmcp/tools/site-tools.js +2 -2
  15. package/dist/client/app/webmcp/useWebMcpTools.js +1 -1
  16. package/dist/client/browser-entry.js +2 -2
  17. package/dist/client/templates/api-docs/template.js +5 -3
  18. package/dist/constants/common.d.ts +2 -0
  19. package/dist/constants/common.js +1 -1
  20. package/dist/constants/l10n/langs/ar.js +1 -1
  21. package/dist/constants/l10n/langs/de.js +1 -1
  22. package/dist/constants/l10n/langs/en.js +1 -1
  23. package/dist/constants/l10n/langs/es.js +1 -1
  24. package/dist/constants/l10n/langs/fr.js +1 -1
  25. package/dist/constants/l10n/langs/hi.js +1 -1
  26. package/dist/constants/l10n/langs/it.js +1 -1
  27. package/dist/constants/l10n/langs/ja.js +1 -1
  28. package/dist/constants/l10n/langs/ko.js +1 -1
  29. package/dist/constants/l10n/langs/pl.js +1 -1
  30. package/dist/constants/l10n/langs/pt-BR.js +1 -1
  31. package/dist/constants/l10n/langs/pt.js +1 -1
  32. package/dist/constants/l10n/langs/ru.js +1 -1
  33. package/dist/constants/l10n/langs/uk.js +1 -1
  34. package/dist/constants/l10n/langs/zh.js +1 -1
  35. package/dist/server/constants/entitlements.d.ts +2 -2
  36. package/dist/server/constants/entitlements.js +1 -1
  37. package/dist/server/entitlements/entitlements-provider.d.ts +8 -2
  38. package/dist/server/entitlements/entitlements-provider.js +1 -1
  39. package/dist/server/entitlements/is-valid-plan.d.ts +2 -2
  40. package/dist/server/entitlements/is-valid-plan.js +1 -1
  41. package/dist/server/fs/content-fs.js +1 -1
  42. package/dist/server/fs/utils/external-ref-resolver.js +2 -2
  43. package/dist/server/fs/utils/is-translation-fallback.d.ts +9 -0
  44. package/dist/server/fs/utils/is-translation-fallback.js +1 -0
  45. package/dist/server/node-bundle-entry.js +1 -1
  46. package/dist/server/plugins/api-docs/get-server-props.js +1 -1
  47. package/dist/server/plugins/api-docs/index.js +1 -1
  48. package/dist/server/plugins/api-docs/loader.js +3 -3
  49. package/dist/server/plugins/api-docs/search/get-ai-search-documents.d.ts +6 -3
  50. package/dist/server/plugins/api-docs/search/get-ai-search-documents.js +52 -52
  51. package/dist/server/plugins/api-docs/utils/inject-metadata.d.ts +19 -0
  52. package/dist/server/plugins/api-docs/utils/inject-metadata.js +1 -0
  53. package/dist/server/plugins/catalog-entities/template/index.js +1 -1
  54. package/dist/server/plugins/config-parser/index.js +1 -1
  55. package/dist/server/plugins/config-parser/loaders/versions-config-loader.js +1 -1
  56. package/dist/server/plugins/default-theme/resolve-logo.js +1 -1
  57. package/dist/server/plugins/dev-onboarding/api/middlewares/auth.d.ts +2 -4
  58. package/dist/server/plugins/dev-onboarding/api/middlewares/integrations.d.ts +2 -4
  59. package/dist/server/plugins/dev-onboarding/api/routes/products.js +1 -1
  60. package/dist/server/plugins/l10n/index.js +1 -1
  61. package/dist/server/plugins/markdown/attribute-resolvers/resolve-json-example-ref.js +1 -1
  62. package/dist/server/plugins/markdown/attribute-resolvers/resolve-link.js +1 -1
  63. package/dist/server/plugins/markdown/get-server-props.js +1 -1
  64. package/dist/server/plugins/markdown/markdoc/resolve-raw-partials.js +1 -1
  65. package/dist/server/plugins/markdown/markdown-static-data-loader.js +1 -1
  66. package/dist/server/plugins/markdown/read-file-content.js +1 -1
  67. package/dist/server/plugins/mcp/gateway-mcp/allowed-http-methods.d.ts +0 -5
  68. package/dist/server/plugins/mcp/gateway-mcp/allowed-http-methods.js +1 -1
  69. package/dist/server/plugins/mcp/gateway-mcp/caller-api-calls.d.ts +3 -4
  70. package/dist/server/plugins/mcp/gateway-mcp/caller-api-calls.js +1 -1
  71. package/dist/server/plugins/nav-utils.js +1 -1
  72. package/dist/server/plugins/search/engines/typesense/index.js +1 -1
  73. package/dist/server/providers/database/has-project-database.js +1 -1
  74. package/dist/server/store.d.ts +3 -1
  75. package/dist/server/store.js +1 -1
  76. package/dist/server/types/index.d.ts +1 -0
  77. package/dist/server/types/plugins/markdown.d.ts +1 -0
  78. package/dist/server/types/static-files.d.ts +6 -0
  79. package/dist/server/types/static-files.js +0 -0
  80. package/dist/server/utils/content/build-static-file-paths.d.ts +15 -0
  81. package/dist/server/utils/content/build-static-file-paths.js +1 -0
  82. package/dist/server/utils/find-disallowed-packages.d.ts +16 -0
  83. package/dist/server/utils/find-disallowed-packages.js +1 -0
  84. package/dist/server/utils/is-realm-or-reef.js +1 -1
  85. package/dist/server/utils/lifecycle-hooks.js +1 -1
  86. package/dist/server/utils/rbac-expand.d.ts +4 -0
  87. package/dist/server/utils/rbac-expand.js +1 -1
  88. package/dist/server/utils/rbac.js +1 -1
  89. package/dist/server/utils/redirects/find-redirect.d.ts +4 -3
  90. package/dist/server/utils/redirects/find-redirect.js +1 -1
  91. package/dist/server/utils/resolve-asset-path.js +1 -1
  92. package/dist/server/utils/validate-allowed-packages.d.ts +7 -0
  93. package/dist/server/utils/validate-allowed-packages.js +2 -0
  94. package/dist/server/web-server/auth.d.ts +2 -0
  95. package/dist/server/web-server/auth.js +3 -3
  96. package/dist/server/web-server/jwt/jwt.js +1 -1
  97. package/dist/server/web-server/middleware/catalogAuthMiddleware.js +1 -1
  98. package/dist/server/web-server/routes/feedback.d.ts +2 -8
  99. package/dist/server/web-server/routes/mcp-routes/mcp-client-metadata.d.ts +3 -3
  100. package/dist/server/web-server/routes/mcp-routes/mcp-client-metadata.js +1 -1
  101. package/dist/server/web-server/routes/mcp-routes/mcp-oauth.js +1 -1
  102. package/dist/server/web-server/utils.d.ts +1 -3
  103. package/dist/types/entitlements.d.ts +10 -1
  104. package/dist/types/global-data.d.ts +4 -0
  105. package/package.json +9 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,244 @@
1
1
  # @redocly/redoc-reef
2
2
 
3
+ ## 0.140.0-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 0a1aff21460: Improved how fast the **Try it** console opens in API docs, especially for operations with many request fields.
8
+ - Updated dependencies [0a1aff21460]
9
+ - @redocly/theme@0.72.0-next.0
10
+ - @redocly/api-docs@0.5.0-next.1
11
+
12
+ ## 0.140.0-next.0
13
+
14
+ ### Patch Changes
15
+
16
+ - cc40376e265: Fixed an issue where OpenAPI pages that use `allOf` inheritance with a `oneOf` discriminator caused the server to stop responding.
17
+ - b16218c06df: Fixed security vulnerability `CVE-2026-111757` by upgrading `hono` to version `4.13.13`.
18
+ - 4fdb428674d: Fixed an issue that prevented **Try it** from sending requests and caused the **Security** tab to crash when an OAuth2 security scheme had no `flows` in the API description.
19
+ - Updated dependencies [cc40376e265]
20
+ - @redocly/api-docs@0.5.0-next.0
21
+
22
+ ## 0.139.0
23
+
24
+ ### Minor Changes
25
+
26
+ - e98769a56c2: Added CSV rendering for request and response examples with a CSV media type.
27
+ - 229406a7c50: Added support for the `encoding` object of `multipart/form-data` bodies in OpenAPI code samples and **Try It**.
28
+ - bb237d4d6af: Added the **Copy MCP server URL** page action and reordered the default MCP page actions to **Connect to Claude**, **Connect to VS Code**, then **Connect to Cursor**.
29
+ - 5528de79174: Added Grok setup instructions to the MCP server page.
30
+ - 173a70ea8b1: Added an **Open in Grok** page action, enabled by default.
31
+ - 366a568158c: Added the **deprecated** badges to the **Try it** console to mark deprecated operations and security schemes and to match the badges on the API reference page.
32
+ - ce99178e344: Added a tooltip to the **No schema** status of GraphQL requests in Replay and the **Try it** console that explains why the schema did not load.
33
+ For example, the server is unreachable, requires authentication, or has introspection disabled.
34
+ The **Failed to load schema** notification displays the same reason.
35
+ - 591465450a1: Added a schema status (**No schema**, **Loading schema...**, **Schema loaded**) to the **Query** editor header of GraphQL requests in Replay and the **Try it** console.
36
+ Schema notifications appear only after **Fetch schema** or **Load schema file**.
37
+ - 1897e43b9e6: Added a resize handle between the name and value columns of the parameter tables in the **Try it** console.
38
+ Readers can widen either column to read long parameter names or values.
39
+ - 298fd5a0666: Added a `visibility` Markdoc tag that targets content at humans or at AI agents.
40
+
41
+ ### Patch Changes
42
+
43
+ - e6f7379a3a0: Improved access control to better protect customer resources.
44
+ - c5e11a6d4ff: Fixed the additional properties label in API docs, which looked like a required property named "name".
45
+ - ba104a57878: Fixed an issue where **Copy for LLM**, **Open in Claude**, and **Open in ChatGPT** included default credentials and server values stored in the API description.
46
+ - 9597ef656f7: Fixed an issue in API docs where the title and close button of the security, AsyncAPI server, and GraphQL required scopes dialogs scrolled out of view, and the dialogs did not fit in short browser windows.
47
+ - 9597ef656f7: Fixed an issue in API docs dialogs where the `Tab` key moved focus out of the dialog or skipped links that appeared after the dialog opened.
48
+ - 3abdbf8ec2c: Fixed an issue in OpenAPI docs where request and response samples and schemas for a `discriminator` displayed placeholder values or fields from other options instead of the selected option.
49
+ - d56772035fb: Fixed an issue where GraphQL docs showed argument names in the operation overview list with a capital first letter instead of the case defined in the schema.
50
+ - a4e681b2665: Fixed the **Expand all** and **Collapse all** buttons on GraphQL pages so they respect fields expanded or collapsed manually.
51
+ - 9a8eefed65a: Fixed performance issues with the **Expand all** and **Collapse all** controls on GraphQL pages with many fields.
52
+ - b8b28dd3892: Improved page load times on pages that don't use GraphQL.
53
+ - b07968f01e6: Fixed an issue in OpenAPI docs where the samples panel displayed a variant dropdown that had no effect on schemas with an `example` and a nested `oneOf` or `anyOf`.
54
+ - 5e4068f49ed: Fixed an issue where Markdoc tags in API descriptions ignored their `renderForLlms` output in the Markdown for LLMs and AI search of API docs pages, and appeared as raw tag source instead.
55
+ - 01e8f8211cf: Fixed an issue in API docs where links to sections of the API description didn't scroll to the section on projects with a path prefix.
56
+ - 8fcd0865125: Fixed an issue where API docs and the `json-example` Markdoc tag ignored keywords next to a schema `$ref`, such as `example` or `examples`, in samples for OpenAPI 3.1 and later.
57
+ API docs display the first value of a schema `examples` list as the field example.
58
+ - e58aa28c94f: Fixed an issue where the `sanitize` option was not applied to parameter and schema property descriptions in API docs.
59
+ - 1cb19b59c68: Fixed an issue in API docs where the example selected in the request samples and in **Try it** got out of sync.
60
+ - 7097fbfefbb: Fixed an issue where webhooks in API docs displayed a server switcher with URLs that combined an API server with the webhook name.
61
+ - c836c43c6a9: Fixed an issue in AsyncAPI docs where the **Payload** panel displayed examples from all channel messages on initial page load.
62
+ - 194b4cb7650: Fixed an issue where developer onboarding routes didn't respect path prefix.
63
+ - e9df1370508: Fixed an issue where the `sentiment`, `rating`, `mood`, and `scale` feedback forms didn't display the **Submit** button for anonymous users when `comment.hide` was set to `true` and no reasons were configured.
64
+ - fec5c6c2bdd: Fixed an issue where hovering anywhere in a numbered-list item replaced its number or icon with a link icon.
65
+ - 298fd5a0666: Fixed an issue where custom Markdoc tags in GraphQL descriptions ignored their `renderForLlms` output in AI search and `llms.txt`.
66
+ - 21e0a5f1fd2: Fixed an issue in GraphQL docs where Markdown and HTML in descriptions displayed as raw text in the field and argument lists.
67
+ - e3bbc9190a3: Updated `@redocly/openapi-core` to version `2.63.0`.
68
+ - 37e93575404: Fixed an issue in OpenAPI docs where `llms.txt` showed the API `description` from the `metadata` configuration two times: as the API description and again in the metadata list.
69
+ - 37e93575404: Fixed an issue in API docs where the `.md` routes and `llms.txt` left out Markdoc tags that resolved data at build time, such as `json-schema` and the OpenAPI sample tags, from the API description and operation descriptions.
70
+ - 8c6a6569332: Fixed an issue where page content jumped to the side while long pages were loading.
71
+ - a8c8ee0e5bb: Fixed an issue where MCP clients, such as Raycast, failed to sign in to the authenticated Docs MCP server with the `redirect_uri is not registered for this client` error.
72
+ - c1c61897407: Improved how quickly the mobile navigation menu button responds to taps on slower phones.
73
+ - b4edb142025: Updated `@redocly/openapi-core` to version `2.66.0`.
74
+ - 250163f65ec: Reduced the page actions button to 24px in Markdown pages and API docs, and moved it below the title on mobile devices, so long titles use the full width of the screen.
75
+ - 30084fabe22: Fixed an issue in Markdown pages and API docs where the Copy button label in page actions was highlighted when users selected the page title.
76
+ - 1b2d2cd0851: Updated `@redocly/openapi-core` to version `2.64.0`.
77
+ - aecc0761d29: Improved page load by not loading the API reference code on pages that do not show API docs.
78
+ - 57b0acb89cb: Fixed an issue where the mock server rejected valid query parameter, cookie, and form body values that contained URL-encoded characters.
79
+ - 498cecc7a30: Fixed an issue where screen readers announced the close button without a name in **Try it** console.
80
+ - 498cecc7a30: Fixed an issue in **Try it** console where pressing <kbd>Space</kbd> on the focused close button did not close the console.
81
+ - 6409d73811e: Fixed an issue where Replay's **Close all tabs** action closed open requests and discarded user-entered values without prompting for confirmation.
82
+ - ced24390fd0: Improved the readability of JSON in the **Try it** console: keys, string values, numbers, and `true`, `false`, and `null` values have distinct colors.
83
+ - 311a8448281: Fixed an issue in the **Try it** console where the **OpenId Connect URL** field stayed empty for `openIdConnect` security schemes instead of displaying the URL from the API description.
84
+
85
+ Fixed a misleading message in the **Try it** console for `mutualTLS` security schemes that suggested adding an `Authorization` header. Attaching client certificates is not supported: request are sent without them.
86
+
87
+ - e3dcf465a70: Fixed an issue where the `replay-openapi` embed started loading about two seconds after the page and moved the content below it when it appeared.
88
+ - 1f99eb40dbb: Fixed an issue in the **Try it** console where request body validation reported required `readOnly` properties as missing.
89
+ - 4e08c72bec8: Fixed an issue where Reunite project analytics displayed the number of result categories instead of the number of results for each search query.
90
+ - b82ff0e046f: Fixed an issue where a wildcard redirect to a file in the `static` folder returned a 404 error when the file name contained uppercase characters.
91
+ - b0fd3d5df14: Fixed OIDC sign-in failures after an identity provider rotated its signing key.
92
+ - 59b42652f83: Fixed an issue where the sidebar highlight and the page URL stayed on the previous section when users scrolled a long distance in one step on Markdown pages and in API reference docs.
93
+ - 204627e1fd0: Fixed an issue in the **Try it** console where switching to an operation without its own security lost the document-level security.
94
+ As a result, requests were sent without credentials.
95
+ - 25f78711989: Fixed an issue in the **Try it** console in OpenAPI docs where the first request left out parameters with an empty example value (`''`, `[]`, or `null`) and query parameters with `allowEmptyValue: true`.
96
+ - d1c8ff2547e: Fixed an issue in the **Try it** console that caused `QUERY` and custom HTTP methods to reach the server as `POST`.
97
+ The console displays an error for `TRACE`, `CONNECT`, and `TRACK` requests, which browsers block.
98
+ - d8b32188630: Fixed an issue in the **Try it** console in OpenAPI docs where a search for an operation by its path returned no results.
99
+ - fd0575ebb1e: Fixed security vulnerability `CVE-2026-93687` by removing the `braces` dependency.
100
+ - Updated dependencies [c5e11a6d4ff]
101
+ - Updated dependencies [ba104a57878]
102
+ - Updated dependencies [e98769a56c2]
103
+ - Updated dependencies [9597ef656f7]
104
+ - Updated dependencies [9597ef656f7]
105
+ - Updated dependencies [3abdbf8ec2c]
106
+ - Updated dependencies [229406a7c50]
107
+ - Updated dependencies [d56772035fb]
108
+ - Updated dependencies [a4e681b2665]
109
+ - Updated dependencies [9a8eefed65a]
110
+ - Updated dependencies [b8b28dd3892]
111
+ - Updated dependencies [b07968f01e6]
112
+ - Updated dependencies [5e4068f49ed]
113
+ - Updated dependencies [01e8f8211cf]
114
+ - Updated dependencies [8fcd0865125]
115
+ - Updated dependencies [e58aa28c94f]
116
+ - Updated dependencies [1cb19b59c68]
117
+ - Updated dependencies [7097fbfefbb]
118
+ - Updated dependencies [c836c43c6a9]
119
+ - Updated dependencies [bb237d4d6af]
120
+ - Updated dependencies [652fdc936d2]
121
+ - Updated dependencies [1ce3d4d54e8]
122
+ - Updated dependencies [e9df1370508]
123
+ - Updated dependencies [fec5c6c2bdd]
124
+ - Updated dependencies [21e0a5f1fd2]
125
+ - Updated dependencies [5528de79174]
126
+ - Updated dependencies [173a70ea8b1]
127
+ - Updated dependencies [9c7122e817b]
128
+ - Updated dependencies [e3bbc9190a3]
129
+ - Updated dependencies [8c6a6569332]
130
+ - Updated dependencies [c1c61897407]
131
+ - Updated dependencies [b4edb142025]
132
+ - Updated dependencies [250163f65ec]
133
+ - Updated dependencies [30084fabe22]
134
+ - Updated dependencies [d888b826a0c]
135
+ - Updated dependencies [1b2d2cd0851]
136
+ - Updated dependencies [6409d73811e]
137
+ - Updated dependencies [366a568158c]
138
+ - Updated dependencies [e3dcf465a70]
139
+ - Updated dependencies [a52a520badc]
140
+ - Updated dependencies [59b42652f83]
141
+ - Updated dependencies [204627e1fd0]
142
+ - Updated dependencies [25f78711989]
143
+ - Updated dependencies [6823e2a37f8]
144
+ - Updated dependencies [298fd5a0666]
145
+ - @redocly/api-docs@0.4.0
146
+ - @redocly/theme@0.71.0
147
+ - @redocly/realm-asyncapi-sdk@0.17.0
148
+ - @redocly/portal-plugin-mock-server@0.24.0
149
+
150
+ ## 0.139.0-next.12
151
+
152
+ ### Minor Changes
153
+
154
+ - ce99178e344: Added a tooltip to the **No schema** status of GraphQL requests in Replay and the **Try it** console that explains why the schema did not load.
155
+ For example, the server is unreachable, requires authentication, or has introspection disabled.
156
+ The **Failed to load schema** notification displays the same reason.
157
+
158
+ ### Patch Changes
159
+
160
+ - 8fcd0865125: Fixed an issue where API docs and the `json-example` Markdoc tag ignored keywords next to a schema `$ref`, such as `example` or `examples`, in samples for OpenAPI 3.1 and later.
161
+ API docs display the first value of a schema `examples` list as the field example.
162
+ - Updated dependencies [8fcd0865125]
163
+ - Updated dependencies [1ce3d4d54e8]
164
+ - @redocly/api-docs@0.4.0-next.12
165
+ - @redocly/realm-asyncapi-sdk@0.17.0-next.2
166
+ - @redocly/theme@0.71.0-next.7
167
+
168
+ ## 0.139.0-next.11
169
+
170
+ ### Minor Changes
171
+
172
+ - 591465450a1: Added a schema status (**No schema**, **Loading schema...**, **Schema loaded**) to the **Query** editor header of GraphQL requests in Replay and the **Try it** console.
173
+ Schema notifications appear only after **Fetch schema** or **Load schema file**.
174
+
175
+ ### Patch Changes
176
+
177
+ - e6f7379a3a0: Improved access control to better protect customer resources.
178
+ - 9a8eefed65a: Fixed performance issues with the **Expand all** and **Collapse all** controls on GraphQL pages with many fields.
179
+ - 37e93575404: Fixed an issue in OpenAPI docs where `llms.txt` showed the API `description` from the `metadata` configuration two times: as the API description and again in the metadata list.
180
+ - 37e93575404: Fixed an issue in API docs where the `.md` routes and `llms.txt` left out Markdoc tags that resolved data at build time, such as `json-schema` and the OpenAPI sample tags, from the API description and operation descriptions.
181
+ - b4edb142025: Updated `@redocly/openapi-core` to version `2.66.0`.
182
+ - 250163f65ec: Reduced the page actions button to 24px in Markdown pages and API docs, and moved it below the title on mobile devices, so long titles use the full width of the screen.
183
+ - b82ff0e046f: Fixed an issue where a wildcard redirect to a file in the `static` folder returned a 404 error when the file name contained uppercase characters.
184
+ - Updated dependencies [9a8eefed65a]
185
+ - Updated dependencies [b4edb142025]
186
+ - Updated dependencies [250163f65ec]
187
+ - Updated dependencies [d888b826a0c]
188
+ - @redocly/api-docs@0.4.0-next.11
189
+ - @redocly/theme@0.71.0-next.7
190
+ - @redocly/portal-plugin-mock-server@0.24.0-next.3
191
+
192
+ ## 0.139.0-next.10
193
+
194
+ ### Patch Changes
195
+
196
+ - a4e681b2665: Fixed the **Expand all** and **Collapse all** buttons on GraphQL pages so they respect fields expanded or collapsed manually.
197
+ - Updated dependencies [a4e681b2665]
198
+ - @redocly/api-docs@0.4.0-next.10
199
+
200
+ ## 0.139.0-next.9
201
+
202
+ ### Minor Changes
203
+
204
+ - bb237d4d6af: Added the **Copy MCP server URL** page action and reordered the default MCP page actions to **Connect to Claude**, **Connect to VS Code**, then **Connect to Cursor**.
205
+ - 5528de79174: Added Grok setup instructions to the MCP server page.
206
+ - 366a568158c: Added the **deprecated** badges to the **Try it** console to mark deprecated operations and security schemes and to match the badges on the API reference page.
207
+ - 1897e43b9e6: Added a resize handle between the name and value columns of the parameter tables in the **Try it** console.
208
+ Readers can widen either column to read long parameter names or values.
209
+
210
+ ### Patch Changes
211
+
212
+ - ba104a57878: Fixed an issue where **Copy for LLM**, **Open in Claude**, and **Open in ChatGPT** included default credentials and server values stored in the API description.
213
+ - 3abdbf8ec2c: Fixed an issue in OpenAPI docs where request and response samples and schemas for a `discriminator` displayed placeholder values or fields from other options instead of the selected option.
214
+ - d56772035fb: Fixed an issue where GraphQL docs showed argument names in the operation overview list with a capital first letter instead of the case defined in the schema.
215
+ - b8b28dd3892: Improved page load times on pages that don't use GraphQL.
216
+ - 1cb19b59c68: Fixed an issue in API docs where the example selected in the request samples and in **Try it** got out of sync.
217
+ - e9df1370508: Fixed an issue where the `sentiment`, `rating`, `mood`, and `scale` feedback forms didn't display the **Submit** button for anonymous users when `comment.hide` was set to `true` and no reasons were configured.
218
+ - 30084fabe22: Fixed an issue in Markdown pages and API docs where the Copy button label in page actions was highlighted when users selected the page title.
219
+ - aecc0761d29: Improved page load by not loading the API reference code on pages that do not show API docs.
220
+ - 57b0acb89cb: Fixed an issue where the mock server rejected valid query parameter, cookie, and form body values that contained URL-encoded characters.
221
+ - e3dcf465a70: Fixed an issue where the `replay-openapi` embed started loading about two seconds after the page and moved the content below it when it appeared.
222
+ - b0fd3d5df14: Fixed OIDC sign-in failures after an identity provider rotated its signing key.
223
+ - 59b42652f83: Fixed an issue where the sidebar highlight and the page URL stayed on the previous section when users scrolled a long distance in one step on Markdown pages and in API reference docs.
224
+ - Updated dependencies [ba104a57878]
225
+ - Updated dependencies [3abdbf8ec2c]
226
+ - Updated dependencies [d56772035fb]
227
+ - Updated dependencies [b8b28dd3892]
228
+ - Updated dependencies [1cb19b59c68]
229
+ - Updated dependencies [bb237d4d6af]
230
+ - Updated dependencies [e9df1370508]
231
+ - Updated dependencies [5528de79174]
232
+ - Updated dependencies [9c7122e817b]
233
+ - Updated dependencies [30084fabe22]
234
+ - Updated dependencies [366a568158c]
235
+ - Updated dependencies [e3dcf465a70]
236
+ - Updated dependencies [59b42652f83]
237
+ - @redocly/api-docs@0.4.0-next.9
238
+ - @redocly/theme@0.71.0-next.6
239
+ - @redocly/realm-asyncapi-sdk@0.17.0-next.1
240
+ - @redocly/portal-plugin-mock-server@0.24.0-next.2
241
+
3
242
  ## 0.139.0-next.8
4
243
 
5
244
  ### Minor Changes
@@ -132,6 +371,12 @@
132
371
  - @redocly/theme@0.71.0-next.0
133
372
  - @redocly/api-docs@0.4.0-next.0
134
373
 
374
+ ## 0.138.2
375
+
376
+ ### Patch Changes
377
+
378
+ - 976043da4ad: Improved access control to better protect customer resources.
379
+
135
380
  ## 0.138.1
136
381
 
137
382
  ### Patch Changes
@@ -1 +1 @@
1
- import{z as t}from"zod";import{searchFilterItemSchema as a}from"./search.js";const o=t.object({locale:t.string().max(100),field:t.string().max(100).optional(),query:t.string().max(500).optional(),filter:t.array(a).max(50).optional(),facetQuery:t.string().max(500).optional()});export{o as searchFacetsRequestSchema};
1
+ import{z as e}from"zod";import{searchFieldNameSchema as a,searchFilterItemSchema as t}from"./search.js";const i=e.object({locale:e.string().max(100),field:a.optional(),query:e.string().max(500).optional(),filter:e.array(t).max(50).optional(),facetQuery:e.string().max(500).optional()});export{i as searchFacetsRequestSchema};
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ export declare const searchFieldNameSchema: z.ZodString;
2
3
  export declare const searchFilterItemSchema: z.ZodObject<{
3
4
  field: z.ZodString;
4
5
  values: z.ZodArray<z.ZodString, "many">;
@@ -1 +1 @@
1
- import{z as e}from"zod";const t=e.object({field:e.string().max(100),values:e.array(e.string().max(200)).max(100),isQuickFilter:e.boolean().optional()}),o=e.object({query:e.string().max(500),locale:e.string().max(100),filter:e.array(t).max(50).optional(),loadMore:e.object({groupKey:e.string().max(200),offset:e.number().int().nonnegative()}).optional()});export{t as searchFilterItemSchema,o as searchRequestSchema};
1
+ import{z as e}from"zod";const a=e.string().max(100).regex(/^[^:&|()[\]`,=!<>$]+$/),t=e.object({field:a,values:e.array(e.string().max(200)).max(100),isQuickFilter:e.boolean().optional()}),r=e.object({query:e.string().max(500),locale:e.string().max(100),filter:e.array(t).max(50).optional(),loadMore:e.object({groupKey:e.string().max(200),offset:e.number().int().nonnegative()}).optional()});export{a as searchFieldNameSchema,t as searchFilterItemSchema,r as searchRequestSchema};
@@ -1 +1 @@
1
- import{logger as t}from"../server/tools/notifiers/logger.js";import{reporter as c}from"../server/tools/notifiers/reporter.js";import{green as v}from"../server/tools/notifiers/helpers/colors.js";import{envConfig as m}from"../server/config/env-config.js";import{resolveCache as w}from"../server/esbuild/plugins/themes-resolver.js";import{getBilledPagesCount as p}from"../server/utils/index.js";import{createClientCompiler as R,createServerCompiler as S}from"../server/esbuild/esbuild.js";import{initPlugins as C,runPlugins as f,writeClientEntries as E}from"../server/plugins/lifecycle.js";import{startDevServer as h}from"../server/web-server/dev-server.js";import{validateAllMarkdowns as g}from"../server/plugins/markdown/compiler.js";import{reportAllErrors as b}from"../server/utils/report-all-errors.js";import{copyMigrationsFolder as y}from"../server/providers/database/copy-migrations.js";import{listenStdin as L}from"./utils/listen-stdin.js";const P=20;async function q(i,e){t.info("Starting project preview mode."),e.devLogin=i["dev-login"]!==!1,E(e),t.startTiming("initial-js"),await T(e),t.infoTime("initial-js","JavaScript compiled");const{pluginInstances:l,lifecycleContext:n}=await C({contentDir:e.contentDir,outdir:e.outdir,serverOutDir:void 0,devLogin:e.devLogin,setGlobalConfig:e.setGlobalConfig});e.lifecycleContext=n,y(e),await f(l,e,n,{failFast:!0});const d=async()=>{const r=performance.now();c.clearErrors(),await f(l,e,n),m.REDOCLY_EXP_DISABLE_MD_VALIDATION?t.info("Skipping markdown validation step"):await g(e,n),D().then(async()=>{await b(n);const a=p(e.getAllRoutes()),o=c.summary(` \u{1F440} Last change processed in ${v(Math.round(performance.now()-r)+"ms")}`,a);e.runListeners("errors-updated",void 0,o),e.runListeners("pages-updated",void 0,a),e.runListeners("routes-updated")})};m.REDOCLY_EXP_DISABLE_MD_VALIDATION?t.info("Skipping markdown validation step"):await g(e,n),await b(n);const s=p(e.getAllRoutes());c.summary(" \u{1F440} Watching for changes...",s),e.runListeners("pages-updated",void 0,s),n.fs.watch(async()=>{w.clear(),await d()}),t.verbose("Starting development server."),await h(e,n,{port:Number(i.port||4e3),maxPortRetries:m.isReunite?0:P}),L()}async function T(i){let e=!0,l=!0;const n=async r=>{r==="client"?e=!0:l=!0,i.runListeners("build-started");const a=e!=l;a&&i.startEsbuildRun(),i.buildRevision>0&&await i.waitForPluginsRun(),r!=="client"&&i.noteRequestHandlersEntryBuildStart(),a&&t.startTiming("rebuild")},d=async r=>{r==="client"?e=!1:(l=!1,i.markRequestHandlersEntryUpdated()),!(e||l)&&(i.finishEsbuildRun(),i.buildRevision++,t.infoTime("rebuild","JavaScript re-compiled"),await i.reloadMarkdocOptions(),i.markUserCodeReady(),i.runListeners("build-updated"),i.lifecycleContext&&i.buildRevision>1&&i.lifecycleContext.fs.emitCodeUpdated())},s=[new Promise((r,a)=>{const o={label:"client",buildStart(){t.verbose("Start compiling client code."),t.startTiming(this.label)},buildEnd(){t.verboseTime(this.label,"Client compiled"),r(!0)},rebuildStart:()=>n("client"),rebuildEnd:()=>d("client")};R(i,i.outdir,"development",o).then(u=>u.watch()).catch(a)}),new Promise((r,a)=>{const o={label:"server",buildStart(){t.verbose("Start compiling server code."),t.startTiming(this.label)},buildEnd(){t.verboseTime(this.label,"Server compiled"),r(!0)},rebuildStart:()=>n("server"),rebuildEnd:()=>d("server")};S(i,i.serverOutDir,"development",o).then(u=>u.watch()).catch(a)})];await Promise.all(s),await i.reloadMarkdocOptions()}function D(){return new Promise(i=>{setTimeout(i,0)})}export{q as develop};
1
+ import{logger as t}from"../server/tools/notifiers/logger.js";import{reporter as c}from"../server/tools/notifiers/reporter.js";import{green as b}from"../server/tools/notifiers/helpers/colors.js";import{envConfig as m}from"../server/config/env-config.js";import{resolveCache as w}from"../server/esbuild/plugins/themes-resolver.js";import{getBilledPagesCount as p}from"../server/utils/index.js";import{createClientCompiler as R,createServerCompiler as S}from"../server/esbuild/esbuild.js";import{initPlugins as C,runPlugins as f,writeClientEntries as E}from"../server/plugins/lifecycle.js";import{startDevServer as h}from"../server/web-server/dev-server.js";import{validateAllMarkdowns as g}from"../server/plugins/markdown/compiler.js";import{reportAllErrors as v}from"../server/utils/report-all-errors.js";import{validateAllowedPackages as y}from"../server/utils/validate-allowed-packages.js";import{copyMigrationsFolder as L}from"../server/providers/database/copy-migrations.js";import{listenStdin as P}from"./utils/listen-stdin.js";const T=20;async function H(i,e){t.info("Starting project preview mode."),e.devLogin=i["dev-login"]!==!1,E(e),t.startTiming("initial-js"),await D(e),t.infoTime("initial-js","JavaScript compiled");const{pluginInstances:l,lifecycleContext:n}=await C({contentDir:e.contentDir,outdir:e.outdir,serverOutDir:void 0,devLogin:e.devLogin,setGlobalConfig:e.setGlobalConfig});e.lifecycleContext=n,L(e),await f(l,e,n,{failFast:!0});const d=async()=>{const r=performance.now();c.clearErrors(),await y(),await f(l,e,n),m.REDOCLY_EXP_DISABLE_MD_VALIDATION?t.info("Skipping markdown validation step"):await g(e,n),A().then(async()=>{await v(n);const a=p(e.getAllRoutes()),o=c.summary(` \u{1F440} Last change processed in ${b(Math.round(performance.now()-r)+"ms")}`,a);e.runListeners("errors-updated",void 0,o),e.runListeners("pages-updated",void 0,a),e.runListeners("routes-updated")})};m.REDOCLY_EXP_DISABLE_MD_VALIDATION?t.info("Skipping markdown validation step"):await g(e,n),await v(n);const s=p(e.getAllRoutes());c.summary(" \u{1F440} Watching for changes...",s),e.runListeners("pages-updated",void 0,s),n.fs.watch(async()=>{w.clear(),await d()}),t.verbose("Starting development server."),await h(e,n,{port:Number(i.port||4e3),maxPortRetries:m.isReunite?0:T}),P()}async function D(i){let e=!0,l=!0;const n=async r=>{r==="client"?e=!0:l=!0,i.runListeners("build-started");const a=e!=l;a&&i.startEsbuildRun(),i.buildRevision>0&&await i.waitForPluginsRun(),r!=="client"&&i.noteRequestHandlersEntryBuildStart(),a&&t.startTiming("rebuild")},d=async r=>{r==="client"?e=!1:(l=!1,i.markRequestHandlersEntryUpdated()),!(e||l)&&(i.finishEsbuildRun(),i.buildRevision++,t.infoTime("rebuild","JavaScript re-compiled"),await i.reloadMarkdocOptions(),i.markUserCodeReady(),i.runListeners("build-updated"),i.lifecycleContext&&i.buildRevision>1&&i.lifecycleContext.fs.emitCodeUpdated())},s=[new Promise((r,a)=>{const o={label:"client",buildStart(){t.verbose("Start compiling client code."),t.startTiming(this.label)},buildEnd(){t.verboseTime(this.label,"Client compiled"),r(!0)},rebuildStart:()=>n("client"),rebuildEnd:()=>d("client")};R(i,i.outdir,"development",o).then(u=>u.watch()).catch(a)}),new Promise((r,a)=>{const o={label:"server",buildStart(){t.verbose("Start compiling server code."),t.startTiming(this.label)},buildEnd(){t.verboseTime(this.label,"Server compiled"),r(!0)},rebuildStart:()=>n("server"),rebuildEnd:()=>d("server")};S(i,i.serverOutDir,"development",o).then(u=>u.watch()).catch(a)})];await Promise.all(s),await i.reloadMarkdocOptions()}function A(){return new Promise(i=>{setTimeout(i,0)})}export{H as develop};
@@ -1 +1 @@
1
- import*as c from"path";import{DEFAULT_THEME_NAME as i,USER_THEME_ALIAS as f}from"../../constants/common.js";import{logger as k}from"../../server/tools/notifiers/logger.js";import{reporter as T}from"../../server/tools/notifiers/reporter.js";import{resolveTheme as A}from"./resolveTheme.js";import{EntitlementsProvider as F}from"../../server/entitlements/entitlements-provider.js";const C=["markdoc/attributes/code-walkthrough-filesets.ts","markdoc/attributes/code-walkthrough-filters.ts","markdoc/components/CodeWalkthrough/**","markdoc/tags/code-step.ts","markdoc/tags/code-toggle.ts","markdoc/tags/code-walkthrough.ts"],m=["./core/**","./markdoc/**/default.*","**/__mocks__/**","**/index.*","**/utils/**/*","**/__tests__/**/*","**/__snapshots__/**/*","**/*.stories.*","**/variables.*",...C],v=["./components/CatalogClassic/CatalogClassicCard.*","./components/ColorModeSwitcher/**","./components/ReplayGate/**","./components/ReplaySecuritySchemeActions/**","./components/ReplayTopBarActions/**","./components/Feedback/**","./components/Filter/**","./components/Footer/**","./components/LanguagePicker/**","./components/Menu/**","./components/Navbar/**","./components/PageNavigation/**","./components/Product/**","./components/Search/**","./components/NavigationTabs/**","./components/UserMenu/**","./layouts/RootLayout.*","./layouts/CustomContexts.*","./layouts/NotFound.*","./layouts/Forbidden.*","./layouts/DocumentationLayoutTop.*","./layouts/DocumentationLayoutBottom.*","./icons/**","./markdoc/**","./ext/**"];async function L(t){const[p,r]=t._,{theme:l,force:u,onSuccess:d,onError:g,onOverride:h,config:E}=t,y=F.instance(),s=c.resolve(t["project-dir"]);let o=l;o||(o=i);const n=await A(s,E.plugins||[],o,r);n||await T.panicOnContentError(`Theme ${o} not found. Skipping eject.`);const e=n?.config.ejectIgnore;e&&!Array.isArray(e)&&k.warn("'ejectIgnore' must be of type Array. Skipping.");const a=await y.getPackageEjectIgnore(),_={force:u,onSuccess:d,onError:g,onOverride:h,onlyFiles:o===i?v:void 0,ignoreFiles:Array.isArray(e)?[...e,...a,...m]:[...a,...m]};return{objectType:p,pathToThemeFolder:n?.pluginDirAbsolutePath,pathToPortalCustomThemeFolder:c.resolve(s,f),componentToEject:r,theme:o,options:_}}export{m as DEFAULT_IGNORED_FILES,v as EJECTABLE_FILES,L as default};
1
+ import*as c from"path";import{DEFAULT_THEME_NAME as i,USER_THEME_ALIAS as f}from"../../constants/common.js";import{logger as k}from"../../server/tools/notifiers/logger.js";import{reporter as T}from"../../server/tools/notifiers/reporter.js";import{resolveTheme as A}from"./resolveTheme.js";import{EntitlementsProvider as F}from"../../server/entitlements/entitlements-provider.js";const C=["markdoc/attributes/code-walkthrough-filesets.ts","markdoc/attributes/code-walkthrough-filters.ts","markdoc/components/CodeWalkthrough/**","markdoc/tags/code-step.ts","markdoc/tags/code-toggle.ts","markdoc/tags/code-walkthrough.ts"],m=["./core/**","./markdoc/**/default.*","**/__mocks__/**","**/index.*","**/utils/**/*","**/__tests__/**/*","**/__snapshots__/**/*","**/*.stories.*","**/variables.*",...C],v=["./components/CatalogClassic/CatalogClassicCard.*","./components/ColorModeSwitcher/**","./components/ReplayGate/**","./components/ReplaySecuritySchemeActions/**","./components/ReplayTopBarActions/**","./components/Feedback/**","./components/Filter/**","./components/Footer/**","./components/LanguagePicker/**","./components/Menu/**","./components/Navbar/**","./components/PageNavigation/**","./components/Product/**","./components/Search/**","./components/MissingTranslationNotice/**","./components/NavigationTabs/**","./components/UserMenu/**","./layouts/RootLayout.*","./layouts/CustomContexts.*","./layouts/NotFound.*","./layouts/Forbidden.*","./layouts/DocumentationLayoutTop.*","./layouts/DocumentationLayoutBottom.*","./icons/**","./markdoc/**","./ext/**"];async function L(t){const[p,r]=t._,{theme:l,force:u,onSuccess:d,onError:g,onOverride:h,config:E}=t,y=F.instance(),s=c.resolve(t["project-dir"]);let o=l;o||(o=i);const n=await A(s,E.plugins||[],o,r);n||await T.panicOnContentError(`Theme ${o} not found. Skipping eject.`);const e=n?.config.ejectIgnore;e&&!Array.isArray(e)&&k.warn("'ejectIgnore' must be of type Array. Skipping.");const a=await y.getPackageEjectIgnore(),_={force:u,onSuccess:d,onError:g,onOverride:h,onlyFiles:o===i?v:void 0,ignoreFiles:Array.isArray(e)?[...e,...a,...m]:[...a,...m]};return{objectType:p,pathToThemeFolder:n?.pluginDirAbsolutePath,pathToPortalCustomThemeFolder:c.resolve(s,f),componentToEject:r,theme:o,options:_}}export{m as DEFAULT_IGNORED_FILES,v as EJECTABLE_FILES,L as default};
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ /**
3
+ * The sidebar footer of a site whose plan keeps the Redocly attribution: the "Powered by
4
+ * Redocly" badge on the left of the sidebar actions. The collapsed rail keeps the actions only.
5
+ * It lives in the engine, not the theme, so `eject` cannot remove it.
6
+ */
7
+ export declare const SidebarFooterControls: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$collapsed"> & {
8
+ $collapsed: boolean;
9
+ }, never> & Partial<Pick<import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$collapsed"> & {
10
+ $collapsed: boolean;
11
+ }, never>>> & string;
12
+ /** The "Powered by Redocly" badge. */
13
+ export declare function PoweredByRedocly(): React.JSX.Element;
14
+ //# sourceMappingURL=PoweredByRedocly.d.ts.map
@@ -0,0 +1,40 @@
1
+ import e from"react";import C from"styled-components";const o=C.span`
2
+ display: flex;
3
+ width: 100%;
4
+ align-items: center;
5
+ justify-content: ${({$collapsed:t})=>t?"center":"flex-end"};
6
+ gap: var(--spacing-xs);
7
+
8
+ & > a:first-child {
9
+ margin-right: auto;
10
+ }
11
+ `;function l(){return e.createElement(r,{"data-component-name":"Sidebar/PoweredByRedocly",href:"https://redocly.com",target:"_blank",rel:"noopener noreferrer","aria-label":"Powered by Redocly"},e.createElement("span",null,"Powered by"),e.createElement("svg",{viewBox:"0 0 120 28",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true"},e.createElement("path",{d:"M17.5814 8.14659C17.5814 11.8328 14.5932 14.821 10.907 14.821H0V14.1698C3.32655 14.1698 6.02326 11.4731 6.02326 8.14659C6.02326 4.82003 3.32655 2.12333 0 2.12333V1.47217H10.907C14.5932 1.47217 17.5814 4.46041 17.5814 8.14659Z"}),e.createElement("path",{d:"M17.5814 23.9373C17.5814 20.2511 14.5932 17.2629 10.907 17.2629H0V17.914C3.32655 17.914 6.02326 20.6107 6.02326 23.9373H17.5814Z"}),e.createElement("path",{d:"M24.2558 22.6082V5.05356H32.8325C34.0196 5.05356 35.0645 5.28763 35.9673 5.75575C36.8868 6.20716 37.5974 6.84247 38.0989 7.66169C38.6172 8.4809 38.8763 9.42551 38.8763 10.4955C38.8763 11.6157 38.5671 12.6021 37.9485 13.4547C37.3299 14.3074 36.5023 14.9427 35.4657 15.3607L39.3528 22.6082H35.2902L31.8545 15.8873H27.8921V22.6082H24.2558ZM27.8921 12.903H32.5065C33.3257 12.903 33.9778 12.6857 34.4626 12.251C34.9642 11.8163 35.2149 11.2479 35.2149 10.5457C35.2149 9.84348 34.9642 9.27504 34.4626 8.84036C33.9778 8.40567 33.3257 8.18833 32.5065 8.18833H27.8921V12.903Z"}),e.createElement("path",{d:"M46.6866 22.859C45.3826 22.859 44.1955 22.5581 43.1255 21.9562C42.0722 21.3543 41.2363 20.5435 40.6177 19.5236C39.9991 18.5038 39.6898 17.3586 39.6898 16.0879C39.6898 14.8173 39.9824 13.6721 40.5676 12.6522C41.1694 11.6324 41.9803 10.8215 43.0001 10.2197C44.02 9.61778 45.1568 9.31684 46.4108 9.31684C47.6647 9.31684 48.7765 9.62614 49.7461 10.2447C50.7158 10.8633 51.4765 11.6993 52.0282 12.7525C52.5967 13.8058 52.8809 15.0012 52.8809 16.3387V17.2415H43.2008C43.3512 17.7598 43.5936 18.2279 43.928 18.6459C44.2791 19.0639 44.7054 19.3899 45.207 19.6239C45.7253 19.858 46.277 19.975 46.8622 19.975C47.4473 19.975 47.9823 19.8831 48.4672 19.6992C48.9687 19.5153 49.395 19.2561 49.7461 18.9218L52.0032 20.9782C51.2007 21.6302 50.3731 22.1067 49.5204 22.4076C48.6845 22.7085 47.7399 22.859 46.6866 22.859ZM43.1506 14.7839H49.4954C49.3783 14.2656 49.161 13.8142 48.8433 13.4296C48.5424 13.0284 48.1746 12.7191 47.7399 12.5018C47.3219 12.2677 46.8538 12.1507 46.3355 12.1507C45.8005 12.1507 45.3157 12.2593 44.881 12.4767C44.4463 12.694 44.0785 13.0033 43.7776 13.4046C43.4933 13.7891 43.2843 14.2489 43.1506 14.7839Z"}),e.createElement("path",{d:"M61.1277 22.7838C59.8905 22.7838 58.7703 22.4828 57.7672 21.881C56.7641 21.2791 55.9616 20.4766 55.3597 19.4735C54.7746 18.4536 54.482 17.3168 54.482 16.0629C54.482 14.8089 54.7746 13.6804 55.3597 12.6773C55.9616 11.6575 56.7725 10.855 57.7923 10.2698C58.8121 9.66793 59.9574 9.367 61.228 9.367C61.88 9.367 62.507 9.45895 63.1088 9.64286C63.7107 9.81004 64.2708 10.0608 64.7891 10.3952V5.05356H68.2248V22.6082H64.8392V21.5299C63.7692 22.3658 62.5321 22.7838 61.1277 22.7838ZM61.6794 19.8496C62.3147 19.8496 62.8915 19.7493 63.4098 19.5487C63.9448 19.3314 64.4046 19.0137 64.7891 18.5957V13.5049C64.4046 13.1204 63.9448 12.8194 63.4098 12.6021C62.8748 12.3847 62.298 12.2761 61.6794 12.2761C60.9605 12.2761 60.3085 12.4432 59.7233 12.7776C59.1549 13.0953 58.7035 13.5467 58.3691 14.1318C58.0347 14.7003 57.8675 15.3439 57.8675 16.0629C57.8675 16.7818 58.0347 17.4254 58.3691 17.9939C58.7035 18.5623 59.1549 19.0137 59.7233 19.3481C60.3085 19.6825 60.9605 19.8496 61.6794 19.8496Z"}),e.createElement("path",{d:"M77.2745 22.859C75.9704 22.859 74.7917 22.5581 73.7384 21.9562C72.6852 21.3543 71.8492 20.5435 71.2306 19.5236C70.612 18.5038 70.3027 17.3586 70.3027 16.0879C70.3027 14.8173 70.6037 13.6721 71.2056 12.6522C71.8241 11.6157 72.6601 10.7964 73.7134 10.1946C74.7834 9.5927 75.9704 9.29176 77.2745 9.29176C78.5785 9.29176 79.7572 9.5927 80.8105 10.1946C81.8805 10.7964 82.7164 11.6157 83.3183 12.6522C83.9369 13.6721 84.2462 14.8173 84.2462 16.0879C84.2462 17.3586 83.9369 18.5038 83.3183 19.5236C82.7164 20.5435 81.8888 21.3543 80.8355 21.9562C79.7823 22.5581 78.5952 22.859 77.2745 22.859ZM77.2745 19.8747C77.9599 19.8747 78.5702 19.7075 79.1052 19.3732C79.6569 19.0388 80.0916 18.5874 80.4092 18.0189C80.7436 17.4338 80.9108 16.7901 80.9108 16.0879C80.9108 15.369 80.7436 14.7254 80.4092 14.1569C80.0916 13.5885 79.6569 13.1371 79.1052 12.8027C78.5702 12.4516 77.9599 12.2761 77.2745 12.2761C76.6057 12.2761 75.9955 12.4516 75.4438 12.8027C74.892 13.1371 74.4573 13.5885 74.1397 14.1569C73.822 14.7254 73.6632 15.369 73.6632 16.0879C73.6632 16.7901 73.822 17.4338 74.1397 18.0189C74.4573 18.5874 74.892 19.0388 75.4438 19.3732C75.9955 19.7075 76.6057 19.8747 77.2745 19.8747Z"}),e.createElement("path",{d:"M92.6025 22.859C91.3151 22.859 90.1532 22.5664 89.1166 21.9813C88.08 21.3794 87.2608 20.5685 86.659 19.5487C86.0571 18.5121 85.7561 17.3586 85.7561 16.0879C85.7561 14.8006 86.0571 13.647 86.659 12.6271C87.2608 11.6073 88.08 10.7964 89.1166 10.1946C90.1532 9.5927 91.3151 9.29176 92.6025 9.29176C93.639 9.29176 94.6254 9.49239 95.5617 9.89364C96.5146 10.2949 97.3339 10.8717 98.0193 11.624L95.9128 13.856C95.4279 13.321 94.918 12.9281 94.383 12.6773C93.8647 12.4098 93.2963 12.2761 92.6777 12.2761C92.009 12.2761 91.4071 12.4432 90.8721 12.7776C90.3538 13.112 89.9358 13.5634 89.6182 14.1318C89.3172 14.7003 89.1668 15.3523 89.1668 16.0879C89.1668 16.7901 89.3172 17.4338 89.6182 18.0189C89.9358 18.5874 90.3705 19.0388 90.9222 19.3732C91.474 19.6908 92.0842 19.8496 92.7529 19.8496C93.3381 19.8496 93.8814 19.7326 94.383 19.4986C94.9013 19.2478 95.3945 18.88 95.8626 18.3951L97.919 20.5518C97.2503 21.2707 96.4478 21.8392 95.5115 22.2571C94.5753 22.6584 93.6056 22.859 92.6025 22.859Z"}),e.createElement("path",{d:"M99.7052 22.6082V5.05356L103.141 5.05356V22.6082H99.7052Z"}),e.createElement("path",{d:"M107.107 28C106.806 28 106.513 27.9833 106.229 27.9499C105.962 27.9331 105.736 27.9081 105.552 27.8746V24.9154C105.886 24.9823 106.288 25.0157 106.756 25.0157C108.01 25.0157 108.879 24.4222 109.364 23.2352L109.564 22.7336L104.474 9.54254H108.26L111.521 18.4453L115.207 9.54254H118.919L112.9 23.6615C112.448 24.7148 111.955 25.5591 111.42 26.1944C110.885 26.8297 110.267 27.2895 109.564 27.5737C108.879 27.8579 108.06 28 107.107 28Z"})))}const r=C.a`
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: var(--spacing-xxs);
16
+ padding: var(--spacing-xxs) var(--spacing-xs);
17
+ border-radius: var(--border-radius-full);
18
+ background: var(--color-blue-1);
19
+ color: var(--sidebar-text-color);
20
+ font-size: var(--font-size-xs);
21
+ line-height: 1;
22
+ white-space: nowrap;
23
+ text-decoration: none;
24
+ user-select: none;
25
+
26
+ &:hover,
27
+ &:visited {
28
+ color: var(--sidebar-text-color);
29
+ text-decoration: none;
30
+ }
31
+
32
+ &:hover {
33
+ background: var(--color-blue-2);
34
+ }
35
+
36
+ svg {
37
+ height: 12px;
38
+ width: auto;
39
+ }
40
+ `;export{l as PoweredByRedocly,o as SidebarFooterControls};
@@ -1,11 +1,11 @@
1
- import e,{useEffect as y,useState as b}from"react";import h from"styled-components";import{Menu as w}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as B}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as A}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as D}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as I}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as L}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as P}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{withPathPrefix as x,getBaseDataAttributes as C,generateBeforeAfterContext as T}from"@redocly/theme/core/utils";import{telemetry as g}from"../telemetry/index.js";import{usePreloadHistory as M}from"../usePreloadHistory";import{useTranslate as V}from"../hooks";import{usePageSharedData as H,usePageVersions as R}from"../../providers/page-data/hooks";import{useSidebarItems as q}from"./useSidebarItems";import{renderAdmonition as j,RequestAccessButton as z}from"./RequestAccessButton";function ae({layoutControls:l}){const{versions:r=[]}=R()||{},m=r.find(t=>t?.active),{translate:a}=V(),{currentItems:c,backLink:n,versionLabel:o,pushDrilldownState:v,popDrilldownState:k}=q(m),[d,S]=b(),{collapsedSidebar:i}=l,u=H("apiDocsStore")?.apiId,E=M(),[p,s]=b(void 0);return y(()=>{const t=setTimeout(()=>s(void 0),350);return()=>clearTimeout(t)},[p]),!c.length&&r.length<2?null:e.createElement(e.Fragment,null,e.createElement(A,{collapsed:i,menuItemsAnimation:p,versions:e.createElement(D,{versions:r,onChange:t=>{g.sendVersionPickerChangedMessage([...T("versionPicker","dropdown",{version:m?.version||""},{version:t?.version||""})]);const f=location.hash?t?.link+location.hash:t?.link;f&&E.push(x(f))}}),menu:e.createElement(w,{items:c,onDrilldownOpen:t=>{s("slideInRight"),v(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!i&&j(d),e.createElement(B,{...l,requestAccessButton:u?e.createElement(z,{apiId:u,status:d,setStatus:S}):null})),header:(n||o)&&e.createElement(F,null,n&&e.createElement(K,{icon:e.createElement(P,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:n.slug,onClick:()=>{s("slideInLeft"),k(),g.sendSidebarDrilldownBackClickedMessage([C("sidebarDrilldownBack","button")])}},i?"":n.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},a("sidebar.menu.backToLabel",{value:a(n.labelTranslationKey,n.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},a("sidebar.menu.backLabel"))),o&&!i&&e.createElement(L,{version:o}))}))}const F=h.div`
1
+ import e,{useEffect as w,useState as b}from"react";import h from"styled-components";import{Menu as B}from"@redocly/theme/components/Menu/Menu";import{SidebarActions as A}from"@redocly/theme/components/SidebarActions/SidebarActions";import{Sidebar as D}from"@redocly/theme/components/Sidebar/Sidebar";import{VersionPicker as I}from"@redocly/theme/components/VersionPicker/VersionPicker";import{Button as L}from"@redocly/theme/components/Button/Button";import{CatalogEntityHistoryButton as P}from"@redocly/theme/components/Catalog/CatalogEntity/CatalogEntityHistory/CatalogEntityHistoryButton";import{ArrowLeftIcon as C}from"@redocly/theme/icons/ArrowLeftIcon/ArrowLeftIcon";import{withPathPrefix as x,getBaseDataAttributes as T,generateBeforeAfterContext as M}from"@redocly/theme/core/utils";import{telemetry as v}from"../telemetry/index.js";import{usePreloadHistory as R}from"../usePreloadHistory";import{useTranslate as V}from"../hooks";import{useGlobalData as H}from"../useGlobalData";import{usePageSharedData as q,usePageVersions as F}from"../../providers/page-data/hooks";import{useSidebarItems as j}from"./useSidebarItems";import{renderAdmonition as z,RequestAccessButton as G}from"./RequestAccessButton";import{PoweredByRedocly as K,SidebarFooterControls as O}from"./PoweredByRedocly";function de({layoutControls:l}){const{versions:r=[]}=F()||{},m=r.find(t=>t?.active),{translate:a}=V(),{removeAttribution:g}=H(),{currentItems:c,backLink:n,versionLabel:i,pushDrilldownState:k,popDrilldownState:S}=j(m),[d,E]=b(),{collapsedSidebar:o}=l,u=q("apiDocsStore")?.apiId,y=R(),[p,s]=b(void 0);return w(()=>{const t=setTimeout(()=>s(void 0),350);return()=>clearTimeout(t)},[p]),!c.length&&r.length<2?null:e.createElement(e.Fragment,null,e.createElement(D,{collapsed:o,menuItemsAnimation:p,versions:e.createElement(I,{versions:r,onChange:t=>{v.sendVersionPickerChangedMessage([...M("versionPicker","dropdown",{version:m?.version||""},{version:t?.version||""})]);const f=location.hash?t?.link+location.hash:t?.link;f&&y.push(x(f))}}),menu:e.createElement(B,{items:c,onDrilldownOpen:t=>{s("slideInRight"),k(t)}}),footer:e.createElement("div",{style:{width:"100%"}},!o&&z(d),e.createElement(O,{$collapsed:o},!g&&!o&&e.createElement(K,null),e.createElement(A,{...l,requestAccessButton:u?e.createElement(G,{apiId:u,status:d,setStatus:E}):null}))),header:(n||i)&&e.createElement($,null,n&&e.createElement(J,{icon:e.createElement(C,null),iconPosition:"left",variant:"ghost",size:"medium","data-component-name":"Sidebar/BackButton",to:n.slug,onClick:()=>{s("slideInLeft"),S(),v.sendSidebarDrilldownBackClickedMessage([T("sidebarDrilldownBack","button")])}},o?"":n.label?e.createElement("div",{"data-translation-key":"sidebar.menu.backToLabel"},a("sidebar.menu.backToLabel",{value:a(n.labelTranslationKey,n.label)})):e.createElement("div",{"data-translation-key":"sidebar.menu.backLabel"},a("sidebar.menu.backLabel"))),i&&!o&&e.createElement(P,{version:i}))}))}const $=h.div`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: var(--menu-header-container-gap);
5
5
  width: 100%;
6
- `,K=h(I)`
6
+ `,J=h(L)`
7
7
  padding: var(--menu-item-padding-vertical) 0;
8
8
  height: calc(var(--line-height-base) + var(--menu-item-padding-vertical) * 2);
9
9
  justify-content: flex-start;
10
10
  width: 100%;
11
- `;export{ae as Sidebar};
11
+ `;export{de as Sidebar};
@@ -4,6 +4,7 @@ export declare const useL10nConfig: () => {
4
4
  locales: {
5
5
  code: string;
6
6
  name: string;
7
+ showMissingTranslationNotice?: boolean;
7
8
  }[];
8
9
  };
9
10
  //# sourceMappingURL=useL10nConfig.d.ts.map
@@ -1 +1 @@
1
- import o from"react";import{useLocation as g}from"react-router";import{EmbeddedReplay as k,StoreProvider as I,buildReplayPredefinedEnvValues as P,mergeEnvData as b,useOpenApiDefinition as h,withReplayPrefetch as R,markdocParser as w}from"@redocly/api-docs";import{Admonition as V}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{ErrorMessage as C,OpenApiComponentWrap as D}from"../styled.elements.js";import{useStore as v}from"../../hooks/use-store.js";import{getMockServerDocsConfig as y}from"../../../../templates/api-docs/mock-server-config.js";import{buildReplayOperationSourceMap as F}from"../../utils/build-replay-operation-source-map.js";import{findApiItem as $}from"../../utils/find-api-item.js";const x=R(function({descriptionFile:p,operationId:r,pointer:n,exampleKey:s,mimeType:e,requestBody:d,parameters:a,environment:i,environments:u,hideOtherSecuritySchemes:m}){const f=g(),{store:t,baseSlug:S}=v(p),c=h(),O=o.useMemo(()=>{if(!c)return{};const M=y(t?.options?.mockServer,S??""),A=P(c,M);return b(A,u??{})},[c,t?.options?.mockServer,S,u]),E=o.useMemo(()=>t?.items?F(t.items,{pointer:n,sourceId:r},{mimeType:e,exampleKey:s},t.store?.exampleStore??{}):new Map,[t?.items,t?.store?.exampleStore,n,r,e,s]);return!c||!t?null:o.createElement(k,{key:`${f.pathname}-${p}-${r||n}`,activeOperationId:r,fullOpenApi:c,pointer:n,operationSourceMap:E,hideOtherSecuritySchemes:m,predefinedEnvValues:O,allowedEnvironments:i?[i]:void 0,requestValues:{body:d,...a},activeMimeName:e})}),J=l=>{const{descriptionFile:p,operationId:r,pointer:n,options:s}=l,{store:e,error:d,baseSlug:a}=v(p),i=o.useMemo(()=>({...e?.options,...s}),[s,e?.options]),u=o.useMemo(()=>({specType:"openapi",...i,mockServer:y(i.mockServer,a??""),basePath:a,markdownParser:w,replayFeatures:e?.options.replayFeatures}),[i,a,e?.options.replayFeatures]),m=o.useMemo(()=>e?.items?.length?$(e.items,{pointer:n,sourceId:r}):void 0,[e?.items,n,r]);if(!e)return o.createElement(C,null,d);if(!m?.content?.meta?.pointer)return o.createElement(V,{type:"danger"},"Cannot find OpenAPI operation by operationId or pointer in ",p);const f=m.content.meta.pointer,t=m.content.meta.sourceId??"";return o.createElement(D,{"data-testid":"replay-openapi"},o.createElement(I,{apiStore:e.store,options:u},o.createElement(x,{...l,pointer:f,operationId:t})))};export{J as ReplayOpenApi};
1
+ import o from"react";import{useLocation as g}from"react-router";import{EmbeddedReplay as k,StoreProvider as I,buildReplayPredefinedEnvValues as P,mergeEnvData as b,useOpenApiDefinition as h,withReplayPrefetch as R,markdocParser as w}from"@redocly/api-docs";import{Admonition as V}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{ErrorMessage as C,OpenApiComponentWrap as D}from"../styled.elements.js";import{useStore as v}from"../../hooks/use-store.js";import{getMockServerDocsConfig as y}from"../../../../templates/api-docs/mock-server-config.js";import{buildReplayOperationSourceMap as F}from"../../utils/build-replay-operation-source-map.js";import{findApiItem as $}from"../../utils/find-api-item.js";const x=R(function({descriptionFile:p,operationId:r,pointer:n,exampleKey:s,mimeType:e,requestBody:d,parameters:a,environment:i,environments:c,hideOtherSecuritySchemes:m}){const f=g(),{store:t,baseSlug:S}=v(p),u=h(),O=o.useMemo(()=>{if(!u)return{};const M=y(t?.options?.mockServer,S??""),A=P(u,M);return b(A,c??{})},[u,t?.options?.mockServer,S,c]),E=o.useMemo(()=>t?.items?F(t.items,{pointer:n,sourceId:r},{mimeType:e,exampleKey:s},t.store?.exampleStore??{}):new Map,[t?.items,t?.store?.exampleStore,n,r,e,s]);return o.createElement(k,{key:`${f.pathname}-${p}-${r||n}`,activeOperationId:r,fullOpenApi:u,pointer:n,operationSourceMap:E,hideOtherSecuritySchemes:m,predefinedEnvValues:O,allowedEnvironments:i?[i]:void 0,requestValues:{body:d,...a},activeMimeName:e})},{immediate:!0}),J=l=>{const{descriptionFile:p,operationId:r,pointer:n,options:s}=l,{store:e,error:d,baseSlug:a}=v(p),i=o.useMemo(()=>({...e?.options,...s}),[s,e?.options]),c=o.useMemo(()=>({specType:"openapi",...i,mockServer:y(i.mockServer,a??""),basePath:a,markdownParser:w,replayFeatures:e?.options.replayFeatures}),[i,a,e?.options.replayFeatures]),m=o.useMemo(()=>e?.items?.length?$(e.items,{pointer:n,sourceId:r}):void 0,[e?.items,n,r]);if(!e)return o.createElement(C,null,d);if(!m?.content?.meta?.pointer)return o.createElement(V,{type:"danger"},"Cannot find OpenAPI operation by operationId or pointer in ",p);const f=m.content.meta.pointer,t=m.content.meta.sourceId??"";return o.createElement(D,{"data-testid":"replay-openapi"},o.createElement(I,{apiStore:e.store,options:c},o.createElement(x,{...l,pointer:f,operationId:t})))};export{J as ReplayOpenApi};
@@ -1 +1 @@
1
- const n=150;let r=!1,o=null;function c(){r=!0,o&&clearTimeout(o),o=setTimeout(()=>{r=!1,o=null},150)}function a(){return r}let l=!1;function s(){if(!l){l=!0;for(const t of["scrollTo","scroll","scrollBy"]){const e=window[t].bind(window);window[t]=((...i)=>{c(),e(...i)})}}}export{n as SCROLL_SETTLE_MS,s as installProgrammaticScrollMarking,a as isProgrammaticScrollEvent,c as markProgrammaticScroll};
1
+ const n=150;let r=!1,o=null;function c(){r=!0,o&&clearTimeout(o),o=setTimeout(()=>{r=!1,o=null},150)}function a(){return r}let l=!1;function s(){if(!l){l=!0;for(const t of["scrollTo","scroll","scrollBy"]){const e=window[t].bind(window);window[t]=(...i)=>{c(),e(...i)}}}}export{n as SCROLL_SETTLE_MS,s as installProgrammaticScrollMarking,a as isProgrammaticScrollEvent,c as markProgrammaticScroll};
@@ -1 +1 @@
1
- import{buildApiDocsAgentTools as e}from"@redocly/api-docs";import{fetchText as i,markdownPathForRoute as l}from"./shared.js";function u(o,r){return e({items:r.items,store:r.store,resolveDocUrl:o.withPrefix,getOperationDetail:t=>i(o.routeUrl(l(t.url)))})}export{u as buildApiTools};
1
+ import{buildApiDocsAgentTools as e}from"@redocly/api-docs/lib/services/agent-tools/index.js";import{fetchText as i,markdownPathForRoute as l}from"./shared.js";function u(o,r){return e({items:r.items,store:r.store,resolveDocUrl:o.withPrefix,getOperationDetail:t=>i(o.routeUrl(l(t.url)))})}export{u as buildApiTools};
@@ -1,3 +1,3 @@
1
- import{agentErrorResult as o,agentJsonResult as h,agentTextResult as d,collectOperations as v}from"@redocly/api-docs";import{ServerRoutes as b}from"../../../../constants/api.js";import{AGENT_SKILLS_BASE as S}from"../../../../constants/common.js";import{clampLimit as P,fetchText as g,isRecord as m,joinField as f,markdownPathForRoute as T,toSitePath as y}from"./shared.js";const A=`${S}/index.json`,_="mcp",O="webmcp-browser-agent",R="/llms.txt",w=10,E=50,H=3;function G(e){return[...e.feedbackHidden?[]:[$(e)],{name:"get_current_page",title:"Get current page",description:"Report which documentation page the user is looking at right now, including the product and version in scope and whether it is an API reference page. Call this first so an answer matches what is on screen.",inputSchema:{type:"object",properties:{},additionalProperties:!1},annotations:{readOnlyHint:!0},execute:async()=>j(e)},{name:"search_docs",title:"Search documentation",description:"Search this documentation site and return matching pages with their titles and URLs. Use it to find the page that answers a question before reading it.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for"},limit:{type:"integer",description:`Maximum number of results, ${w} by default`}},required:["query"],additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>C(e,t)},{name:"read_page",title:"Read a page",description:"Return the full Markdown source of a documentation page. Omit the url to read the page the user is currently on.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Site-relative page path, for example /guides/quickstart"}},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>L(e,t)},{name:"get_site_overview",title:"Get site overview",description:"Return the outline of this documentation site: its sections and the pages inside them, limited to what the current user may see. Use it to orient before searching.",inputSchema:{type:"object",properties:{},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async()=>q(e)},{name:"read_skill",title:"Read an agent skill",description:"List the agent skills this site publishes, or read one by name. A skill explains how to carry out a task against the documented product.",inputSchema:{type:"object",properties:{name:{type:"string",description:"Skill name; omit to list every skill"}},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>U(e,t)},{name:"navigate_page",title:"Open a page",description:"Move the browser tab to another page of this documentation site, so the user sees what an answer is based on. Accepts site-relative paths only.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Site-relative page path, optionally with a #section anchor"}},required:["url"],additionalProperties:!1},annotations:{readOnlyHint:!1},execute:async t=>M(e,t)}]}async function j(e){const t=e.versions.find(n=>n.active);return h({url:e.pathname,title:e.pageTitle??document.title,locale:e.locale,product:e.product,version:t?.label??t?.version,isApiReference:!!e.apiDocs,...e.apiDocs?{apiBasePath:e.withPrefix(e.apiDocs.baseSlug),apiSpecType:e.apiDocs.store.specType,operationCount:v(e.apiDocs.items).length}:{}})}async function C(e,t){const n=typeof t.query=="string"?t.query.trim():"";if(!n)return o("Provide a query to search for.");const i=P(t.limit,w,E),a=await fetch(e.sitePathUrl(b.SEARCH),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:n,locale:e.locale})});if(!a.ok)return o(`Search failed with status ${a.status}.`);const r=await a.json(),s=m(r)&&m(r.documents)?r.documents:{},u=Object.entries(s).flatMap(([l,p])=>(Array.isArray(p)?p:[]).map(c=>({group:l,item:c}))).slice(0,i).map(({group:l,item:p})=>{const c=p.document;return{title:f(c?.title),url:c?.url&&e.withPrefix(c.url),section:l,...c?.httpMethod?{method:c.httpMethod.toUpperCase(),path:f(c.httpPath)}:{},...c?.deprecated?{deprecated:!0}:{},snippet:f(c?.text).slice(0,300)}});return u.length?h({query:n,resultCount:u.length,results:u}):d(`No documentation pages matched "${n}".`)}async function L(e,t){const n=typeof t.url=="string"&&t.url.trim()?t.url.trim():e.pathname,i=y(n);if(!i)return o('Provide a site-relative path that starts with "/".');const a=await g(e.routeUrl(T(i)));return a?d(a):o(`${i} has no Markdown version. Either the path is wrong, or the page is built from code rather than Markdown. Use search_docs to find a documentation page.`)}async function q(e){const t=k(e.sidebarItems,e.withPrefix,0);if(t.length)return h({product:e.product,pages:t});const n=await g(e.sitePathUrl(R));return n?d(n):o("This site publishes no navigation tree.")}function k(e,t,n){if(n>=H)return[];const i=[];for(const a of e){if(!m(a))continue;const r=typeof a.label=="string"?a.label:"",s=typeof a.link=="string"?a.link:void 0;if(!r&&!s)continue;const u=Array.isArray(a.items)?k(a.items,t,n+1):[];i.push({title:r,...s?{url:t(s)}:{},...u.length?{pages:u}:{}})}return i}async function U(e,t){const n=await fetch(e.sitePathUrl(A),{headers:{accept:"application/json"}});if(!n.ok)return o("This site does not publish agent skills.");const i=await n.json(),a=m(i)&&Array.isArray(i.skills)?i.skills:[],r=typeof t.name=="string"?t.name.trim():"";if(!r)return h({skills:a.map(l=>({name:l.name,description:l.description}))});const s=a.find(l=>l.name.toLowerCase()===r.toLowerCase());if(!s){const l=a.map(p=>p.name).join(", ");return o(`No skill named "${r}". Available skills: ${l||"none"}.`)}const u=await g(e.routeUrl(s.url));return u?d(u):o(`The "${s.name}" skill could not be read.`)}function $(e){return{name:"leave_feedback",title:"Leave feedback on a page",description:"Report that a documentation page is wrong, outdated, confusing or incomplete. Use it only when the user agrees, and summarize the problem in their words. Reports reach the team that owns the page.",inputSchema:{type:"object",properties:{summary:{type:"string",description:"One sentence naming the problem"},details:{type:"string",description:"What is wrong and what the page should say"},url:{type:"string",description:"Site-relative path of the page; the current page by default"}},required:["summary"],additionalProperties:!1},annotations:{readOnlyHint:!1,consequentialHint:!0},execute:async t=>D(e,t)}}async function D(e,t){const n=typeof t.summary=="string"?t.summary.trim():"";if(!n)return o("Describe the problem in one sentence.");const i=typeof t.details=="string"?t.details.trim():"",a=typeof t.url=="string"&&t.url.trim()?t.url.trim():e.pathname,r=y(a);if(!r)return o('Provide a site-relative path that starts with "/".');const s=await fetch(e.sitePathUrl(b.FEEDBACK),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({component:"comment",path:e.routeUrl(r),comment:i?`${n}
1
+ import{agentErrorResult as o,agentJsonResult as h,agentTextResult as d,collectOperations as v}from"@redocly/api-docs/lib/services/agent-tools/index.js";import{ServerRoutes as b}from"../../../../constants/api.js";import{AGENT_SKILLS_BASE as S}from"../../../../constants/common.js";import{clampLimit as P,fetchText as f,isRecord as m,joinField as g,markdownPathForRoute as T,toSitePath as y}from"./shared.js";const A=`${S}/index.json`,_="mcp",O="webmcp-browser-agent",R="/llms.txt",w=10,E=50,H=3;function G(e){return[...e.feedbackHidden?[]:[U(e)],{name:"get_current_page",title:"Get current page",description:"Report which documentation page the user is looking at right now, including the product and version in scope and whether it is an API reference page. Call this first so an answer matches what is on screen.",inputSchema:{type:"object",properties:{},additionalProperties:!1},annotations:{readOnlyHint:!0},execute:async()=>j(e)},{name:"search_docs",title:"Search documentation",description:"Search this documentation site and return matching pages with their titles and URLs. Use it to find the page that answers a question before reading it.",inputSchema:{type:"object",properties:{query:{type:"string",description:"What to search for"},limit:{type:"integer",description:`Maximum number of results, ${w} by default`}},required:["query"],additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>C(e,t)},{name:"read_page",title:"Read a page",description:"Return the full Markdown source of a documentation page. Omit the url to read the page the user is currently on.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Site-relative page path, for example /guides/quickstart"}},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>L(e,t)},{name:"get_site_overview",title:"Get site overview",description:"Return the outline of this documentation site: its sections and the pages inside them, limited to what the current user may see. Use it to orient before searching.",inputSchema:{type:"object",properties:{},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async()=>q(e)},{name:"read_skill",title:"Read an agent skill",description:"List the agent skills this site publishes, or read one by name. A skill explains how to carry out a task against the documented product.",inputSchema:{type:"object",properties:{name:{type:"string",description:"Skill name; omit to list every skill"}},additionalProperties:!1},annotations:{readOnlyHint:!0,untrustedContentHint:!0},execute:async t=>M(e,t)},{name:"navigate_page",title:"Open a page",description:"Move the browser tab to another page of this documentation site, so the user sees what an answer is based on. Accepts site-relative paths only.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Site-relative page path, optionally with a #section anchor"}},required:["url"],additionalProperties:!1},annotations:{readOnlyHint:!1},execute:async t=>D(e,t)}]}async function j(e){const t=e.versions.find(n=>n.active);return h({url:e.pathname,title:e.pageTitle??document.title,locale:e.locale,product:e.product,version:t?.label??t?.version,isApiReference:!!e.apiDocs,...e.apiDocs?{apiBasePath:e.withPrefix(e.apiDocs.baseSlug),apiSpecType:e.apiDocs.store.specType,operationCount:v(e.apiDocs.items).length}:{}})}async function C(e,t){const n=typeof t.query=="string"?t.query.trim():"";if(!n)return o("Provide a query to search for.");const i=P(t.limit,w,E),a=await fetch(e.sitePathUrl(b.SEARCH),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({query:n,locale:e.locale})});if(!a.ok)return o(`Search failed with status ${a.status}.`);const r=await a.json(),s=m(r)&&m(r.documents)?r.documents:{},u=Object.entries(s).flatMap(([c,p])=>(Array.isArray(p)?p:[]).map(l=>({group:c,item:l}))).slice(0,i).map(({group:c,item:p})=>{const l=p.document;return{title:g(l?.title),url:l?.url&&e.withPrefix(l.url),section:c,method:l?.httpMethod?l.httpMethod.toUpperCase():void 0,path:l?.httpMethod?g(l.httpPath):void 0,deprecated:l?.deprecated?!0:void 0,snippet:g(l?.text).slice(0,300)}});return u.length?h({query:n,resultCount:u.length,results:u}):d(`No documentation pages matched "${n}".`)}async function L(e,t){const n=typeof t.url=="string"&&t.url.trim()?t.url.trim():e.pathname,i=y(n);if(!i)return o('Provide a site-relative path that starts with "/".');const a=await f(e.routeUrl(T(i)));return a?d(a):o(`${i} has no Markdown version. Either the path is wrong, or the page is built from code rather than Markdown. Use search_docs to find a documentation page.`)}async function q(e){const t=k(e.sidebarItems,e.withPrefix,0);if(t.length)return h({product:e.product,pages:t});const n=await f(e.sitePathUrl(R));return n?d(n):o("This site publishes no navigation tree.")}function k(e,t,n){if(n>=H)return[];const i=[];for(const a of e){if(!m(a))continue;const r=typeof a.label=="string"?a.label:"",s=typeof a.link=="string"?a.link:void 0;if(!r&&!s)continue;const u=Array.isArray(a.items)?k(a.items,t,n+1):[];i.push({title:r,...s?{url:t(s)}:{},...u.length?{pages:u}:{}})}return i}async function M(e,t){const n=await fetch(e.sitePathUrl(A),{headers:{accept:"application/json"}});if(!n.ok)return o("This site does not publish agent skills.");const i=await n.json(),a=m(i)&&Array.isArray(i.skills)?i.skills:[],r=typeof t.name=="string"?t.name.trim():"";if(!r)return h({skills:a.map(c=>({name:c.name,description:c.description}))});const s=a.find(c=>c.name.toLowerCase()===r.toLowerCase());if(!s){const c=a.map(p=>p.name).join(", ");return o(`No skill named "${r}". Available skills: ${c||"none"}.`)}const u=await f(e.routeUrl(s.url));return u?d(u):o(`The "${s.name}" skill could not be read.`)}function U(e){return{name:"leave_feedback",title:"Leave feedback on a page",description:"Report that a documentation page is wrong, outdated, confusing or incomplete. Use it only when the user agrees, and summarize the problem in their words. Reports reach the team that owns the page.",inputSchema:{type:"object",properties:{summary:{type:"string",description:"One sentence naming the problem"},details:{type:"string",description:"What is wrong and what the page should say"},url:{type:"string",description:"Site-relative path of the page; the current page by default"}},required:["summary"],additionalProperties:!1},annotations:{readOnlyHint:!1,consequentialHint:!0},execute:async t=>$(e,t)}}async function $(e,t){const n=typeof t.summary=="string"?t.summary.trim():"";if(!n)return o("Describe the problem in one sentence.");const i=typeof t.details=="string"?t.details.trim():"",a=typeof t.url=="string"&&t.url.trim()?t.url.trim():e.pathname,r=y(a);if(!r)return o('Provide a site-relative path that starts with "/".');const s=await fetch(e.sitePathUrl(b.FEEDBACK),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({component:"comment",path:e.routeUrl(r),comment:i?`${n}
2
2
 
3
- ${i}`:n,agent:O,origin:_})});return s.ok?d(`Thanks. The feedback about ${r} reached the documentation team.`):o(s.status===403||s.status===404?`Feedback cannot be left for ${r}.`:`Feedback could not be sent, status ${s.status}.`)}async function M(e,t){const n=typeof t.url=="string"?y(t.url):void 0;return n?(await e.navigate(n),d(`Opened ${n}.`)):o('Provide a site-relative path that starts with "/". This tool cannot leave the documentation site.')}export{G as buildSiteTools};
3
+ ${i}`:n,agent:O,origin:_})});return s.ok?d(`Thanks. The feedback about ${r} reached the documentation team.`):o(s.status===403||s.status===404?`Feedback cannot be left for ${r}.`:`Feedback could not be sent, status ${s.status}.`)}async function D(e,t){const n=typeof t.url=="string"?y(t.url):void 0;return n?(await e.navigate(n),d(`Opened ${n}.`)):o('Provide a site-relative path that starts with "/". This tool cannot leave the documentation site.')}export{G as buildSiteTools};
@@ -1 +1 @@
1
- import{useEffect as u,useRef as S}from"react";import{useLocation as h,useNavigate as A}from"react-router";import{withPathPrefix as g}from"@redocly/theme/core/utils";import{useThemeConfig as R}from"@redocly/theme/core/hooks";import{usePageProps as v,usePageSharedData as C,usePageVersions as L,useSidebarItemsData as x}from"../../providers/page-data/hooks";import{useCurrentProduct as D}from"../hooks/products/useCurrentProduct";import{useL10nConfig as U}from"../hooks/useL10nConfig";import{loadAndNavigate as E}from"../utils/loadAndNavigate";import{telemetry as m}from"../telemetry/index.js";import{registerAgentTools as p}from"@redocly/api-docs";import{buildApiTools as O}from"./tools/api-tools.js";import{buildSiteTools as y}from"./tools/site-tools.js";function z(){const r=h(),o=A(),{currentLocale:n}=U(),{versions:b}=L(),T=x(),i=D(),P=v(),s=C("apiDocsStore"),w=s?.baseSlug,a=R().feedback?.hide===!0,c={pathname:r.pathname,pageTitle:P.seo?.title,locale:n,product:i?.name??i?.slug,versions:b,sidebarItems:T,apiDocs:s,feedbackHidden:a,navigate:e=>E({navigate:o,to:e}),withPrefix:g,routeUrl:e=>new URL(e,window.location.origin).toString(),sitePathUrl:e=>new URL(g(e),window.location.origin).toString()},t=S(c);Object.assign(t.current,c),u(()=>{const e=new AbortController;return p(y(t.current),e.signal,d("site")),()=>e.abort()},[a]),u(()=>{const e=t.current.apiDocs;if(!e)return;const l=new AbortController;return p(O(t.current,e),l.signal,d("apiReference")),()=>l.abort()},[w])}const f={id:"agentTools",object:"feature",uri:"urn:redocly:realm:ui:feature:agentTools"};function d(r){return{registered:o=>m.sendAgentToolsRegisteredMessage([{...f,toolCount:o,scope:r}]),called:(o,n)=>m.sendAgentToolCalledMessage([{...f,toolName:o,outcome:n}])}}export{z as useWebMcpTools};
1
+ import{useEffect as u,useRef as S}from"react";import{useLocation as h,useNavigate as A}from"react-router";import{withPathPrefix as g}from"@redocly/theme/core/utils";import{useThemeConfig as R}from"@redocly/theme/core/hooks";import{usePageProps as v,usePageSharedData as C,usePageVersions as L,useSidebarItemsData as x}from"../../providers/page-data/hooks";import{useCurrentProduct as D}from"../hooks/products/useCurrentProduct";import{useL10nConfig as U}from"../hooks/useL10nConfig";import{loadAndNavigate as E}from"../utils/loadAndNavigate";import{telemetry as m}from"../telemetry/index.js";import{registerAgentTools as p}from"@redocly/api-docs/lib/services/agent-tools/index.js";import{buildApiTools as O}from"./tools/api-tools.js";import{buildSiteTools as y}from"./tools/site-tools.js";function z(){const r=h(),o=A(),{currentLocale:n}=U(),{versions:b}=L(),T=x(),i=D(),P=v(),s=C("apiDocsStore"),w=s?.baseSlug,a=R().feedback?.hide===!0,c={pathname:r.pathname,pageTitle:P.seo?.title,locale:n,product:i?.name??i?.slug,versions:b,sidebarItems:T,apiDocs:s,feedbackHidden:a,navigate:e=>E({navigate:o,to:e}),withPrefix:g,routeUrl:e=>new URL(e,window.location.origin).toString(),sitePathUrl:e=>new URL(g(e),window.location.origin).toString()},t=S(c);Object.assign(t.current,c),u(()=>{const e=new AbortController;return p(y(t.current),e.signal,d("site")),()=>e.abort()},[a]),u(()=>{const e=t.current.apiDocs;if(!e)return;const l=new AbortController;return p(O(t.current,e),l.signal,d("apiReference")),()=>l.abort()},[w])}const f={id:"agentTools",object:"feature",uri:"urn:redocly:realm:ui:feature:agentTools"};function d(r){return{registered:o=>m.sendAgentToolsRegisteredMessage([{...f,toolCount:o,scope:r}]),called:(o,n)=>m.sendAgentToolCalledMessage([{...f,toolName:o,outcome:n}])}}export{z as useWebMcpTools};
@@ -1,7 +1,7 @@
1
- import{telemetry as p}from"./app/telemetry/index.js";p.init({otel:{isProd:process.env.NODE_ENV==="production",serviceVersion:`${P}@${process.env.REDOCLY_PORTAL_VERSION}`,version:"1.0.0",collectorTraceUrl:new URL(e(L.OTEL_TRACES),location.origin).toString(),serviceName:"realm-ui",tracerName:"client-telemetry"},disabled:!_});import o from"react";import{hydrateRoot as s}from"react-dom/client";import{createBrowserRouter as m}from"react-router";import{RouterProvider as d}from"react-router/dom";import{HelmetProvider as f}from"@dr.pogodin/react-helmet";import{StyleSheetManager as E}from"styled-components";import{getLocaleFromPathname as u,withoutPathPrefix as R,withPathPrefix as e}from"@redocly/theme/core/utils";import{ServerRoutes as L}from"../constants/api";import{DEFAULT_LOCALE_PLACEHOLDER as O}from"../constants/common";import{CLIENT_TELEMETRY_ENABLED as _}from"./constants/common.js";import{shouldForwardProp as D}from"../utils/should-forward-prop.js";import"./polyfills";import{PACKAGE_NAME as P,PRODUCT_NAME as h}from"../config/product-gates";import{App as g,routes as A}from"./App";import{Loader as x,useRefresh as N,globalData as t}from"./runtime/loader";import{initL10n as b}from"./app/l10n/initL10n";function v(){return N(),o.createElement(f,{context:{}},o.createElement(E,{shouldForwardProp:D},o.createElement(g,null)))}function T(){t?.removeAttribution&&process.env.REDOCLY_PORTAL_VERSION?console.log(`
1
+ import{telemetry as p}from"./app/telemetry/index.js";p.init({otel:{isProd:process.env.NODE_ENV==="production",serviceVersion:`${P}@${process.env.REDOCLY_PORTAL_VERSION}`,version:"1.0.0",collectorTraceUrl:new URL(e(L.OTEL_TRACES),location.origin).toString(),serviceName:"realm-ui",tracerName:"client-telemetry"},disabled:!_});import o from"react";import{hydrateRoot as s}from"react-dom/client";import{createBrowserRouter as m}from"react-router";import{RouterProvider as d}from"react-router/dom";import{HelmetProvider as f}from"@dr.pogodin/react-helmet";import{StyleSheetManager as E}from"styled-components";import{getLocaleFromPathname as u,withoutPathPrefix as R,withPathPrefix as e}from"@redocly/theme/core/utils";import{ServerRoutes as L}from"../constants/api";import{DEFAULT_LOCALE_PLACEHOLDER as O}from"../constants/common";import{CLIENT_TELEMETRY_ENABLED as _}from"./constants/common.js";import{shouldForwardProp as D}from"../utils/should-forward-prop.js";import"./polyfills";import{PACKAGE_NAME as P,PRODUCT_NAME as h}from"../config/product-gates";import{App as g,routes as A}from"./App";import{Loader as x,useRefresh as N,globalData as t}from"./runtime/loader";import{initL10n as b}from"./app/l10n/initL10n";function v(){return N(),o.createElement(f,{context:{}},o.createElement(E,{shouldForwardProp:D},o.createElement(g,null)))}function C(){t?.removeConsoleAttribution&&process.env.REDOCLY_PORTAL_VERSION?console.log(`
2
2
  %c Version: ${process.env.REDOCLY_PORTAL_VERSION} %c
3
3
  `,"background:#ffffff ; padding: 1px; border:1px solid #0044D4; border-radius: 3px; color: #0044D4","background:transparent"):process.env.REDOCLY_PORTAL_VERSION&&console.log(`
4
4
  %c Redocly ${h} %c ${process.env.REDOCLY_PORTAL_VERSION} %c
5
5
 
6
6
  %chttps://redocly.com
7
- `,"background:#0044D4 ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff; border:1px solid #0044D4","background:#ffffff ; padding: 1px; border:1px solid #0044D4; border-radius: 0 3px 3px 0; color: #0044D4","background:transparent","font-size: 10px; font-style: italic;")}async function C(){process.env.NODE_ENV!=="production"&&import("./runtime/ws-client").then(l=>l.listenWs()),await x.load(window.location.pathname,void 0,window.location.search),T();const r=t?.l10n,n=r?.locales||[],i=r?.defaultLocale||O,a=u(R(location.pathname),i,n);await b(r,a);const c=m([{Component:v,path:e("/*"),children:A}]);s(document.getElementById("app_root"),o.createElement(d,{router:c}))}C();
7
+ `,"background:#0044D4 ; padding: 1px; border-radius: 3px 0 0 3px; color: #fff; border:1px solid #0044D4","background:#ffffff ; padding: 1px; border:1px solid #0044D4; border-radius: 0 3px 3px 0; color: #0044D4","background:transparent","font-size: 10px; font-style: italic;")}async function T(){process.env.NODE_ENV!=="production"&&import("./runtime/ws-client").then(l=>l.listenWs()),await x.load(window.location.pathname,void 0,window.location.search),C();const r=t?.l10n,n=r?.locales||[],i=r?.defaultLocale||O,a=u(R(location.pathname),i,n);await b(r,a);const c=m([{Component:v,path:e("/*"),children:A}]);s(document.getElementById("app_root"),o.createElement(d,{router:c}))}T();
@@ -1,4 +1,6 @@
1
- import*as e from"react";import{useMemo as i}from"react";import A from"styled-components";import{RedoclyApiDocs as O,createMarkdocAdapter as _}from"@redocly/api-docs";import{LayoutVariant as T}from"@redocly/theme/components/SidebarActions/SidebarActions";import{ThreePanelLayout as x}from"@redocly/theme/layouts/ThreePanelLayout";import{CatalogClassicInfoBlock as B}from"@redocly/theme/components/CatalogClassic/CatalogClassicInfoBlock";import{Breadcrumbs as U}from"@redocly/theme/components/Breadcrumbs/Breadcrumbs";import{withPathPrefix as s}from"@redocly/theme/core/utils";import{usePageSharedData as D,useUserClaims as I}from"../../app/hooks";import{ServerRoutes as p}from"../../../constants/api.js";import{isBrowser as M}from"../../../utils/env/is-browser.js";import{CLIENT_TELEMETRY_ENABLED as $}from"../../constants/common.js";import{PACKAGE_NAME as N}from"../../../config/product-gates";import{applyPathPrefixToApiItems as H,safeParseFunction as Y,useCollectMarkdocOptions as V}from"./helpers";function W({pageProps:{markdown:c,apiOptions:f,metadata:R}}){const u=D("apiDocsStore"),{items:l,options:o,store:v,baseSlug:r}=u,a=M(),g=I(),n=V(c,o.markdocOptions),d=i(()=>s(r),[r]),w=i(()=>d===r?l:H(l),[l,r,d]),y=i(()=>_(n,o),[n,o]),C=i(()=>{const L=a?`${window.location.origin}${s(p.REPLAY_OAUTH2_CALLBACK)}`:void 0;let m=o.corsProxyUrl;if(m===void 0){const t=s(`${p.CORS_PROXY}/`);m=a?new URL(t,window.location.origin).toString():t}const E=o.events,h=E?Object.entries(E).reduce((t,[S,b])=>{const P=Y(b);return P&&(t[S]=P),t},{}):void 0;return{...o,markdocOptions:n,oAuth2RedirectURI:L,corsProxyUrl:m,userClaims:g,...h&&{events:h},unstable_hooks:{...o.unstable_hooks,MiddlePanelHeader:()=>e.createElement(U,null)}}},[o,n,a,g]);if(!u)return e.createElement("div",null,"Something went wrong");const k=a?{collectorUrl:new URL(s(p.OTEL_TRACES),window.location.origin).toString(),disabled:!$,serviceVersion:`${N}@${process.env.REDOCLY_PORTAL_VERSION}`}:void 0;return e.createElement(K,null,e.createElement(z,{layout:f?.layout},e.createElement(B,{metadata:R})),e.createElement(O,{items:w,store:v,basePath:d,options:C,markdownAdapter:y,layout:f?.layout,telemetryConfig:k}))}const z=A(x)`
1
+ import*as o from"react";import{useMemo as i}from"react";import p from"styled-components";import{RedoclyApiDocs as O,createMarkdocAdapter as _}from"@redocly/api-docs";import{LayoutVariant as T}from"@redocly/theme/components/SidebarActions/SidebarActions";import{ThreePanelLayout as x}from"@redocly/theme/layouts/ThreePanelLayout";import{CatalogClassicInfoBlock as B}from"@redocly/theme/components/CatalogClassic/CatalogClassicInfoBlock";import{Breadcrumbs as U}from"@redocly/theme/components/Breadcrumbs/Breadcrumbs";import{MissingTranslationNotice as D}from"@redocly/theme/components/MissingTranslationNotice/MissingTranslationNotice";import{withPathPrefix as s}from"@redocly/theme/core/utils";import{usePageSharedData as I,useUserClaims as M}from"../../app/hooks";import{ServerRoutes as f}from"../../../constants/api.js";import{isBrowser as N}from"../../../utils/env/is-browser.js";import{CLIENT_TELEMETRY_ENABLED as $}from"../../constants/common.js";import{PACKAGE_NAME as H}from"../../../config/product-gates";import{applyPathPrefixToApiItems as Y,safeParseFunction as V,useCollectMarkdocOptions as W}from"./helpers";function z({pageProps:{markdown:c,apiOptions:u,metadata:A}}){const g=I("apiDocsStore"),{items:l,options:e,store:R,baseSlug:r}=g,a=N(),E=M(),n=W(c,e.markdocOptions),d=i(()=>s(r),[r]),v=i(()=>d===r?l:Y(l),[l,r,d]),y=i(()=>_(n,e),[n,e]),C=i(()=>{const L=a?`${window.location.origin}${s(f.REPLAY_OAUTH2_CALLBACK)}`:void 0;let m=e.corsProxyUrl;if(m===void 0){const t=s(`${f.CORS_PROXY}/`);m=a?new URL(t,window.location.origin).toString():t}const h=e.events,P=h?Object.entries(h).reduce((t,[S,b])=>{const w=V(b);return w&&(t[S]=w),t},{}):void 0;return{...e,markdocOptions:n,oAuth2RedirectURI:L,corsProxyUrl:m,userClaims:E,...P&&{events:P},unstable_hooks:{...e.unstable_hooks,MiddlePanelHeader:()=>o.createElement(o.Fragment,null,o.createElement(U,null),o.createElement(F,null))}}},[e,n,a,E]);if(!g)return o.createElement("div",null,"Something went wrong");const k=a?{collectorUrl:new URL(s(f.OTEL_TRACES),window.location.origin).toString(),disabled:!$,serviceVersion:`${H}@${process.env.REDOCLY_PORTAL_VERSION}`}:void 0;return o.createElement(j,null,o.createElement(K,{layout:u?.layout},o.createElement(B,{metadata:A})),o.createElement(O,{items:v,store:R,basePath:d,options:C,markdownAdapter:y,layout:u?.layout,telemetryConfig:k}))}const F=p(D)`
2
+ width: 100%;
3
+ `,K=p(x)`
2
4
  && {
3
5
  padding-right: ${({layout:c})=>c===T.THREE_PANEL?"calc(var(--panel-gap-horizontal) * 2)":"var(--panel-gap-horizontal)"};
4
6
  }
@@ -7,7 +9,7 @@ import*as e from"react";import{useMemo as i}from"react";import A from"styled-com
7
9
  &:has(~ .not-found-page, ~ .api-docs-error-page) {
8
10
  display: none;
9
11
  }
10
- `,K=A.main`
12
+ `,j=p.main`
11
13
  div[id],
12
14
  a[id],
13
15
  a[data-section-id],
@@ -20,4 +22,4 @@ import*as e from"react";import{useMemo as i}from"react";import A from"styled-com
20
22
  }
21
23
 
22
24
  --sidebar-width: 0px;
23
- `;export{W as default};
25
+ `;export{z as default};
@@ -115,6 +115,8 @@ export declare const FEATURE: {
115
115
  readonly mcpRequestQuotaPerDay: 'mcpRequestQuotaPerDay';
116
116
  readonly banner: 'banner';
117
117
  readonly cookieConsent: 'cookieConsent';
118
+ readonly sdkGeneration: 'sdkGeneration';
119
+ readonly customPackages: 'customPackages';
118
120
  };
119
121
  export declare const GATEWAY_FETCH_LIMIT_DEFAULTS: {
120
122
  readonly ratePerMin: 60;