@redocly/reef 0.140.0 → 0.140.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.
- package/CHANGELOG.md +10 -0
- package/dist/constants/common.d.ts +2 -0
- package/dist/constants/common.js +1 -1
- package/dist/constants/l10n/langs/ar.js +1 -1
- package/dist/constants/l10n/langs/de.js +1 -1
- package/dist/constants/l10n/langs/en.js +1 -1
- package/dist/constants/l10n/langs/es.js +1 -1
- package/dist/constants/l10n/langs/fr.js +1 -1
- package/dist/constants/l10n/langs/hi.js +1 -1
- package/dist/constants/l10n/langs/it.js +1 -1
- package/dist/constants/l10n/langs/ja.js +1 -1
- package/dist/constants/l10n/langs/ko.js +1 -1
- package/dist/constants/l10n/langs/pl.js +1 -1
- package/dist/constants/l10n/langs/pt-BR.js +1 -1
- package/dist/constants/l10n/langs/pt.js +1 -1
- package/dist/constants/l10n/langs/ru.js +1 -1
- package/dist/constants/l10n/langs/uk.js +1 -1
- package/dist/constants/l10n/langs/zh.js +1 -1
- package/dist/server/constants/entitlements.js +1 -1
- package/dist/server/entitlements/entitlements-provider.d.ts +4 -0
- package/dist/server/entitlements/entitlements-provider.js +1 -1
- package/dist/server/entitlements/plan-denied-markdoc-tags.d.ts +6 -0
- package/dist/server/entitlements/plan-denied-markdoc-tags.js +1 -0
- package/dist/server/fs/fast-mtime.js +3 -3
- package/dist/server/plugins/markdown/compiler.d.ts +3 -3
- package/dist/server/plugins/markdown/compiler.js +1 -1
- package/dist/server/plugins/markdown/markdoc/markdoc-options.d.ts +2 -0
- package/dist/server/plugins/markdown/markdoc/markdoc-options.js +1 -1
- package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.d.ts +4 -1
- package/dist/server/plugins/mcp/custom-tools/scan-custom-tools.js +1 -1
- package/dist/server/plugins/mcp/index.js +1 -1
- package/dist/server/plugins/mcp/types.d.ts +1 -0
- package/dist/server/store.js +1 -1
- package/dist/server/types/plugins/common.d.ts +2 -0
- package/dist/types/entitlements.d.ts +4 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={"dev.newApp":"\u65B0\u5E94\u7528\u7A0B\u5E8F","dev.newApp.text":"\u521B\u5EFA\u60A8\u7684\u7B2C\u4E00\u4E2A\u5E94\u7528\u7A0B\u5E8F","dev.sidebar.header":"\u6211\u7684\u5E94\u7528\u7A0B\u5E8F","dev.sidebar.footer.text":"\u65B0\u5E94\u7528\u7A0B\u5E8F","dev.create.app.dialog.appName.placeholder":"\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0","dev.create.app.dialog.appName.error":"\u540D\u79F0\u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u5E76\u4E14\u53EA\u80FD\u5305\u542B\uFF1A\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001.\u3001_\u3001-\u3001$\u3001%\u3001#","dev.create.app.dialog.selectAPIs":"\u9009\u62E9 API","dev.create.app.dialog.description":"\u63CF\u8FF0","dev.create.app.dialog.description.placeholder":"\u7A7A","dev.create.app.dialog.create":"\u521B\u5EFA\u5E94\u7528\u7A0B\u5E8F","dev.create.app.dialog.cancel":"\u53D6\u6D88","dev.main.tab.appKeys":"API \u5BC6\u94A5","dev.main.tab.logs":"\u65E5\u5FD7","dev.app.description.title":"\u63CF\u8FF0","dev.edit.description.dialog.title":"\u66F4\u6539\u63CF\u8FF0","dev.edit.description.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.description.dialog.cancel":"\u53D6\u6D88","dev.create.app.dialog.callbackUrls":"\u56DE\u8C03 URL","dev.create.app.dialog.callbackUrls.placeholder":"https://example.com/callback","dev.create.app.dialog.callbackUrls.hint":"\u591A\u4E2A URL \u8BF7\u7528\u9017\u53F7\u5206\u9694","dev.app.callbackUrls.title":"\u56DE\u8C03 URL","dev.edit.callbackUrls.dialog.title":"\u66F4\u6539\u56DE\u8C03 URL","dev.edit.callbackUrls.dialog.placeholder":"https://example.com/callback","dev.edit.callbackUrls.dialog.hint":"\u591A\u4E2A URL \u8BF7\u7528\u9017\u53F7\u5206\u9694","dev.edit.callbackUrls.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.callbackUrls.dialog.cancel":"\u53D6\u6D88","dev.edit.apis.dialog.selectedAPIs":"\u9009\u5B9A\u7684 API","dev.app.key.create":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.title":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.create":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.cancel":"\u53D6\u6D88","dev.app.edit":"\u7F16\u8F91","dev.app.delete":"\u5220\u9664","dev.edit.app.dialog.title":"\u66F4\u6539\u663E\u793A\u540D\u79F0","dev.edit.app.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.app.dialog.cancel":"\u53D6\u6D88","dev.delete.app.dialog.title":"\u5220\u9664\u5E94\u7528\u7A0B\u5E8F","dev.delete.app.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u5E94\u7528\u7A0B\u5E8F\u5417\uFF1F","dev.delete.app.dialog.delete":"\u5220\u9664\u5E94\u7528\u7A0B\u5E8F","dev.delete.app.dialog.cancel":"\u53D6\u6D88","dev.app.key.roll":"\u8F6E\u6362 API \u5BC6\u94A5","dev.roll.key.dialog.title":"\u8F6E\u6362 API \u5BC6\u94A5","dev.roll.key.dialog.apiKey":"API key","dev.roll.key.dialog.expires":"\u5230\u671F","dev.roll.key.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u8F6E\u6362\u6B64 API \u5BC6\u94A5\u5417\uFF1F","dev.roll.key.dialog.cancel":"\u53D6\u6D88","dev.roll.key.dialog.roll":"\u8F6E\u6362 API \u5BC6\u94A5","dev.update.key.dialog.title":"\u66F4\u65B0\u5BC6\u94A5","dev.update.key.dialog.update":"\u66F4\u65B0\u5BC6\u94A5","dev.update.key.dialog.cancel":"\u53D6\u6D88","dev.app.key.api.name":"API \u540D\u79F0","dev.app.key.api.status":"\u72B6\u6001","dev.app.key.api.edit":"\u7F16\u8F91 API","dev.edit.apis.dialog.title":"\u7F16\u8F91 API","dev.edit.apis.dialog.apiKey":"API key","dev.edit.apis.dialog.save":"\u4FDD\u5B58","dev.edit.apis.dialog.cancel":"\u53D6\u6D88","dev.select.placeholder":"\u7A7A","dev.app.overview.status.pending":"\u5F85\u5904\u7406","dev.app.overview.status.approved":"\u5DF2\u6279\u51C6","dev.app.overview.status.revoked":"\u5DF2\u64A4\u9500","dev.app.overview.status":"\u72B6\u6001","dev.app.overview.non-production":"\u6D4B\u8BD5","dev.app.overview.production":"\u751F\u4EA7","dev.app.overview.clientId":"\u5BC6\u94A5","dev.app.overview.apiKey":"API key","dev.app.key.revoke":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.title":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.apiKey":"API key","dev.revoke.key.dialog.expires":"\u5230\u671F","dev.revoke.key.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u64A4\u9500\u6B64 API \u5BC6\u94A5\u5417\uFF1F","dev.revoke.key.dialog.revoke":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.cancel":"\u53D6\u6D88","dev.app.overview.expires":"\u5230\u671F","dev.app.overview.created":"\u5DF2\u521B\u5EFA","dev.app.overview.visibilityToggle.hide":"\u9690\u85CF","dev.app.overview.visibilityToggle.show":"\u663E\u793A","search.loading":"\u52A0\u8F7D\u4E2D...","search.noResults.title":"\u65E0\u7ED3\u679C","search.keys.navigate":"\u5BFC\u822A","search.keys.select":"\u9009\u62E9","search.keys.exit":"\u9000\u51FA","search.searchItem.deprecated":"\u5DF2\u5F03\u7528","search.searchItem.enum":"\u679A\u4E3E","search.searchItem.example":"\u793A\u4F8B","search.label":"\u641C\u7D22\u6587\u6863...","search.cancel":"\u53D6\u6D88","search.recent":"\u6700\u8FD1\u641C\u7D22","search.navbar.label":"\u641C\u7D22","search.suggested":"\u5EFA\u8BAE\u9875\u9762","search.groups.all":"\u5168\u90E8","search.showMore":"\u663E\u793A\u66F4\u591A","search.filter.title":"\u9AD8\u7EA7\u7B5B\u9009","search.filter.reset":"\u91CD\u7F6E\u7B5B\u9009","search.filter.field.reset":"\u91CD\u7F6E","search.filter.field.footer":"\u641C\u7D22\u4EE5\u663E\u793A\u66F4\u591A\u9879\u76EE...","search.error.title":"\u54CE\u5440\uFF01\u51FA\u9519\u4E86\u3002","search.error.button":"\u91CD\u8BD5","search.ai.newConversation":"\u65B0\u5BF9\u8BDD","search.ai.welcomeText":"\u6B22\u8FCE\u4F7F\u7528 AI \u52A9\u624B\uFF01\u60A8\u53EF\u4EE5\u95EE\u6211\u4EFB\u4F55\u95EE\u9898\u3002\u6211\u80FD\u4E3A\u60A8\u63D0\u4F9B\u4EC0\u4E48\u5E2E\u52A9\uFF1F","search.ai.placeholder":"\u63D0\u95EE...","search.ai.back":"\u8FD4\u56DE","search.ai.generatingResponse":"\u6B63\u5728\u751F\u6210\u56DE\u590D...","search.ai.followUpQuestion":"\u63D0\u51FA\u540E\u7EED\u95EE\u9898\uFF1F","search.ai.send":"\u53D1\u9001\u95EE\u9898","search.ai.suggestionsTitle":"\u5EFA\u8BAE","search.ai.thinkingText":"\u601D\u8003\u4E2D...","search.ai.resourcesFound":"\u627E\u5230\u8D44\u6E90","search.ai.resourcesFound.basedOn":"\u57FA\u4E8E","search.ai.resourcesFound.resources":"\u8D44\u6E90","search.ai.toolCall.executed":"\u5DF2\u6267\u884C","search.ai.toolCall.executing":"\u6267\u884C\u4E2D","search.ai.toolCall.usedTools":"\u4F7F\u7528\u7684\u5DE5\u5177","search.ai.toolCall.searchDocumentation.inProgress":"\u6B63\u5728\u641C\u7D22\u6587\u6863...","search.ai.toolCall.searchDocumentation.completed":"\u5DF2\u641C\u7D22\u6587\u6863","search.ai.toolCall.listApis.inProgress":"\u6B63\u5728\u6D4F\u89C8 API...","search.ai.toolCall.listApis.completed":"\u5DF2\u6D4F\u89C8 API","search.ai.toolCall.getEndpoints.inProgress":"\u6B63\u5728\u6D4F\u89C8 API \u7684\u7AEF\u70B9...","search.ai.toolCall.getEndpoints.completed":"\u5DF2\u6D4F\u89C8 API \u7684\u7AEF\u70B9","search.ai.toolCall.getEndpointInfo.inProgress":"\u6B63\u5728\u8BFB\u53D6\u7AEF\u70B9\u8BE6\u60C5...","search.ai.toolCall.getEndpointInfo.completed":"\u5DF2\u8BFB\u53D6\u7AEF\u70B9\u8BE6\u60C5","search.ai.toolCall.getSecuritySchemes.inProgress":"\u6B63\u5728\u6D4F\u89C8 API \u7684\u5B89\u5168\u65B9\u6848...","search.ai.toolCall.getSecuritySchemes.completed":"\u5DF2\u6D4F\u89C8 API \u7684\u5B89\u5168\u65B9\u6848","search.ai.toolCall.getFullApiDescription.inProgress":"\u6B63\u5728\u8BFB\u53D6 API \u63CF\u8FF0...","search.ai.toolCall.getFullApiDescription.completed":"\u5DF2\u8BFB\u53D6 API \u63CF\u8FF0","search.ai.toolCall.execute.inProgress":"\u6B63\u5728\u8FD0\u884C\u4EE3\u7801...","search.ai.toolCall.execute.completed":"\u5DF2\u8FD0\u884C\u4EE3\u7801","search.ai.toolCall.discoverTools.inProgress":"\u6B63\u5728\u53D1\u73B0\u53EF\u7528\u5DE5\u5177...","search.ai.toolCall.discoverTools.completed":"\u5DF2\u53D1\u73B0\u53EF\u7528\u5DE5\u5177","search.ai.toolCall.contactSupport.inProgress":"\u6B63\u5728\u6253\u5F00\u8054\u7CFB\u652F\u6301\u9009\u9879...","search.ai.toolCall.contactSupport.completed":"\u5DF2\u63D0\u4F9B\u8054\u7CFB\u652F\u6301\u7684\u9009\u9879","search.ai.feedback.title":"\u60A8\u4E0D\u559C\u6B22\u6B64\u56DE\u590D\u7684\u54EA\u4E9B\u65B9\u9762\uFF1F","search.ai.feedback.detailsPlaceholder":"\u6DFB\u52A0\u5177\u4F53\u7EC6\u8282","search.ai.feedback.thanks":"\u611F\u8C22\u60A8\u7684\u53CD\u9988\uFF01","search.ai.feedback.more":"\u66F4\u591A...","search.ai.actions.copy":"\u590D\u5236\u56DE\u7B54","search.ai.actions.like":"\u8D5E\u8FD9\u4E2A\u56DE\u7B54","search.ai.actions.dislike":"\u8E29\u8FD9\u4E2A\u56DE\u7B54","search.ai.label":"\u8BE2\u95EE AI \u52A9\u624B","search.ai.button":"\u4F7F\u7528 AI \u641C\u7D22","search.ai.backToSearch":"\u8FD4\u56DE\u641C\u7D22","search.ai.assistant":"\u52A9\u624B","search.ai.disclaimer":"AI \u52A9\u624B\u53EF\u80FD\u63D0\u4F9B\u4E0D\u5B8C\u6574\u6216\u4E0D\u6B63\u786E\u7684\u7ED3\u679C\u3002\u8BF7\u6838\u5B9E\u91CD\u8981\u4FE1\u606F\u3002","search.ai.error.description":"\u6211\u4EEC\u5728\u5904\u7406\u60A8\u7684\u641C\u7D22\u65F6\u9047\u5230\u95EE\u9898\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u6216\u4F18\u5316\u60A8\u7684\u67E5\u8BE2\u3002\u5982\u679C\u95EE\u9898\u4ECD\u7136\u5B58\u5728\uFF0C\u8BF7\u8054\u7CFB Redocly \u652F\u6301\u3002","search.ai.error.description.forbidden":"AI \u52A9\u624B\u5F53\u524D\u4E0D\u53EF\u7528\u3002","search.ai.error.description.unauthorized":"\u60A8\u65E0\u6743\u4F7F\u7528 AI \u52A9\u624B\u3002","search.ai.error.header":"\u54CE\u5440\uFF01\u51FA\u9519\u4E86\u3002","search.ai.error.header.forbidden":"\u529F\u80FD\u4E0D\u53EF\u7528","search.ai.error.header.unauthorized":"\u9700\u8981\u8EAB\u4EFD\u9A8C\u8BC1","aiAssistant.trigger":"\u8BE2\u95EE AI","toc.header":"\u5728\u672C\u9875","footer.copyrightText":"","consent.title":"\u6211\u4EEC\u91CD\u89C6\u60A8\u7684\u9690\u79C1","consent.message":'\u9009\u62E9"\u63A5\u53D7\u6240\u6709 Cookie"\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u4F7F\u7528 Cookie \u6765\u6539\u5584\u7F51\u7AD9\u5BFC\u822A\u3001\u4E86\u89E3\u7F51\u7AD9\u4F7F\u7528\u60C5\u51B5\u5E76\u652F\u6301\u6211\u4EEC\u7684\u8425\u9500\u5DE5\u4F5C\u3002\u9009\u62E9"\u81EA\u5B9A\u4E49"\u4EE5\u9009\u62E9\u5141\u8BB8\u7684 Cookie \u7C7B\u578B\u3002',"consent.privacyPolicy":"\u9690\u79C1\u653F\u7B56","consent.customize":"\u81EA\u5B9A\u4E49","consent.rejectAll":"\u5168\u90E8\u62D2\u7EDD","consent.acceptAll":"\u5168\u90E8\u63A5\u53D7","consent.acceptAllCookies":"\u63A5\u53D7\u6240\u6709 Cookie","consent.savePreferences":"\u4FDD\u5B58\u504F\u597D","consent.dialog.title":"Cookie \u504F\u597D","consent.dialog.description":"\u9009\u62E9\u672C\u7F51\u7AD9\u53EF\u4EE5\u4F7F\u7528\u7684 Cookie\u3002\u60A8\u53EF\u4EE5\u968F\u65F6\u66F4\u6539\u9009\u62E9\u3002","consent.dialog.close":"\u5173\u95ED","consent.alwaysOn":"\u59CB\u7EC8\u5F00\u542F","consent.alwaysOff":"\u59CB\u7EC8\u5173\u95ED","consent.gpcNotice":"\u60A8\u7684\u6D4F\u89C8\u5668\u8981\u6C42\u6211\u4EEC\u4E0D\u8981\u5171\u4EAB\u60A8\u7684\u6570\u636E\uFF0C\u56E0\u6B64\u6B64\u9879\u4FDD\u6301\u5173\u95ED\u3002","consent.category.necessary.title":"\u5FC5\u8981","consent.category.necessary.description":"\u7F51\u7AD9\u8FD0\u884C\u6240\u9700\uFF1A\u60A8\u7684\u540C\u610F\u9009\u62E9\u3001\u989C\u8272\u6A21\u5F0F\u548C\u533F\u540D\u4F7F\u7528\u6570\u636E\u3002","consent.category.analytics.title":"\u5206\u6790","consent.category.analytics.description":"\u5E2E\u52A9\u6211\u4EEC\u4E86\u89E3\u54EA\u4E9B\u9875\u9762\u6709\u7528\u3002","consent.category.marketing.title":"\u8425\u9500","consent.category.marketing.description":"\u8BA9\u6211\u4EEC\u8861\u91CF\u54EA\u4E9B\u6D3B\u52A8\u4E3A\u672C\u7F51\u7AD9\u5E26\u6765\u8BBF\u5BA2\u3002","consent.settingsLink":"Cookie \u504F\u597D","page.homeButton":"\u8FD4\u56DE\u9996\u9875","page.forbidden.title":"\u7981\u6B62\u8BBF\u95EE","page.forbidden.description":"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u9875\u9762\u3002\u5982\u679C\u60A8\u8BA4\u4E3A\u8FD9\u662F\u4E00\u4E2A\u9519\u8BEF\uFF0C\u8054\u7CFB\u60A8\u7684\u7BA1\u7406\u5458\u6216\u8FD4\u56DE\u9996\u9875\u3002","page.notFound.title":"\u5185\u5BB9\u4E22\u5931\u4E86...","page.notFound.description":"\u60A8\u5C1D\u8BD5\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u6216\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u3002\u60A8\u53EF\u4EE5\u8FD4\u56DE\u4E0A\u4E00\u9875\u3001\u8FD4\u56DE\u9996\u9875\u6216\u4F7F\u7528\u641C\u7D22\u680F\u67E5\u627E\u6240\u9700\u5185\u5BB9\u3002","page.lastUpdated.timeago":"\u6700\u540E\u66F4\u65B0\u4E8E","page.lastUpdated.on":"\u6700\u540E\u66F4\u65B0\u4E8E","page.apiNotFound.title":"\u6B64\u5730\u5740\u6CA1\u6709\u9875\u9762","page.apiNotFound.description":"\u627E\u4E0D\u5230\u9875\u9762","page.apiNotFound.hint":"\u8BE5\u9875\u9762\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u6216\u5220\u9664\u3002","page.apiNotFound.backButton":"\u8FD4\u56DE\u6587\u6863","page.mcpNotAllowed.title":"\u8FDE\u63A5 MCP \u670D\u52A1\u5668","page.mcpNotAllowed.description":"\u8981\u4F7F\u7528\u6B64 MCP \u670D\u52A1\u5668\uFF0C\u8BF7\u5728\u60A8\u7684 MCP \u5BA2\u6237\u7AEF\uFF08\u4F8B\u5982\uFF1AVS Code\u3001Cursor \u6216 Claude Code\uFF09\u4E2D\u6CE8\u518C\u5B83\u3002","page.mcpNotAllowed.publicNote":"\u6B64\u7AEF\u70B9\u4EC5\u63D0\u4F9B\u516C\u5F00\u53EF\u7528\u7684\u5185\u5BB9\uFF0C\u65E0\u9700\u767B\u5F55\u3002","page.mcpNotAllowed.publicEndpointHint":"\u5982\u9700\u5728\u65E0\u8D26\u6237\u7684\u60C5\u51B5\u4E0B\u533F\u540D\u8FDE\u63A5\uFF0C\u8BF7\u4F7F\u7528<link>\u516C\u5171\u7AEF\u70B9</link>\u3002","page.mcpNotAllowed.mainEndpointHint":"\u5982\u9700\u8BBF\u95EE\u60A8\u8D26\u6237\u53EF\u7528\u7684\u5185\u5BB9\uFF0C\u8BF7\u4F7F\u7528<link>\u4E3B MCP \u7AEF\u70B9</link>\u3002","page.mcpNotAllowed.snippets.terminal.hint":"\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\u6B64\u547D\u4EE4\uFF1A","page.mcpNotAllowed.snippets.claudeCode.headline":"Claude Code","page.mcpNotAllowed.snippets.claudeDesktop.headline":"Claude \u5E94\u7528","page.mcpNotAllowed.snippets.claudeDesktop.accountHint":"Claude \u4F1A\u5C06\u8FDE\u63A5\u5668\u6DFB\u52A0\u5230\u60A8\u7684\u5E10\u6237\uFF0C\u5E76\u5728\u7F51\u9875\u7248 Claude \u548C Claude Desktop \u4E4B\u95F4\u540C\u6B65\u3002","page.mcpNotAllowed.snippets.claudeDesktop.instruction":"\u6216\u8005\u6253\u5F00\u201C\u81EA\u5B9A\u4E49 \u2192 \u8FDE\u63A5\u5668 \u2192 \u6DFB\u52A0\u81EA\u5B9A\u4E49\u8FDE\u63A5\u5668\u201D\uFF0C\u7136\u540E\u7C98\u8D34\u6B64\u670D\u52A1\u5668 URL\uFF1A","page.mcpNotAllowed.snippets.chatgptApp.headline":"ChatGPT \u684C\u9762\u5E94\u7528","page.mcpNotAllowed.snippets.chatgptApp.instruction":'\u5728 ChatGPT \u684C\u9762\u5E94\u7528\u4E2D\uFF0C\u8FDB\u5165\u8BBE\u7F6E \u2192 \u63D2\u4EF6 \u2192 MCPs\uFF0C\u4F7F\u7528"Streamable HTTP"\u7C7B\u578B\u548C\u6B64 URL \u6DFB\u52A0\u670D\u52A1\u5668\uFF08\u4E4B\u540E\u91CD\u542F\u5E94\u7528\uFF09\uFF1A',"page.mcpNotAllowed.snippets.codexCli.headline":"Codex CLI","page.mcpNotAllowed.snippets.grokBuild.headline":"Grok Build","page.mcpNotAllowed.snippets.grokApp.headline":"Grok \u5E94\u7528","page.mcpNotAllowed.snippets.grokApp.instruction":"\u5728 grok.com \u4E0A\u6253\u5F00\u201CConnectors \u2192 New Connector \u2192 Custom\u201D\uFF0C\u7136\u540E\u7C98\u8D34\u6B64\u670D\u52A1\u5668 URL\uFF1A","page.mcpNotAllowed.snippets.grokApp.openConnectors":"\u6253\u5F00 Grok \u8FDE\u63A5\u5668","page.mcpNotAllowed.snippets.prompt.headline":"\u63D0\u793A\u8BCD","page.mcpNotAllowed.snippets.prompt.hint":"\u4E5F\u53EF\u4EE5\u5C06\u6B64\u63D0\u793A\u8BCD\u7C98\u8D34\u5230\u804A\u5929\u4E2D\uFF0C\u5B83\u4F1A\u4E3A\u60A8\u81EA\u52A8\u6DFB\u52A0\u670D\u52A1\u5668\uFF1A","page.mcpNotAllowed.snippets.json.hint":"\u5C06\u6B64\u670D\u52A1\u5668\u6761\u76EE\u6DFB\u52A0\u5230\u60A8\u7684 MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u6587\u4EF6\u4E2D\uFF1A","page.mcpNotAllowed.tabs.claude":"Claude","page.mcpNotAllowed.tabs.chatgpt":"ChatGPT","page.mcpNotAllowed.tabs.grok":"Grok","page.mcpNotAllowed.tabs.json":"JSON","catalog.filters.title":"\u7B5B\u9009\u5668","catalog.filters.add":"\u6DFB\u52A0\u7B5B\u9009\u5668","catalog.filters.placeholder":"\u8F93\u5165\u4EE5\u7B5B\u9009...","catalog.filters.clearAll":"\u6E05\u9664\u6240\u6709\u7B5B\u9009\u5668","catalog.filters.select.addFilter":"\u6DFB\u52A0\u7B5B\u9009\u5668","catalog.filters.select.all":"\u5168\u90E8","catalog.filters.done":"\u5B8C\u6210","filter.dateRange.from":"\u4ECE:","filter.dateRange.to":"\u5230:","navigationTabs.label":"\u5BFC\u822A\u6807\u7B7E\u9875","sidebar.menu.backLabel":"\u8FD4\u56DE","sidebar.menu.backToLabel":"\u8FD4\u56DE {{value}}","sidebar.actions.show":"\u663E\u793A\u4FA7\u8FB9\u680F","sidebar.actions.hide":"\u9690\u85CF\u4FA7\u8FB9\u680F","sidebar.actions.changeToSingleColumn":"\u5207\u6362\u5230\u5355\u5217","sidebar.actions.changeToTwoColumns":"\u5207\u6362\u5230\u53CC\u5217","sidebar.actions.singleColumn":"\u5355\u5217","sidebar.actions.twoColumns":"\u4E24\u5217","versionPicker.label":"\u7248\u672C\uFF1A","versionPicker.unversioned":"\u6240\u6709\u7248\u672C","codeSnippet.copy.buttonText":"\u5DF2\u590D\u5236\uFF01","codeSnippet.copy.tooltipText":"\u590D\u5236\u5230\u526A\u8D34\u677F","codeSnippet.copy.toasterText":"\u590D\u5236","codeSnippet.expand.tooltipText":"\u5168\u90E8\u5C55\u5F00","codeSnippet.collapse.tooltipText":"\u5168\u90E8\u6298\u53E0","markdown.editPage.text":"\u7F16\u8F91","feedback.settings.comment.submitText":"\u611F\u8C22\u60A8\u5E2E\u52A9\u6539\u8FDB\u6211\u4EEC\u7684\u6587\u6863\uFF01","feedback.settings.comment.label":"\u8BF7\u4E0E\u6211\u4EEC\u5206\u4EAB\u60A8\u7684\u53CD\u9988\u3002","feedback.settings.comment.send":"\u53D1\u9001","feedback.settings.comment.cancel":"\u53D6\u6D88","feedback.settings.comment.maxLength":"\u5DF2\u8FBE\u5230\u5185\u5BB9\u6700\u5927\u957F\u5EA6{{maxLength}}\u4E2A\u5B57\u7B26","feedback.settings.comment.satisfiedLabel":"\u6700\u6709\u5E2E\u52A9\u7684\u662F\u4EC0\u4E48\uFF1F","feedback.settings.comment.neutralLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.settings.comment.dissatisfiedLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.settings.submitText":"\u611F\u8C22\u60A8\u7684\u53CD\u9988\uFF01","feedback.settings.label":"\u8FD9\u6709\u5E2E\u52A9\u5417\uFF1F","feedback.settings.reasons.label":"\u54EA\u9879\u9648\u8FF0\u63CF\u8FF0\u4E86\u60A8\u5BF9\u6B64\u9875\u9762\u7684\u770B\u6CD5\uFF1F","feedback.submit":"\u63D0\u4EA4","feedback.cancel":"\u53D6\u6D88","feedback.settings.comment.likeLabel":"\u6700\u6709\u5E2E\u52A9\u7684\u662F\u4EC0\u4E48\uFF1F","feedback.settings.comment.dislikeLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.sentiment.thumbUp":"\u8D5E","feedback.sentiment.thumbDown":"\u8E29","feedback.settings.leftScaleLabel":"\u5B8C\u5168\u6CA1\u6709\u5E2E\u52A9","feedback.settings.rightScaleLabel":"\u975E\u5E38\u6709\u5E2E\u52A9","feedback.settings.optionalEmail.label":"\u60A8\u7684\u7535\u5B50\u90AE\u4EF6\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u8DDF\u8FDB\uFF09","feedback.settings.optionalEmail.placeholder":"yourname@example.com","jsonViewer.showMore":"\u663E\u793A\u66F4\u591A","jsonViewer.showLess":"\u663E\u793A\u66F4\u5C11","codeSnippet.report.buttonText":"\u62A5\u544A","codeSnippet.report.tooltipText":"\u62A5\u544A\u95EE\u9898","codeSnippet.report.label":"\u6B64\u4EE3\u7801\u6709\u4EC0\u4E48\u95EE\u9898\uFF1F","userMenu.login":"\u767B\u5F55","userMenu.logout":"\u6CE8\u9500","userMenu.devOnboardingLabel":"\u6211\u7684\u5E94\u7528\u7A0B\u5E8F","mobileMenu.mainMenu":"\u4E3B\u83DC\u5355","mobileMenu.previous":"\u4E0A\u4E00\u6B65","mobileMenu.products":"\u4EA7\u54C1","mobileMenu.version":"\u7248\u672C","page.nextButton":"\u4E0B\u4E00\u9875","page.previousButton":"\u4E0A\u4E00\u9875","page.actions.moreActions":"\u66F4\u591A\u64CD\u4F5C","promptTag.copy.buttonText":"\u590D\u5236\u63D0\u793A\u8BCD","promptTag.copy.description":"\u5C06\u6B64\u63D0\u793A\u8BCD\u590D\u5236\u5230\u526A\u8D34\u677F","promptTag.showPrompt":"\u663E\u793A\u63D0\u793A\u8BCD","promptTag.hidePrompt":"\u9690\u85CF\u63D0\u793A\u8BCD","promptTag.showFullPrompt":"\u663E\u793A\u5B8C\u6574\u63D0\u793A\u8BCD","promptTag.showLess":"\u6536\u8D77","promptTag.openIn.cursor":"\u5728 Cursor \u4E2D\u6253\u5F00","promptTag.openIn.cursorDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 Cursor","promptTag.openIn.claude":"\u5728 Claude \u4E2D\u6253\u5F00","promptTag.openIn.claudeDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 Claude","promptTag.openIn.chatgpt":"\u5728 ChatGPT \u4E2D\u6253\u5F00","promptTag.openIn.chatgptDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 ChatGPT","page.actions.copyButtonText":"\u590D\u5236","page.actions.copyTitle":"\u4E3A LLM \u590D\u5236","page.actions.copyDescription":"\u5C06\u9875\u9762\u590D\u5236\u4E3A LLM \u7684 Markdown \u683C\u5F0F","page.actions.viewAsMdButtonText":"\u67E5\u770B Markdown","page.actions.viewAsMdTitle":"\u67E5\u770B Markdown","page.actions.viewAsMdDescription":"\u4EE5 Markdown \u683C\u5F0F\u6253\u5F00\u6B64\u9875\u9762","page.actions.chatGptButtonText":"\u5728 ChatGPT \u4E2D\u6253\u5F00","page.actions.chatGptTitle":"\u5728 ChatGPT \u4E2D\u6253\u5F00","page.actions.chatGptDescription":"\u4ECE ChatGPT \u83B7\u53D6\u89C1\u89E3","page.actions.claudeButtonText":"\u5728 Claude \u4E2D\u6253\u5F00","page.actions.claudeTitle":"\u5728 Claude \u4E2D\u6253\u5F00","page.actions.claudeDescription":"\u4ECE Claude \u83B7\u53D6\u89C1\u89E3","page.actions.grokButtonText":"\u5728 Grok \u4E2D\u6253\u5F00","page.actions.grokTitle":"\u5728 Grok \u4E2D\u6253\u5F00","page.actions.grokDescription":"\u4ECE Grok \u83B7\u53D6\u89C1\u89E3","page.actions.cursorMcpButtonText":"\u8FDE\u63A5\u5230 Cursor","page.actions.cursorMcpTitle":"\u8FDE\u63A5\u5230 Cursor","page.actions.cursorMcpDescription":"\u5728 Cursor \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp":"\u8FDE\u63A5 MCP","page.actions.connectMcp.cursor":"\u8FDE\u63A5\u5230 Cursor","page.actions.connectMcp.cursorDescription":"\u5728 Cursor \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp.vscode":"\u8FDE\u63A5\u5230 VS Code","page.actions.connectMcp.vscodeDescription":"\u5728 VS Code \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp.claude":"\u8FDE\u63A5\u5230 Claude","page.actions.connectMcp.claudeDescription":"\u5C06 MCP \u670D\u52A1\u5668\u6DFB\u52A0\u5230\u60A8\u7684 Claude \u5E10\u6237","page.actions.connectMcp.claudeCode":"\u8FDE\u63A5\u5230 Claude Code","page.actions.connectMcp.claudeCodeDescription":"\u590D\u5236 Claude Code CLI \u547D\u4EE4","page.actions.connectMcp.codex":"\u8FDE\u63A5\u5230 Codex CLI","page.actions.connectMcp.codexDescription":"\u590D\u5236 Codex CLI \u547D\u4EE4","page.actions.connectMcp.copyConfig":"\u590D\u5236 MCP \u914D\u7F6E","page.actions.connectMcp.copyConfigDescription":"\u590D\u5236 MCP JSON \u914D\u7F6E","page.actions.connectMcp.copyUrl":"\u590D\u5236 MCP \u670D\u52A1\u5668 URL","page.actions.connectMcp.copyUrlDescription":"\u5C06 MCP \u670D\u52A1\u5668 URL \u590D\u5236\u5230\u526A\u8D34\u677F","page.actions.connectMcp.moreOptions":"\u66F4\u591A\u9009\u9879","navbar.label":"\u4E3B\u5BFC\u822A","navbar.products":"\u4EA7\u54C1","openapi.download.description.title":"\u4E0B\u8F7D OpenAPI \u63CF\u8FF0","openapi.info.title":"\u6982\u8FF0","openapi.info.contact.url":"URL","openapi.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","openapi.info.license":"\u8BB8\u53EF\u8BC1","openapi.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","openapi.info.metadata.title":"\u5143\u6570\u636E","graphql.info.metadata.title":"\u5143\u6570\u636E","button.download.tooltipText":"\u4E0B\u8F7D\u63CF\u8FF0","button.externalLink.tooltipText":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00","button.email.tooltipText":"\u53D1\u9001\u90AE\u4EF6","openapi.key":"\u952E","openapi.value":"\u503C","openapi.enum":"\u679A\u4E3E","openapi.items":"\u9879","openapi.default":"\u9ED8\u8BA4\u503C","openapi.variable":"\u53D8\u91CF","openapi.variables":"\u53D8\u91CF","openapi.actions.show":"\u663E\u793A","openapi.actions.hide":"\u9690\u85CF","openapi.actions.more":"\u66F4\u591A","openapi.languages.title":"\u8BED\u8A00","openapi.languages.moreButton.tooltipText":"\u67E5\u770B\u66F4\u591A\u8BED\u8A00","openapi.servers.title":"\u670D\u52A1\u5668","openapi.operations":"\u64CD\u4F5C","openapi.schemas":"\u6A21\u5F0F","openapi.webhooks":"Webhook","openapi.description":"\u63CF\u8FF0","openapi.badges.deprecated":"\u5DF2\u5F03\u7528","openapi.badges.required":"\u5FC5\u9700","openapi.badges.webhook":"Webhook","openapi.request":"\u8BF7\u6C42","openapi.path":"\u8DEF\u5F84","openapi.query":"\u67E5\u8BE2","openapi.querystring":"\u67E5\u8BE2\u5B57\u7B26\u4E32","openapi.cookie":"Cookie","openapi.header":"\u6807\u5934","openapi.body":"\u6B63\u6587","openapi.responses":"\u54CD\u5E94","openapi.response":"\u54CD\u5E94","openapi.callbacks":"\u56DE\u8C03","openapi.callbackRequest":"\u56DE\u8C03\u8BF7\u6C42","openapi.callbackResponse":"\u56DE\u8C03\u54CD\u5E94","openapi.payload":"\u8BF7\u6C42\u4F53","openapi.discriminator":"\u9274\u522B\u5668","openapi.contentType":"\u5185\u5BB9\u7C7B\u578B","openapi.tryIt":"\u8BD5\u7528","openapi.loading":"\u52A0\u8F7D\u4E2D...","openapi.example":"\u793A\u4F8B","openapi.examples":"\u793A\u4F8B","openapi.additionalProperties":"\u9644\u52A0\u5C5E\u6027","openapi.patternProperties":"\u6A21\u5F0F\u5C5E\u6027","openapi.required":"\u5FC5\u9700","openapi.recursive":"\u9012\u5F52","openapi.complex":"\u590D\u6742","openapi.property":"\u5C5E\u6027","openapi.properties":"\u5C5E\u6027","openapi.details":"\u8BE6\u7EC6\u4FE1\u606F","openapi.hideExample":"\u9690\u85CF\u793A\u4F8B","openapi.showExample":"\u663E\u793A\u793A\u4F8B","openapi.expandAll":"\u5168\u90E8\u5C55\u5F00","openapi.deepLink.tooltip":"\u94FE\u63A5\u5230\u6B64\u90E8\u5206","openapi.collapseAll":"\u5168\u90E8\u6298\u53E0","openapi.viewSecurityDetails":"\u67E5\u770B\u5B89\u5168\u8BE6\u60C5","openapi.noResponseExample":"\u65E0\u54CD\u5E94\u793A\u4F8B","openapi.discriminator.searchPlaceholder":"\u641C\u7D22\u9879\u76EE","openapi.discriminator.searchNoResults":"\u672A\u627E\u5230\u9879\u76EE","openapi.discriminator.defaultMapping":"\u9ED8\u8BA4\u6620\u5C04","openapi.discriminator.defaultMappingTooltip":"OpenAPI 3.2\uFF1A\u5F53\u5176\u4ED6\u6620\u5C04\u4E0D\u5339\u914D\u65F6\u4F7F\u7528\u9ED8\u8BA4\u6620\u5C04\u3002","openapi.noResponseContent":"\u65E0\u5185\u5BB9","openapi.noRequestPayload":"\u65E0\u8BF7\u6C42\u6709\u6548\u8D1F\u8F7D","openapi.noRequestData":"\u65E0\u8BF7\u6C42\u6570\u636E","openapi.hidePattern":"\u9690\u85CF\u6A21\u5F0F","openapi.showPattern":"\u663E\u793A\u6A21\u5F0F","openapi.authorizationUrl":"\u6388\u6743 URL","openapi.tokenUrl":"\u4EE4\u724C URL","openapi.refreshUrl":"\u5237\u65B0 URL","openapi.showOptionalScopes":"\u663E\u793A\u53EF\u9009\u8303\u56F4","openapi.hideOptionalScopes":"\u9690\u85CF\u53EF\u9009\u8303\u56F4","openapi.security":"\u5B89\u5168","openapi.httpAuthorizationScheme":"HTTP \u6388\u6743\u65B9\u6848","openapi.bearerFormat":"Bearer \u683C\u5F0F","openapi.parameterName":"\u53C2\u6570\u540D\u79F0","openapi.flowType":"\u6D41\u7C7B\u578B","openapi.connectUrl":"\u8FDE\u63A5 URL","openapi.requiredScopes":"\u5FC5\u9700\u8303\u56F4","openapi.unsupportedLanguage":"\u4E0D\u652F\u6301\u8BE5\u8BED\u8A00\u3002","openapi.failedToGenerateCodeSample":"\u65E0\u6CD5\u751F\u6210\u4EE3\u7801\u793A\u4F8B\u3002","openapi.schemaCatalogLink.title":"\u5171\u4EAB\u67B6\u6784","openapi.schemaCatalogLink.copyButtonTooltip":"\u590D\u5236\u5230\u526A\u8D34\u677F","openapi.schemaCatalogLink.copiedTooltip":"\u5DF2\u590D\u5236\uFF01","openapi.mcp.title":"MCP server","openapi.mcp.endpoint":"Endpoint","openapi.mcp.tools":"MCP \u5DE5\u5177","openapi.mcp.protocolVersion":"\u534F\u8BAE\u7248\u672C","openapi.mcp.capabilities":"\u80FD\u529B","openapi.mcp.experimentalCapabilities":"\u5B9E\u9A8C\u6027\u80FD\u529B","openapi.mcp.inputSchema":"\u8F93\u5165\u67B6\u6784","openapi.mcp.inputExample":"\u8F93\u5165\u793A\u4F8B","openapi.mcp.outputSchema":"\u8F93\u51FA\u67B6\u6784","openapi.mcp.outputExample":"\u8F93\u51FA\u793A\u4F8B","openapi.mcp.exampleTitle":"\u8D44\u6E90\u5185\u5BB9","openapi.mcp.argumentsExample":"\u53C2\u6570\u793A\u4F8B","asyncapi.download.description.title":"\u4E0B\u8F7D AsyncAPI \u63CF\u8FF0","asyncapi.info.title":"\u6982\u8FF0","asyncapi.info.contact.url":"URL","asyncapi.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","asyncapi.info.license":"\u8BB8\u53EF\u8BC1","asyncapi.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","asyncapi.key":"\u952E","asyncapi.value":"\u503C","asyncapi.variables":"\u53D8\u91CF","asyncapi.required":"\u5FC5\u9700","asyncapi.badges.deprecated":"\u5DF2\u5F03\u7528","asyncapi.viewSecurityDetails":"\u67E5\u770B\u5B89\u5168\u8BE6\u60C5","asyncapi.requiredScopes":"\u5FC5\u9700\u8303\u56F4","graphql.download.description.title":"\u4E0B\u8F7D GraphQL \u67B6\u6784","graphql.info.title":"\u6982\u8FF0","graphql.info.contact.url":"URL","graphql.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","graphql.info.license":"\u8BB8\u53EF\u8BC1","graphql.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","graphql.overview":"GraphQL \u6982\u8FF0","graphql.metadata":"\u5143\u6570\u636E","graphql.key":"\u952E","graphql.value":"\u503C","graphql.queries":"\u67E5\u8BE2","graphql.mutations":"\u53D8\u66F4","graphql.subscriptions":"\u8BA2\u9605","graphql.directives":"\u6307\u4EE4","graphql.objects":"\u5BF9\u8C61","graphql.interfaces":"\u63A5\u53E3","graphql.unions":"\u8054\u5408","graphql.enums":"\u679A\u4E3E","graphql.inputs":"\u8F93\u5165","graphql.scalars":"\u6807\u91CF","graphql.fields":"\u5B57\u6BB5","graphql.inputFields":"\u8F93\u5165\u5B57\u6BB5","graphql.values":"\u503C","graphql.actions.show":"\u663E\u793A","graphql.actions.hide":"\u9690\u85CF","graphql.actions.more":"\u66F4\u591A","graphql.arguments.label":"\u53C2\u6570","graphql.arguments.show":"\u663E\u793A\u53C2\u6570","graphql.arguments.hide":"\u9690\u85CF\u53C2\u6570","graphql.arguments.here":"\u53C2\u6570\u5728\u6B64","graphql.returnTypes.label":"\u7ED3\u679C\u7C7B\u578B","graphql.returnTypes.show":"\u663E\u793A\u7ED3\u679C\u7C7B\u578B","graphql.returnTypes.hide":"\u9690\u85CF\u7ED3\u679C\u7C7B\u578B","graphql.possibleTypes":"\u53EF\u80FD\u7684\u7C7B\u578B","graphql.defaultValue":"\u9ED8\u8BA4\u503C","graphql.deprecationReason":"\u5F03\u7528\u539F\u56E0","graphql.requiredScopes":"\u5FC5\u9700\u8303\u56F4","graphql.viewSecurityDetails":"\u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F","graphql.objectScopes":"\u5BF9\u8C61\u8303\u56F4","graphql.fieldScopes":"\u5B57\u6BB5\u8303\u56F4","graphql.implementedInterfaces":"\u5B9E\u73B0\u7684\u63A5\u53E3","graphql.implementedBy":"\u5B9E\u73B0\u7C7B\u578B","graphql.nonNull":"\u975E\u7A7A","graphql.required":"\u5FC5\u9700","graphql.badges.deprecated":"\u5DF2\u5F03\u7528","asyncapi.actions.show":"\u663E\u793A","asyncapi.actions.hide":"\u9690\u85CF","asyncapi.actions.more":"\u66F4\u591A","asyncapi.payload":"\u8D1F\u8F7D","asyncapi.parameters":"\u53C2\u6570","asyncapi.messages":"\u6D88\u606F","asyncapi.contentType":"\u5185\u5BB9\u7C7B\u578B","asyncapi.moreDetails":"\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F","asyncapi.property":"\u5C5E\u6027","asyncapi.properties":"\u5C5E\u6027","asyncapi.details":"\u8BE6\u7EC6\u4FE1\u606F","asyncapi.reply":"\u56DE\u590D","asyncapi.servers.title":"\u670D\u52A1\u5668","graphql.variables":"\u53D8\u91CF","graphql.querySample":"\u67E5\u8BE2\u793A\u4F8B","graphql.mutationSample":"\u53D8\u66F4\u793A\u4F8B","graphql.subscriptionSample":"\u8BA2\u9605\u793A\u4F8B","graphql.responseSample":"\u54CD\u5E94\u793A\u4F8B","graphql.locations":"\u4F4D\u7F6E","graphql.sample":"\u793A\u4F8B","graphql.referenced":"\u5F15\u7528\u4F4D\u7F6E","graphql.content.fragment":"\u7247\u6BB5","graphql.tryIt":"\u8BD5\u7528","graphql.loading":"\u52A0\u8F7D\u4E2D...","codeWalkthrough.preview":"\u9884\u89C8","codeWalkthrough.download":"\u4E0B\u8F7D","time.justNow":"\u521A\u624D","time.past.second":"1 \u79D2\u524D","time.past.seconds":"{{value}} \u79D2\u524D","time.past.minute":"1 \u5206\u949F\u524D","time.past.minutes":"{{value}} \u5206\u949F\u524D","time.past.hour":"1 \u5C0F\u65F6\u524D","time.past.hours":"{{value}} \u5C0F\u65F6\u524D","time.past.day":"1 \u5929\u524D","time.past.days":"{{value}} \u5929\u524D","time.past.week":"1 \u5468\u524D","time.past.weeks":"{{value}} \u5468\u524D","time.past.month":"1 \u4E2A\u6708\u524D","time.past.months":"{{value}} \u4E2A\u6708\u524D","time.past.year":"1 \u5E74\u524D","time.past.years":"{{value}} \u5E74\u524D","page.internalServerError.title":"\u5185\u90E8\u670D\u52A1\u5668\u9519\u8BEF","page.internalServerError.description":"\u6211\u4EEC\u7684\u670D\u52A1\u5668\u51FA\u9519\u4E86\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF0C\u5982\u679C\u95EE\u9898\u4ECD\u7136\u5B58\u5728\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458\u3002","page.skipToContent.label":"\u8DF3\u8F6C\u5230\u5185\u5BB9","catalog.catalogs.label":"\u76EE\u5F55","catalog.catalogs.all.title":"\u5168\u90E8","catalog.catalogs.all.description":"\u6240\u6709\u5B9E\u4F53","catalog.catalogs.all.switcherLabel":"\u5168\u90E8","catalog.catalogs.service.title":"\u670D\u52A1","catalog.catalogs.service.description":"\u670D\u52A1\u5B9E\u4F53","catalog.catalogs.service.switcherLabel":"\u670D\u52A1","catalog.catalogs.user.title":"\u7528\u6237","catalog.catalogs.user.description":"\u7528\u6237\u5B9E\u4F53","catalog.catalogs.user.switcherLabel":"\u7528\u6237","catalog.catalogs.team.title":"\u56E2\u961F","catalog.catalogs.team.description":"\u56E2\u961F\u5B9E\u4F53","catalog.catalogs.team.switcherLabel":"\u56E2\u961F","catalog.catalogs.domain.title":"\u57DF","catalog.catalogs.domain.description":"\u57DF\u5B9E\u4F53","catalog.catalogs.domain.switcherLabel":"\u57DF","catalog.catalogs.apiDescription.title":"API \u63CF\u8FF0","catalog.catalogs.apiDescription.description":"API \u63CF\u8FF0\u5B9E\u4F53","catalog.catalogs.apiDescription.switcherLabel":"API \u63CF\u8FF0","catalog.catalogs.dataSchema.title":"\u6570\u636E\u6A21\u5F0F","catalog.catalogs.dataSchema.description":"\u6570\u636E\u6A21\u5F0F\u5B9E\u4F53","catalog.catalogs.dataSchema.switcherLabel":"\u6570\u636E\u6A21\u5F0F","catalog.catalogs.apiOperation.title":"API \u64CD\u4F5C","catalog.catalogs.apiOperation.description":"API \u64CD\u4F5C\u5B9E\u4F53","catalog.catalogs.apiOperation.switcherLabel":"API \u64CD\u4F5C","catalog.entity.metadata.title":"\u5143\u6570\u636E","catalog.entity.schema.title":"\u6A21\u5F0F","catalog.entity.properties.apiDescription.title":"API \u63CF\u8FF0","catalog.backToAllLabel":"\u76EE\u5F55","catalog.notConnected":"\u672A\u8FDE\u63A5","catalog.tags.label":"\u6807\u7B7E","catalog.owners.label":"\u6240\u6709\u8005","catalog.repositories.label":"\u4ED3\u5E93","catalog.email.label":"\u7535\u5B50\u90AE\u4EF6","catalog.format.label":"\u683C\u5F0F","catalog.entityType.label":"\u5B9E\u4F53\u7C7B\u578B","catalog.domains.label":"\u57DF","catalog.contact.label":"Slack \u9891\u9053","catalog.methodAndPath.label":"\u65B9\u6CD5\u548C\u8DEF\u5F84","catalog.links.label":"\u94FE\u63A5","catalog.metadata.domains":"\u57DF:","catalog.metadata.owners":"\u6240\u6709\u8005:","catalog.sort":"\u6392\u5E8F","catalog.history.button.label":"\u7248\u672C\u5386\u53F2","catalog.history.sidebar.title":"\u7248\u672C\u5386\u53F2","catalog.history.sidebar.close":"\u5173\u95ED\u7248\u672C\u5386\u53F2","catalog.history.version.label":"\u7248\u672C","catalog.filters.close":"\u5173\u95ED","catalog.history.version.notSpecified":"\u672A\u6307\u5B9A","catalog.history.version.default":"\u9ED8\u8BA4","catalog.history.revisions.limitMessage":"\u4E0D\u5B58\u50A8\u8F83\u65E7\u7684\u4FEE\u8BA2\u7248\u672C\u3002","catalog.history.revision.current":"\u5F53\u524D","catalog.history.revisions.showLess":"\u663E\u793A\u66F4\u5C11","catalog.history.revisions.showMore":"\u663E\u793A\u66F4\u591A{{count}}\u9879","select.noResults":"\u65E0\u7ED3\u679C","loaders.loading":"\u52A0\u8F7D\u4E2D...","diagram.openFullscreen":"\u70B9\u51FB\u5168\u5C4F\u67E5\u770B\u56FE\u8868","diagram.zoomIn":"\u653E\u5927","diagram.zoomOut":"\u7F29\u5C0F","diagram.reset":"\u9002\u5E94\u7A97\u53E3","diagram.close":"\u5173\u95ED","diagram.viewer":"\u56FE\u8868\u67E5\u770B\u5668","missingTranslationNotice.title":"\u6B64\u9875\u9762\u5C1A\u672A\u7FFB\u8BD1","missingTranslationNotice.content":"\u6B64\u9875\u9762\u6682\u65E0\u7FFB\u8BD1\uFF0C\u5F53\u524D\u663E\u793A\u7684\u662F {{language}} \u539F\u7248\u5185\u5BB9\u3002","missingTranslationNotice.close":"\u5173\u95ED"};export{e as zh};
|
|
1
|
+
const e={"dev.newApp":"\u65B0\u5E94\u7528\u7A0B\u5E8F","dev.newApp.text":"\u521B\u5EFA\u60A8\u7684\u7B2C\u4E00\u4E2A\u5E94\u7528\u7A0B\u5E8F","dev.sidebar.header":"\u6211\u7684\u5E94\u7528\u7A0B\u5E8F","dev.sidebar.footer.text":"\u65B0\u5E94\u7528\u7A0B\u5E8F","dev.create.app.dialog.appName.placeholder":"\u5E94\u7528\u7A0B\u5E8F\u540D\u79F0","dev.create.app.dialog.appName.error":"\u540D\u79F0\u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u5E76\u4E14\u53EA\u80FD\u5305\u542B\uFF1A\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u7A7A\u683C\u3001.\u3001_\u3001-\u3001$\u3001%\u3001#","dev.create.app.dialog.selectAPIs":"\u9009\u62E9 API","dev.create.app.dialog.description":"\u63CF\u8FF0","dev.create.app.dialog.description.placeholder":"\u7A7A","dev.create.app.dialog.create":"\u521B\u5EFA\u5E94\u7528\u7A0B\u5E8F","dev.create.app.dialog.cancel":"\u53D6\u6D88","dev.main.tab.appKeys":"API \u5BC6\u94A5","dev.main.tab.logs":"\u65E5\u5FD7","dev.app.description.title":"\u63CF\u8FF0","dev.edit.description.dialog.title":"\u66F4\u6539\u63CF\u8FF0","dev.edit.description.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.description.dialog.cancel":"\u53D6\u6D88","dev.create.app.dialog.callbackUrls":"\u56DE\u8C03 URL","dev.create.app.dialog.callbackUrls.placeholder":"https://example.com/callback","dev.create.app.dialog.callbackUrls.hint":"\u591A\u4E2A URL \u8BF7\u7528\u9017\u53F7\u5206\u9694","dev.app.callbackUrls.title":"\u56DE\u8C03 URL","dev.edit.callbackUrls.dialog.title":"\u66F4\u6539\u56DE\u8C03 URL","dev.edit.callbackUrls.dialog.placeholder":"https://example.com/callback","dev.edit.callbackUrls.dialog.hint":"\u591A\u4E2A URL \u8BF7\u7528\u9017\u53F7\u5206\u9694","dev.edit.callbackUrls.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.callbackUrls.dialog.cancel":"\u53D6\u6D88","dev.edit.apis.dialog.selectedAPIs":"\u9009\u5B9A\u7684 API","dev.app.key.create":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.title":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.create":"\u521B\u5EFA\u5BC6\u94A5","dev.create.key.dialog.cancel":"\u53D6\u6D88","dev.app.edit":"\u7F16\u8F91","dev.app.delete":"\u5220\u9664","dev.edit.app.dialog.title":"\u66F4\u6539\u663E\u793A\u540D\u79F0","dev.edit.app.dialog.save":"\u4FDD\u5B58\u66F4\u6539","dev.edit.app.dialog.cancel":"\u53D6\u6D88","dev.delete.app.dialog.title":"\u5220\u9664\u5E94\u7528\u7A0B\u5E8F","dev.delete.app.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u5220\u9664\u6B64\u5E94\u7528\u7A0B\u5E8F\u5417\uFF1F","dev.delete.app.dialog.delete":"\u5220\u9664\u5E94\u7528\u7A0B\u5E8F","dev.delete.app.dialog.cancel":"\u53D6\u6D88","dev.app.key.roll":"\u8F6E\u6362 API \u5BC6\u94A5","dev.roll.key.dialog.title":"\u8F6E\u6362 API \u5BC6\u94A5","dev.roll.key.dialog.apiKey":"API key","dev.roll.key.dialog.expires":"\u5230\u671F","dev.roll.key.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u8F6E\u6362\u6B64 API \u5BC6\u94A5\u5417\uFF1F","dev.roll.key.dialog.cancel":"\u53D6\u6D88","dev.roll.key.dialog.roll":"\u8F6E\u6362 API \u5BC6\u94A5","dev.update.key.dialog.title":"\u66F4\u65B0\u5BC6\u94A5","dev.update.key.dialog.update":"\u66F4\u65B0\u5BC6\u94A5","dev.update.key.dialog.cancel":"\u53D6\u6D88","dev.app.key.api.name":"API \u540D\u79F0","dev.app.key.api.status":"\u72B6\u6001","dev.app.key.api.edit":"\u7F16\u8F91 API","dev.edit.apis.dialog.title":"\u7F16\u8F91 API","dev.edit.apis.dialog.apiKey":"API key","dev.edit.apis.dialog.save":"\u4FDD\u5B58","dev.edit.apis.dialog.cancel":"\u53D6\u6D88","dev.select.placeholder":"\u7A7A","dev.app.overview.status.pending":"\u5F85\u5904\u7406","dev.app.overview.status.approved":"\u5DF2\u6279\u51C6","dev.app.overview.status.revoked":"\u5DF2\u64A4\u9500","dev.app.overview.status":"\u72B6\u6001","dev.app.overview.non-production":"\u6D4B\u8BD5","dev.app.overview.production":"\u751F\u4EA7","dev.app.overview.clientId":"\u5BC6\u94A5","dev.app.overview.apiKey":"API key","dev.app.key.revoke":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.title":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.apiKey":"API key","dev.revoke.key.dialog.expires":"\u5230\u671F","dev.revoke.key.dialog.confirmation":"\u60A8\u786E\u5B9A\u8981\u64A4\u9500\u6B64 API \u5BC6\u94A5\u5417\uFF1F","dev.revoke.key.dialog.revoke":"\u64A4\u9500 API \u5BC6\u94A5","dev.revoke.key.dialog.cancel":"\u53D6\u6D88","dev.app.overview.expires":"\u5230\u671F","dev.app.overview.created":"\u5DF2\u521B\u5EFA","dev.app.overview.visibilityToggle.hide":"\u9690\u85CF","dev.app.overview.visibilityToggle.show":"\u663E\u793A","search.loading":"\u52A0\u8F7D\u4E2D...","search.noResults.title":"\u65E0\u7ED3\u679C","search.keys.navigate":"\u5BFC\u822A","search.keys.select":"\u9009\u62E9","search.keys.exit":"\u9000\u51FA","search.searchItem.deprecated":"\u5DF2\u5F03\u7528","search.searchItem.enum":"\u679A\u4E3E","search.searchItem.example":"\u793A\u4F8B","search.label":"\u641C\u7D22\u6587\u6863...","search.cancel":"\u53D6\u6D88","search.recent":"\u6700\u8FD1\u641C\u7D22","search.navbar.label":"\u641C\u7D22","search.suggested":"\u5EFA\u8BAE\u9875\u9762","search.groups.all":"\u5168\u90E8","search.showMore":"\u663E\u793A\u66F4\u591A","search.filter.title":"\u9AD8\u7EA7\u7B5B\u9009","search.filter.reset":"\u91CD\u7F6E\u7B5B\u9009","search.filter.field.reset":"\u91CD\u7F6E","search.filter.field.footer":"\u641C\u7D22\u4EE5\u663E\u793A\u66F4\u591A\u9879\u76EE...","search.error.title":"\u54CE\u5440\uFF01\u51FA\u9519\u4E86\u3002","search.error.button":"\u91CD\u8BD5","search.ai.newConversation":"\u65B0\u5BF9\u8BDD","search.ai.welcomeText":"\u6B22\u8FCE\u4F7F\u7528 AI \u52A9\u624B\uFF01\u60A8\u53EF\u4EE5\u95EE\u6211\u4EFB\u4F55\u95EE\u9898\u3002\u6211\u80FD\u4E3A\u60A8\u63D0\u4F9B\u4EC0\u4E48\u5E2E\u52A9\uFF1F","search.ai.placeholder":"\u63D0\u95EE...","search.ai.back":"\u8FD4\u56DE","search.ai.generatingResponse":"\u6B63\u5728\u751F\u6210\u56DE\u590D...","search.ai.followUpQuestion":"\u63D0\u51FA\u540E\u7EED\u95EE\u9898\uFF1F","search.ai.send":"\u53D1\u9001\u95EE\u9898","search.ai.suggestionsTitle":"\u5EFA\u8BAE","search.ai.thinkingText":"\u601D\u8003\u4E2D...","search.ai.resourcesFound":"\u627E\u5230\u8D44\u6E90","search.ai.resourcesFound.basedOn":"\u57FA\u4E8E","search.ai.resourcesFound.resources":"\u8D44\u6E90","search.ai.toolCall.executed":"\u5DF2\u6267\u884C","search.ai.toolCall.executing":"\u6267\u884C\u4E2D","search.ai.toolCall.usedTools":"\u4F7F\u7528\u7684\u5DE5\u5177","search.ai.toolCall.searchDocumentation.inProgress":"\u6B63\u5728\u641C\u7D22\u6587\u6863...","search.ai.toolCall.searchDocumentation.completed":"\u5DF2\u641C\u7D22\u6587\u6863","search.ai.toolCall.listApis.inProgress":"\u6B63\u5728\u6D4F\u89C8 API...","search.ai.toolCall.listApis.completed":"\u5DF2\u6D4F\u89C8 API","search.ai.toolCall.getEndpoints.inProgress":"\u6B63\u5728\u6D4F\u89C8 API \u7684\u7AEF\u70B9...","search.ai.toolCall.getEndpoints.completed":"\u5DF2\u6D4F\u89C8 API \u7684\u7AEF\u70B9","search.ai.toolCall.getEndpointInfo.inProgress":"\u6B63\u5728\u8BFB\u53D6\u7AEF\u70B9\u8BE6\u60C5...","search.ai.toolCall.getEndpointInfo.completed":"\u5DF2\u8BFB\u53D6\u7AEF\u70B9\u8BE6\u60C5","search.ai.toolCall.getSecuritySchemes.inProgress":"\u6B63\u5728\u6D4F\u89C8 API \u7684\u5B89\u5168\u65B9\u6848...","search.ai.toolCall.getSecuritySchemes.completed":"\u5DF2\u6D4F\u89C8 API \u7684\u5B89\u5168\u65B9\u6848","search.ai.toolCall.getFullApiDescription.inProgress":"\u6B63\u5728\u8BFB\u53D6 API \u63CF\u8FF0...","search.ai.toolCall.getFullApiDescription.completed":"\u5DF2\u8BFB\u53D6 API \u63CF\u8FF0","search.ai.toolCall.execute.inProgress":"\u6B63\u5728\u8FD0\u884C\u4EE3\u7801...","search.ai.toolCall.execute.completed":"\u5DF2\u8FD0\u884C\u4EE3\u7801","search.ai.toolCall.discoverTools.inProgress":"\u6B63\u5728\u53D1\u73B0\u53EF\u7528\u5DE5\u5177...","search.ai.toolCall.discoverTools.completed":"\u5DF2\u53D1\u73B0\u53EF\u7528\u5DE5\u5177","search.ai.toolCall.contactSupport.inProgress":"\u6B63\u5728\u6253\u5F00\u8054\u7CFB\u652F\u6301\u9009\u9879...","search.ai.toolCall.contactSupport.completed":"\u5DF2\u63D0\u4F9B\u8054\u7CFB\u652F\u6301\u7684\u9009\u9879","search.ai.feedback.title":"\u60A8\u4E0D\u559C\u6B22\u6B64\u56DE\u590D\u7684\u54EA\u4E9B\u65B9\u9762\uFF1F","search.ai.feedback.detailsPlaceholder":"\u6DFB\u52A0\u5177\u4F53\u7EC6\u8282","search.ai.feedback.thanks":"\u611F\u8C22\u60A8\u7684\u53CD\u9988\uFF01","search.ai.feedback.more":"\u66F4\u591A...","search.ai.actions.copy":"\u590D\u5236\u56DE\u7B54","search.ai.actions.like":"\u8D5E\u8FD9\u4E2A\u56DE\u7B54","search.ai.actions.dislike":"\u8E29\u8FD9\u4E2A\u56DE\u7B54","search.ai.label":"\u8BE2\u95EE AI \u52A9\u624B","search.ai.button":"\u4F7F\u7528 AI \u641C\u7D22","search.ai.backToSearch":"\u8FD4\u56DE\u641C\u7D22","search.ai.assistant":"\u52A9\u624B","search.ai.disclaimer":"AI \u52A9\u624B\u53EF\u80FD\u63D0\u4F9B\u4E0D\u5B8C\u6574\u6216\u4E0D\u6B63\u786E\u7684\u7ED3\u679C\u3002\u8BF7\u6838\u5B9E\u91CD\u8981\u4FE1\u606F\u3002","search.ai.error.description":"\u6211\u4EEC\u5728\u5904\u7406\u60A8\u7684\u641C\u7D22\u65F6\u9047\u5230\u95EE\u9898\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\u6216\u4F18\u5316\u60A8\u7684\u67E5\u8BE2\u3002\u5982\u679C\u95EE\u9898\u4ECD\u7136\u5B58\u5728\uFF0C\u8BF7\u8054\u7CFB Redocly \u652F\u6301\u3002","search.ai.error.description.forbidden":"AI \u52A9\u624B\u5F53\u524D\u4E0D\u53EF\u7528\u3002","search.ai.error.description.unauthorized":"\u60A8\u65E0\u6743\u4F7F\u7528 AI \u52A9\u624B\u3002","search.ai.error.header":"\u54CE\u5440\uFF01\u51FA\u9519\u4E86\u3002","search.ai.error.header.forbidden":"\u529F\u80FD\u4E0D\u53EF\u7528","search.ai.error.header.unauthorized":"\u9700\u8981\u8EAB\u4EFD\u9A8C\u8BC1","aiAssistant.trigger":"\u8BE2\u95EE AI","toc.header":"\u5728\u672C\u9875","footer.copyrightText":"","consent.title":"\u6211\u4EEC\u91CD\u89C6\u60A8\u7684\u9690\u79C1","consent.message":'\u9009\u62E9"\u63A5\u53D7\u6240\u6709 Cookie"\uFF0C\u5373\u8868\u793A\u60A8\u540C\u610F\u4F7F\u7528 Cookie \u6765\u6539\u5584\u7F51\u7AD9\u5BFC\u822A\u3001\u4E86\u89E3\u7F51\u7AD9\u4F7F\u7528\u60C5\u51B5\u5E76\u652F\u6301\u6211\u4EEC\u7684\u8425\u9500\u5DE5\u4F5C\u3002\u9009\u62E9"\u81EA\u5B9A\u4E49"\u4EE5\u9009\u62E9\u5141\u8BB8\u7684 Cookie \u7C7B\u578B\u3002',"consent.privacyPolicy":"\u9690\u79C1\u653F\u7B56","consent.customize":"\u81EA\u5B9A\u4E49","consent.rejectAll":"\u5168\u90E8\u62D2\u7EDD","consent.acceptAll":"\u5168\u90E8\u63A5\u53D7","consent.acceptAllCookies":"\u63A5\u53D7\u6240\u6709 Cookie","consent.savePreferences":"\u4FDD\u5B58\u504F\u597D","consent.dialog.title":"Cookie \u504F\u597D","consent.dialog.description":"\u9009\u62E9\u672C\u7F51\u7AD9\u53EF\u4EE5\u4F7F\u7528\u7684 Cookie\u3002\u60A8\u53EF\u4EE5\u968F\u65F6\u66F4\u6539\u9009\u62E9\u3002","consent.dialog.close":"\u5173\u95ED","consent.alwaysOn":"\u59CB\u7EC8\u5F00\u542F","consent.alwaysOff":"\u59CB\u7EC8\u5173\u95ED","consent.gpcNotice":"\u60A8\u7684\u6D4F\u89C8\u5668\u8981\u6C42\u6211\u4EEC\u4E0D\u8981\u5171\u4EAB\u60A8\u7684\u6570\u636E\uFF0C\u56E0\u6B64\u6B64\u9879\u4FDD\u6301\u5173\u95ED\u3002","consent.category.necessary.title":"\u5FC5\u8981","consent.category.necessary.description":"\u7F51\u7AD9\u8FD0\u884C\u6240\u9700\uFF1A\u60A8\u7684\u540C\u610F\u9009\u62E9\u3001\u989C\u8272\u6A21\u5F0F\u548C\u533F\u540D\u4F7F\u7528\u6570\u636E\u3002","consent.category.analytics.title":"\u5206\u6790","consent.category.analytics.description":"\u5E2E\u52A9\u6211\u4EEC\u4E86\u89E3\u54EA\u4E9B\u9875\u9762\u6709\u7528\u3002","consent.category.marketing.title":"\u8425\u9500","consent.category.marketing.description":"\u8BA9\u6211\u4EEC\u8861\u91CF\u54EA\u4E9B\u6D3B\u52A8\u4E3A\u672C\u7F51\u7AD9\u5E26\u6765\u8BBF\u5BA2\u3002","consent.settingsLink":"Cookie \u504F\u597D","page.homeButton":"\u8FD4\u56DE\u9996\u9875","page.forbidden.title":"\u7981\u6B62\u8BBF\u95EE","page.forbidden.description":"\u60A8\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6B64\u9875\u9762\u3002\u5982\u679C\u60A8\u8BA4\u4E3A\u8FD9\u662F\u4E00\u4E2A\u9519\u8BEF\uFF0C\u8054\u7CFB\u60A8\u7684\u7BA1\u7406\u5458\u6216\u8FD4\u56DE\u9996\u9875\u3002","page.notFound.title":"\u5185\u5BB9\u4E22\u5931\u4E86...","page.notFound.description":"\u60A8\u5C1D\u8BD5\u8BBF\u95EE\u7684\u9875\u9762\u4E0D\u5B58\u5728\u6216\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u3002\u60A8\u53EF\u4EE5\u8FD4\u56DE\u4E0A\u4E00\u9875\u3001\u8FD4\u56DE\u9996\u9875\u6216\u4F7F\u7528\u641C\u7D22\u680F\u67E5\u627E\u6240\u9700\u5185\u5BB9\u3002","page.lastUpdated.timeago":"\u6700\u540E\u66F4\u65B0\u4E8E","page.lastUpdated.on":"\u6700\u540E\u66F4\u65B0\u4E8E","page.apiNotFound.title":"\u6B64\u5730\u5740\u6CA1\u6709\u9875\u9762","page.apiNotFound.description":"\u627E\u4E0D\u5230\u9875\u9762","page.apiNotFound.hint":"\u8BE5\u9875\u9762\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u6216\u5220\u9664\u3002","page.apiNotFound.backButton":"\u8FD4\u56DE\u6587\u6863","page.mcpNotAllowed.title":"\u8FDE\u63A5 MCP \u670D\u52A1\u5668","page.mcpNotAllowed.description":"\u8981\u4F7F\u7528\u6B64 MCP \u670D\u52A1\u5668\uFF0C\u8BF7\u5728\u60A8\u7684 MCP \u5BA2\u6237\u7AEF\uFF08\u4F8B\u5982\uFF1AVS Code\u3001Cursor \u6216 Claude Code\uFF09\u4E2D\u6CE8\u518C\u5B83\u3002","page.mcpNotAllowed.publicNote":"\u6B64\u7AEF\u70B9\u4EC5\u63D0\u4F9B\u516C\u5F00\u53EF\u7528\u7684\u5185\u5BB9\uFF0C\u65E0\u9700\u767B\u5F55\u3002","page.mcpNotAllowed.publicEndpointHint":"\u5982\u9700\u5728\u65E0\u8D26\u6237\u7684\u60C5\u51B5\u4E0B\u533F\u540D\u8FDE\u63A5\uFF0C\u8BF7\u4F7F\u7528<link>\u516C\u5171\u7AEF\u70B9</link>\u3002","page.mcpNotAllowed.mainEndpointHint":"\u5982\u9700\u8BBF\u95EE\u60A8\u8D26\u6237\u53EF\u7528\u7684\u5185\u5BB9\uFF0C\u8BF7\u4F7F\u7528<link>\u4E3B MCP \u7AEF\u70B9</link>\u3002","page.mcpNotAllowed.snippets.terminal.hint":"\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\u6B64\u547D\u4EE4\uFF1A","page.mcpNotAllowed.snippets.claudeCode.headline":"Claude Code","page.mcpNotAllowed.snippets.claudeDesktop.headline":"Claude \u5E94\u7528","page.mcpNotAllowed.snippets.claudeDesktop.accountHint":"Claude \u4F1A\u5C06\u8FDE\u63A5\u5668\u6DFB\u52A0\u5230\u60A8\u7684\u5E10\u6237\uFF0C\u5E76\u5728\u7F51\u9875\u7248 Claude \u548C Claude Desktop \u4E4B\u95F4\u540C\u6B65\u3002","page.mcpNotAllowed.snippets.claudeDesktop.instruction":"\u6216\u8005\u6253\u5F00\u201C\u81EA\u5B9A\u4E49 \u2192 \u8FDE\u63A5\u5668 \u2192 \u6DFB\u52A0\u81EA\u5B9A\u4E49\u8FDE\u63A5\u5668\u201D\uFF0C\u7136\u540E\u7C98\u8D34\u6B64\u670D\u52A1\u5668 URL\uFF1A","page.mcpNotAllowed.snippets.chatgptApp.headline":"ChatGPT \u684C\u9762\u5E94\u7528","page.mcpNotAllowed.snippets.chatgptApp.instruction":'\u5728 ChatGPT \u684C\u9762\u5E94\u7528\u4E2D\uFF0C\u8FDB\u5165\u8BBE\u7F6E \u2192 \u63D2\u4EF6 \u2192 MCPs\uFF0C\u4F7F\u7528"Streamable HTTP"\u7C7B\u578B\u548C\u6B64 URL \u6DFB\u52A0\u670D\u52A1\u5668\uFF08\u4E4B\u540E\u91CD\u542F\u5E94\u7528\uFF09\uFF1A',"page.mcpNotAllowed.snippets.codexCli.headline":"Codex CLI","page.mcpNotAllowed.snippets.grokBuild.headline":"Grok Build","page.mcpNotAllowed.snippets.grokApp.headline":"Grok \u5E94\u7528","page.mcpNotAllowed.snippets.grokApp.instruction":"\u5728 grok.com \u4E0A\u6253\u5F00\u201CConnectors \u2192 New Connector \u2192 Custom\u201D\uFF0C\u7136\u540E\u7C98\u8D34\u6B64\u670D\u52A1\u5668 URL\uFF1A","page.mcpNotAllowed.snippets.grokApp.openConnectors":"\u6253\u5F00 Grok \u8FDE\u63A5\u5668","page.mcpNotAllowed.snippets.prompt.headline":"\u63D0\u793A\u8BCD","page.mcpNotAllowed.snippets.prompt.hint":"\u4E5F\u53EF\u4EE5\u5C06\u6B64\u63D0\u793A\u8BCD\u7C98\u8D34\u5230\u804A\u5929\u4E2D\uFF0C\u5B83\u4F1A\u4E3A\u60A8\u81EA\u52A8\u6DFB\u52A0\u670D\u52A1\u5668\uFF1A","page.mcpNotAllowed.snippets.json.hint":"\u5C06\u6B64\u670D\u52A1\u5668\u6761\u76EE\u6DFB\u52A0\u5230\u60A8\u7684 MCP \u5BA2\u6237\u7AEF\u914D\u7F6E\u6587\u4EF6\u4E2D\uFF1A","page.mcpNotAllowed.tabs.claude":"Claude","page.mcpNotAllowed.tabs.chatgpt":"ChatGPT","page.mcpNotAllowed.tabs.grok":"Grok","page.mcpNotAllowed.tabs.json":"JSON","catalog.filters.title":"\u7B5B\u9009\u5668","catalog.filters.add":"\u6DFB\u52A0\u7B5B\u9009\u5668","catalog.filters.placeholder":"\u8F93\u5165\u4EE5\u7B5B\u9009...","catalog.filters.clearAll":"\u6E05\u9664\u6240\u6709\u7B5B\u9009\u5668","catalog.filters.select.addFilter":"\u6DFB\u52A0\u7B5B\u9009\u5668","catalog.filters.select.all":"\u5168\u90E8","catalog.filters.done":"\u5B8C\u6210","filter.dateRange.from":"\u4ECE:","filter.dateRange.to":"\u5230:","navigationTabs.label":"\u5BFC\u822A\u6807\u7B7E\u9875","sidebar.menu.backLabel":"\u8FD4\u56DE","sidebar.menu.backToLabel":"\u8FD4\u56DE {{value}}","sidebar.actions.show":"\u663E\u793A\u4FA7\u8FB9\u680F","sidebar.actions.hide":"\u9690\u85CF\u4FA7\u8FB9\u680F","sidebar.actions.changeToSingleColumn":"\u5207\u6362\u5230\u5355\u5217","sidebar.actions.changeToTwoColumns":"\u5207\u6362\u5230\u53CC\u5217","sidebar.actions.singleColumn":"\u5355\u5217","sidebar.actions.twoColumns":"\u4E24\u5217","versionPicker.label":"\u7248\u672C\uFF1A","versionPicker.unversioned":"\u6240\u6709\u7248\u672C","codeSnippet.copy.buttonText":"\u5DF2\u590D\u5236\uFF01","codeSnippet.copy.tooltipText":"\u590D\u5236\u5230\u526A\u8D34\u677F","codeSnippet.copy.toasterText":"\u590D\u5236","codeSnippet.expand.tooltipText":"\u5168\u90E8\u5C55\u5F00","codeSnippet.collapse.tooltipText":"\u5168\u90E8\u6298\u53E0","markdown.editPage.text":"\u7F16\u8F91","feedback.settings.comment.submitText":"\u611F\u8C22\u60A8\u5E2E\u52A9\u6539\u8FDB\u6211\u4EEC\u7684\u6587\u6863\uFF01","feedback.settings.comment.label":"\u8BF7\u4E0E\u6211\u4EEC\u5206\u4EAB\u60A8\u7684\u53CD\u9988\u3002","feedback.settings.comment.send":"\u53D1\u9001","feedback.settings.comment.cancel":"\u53D6\u6D88","feedback.settings.comment.maxLength":"\u5DF2\u8FBE\u5230\u5185\u5BB9\u6700\u5927\u957F\u5EA6{{maxLength}}\u4E2A\u5B57\u7B26","feedback.settings.comment.satisfiedLabel":"\u6700\u6709\u5E2E\u52A9\u7684\u662F\u4EC0\u4E48\uFF1F","feedback.settings.comment.neutralLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.settings.comment.dissatisfiedLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.settings.submitText":"\u611F\u8C22\u60A8\u7684\u53CD\u9988\uFF01","feedback.settings.label":"\u8FD9\u6709\u5E2E\u52A9\u5417\uFF1F","feedback.settings.reasons.label":"\u54EA\u9879\u9648\u8FF0\u63CF\u8FF0\u4E86\u60A8\u5BF9\u6B64\u9875\u9762\u7684\u770B\u6CD5\uFF1F","feedback.submit":"\u63D0\u4EA4","feedback.cancel":"\u53D6\u6D88","feedback.settings.comment.likeLabel":"\u6700\u6709\u5E2E\u52A9\u7684\u662F\u4EC0\u4E48\uFF1F","feedback.settings.comment.dislikeLabel":"\u6211\u4EEC\u53EF\u4EE5\u6539\u8FDB\u4EC0\u4E48\uFF1F","feedback.sentiment.thumbUp":"\u8D5E","feedback.sentiment.thumbDown":"\u8E29","feedback.settings.leftScaleLabel":"\u5B8C\u5168\u6CA1\u6709\u5E2E\u52A9","feedback.settings.rightScaleLabel":"\u975E\u5E38\u6709\u5E2E\u52A9","feedback.settings.optionalEmail.label":"\u60A8\u7684\u7535\u5B50\u90AE\u4EF6\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u8DDF\u8FDB\uFF09","feedback.settings.optionalEmail.placeholder":"yourname@example.com","jsonViewer.showMore":"\u663E\u793A\u66F4\u591A","jsonViewer.showLess":"\u663E\u793A\u66F4\u5C11","codeSnippet.report.buttonText":"\u62A5\u544A","codeSnippet.report.tooltipText":"\u62A5\u544A\u95EE\u9898","codeSnippet.report.label":"\u6B64\u4EE3\u7801\u6709\u4EC0\u4E48\u95EE\u9898\uFF1F","userMenu.login":"\u767B\u5F55","userMenu.logout":"\u6CE8\u9500","userMenu.devOnboardingLabel":"\u6211\u7684\u5E94\u7528\u7A0B\u5E8F","mobileMenu.mainMenu":"\u4E3B\u83DC\u5355","mobileMenu.previous":"\u4E0A\u4E00\u6B65","mobileMenu.products":"\u4EA7\u54C1","mobileMenu.version":"\u7248\u672C","page.nextButton":"\u4E0B\u4E00\u9875","page.previousButton":"\u4E0A\u4E00\u9875","page.actions.moreActions":"\u66F4\u591A\u64CD\u4F5C","promptTag.copy.buttonText":"\u590D\u5236\u63D0\u793A\u8BCD","promptTag.copy.description":"\u5C06\u6B64\u63D0\u793A\u8BCD\u590D\u5236\u5230\u526A\u8D34\u677F","promptTag.showPrompt":"\u663E\u793A\u63D0\u793A\u8BCD","promptTag.hidePrompt":"\u9690\u85CF\u63D0\u793A\u8BCD","promptTag.showFullPrompt":"\u663E\u793A\u5B8C\u6574\u63D0\u793A\u8BCD","promptTag.showLess":"\u6536\u8D77","promptTag.openIn.cursor":"\u5728 Cursor \u4E2D\u6253\u5F00","promptTag.openIn.cursorDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 Cursor","promptTag.openIn.claude":"\u5728 Claude \u4E2D\u6253\u5F00","promptTag.openIn.claudeDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 Claude","promptTag.openIn.chatgpt":"\u5728 ChatGPT \u4E2D\u6253\u5F00","promptTag.openIn.chatgptDescription":"\u5C06\u6B64\u63D0\u793A\u8BCD\u53D1\u9001\u5230 ChatGPT","page.actions.copyButtonText":"\u590D\u5236","page.actions.copyTitle":"\u4E3A LLM \u590D\u5236","page.actions.copyDescription":"\u5C06\u9875\u9762\u590D\u5236\u4E3A LLM \u7684 Markdown \u683C\u5F0F","page.actions.viewAsMdButtonText":"\u67E5\u770B Markdown","page.actions.viewAsMdTitle":"\u67E5\u770B Markdown","page.actions.viewAsMdDescription":"\u4EE5 Markdown \u683C\u5F0F\u6253\u5F00\u6B64\u9875\u9762","page.actions.chatGptButtonText":"\u5728 ChatGPT \u4E2D\u6253\u5F00","page.actions.chatGptTitle":"\u5728 ChatGPT \u4E2D\u6253\u5F00","page.actions.chatGptDescription":"\u4ECE ChatGPT \u83B7\u53D6\u89C1\u89E3","page.actions.claudeButtonText":"\u5728 Claude \u4E2D\u6253\u5F00","page.actions.claudeTitle":"\u5728 Claude \u4E2D\u6253\u5F00","page.actions.claudeDescription":"\u4ECE Claude \u83B7\u53D6\u89C1\u89E3","page.actions.grokButtonText":"\u5728 Grok \u4E2D\u6253\u5F00","page.actions.grokTitle":"\u5728 Grok \u4E2D\u6253\u5F00","page.actions.grokDescription":"\u4ECE Grok \u83B7\u53D6\u89C1\u89E3","page.actions.cursorMcpButtonText":"\u8FDE\u63A5\u5230 Cursor","page.actions.cursorMcpTitle":"\u8FDE\u63A5\u5230 Cursor","page.actions.cursorMcpDescription":"\u5728 Cursor \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp":"\u8FDE\u63A5 MCP","page.actions.connectMcp.cursor":"\u8FDE\u63A5\u5230 Cursor","page.actions.connectMcp.cursorDescription":"\u5728 Cursor \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp.vscode":"\u8FDE\u63A5\u5230 VS Code","page.actions.connectMcp.vscodeDescription":"\u5728 VS Code \u4E0A\u5B89\u88C5 MCP \u670D\u52A1\u5668","page.actions.connectMcp.claude":"\u8FDE\u63A5\u5230 Claude","page.actions.connectMcp.claudeDescription":"\u5C06 MCP \u670D\u52A1\u5668\u6DFB\u52A0\u5230\u60A8\u7684 Claude \u5E10\u6237","page.actions.connectMcp.claudeCode":"\u8FDE\u63A5\u5230 Claude Code","page.actions.connectMcp.claudeCodeDescription":"\u590D\u5236 Claude Code CLI \u547D\u4EE4","page.actions.connectMcp.codex":"\u8FDE\u63A5\u5230 Codex CLI","page.actions.connectMcp.codexDescription":"\u590D\u5236 Codex CLI \u547D\u4EE4","page.actions.connectMcp.copyConfig":"\u590D\u5236 MCP \u914D\u7F6E","page.actions.connectMcp.copyConfigDescription":"\u590D\u5236 MCP JSON \u914D\u7F6E","page.actions.connectMcp.copyUrl":"\u590D\u5236 MCP \u670D\u52A1\u5668 URL","page.actions.connectMcp.copyUrlDescription":"\u5C06 MCP \u670D\u52A1\u5668 URL \u590D\u5236\u5230\u526A\u8D34\u677F","page.actions.connectMcp.moreOptions":"\u66F4\u591A\u9009\u9879","navbar.label":"\u4E3B\u5BFC\u822A","navbar.products":"\u4EA7\u54C1","openapi.download.description.title":"\u4E0B\u8F7D OpenAPI \u63CF\u8FF0","openapi.info.title":"\u6982\u8FF0","openapi.info.contact.url":"URL","openapi.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","openapi.info.license":"\u8BB8\u53EF\u8BC1","openapi.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","openapi.info.metadata.title":"\u5143\u6570\u636E","graphql.info.metadata.title":"\u5143\u6570\u636E","button.download.tooltipText":"\u4E0B\u8F7D\u63CF\u8FF0","button.externalLink.tooltipText":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00","button.email.tooltipText":"\u53D1\u9001\u90AE\u4EF6","openapi.key":"\u952E","openapi.value":"\u503C","openapi.enum":"\u679A\u4E3E","openapi.items":"\u9879","openapi.default":"\u9ED8\u8BA4\u503C","openapi.variable":"\u53D8\u91CF","openapi.variables":"\u53D8\u91CF","openapi.actions.show":"\u663E\u793A","openapi.actions.hide":"\u9690\u85CF","openapi.actions.more":"\u66F4\u591A","openapi.languages.title":"\u8BED\u8A00","openapi.languages.moreButton.tooltipText":"\u67E5\u770B\u66F4\u591A\u8BED\u8A00","openapi.servers.title":"\u670D\u52A1\u5668","openapi.operations":"\u64CD\u4F5C","openapi.schemas":"\u6A21\u5F0F","openapi.webhooks":"Webhook","openapi.description":"\u63CF\u8FF0","openapi.badges.deprecated":"\u5DF2\u5F03\u7528","openapi.badges.required":"\u5FC5\u9700","openapi.badges.webhook":"Webhook","openapi.request":"\u8BF7\u6C42","openapi.path":"\u8DEF\u5F84","openapi.query":"\u67E5\u8BE2","openapi.querystring":"\u67E5\u8BE2\u5B57\u7B26\u4E32","openapi.cookie":"Cookie","openapi.header":"\u6807\u5934","openapi.body":"\u6B63\u6587","openapi.responses":"\u54CD\u5E94","openapi.response":"\u54CD\u5E94","openapi.callbacks":"\u56DE\u8C03","openapi.callbackRequest":"\u56DE\u8C03\u8BF7\u6C42","openapi.callbackResponse":"\u56DE\u8C03\u54CD\u5E94","openapi.payload":"\u8BF7\u6C42\u4F53","openapi.discriminator":"\u9274\u522B\u5668","openapi.contentType":"\u5185\u5BB9\u7C7B\u578B","openapi.tryIt":"\u8BD5\u7528","openapi.loading":"\u52A0\u8F7D\u4E2D...","openapi.tryItLoadFailed":"\u65E0\u6CD5\u52A0\u8F7D\u201C\u8BD5\u7528\u201D\u3002","openapi.reloadPage":"\u91CD\u65B0\u52A0\u8F7D\u9875\u9762","openapi.example":"\u793A\u4F8B","openapi.examples":"\u793A\u4F8B","openapi.additionalProperties":"\u9644\u52A0\u5C5E\u6027","openapi.patternProperties":"\u6A21\u5F0F\u5C5E\u6027","openapi.required":"\u5FC5\u9700","openapi.recursive":"\u9012\u5F52","openapi.complex":"\u590D\u6742","openapi.property":"\u5C5E\u6027","openapi.properties":"\u5C5E\u6027","openapi.details":"\u8BE6\u7EC6\u4FE1\u606F","openapi.hideExample":"\u9690\u85CF\u793A\u4F8B","openapi.showExample":"\u663E\u793A\u793A\u4F8B","openapi.expandAll":"\u5168\u90E8\u5C55\u5F00","openapi.deepLink.tooltip":"\u94FE\u63A5\u5230\u6B64\u90E8\u5206","openapi.collapseAll":"\u5168\u90E8\u6298\u53E0","openapi.viewSecurityDetails":"\u67E5\u770B\u5B89\u5168\u8BE6\u60C5","openapi.noResponseExample":"\u65E0\u54CD\u5E94\u793A\u4F8B","openapi.discriminator.searchPlaceholder":"\u641C\u7D22\u9879\u76EE","openapi.discriminator.searchNoResults":"\u672A\u627E\u5230\u9879\u76EE","openapi.discriminator.defaultMapping":"\u9ED8\u8BA4\u6620\u5C04","openapi.discriminator.defaultMappingTooltip":"OpenAPI 3.2\uFF1A\u5F53\u5176\u4ED6\u6620\u5C04\u4E0D\u5339\u914D\u65F6\u4F7F\u7528\u9ED8\u8BA4\u6620\u5C04\u3002","openapi.noResponseContent":"\u65E0\u5185\u5BB9","openapi.noRequestPayload":"\u65E0\u8BF7\u6C42\u6709\u6548\u8D1F\u8F7D","openapi.noRequestData":"\u65E0\u8BF7\u6C42\u6570\u636E","openapi.hidePattern":"\u9690\u85CF\u6A21\u5F0F","openapi.showPattern":"\u663E\u793A\u6A21\u5F0F","openapi.authorizationUrl":"\u6388\u6743 URL","openapi.tokenUrl":"\u4EE4\u724C URL","openapi.refreshUrl":"\u5237\u65B0 URL","openapi.showOptionalScopes":"\u663E\u793A\u53EF\u9009\u8303\u56F4","openapi.hideOptionalScopes":"\u9690\u85CF\u53EF\u9009\u8303\u56F4","openapi.security":"\u5B89\u5168","openapi.httpAuthorizationScheme":"HTTP \u6388\u6743\u65B9\u6848","openapi.bearerFormat":"Bearer \u683C\u5F0F","openapi.parameterName":"\u53C2\u6570\u540D\u79F0","openapi.flowType":"\u6D41\u7C7B\u578B","openapi.connectUrl":"\u8FDE\u63A5 URL","openapi.requiredScopes":"\u5FC5\u9700\u8303\u56F4","openapi.unsupportedLanguage":"\u4E0D\u652F\u6301\u8BE5\u8BED\u8A00\u3002","openapi.failedToGenerateCodeSample":"\u65E0\u6CD5\u751F\u6210\u4EE3\u7801\u793A\u4F8B\u3002","openapi.schemaCatalogLink.title":"\u5171\u4EAB\u67B6\u6784","openapi.schemaCatalogLink.copyButtonTooltip":"\u590D\u5236\u5230\u526A\u8D34\u677F","openapi.schemaCatalogLink.copiedTooltip":"\u5DF2\u590D\u5236\uFF01","openapi.mcp.title":"MCP server","openapi.mcp.endpoint":"Endpoint","openapi.mcp.tools":"MCP \u5DE5\u5177","openapi.mcp.protocolVersion":"\u534F\u8BAE\u7248\u672C","openapi.mcp.capabilities":"\u80FD\u529B","openapi.mcp.experimentalCapabilities":"\u5B9E\u9A8C\u6027\u80FD\u529B","openapi.mcp.inputSchema":"\u8F93\u5165\u67B6\u6784","openapi.mcp.inputExample":"\u8F93\u5165\u793A\u4F8B","openapi.mcp.outputSchema":"\u8F93\u51FA\u67B6\u6784","openapi.mcp.outputExample":"\u8F93\u51FA\u793A\u4F8B","openapi.mcp.exampleTitle":"\u8D44\u6E90\u5185\u5BB9","openapi.mcp.argumentsExample":"\u53C2\u6570\u793A\u4F8B","asyncapi.download.description.title":"\u4E0B\u8F7D AsyncAPI \u63CF\u8FF0","asyncapi.info.title":"\u6982\u8FF0","asyncapi.info.contact.url":"URL","asyncapi.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","asyncapi.info.license":"\u8BB8\u53EF\u8BC1","asyncapi.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","asyncapi.key":"\u952E","asyncapi.value":"\u503C","asyncapi.variables":"\u53D8\u91CF","asyncapi.required":"\u5FC5\u9700","asyncapi.badges.deprecated":"\u5DF2\u5F03\u7528","asyncapi.viewSecurityDetails":"\u67E5\u770B\u5B89\u5168\u8BE6\u60C5","asyncapi.requiredScopes":"\u5FC5\u9700\u8303\u56F4","graphql.download.description.title":"\u4E0B\u8F7D GraphQL \u67B6\u6784","graphql.info.title":"\u6982\u8FF0","graphql.info.contact.url":"URL","graphql.info.contact.name":"\u7535\u5B50\u90AE\u4EF6","graphql.info.license":"\u8BB8\u53EF\u8BC1","graphql.info.termsOfService":"\u670D\u52A1\u6761\u6B3E","graphql.overview":"GraphQL \u6982\u8FF0","graphql.metadata":"\u5143\u6570\u636E","graphql.key":"\u952E","graphql.value":"\u503C","graphql.queries":"\u67E5\u8BE2","graphql.mutations":"\u53D8\u66F4","graphql.subscriptions":"\u8BA2\u9605","graphql.directives":"\u6307\u4EE4","graphql.objects":"\u5BF9\u8C61","graphql.interfaces":"\u63A5\u53E3","graphql.unions":"\u8054\u5408","graphql.enums":"\u679A\u4E3E","graphql.inputs":"\u8F93\u5165","graphql.scalars":"\u6807\u91CF","graphql.fields":"\u5B57\u6BB5","graphql.inputFields":"\u8F93\u5165\u5B57\u6BB5","graphql.values":"\u503C","graphql.actions.show":"\u663E\u793A","graphql.actions.hide":"\u9690\u85CF","graphql.actions.more":"\u66F4\u591A","graphql.arguments.label":"\u53C2\u6570","graphql.arguments.show":"\u663E\u793A\u53C2\u6570","graphql.arguments.hide":"\u9690\u85CF\u53C2\u6570","graphql.arguments.here":"\u53C2\u6570\u5728\u6B64","graphql.returnTypes.label":"\u7ED3\u679C\u7C7B\u578B","graphql.returnTypes.show":"\u663E\u793A\u7ED3\u679C\u7C7B\u578B","graphql.returnTypes.hide":"\u9690\u85CF\u7ED3\u679C\u7C7B\u578B","graphql.possibleTypes":"\u53EF\u80FD\u7684\u7C7B\u578B","graphql.defaultValue":"\u9ED8\u8BA4\u503C","graphql.deprecationReason":"\u5F03\u7528\u539F\u56E0","graphql.requiredScopes":"\u5FC5\u9700\u8303\u56F4","graphql.viewSecurityDetails":"\u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F","graphql.objectScopes":"\u5BF9\u8C61\u8303\u56F4","graphql.fieldScopes":"\u5B57\u6BB5\u8303\u56F4","graphql.implementedInterfaces":"\u5B9E\u73B0\u7684\u63A5\u53E3","graphql.implementedBy":"\u5B9E\u73B0\u7C7B\u578B","graphql.nonNull":"\u975E\u7A7A","graphql.required":"\u5FC5\u9700","graphql.badges.deprecated":"\u5DF2\u5F03\u7528","asyncapi.actions.show":"\u663E\u793A","asyncapi.actions.hide":"\u9690\u85CF","asyncapi.actions.more":"\u66F4\u591A","asyncapi.payload":"\u8D1F\u8F7D","asyncapi.parameters":"\u53C2\u6570","asyncapi.messages":"\u6D88\u606F","asyncapi.contentType":"\u5185\u5BB9\u7C7B\u578B","asyncapi.moreDetails":"\u66F4\u591A\u8BE6\u7EC6\u4FE1\u606F","asyncapi.property":"\u5C5E\u6027","asyncapi.properties":"\u5C5E\u6027","asyncapi.details":"\u8BE6\u7EC6\u4FE1\u606F","asyncapi.reply":"\u56DE\u590D","asyncapi.servers.title":"\u670D\u52A1\u5668","graphql.variables":"\u53D8\u91CF","graphql.querySample":"\u67E5\u8BE2\u793A\u4F8B","graphql.mutationSample":"\u53D8\u66F4\u793A\u4F8B","graphql.subscriptionSample":"\u8BA2\u9605\u793A\u4F8B","graphql.responseSample":"\u54CD\u5E94\u793A\u4F8B","graphql.locations":"\u4F4D\u7F6E","graphql.sample":"\u793A\u4F8B","graphql.referenced":"\u5F15\u7528\u4F4D\u7F6E","graphql.content.fragment":"\u7247\u6BB5","graphql.tryIt":"\u8BD5\u7528","graphql.loading":"\u52A0\u8F7D\u4E2D...","graphql.tryItLoadFailed":"\u65E0\u6CD5\u52A0\u8F7D\u201C\u8BD5\u7528\u201D\u3002","graphql.reloadPage":"\u91CD\u65B0\u52A0\u8F7D\u9875\u9762","codeWalkthrough.preview":"\u9884\u89C8","codeWalkthrough.download":"\u4E0B\u8F7D","time.justNow":"\u521A\u624D","time.past.second":"1 \u79D2\u524D","time.past.seconds":"{{value}} \u79D2\u524D","time.past.minute":"1 \u5206\u949F\u524D","time.past.minutes":"{{value}} \u5206\u949F\u524D","time.past.hour":"1 \u5C0F\u65F6\u524D","time.past.hours":"{{value}} \u5C0F\u65F6\u524D","time.past.day":"1 \u5929\u524D","time.past.days":"{{value}} \u5929\u524D","time.past.week":"1 \u5468\u524D","time.past.weeks":"{{value}} \u5468\u524D","time.past.month":"1 \u4E2A\u6708\u524D","time.past.months":"{{value}} \u4E2A\u6708\u524D","time.past.year":"1 \u5E74\u524D","time.past.years":"{{value}} \u5E74\u524D","page.internalServerError.title":"\u5185\u90E8\u670D\u52A1\u5668\u9519\u8BEF","page.internalServerError.description":"\u6211\u4EEC\u7684\u670D\u52A1\u5668\u51FA\u9519\u4E86\u3002\u8BF7\u7A0D\u540E\u518D\u8BD5\uFF0C\u5982\u679C\u95EE\u9898\u4ECD\u7136\u5B58\u5728\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458\u3002","page.skipToContent.label":"\u8DF3\u8F6C\u5230\u5185\u5BB9","catalog.catalogs.label":"\u76EE\u5F55","catalog.catalogs.all.title":"\u5168\u90E8","catalog.catalogs.all.description":"\u6240\u6709\u5B9E\u4F53","catalog.catalogs.all.switcherLabel":"\u5168\u90E8","catalog.catalogs.service.title":"\u670D\u52A1","catalog.catalogs.service.description":"\u670D\u52A1\u5B9E\u4F53","catalog.catalogs.service.switcherLabel":"\u670D\u52A1","catalog.catalogs.user.title":"\u7528\u6237","catalog.catalogs.user.description":"\u7528\u6237\u5B9E\u4F53","catalog.catalogs.user.switcherLabel":"\u7528\u6237","catalog.catalogs.team.title":"\u56E2\u961F","catalog.catalogs.team.description":"\u56E2\u961F\u5B9E\u4F53","catalog.catalogs.team.switcherLabel":"\u56E2\u961F","catalog.catalogs.domain.title":"\u57DF","catalog.catalogs.domain.description":"\u57DF\u5B9E\u4F53","catalog.catalogs.domain.switcherLabel":"\u57DF","catalog.catalogs.apiDescription.title":"API \u63CF\u8FF0","catalog.catalogs.apiDescription.description":"API \u63CF\u8FF0\u5B9E\u4F53","catalog.catalogs.apiDescription.switcherLabel":"API \u63CF\u8FF0","catalog.catalogs.dataSchema.title":"\u6570\u636E\u6A21\u5F0F","catalog.catalogs.dataSchema.description":"\u6570\u636E\u6A21\u5F0F\u5B9E\u4F53","catalog.catalogs.dataSchema.switcherLabel":"\u6570\u636E\u6A21\u5F0F","catalog.catalogs.apiOperation.title":"API \u64CD\u4F5C","catalog.catalogs.apiOperation.description":"API \u64CD\u4F5C\u5B9E\u4F53","catalog.catalogs.apiOperation.switcherLabel":"API \u64CD\u4F5C","catalog.entity.metadata.title":"\u5143\u6570\u636E","catalog.entity.schema.title":"\u6A21\u5F0F","catalog.entity.properties.apiDescription.title":"API \u63CF\u8FF0","catalog.backToAllLabel":"\u76EE\u5F55","catalog.notConnected":"\u672A\u8FDE\u63A5","catalog.tags.label":"\u6807\u7B7E","catalog.owners.label":"\u6240\u6709\u8005","catalog.repositories.label":"\u4ED3\u5E93","catalog.email.label":"\u7535\u5B50\u90AE\u4EF6","catalog.format.label":"\u683C\u5F0F","catalog.entityType.label":"\u5B9E\u4F53\u7C7B\u578B","catalog.domains.label":"\u57DF","catalog.contact.label":"Slack \u9891\u9053","catalog.methodAndPath.label":"\u65B9\u6CD5\u548C\u8DEF\u5F84","catalog.links.label":"\u94FE\u63A5","catalog.metadata.domains":"\u57DF:","catalog.metadata.owners":"\u6240\u6709\u8005:","catalog.sort":"\u6392\u5E8F","catalog.history.button.label":"\u7248\u672C\u5386\u53F2","catalog.history.sidebar.title":"\u7248\u672C\u5386\u53F2","catalog.history.sidebar.close":"\u5173\u95ED\u7248\u672C\u5386\u53F2","catalog.history.version.label":"\u7248\u672C","catalog.filters.close":"\u5173\u95ED","catalog.history.version.notSpecified":"\u672A\u6307\u5B9A","catalog.history.version.default":"\u9ED8\u8BA4","catalog.history.revisions.limitMessage":"\u4E0D\u5B58\u50A8\u8F83\u65E7\u7684\u4FEE\u8BA2\u7248\u672C\u3002","catalog.history.revision.current":"\u5F53\u524D","catalog.history.revisions.showLess":"\u663E\u793A\u66F4\u5C11","catalog.history.revisions.showMore":"\u663E\u793A\u66F4\u591A{{count}}\u9879","select.noResults":"\u65E0\u7ED3\u679C","loaders.loading":"\u52A0\u8F7D\u4E2D...","diagram.openFullscreen":"\u70B9\u51FB\u5168\u5C4F\u67E5\u770B\u56FE\u8868","diagram.zoomIn":"\u653E\u5927","diagram.zoomOut":"\u7F29\u5C0F","diagram.reset":"\u9002\u5E94\u7A97\u53E3","diagram.close":"\u5173\u95ED","diagram.viewer":"\u56FE\u8868\u67E5\u770B\u5668","missingTranslationNotice.title":"\u6B64\u9875\u9762\u5C1A\u672A\u7FFB\u8BD1","missingTranslationNotice.content":"\u6B64\u9875\u9762\u6682\u65E0\u7FFB\u8BD1\uFF0C\u5F53\u524D\u663E\u793A\u7684\u662F {{language}} \u539F\u7248\u5185\u5BB9\u3002","missingTranslationNotice.close":"\u5173\u95ED"};export{e as zh};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GATEWAY_FETCH_LIMIT_DEFAULTS as e,MCP_REQUEST_LIMIT_DEFAULTS as t}from"../../constants/common.js";const a=["@redocly/*","react","react-dom","react-is","react-router","react-router-dom","styled-components","@markdoc/markdoc","js-yaml","graphql","zod","hono","buffer","i18next","nanoid","picomatch","prismjs","react-countup","styled-system","polished","clsx","react-icons","lucide-react","framer-motion","react-helmet","react-select","react-markdown","remark-gfm","unist-util-visit","marked","highlight-words-core","axios","lodash","lodash-es","lodash.throttle"],o={pro:{pricingTier:"pro",rbac:!1,sso:!1,cookieConsent:!1,analytics:!0,removeAttribution:!1,advancedSearch:!1,ssoDirect:!1,aiSearchLimit:750,kvStorageLimit:.5,mcp:!0,mcpGateway:!1,sdkGeneration:!1,mcpMode:"tools",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!1,allowedPackages:a},scale:{pricingTier:"scale",rbac:!1,sso:!0,cookieConsent:!0,analytics:!0,removeAttribution:!0,advancedSearch:!0,ssoDirect:!0,aiSearchLimit:750,kvStorageLimit:5,mcp:!0,mcpGateway:!1,sdkGeneration:!0,mcpMode:"tools",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!0},enterprise:{pricingTier:"enterprise",rbac:!0,sso:!0,cookieConsent:!0,analytics:!0,removeAttribution:!0,advancedSearch:!0,ssoDirect:!1,aiSearchLimit:750,kvStorageLimit:5,mcp:!0,mcpGateway:!0,sdkGeneration:!0,mcpMode:"code",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!0}},c=["@redocly/portal-plugin-async-api/plugin.js","@redocly/portal-plugin-mock-server/plugin.js","@redocly/portal-plugin-soap-api/plugin.js"],s={"code-walkthrough":"codeWalkthrough",step:"codeWalkthrough",toggle:"codeWalkthrough",input:"codeWalkthrough"};export{s as GATED_MARKDOC_TAGS,c as GATED_PLUGINS,o as PLAN_GATES_DEFAULTS};
|
|
1
|
+
import{GATEWAY_FETCH_LIMIT_DEFAULTS as e,MCP_REQUEST_LIMIT_DEFAULTS as t}from"../../constants/common.js";const a=["@redocly/*","react","react-dom","react-is","react-router","react-router-dom","styled-components","@markdoc/markdoc","js-yaml","graphql","zod","hono","buffer","i18next","nanoid","picomatch","prismjs","react-countup","styled-system","polished","clsx","react-icons","lucide-react","framer-motion","react-helmet","react-select","react-markdown","remark-gfm","unist-util-visit","marked","highlight-words-core","axios","lodash","lodash-es","lodash.throttle"],o={pro:{pricingTier:"pro",rbac:!1,sso:!1,cookieConsent:!1,analytics:!0,removeAttribution:!1,advancedSearch:!1,ssoDirect:!1,aiSearchLimit:750,kvStorageLimit:.5,mcp:!0,mcpGateway:!1,sdkGeneration:!1,mcpMode:"tools",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!1,customMarkdocTags:!1,customMcpTools:!1,allowedPackages:a},scale:{pricingTier:"scale",rbac:!1,sso:!0,cookieConsent:!0,analytics:!0,removeAttribution:!0,advancedSearch:!0,ssoDirect:!0,aiSearchLimit:750,kvStorageLimit:5,mcp:!0,mcpGateway:!1,sdkGeneration:!0,mcpMode:"tools",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!0,customMarkdocTags:!0,customMcpTools:!0},enterprise:{pricingTier:"enterprise",rbac:!0,sso:!0,cookieConsent:!0,analytics:!0,removeAttribution:!0,advancedSearch:!0,ssoDirect:!1,aiSearchLimit:750,kvStorageLimit:5,mcp:!0,mcpGateway:!0,sdkGeneration:!0,mcpMode:"code",gatewayFetchRatePerMin:e.ratePerMin,gatewayFetchQuotaPerDay:e.quotaPerDay,gatewayFetchBudgetPerExec:e.budgetPerExec,mcpRequestRatePerMin:t.ratePerMin,mcpRequestQuotaPerDay:t.quotaPerDay,customPackages:!0,customMarkdocTags:!0,customMcpTools:!0}},c=["@redocly/portal-plugin-async-api/plugin.js","@redocly/portal-plugin-mock-server/plugin.js","@redocly/portal-plugin-soap-api/plugin.js"],s={"code-walkthrough":"codeWalkthrough",step:"codeWalkthrough",toggle:"codeWalkthrough",input:"codeWalkthrough"};export{s as GATED_MARKDOC_TAGS,c as GATED_PLUGINS,o as PLAN_GATES_DEFAULTS};
|
|
@@ -14,6 +14,10 @@ export declare class EntitlementsProvider {
|
|
|
14
14
|
canAccessFeature: (key: Feature) => boolean | null;
|
|
15
15
|
/** Whether the project may declare any npm package; true unless the plan sets `customPackages` to false. */
|
|
16
16
|
canUseAnyPackage: () => boolean;
|
|
17
|
+
/** Whether pages may use the tags of `@theme/markdoc/schema.ts`; true unless the plan sets `customMarkdocTags` to false. */
|
|
18
|
+
canUseCustomMarkdocTags: () => boolean;
|
|
19
|
+
/** Whether `@mcp` folders register MCP tools; true unless the plan sets `customMcpTools` to false. */
|
|
20
|
+
canUseCustomMcpTools: () => boolean;
|
|
17
21
|
/** The npm packages the plan allows when `canUseAnyPackage()` is false; `[]` when the token has no valid list. */
|
|
18
22
|
getAllowedPackages: () => string[];
|
|
19
23
|
getPackageEjectIgnore(): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ENTITLEMENTS_JWKS_URL as c}from"../constants/common.js";import{PLAN_GATES_DEFAULTS as l}from"../constants/entitlements.js";import{envConfig as
|
|
1
|
+
import{ENTITLEMENTS_JWKS_URL as c}from"../constants/common.js";import{PLAN_GATES_DEFAULTS as l}from"../constants/entitlements.js";import{envConfig as a}from"../config/env-config.js";import{logger as r}from"../tools/notifiers/logger.js";import{reporter as i}from"../tools/notifiers/reporter.js";import{PACKAGE_NAME as p,PRODUCT_GATES as m}from"../../config/product-gates.js";import{EJECT_IGNORE_CONFIG as g}from"../../config/eject-ignore.js";import*as o from"../web-server/jwt/jwt.js";import{AlgorithmTypes as f}from"../web-server/jwt/types.js";const u="default",h="@redocly/framework";class s{static#t;#n=null;#e={};constructor(){}static instance(){return s.#t||(s.#t=new s),s.#t}get entitlements(){return this.#n}get pricingTier(){return this.#n?.pricingTier??null}async init(e={}){this.#e=e;try{await this.#c()}catch(t){r.warn("Failed to process entitlements information: "+t.message),r.verbose(t.message)}}canAccessFeature=e=>e?this.entitlements&&!!this.entitlements[e]:!0;canUseAnyPackage=()=>this.#r("customPackages");canUseCustomMarkdocTags=()=>this.#r("customMarkdocTags");canUseCustomMcpTools=()=>this.#r("customMcpTools");#r(e){return this.entitlements?.[e]!==!1}getAllowedPackages=()=>{const e=this.entitlements?.allowedPackages;return Array.isArray(e)&&e.every(t=>typeof t=="string")?e:[]};async getPackageEjectIgnore(){const e=[];for(const[t,n]of Object.entries(g))this.canAccessFeature(t)&&e.push(...n);return e}#s(){return a.PLAN_GATES||""}async#a(){let e;try{e=await fetch(c).then(t=>t.json())}catch(t){return r.warn("Failed to get JWKS information: "+t.message),!1}try{const t=e.keys&&e.keys.length>0?e.keys[0]:null,n=this.#s();return t&&n?await o.verify(n,t,f.RS256,this.#e.ignoreTokenExpiration):!1}catch(t){return r.warn("Failed to verify plan gates token: "+t.message),!1}}async#i(){if(await this.#a()){const{payload:e}=o.decode(this.#s());if(e){if(!a.REDOCLY_ENV&&e.exp){const t=e.exp*1e3,n=new Date(t);r.info(`Entitlements token expires on ${n.toISOString()} (in ${Math.ceil((t-new Date().getTime())/(1440*60*1e3))} days)`)}return await this.#o(e),e}}await i.panicOnContentError("Plan gates token is not valid or empty.")}async#o(e){p===h&&(e.pricingTier||e.subscriptionId===u||await i.panicOnContentError("@redocly/framework requires the Pro, Scale, or Enterprise plan. This organization is on an earlier plan: keep building with its product package, such as @redocly/realm."))}async#c(){const e=this.#e.developModePlan&&!this.#s()?l[this.#e.developModePlan]:await this.#i();this.#n={...m,...e}}}export{s as EntitlementsProvider};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Markdoc tags the plan lacks, each with the message a page shows in place of the tag:
|
|
3
|
+
* `userTagNames` when custom Markdoc tags are off, and the product-gated tags of a missing gate.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getPlanDeniedMarkdocTags(userTagNames: readonly string[]): Record<string, string>;
|
|
6
|
+
//# sourceMappingURL=plan-denied-markdoc-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{GATED_MARKDOC_TAGS as s}from"../constants/entitlements.js";import{EntitlementsProvider as i}from"./entitlements-provider.js";function d(n){const e=i.instance(),o={};if(!e.canUseCustomMarkdocTags())for(const t of n)o[t]=`Custom Markdoc tags are not in this project's plan, so \`${t}\` is ignored.`;for(const[t,r]of Object.entries(s))e.canAccessFeature(r)||(o[t]=`\`${t}\` is not in this project's plan and is ignored.`);return o}export{d as getPlanDeniedMarkdocTags};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{spawn as w}from"child_process";import
|
|
2
|
-
`).map(
|
|
3
|
-
`);
|
|
1
|
+
import{spawn as w}from"child_process";import g from"path";import{logger as h}from"../tools/notifiers/logger.js";async function M(l,p){if(!p)return new Map;let i,m;try{const t=await p.revparse(["--show-toplevel"]);i=new Set((await p.raw("ls-files",l)).split(`
|
|
2
|
+
`).map(n=>n.trim()));const e=t&&g.relative(t,l);m=e&&e.length&&e.length+1||0}catch(t){if(t.message.includes("not a git repository"))return new Map;throw t}return new Promise(t=>{const e=new Map;let n=0;const o=w("git",["log","--raw","--no-renames","--no-merges","--pretty=%at","--","."],{cwd:g.resolve(l),stdio:"pipe"});let c="";o.stderr.on("data",r=>{c+=String(r)}),o.on("close",r=>{r&&h.warn(`Could not read the full git history, some last updated dates can be wrong: ${c.trim()}`)});let f="";function u(r){f+=String(r);const d=f.split(`
|
|
3
|
+
`);f=d.pop()||"",d.forEach(s=>{if(s=s.trim(),!!s){if(s.startsWith(":")){const a=s.split(" ").slice(-1)[0].slice(m);if(e.has(a))return;i.has(a)&&i.delete(a),e.set(a,new Date(n*1e3).toISOString())}else n=Number(s);i.size===0&&(o.kill(),t(e))}})}o.stdout.on("data",r=>{u(r)}),o.stdout.on("end",()=>{u(""),o.kill(),t(e)})})}export{M as fastMtime};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Config, Node, ValidationType } from '@redocly/markdoc';
|
|
2
2
|
import type { Store } from '../../store.js';
|
|
3
|
-
import type { LifecycleContext, MarkdownParseInput, MarkdocResolveContext } from '../../types';
|
|
3
|
+
import type { LifecycleContext, MarkdownParseInput, MarkdocOptions, MarkdocResolveContext } from '../../types';
|
|
4
4
|
import type { MarkdocError } from '../../../types/index.js';
|
|
5
5
|
export type ResolvableType = ValidationType & {
|
|
6
6
|
resolver?: string;
|
|
@@ -31,11 +31,11 @@ type MarkdocInfo = {
|
|
|
31
31
|
codeSnippetLanguages?: Record<string, number>;
|
|
32
32
|
codeWalkthroughLanguages?: Record<string, number>;
|
|
33
33
|
};
|
|
34
|
-
export declare function resolveAndValidateMarkdoc(parsedAstChunk: ParsedAstChunk, markdocOpts:
|
|
34
|
+
export declare function resolveAndValidateMarkdoc(parsedAstChunk: ParsedAstChunk, markdocOpts: MarkdocOptions | undefined, context: MarkdocResolveContext): Promise<MarkdocInfo>;
|
|
35
35
|
export declare function getAst(relativePath: string, rawContent: string): ParsedAstChunk;
|
|
36
36
|
export declare function extractMdFirstHeading(relativePath: string, context: LifecycleContext): Promise<string | undefined>;
|
|
37
37
|
export declare function validateAllMarkdowns(store: Store, context?: LifecycleContext): Promise<void>;
|
|
38
|
-
export declare function parseAndResolveMarkdoc(input: MarkdownParseInput, markdocOpts:
|
|
38
|
+
export declare function parseAndResolveMarkdoc(input: MarkdownParseInput, markdocOpts: MarkdocOptions | undefined, rootContext: MarkdocResolveContext, resource?: string): Promise<import("../../types").LoadResult<{
|
|
39
39
|
ast: Node;
|
|
40
40
|
info: MarkdocInfo;
|
|
41
41
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import N from"@redocly/markdoc";import{htmlTags as
|
|
1
|
+
import N from"@redocly/markdoc";import{htmlTags as $}from"@redocly/markdoc/html";import*as P from"path";import{convertGithubAlertToAdmonition as A}from"@redocly/theme/markdoc/tags/admonition";import{logger as H}from"../../tools/notifiers/logger.js";import{reporter as F}from"../../tools/notifiers/reporter.js";import{sha1 as B}from"../../utils/crypto/sha1.js";import{formatMarkdocError as G}from"./errors.js";import{extractFirstHeading as C,SKIP as j,visit as K}from"./markdoc/plugins/utils.js";import{isPromptNode as U}from"../../../markdoc/helpers/guards/is-prompt-node.js";import{attributeResolvers as L}from"./attribute-resolvers/index.js";import{MdResolveError as V}from"./attribute-resolvers/md-resolve-error.js";import{normalizeHtmlHeadings as q}from"./html/normalize-html-headings.js";import{resolveRawPartials as J}from"./markdoc/resolve-raw-partials.js";import{exampleContentTrees as Q,reparseExampleFences as X}from"./markdoc/reparse-example-fences.js";import{MARKDOC_PARTIALS_DEPS_KEY as Z}from"../../constants/common.js";import{getLinkOriginalAttrName as tt}from"./attribute-resolvers/utils.js";import{createSourceLinesReader as at}from"./create-source-lines-reader.js";const et="EMPTY";async function rt(a,e,r){const{actions:n}=r,{relativePath:s,resolveErrors:D}=a,u={...r,readSourceLines:at(a.rawContent)},k=new Set,d=new Set,w=new Set,c=new Set,g={},m=new Set,b={},M={};function S(t,o){const E=o||et;t[E]=(t[E]||0)+1}const _=[];a.resolveErrors.length=0;const T=Q(a.ast),I=t=>{A(t);const o=E();_.push(o.then(y=>{y?.sharedDataIds&&y.sharedDataIds.forEach(f=>k.add(f))}).catch(Y(t)));async function E(){const y=[];switch(t.type){case"fence":S(b,t.attributes.language);break;case"link":case"image":await L.nativeMdLink(t,t.type==="link"?"href":"src",s,u);break;case"tag":{if(!t.tag)break;const f=e?.tags?.[t.tag];if(!f){const i=e?.planDeniedTags?.[t.tag];i&&(t.addError({level:"warning",id:"invalid-tag",message:i}),t.tag="",t.type="error",t.attributes={});break}const v=t.tag==="html"?t.attributes.name:t.tag;if((t.tag==="html"?m:c).add(v),g[v]=(g[v]||0)+1,v==="code-snippet"&&S(b,t.attributes.language),f.attributes?.__idx&&(t.attributes.__idx=g[t.tag]),f.dynamicComponentLib&&d.add(f.dynamicComponentLib),!f.attributes)break;if(v==="partial"&&t.attributes?.file){const i=tt("file"),l=t[i]||t.attributes.file,h=l.startsWith("/")?l.slice(1):P.posix.normalize(P.posix.join(P.posix.dirname(s),l));w.add(h);const p=(n.getGlobalConfig(Z)||{})[h];if(p?.dynamicComponents)for(const R of p.dynamicComponents)d.add(R);if(p?.sharedDataDeps)for(const R of p.sharedDataDeps)k.add(R)}for(const[i,l]of Object.entries(f.attributes)){const h=l.type;if(h&&(h.resolver||l.resolver)){const O=L[h.resolver||l.resolver],p=await O?.(t,i,s,u);p?.sharedDataId&&y.push(p.sharedDataId)}}if(v==="code-walkthrough")for(const i of t.attributes.resolvedFilesets||[])for(const l of i.files||[])S(M,l.language);const x=t.attributes?.attrs;if(x&&t.tag==="html")for(const i of Object.keys(x))i==="src"||i==="srcSet"?await L.htmlSourceAttribute(t,i,s,u):i==="href"&&await L.htmlHref(t,i,s,u);break}}return{sharedDataIds:y}}};function Y(t){return async o=>{if(!(o instanceof V)){await F.panicOnBuild(o.message);return}D.push(G({type:"resolve_link",meta:{...o.meta,link:o.meta.link??o.meta.rawLink},lines:t.location?[t.location.start.line,t.location.end.line]:[],location:t.location,error:{id:"",level:"error",message:o.message,location:t.location}},a.relativePath,a.rawContent))}}K(a.ast,t=>(I(t),U(t)?j:void 0));for(const t of T)K(t,o=>(A(o),o.type==="tag"&&I(o),U(o)?j:void 0));return await Promise.all(_),a.sharedDataDeps=k,a.dynamicMarkdocComponents=d,a.validatedAtRevision<n.buildRevision&&(a.markdocErrors=[a.ast,...T].flatMap(t=>N.validate(t,e)).map(t=>G(t,s,a.rawContent)),a.validatedAtRevision=n.buildRevision),{sharedDataDeps:a.sharedDataDeps,dynamicMarkdocComponents:Array.from(a.dynamicMarkdocComponents?.values()??[]),partials:Array.from(w),tagList:Array.from(c),htmlTagsList:Array.from(m),tagOccurrence:g,codeSnippetLanguages:b,codeWalkthroughLanguages:M}}const z="unclosed-html",ot={html:$({errorTag:z}),allowIndentation:!0,allowComments:!0};function W(a,e){const r=N.parse(a,{...ot,...e});return it(r),q(r),r}function it(a){for(const e of a.walk())e.type!=="tag"||e.tag!==z||(e.type="error",e.errors.push({id:"parse-error",level:"critical",message:String(e.attributes.message),location:e.location}))}function st(a,e){const r=W(e,{file:a,slots:!0});return X(r,s=>W(s,{file:a})),{ast:r,rawContent:e,resolveErrors:[],markdocErrors:[],relativePath:a,sharedDataDeps:void 0,validatedAtRevision:-1}}async function St(a,e){const{data:r}=await e.cache.load(a,"markdown-ast");return C(r.ast)}async function Rt(a,e){F.clearMarkdocProblems();const r=a.getAllRoutes();let n=0;const s=H.isInteractive();for(const D of r)await a.resolveRouteStaticData(D,e,!0),n++,s&&n%100===0&&H.logInFooter("validate",` \u{1F50D} Status: validating markdoc (${n}/${r.length})`)}async function Pt(a,e,r,n){const s=a.content?B(a.content):"";return await r.context.cache.load(n||a.relativePath,{loader:u,name:"markdown-inline-parser"},[s,String(r.actions.buildRevision)]);async function u(k,d,w){let c;if(a.content){const m=await d.getConfig(),b=await J(a.content,a.relativePath,m.markdown?.partialsFolders,d);c=st(a.relativePath,b)}else c=(await d.cache.load(a.relativePath,"markdown-ast")).data;let g={};if(r.actions.buildRevision!==0&&(g=await rt(c,e,r)),!a.isVirtual){for(const m of c.markdocErrors)w(m);for(const m of c.resolveErrors)w(m)}return{ast:c.ast,info:g}}}export{St as extractMdFirstHeading,st as getAst,Pt as parseAndResolveMarkdoc,rt as resolveAndValidateMarkdoc,Rt as validateAllMarkdowns};
|
|
@@ -50,5 +50,7 @@ export declare function getMarkdocOptions(serverOutDir?: string, _templateId?: s
|
|
|
50
50
|
}): string;
|
|
51
51
|
};
|
|
52
52
|
};
|
|
53
|
+
/** The tags the project schema defines, under the names pages use them by; built-in names included. */
|
|
54
|
+
userTagNames: string[];
|
|
53
55
|
}>;
|
|
54
56
|
//# sourceMappingURL=markdoc-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import f from"@redocly/markdoc";import*as
|
|
1
|
+
import f from"@redocly/markdoc";import*as g from"@redocly/theme/markdoc/default";import{reporter as p}from"../../../tools/notifiers/reporter.js";import*as u from"../../../../markdoc/nodes/index.js";import d from"../../../../markdoc/tags/index.js";import{normalizeCustomTags as l}from"../../../../markdoc/helpers/normalize-custom-tags.js";import{includes as h}from"./functions/includes.js";import{importUserTags as O}from"./import-user-tags.js";import{concat as y}from"./functions/concat.js";const T=g.tags;function b(r){const{tags:c,functions:o={},...n}=r,a={...c,...n},i=Object.entries(a),t=[],s=[];for(const[e,m]of i)e in f.nodes?t.push([e,m]):s.push([e,m]);return{nodes:Object.fromEntries(t),tags:Object.fromEntries(s),functions:o}}async function S(r="../../../esbuild/cache/server/",c=""){let o;try{o=(await O(r)).schema}catch(e){throw e.code==="ERR_MODULE_NOT_FOUND"?(p.printErrors(),new Error("Please fix the errors above and try again.")):e}const{tags:n={},nodes:a={},functions:i={}}=b(o),t=l(n),s={tags:{schemaDefinition:{render:"SchemaDefinition",attributes:{schemaRef:{type:String},exampleRef:{type:String},showReadOnly:{type:Boolean},showWriteOnly:{type:Boolean}}}}};return{nodes:{...u,...a},tags:{...d,...T,...t,...s.tags},functions:{...f.functions,...i,includes:h,concat:y},userTagNames:Object.keys(t)}}export{S as getMarkdocOptions};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { LifecycleContext, ProcessContentActions } from '../../../types';
|
|
2
2
|
import type { CustomMcpToolsState } from '../types.js';
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Registers every file in an `@mcp` folder as one MCP tool, named after the file. Without custom
|
|
5
|
+
* MCP tools in the plan, each file is a warning and no tool.
|
|
6
|
+
*/
|
|
4
7
|
export declare function scanCustomMcpTools(actions: ProcessContentActions, context: LifecycleContext, state: CustomMcpToolsState): Promise<number>;
|
|
5
8
|
export declare function resetCustomMcpTools(actions: Pick<ProcessContentActions, 'removeMcpTools'>, state: CustomMcpToolsState): void;
|
|
6
9
|
//# sourceMappingURL=scan-custom-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{basename as
|
|
1
|
+
import{basename as p,join as f}from"node:path";import{logger as d}from"../../../tools/notifiers/logger.js";import{reporter as i}from"../../../tools/notifiers/reporter.js";import{EntitlementsProvider as h}from"../../../entitlements/entitlements-provider.js";import{CODE_MODE_TOOL_NAMES as T}from"../codemode/constants.js";import{ALL_DEFAULT_TOOL_NAMES as M}from"../docs-mcp/tool-schemas.js";import{extractToolDefinition as O}from"./extract-tool-definition.js";const E=/(^|\/)@mcp\/.*\.(ts|js)$/,C=/^[a-zA-Z0-9_-]{1,64}$/,P=new Set([...T,...M]);async function b(t,r,n){_(t,n);const s=r.fs.scan(E).filter(e=>!e.isVirtual&&!e.relativePath.endsWith(".d.ts")).map(e=>e.relativePath);if(!h.instance().canUseCustomMcpTools()){for(const e of s)n.warnedPlanIgnoredFiles.has(e)||(n.warnedPlanIgnoredFiles.add(e),d.warn("Custom MCP tools are not in this project's plan, so %rp is ignored.",e));return 0}const u=new Set(t.getMcpTools().map(e=>e.name)),l=new Map;for(const e of s){const o=p(e).replace(/\.(ts|js)$/,"");if(!C.test(o)){await i.panicOnBuildContentError(`Invalid MCP tool file "${e}": the tool name "${o}" is derived from the file name and may only contain letters, numbers, hyphens, and underscores (max 64 characters). Rename the file.`);continue}const c=l.get(o);if(c){await i.panicOnBuildContentError(`Duplicate MCP tool name "${o}": defined by both "${c}" and "${e}". Tool names are file names, so each file name must be unique across @mcp folders.`);continue}if(P.has(o)||u.has(o)){await i.panicOnBuildContentError(`Invalid MCP tool file "${e}": the tool name "${o}" is already used by a built-in MCP tool. Rename the file.`);continue}l.set(o,e);const m=f(t.contentDir,e),a=await O({toolName:o,absoluteSourcePath:m,contentDir:t.contentDir,serverOutDir:t.serverOutDir});if(!a.ok){await i.panicOnBuildContentError(`Invalid MCP tool file "${e}": ${a.errors.join(" ")}`);continue}!a.schema.outputSchema&&!n.warnedNoOutputSchemaTools.has(o)&&(n.warnedNoOutputSchemaTools.add(o),d.warn(`MCP tool "${o}" in %rp declares no \`outputSchema\`. Add one that describes the returned value.`,e)),t.addMcpTools(m,[a.schema]),n.registeredToolNames.push(o)}return n.registeredToolNames.length}function _(t,r){t.removeMcpTools(r.registeredToolNames),r.registeredToolNames=[]}export{_ as resetCustomMcpTools,b as scanCustomMcpTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fileURLToPath as U}from"node:url";import{dirname as
|
|
1
|
+
import{fileURLToPath as U}from"node:url";import{dirname as F,join as D}from"node:path";import{MCP_ROUTE as $,PUBLIC_MCP_ROUTE as M}from"@redocly/theme/core/constants/mcp";import{logger as p}from"../../tools/notifiers/logger.js";import{reporter as k}from"../../tools/notifiers/reporter.js";import{isDefined as B}from"../../../utils/guards/is-defined.js";import{MCP_CREDENTIALS_HANDLER_ID as P,MCP_CREDENTIALS_ROUTE as V,MCP_DOCS_SERVER_HANDLER_ID as T,MCP_NOT_ALLOWED_TEMPLATE_ID as x}from"../../constants/mcp.js";import{bundledOpenApiDocumentsToMcpOpenApi as J,bundledGraphqlDocumentsToMcpOpenApi as W,buildGraphqlDescriptions as X,collectIgnoredRoutes as z,filterIgnoredApiDescriptions as A,getCleanedUpApiDescriptions as K,isMcpInRedirects as Q}from"./utils.js";import{getMcpMode as R,isMcpElicitationEnabled as Y,isMcpGatewayEnabled as Z}from"./utils/mode.js";import{getPublicMcpEndpointStatus as S}from"./utils/public-endpoint.js";import{findGatedToolNames as ee}from"./utils/find-gated-tool-names.js";import{getDefaultToolSchemas as oe}from"./docs-mcp/tool-schemas.js";import{EXECUTE_TOOL_SCHEMA as te}from"./codemode/tools/execute-schema.js";import{isGatewayCapabilityEnabled as ie,isGatewayEligible as re}from"./gateway-mcp/eligibility.js";import{resolveGatewayFetchLimits as se}from"./gateway-mcp/rate-limit/fetch-limiter/fetch-limits.js";import{resetCustomMcpTools as ne,scanCustomMcpTools as ae}from"./custom-tools/scan-custom-tools.js";import{resolveSiteBranding as ce}from"./handlers/credentials-page/site-branding.js";import{telemetryTraceStep as pe}from"../../../cli/telemetry/helpers/trace-step.js";import{DEFAULT_DOCS_MCP_SERVER_NAME as _}from"./constants.js";const b=F(U(import.meta.url));async function de(){let i;const m={registeredToolNames:[],warnedNoOutputSchemaTools:new Set,warnedPlanIgnoredFiles:new Set};let u=0,f=!1;return{id:"mcp",async processContent(e,a){await pe("com.redocly.build.plugin.mcp",async s=>{const t=await a.getConfig(),{mcp:r,redirects:g}=t;if(s?.setAttribute("config",JSON.stringify(r||{})),s?.setAttribute("mcpMode",R()),s?.setAttribute("mcpGateway",String(Z())),r?.hide||r?.docs?.hide){ne(e,m);return}Q(g)&&await k.panicOnBuildContentError('The reserved route "/mcp" cannot be used in redirect configuration. Please remove any redirects involving "/mcp" from your redocly.yaml config.'),e.createTemplate(x,"@redocly/theme/layouts/McpNotAllowed");const l=!!t?.access?.requiresLogin,C=t?.access?.rbac||{},d=R(),c=Y(),{budgetPerExec:h}=se();if(!i){p.info("Configuring MCP servers...");const w=J(await e.loadApiDocuments(a)),O=W(await e.loadApiDocuments(a)),v=r?.docs?.ignore||[],L=K(A(w,v)),q=ie(r),E=new Map;for(const o of L){const H=o.definition.info?.title||"",j=o.definition.info?.version||"";E.set(o.relativePath,{name:H,description:typeof o.definition.info?.description=="string"?o.definition.info.description:"",version:j,servers:o.definition.servers||[],relativePath:o.relativePath,...q&&re(o.definition.info)?{fetchEligible:!0}:{}})}const y=X(A(O,v)),I=Object.values(t.products||{}).map(o=>o?.name).filter(B),G=t.l10n?.locales?.map(o=>o.code)??a.fs.localeFolders,N=oe({products:I,locales:G,requiresLogin:l,rbac:C,hasGraphqlApis:y.length>0,elicitationEnabled:c,hasCallableApis:E.values().some(o=>o.fetchEligible),feedbackHidden:t.feedback?.hide===!0});e.addMcpTools(D(b,"./docs-mcp/tools/index.js"),N),d==="code"&&e.addMcpTools(D(b,"./codemode/tools/execute.js"),[te]),i={apiDescriptionsMap:Object.fromEntries(E),graphqlDescriptions:y}}const n=await ae(e,a,m);s?.setAttribute("customToolsCount",String(n)),n!==u&&(u=n,n>0&&p.info(`Registered ${n} custom MCP tool${n===1?"":"s"} from @mcp folders`)),await le({actions:e,handlerPath:D(b,"./handlers/docs-mcp-handler.js"),apiDescriptionsMap:i.apiDescriptionsMap,graphqlDescriptions:i.graphqlDescriptions,mcpConfig:r,mcpMode:d,elicitationEnabled:c,gatewayFetchBudgetPerExec:h,publicEndpointStatus:S(t)}),f||(p.info("Registered Docs MCP Server endpoint at /mcp"),f=!0)})},async afterRoutesCreated(e,a){const s=await a.getConfig(),{mcp:t}=s,r=!t?.hide&&!t?.docs?.hide;e.markGatedMcpTools(await ee(e.getMcpTools())),e.setGlobalData({mcpData:{docs:{enabled:r,name:t?.docs?.name||_,publicEndpoint:S(s)==="served"}}})}}}var Oe=de;async function le({actions:i,handlerPath:m,apiDescriptionsMap:u,graphqlDescriptions:f,mcpConfig:e,mcpMode:a,elicitationEnabled:s,gatewayFetchBudgetPerExec:t,publicEndpointStatus:r}){i.createRequestHandler(T,m);const g=l=>async(C,d)=>{const c=z(d.getAllRoutes(),e?.docs?.ignore||[]);return c.length>0&&p.verbose(`mcp.docs.ignore: hiding ${c.length} page routes from MCP search`),{props:{config:{apiDescriptionsMap:u,graphqlDescriptions:f,mcpDocsServerName:e?.docs?.name||_,mcpMode:a,elicitationEnabled:s,gatewayFetchBudgetPerExec:t,searchIgnoredRoutes:c,...l?{isPublicEndpoint:l}:{}},serverOutDir:i.serverOutDir,tools:i.getMcpTools().map(({importPath:h,...n})=>n)}}};if(i.addApiRoute({slug:$,requestHandlerId:T,httpMethod:"all",getStaticData:g(!1)}),r==="no-protected-content"?p.info(`mcp.docs.publicEndpoint is enabled, but the project has no protected content - /mcp already serves anonymous users, skipping ${M}.`):r==="anonymous-denied"?p.info(`mcp.docs.publicEndpoint is enabled, but anonymous users are denied the MCP feature (rbac.features.mcp or requiresLogin) - skipping ${M}.`):r==="served"&&(i.addApiRoute({slug:M,requestHandlerId:T,httpMethod:"all",getStaticData:g(!0)}),p.verbose(`Registered public Docs MCP Server endpoint at ${M}`)),s){const l=D(b,"./handlers/mcp-credentials-handler.js");i.createRequestHandler(P,l),i.addApiRoute({slug:V,requestHandlerId:P,httpMethod:"all",getStaticData:async(C,d)=>{const{seo:c,colorMode:h}=d.getConfig(),{logo:n}=d.getGlobalData();return{props:{branding:ce({seo:c,logo:n,colorMode:h})}}}}),p.verbose("Registered MCP credentials endpoint at /mcp/credentials")}}export{Oe as default,de as mcpServerPlugin};
|
|
@@ -143,6 +143,7 @@ export type McpToolWorkerParams = Omit<McpToolExecutionParams, 'context'> & {
|
|
|
143
143
|
export type CustomMcpToolsState = {
|
|
144
144
|
registeredToolNames: string[];
|
|
145
145
|
warnedNoOutputSchemaTools: Set<string>;
|
|
146
|
+
warnedPlanIgnoredFiles: Set<string>;
|
|
146
147
|
};
|
|
147
148
|
export type ToolDefinitionValidationResult = {
|
|
148
149
|
ok: true;
|
package/dist/server/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import k from"@redocly/markdoc";import{writeFileSync as S}from"node:fs";import{readFile as D}from"node:fs/promises";import{join as g}from"node:path";import{parseAndResolveMarkdoc as F}from"./plugins/markdown/compiler.js";import{getPathnameForLocale as L}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as m}from"../constants/common.js";import{DEFAULT_TITLE as H,MARKDOC_PARTIALS_DATA_KEY as y,MARKDOC_PARTIALS_DEPS_KEY as G}from"./constants/common.js";import{GATED_MARKDOC_TAGS as v}from"./constants/entitlements.js";import{isObject as _}from"../utils/guards/is-object.js";import{mapObject as N}from"../utils/object/map-object.js";import{getValueDeep as w}from"../utils/object/get-value-deep.js";import{removeTrailingSlash as B}from"../utils/url/remove-trailing-slash.js";import{normalizeRouteSlug as d}from"../utils/path/normalize-route-slug.js";import{isLocalLink as E}from"../utils/path/is-local-link.js";import{reporter as P}from"./tools/notifiers/reporter.js";import{logger as u}from"./tools/notifiers/logger.js";import{sha1 as I}from"./utils/crypto/sha1.js";import{envConfig as j,setEnv as V}from"./config/env-config.js";import{KvService as q}from"./persistence/kv/services/kv-service.js";import{SandboxContext as J}from"./utils/sandbox-context.js";import{isAllowedEnv as U}from"./utils/envs/get-api-route-allowed-env-variables.js";import{ensureDir as x,writeSharedData as K}from"./utils/index.js";import{renderComponents as W}from"./ssr/render.js";import{readStaticData as $,writeStaticData as z}from"./utils/static-data.js";import{getMarkdocOptions as Y}from"./plugins/markdown/markdoc/markdoc-options.js";import{EntitlementsProvider as C}from"./entitlements/entitlements-provider.js";import{isRouteReserved as Z}from"./plugins/get-reserved-routes.js";import{isL10nPath as Q}from"./fs/utils/is-l10n-path.js";import{resolveGlobMapValue as X}from"./utils/globs.js";import{createDefaultStoreConfig as ee,resolveConfigEntries as te,resolveStoreConfig as se}from"./store-config.js";import{findRedirect as re}from"./utils/redirects/find-redirect.js";import{followRedirectChain as ae}from"./utils/redirects/follow-redirect-chain.js";import{addWildcardRedirectToTree as oe}from"./utils/redirects/add-wildcard-redirect-to-tree.js";import{telemetryTraceStep as ie}from"../cli/telemetry/helpers/trace-step.js";const A={routesBySlug:"map",staticFilePaths:"object",apiRoutes:"object",middleware:"object",routesByFsPath:"map",routesSharedData:"map",globalData:"object",ssr:"object",searchFacets:"map",routesPartials:"map",mcpToolHandlers:"map",skills:"map",devLogin:"object"},b="store.json",O="store-config.json",T="PLAN_GATES",ne=["OAUTH_CLIENT_ID","OAUTH_CLIENT_SECRET","ORGANIZATION_SLUG","ORGANIZATION_ID","ORG_ID"],Ue="userDefinedApiFunctions";class R{routesBySlug=new Map;routeAliases=new Map;staticFilePaths={};replacedEnvVars={};unsetEnvVars=new Set;lifecycleContext;newRoutes=[];#t={};routesByFsPath=new Map;apiRoutes=[];middleware=[];routesSharedData=new Map;sharedDataDeps=new Map;sharedDataMarkdocComponents=new Map;routesDynamicComponents=new Map;routesPartials=new Map;ssr={preBodyTags:[],postBodyTags:[],headTags:[]};searchFacets=new Map;searchEngine;templates=new Map;browserPlugins=new Set;apiRoutesRequestHandlers=new Map;mcpToolHandlers=new Map;skills=new Map;serverPropsGetters=new Map;pagePropsGetters=new Map;listeners=new Map;globalData={};devLogin=!1;#o=void 0;config=ee();configFile;#i;serverMode;serverOutDir;outdir;buildRevision=0;hasSitemap=!1;compilationErrors=[];#n;userCodeReady;#s=Promise.resolve();#l;#c=Promise.resolve();#d;#h=Promise.resolve();#u;#e=!1;#r=0;#f=0;#a=new Map;constructor({outdir:e,contentDir:t,serverMode:s=!1,serverOutDir:r}){this.#i=t,this.outdir=e,this.serverMode=s,this.serverOutDir=r,J.register({serverOutDir:r,readRoots:[e,process.cwd()]}),this.userCodeReady=new Promise(a=>{this.#n=a})}on(e,t){const s=this.listeners.get(e);s?s.add(t):this.listeners.set(e,new Set([t]))}queueEvent=(e,t,...s)=>{this.#a.set(e+String(t),[e,t,...s])};runListeners=(e,t,...s)=>{for(const r of this.listeners.get(e)||new Set)t?r(t,...s):r(...s)};startPluginsRun(){this.clear(),this.#s=new Promise(e=>{this.#l=e})}waitForPluginsLifecycle(){return Promise.all([this.#s,this.#c,this.#h])}waitForPluginsRun(){return this.#s}finishPluginsRun(){this.#l?.();for(const e of this.#a.values())this.runListeners(...e);this.#a.clear()}startEsbuildRun(){this.#c=new Promise(e=>{this.#d=e})}finishEsbuildRun(){this.#d?.()}markRequestHandlersEntryOutdated(){this.#r++,!this.#e&&(this.#e=!0,this.#h=new Promise(e=>{this.#u=e}))}noteRequestHandlersEntryBuildStart(){this.#f=this.#r}markRequestHandlersEntryUpdated(){this.#e&&(this.#r>this.#f||(this.#e=!1,this.#u?.()))}get contentDir(){if(this.serverMode)throw new Error("contentDir should not be used in server mode");return this.#i}markUserCodeReady(){this.#n?.(!0)}async reloadMarkdocOptions(){await ie("com.redocly.build.reloadMarkdocOptions",async()=>{const e=C.instance(),t=await Y(this.serverOutDir),s=Object.fromEntries(Object.entries(t.tags).filter(([r])=>v[r]!=null?e.canAccessFeature(v[r]):!0));this.#o={...t,tags:s}})}get markdocOptions(){return{...this.#o,partials:this.getGlobalConfig(y),themeConfig:this.config.markdown}}setGlobalData=e=>{const t=this.globalData,s={...this.globalData,...e};this.globalData=s,JSON.stringify(s)!==JSON.stringify(t)&&this.queueEvent("global-data-updated",void 0,s)};getGlobalData=()=>this.globalData;getKv=async()=>q.getInstance({baseDbDir:this.serverOutDir});parseMarkdoc=async({input:e,context:t,deps:s,resource:r})=>{const{data:{info:a,ast:o},compoundHash:l}=await F(e,this.markdocOptions,{actions:this,context:t},r);for(const i of a.sharedDataDeps||[]){for(const n of s?.routeSlugs||[])this.addRouteSharedData(n,i,i);for(const n of s?.sharedDataIds||[]){const c=this.sharedDataDeps.get(n)||new Set;c.add(i),this.sharedDataDeps.set(n,c)}}for(const i of a.dynamicMarkdocComponents||[]){for(const n of s?.routeSlugs||[]){const c=this.routesDynamicComponents.get(n)||new Set;c.add(i),this.routesDynamicComponents.set(n,c)}for(const n of s?.sharedDataIds||[]){const c=this.sharedDataMarkdocComponents.get(n)||new Set;c.add(i),this.sharedDataMarkdocComponents.set(n,c)}}if(s?.routeSlugs&&a.partials?.length)for(const i of s.routeSlugs){const n=this.routesPartials.get(i)||[];for(const c of a.partials)n.includes(c)||n.push(c);this.routesPartials.set(i,n)}return{info:a,ast:o,compoundHash:l}};async loadApiDocuments(e){return(await e.cache.load(".","api-docs")).data}setSearchEngine(e){this.searchEngine=e}setSearchFacets=e=>{this.searchFacets=e};setStaticFilePaths=e=>{this.staticFilePaths=e};setGlobalConfig=e=>{const t=Object.keys(e);for(const o of t)for(const l in this.replacedEnvVars)if(l===o||l.startsWith(`${o}:`)){const i=l.split(":"),{error:n,value:c}=w(e,i);(n||c!==this.replacedEnvVars[l].replaced)&&delete this.replacedEnvVars[l]}const{config:s,unsetEnvVars:r,replacedValues:a}=te(e);for(const o of r)this.unsetEnvVars.add(o);Object.assign(this.replacedEnvVars,a),Object.assign(this.config,s)};getConfig=()=>this.config;getGlobalConfig=e=>this.config[e];getSearchFacets=()=>this.searchFacets;addRedirect=(e,t,s={})=>{if(!C.instance().canAccessFeature("redirects")&&e!=="/")return;this.config.redirects||(this.config.redirects={});const o=d(e).toLowerCase();this.config.redirects[o]=t;const{trackOriginalSource:l=!0}=s,i=this.getGlobalConfig("originalRedirectSources");l&&Array.isArray(i)&&!i.includes(o)&&i.push(o),o.endsWith("*")&&oe(this.config.wildcardRedirectsTree,o)};getRedirect=e=>{const t=d(e).toLowerCase(),s=re(t,this.config.redirects,this.config.wildcardRedirectsTree,this.staticFilePaths);if(!s)return null;if(E(s.to)){const r=d(s.to).toLowerCase();if(!r.endsWith("*")&&ae(r,[t],this.config.redirects,this.config.wildcardRedirectsTree).type==="cycle")return null}return{to:s.to,type:s.type}};createSharedData=async(e,t,s)=>{if(s&&this.#t[e]===s)return e;const r=JSON.stringify(t),a=s??I(r);return this.#t[e]===a||(this.#t[e]=a,await K(e,r,this.outdir),this.queueEvent("shared-data-updated",e)),e};addRouteSharedData=(e,t,s)=>{const r=B(e),a=this.routesSharedData.get(r)||{};a[t]=s,this.routesSharedData.set(r,a),u.verbose(`Adding shared data to ${e}, ${t}, ${s}`)};getRouteSharedDataByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.routesSharedData.get(t)||{}:{}};getPartialsForRoute=e=>{const t=this.getGlobalConfig(y)||{},s=this.routesPartials.get(e);if(!s||s.length===0)return{};const r=this.getGlobalConfig(G)||{},a=new Set(s),o=Array.from(s);for(let i=0;i<o.length;i++){const n=o[i],c=r[n]?.partials??[];for(const h of c)a.has(h)||(a.add(h),o.push(h))}const l={};for(const i of a)t[i]&&(l[i]=t[i]);return l};addRoute=e=>{const s={...X(e.fsPath,this.config.metadataGlobs),...e.metadata||{}};this.newRoutes.push({...e,metadata:s}),u.verbose("Created route %s",e.slug)};addRouteSharedDataToAllLocales=(e,t,s)=>{const r=[m,...this.lifecycleContext?.fs.localeFolders||[]].map(a=>({code:a,name:a}));for(const a of r){const o=L(e,m,a.code,r);this.addRouteSharedData(o,t,s)}};addApiRoute=e=>{this.apiRoutes.push(e),u.verbose("Created API route %s",e.slug)};addMcpTools=(e,t)=>{for(const s of t){const r=this.mcpToolHandlers.get(s.name);r&&r.importPath!==e&&u.warn('MCP tool "%s" from %s overwrites the tool registered from %s',s.name,e,r.importPath);const a=s.hasAvailabilityGate??(r?.importPath===e?r.hasAvailabilityGate:void 0);this.mcpToolHandlers.set(s.name,{...s,importPath:e,hasAvailabilityGate:a}),u.verbose("Created MCP tool %s",s.name)}};getMcpTools=()=>Array.from(this.mcpToolHandlers.values());markGatedMcpTools=e=>{for(const t of e){const s=this.mcpToolHandlers.get(t);s&&this.mcpToolHandlers.set(t,{...s,hasAvailabilityGate:!0})}};addSkills=e=>{for(const t of e)this.skills.set(t.slug,t),u.verbose("Discovered skill %s",t.slug)};getSkills=()=>Array.from(this.skills.values());removeMcpTools=e=>{for(const t of e)this.mcpToolHandlers.delete(t)};addMiddleware=e=>{this.middleware.push(e),u.verbose("Created middleware %s",e.id)};setResourceResponseHeaders=(e,t)=>{this.config.responseHeaders||(this.config.responseHeaders={});const s=new Set(t.map(o=>o.name.toLowerCase())),a=[...(this.config.responseHeaders[e]??[]).filter(o=>!s.has(o.name.toLowerCase())),...t];this.config.responseHeaders[e]=a};getRouteByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.getRouteBySlug(t):void 0};getRouteBySlug=(e,t={})=>{const{followRedirect:s=!0}=t,r=this.getRedirect(e);if(s&&r)return this.routesBySlug.get(d(r.to));const a=s?this.routeAliases.get(d(e).toLowerCase()):void 0;return this.routesBySlug.get(a??e)};addRouteAlias=(e,t)=>{this.routeAliases.set(d(e).toLowerCase(),d(t))};hasRouteOrRedirectBySlug=e=>{if(this.routesBySlug.has(e)||this.routeAliases.has(d(e).toLowerCase())||Z(e,this.getConfig()))return!0;const t=this.getRedirect(e);if(!t)return!1;if(!E(t.to))return!0;const s=d(t.to);return this.routesBySlug.has(s)};getRoutesByTemplateId=e=>this.newRoutes.filter(t=>t.templateId===e);getAllRoutesForLocale=(e=m)=>{const t=Array.from(this.routesBySlug.values()),s=e.toLowerCase();return t.filter(r=>e===m?!Q(r.fsPath):r.slug.startsWith(`/${s}`))};getAllRoutes=()=>Array.from(this.routesBySlug.values());getAllApiRoutes=()=>this.apiRoutes;getAllMiddleware=()=>this.middleware;getTemplate=e=>this.templates.get(e);getRequestHandler=e=>this.apiRoutesRequestHandlers.get(e);createTemplate=(e,t)=>(this.templates.set(e,t),e);addBrowserPlugin=e=>{this.browserPlugins.add(e)};createRequestHandler=(e,t)=>(this.apiRoutesRequestHandlers.set(e,t),e);clearRequestHandlersByPrefix=e=>{for(const t of this.apiRoutesRequestHandlers.keys())t.startsWith(e)&&this.apiRoutesRequestHandlers.delete(t)};registerServerPropsGetter=(e,t)=>(this.serverPropsGetters.set(e,t),e);registerPagePropsGetter=(e,t)=>{this.pagePropsGetters.set(e,t)};async writeRouteStaticData(e,t){const s=await this.resolveRouteStaticData(e,t,!1);s&&z(e.slug,s,this.outdir)}async resolveRouteStaticData(e,t,s){if(this.serverMode)return $(e.slug,this.outdir);const r={...this,contentDir:this.contentDir,parseMarkdoc:({input:c,context:h,resource:f})=>this.parseMarkdoc({input:c,context:h,deps:{routeSlugs:[e.slug]},resource:f})},a=await e.getStaticData?.(e,r)||{},o=new Set(this.routesDynamicComponents.get(e.slug)),l=this.routesSharedData.get(e.slug)||{};for(const c of Object.values(l)){const h=this.sharedDataMarkdocComponents.get(c);h&&h.forEach(p=>o.add(p));const f=this.sharedDataDeps.get(c);f&&f.forEach(p=>this.addRouteSharedData(e.slug,p,p))}const i=this.getGlobalConfig("seo"),n=a?.frontmatter||{};return{...a,frontmatter:{...n,seo:{...n?.seo,title:n?.seo?.title||await e.getNavText?.()}},props:{...a.props,dynamicMarkdocComponents:Array.from(o),metadata:{...a?.props?.metadata,...e.metadata},seo:{title:H,...i,...a.props?.seo,siteUrl:i?.siteUrl},compilationErrors:this.compilationErrors},lastModified:s||!e.fsPath?null:await this.lifecycleContext?.fs.getLastModified(e.fsPath)}}addSsrComponents(e,t){if(!e?.length)return;const s=typeof e[0]=="string"?e.join(""):W(e);s&&(t==="head"?this.ssr.headTags.push(s):t==="preBody"?this.ssr.preBodyTags.push(s):this.ssr.postBodyTags.push(s))}clear=()=>{this.routesByFsPath.clear(),this.templates.clear(),this.newRoutes=[],this.routesBySlug.clear(),this.routeAliases.clear(),this.apiRoutes=[],this.middleware=[],this.routesSharedData.clear(),this.sharedDataDeps.clear(),this.sharedDataMarkdocComponents.clear(),this.routesDynamicComponents.clear(),this.routesPartials.clear(),this.skills.clear(),this.config.redirects={},this.config.wildcardRedirectsTree={},this.config.directoryPermissions={},this.ssr={preBodyTags:[],postBodyTags:[],headTags:[]}};#p(){const e=[];for(const[s,r]of Object.entries(A))switch(r){case"map":{const a=Array.from(this[s].entries());e.push([s,a]);break}case"object":e.push([s,this[s]]);break;default:throw new Error("Invalid format")}const t=Object.fromEntries(e);return t[T]=j.PLAN_GATES,t}static#g(e,t){const s=new R(t);for(const[a,o]of Object.entries(A))switch(o){case"map":s[a]=new Map(e[a]);break;case"object":s[a]=e[a];break;default:throw new Error("Invalid format")}const r=e[T];return r&&V("PLAN_GATES",r),s}async writeServerFiles(){x(this.serverOutDir),S(g(this.serverOutDir,b),JSON.stringify(this.#p())),S(g(this.serverOutDir,O),JSON.stringify(await this.getConfigWithEnvPlaceholders()))}static async fromServerFiles(e){const t=g(e.serverOutDir,O),{config:s,env:r}=se(JSON.parse(await D(t,"utf8")));s[y]=le(s[y]);const a=JSON.parse(await D(g(e.serverOutDir,b),"utf8")),o=R.#g(a,e);o.config=s;const l=Object.fromEntries(Object.entries(r).filter(([i])=>U(i)));return o.configFile={path:t,env:l,config:{...s}},o}async getConfigWithEnvPlaceholders(){const e=JSON.parse(JSON.stringify(this.config));for(const t in this.replacedEnvVars){const{original:s}=this.replacedEnvVars[t],r=t.split(":"),a=r.pop(),{error:o,value:l}=w(e,r);if(o||!_(l)&&!Array.isArray(l)){await P.panicOnBuild(`Failed to replace env var with env name for ${t}`);continue}l[a]=s}return e}async reportUnsetEnvVars(){if(this.unsetEnvVars.size===0)return;const e=Array.from(this.unsetEnvVars).filter(s=>!ne.includes(s));if(e.length===0)return;const t=`Failed to resolve config. The following environment variables are not set: ${e.join(", ")}`;await P.panicOnBuildContentError(t)}}function le(M){return N(M,e=>k.Ast.fromJSON(JSON.stringify(e)))}export{R as Store,Ue as USER_DEFINED_API_FUNCTIONS_COUNTER_KEY};
|
|
1
|
+
import T from"@redocly/markdoc";import{writeFileSync as R}from"node:fs";import{readFile as S}from"node:fs/promises";import{join as g}from"node:path";import{parseAndResolveMarkdoc as M}from"./plugins/markdown/compiler.js";import{getPathnameForLocale as k}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as m}from"../constants/common.js";import{DEFAULT_TITLE as L,MARKDOC_PARTIALS_DATA_KEY as y,MARKDOC_PARTIALS_DEPS_KEY as F}from"./constants/common.js";import{isObject as H}from"../utils/guards/is-object.js";import{mapObject as N}from"../utils/object/map-object.js";import{getValueDeep as w}from"../utils/object/get-value-deep.js";import{removeTrailingSlash as G}from"../utils/url/remove-trailing-slash.js";import{normalizeRouteSlug as d}from"../utils/path/normalize-route-slug.js";import{isLocalLink as v}from"../utils/path/is-local-link.js";import{reporter as E}from"./tools/notifiers/reporter.js";import{logger as u}from"./tools/notifiers/logger.js";import{sha1 as _}from"./utils/crypto/sha1.js";import{envConfig as B,setEnv as I}from"./config/env-config.js";import{KvService as j}from"./persistence/kv/services/kv-service.js";import{SandboxContext as V}from"./utils/sandbox-context.js";import{isAllowedEnv as q}from"./utils/envs/get-api-route-allowed-env-variables.js";import{ensureDir as J,writeSharedData as U}from"./utils/index.js";import{renderComponents as x}from"./ssr/render.js";import{readStaticData as K,writeStaticData as W}from"./utils/static-data.js";import{getMarkdocOptions as $}from"./plugins/markdown/markdoc/markdoc-options.js";import{EntitlementsProvider as z}from"./entitlements/entitlements-provider.js";import{getPlanDeniedMarkdocTags as Y}from"./entitlements/plan-denied-markdoc-tags.js";import{isRouteReserved as Z}from"./plugins/get-reserved-routes.js";import{isL10nPath as Q}from"./fs/utils/is-l10n-path.js";import{resolveGlobMapValue as X}from"./utils/globs.js";import{createDefaultStoreConfig as ee,resolveConfigEntries as te,resolveStoreConfig as se}from"./store-config.js";import{findRedirect as re}from"./utils/redirects/find-redirect.js";import{followRedirectChain as ae}from"./utils/redirects/follow-redirect-chain.js";import{addWildcardRedirectToTree as oe}from"./utils/redirects/add-wildcard-redirect-to-tree.js";import{telemetryTraceStep as ie}from"../cli/telemetry/helpers/trace-step.js";const P={routesBySlug:"map",staticFilePaths:"object",apiRoutes:"object",middleware:"object",routesByFsPath:"map",routesSharedData:"map",globalData:"object",ssr:"object",searchFacets:"map",routesPartials:"map",mcpToolHandlers:"map",skills:"map",devLogin:"object"},C="store.json",A="store-config.json",b="PLAN_GATES",ne=["OAUTH_CLIENT_ID","OAUTH_CLIENT_SECRET","ORGANIZATION_SLUG","ORGANIZATION_ID","ORG_ID"],Ue="userDefinedApiFunctions";class D{routesBySlug=new Map;routeAliases=new Map;staticFilePaths={};replacedEnvVars={};unsetEnvVars=new Set;lifecycleContext;newRoutes=[];#t={};routesByFsPath=new Map;apiRoutes=[];middleware=[];routesSharedData=new Map;sharedDataDeps=new Map;sharedDataMarkdocComponents=new Map;routesDynamicComponents=new Map;routesPartials=new Map;ssr={preBodyTags:[],postBodyTags:[],headTags:[]};searchFacets=new Map;searchEngine;templates=new Map;browserPlugins=new Set;apiRoutesRequestHandlers=new Map;mcpToolHandlers=new Map;skills=new Map;serverPropsGetters=new Map;pagePropsGetters=new Map;listeners=new Map;globalData={};devLogin=!1;#o=void 0;#i={};config=ee();configFile;#n;serverMode;serverOutDir;outdir;buildRevision=0;hasSitemap=!1;compilationErrors=[];#l;userCodeReady;#s=Promise.resolve();#c;#d=Promise.resolve();#h;#u=Promise.resolve();#f;#e=!1;#r=0;#p=0;#a=new Map;constructor({outdir:e,contentDir:t,serverMode:s=!1,serverOutDir:r}){this.#n=t,this.outdir=e,this.serverMode=s,this.serverOutDir=r,V.register({serverOutDir:r,readRoots:[e,process.cwd()]}),this.userCodeReady=new Promise(a=>{this.#l=a})}on(e,t){const s=this.listeners.get(e);s?s.add(t):this.listeners.set(e,new Set([t]))}queueEvent=(e,t,...s)=>{this.#a.set(e+String(t),[e,t,...s])};runListeners=(e,t,...s)=>{for(const r of this.listeners.get(e)||new Set)t?r(t,...s):r(...s)};startPluginsRun(){this.clear(),this.#s=new Promise(e=>{this.#c=e})}waitForPluginsLifecycle(){return Promise.all([this.#s,this.#d,this.#u])}waitForPluginsRun(){return this.#s}finishPluginsRun(){this.#c?.();for(const e of this.#a.values())this.runListeners(...e);this.#a.clear()}startEsbuildRun(){this.#d=new Promise(e=>{this.#h=e})}finishEsbuildRun(){this.#h?.()}markRequestHandlersEntryOutdated(){this.#r++,!this.#e&&(this.#e=!0,this.#u=new Promise(e=>{this.#f=e}))}noteRequestHandlersEntryBuildStart(){this.#p=this.#r}markRequestHandlersEntryUpdated(){this.#e&&(this.#r>this.#p||(this.#e=!1,this.#f?.()))}get contentDir(){if(this.serverMode)throw new Error("contentDir should not be used in server mode");return this.#n}markUserCodeReady(){this.#l?.(!0)}async reloadMarkdocOptions(){await ie("com.redocly.build.reloadMarkdocOptions",async()=>{const{userTagNames:e,...t}=await $(this.serverOutDir),s=Y(e),r=Object.fromEntries(Object.entries(t.tags).filter(([a])=>!(a in s)));this.#o={...t,tags:r},this.#i=s})}get markdocOptions(){return{...this.#o,partials:this.getGlobalConfig(y),themeConfig:this.config.markdown,planDeniedTags:this.#i}}setGlobalData=e=>{const t=this.globalData,s={...this.globalData,...e};this.globalData=s,JSON.stringify(s)!==JSON.stringify(t)&&this.queueEvent("global-data-updated",void 0,s)};getGlobalData=()=>this.globalData;getKv=async()=>j.getInstance({baseDbDir:this.serverOutDir});parseMarkdoc=async({input:e,context:t,deps:s,resource:r})=>{const{data:{info:a,ast:o},compoundHash:l}=await M(e,this.markdocOptions,{actions:this,context:t},r);for(const i of a.sharedDataDeps||[]){for(const n of s?.routeSlugs||[])this.addRouteSharedData(n,i,i);for(const n of s?.sharedDataIds||[]){const c=this.sharedDataDeps.get(n)||new Set;c.add(i),this.sharedDataDeps.set(n,c)}}for(const i of a.dynamicMarkdocComponents||[]){for(const n of s?.routeSlugs||[]){const c=this.routesDynamicComponents.get(n)||new Set;c.add(i),this.routesDynamicComponents.set(n,c)}for(const n of s?.sharedDataIds||[]){const c=this.sharedDataMarkdocComponents.get(n)||new Set;c.add(i),this.sharedDataMarkdocComponents.set(n,c)}}if(s?.routeSlugs&&a.partials?.length)for(const i of s.routeSlugs){const n=this.routesPartials.get(i)||[];for(const c of a.partials)n.includes(c)||n.push(c);this.routesPartials.set(i,n)}return{info:a,ast:o,compoundHash:l}};async loadApiDocuments(e){return(await e.cache.load(".","api-docs")).data}setSearchEngine(e){this.searchEngine=e}setSearchFacets=e=>{this.searchFacets=e};setStaticFilePaths=e=>{this.staticFilePaths=e};setGlobalConfig=e=>{const t=Object.keys(e);for(const o of t)for(const l in this.replacedEnvVars)if(l===o||l.startsWith(`${o}:`)){const i=l.split(":"),{error:n,value:c}=w(e,i);(n||c!==this.replacedEnvVars[l].replaced)&&delete this.replacedEnvVars[l]}const{config:s,unsetEnvVars:r,replacedValues:a}=te(e);for(const o of r)this.unsetEnvVars.add(o);Object.assign(this.replacedEnvVars,a),Object.assign(this.config,s)};getConfig=()=>this.config;getGlobalConfig=e=>this.config[e];getSearchFacets=()=>this.searchFacets;addRedirect=(e,t,s={})=>{if(!z.instance().canAccessFeature("redirects")&&e!=="/")return;this.config.redirects||(this.config.redirects={});const o=d(e).toLowerCase();this.config.redirects[o]=t;const{trackOriginalSource:l=!0}=s,i=this.getGlobalConfig("originalRedirectSources");l&&Array.isArray(i)&&!i.includes(o)&&i.push(o),o.endsWith("*")&&oe(this.config.wildcardRedirectsTree,o)};getRedirect=e=>{const t=d(e).toLowerCase(),s=re(t,this.config.redirects,this.config.wildcardRedirectsTree,this.staticFilePaths);if(!s)return null;if(v(s.to)){const r=d(s.to).toLowerCase();if(!r.endsWith("*")&&ae(r,[t],this.config.redirects,this.config.wildcardRedirectsTree).type==="cycle")return null}return{to:s.to,type:s.type}};createSharedData=async(e,t,s)=>{if(s&&this.#t[e]===s)return e;const r=JSON.stringify(t),a=s??_(r);return this.#t[e]===a||(this.#t[e]=a,await U(e,r,this.outdir),this.queueEvent("shared-data-updated",e)),e};addRouteSharedData=(e,t,s)=>{const r=G(e),a=this.routesSharedData.get(r)||{};a[t]=s,this.routesSharedData.set(r,a),u.verbose(`Adding shared data to ${e}, ${t}, ${s}`)};getRouteSharedDataByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.routesSharedData.get(t)||{}:{}};getPartialsForRoute=e=>{const t=this.getGlobalConfig(y)||{},s=this.routesPartials.get(e);if(!s||s.length===0)return{};const r=this.getGlobalConfig(F)||{},a=new Set(s),o=Array.from(s);for(let i=0;i<o.length;i++){const n=o[i],c=r[n]?.partials??[];for(const h of c)a.has(h)||(a.add(h),o.push(h))}const l={};for(const i of a)t[i]&&(l[i]=t[i]);return l};addRoute=e=>{const s={...X(e.fsPath,this.config.metadataGlobs),...e.metadata||{}};this.newRoutes.push({...e,metadata:s}),u.verbose("Created route %s",e.slug)};addRouteSharedDataToAllLocales=(e,t,s)=>{const r=[m,...this.lifecycleContext?.fs.localeFolders||[]].map(a=>({code:a,name:a}));for(const a of r){const o=k(e,m,a.code,r);this.addRouteSharedData(o,t,s)}};addApiRoute=e=>{this.apiRoutes.push(e),u.verbose("Created API route %s",e.slug)};addMcpTools=(e,t)=>{for(const s of t){const r=this.mcpToolHandlers.get(s.name);r&&r.importPath!==e&&u.warn('MCP tool "%s" from %s overwrites the tool registered from %s',s.name,e,r.importPath);const a=s.hasAvailabilityGate??(r?.importPath===e?r.hasAvailabilityGate:void 0);this.mcpToolHandlers.set(s.name,{...s,importPath:e,hasAvailabilityGate:a}),u.verbose("Created MCP tool %s",s.name)}};getMcpTools=()=>Array.from(this.mcpToolHandlers.values());markGatedMcpTools=e=>{for(const t of e){const s=this.mcpToolHandlers.get(t);s&&this.mcpToolHandlers.set(t,{...s,hasAvailabilityGate:!0})}};addSkills=e=>{for(const t of e)this.skills.set(t.slug,t),u.verbose("Discovered skill %s",t.slug)};getSkills=()=>Array.from(this.skills.values());removeMcpTools=e=>{for(const t of e)this.mcpToolHandlers.delete(t)};addMiddleware=e=>{this.middleware.push(e),u.verbose("Created middleware %s",e.id)};setResourceResponseHeaders=(e,t)=>{this.config.responseHeaders||(this.config.responseHeaders={});const s=new Set(t.map(o=>o.name.toLowerCase())),a=[...(this.config.responseHeaders[e]??[]).filter(o=>!s.has(o.name.toLowerCase())),...t];this.config.responseHeaders[e]=a};getRouteByFsPath=e=>{const t=this.routesByFsPath.get(e);return t?this.getRouteBySlug(t):void 0};getRouteBySlug=(e,t={})=>{const{followRedirect:s=!0}=t,r=this.getRedirect(e);if(s&&r)return this.routesBySlug.get(d(r.to));const a=s?this.routeAliases.get(d(e).toLowerCase()):void 0;return this.routesBySlug.get(a??e)};addRouteAlias=(e,t)=>{this.routeAliases.set(d(e).toLowerCase(),d(t))};hasRouteOrRedirectBySlug=e=>{if(this.routesBySlug.has(e)||this.routeAliases.has(d(e).toLowerCase())||Z(e,this.getConfig()))return!0;const t=this.getRedirect(e);if(!t)return!1;if(!v(t.to))return!0;const s=d(t.to);return this.routesBySlug.has(s)};getRoutesByTemplateId=e=>this.newRoutes.filter(t=>t.templateId===e);getAllRoutesForLocale=(e=m)=>{const t=Array.from(this.routesBySlug.values()),s=e.toLowerCase();return t.filter(r=>e===m?!Q(r.fsPath):r.slug.startsWith(`/${s}`))};getAllRoutes=()=>Array.from(this.routesBySlug.values());getAllApiRoutes=()=>this.apiRoutes;getAllMiddleware=()=>this.middleware;getTemplate=e=>this.templates.get(e);getRequestHandler=e=>this.apiRoutesRequestHandlers.get(e);createTemplate=(e,t)=>(this.templates.set(e,t),e);addBrowserPlugin=e=>{this.browserPlugins.add(e)};createRequestHandler=(e,t)=>(this.apiRoutesRequestHandlers.set(e,t),e);clearRequestHandlersByPrefix=e=>{for(const t of this.apiRoutesRequestHandlers.keys())t.startsWith(e)&&this.apiRoutesRequestHandlers.delete(t)};registerServerPropsGetter=(e,t)=>(this.serverPropsGetters.set(e,t),e);registerPagePropsGetter=(e,t)=>{this.pagePropsGetters.set(e,t)};async writeRouteStaticData(e,t){const s=await this.resolveRouteStaticData(e,t,!1);s&&W(e.slug,s,this.outdir)}async resolveRouteStaticData(e,t,s){if(this.serverMode)return K(e.slug,this.outdir);const r={...this,contentDir:this.contentDir,parseMarkdoc:({input:c,context:h,resource:f})=>this.parseMarkdoc({input:c,context:h,deps:{routeSlugs:[e.slug]},resource:f})},a=await e.getStaticData?.(e,r)||{},o=new Set(this.routesDynamicComponents.get(e.slug)),l=this.routesSharedData.get(e.slug)||{};for(const c of Object.values(l)){const h=this.sharedDataMarkdocComponents.get(c);h&&h.forEach(p=>o.add(p));const f=this.sharedDataDeps.get(c);f&&f.forEach(p=>this.addRouteSharedData(e.slug,p,p))}const i=this.getGlobalConfig("seo"),n=a?.frontmatter||{};return{...a,frontmatter:{...n,seo:{...n?.seo,title:n?.seo?.title||await e.getNavText?.()}},props:{...a.props,dynamicMarkdocComponents:Array.from(o),metadata:{...a?.props?.metadata,...e.metadata},seo:{title:L,...i,...a.props?.seo,siteUrl:i?.siteUrl},compilationErrors:this.compilationErrors},lastModified:s||!e.fsPath?null:await this.lifecycleContext?.fs.getLastModified(e.fsPath)}}addSsrComponents(e,t){if(!e?.length)return;const s=typeof e[0]=="string"?e.join(""):x(e);s&&(t==="head"?this.ssr.headTags.push(s):t==="preBody"?this.ssr.preBodyTags.push(s):this.ssr.postBodyTags.push(s))}clear=()=>{this.routesByFsPath.clear(),this.templates.clear(),this.newRoutes=[],this.routesBySlug.clear(),this.routeAliases.clear(),this.apiRoutes=[],this.middleware=[],this.routesSharedData.clear(),this.sharedDataDeps.clear(),this.sharedDataMarkdocComponents.clear(),this.routesDynamicComponents.clear(),this.routesPartials.clear(),this.skills.clear(),this.config.redirects={},this.config.wildcardRedirectsTree={},this.config.directoryPermissions={},this.ssr={preBodyTags:[],postBodyTags:[],headTags:[]}};#g(){const e=[];for(const[s,r]of Object.entries(P))switch(r){case"map":{const a=Array.from(this[s].entries());e.push([s,a]);break}case"object":e.push([s,this[s]]);break;default:throw new Error("Invalid format")}const t=Object.fromEntries(e);return t[b]=B.PLAN_GATES,t}static#m(e,t){const s=new D(t);for(const[a,o]of Object.entries(P))switch(o){case"map":s[a]=new Map(e[a]);break;case"object":s[a]=e[a];break;default:throw new Error("Invalid format")}const r=e[b];return r&&I("PLAN_GATES",r),s}async writeServerFiles(){J(this.serverOutDir),R(g(this.serverOutDir,C),JSON.stringify(this.#g())),R(g(this.serverOutDir,A),JSON.stringify(await this.getConfigWithEnvPlaceholders()))}static async fromServerFiles(e){const t=g(e.serverOutDir,A),{config:s,env:r}=se(JSON.parse(await S(t,"utf8")));s[y]=le(s[y]);const a=JSON.parse(await S(g(e.serverOutDir,C),"utf8")),o=D.#m(a,e);o.config=s;const l=Object.fromEntries(Object.entries(r).filter(([i])=>q(i)));return o.configFile={path:t,env:l,config:{...s}},o}async getConfigWithEnvPlaceholders(){const e=JSON.parse(JSON.stringify(this.config));for(const t in this.replacedEnvVars){const{original:s}=this.replacedEnvVars[t],r=t.split(":"),a=r.pop(),{error:o,value:l}=w(e,r);if(o||!H(l)&&!Array.isArray(l)){await E.panicOnBuild(`Failed to replace env var with env name for ${t}`);continue}l[a]=s}return e}async reportUnsetEnvVars(){if(this.unsetEnvVars.size===0)return;const e=Array.from(this.unsetEnvVars).filter(s=>!ne.includes(s));if(e.length===0)return;const t=`Failed to resolve config. The following environment variables are not set: ${e.join(", ")}`;await E.panicOnBuildContentError(t)}}function le(O){return N(O,e=>T.Ast.fromJSON(JSON.stringify(e)))}export{D as Store,Ue as USER_DEFINED_API_FUNCTIONS_COUNTER_KEY};
|
|
@@ -31,6 +31,8 @@ export type ResolveItemsOptions = {
|
|
|
31
31
|
};
|
|
32
32
|
export type MarkdocOptions = Partial<Omit<MarkdocConfigProps, 'relativePath'>> & {
|
|
33
33
|
themeConfig?: RedoclyConfig['markdown'];
|
|
34
|
+
/** The tags the project's plan lacks, each with the message a page shows in place of the tag. */
|
|
35
|
+
planDeniedTags?: Record<string, string>;
|
|
34
36
|
};
|
|
35
37
|
export type GetStaticDataContext = {
|
|
36
38
|
getRouteByFsPath: (relativePath: string) => PageRouteDetails<PageStaticData, PageProps> | undefined;
|
|
@@ -46,6 +46,10 @@ export type PlanGates = {
|
|
|
46
46
|
[FEATURE.sdkGeneration]: boolean;
|
|
47
47
|
/** Absent at runtime from legacy tokens, which keep every npm package. */
|
|
48
48
|
[FEATURE.customPackages]: boolean;
|
|
49
|
+
/** Absent at runtime from tokens signed before the claim, which keep the project's Markdoc tags. */
|
|
50
|
+
[FEATURE.customMarkdocTags]: boolean;
|
|
51
|
+
/** Absent at runtime from tokens signed before the claim, which keep the tools in `@mcp` folders. */
|
|
52
|
+
[FEATURE.customMcpTools]: boolean;
|
|
49
53
|
/** The new-pricing tier of the order; `null` or absent for legacy orders. */
|
|
50
54
|
pricingTier?: PricingTier | null;
|
|
51
55
|
};
|