@redocly/redoc 0.133.0-next.0 → 0.133.0-next.2
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 +71 -2
- package/dist/cli/develop.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/api-routes/helpers/enhance-context.js +1 -1
- package/dist/server/constants/plugins/catalog-entities.d.ts +2 -0
- package/dist/server/constants/plugins/catalog-entities.js +1 -1
- package/dist/server/esbuild/esbuild.js +3 -3
- package/dist/server/esbuild/generate.d.ts +3 -0
- package/dist/server/esbuild/generate.js +8 -8
- package/dist/server/esbuild/plugins/api-request-handlers-resolver.js +1 -1
- package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
- package/dist/server/persistence/cache/mappers/create-cache-read-model.d.ts +1 -1
- package/dist/server/persistence/cache/repositories/{cache-local-repository.d.ts → cache-repository.d.ts} +3 -3
- package/dist/server/persistence/cache/repositories/cache-repository.js +1 -0
- package/dist/server/persistence/cache/services/cache-service.d.ts +2 -2
- package/dist/server/persistence/cache/services/cache-service.js +1 -1
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.d.ts +2 -2
- package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.js +1 -1
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-read-repository.d.ts → file-hashes-read-repository.d.ts} +3 -7
- package/dist/server/persistence/file-hashes/repositories/file-hashes-read-repository.js +1 -0
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-repository.d.ts → file-hashes-repository.d.ts} +4 -3
- package/dist/server/persistence/file-hashes/repositories/file-hashes-repository.js +1 -0
- package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-write-repository.d.ts → file-hashes-write-repository.d.ts} +2 -2
- package/dist/server/persistence/file-hashes/repositories/file-hashes-write-repository.js +1 -0
- package/dist/server/persistence/file-hashes/services/file-hashes-service.d.ts +3 -5
- package/dist/server/persistence/file-hashes/services/file-hashes-service.js +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-list-entry.d.ts +1 -1
- package/dist/server/persistence/kv/mappers/create-kv-value.d.ts +1 -1
- package/dist/server/persistence/kv/repositories/{kv-remote-repository.d.ts → kv-repository.d.ts} +3 -3
- package/dist/server/persistence/kv/repositories/kv-repository.js +2 -0
- package/dist/server/persistence/kv/services/kv-service.d.ts +2 -2
- package/dist/server/persistence/kv/services/kv-service.js +1 -1
- package/dist/server/plugins/api-functions/index.js +1 -1
- package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.d.ts +6 -0
- package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.js +12 -0
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +29 -66
- package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
- package/dist/server/plugins/catalog-entities/database/consts.d.ts +45 -0
- package/dist/server/plugins/catalog-entities/database/consts.js +1 -0
- package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.d.ts +1 -2
- package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.d.ts +1 -3
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-dto.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.d.ts +3 -3
- package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-bff-repository.d.ts → bffEntities/bff-entities-read-repository.d.ts} +4 -4
- package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.js +131 -0
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts +26 -0
- package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +8 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.js +82 -0
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +7 -7
- package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -1
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +27 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +27 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +12 -0
- package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-relations-repository.d.ts → relations/relations-read-repository.d.ts} +7 -4
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.d.ts +28 -0
- package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.js +1 -0
- package/dist/server/plugins/catalog-entities/database/repositories/types.d.ts +39 -0
- package/dist/server/plugins/catalog-entities/database/repositories/types.js +0 -0
- package/dist/server/plugins/catalog-entities/database/types.d.ts +26 -0
- package/dist/server/plugins/catalog-entities/database/types.js +0 -0
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +2 -2
- package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
- package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
- package/dist/server/plugins/catalog-entities/plugin.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +38 -36
- package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
- package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +1 -3
- package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +3 -1
- package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.d.ts +15 -0
- package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/hash-manager.d.ts +1 -0
- package/dist/server/plugins/catalog-entities/utils/hash-manager.js +1 -1
- package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.d.ts +18 -0
- package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.js +1 -0
- package/dist/server/plugins/dev-onboarding/api/adapters/apigee/adapter.js +3 -3
- package/dist/server/plugins/dev-onboarding/api/routes/index.js +1 -1
- package/dist/server/plugins/dev-onboarding/api/routes/meta.d.ts +4 -0
- package/dist/server/plugins/dev-onboarding/api/routes/meta.js +1 -0
- package/dist/server/plugins/dev-onboarding/api/types.d.ts +1 -0
- package/dist/server/plugins/dev-onboarding/template/App.js +5 -5
- package/dist/server/plugins/dev-onboarding/template/CreateAppDialog.js +3 -3
- package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.d.ts +5 -0
- package/dist/server/plugins/dev-onboarding/template/components/CallbackUrl.js +17 -0
- package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.d.ts +1 -0
- package/dist/server/plugins/dev-onboarding/template/components/DialogStyledComponents.js +6 -2
- package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.d.ts +8 -0
- package/dist/server/plugins/dev-onboarding/template/components/EditCallbackUrlDialog.js +1 -0
- package/dist/server/plugins/entitlements/index.js +1 -1
- package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.d.ts +0 -1
- package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tool-schemas.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.d.ts +6 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoint-info.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-endpoints.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-full-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.d.ts +4 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/get-security-schemes.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/helpers/load-api-description.js +1 -1
- package/dist/server/plugins/mcp/docs-mcp/tools/index.d.ts +23 -5
- package/dist/server/plugins/mcp/docs-mcp/tools/list-apis.d.ts +5 -1
- package/dist/server/plugins/mcp/docs-mcp/utils.d.ts +1 -1
- package/dist/server/plugins/mcp/docs-mcp/utils.js +1 -1
- package/dist/server/plugins/mcp/index.js +1 -1
- package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
- package/dist/server/plugins/mcp/types.d.ts +5 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +1 -0
- package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
- package/dist/server/plugins/openapi-docs/ast-utils.js +2 -2
- package/dist/server/plugins/scorecards/database/repositories/{local/scorecards-config-local-repository.d.ts → scorecards-config-repository.d.ts} +4 -4
- package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.js +1 -0
- package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -1
- package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +1 -1
- package/dist/server/providers/database/base-repository.js +2 -2
- package/dist/server/providers/database/client.d.ts +1 -1
- package/dist/server/providers/database/client.js +1 -1
- package/dist/server/providers/database/constants.d.ts +4 -9
- package/dist/server/providers/database/constants.js +1 -1
- package/dist/server/providers/database/copy-migrations.js +1 -1
- package/dist/server/providers/database/database-connection-factory.d.ts +2 -2
- package/dist/server/providers/database/database-connection-factory.js +1 -1
- package/dist/server/providers/database/database-connections-manager.d.ts +3 -8
- package/dist/server/providers/database/database-connections-manager.js +1 -1
- package/dist/server/providers/database/database-preconnect-service.js +1 -1
- package/dist/server/providers/database/databases/sqlite-db/drizzle.config.d.ts +12 -0
- package/dist/server/providers/database/databases/sqlite-db/drizzle.config.js +1 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.d.ts +19 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.js +1 -1
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.d.ts +19 -0
- package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.js +1 -1
- package/dist/server/providers/database/pagination/limit.d.ts +5 -0
- package/dist/server/providers/database/pagination/limit.js +1 -1
- package/dist/server/providers/database/transient-sqld-error.d.ts +14 -0
- package/dist/server/providers/database/transient-sqld-error.js +1 -0
- package/dist/server/providers/database/types.d.ts +6 -6
- package/dist/server/providers/database/utils/get-first-row.d.ts +19 -0
- package/dist/server/providers/database/utils/get-first-row.js +1 -0
- package/dist/server/store.d.ts +2 -0
- package/dist/server/store.js +1 -1
- package/dist/server/types/plugins/common.d.ts +2 -0
- package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
- package/dist/server/web-server/routes/catalog/catalog.js +1 -1
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +0 -147
- package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -1
- package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.js +1 -1
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +1 -2
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +1 -1
- package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +1 -1
- package/dist/server/workers/mcp-tool-worker-pool.d.ts +1 -0
- package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
- package/dist/server/workers/mcp-tool-worker.js +1 -1
- package/dist/server/workers/types.d.ts +5 -1
- package/package.json +16 -16
- package/dist/server/persistence/cache/repositories/cache-local-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-read-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/file-hashes-local-write-repository.js +0 -1
- package/dist/server/persistence/file-hashes/repositories/utils.d.ts +0 -10
- package/dist/server/persistence/file-hashes/repositories/utils.js +0 -1
- package/dist/server/persistence/kv/repositories/kv-remote-repository.js +0 -2
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +0 -123
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +0 -98
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +0 -145
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +0 -100
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +0 -43
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +0 -1
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +0 -20
- package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +0 -1
- package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +0 -1
- package/dist/server/providers/database/database-initialization-strategy.d.ts +0 -17
- package/dist/server/providers/database/database-initialization-strategy.js +0 -1
- package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.d.ts +0 -11
- package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.js +0 -1
- package/dist/server/providers/database/databases/main-sqlite/drizzle.config.d.ts +0 -10
- package/dist/server/providers/database/databases/main-sqlite/drizzle.config.js +0 -1
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.d.ts +0 -14
- package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +0 -1
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.js +0 -0
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.js +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.js +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.js +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.d.ts +0 -0
- /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{requireAuthMiddleware as
|
|
1
|
+
import{requireAuthMiddleware as e}from"../middlewares/auth.js";import{integrationsMiddleware as d}from"../middlewares/integrations.js";import{listApps as g,createApp as l,getApp as c,createCredential as n,updateCredential as k,deleteCredential as o,deleteApp as y,updateApp as m,getLogs as f,getLogDetails as A}from"./apps.js";import{getMeta as C}from"./meta.js";import{getApiAccessStatus as b,listApiProducts as r}from"./products.js";function w(p,a){const i=a.getConfig().developerOnboarding?.adapters||[],s=a.getConfig().access?.rbac||{},t=a.globalData.apiProducts||{};i&&(p.get("/api/api-keys/meta",e(),C(a)),p.get("/api/api-keys/apps",e(),d(i,t,s),g(a)),p.post("/api/api-keys/apps",e(),d(i,t,s),l(a)),p.get("/api/api-keys/apps/:id",e(),d(i,t,s),c(a)),p.put("/api/api-keys/apps/:id",e(),d(i,t,s),m(a)),p.delete("/api/api-keys/apps/:id",e(),d(i,t,s),y(a)),p.post("/api/api-keys/apps/:id/credentials",e(),d(i,t,s),n(a)),p.put("/api/api-keys/apps/:id/credentials/:credentialId",e(),d(i,t,s),k(a)),p.delete("/api/api-keys/apps/:id/credentials/:credentialId",e(),d(i,t,s),o(a)),p.get("/api/api-keys/apps/:id/logs/:logId",e(),d(i,t,s),A()),p.get("/api/api-keys/apps/:id/logs",e(),d(i,t,s),f()),p.get("/api/api-keys/api-products",e(),d(i,t,s),r(a)),p.get("/api/api-keys/api-products/:id/access",e(),d(i,t,s),b()))}export{w as installRoutes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function i(t){const n={adapters:(t.getConfig().developerOnboarding?.adapters||[]).map(e=>{const o=e.type==="APIGEE_X"||e.type==="APIGEE_EDGE";return{id:"organizationName"in e?e.organizationName:"",type:e.type,capabilities:{callbackUrls:o}}})};return async e=>e.json(n,200,{"Cache-Control":"no-store"})}export{i as getMeta};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import*as e from"react";import a from"styled-components";import{useQuery as f}from"@tanstack/react-query";import{useParams as b}from"react-router-dom";import{Box as h,Flex as v}from"@redocly/portal-legacy-ui";import{Admonition as y}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as E}from"../../../../client/app/hooks";import x from"../../../../client/app/CircularProgress";import{Container as A}from"./components/Container";import w from"./components/AppOverview";import T from"./components/ApiKeys";import C from"./components/ApiLogs";import
|
|
1
|
+
import*as e from"react";import a from"styled-components";import{useQuery as f}from"@tanstack/react-query";import{useParams as b}from"react-router-dom";import{Box as h,Flex as v}from"@redocly/portal-legacy-ui";import{Admonition as y}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as E}from"../../../../client/app/hooks";import x from"../../../../client/app/CircularProgress";import{Container as A}from"./components/Container";import w from"./components/AppOverview";import T from"./components/ApiKeys";import C from"./components/ApiLogs";import k from"./components/CreateApiKey";import{Description as I}from"./components/Description";import{CallbackUrl as _}from"./components/CallbackUrl";const B="app-tab-actions-portal",m="api_keys",P="logs";function L(D){const{id:s}=b(),{isLoading:p,error:l,data:t}=f({queryKey:["APP:"+s],queryFn:()=>fetch(`/api/api-keys/apps/${s}`).then(n=>n.json())}),{translate:c}=E(),d=n=>o.findIndex(r=>r.id===n),o=[{id:m,name:c("dev.main.tab.appKeys","API keys"),content:e.createElement(e.Fragment,null,e.createElement(T,{credentials:t?.credentials,attributes:t?.attributes}),e.createElement(I,{text:t?.description}),t?.callbackUrl!==void 0&&e.createElement(_,{text:t.callbackUrl})),show:!0},{id:P,name:c("dev.main.tab.logs","Logs"),content:e.createElement(C,null),show:!!t?.supportsLogs}].filter(n=>n.show),[i,g]=e.useState(0),u=t?.canCreateKey&&i===d(m);return e.createElement(h,{my:"2rem"},e.createElement(A,null,p?e.createElement(v,{justifyContent:"center",mt:"2em"},e.createElement(x,null)):l?e.createElement(y,{type:"danger"},l?.message??"Something went wrong"):t?e.createElement(e.Fragment,null,e.createElement(w,{app:t}),e.createElement(K,null,e.createElement(S,null,o.map(({name:n},r)=>e.createElement("span",{key:n,className:i===r?"active":"",onClick:()=>g(r)},n))),e.createElement("div",{id:B}),u&&e.createElement(k,{initialEnabledApis:(t.credentials||[]).flatMap(n=>n.apiProductIds||[])})),e.createElement(z,null,o[i].content)):null))}const W=a.i`
|
|
2
2
|
display: inline-block;
|
|
3
3
|
width: 12px;
|
|
4
4
|
height: 12px;
|
|
5
5
|
background-repeat: no-repeat;
|
|
6
6
|
background-size: 12px 12px;
|
|
7
7
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='black' viewBox='0 0 451.847 451.847' width='12px' height='12px' %3E%3Cpath d='M225.923 354.706c-8.098 0-16.195-3.092-22.369-9.263L9.27 151.157c-12.359-12.359-12.359-32.397 0-44.751 12.354-12.354 32.388-12.354 44.748 0l171.905 171.915 171.906-171.909c12.359-12.354 32.391-12.354 44.744 0 12.365 12.354 12.365 32.392 0 44.751L248.292 345.449c-6.177 6.172-14.274 9.257-22.369 9.257z' /%3E%3C/svg%3E");
|
|
8
|
-
`,
|
|
8
|
+
`,K=a.div`
|
|
9
9
|
display: flex;
|
|
10
10
|
justify-content: space-between;
|
|
11
11
|
align-items: end;
|
|
12
|
-
`,
|
|
12
|
+
`,S=a.div`
|
|
13
13
|
display: flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
height: 42px;
|
|
@@ -27,6 +27,6 @@ import*as e from"react";import a from"styled-components";import{useQuery as f}fr
|
|
|
27
27
|
> span.active {
|
|
28
28
|
border-bottom: 2px solid var(--border-color-primary);
|
|
29
29
|
}
|
|
30
|
-
`,
|
|
30
|
+
`,z=a.div`
|
|
31
31
|
margin-top: var(--spacing-base);
|
|
32
|
-
`;export{
|
|
32
|
+
`;export{W as ArrowIcon,B as TAB_ACTIONS_PORTAL_ID,L as default};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import*as e from"react";import{useQueryClient as z,useMutation as
|
|
1
|
+
import*as e from"react";import{useQueryClient as z,useMutation as B,useQuery as H}from"@tanstack/react-query";import v from"styled-components";import{Flex as V}from"@redocly/portal-legacy-ui";import{Button as $}from"@redocly/theme/components/Button/Button";import{Admonition as A}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{AppCustomAttributes as Q}from"@redocly/theme/components/ApiOnboarding/AppCustomAttributes";import{usePreloadHistory as G}from"../../../../client/app/usePreloadHistory";import{useTranslate as K}from"../../../../client/app/hooks";import W from"./components/ApisList";import{ButtonWithLoading as J}from"./components/ButtonWithLoading";import{Dialog as X}from"./components/Dialog";import{ButtonsContainer as Y}from"./components/RollAPIKey";import{MAX_DESCRIPTION_LENGTH as k,CharacterCounter as Z}from"./components/CharacterCounter";import{DialogHelperText as ee,DialogInputMultiline as S,DialogRow as c,DialogRowContent as p,DialogRowTitle as m,DialogTitleInput as te}from"./components/DialogStyledComponents";const Ce=e.forwardRef((le,w)=>{const{data:I}=H({queryKey:["DEV_ONBOARDING_META"],staleTime:1/0,queryFn:async()=>{const t=await fetch("/api/api-keys/meta");if(!t.ok)throw new Error(`Failed to load meta: ${t.status}`);return t.json()}}),d=(I?.adapters||[]).some(t=>t.capabilities.callbackUrls),[r,P]=e.useState(""),[n,D]=e.useState(""),[u,U]=e.useState(void 0),x=z(),[R,T]=e.useState({}),[N,O]=e.useState(!0),[g,h]=e.useState(""),[L,o]=e.useState(!1),E=G(),f=new URLSearchParams(E.location.search),[y,_]=e.useState([]),{translate:a}=K(),C=f.has("createApp");e.useEffect(()=>{C&&o(!0)},[C]);const F=e.useCallback((t,q)=>{T(t),O(q)},[]),l=B({mutationFn:()=>fetch("/api/api-keys/apps",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:r,name:r,description:n,callbackUrl:d?u:void 0,apiProductIds:y,attributes:R})}).then(t=>t.json()),onSuccess:t=>{t.error?h(t.error):(E.push("/apps/"+t.id),x.invalidateQueries({queryKey:["APPS"]}),s(),h(""))}}),b=()=>o(!0),s=()=>o(!1);e.useImperativeHandle(w,()=>({open:b}));const M=t=>{_(t||[])},j=async()=>{await l.mutateAsync()},i=/^[a-z][a-z0-9._\-$%#\s]*$/gi.test(r);return e.createElement(e.Fragment,null,e.createElement(X,{open:L,onOpen:b,onClose:s},e.createElement(ae,null,e.createElement(V,{justifyContent:"space-between",alignItems:"center",mb:"2em"},e.createElement(te,{error:!!r&&!i,value:r,onChange:t=>P(t.target.value),placeholder:a("dev.create.app.dialog.appName.placeholder","App name")}),!!r&&!i&&e.createElement(re,null,a("dev.create.app.dialog.appName.error","Name must start with a letter and can only contain: letters, numbers, spaces, ., _, -, $, %, #"))),e.createElement(c,null,e.createElement(m,{"data-translation-key":"dev.create.app.dialog.selectAPIs"},a("dev.create.app.dialog.selectAPIs","Select APIs")),e.createElement(p,null,e.createElement(W,{initialEnabledApis:f.getAll("apiId"),onChange:M}))),e.createElement(c,null,e.createElement(m,{"data-translation-key":"dev.create.app.dialog.description"},a("dev.create.app.dialog.description","Description")),e.createElement(p,null,e.createElement(S,{maxLength:k,value:n,onChange:t=>D(t.target.value),placeholder:a("dev.create.app.dialog.description.placeholder","Empty"),rows:6}))),e.createElement(Z,null,n.length,"/",k),d&&e.createElement(c,null,e.createElement(m,{"data-translation-key":"dev.create.app.dialog.callbackUrls"},a("dev.create.app.dialog.callbackUrls","Callback URLs")),e.createElement(p,null,e.createElement(S,{value:u,onChange:t=>U(t.target.value),placeholder:a("dev.create.app.dialog.callbackUrls.placeholder","https://example.com/callback"),rows:3}),e.createElement(ee,{"data-translation-key":"dev.create.app.dialog.callbackUrls.hint"},a("dev.create.app.dialog.callbackUrls.hint","Separate multiple URLs with a comma")))),e.createElement(Q,{onChange:F}),l.error?e.createElement(A,{type:"danger"},l.error.message):null,e.createElement(Y,null,e.createElement($,{onClick:s,size:"large",variant:"text"},a("dev.create.app.dialog.cancel","Cancel")),e.createElement(J,{variant:"primary",onClick:j,loading:l.isPending,disabled:!N||l.isPending||!i||y.length<1,"data-translation-key":"dev.create.app.dialog.create"},a("dev.create.app.dialog.create","Create application"))),g&&e.createElement(A,{type:"danger"},g))))}),ae=v.div`
|
|
2
2
|
width: 664px;
|
|
3
3
|
min-height: 428px;
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-direction: column;
|
|
6
|
-
`,
|
|
6
|
+
`,re=v.span`
|
|
7
7
|
padding-top: 5px;
|
|
8
8
|
color: var(--color-error-base);
|
|
9
9
|
font-size: 0.9em;
|
|
10
|
-
`;export{
|
|
10
|
+
`;export{Ce as CreateAppDialog};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import e,{useState as o}from"react";import a from"styled-components";import{EditIcon as i}from"@redocly/theme/icons/EditIcon/EditIcon";import{useTranslate as s}from"../../../../../client/app/hooks";import{EditCallbackUrlDialog as c}from"./EditCallbackUrlDialog";const u=({text:l})=>{const[r,t]=o(!1),{translate:n}=s();return e.createElement(e.Fragment,null,e.createElement(c,{open:r,onOpen:()=>t(!0),onClose:()=>t(!1),initialCallbackUrl:l}),e.createElement(m,null,e.createElement(p,{"data-translation-key":"dev.app.callbackUrls.title"},n("dev.app.callbackUrls.title","Callback URLs")),e.createElement(i,{onClick:()=>t(!0)})),e.createElement(g,null,l||"\u2014"))},m=a.div`
|
|
2
|
+
display: flex;
|
|
3
|
+
gap: var(--spacing-sm);
|
|
4
|
+
margin-bottom: var(--spacing-sm);
|
|
5
|
+
margin-top: var(--spacing-base);
|
|
6
|
+
|
|
7
|
+
svg {
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
}
|
|
10
|
+
`,p=a.div`
|
|
11
|
+
font-weight: var(--font-weight-bold);
|
|
12
|
+
`,g=a.div`
|
|
13
|
+
font-size: var(--font-size-base);
|
|
14
|
+
font-weight: var(--font-weight-regular);
|
|
15
|
+
max-width: 50%;
|
|
16
|
+
word-break: break-all;
|
|
17
|
+
`;export{u as CallbackUrl};
|
|
@@ -11,4 +11,5 @@ export declare const DialogTitleInput: import("styled-components").StyledCompone
|
|
|
11
11
|
error?: boolean;
|
|
12
12
|
}, never>;
|
|
13
13
|
export declare const DialogBodyWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
14
|
+
export declare const DialogHelperText: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
14
15
|
//# sourceMappingURL=DialogStyledComponents.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import o,{css as t}from"styled-components";const
|
|
1
|
+
import o,{css as t}from"styled-components";const l=o.div`
|
|
2
2
|
min-height: 44px;
|
|
3
3
|
margin: 11px 0;
|
|
4
4
|
display: flex;
|
|
@@ -52,4 +52,8 @@ import o,{css as t}from"styled-components";const a=o.div`
|
|
|
52
52
|
flex-direction: column;
|
|
53
53
|
min-width: 664px;
|
|
54
54
|
width: 100%;
|
|
55
|
-
|
|
55
|
+
`,x=o.div`
|
|
56
|
+
margin-top: var(--spacing-xs);
|
|
57
|
+
font-size: var(--font-size-sm);
|
|
58
|
+
color: var(--text-color-secondary);
|
|
59
|
+
`;export{d as DialogBodyWrapper,x as DialogHelperText,i as DialogInput,s as DialogInputMultiline,l as DialogRow,c as DialogRowContent,n as DialogRowTitle,p as DialogTitleInput};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"react";import{useMutation as b,useQueryClient as U}from"@tanstack/react-query";import{useParams as C}from"react-router-dom";import{Button as E}from"@redocly/theme/components/Button/Button";import{H2 as w}from"@redocly/theme/components/Typography/H2";import{Admonition as P}from"@redocly/theme/markdoc/components/Admonition/Admonition";import{useTranslate as D}from"../../../../../client/app/hooks";import{Dialog as R}from"./Dialog";import{ButtonWithLoading as S}from"./ButtonWithLoading";import{ButtonsContainer as A}from"./RollAPIKey";import{DialogHelperText as T,DialogInputMultiline as x,DialogRow as K,DialogRowContent as j}from"./DialogStyledComponents";const z=p=>{const{id:o}=C(),{initialCallbackUrl:u,open:g,onOpen:k,onClose:s}=p,l=u||"",{translate:a}=D(),[r,n]=e.useState(l);e.useEffect(()=>{n(l)},[l]);const c=async()=>{await f(),s()},y=t=>{t.key==="Enter"&&!i&&c()},d=()=>{s(),n(l)},h=U(),{mutateAsync:f,isPending:i,error:m}=b({mutationKey:["UPDATE_APP"+o],mutationFn:async()=>{const t=await fetch(`/api/api-keys/apps/${o}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({callbackUrl:r})});if(!t.ok){const v=await t.json().catch(()=>null);throw new Error(v?.error||`Request failed with status ${t.status}`)}return t.json()},onSettled:()=>{h.invalidateQueries({queryKey:["APP:"+o]}),n(r)}});return e.createElement(R,{open:g,onClose:d,onOpen:k},e.createElement(e.Fragment,null,e.createElement(w,{"data-translation-key":"dev.edit.callbackUrls.dialog.title"},a("dev.edit.callbackUrls.dialog.title","Change callback URLs")),e.createElement(K,null,e.createElement(j,null,e.createElement(x,{value:r,onChange:t=>n(t.target.value),onKeyPress:y,placeholder:a("dev.edit.callbackUrls.dialog.placeholder","https://example.com/callback"),rows:3}),e.createElement(T,{"data-translation-key":"dev.edit.callbackUrls.dialog.hint"},a("dev.edit.callbackUrls.dialog.hint","Separate multiple URLs with a comma")))),m&&e.createElement(P,{type:"danger"},m.message," "),e.createElement(A,null,e.createElement(E,{onClick:d,"data-translation-key":"dev.edit.callbackUrls.dialog.cancel",variant:"text",size:"large"},a("dev.edit.callbackUrls.dialog.cancel","Cancel")),e.createElement(S,{variant:"primary",loading:i,onClick:c,disabled:i,"data-translation-key":"dev.edit.callbackUrls.dialog.save"},a("dev.edit.callbackUrls.dialog.save","Save changes")))))};export{z as EditCallbackUrlDialog};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{writeFileSync as
|
|
1
|
+
import{writeFileSync as F}from"node:fs";import S from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as b}from"../../constants/common.js";import{envConfig as O}from"../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as C}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as R}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as $,isPathIgnored as M}from"../../utils/index.js";import{isGraphqlDoc as k}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as D}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as E}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as p}from"../../../config/product-gates.js";import{isAsyncapiDoc as _}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as I}from"../../../cli/telemetry/helpers/trace-step.js";import{getBilledCatalogBuildPagesCount as j}from"./utils/get-billed-catalog-build-pages-count.js";async function X(){return{id:"entitlements",async afterRoutesCreated(g,u){await I("build.plugin.entitlements",async t=>{const i=R.instance(),s=[],n=[],r=[],a=[],l=[];for(const{relativePath:e}of u.fs.scan())M(e)||(D(e)?s.push(e):k(e)?r.push(e):C(e)?a.push(e):await E(e,u)?n.push(e):await _(e,u)&&l.push(e));const c=i.canAccessFeature("markdown");t?.setAttribute("totalMarkdownFiles",s.length.toString()),t?.setAttribute("isMarkdownSupported",(!!c).toString()),s.length>0&&!c&&o.warn(`The product you are using ("${p}") does not support Markdown pages. The following Markdown files were detected but will be ignored: ${s.map(()=>"%rp").join(", ")}`,...s);const d=i.canAccessFeature("openapi");t?.setAttribute("totalOpenApiFiles",n.length.toString()),t?.setAttribute("isOpenApiSupported",(!!d).toString()),n.length>0&&!d&&o.warn(`The product you are using ("${p}") does not support OpenAPI documents. The following files are ignored: ${n.map(()=>"%rp").join(", ")}`,...n);const f=i.canAccessFeature("asyncapi");t?.setAttribute("totalAsyncApiFiles",l.length.toString()),t?.setAttribute("isAsyncApiSupported",(!!f).toString()),l.length>0&&!f&&o.warn(`The product you are using ("${p}") does not support AsyncAPI documents. The following files are ignored: ${l.map(()=>"%rp").join(", ")}`,...l);const m=i.canAccessFeature("graphql");t?.setAttribute("totalGraphqlFiles",r.length.toString()),t?.setAttribute("isGraphqlSupported",(!!m).toString()),r.length>0&&!m&&o.warn(`The product you are using ("${p}") does not support GraphQL documents. The following files are ignored: ${r.map(()=>"%rp").join(", ")}`,...r);const A=i.canAccessFeature("reactPages");t?.setAttribute("totalReactFiles",a.length.toString()),t?.setAttribute("isReactPagesSupported",(!!A).toString()),a.length>0&&!A&&o.warn(`The product you are using ("${p}") does not support React pages. The following files are ignored: ${a.map(()=>"%rp").join(", ")}`,...a);const P=(await u.getConfig()).entitiesCatalog,T=$(g.getAllRoutes()),{total:y}=await j(g.serverOutDir,P),h=T+y;t?.setAttribute("totalBilledPages",h.toString());const w=O.REDOCLY_METADATA_OUTPUT_FOLDER;w&&(o.info("Save total pages..."),F(S.join(w,b),JSON.stringify({totalPages:h},null)))})}}}export{X as entitlementsPlugin};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { RedoclyConfig } from '@redocly/config';
|
|
2
2
|
export declare function getBilledCatalogBuildPagesCount(serverOutDir: string, catalogConfig: RedoclyConfig['entitiesCatalog']): Promise<{
|
|
3
3
|
total: number;
|
|
4
|
-
duplicatedEntitiesPages: number;
|
|
5
4
|
}>;
|
|
6
5
|
//# sourceMappingURL=get-billed-catalog-build-pages-count.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{envConfig as
|
|
1
|
+
import{envConfig as r}from"../../../config/env-config.js";import{PRODUCT_NAME as s}from"../../../../config/product-gates.js";import{CatalogEntitiesService as c}from"../../catalog-entities/database/catalog-entities-service.js";async function d(t,a){const o=s.toLowerCase().includes("realm")||s.toLowerCase().includes("reef"),e=r.NEW_CATALOG_ENABLED??!1;if(!o||!e)return{total:0};const i=await c.getInstance({baseDbDir:t,databaseType:"local"}),{total:n}=await i.getEntitiesCount("file"),l=g(a);return{total:n+l}}function g(t){return t?.show?Object.entries(t.catalogs??{}).filter(([o,e])=>!e?.hide).length:0}export{d as getBilledCatalogBuildPagesCount};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{shouldHandleMcpAuth as n}from"../auth/auth-handlers.js";const i=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","TRACE"];function
|
|
1
|
+
import{shouldHandleMcpAuth as n}from"../auth/auth-handlers.js";const i=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD","TRACE"];function o(e){const t=[{name:"list-apis",description:"Lists available APIs with their context and purpose",schema:{type:"object",additionalProperties:!1,required:[],properties:{filter:{type:"string",description:"API name (or part of it)",minLength:1,nullable:!0},page:{type:"number",description:"Page number",minimum:1,default:1,nullable:!0},limit:{type:"number",description:"Number of APIs per page. Default is 300",minimum:1,default:300,nullable:!0}}}},{name:"get-endpoints",description:"Get all endpoints for a specific API",schema:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},version:{type:"string",description:"API version (required when multiple APIs share the same name but differ by version)",nullable:!0}}}},{name:"get-endpoint-info",description:"Get comprehensive information about specific endpoint including parameters, security, and examples",schema:{type:"object",required:["name","path","method"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},path:{type:"string",description:"Endpoint path (e.g. /api/v1/users)",minLength:1},method:{type:"string",description:"HTTP method (GET, POST, PUT, DELETE, etc.)",enum:[...i,...i.map(r=>r.toLowerCase())],minLength:1},version:{type:"string",description:"API version (required when multiple APIs share the same name but differ by version)",nullable:!0}}}},{name:"get-security-schemes",description:"Get the security schemes for a specific API",schema:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},version:{type:"string",description:"API version (required when multiple APIs share the same name but differ by version)",nullable:!0}}}},{name:"get-full-api-description",description:"Get the complete OpenAPI description",schema:{type:"object",required:["name"],additionalProperties:!1,properties:{name:{type:"string",description:"API name",minLength:1},version:{type:"string",description:"API version (required when multiple APIs share the same name but differ by version)",nullable:!0}}}},s(e.products)];return n(e.requiresLogin,e.rbac)&&t.push({name:"whoami",description:"Get information about the currently authenticated user",schema:{type:"object",required:[],additionalProperties:!1,properties:{}}}),t}function s(e){const t=e&&e.length>0;return{name:"search",description:"Search across the documentation to fetch relevant content for a given query",schema:{type:"object",required:["query"],additionalProperties:!1,properties:{query:{type:"string",description:"Search query. Should be a single word or that phrase that is presented in a documentation.",minLength:1},...t?{product:{type:"string",description:"Optional product name to filter search results by specific product.",enum:e,nullable:!0}}:{}}}}}export{o as getDefaultToolSchemas};
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { McpToolHandler } from '../../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
'get-endpoint-info': McpToolHandler
|
|
3
|
+
'get-endpoint-info': McpToolHandler<{
|
|
4
|
+
name: string;
|
|
5
|
+
path: string;
|
|
6
|
+
method: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
}>;
|
|
4
9
|
};
|
|
5
10
|
export default _default;
|
|
6
11
|
//# sourceMappingURL=get-endpoint-info.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveParameters as
|
|
1
|
+
import{resolveParameters as h,resolveRequestBody as v,resolveResponses as x}from"../utils.js";import{isMcpEndpoint as E}from"./utils.js";import{loadApiDescription as g}from"./helpers/load-api-description.js";import{checkEndpointAndDeleteXMcp as P}from"../../utils/xmcp-utils.js";const S=async(s,i)=>{const{name:p,path:o,method:n,version:a}=s;let t;try{t=await g(p,i,a)}catch(y){return{content:[{type:"text",text:y.message}],isError:!0}}const c=o.startsWith("/")?o:`/${o}`,{title:d=""}=t.info||{},r=t.paths?.[c],m=n.toLowerCase();if(!r)return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const e=r[m];if(!E(e)||!P(e,"docs"))return{content:[{type:"text",text:"Endpoint not found"}],isError:!0};const u=r?.parameters||[],l=e.parameters||[],f={...e,parameters:h({pathParams:u,opParams:l,definition:t}),requestBody:v(e.requestBody,t),responses:x(e.responses,t)};return{content:[{type:"text",text:JSON.stringify({api:d,version:t.info?.version||"",servers:t.servers||[],endpoint:{path:o,method:n.toUpperCase(),...f},globalSecurity:t.security||[],securitySchemes:t.components?.securitySchemes||[]},null,2)}]}};var M={"get-endpoint-info":S};export{M as default};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { McpToolHandler } from '../../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
'get-endpoints': McpToolHandler
|
|
3
|
+
'get-endpoints': McpToolHandler<{
|
|
4
|
+
name: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
}>;
|
|
4
7
|
};
|
|
5
8
|
export default _default;
|
|
6
9
|
//# sourceMappingURL=get-endpoints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadApiDescription as
|
|
1
|
+
import{loadApiDescription as p}from"./helpers/load-api-description.js";import{getEndpointsFromPaths as c}from"./utils.js";const a=async(n,r)=>{const{name:o,version:i}=n;let t;try{t=await p(o,r,i)}catch(s){return{content:[{type:"text",text:s.message}],isError:!0}}const e=c(t);return e.length===0?{content:[{type:"text",text:"No endpoints found"}]}:{content:[{type:"text",text:JSON.stringify({api:t.info?.title||"",version:t.info?.version||"",servers:t.servers||[],endpoints:e},null,2)}]}};var l={"get-endpoints":a};export{l as default};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { McpToolHandler } from '../../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
'get-full-api-description': McpToolHandler
|
|
3
|
+
'get-full-api-description': McpToolHandler<{
|
|
4
|
+
name: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
}>;
|
|
4
7
|
};
|
|
5
8
|
export default _default;
|
|
6
9
|
//# sourceMappingURL=get-full-api-description.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadApiDescription as
|
|
1
|
+
import{loadApiDescription as s}from"./helpers/load-api-description.js";const p=async(e,i)=>{const{name:n,version:r}=e;let t;try{t=await s(n,i,r)}catch(o){return{content:[{type:"text",text:o.message}],isError:!0}}return{content:[{type:"text",text:JSON.stringify({api:t.info?.title||"",version:t.info?.version||"",definition:t},null,2)}]}};var a={"get-full-api-description":p};export{a as default};
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { McpToolHandler } from '../../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
'get-security-schemes': McpToolHandler
|
|
3
|
+
'get-security-schemes': McpToolHandler<{
|
|
4
|
+
name: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
}>;
|
|
4
7
|
};
|
|
5
8
|
export default _default;
|
|
6
9
|
//# sourceMappingURL=get-security-schemes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadApiDescription as
|
|
1
|
+
import{loadApiDescription as c}from"./helpers/load-api-description.js";const o=async(t,r)=>{const{name:s,version:i}=t;let e;try{e=await c(s,r,i)}catch(n){return{content:[{type:"text",text:n.message}],isError:!0}}return{content:[{type:"text",text:JSON.stringify({name:e.info?.title,version:e.info?.version,securitySchemes:e.components?.securitySchemes||[],security:e.security||[]},null,2)}]}};var y={"get-security-schemes":o};export{y as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { OpenAPIDefinition } from '@redocly/openapi-docs';
|
|
2
2
|
import type { McpToolContext } from '../../../types.js';
|
|
3
|
-
export declare function loadApiDescription(name: string, context: McpToolContext): Promise<OpenAPIDefinition>;
|
|
3
|
+
export declare function loadApiDescription(name: string, context: McpToolContext, version?: string): Promise<OpenAPIDefinition>;
|
|
4
4
|
//# sourceMappingURL=load-api-description.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{findApiDescriptionByNameAndVersion as t}from"../../utils.js";import{getApiDescriptionFromFs as a}from"../utils.js";async function u(r,i,s){const o=t(i.apiDescriptionsMap,r,s);if(!o)throw new Error(`No API found matching "${r}".`);const e=!!i?.config?.access?.requiresLogin,c=i?.config?.access?.rbac||{},n=await a({relativePath:o.relativePath||"",outdir:i.outdir||"",user:i.user,rbac:c,requiresLogin:e});if(!n)throw new Error(`No API found matching "${r}".`);return n}export{u as loadApiDescription};
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
declare const _default: {
|
|
2
2
|
whoami: import("../../types.js").McpToolHandler;
|
|
3
3
|
search: import("../../types.js").McpToolHandler;
|
|
4
|
-
'get-full-api-description': import("../../types.js").McpToolHandler
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
'
|
|
4
|
+
'get-full-api-description': import("../../types.js").McpToolHandler<{
|
|
5
|
+
name: string;
|
|
6
|
+
version?: string;
|
|
7
|
+
}>;
|
|
8
|
+
'get-security-schemes': import("../../types.js").McpToolHandler<{
|
|
9
|
+
name: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
}>;
|
|
12
|
+
'get-endpoint-info': import("../../types.js").McpToolHandler<{
|
|
13
|
+
name: string;
|
|
14
|
+
path: string;
|
|
15
|
+
method: string;
|
|
16
|
+
version?: string;
|
|
17
|
+
}>;
|
|
18
|
+
'get-endpoints': import("../../types.js").McpToolHandler<{
|
|
19
|
+
name: string;
|
|
20
|
+
version?: string;
|
|
21
|
+
}>;
|
|
22
|
+
'list-apis': import("../../types.js").McpToolHandler<{
|
|
23
|
+
filter?: string;
|
|
24
|
+
page?: number;
|
|
25
|
+
limit?: number;
|
|
26
|
+
}>;
|
|
9
27
|
};
|
|
10
28
|
export default _default;
|
|
11
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { McpToolHandler } from '../../types.js';
|
|
2
2
|
declare const _default: {
|
|
3
|
-
'list-apis': McpToolHandler
|
|
3
|
+
'list-apis': McpToolHandler<{
|
|
4
|
+
filter?: string;
|
|
5
|
+
page?: number;
|
|
6
|
+
limit?: number;
|
|
7
|
+
}>;
|
|
4
8
|
};
|
|
5
9
|
export default _default;
|
|
6
10
|
//# sourceMappingURL=list-apis.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OpenAPISchema, OpenAPIParameter, OpenAPIResponse, OpenAPIRequestBody, Referenced, OpenAPIDefinition } from '@redocly/openapi-docs/lib/types/open-api.js';
|
|
2
2
|
import type { ApiDescriptionInfo } from '../types.js';
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function findApiDescriptionByNameAndVersion(apiDescriptionsMap: Record<string, ApiDescriptionInfo>, name: string, version?: string): ApiDescriptionInfo | undefined;
|
|
4
4
|
export declare function filterApiDescriptionsByName(apiDescriptionsMap: ApiDescriptionInfo[], filter: string): ApiDescriptionInfo[];
|
|
5
5
|
export declare function resolveRef<T>(ref: string, def?: OpenAPIDefinition): T | undefined;
|
|
6
6
|
type ResolveSchemaRefsParams = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function $(e,o,s){if(!o)return;const n=o.toLowerCase();if(s)return e[`${n}@${s}`];const t=Object.values(e).filter(({name:r})=>r.toLowerCase()===n);if(t.length){if(t.length>1){const r=t.map(({version:c})=>c||"(no version)").join(", ");throw new Error(`Multiple versions of "${o}" found: ${r}. Specify a version to disambiguate.`)}return t[0]}}function v(e,o){return Object.values(e).filter(({name:s})=>s.toLowerCase().includes(o.toLowerCase()))}function d(e,o){if(!o||!e?.startsWith("#/"))return;const s=e.slice(2).split("/");let n=o;for(const t of s)if(typeof n=="object"&&n!==null&&t in n)n=n[t];else return;return n}function l({schema:e,definition:o,visitedRefs:s=new Set,maxDepth:n=50,currentDepth:t=0}){if(!e)return;if(t>=n)return{type:"object",description:`Maximum resolution depth exceeded (${n})`};if("$ref"in e&&e.$ref){if(s.has(e.$ref))return{type:"object",description:`Circular reference detected: ${e.$ref}`,"x-circular-ref":e.$ref};const f=new Set(s);f.add(e.$ref);const u=d(e.$ref,o);return u?l({schema:u,definition:o,visitedRefs:f,maxDepth:n,currentDepth:t+1}):{type:"object",description:`Could not resolve reference: ${e.$ref}`,"x-unresolved-ref":e.$ref}}const r={...e};if(r.properties){const f={};for(const[u,i]of Object.entries(r.properties)){const p=l({schema:i,definition:o,visitedRefs:new Set(s),maxDepth:n,currentDepth:t+1});f[u]=p||i}r.properties=f}if(r.items&&typeof r.items=="object")if(Array.isArray(r.items))r.items=r.items.map(f=>l({schema:f,definition:o,visitedRefs:new Set(s),maxDepth:n,currentDepth:t+1})||f);else{const f=l({schema:r.items,definition:o,visitedRefs:new Set(s),maxDepth:n,currentDepth:t+1});f&&(r.items=f)}return["allOf","anyOf","oneOf"].forEach(f=>{const u=r[f];Array.isArray(u)&&(r[f]=u.reduce((i,p)=>{const m=l({schema:p,definition:o,visitedRefs:new Set(s),maxDepth:n,currentDepth:t+1});return m&&i.push(m),i},[]))}),r}function h({pathParams:e,opParams:o,definition:s}){return[...e,...o].reduce((n,t)=>{if(!t)return n;if("$ref"in t&&t.$ref){const r=d(t.$ref,s);return r&&n.push({...r,schema:"schema"in r&&r.schema?l({schema:r.schema,definition:s}):void 0}),n}return n.push({...t,schema:"schema"in t&&t.schema?l({schema:t.schema,definition:s}):void 0}),n},[])}function a(e,o){const s={...e};if(e.example!==void 0&&(s.example=e.example),!e.examples)return s;const n={};for(const[t,r]of Object.entries(e.examples))if("$ref"in r){const c=d(r.$ref,o);c&&(n[t]=c)}else n[t]=r;return s.examples=n,s}function w(e,o){if(!e)return;const s="$ref"in e&&e.$ref?d(e.$ref,o):e;if(!s)return;const n={...s};if("content"in s&&s.content){const t={};for(const[r,c]of Object.entries(s.content))t[r]={...a(c,o),schema:c.schema?l({schema:c.schema,definition:o}):void 0};n.content=t}return n}function x(e,o){return Object.entries(e).reduce((s,[n,t])=>{const r="$ref"in t&&t.$ref?d(t.$ref,o):t;if(!r)return s;const c={...r};if("content"in r&&r.content){const f={};for(const[u,i]of Object.entries(r.content))f[u]={...a(i,o),schema:i.schema?l({schema:i.schema,definition:o}):void 0};c.content=f}return s[n]=c,s},{})}export{v as filterApiDescriptionsByName,$ as findApiDescriptionByNameAndVersion,h as resolveParameters,d as resolveRef,w as resolveRequestBody,x as resolveResponses,l as resolveSchemaRefs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{fileURLToPath as
|
|
1
|
+
import{fileURLToPath as y}from"node:url";import{dirname as S,join as m}from"node:path";import{logger as f}from"../../tools/notifiers/logger.js";import{reporter as b}from"../../tools/notifiers/reporter.js";import{isDefined as R}from"../../../utils/guards/is-defined.js";import{filterIgnoredApiDescriptions as w,getCleanedUpApiDescriptions as O,isMcpInRedirects as A}from"./utils.js";import{getDefaultToolSchemas as T}from"./docs-mcp/tool-schemas.js";import{telemetryTraceStep as j}from"../../../cli/telemetry/helpers/trace-step.js";const l="mcp-docs-server-handler",u=S(y(import.meta.url));async function E(){let e=!1;return{id:"mcp",async processContent(r,o){e||await j("build.plugin.mcp",async c=>{const t=await r.loadOpenApiDefinitions(o),n=await o.getConfig(),{mcp:s,redirects:g}=n;if(c?.setAttribute("config",JSON.stringify(s||{})),!(s?.hide||s?.docs?.hide)&&(A(g)&&await b.panicOnBuildContentError('The reserved route "/mcp" cannot be used in redirect configuration. Please remove any redirects involving "/mcp" from your redocly.yaml config.'),!s?.docs?.hide)){f.info("Configuring MCP servers...");const D=m(u,"./handlers/docs-mcp-handler.js"),h=O(w(t,s?.docs?.ignore||[])),a=new Map;for(const i of h){const p=i.definition.info?.title||"",d=i.definition.info?.version||"";a.set(`${p.toLowerCase()}@${d}`,{name:p,description:i.definition.info?.description||"",version:d,servers:i.definition.servers||[],relativePath:i.relativePath})}const v=Object.values(n.products||{}).map(i=>i?.name).filter(R),C=!!n?.access?.requiresLogin,M=n?.access?.rbac||{},P=T({products:v,requiresLogin:C,rbac:M});r.addMcpTools(m(u,"./docs-mcp/tools/index.js"),P),await L({actions:r,handlerPath:D,apiDescriptionsMap:Object.fromEntries(a),mcpConfig:s}),e=!0}})},async afterRoutesCreated(r,o){const c=await o.getConfig(),{mcp:t}=c;r.setGlobalData({mcpData:{docs:{enabled:!t?.hide&&!t?.docs?.hide,name:t?.docs?.name}}})}}}var B=E;async function L({actions:e,handlerPath:r,apiDescriptionsMap:o,mcpConfig:c}){e.createRequestHandler(l,r),e.addApiRoute({slug:"/mcp",requestHandlerId:l,httpMethod:"all",getStaticData:async()=>({props:{config:{apiDescriptionsMap:o,mcpDocsServerName:c?.docs?.name||"Docs MCP Server"},serverOutDir:e.serverOutDir,tools:e.getMcpTools().map(({importPath:t,...n})=>n)}})}),f.info("Registered Docs MCP Server endpoint at /mcp")}export{l as MCP_DOCS_SERVER_HANDLER_ID,B as default,E as mcpServerPlugin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{McpServer as
|
|
1
|
+
import{McpServer as b}from"@redocly/mcp-typescript-sdk/server/mcp.js";import{StreamableHTTPServerTransport as g}from"@redocly/mcp-typescript-sdk/server/streamableHttp.js";import{logger as n}from"../../../tools/notifiers/logger.js";import{mcpToolWorkers as c,MCP_TOOL_WORKER_KEY as S,MCP_TOOL_IS_AVAILABLE_KEY as _}from"../../../workers/mcp-tool-worker-pool.js";async function w({name:e,tools:l,context:u}){const a=new b({name:e,version:new Date().toISOString().slice(0,10)},{capabilities:{logging:{}}}),s=new g({sessionIdGenerator:void 0}),i=M(u);for(const o of l){const m=async(r,d)=>{n.info(`MCP tool called: ${o.name}`);const I={toolName:o.name,args:r,context:i,extra:q(d)};return await c.exec(S,[I],{timeout:6e4})},f=a.tool(o.name,o.description,o.schema,m),p={toolName:o.name,context:i};let t=!1;try{t=await c.exec(_,[p],{timeout:1e4})}catch(r){n.error(`Failed to check MCP tool availability for "${o.name}": ${r instanceof Error?r.message:String(r)}`),t=!1}t||f.disable()}return await a.connect(s),{server:a,transport:s,cleanup:async()=>{s.close()}}}function q(e){return{sessionId:e.sessionId,authInfo:e.authInfo,requestId:e.requestId,requestInfo:e.requestInfo,_meta:e._meta}}function M(e){return{user:e.user,config:e.config,outdir:e.outdir,baseUrl:e.baseUrl,params:e.params,query:e.query,cookies:e.cookies,apiDescriptionsMap:e.apiDescriptionsMap,products:e.products,accessToken:e.accessToken}}export{w as createDocsMcpServer};
|
|
@@ -80,6 +80,11 @@ export type McpToolContext = Omit<ApiFunctionsContext, 'telemetry' | 'getKv' | k
|
|
|
80
80
|
accessToken?: string;
|
|
81
81
|
};
|
|
82
82
|
export type McpToolHandler<TArgs extends Record<string, unknown> = Record<string, unknown>> = (args: TArgs, context: McpToolContext, extra: McpToolExtra) => Promise<McpToolWorkerResponse>;
|
|
83
|
+
export type McpToolIsAvailable = (context: McpToolContext) => boolean | Promise<boolean>;
|
|
84
|
+
export type McpToolHandlerExtended<TArgs extends Record<string, unknown> = Record<string, unknown>> = {
|
|
85
|
+
execute: McpToolHandler<TArgs>;
|
|
86
|
+
isAvailable?: McpToolIsAvailable;
|
|
87
|
+
};
|
|
83
88
|
export type McpToolExecutionParams = {
|
|
84
89
|
toolName: string;
|
|
85
90
|
args: Record<string, unknown>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { McpToolExecutionParams, McpToolWorkerResponse } from '../types.js';
|
|
2
2
|
export declare function executeMcpTool(params: McpToolExecutionParams): Promise<McpToolWorkerResponse>;
|
|
3
|
+
export declare function isMcpToolAvailable(params: Omit<McpToolExecutionParams, 'args' | 'extra'>): Promise<boolean>;
|
|
3
4
|
//# sourceMappingURL=execute-mcp-tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{telemetry as s}from"../../../telemetry/index.js";import{mcpToolHandlers as
|
|
1
|
+
import{telemetry as s}from"../../../telemetry/index.js";import{mcpToolHandlers as l}from"../../../../client/mcp-tool-handlers-entry.js";async function y(r){s.initialize();const{toolName:e,args:c,context:o,extra:i}=r;try{const t=l[e];if(!t)throw new Error(`Unknown MCP tool: ${e}`);const{default:f}=await t(),n=f[e];if(!n)throw new Error(`MCP tool module does not export a handler for "${e}". Expected \`export default { '${e}': handler }\`.`);const a=await(typeof n=="function"?n:n.execute)(c,o,i);if(!d(a))throw new Error(`MCP tool "${e}" returned an invalid result.`);return a.isError?s.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:e,message:`${a.content.map(({text:p})=>p).join(" ")}`,stack:""}]):s.sendMcpToolCalledMessage([{object:"mcp_server",server_type:"docs",tool:e}]),a}catch(t){throw s.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:e,message:t instanceof Error?t.message:String(t),stack:t instanceof Error&&t.stack||""}]),t}}function d(r){return!r||typeof r!="object"?!1:Array.isArray(r.content)}async function h(r){s.initialize();const{toolName:e,context:c}=r;try{const o=l[e];if(!o)return!1;const{default:i}=await o(),t=i[e];return t?typeof t=="object"&&typeof t.isAvailable=="function"?await t.isAvailable(c):!0:!1}catch(o){throw s.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:e,message:"Failed to check if MCP tool is available: "+(o instanceof Error?o.message:String(o)),stack:o instanceof Error&&o.stack||""}]),o}}export{y as executeMcpTool,h as isMcpToolAvailable};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getAstNodeByPointer as x,getLineColLocation as P}from"@redocly/openapi-core";import*as
|
|
2
|
-
`);let o=0;for(let s=0;s<e-1;s++)t[s][0]==="\r"&&o++,o+=t[s].length+1;let r=0;for(;t[e-1][r]===" "||t[e-1][r]===" "||t[e-1][r]==="-";)o++,r++;return o},
|
|
1
|
+
import{getAstNodeByPointer as x,getLineColLocation as P}from"@redocly/openapi-core";import*as a from"yaml-ast-parser";import{combineUrls as A}from"@redocly/theme/core/utils";const I=(e,n,t,o)=>{const r=[];return e.forEach(s=>{const i=L(s,n,t);i.length===0&&r.push(""),r.push(...i)}),Array.from(new Set(r)).map(s=>A(o,s))},L=(e,n,t)=>{const o=S(e,n,3),r=f(o,n,s=>{const i=s.split("/");return i[1]==="paths"?i.slice(0,4).join("/"):null});return v(r,t)},k=(e,n)=>{const t=e.split("/"),o=t.length;for(let r=1;r<o;r++){const s=t.join("/"),i=[...n.matchAll(new RegExp(`[^a-zA-Z0-9]${s}[^a-zA-Z0-9]`,"g"))].filter(u=>u.index!==void 0).map(u=>u.index);if(i.length>0)return{pointer:s,indexes:i};t.pop()}return null},f=(e,n,t,o=new Set,r=[])=>{const s=[],i=n.getAst(a.safeLoad),u=t(e);if(u){s.push({pointer:u,trace:[e,...r]});const c=x(i,u,!1),l=u.split("/");c&&c.parent&&c.parent.key.value==="parameters"&&l[1]==="paths"&&m(c.parent.parent).forEach(d=>{if(d.key.value!=="parameters"){const y=`${l.slice(0,3).join("/")}/${d.key.value}`;s.push(...f(y,n,t,o,r))}})}r=[e,...r];const p=k(e,n.body);return p&&!o.has(p.pointer)&&(o.add(p.pointer),p.indexes.forEach(c=>{const l=g(c,n);s.push(...f(l,n,t,o,r))})),s},v=(e,n)=>e.map(t=>n[t.pointer]).filter(t=>typeof t<"u"),B=(e,n)=>{const t=n.body.split(`
|
|
2
|
+
`);let o=0;for(let s=0;s<e-1;s++)t[s][0]==="\r"&&o++,o+=t[s].length+1;let r=0;for(;t[e-1][r]===" "||t[e-1][r]===" "||t[e-1][r]==="-";)o++,r++;return o},S=(e,n,t)=>{const o=B(e,n);return g(o,n,t)},g=(e,n,t)=>{const o=n.getAst(a.safeLoad),{nodePath:r}=h(o,e,t??0);return"#/"+r.join("/")},h=(e,n,t,o=[])=>{if(t&&o.length===t)return{node:e,nodePath:o};const r=m(e),s=r.findIndex(i=>{if(i.startPosition<=n&&i.endPosition>=n)return!0});if(s!==-1){const i=r[s],u=E(o,e,i,s);return h(i,n,t,u)}return{node:e,nodePath:o}};function m(e){switch(e?.kind){case a.Kind.MAPPING:return[e.key,e.value];case a.Kind.MAP:return e.mappings;case a.Kind.SEQ:return e?.items;default:return[]}}function E(e,n,t,o){return n?.kind===a.Kind.SEQ?[...e,o]:t?.kind===a.Kind.MAPPING&&t?.key?.value&&typeof t.key.value=="string"?[...e,t.key.value.replace(/\//g,"~1")]:e}function K(e,n){const t=P({pointer:e,source:n}),o={lineNumber:t.start.line,column:t.start.col},r=t.end?{lineNumber:t.end.line,column:t.end.col}:void 0;return{start:o,end:r}}export{h as getAstNodeByStartPosition,m as getChildNodes,S as getPointerByLine,g as getPointerByStartPosition,K as getPointerPosition,f as getPointerUsed,L as getRoutesByLine,I as getRoutesByLines,v as getRoutesWhereUsed,B as getStartPositionByLine};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { DatabaseClient } from '
|
|
2
|
-
import type { DatabaseScorecardsConfig, DatabaseScorecardsConfigDto } from '
|
|
3
|
-
export declare class
|
|
1
|
+
import type { DatabaseClient } from '../../../../providers/database/client.js';
|
|
2
|
+
import type { DatabaseScorecardsConfig, DatabaseScorecardsConfigDto } from '../../../../providers/database/databases/sqlite-db/schemas/scorecards-config-table.js';
|
|
3
|
+
export declare class ScorecardsConfigRepository {
|
|
4
4
|
#private;
|
|
5
5
|
constructor(db: DatabaseClient);
|
|
6
6
|
findActiveConfigByKey(key: string): Promise<DatabaseScorecardsConfig | null>;
|
|
@@ -9,4 +9,4 @@ export declare class ScorecardsConfigLocalRepository {
|
|
|
9
9
|
updateConfigById(id: string, updates: Partial<Omit<DatabaseScorecardsConfigDto, 'id' | 'createdAt'>>): Promise<DatabaseScorecardsConfig>;
|
|
10
10
|
archiveConfigById(id: string, archivedAt: string): Promise<DatabaseScorecardsConfig>;
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=scorecards-config-
|
|
12
|
+
//# sourceMappingURL=scorecards-config-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{and as o,eq as n,isNull as s}from"drizzle-orm";import{scorecardsConfigTable as r}from"../../../../providers/database/databases/sqlite-db/schemas/scorecards-config-table.js";class d{#e;constructor(e){this.#e=e}async findActiveConfigByKey(e){return(await this.#e.client.select().from(r).where(o(n(r.key,e),s(r.archivedAt))).limit(1))[0]??null}async findAllActiveConfigs(){return await this.#e.client.select().from(r).where(s(r.archivedAt))}async insertConfig(e){const t=await this.#e.client.insert(r).values(e).returning();if(!t[0])throw new Error(`Failed to insert scorecard config with key: ${e.key}`);return t[0]}async updateConfigById(e,t){const i=await this.#e.client.update(r).set(t).where(n(r.id,e)).returning();if(!i[0])throw new Error(`Failed to update scorecard config with id: ${e}`);return i[0]}async archiveConfigById(e,t){const i=await this.#e.client.update(r).set({archivedAt:t}).where(n(r.id,e)).returning();if(!i[0])throw new Error(`Failed to archive scorecard config with id: ${e}`);return i[0]}}export{d as ScorecardsConfigRepository};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ulid as g}from"ulid";import{logger as r}from"../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as
|
|
1
|
+
import{ulid as g}from"ulid";import{logger as r}from"../../../tools/notifiers/logger.js";import{DatabaseConnectionFactory as d}from"../../../providers/database/database-connection-factory.js";import{BaseRepository as h}from"../../../providers/database/base-repository.js";import{shaHex as l}from"../../../utils/crypto/sha-hex.js";import{hasOptionsChanged as m}from"../../../plugins/catalog-entities/utils/has-options-changed.js";import{slug as y}from"../../../../utils/slugger.js";import{withTimestamp as f}from"../../../utils/time/with-timestamp.js";import{ScorecardsConfigRepository as p}from"./repositories/scorecards-config-repository.js";class o extends h{static#i;static#e;#t;constructor(t){if(!t)throw new Error("Database connection is required for ScorecardsConfigService");super(t),this.#t=new p(this.databaseClient)}static async getInstance(t){const i=m(o.#e,t);if(!o.#i||i){const n=await d.create(t);if(!n)throw new Error("Failed to create db connection for scorecards config service");o.#i=new o(n),o.#e=t}return o.#i}async syncConfig(t,i){const n=new Set;(!Array.isArray(t)||t.length===0)&&r.verbose("No scorecard configs to sync"),r.verbose(`Starting scorecard config sync for ${t.length} config(s)`);for(const s of t)try{const e=s.key;if(!/^[a-z0-9-]+$/i.test(e)){r.error(`Skipping invalid scorecard config item: key "${e}" does not match kebab-case format (letters, numbers, and dashes only)`,{scorecard:s});continue}n.add(e);const a=this.#s(s),c=await this.#t.findActiveConfigByKey(e);if(c){if(c.configHash===a){r.verbose(`Config "${e}" unchanged, skipping update`);continue}r.verbose(`Updating config "${e}"`),await this.#r(c.id,s,a)}else r.verbose(`Inserting new config "${e}"`),await this.#n(e,s,a);i&&await i(e)}catch(e){r.error("Error processing scorecard config item:",{error:e.message??e,scorecard:s})}await this.#o(n),r.verbose("Sync scorecard configuration: success")}#s(t){const i=JSON.stringify({entities:t.entities,levels:t.levels});return l(i)}async#n(t,i,n){await this.#t.insertConfig(f({id:`sc_${g()}`,key:t,slug:y(t),name:i.name,description:i.description??null,entitiesFilter:JSON.stringify(i.entities),levels:JSON.stringify(i.levels),configHash:n,archivedAt:null}))}async#r(t,i,n){const s=f({entitiesFilter:JSON.stringify(i.entities),levels:JSON.stringify(i.levels),configHash:n,archivedAt:null},{fields:["updatedAt"]});await this.#t.updateConfigById(t,s)}async#o(t){const i=await this.#t.findAllActiveConfigs(),n=new Date().toISOString();for(const s of i)if(!t.has(s.key)){r.verbose(`Archiving removed config "${s.key}"`);try{await this.#t.archiveConfigById(s.id,n)}catch(e){r.error(`Error archiving config item "${s.key}":`,e.message??e)}}}}export{o as ScorecardsConfigService};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import p from"node:path";import{existsSync as v}from"node:fs";import{writeFile as
|
|
1
|
+
import p from"node:path";import{existsSync as v}from"node:fs";import{writeFile as S,access as b,rm as X,constants as $}from"fs/promises";import{REDOCLY_ROUTE_RBAC as P,REDOCLY_TEAMS_RBAC as d}from"@redocly/config";import N from"picomatch";import{combineUrls as U}from"@redocly/theme/core/utils";import{DEFAULT_LOCALE_PLACEHOLDER as _}from"../../../../constants/common.js";import{AI_INDEX_EXPORT_FOLDER as j}from"../../../constants/plugins/search.js";import{LLMS_TXT_FILE_NAME as B}from"../../../constants/common.js";import{envConfig as G}from"../../../config/env-config.js";import{logger as a}from"../../../tools/notifiers/logger.js";import{shaHexShort as H}from"../../../utils/crypto/sha-hex-short.js";import{promiseMapLimit as w}from"../../../utils/async/promise-map-limit.js";import{getLlmsTxtMdPathBySlug as k}from"../../../utils/llmstxt/get-llms-txt-md-path-by-slug.js";import{validateLLMsTxtConfig as Y,generateLLMsTxt as J}from"../llmstxt/index.js";import{ensureDir as D}from"../../../utils/fs.js";import{isResourcePubliclyAccessible as K,extractTeamsFromScopeItems as V,getRbacTeamsListForResource as W}from"../../../utils/rbac.js";const C=20,A="llms.txt:";async function Rt(t,i,{embeddingsEnabled:o,llmstxtEnabled:r}){const c=p.join(t.outdir,B);if(!r){try{await b(c,$.W_OK),await X(c)}catch{}if(!o)return}o&&a.info("Preparing semantic documents..."),r&&a.info(`${A} Generating llms.txt files...`);const L=a.startTiming(),l=a.startTiming(),u=t.getGlobalConfig("seo"),m=u?.llmstxt,T=p.resolve(t.outdir,j),f=t.getConfig(),F=f.access?.rbac??{},M=t.getAllRoutes(),y=f?.l10n?.defaultLocale||f?.i18n?.defaultLocale||_,O=(m?.excludeFiles||[]).map(e=>N(e)),R=[];if(await w(M,C,async e=>{if(e.excludeFromSearch)return;const E=await q(e,t),x=await z(e,E,i,t);if(x){if(r)for(const s of await x.getLLMsTxts()){if(O.some(h=>h(s.fsPath)))continue;const g=k(s.slug),n=p.join(t.outdir,g);D(n),await S(n,s.content),t.setResourceResponseHeaders(g,[{name:"X-Robots-Tag",value:"noindex, follow"},...f.seo?.siteUrl?[{name:"Link",value:`<${U(f.seo.siteUrl,s.slug)}>; rel="canonical"`}]:[]]),s.includeInLLMsTxt&&K(e,f)&&R.push(s)}if(o&&G.isBuildMode){const s=await x.getSearchDocuments();if(!s.length)return;const g=Q(e,F),n=e.versions?.find(({active:I})=>I),h=n&&{folder:n.folderId,label:n.label,default:n.default};await Z(s,e.fsPath,g,T,y,h)}}}),o&&a.infoTime(l,"Semantic search documents prepared"),R.length)try{Y(m);const e=await J(R,m,{title:u?.title,description:u?.description},i);D(c),await S(c,e),a.infoTime(L,`${A} files generated`)}catch(e){a.error(`${A} Failed to generate llms.txt file. ${e.message}`)}}async function q(t,i){return t.getStaticData?t.getStaticData(t,i):{}}async function z(t,i,o,r){if(t.getAiDocumentsStore)return t.getAiDocumentsStore(t,{...i,[d]:t[d],[P]:t[P]},o,r)}function Q(t,i){const o=V(t?.[d]);return o?.length?o:W(t,i)}async function Z(t,i,o,r,c,L){await w(t,C,async l=>{const u=`${H(i+l.content)}.json`,m=D(p.join(r,u)),T=l.locale===_?c:l.locale;v(m)||await S(m,JSON.stringify({...l,rbacTeams:o||[],version:L,locale:T}),"utf-8")})}export{Rt as prepareSemanticDocuments};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{sql as a}from"drizzle-orm";import{envConfig as i}from"../../config/env-config.js";import{SQLD_REMOTE_DATABASE_URL_NO_DEPLOYMENT_YET_VAR as
|
|
1
|
+
import{sql as a}from"drizzle-orm";import{getFirstRunRow as o}from"../../providers/database/utils/get-first-row.js";import{envConfig as i}from"../../config/env-config.js";import{SQLD_REMOTE_DATABASE_URL_NO_DEPLOYMENT_YET_VAR as E}from"../../constants/plugins/catalog-entities.js";class n{static#t="ORGANIZATION_ID";static#e="PROJECT_ID";organizationId;projectId;databaseClient;path;constructor(e){const t=this.isNonRemoteDatabaseMode();this.organizationId=this.#i(t),this.projectId=this.#n(t),this.databaseClient=e.client,this.path=e.path}async close(){await this.databaseClient.close()}async sync(){await this.databaseClient.sync()}async getTableSizeInBytes(e){const t=await this.databaseClient.client.run(a`
|
|
2
2
|
SELECT COALESCE(SUM(pgsize), 0) AS bytes
|
|
3
3
|
FROM dbstat
|
|
4
4
|
WHERE name = ${e}
|
|
5
|
-
`))
|
|
5
|
+
`),s=o(t)?.bytes,r=Number(s??0);return Number.isFinite(r)?r:0}#i=e=>{const t=i.ORGANIZATION_ID;if(t)return t;if(e)return n.#t;throw new Error("ORGANIZATION_ID environment variable is required. Ensure it is set in your environment configuration.")};#n=e=>{const t=i.PROJECT_ID;if(t)return t;if(e)return n.#e;throw new Error("PROJECT_ID environment variable is required. Ensure it is set in your environment configuration.")};isNonRemoteDatabaseMode=()=>i.SQLD_REMOTE_DATABASE_URL===E||!i.SQLD_REMOTE_DATABASE_AUTH_TOKEN}export{n as BaseRepository};
|