@redocly/reef 0.133.0-next.1 → 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.
Files changed (243) hide show
  1. package/CHANGELOG.md +44 -2
  2. package/dist/server/constants/plugins/catalog-entities.d.ts +2 -0
  3. package/dist/server/constants/plugins/catalog-entities.js +1 -1
  4. package/dist/server/persistence/cache/mappers/create-cache-db-record.d.ts +1 -1
  5. package/dist/server/persistence/cache/mappers/create-cache-read-model.d.ts +1 -1
  6. package/dist/server/persistence/cache/repositories/{cache-local-repository.d.ts → cache-repository.d.ts} +3 -3
  7. package/dist/server/persistence/cache/repositories/cache-repository.js +1 -0
  8. package/dist/server/persistence/cache/services/cache-service.d.ts +2 -2
  9. package/dist/server/persistence/cache/services/cache-service.js +1 -1
  10. package/dist/server/persistence/file-hashes/mappers/create-file-hash-db-record.d.ts +1 -1
  11. package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.d.ts +2 -2
  12. package/dist/server/persistence/file-hashes/mappers/create-file-hash-read-model.js +1 -1
  13. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-read-repository.d.ts → file-hashes-read-repository.d.ts} +3 -7
  14. package/dist/server/persistence/file-hashes/repositories/file-hashes-read-repository.js +1 -0
  15. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-repository.d.ts → file-hashes-repository.d.ts} +4 -3
  16. package/dist/server/persistence/file-hashes/repositories/file-hashes-repository.js +1 -0
  17. package/dist/server/persistence/file-hashes/repositories/{file-hashes-local-write-repository.d.ts → file-hashes-write-repository.d.ts} +2 -2
  18. package/dist/server/persistence/file-hashes/repositories/file-hashes-write-repository.js +1 -0
  19. package/dist/server/persistence/file-hashes/services/file-hashes-service.d.ts +3 -5
  20. package/dist/server/persistence/file-hashes/services/file-hashes-service.js +1 -1
  21. package/dist/server/persistence/kv/mappers/create-kv-db-record.d.ts +1 -1
  22. package/dist/server/persistence/kv/mappers/create-kv-list-entry.d.ts +1 -1
  23. package/dist/server/persistence/kv/mappers/create-kv-value.d.ts +1 -1
  24. package/dist/server/persistence/kv/repositories/{kv-remote-repository.d.ts → kv-repository.d.ts} +3 -3
  25. package/dist/server/persistence/kv/repositories/kv-repository.js +2 -0
  26. package/dist/server/persistence/kv/services/kv-service.d.ts +2 -2
  27. package/dist/server/persistence/kv/services/kv-service.js +1 -1
  28. package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.d.ts +6 -0
  29. package/dist/server/plugins/catalog-entities/database/catalog-entities-publisher.js +12 -0
  30. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.d.ts +29 -66
  31. package/dist/server/plugins/catalog-entities/database/catalog-entities-service.js +1 -1
  32. package/dist/server/plugins/catalog-entities/database/consts.d.ts +45 -0
  33. package/dist/server/plugins/catalog-entities/database/consts.js +1 -0
  34. package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.d.ts +1 -2
  35. package/dist/server/plugins/catalog-entities/database/mappers/create-bff-entity.js +1 -1
  36. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-attributes-db-record.d.ts +1 -1
  37. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-db-record.d.ts +1 -1
  38. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.d.ts +1 -3
  39. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-read-model.js +1 -1
  40. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-dto.d.ts +1 -1
  41. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-db-record-from-file-schema.d.ts +1 -1
  42. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.d.ts +3 -3
  43. package/dist/server/plugins/catalog-entities/database/mappers/create-entity-relation-read-model.js +1 -1
  44. package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-bff-repository.d.ts → bffEntities/bff-entities-read-repository.d.ts} +4 -4
  45. package/dist/server/plugins/catalog-entities/database/repositories/bffEntities/bff-entities-read-repository.js +131 -0
  46. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.d.ts +26 -0
  47. package/dist/server/plugins/catalog-entities/database/repositories/catalog-entities-repository.js +1 -0
  48. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.d.ts +8 -0
  49. package/dist/server/plugins/catalog-entities/database/repositories/common/filters-repository.js +82 -0
  50. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.d.ts +7 -7
  51. package/dist/server/plugins/catalog-entities/database/repositories/common/revision-repository.js +1 -1
  52. package/dist/server/plugins/catalog-entities/database/repositories/common/version-repository.js +1 -1
  53. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.d.ts +27 -0
  54. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-read-repository.js +1 -0
  55. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.d.ts +27 -0
  56. package/dist/server/plugins/catalog-entities/database/repositories/entities/entities-write-repository.js +1 -0
  57. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.d.ts +12 -0
  58. package/dist/server/plugins/catalog-entities/database/repositories/entityAttributes/entity-attributes-write-repository.js +1 -0
  59. package/dist/server/plugins/catalog-entities/database/repositories/{local/catalog-entities-relations-repository.d.ts → relations/relations-read-repository.d.ts} +7 -4
  60. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-read-repository.js +1 -0
  61. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.d.ts +28 -0
  62. package/dist/server/plugins/catalog-entities/database/repositories/relations/relations-write-repository.js +1 -0
  63. package/dist/server/plugins/catalog-entities/database/repositories/types.d.ts +39 -0
  64. package/dist/server/plugins/catalog-entities/database/repositories/types.js +0 -0
  65. package/dist/server/plugins/catalog-entities/database/types.d.ts +26 -0
  66. package/dist/server/plugins/catalog-entities/database/types.js +0 -0
  67. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/arazzo-entities-extractor.js +1 -1
  68. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.d.ts +2 -2
  69. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/asyncapi-entities-extractor.js +1 -1
  70. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.d.ts +2 -2
  71. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/base.js +1 -1
  72. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.d.ts +2 -2
  73. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/graphql-entities-extractor.js +2 -2
  74. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.d.ts +2 -2
  75. package/dist/server/plugins/catalog-entities/extensions/extractors/api-description/openapi-entities-extractor.js +1 -1
  76. package/dist/server/plugins/catalog-entities/extensions/extractors/fs-entities-extractor.js +1 -1
  77. package/dist/server/plugins/catalog-entities/get-server-props.js +1 -1
  78. package/dist/server/plugins/catalog-entities/plugin.js +1 -1
  79. package/dist/server/plugins/catalog-entities/schemas/database-schemas.d.ts +38 -36
  80. package/dist/server/plugins/catalog-entities/schemas/database-schemas.js +1 -1
  81. package/dist/server/plugins/catalog-entities/schemas/dto-schemas.d.ts +1 -3
  82. package/dist/server/plugins/catalog-entities/schemas/read-model-schemas.d.ts +3 -1
  83. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.d.ts +15 -0
  84. package/dist/server/plugins/catalog-entities/utils/catalog-data-collector.js +1 -1
  85. package/dist/server/plugins/catalog-entities/utils/hash-manager.d.ts +1 -0
  86. package/dist/server/plugins/catalog-entities/utils/hash-manager.js +1 -1
  87. package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.d.ts +18 -0
  88. package/dist/server/plugins/catalog-entities/utils/rbac-config-hash-cache.js +1 -0
  89. package/dist/server/plugins/entitlements/index.js +1 -1
  90. package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.d.ts +0 -1
  91. package/dist/server/plugins/entitlements/utils/get-billed-catalog-build-pages-count.js +1 -1
  92. package/dist/server/plugins/mcp/servers/docs-server.js +1 -1
  93. package/dist/server/plugins/mcp/types.d.ts +5 -0
  94. package/dist/server/plugins/mcp/workers/execute-mcp-tool.d.ts +1 -0
  95. package/dist/server/plugins/mcp/workers/execute-mcp-tool.js +1 -1
  96. package/dist/server/plugins/scorecards/database/repositories/{local/scorecards-config-local-repository.d.ts → scorecards-config-repository.d.ts} +4 -4
  97. package/dist/server/plugins/scorecards/database/repositories/scorecards-config-repository.js +1 -0
  98. package/dist/server/plugins/scorecards/database/scorecards-config-service.js +1 -1
  99. package/dist/server/plugins/search/ai-indexer/prepare-semantic-documents.js +1 -1
  100. package/dist/server/providers/database/base-repository.js +2 -2
  101. package/dist/server/providers/database/client.d.ts +1 -1
  102. package/dist/server/providers/database/client.js +1 -1
  103. package/dist/server/providers/database/constants.d.ts +4 -9
  104. package/dist/server/providers/database/constants.js +1 -1
  105. package/dist/server/providers/database/copy-migrations.js +1 -1
  106. package/dist/server/providers/database/database-connection-factory.d.ts +2 -2
  107. package/dist/server/providers/database/database-connection-factory.js +1 -1
  108. package/dist/server/providers/database/database-connections-manager.d.ts +3 -8
  109. package/dist/server/providers/database/database-connections-manager.js +1 -1
  110. package/dist/server/providers/database/database-preconnect-service.js +1 -1
  111. package/dist/server/providers/database/databases/sqlite-db/drizzle.config.d.ts +12 -0
  112. package/dist/server/providers/database/databases/sqlite-db/drizzle.config.js +1 -0
  113. package/dist/server/providers/database/databases/sqlite-db/migrations/0009_add-missing-local-tables.sql +41 -0
  114. package/dist/server/providers/database/databases/sqlite-db/migrations/0010_add-last-seen-run-id-to-entities-tables.sql +4 -0
  115. package/dist/server/providers/database/databases/sqlite-db/migrations/0011_update-entities-relations-index.sql +2 -0
  116. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0009_snapshot.json +1141 -0
  117. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0010_snapshot.json +1165 -0
  118. package/dist/server/providers/database/databases/sqlite-db/migrations/meta/0011_snapshot.json +1165 -0
  119. package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/_journal.json +21 -0
  120. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.d.ts +19 -0
  121. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-relations-table.js +1 -1
  122. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.d.ts +19 -0
  123. package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-table.js +1 -1
  124. package/dist/server/providers/database/pagination/limit.d.ts +5 -0
  125. package/dist/server/providers/database/pagination/limit.js +1 -1
  126. package/dist/server/providers/database/transient-sqld-error.d.ts +14 -0
  127. package/dist/server/providers/database/transient-sqld-error.js +1 -0
  128. package/dist/server/providers/database/types.d.ts +6 -6
  129. package/dist/server/providers/database/utils/get-first-row.d.ts +19 -0
  130. package/dist/server/providers/database/utils/get-first-row.js +1 -0
  131. package/dist/server/store.d.ts +1 -0
  132. package/dist/server/store.js +1 -1
  133. package/dist/server/types/plugins/common.d.ts +1 -0
  134. package/dist/server/web-server/routes/catalog/catalog-relations.js +1 -1
  135. package/dist/server/web-server/routes/catalog/catalog.js +1 -1
  136. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.d.ts +0 -147
  137. package/dist/server/web-server/routes/catalog/helpers/create-entity-schema.js +1 -1
  138. package/dist/server/web-server/routes/catalog/helpers/upsert-pages-stats.js +1 -1
  139. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entities.d.ts +1 -2
  140. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity-update-data.d.ts +1 -2
  141. package/dist/server/web-server/routes/catalog/parsers/entities/parse-entity.d.ts +1 -2
  142. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entities-relations.d.ts +1 -1
  143. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation-update-data.d.ts +1 -1
  144. package/dist/server/web-server/routes/catalog/parsers/relations/parse-entity-relation.d.ts +1 -1
  145. package/dist/server/workers/mcp-tool-worker-pool.d.ts +1 -0
  146. package/dist/server/workers/mcp-tool-worker-pool.js +1 -1
  147. package/dist/server/workers/mcp-tool-worker.js +1 -1
  148. package/dist/server/workers/types.d.ts +5 -1
  149. package/package.json +9 -9
  150. package/dist/server/persistence/cache/repositories/cache-local-repository.js +0 -1
  151. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-read-repository.js +0 -1
  152. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-repository.js +0 -1
  153. package/dist/server/persistence/file-hashes/repositories/file-hashes-local-write-repository.js +0 -1
  154. package/dist/server/persistence/file-hashes/repositories/utils.d.ts +0 -10
  155. package/dist/server/persistence/file-hashes/repositories/utils.js +0 -1
  156. package/dist/server/persistence/kv/repositories/kv-remote-repository.js +0 -2
  157. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-bff-repository.js +0 -123
  158. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.d.ts +0 -98
  159. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-read-repository.js +0 -145
  160. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.d.ts +0 -100
  161. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-repository.js +0 -1
  162. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.d.ts +0 -43
  163. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-local-write-repository.js +0 -1
  164. package/dist/server/plugins/catalog-entities/database/repositories/local/catalog-entities-relations-repository.js +0 -1
  165. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.d.ts +0 -20
  166. package/dist/server/plugins/catalog-entities/database/repositories/remote/catalog-entities-remote-repository.js +0 -1
  167. package/dist/server/plugins/scorecards/database/repositories/local/scorecards-config-local-repository.js +0 -1
  168. package/dist/server/providers/database/database-initialization-strategy.d.ts +0 -17
  169. package/dist/server/providers/database/database-initialization-strategy.js +0 -1
  170. package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.d.ts +0 -11
  171. package/dist/server/providers/database/databases/catalog-sqlite/drizzle.config.js +0 -1
  172. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0001_catalog-versions-and-revisions.sql +0 -20
  173. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0002_add-scorecards-status.sql +0 -1
  174. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0003_catalog_versions_and_revisions_relations.sql +0 -46
  175. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0004_normalize_relation_types.sql +0 -147
  176. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0005_catalog-relations-constraint-fix.sql +0 -2
  177. package/dist/server/providers/database/databases/catalog-sqlite/migrations/0006_add-catalog-entitities-attributes-table.sql +0 -11
  178. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0001_snapshot.json +0 -378
  179. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0002_snapshot.json +0 -385
  180. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0003_snapshot.json +0 -392
  181. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0004_snapshot.json +0 -392
  182. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0005_snapshot.json +0 -393
  183. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/0006_snapshot.json +0 -458
  184. package/dist/server/providers/database/databases/catalog-sqlite/migrations/meta/_journal.json +0 -55
  185. package/dist/server/providers/database/databases/main-sqlite/drizzle.config.d.ts +0 -10
  186. package/dist/server/providers/database/databases/main-sqlite/drizzle.config.js +0 -1
  187. package/dist/server/providers/database/databases/main-sqlite/migrations/0000_initial_migration.sql +0 -11
  188. package/dist/server/providers/database/databases/main-sqlite/migrations/0001_update_file_hashes_file_type_values.sql +0 -10
  189. package/dist/server/providers/database/databases/main-sqlite/migrations/0002_cache-table.sql +0 -11
  190. package/dist/server/providers/database/databases/main-sqlite/migrations/0003_file-path-added.sql +0 -6
  191. package/dist/server/providers/database/databases/main-sqlite/migrations/0004_add-scorecards-tables.sql +0 -10
  192. package/dist/server/providers/database/databases/main-sqlite/migrations/0005_recreate-scorecards-config.sql +0 -25
  193. package/dist/server/providers/database/databases/main-sqlite/migrations/0006_change-scorecards-config-timestamps-field-types.sql +0 -19
  194. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0000_snapshot.json +0 -82
  195. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0001_snapshot.json +0 -82
  196. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0002_snapshot.json +0 -146
  197. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0003_snapshot.json +0 -153
  198. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0004_snapshot.json +0 -221
  199. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0005_snapshot.json +0 -263
  200. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/0006_snapshot.json +0 -261
  201. package/dist/server/providers/database/databases/main-sqlite/migrations/meta/_journal.json +0 -55
  202. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.d.ts +0 -14
  203. package/dist/server/providers/database/databases/sqld-sqlite/drizzle.config.js +0 -1
  204. package/dist/server/providers/database/databases/sqld-sqlite/migrations/0000_initial_migration.sql +0 -46
  205. package/dist/server/providers/database/databases/sqld-sqlite/migrations/meta/0000_snapshot.json +0 -307
  206. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/0000_initial_migration.sql +0 -0
  207. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0001_add_kv_table.sql +0 -0
  208. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0002_catalog-versions-and-revisions.sql +0 -0
  209. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0003_add-scorecards-tables.sql +0 -0
  210. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0004_add-scorecards-status.sql +0 -0
  211. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0005_recreate-scorecards-tables.sql +0 -0
  212. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0006_catalog-versions-and-revisions-relations.sql +0 -0
  213. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0007_catalog-relations-constraint-fix.sql +0 -0
  214. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/0008_add-catalog-entitities-attributes-table.sql +0 -0
  215. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/migrations/meta/0000_snapshot.json +0 -0
  216. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0001_snapshot.json +0 -0
  217. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0002_snapshot.json +0 -0
  218. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0003_snapshot.json +0 -0
  219. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0004_snapshot.json +0 -0
  220. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0005_snapshot.json +0 -0
  221. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0006_snapshot.json +0 -0
  222. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0007_snapshot.json +0 -0
  223. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/migrations/meta/0008_snapshot.json +0 -0
  224. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.d.ts +0 -0
  225. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/cache-table.js +0 -0
  226. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.d.ts +0 -0
  227. /package/dist/server/providers/database/databases/{catalog-sqlite → sqlite-db}/schemas/entities-attributes-table.js +0 -0
  228. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.d.ts +0 -0
  229. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/file-hashes-table.js +0 -0
  230. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.d.ts +0 -0
  231. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/kv-table.js +0 -0
  232. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.d.ts +0 -0
  233. /package/dist/server/providers/database/databases/{main-sqlite → sqlite-db}/schemas/scorecards-config-table.js +0 -0
  234. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.d.ts +0 -0
  235. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-evaluation-runs-table.js +0 -0
  236. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.d.ts +0 -0
  237. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-level-results-table.js +0 -0
  238. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.d.ts +0 -0
  239. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-levels-rules-results-table.js +0 -0
  240. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.d.ts +0 -0
  241. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-results-table.js +0 -0
  242. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.d.ts +0 -0
  243. /package/dist/server/providers/database/databases/{sqld-sqlite → sqlite-db}/schemas/scorecards-rule-results-table.js +0 -0
@@ -1,60 +1,61 @@
1
1
  import type { FromSchema } from 'json-schema-to-ts';
2
+ /** Matches Drizzle `DatabaseEntityRelation` / `createEntityRelationFieldsForSelect` (camelCase). */
2
3
  export declare const entityRelationDatabaseSchema: {
3
4
  readonly type: "object";
4
5
  readonly properties: {
5
6
  readonly id: {
6
7
  readonly type: "string";
7
8
  };
8
- readonly organization_id: {
9
+ readonly organizationId: {
9
10
  readonly type: "string";
10
11
  };
11
- readonly project_id: {
12
+ readonly projectId: {
12
13
  readonly type: "string";
13
14
  };
14
- readonly source_key: {
15
+ readonly sourceKey: {
15
16
  readonly type: "string";
16
17
  };
17
- readonly source_id: {
18
- readonly type: readonly ["string", "null"];
19
- };
20
- readonly source_version: {
21
- readonly type: readonly ["string", "null"];
22
- };
23
- readonly source_revision: {
24
- readonly type: readonly ["string", "null"];
18
+ readonly sourceVersion: {
19
+ readonly type: "string";
25
20
  };
26
- readonly source_to_target_relation: {
21
+ readonly sourceRevision: {
27
22
  readonly type: "string";
28
23
  };
29
- readonly target_key: {
24
+ readonly sourceToTargetRelation: {
30
25
  readonly type: "string";
31
26
  };
32
- readonly target_id: {
33
- readonly type: readonly ["string", "null"];
27
+ readonly targetKey: {
28
+ readonly type: "string";
34
29
  };
35
- readonly target_version: {
36
- readonly type: readonly ["string", "null"];
30
+ readonly targetVersion: {
31
+ readonly type: "string";
37
32
  };
38
- readonly target_revision: {
39
- readonly type: readonly ["string", "null"];
33
+ readonly targetRevision: {
34
+ readonly type: "string";
40
35
  };
41
- readonly target_to_source_relation: {
36
+ readonly targetToSourceRelation: {
42
37
  readonly type: "string";
43
38
  };
44
- readonly source_file: {
39
+ readonly sourceFile: {
45
40
  readonly type: readonly ["string", "null"];
46
41
  };
47
- readonly file_hash: {
42
+ readonly fileHash: {
48
43
  readonly type: readonly ["string", "null"];
49
44
  };
50
- readonly created_at: {
45
+ readonly isDeleted: {
46
+ readonly type: readonly ["boolean", "null"];
47
+ };
48
+ readonly createdAt: {
51
49
  readonly type: "string";
52
50
  };
53
- readonly updated_at: {
51
+ readonly updatedAt: {
54
52
  readonly type: "string";
55
53
  };
54
+ readonly lastSeenRunId: {
55
+ readonly type: readonly ["string", "null"];
56
+ };
56
57
  };
57
- readonly required: readonly ["id", "organization_id", "project_id", "source_key", "source_to_target_relation", "target_key", "target_to_source_relation", "created_at", "updated_at"];
58
+ readonly required: readonly ["id", "organizationId", "projectId", "sourceKey", "sourceVersion", "sourceRevision", "sourceToTargetRelation", "targetKey", "targetVersion", "targetRevision", "targetToSourceRelation", "createdAt", "updatedAt"];
58
59
  readonly additionalProperties: false;
59
60
  };
60
61
  export declare const entityDatabaseSchema: {
@@ -63,10 +64,10 @@ export declare const entityDatabaseSchema: {
63
64
  readonly id: {
64
65
  readonly type: "string";
65
66
  };
66
- readonly organization_id: {
67
+ readonly organizationId: {
67
68
  readonly type: "string";
68
69
  };
69
- readonly project_id: {
70
+ readonly projectId: {
70
71
  readonly type: "string";
71
72
  };
72
73
  readonly key: {
@@ -96,19 +97,20 @@ export declare const entityDatabaseSchema: {
96
97
  readonly links: {
97
98
  readonly type: readonly ["string", "null"];
98
99
  };
99
- readonly created_at: {
100
+ readonly createdAt: {
100
101
  readonly type: "string";
101
102
  };
102
- readonly updated_at: {
103
+ readonly updatedAt: {
103
104
  readonly type: "string";
104
105
  };
105
106
  readonly source: {
106
107
  readonly type: "string";
108
+ readonly enum: readonly ["file", "remote"];
107
109
  };
108
- readonly source_file: {
110
+ readonly sourceFile: {
109
111
  readonly type: readonly ["string", "null"];
110
112
  };
111
- readonly file_hash: {
113
+ readonly fileHash: {
112
114
  readonly type: readonly ["string", "null"];
113
115
  };
114
116
  readonly version: {
@@ -120,20 +122,20 @@ export declare const entityDatabaseSchema: {
120
122
  readonly hash: {
121
123
  readonly type: readonly ["string", "null"];
122
124
  };
123
- readonly is_current: {
125
+ readonly isCurrent: {
124
126
  readonly type: readonly ["boolean", "null"];
125
127
  };
126
- readonly is_default_version: {
128
+ readonly isDefaultVersion: {
127
129
  readonly type: readonly ["boolean", "null"];
128
130
  };
129
- readonly is_deleted: {
131
+ readonly isDeleted: {
130
132
  readonly type: readonly ["boolean", "null"];
131
133
  };
132
- readonly rbac_teams: {
134
+ readonly rbacTeams: {
133
135
  readonly type: readonly ["string", "null"];
134
136
  };
135
137
  };
136
- readonly required: readonly ["id", "organization_id", "project_id", "key", "type", "title", "created_at", "updated_at", "source"];
138
+ readonly required: readonly ["id", "organizationId", "projectId", "key", "type", "title", "createdAt", "updatedAt", "source"];
137
139
  readonly additionalProperties: false;
138
140
  };
139
141
  export declare const relatedEntityDatabaseSchema: {
@@ -1 +1 @@
1
- import{ENTITY_RELATION_TYPES as t}from"@redocly/config";const i={type:"object",properties:{id:{type:"string"},organization_id:{type:"string"},project_id:{type:"string"},source_key:{type:"string"},source_id:{type:["string","null"]},source_version:{type:["string","null"]},source_revision:{type:["string","null"]},source_to_target_relation:{type:"string"},target_key:{type:"string"},target_id:{type:["string","null"]},target_version:{type:["string","null"]},target_revision:{type:["string","null"]},target_to_source_relation:{type:"string"},source_file:{type:["string","null"]},file_hash:{type:["string","null"]},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","organization_id","project_id","source_key","source_to_target_relation","target_key","target_to_source_relation","created_at","updated_at"],additionalProperties:!1},r={type:"object",properties:{id:{type:"string"},organization_id:{type:"string"},project_id:{type:"string"},key:{type:"string"},type:{type:"string"},title:{type:"string"},summary:{type:["string","null"]},tags:{type:["string","null"]},metadata:{type:["string","null"]},git:{type:["string","null"]},contact:{type:["string","null"]},links:{type:["string","null"]},created_at:{type:"string"},updated_at:{type:"string"},source:{type:"string"},source_file:{type:["string","null"]},file_hash:{type:["string","null"]},version:{type:["string","null"]},revision:{type:["string","null"]},hash:{type:["string","null"]},is_current:{type:["boolean","null"]},is_default_version:{type:["boolean","null"]},is_deleted:{type:["boolean","null"]},rbac_teams:{type:["string","null"]}},required:["id","organization_id","project_id","key","type","title","created_at","updated_at","source"],additionalProperties:!1},n={type:"object",properties:{id:{type:"string"},key:{type:"string"},title:{type:"string"},type:{type:"string"},summary:{type:["string","null"]},source:{type:"string"},relation_role:{type:["string","null"]},relation_type:{type:["string","null"],enum:t},source_file:{type:["string","null"]},created_at:{type:["string"]},updated_at:{type:["string"]},metadata:{type:["string","null"]},version:{type:["string","null"]}},required:["id","key","title","type","source","created_at","updated_at"],additionalProperties:!1},s={type:"object",properties:{id:{type:"string",minLength:1},key:{type:"string",minLength:1},title:{type:"string",minLength:1},type:{type:"string",minLength:1},summary:{type:["string","null"]},source:{type:"string",minLength:1},source_file:{type:["string","null"]},created_at:{type:["string"]},updated_at:{type:["string"]},metadata:{type:["string","object","null"]},version:{type:["string","null"]},revision:{type:["string","null"]},direction:{type:"string",enum:["outgoing","incoming"]},relation_field:{type:"string",minLength:1}},required:["id","key","title","type","source","direction","relation_field","created_at","updated_at"],additionalProperties:!1};export{r as entityDatabaseSchema,i as entityRelationDatabaseSchema,n as relatedEntityDatabaseSchema,s as relatedEntityQueryRowDatabaseSchema};
1
+ import{ENTITY_RELATION_TYPES as t}from"@redocly/config";const i={type:"object",properties:{id:{type:"string"},organizationId:{type:"string"},projectId:{type:"string"},sourceKey:{type:"string"},sourceVersion:{type:"string"},sourceRevision:{type:"string"},sourceToTargetRelation:{type:"string"},targetKey:{type:"string"},targetVersion:{type:"string"},targetRevision:{type:"string"},targetToSourceRelation:{type:"string"},sourceFile:{type:["string","null"]},fileHash:{type:["string","null"]},isDeleted:{type:["boolean","null"]},createdAt:{type:"string"},updatedAt:{type:"string"},lastSeenRunId:{type:["string","null"]}},required:["id","organizationId","projectId","sourceKey","sourceVersion","sourceRevision","sourceToTargetRelation","targetKey","targetVersion","targetRevision","targetToSourceRelation","createdAt","updatedAt"],additionalProperties:!1},r={type:"object",properties:{id:{type:"string"},organizationId:{type:"string"},projectId:{type:"string"},key:{type:"string"},type:{type:"string"},title:{type:"string"},summary:{type:["string","null"]},tags:{type:["string","null"]},metadata:{type:["string","null"]},git:{type:["string","null"]},contact:{type:["string","null"]},links:{type:["string","null"]},createdAt:{type:"string"},updatedAt:{type:"string"},source:{type:"string",enum:["file","remote"]},sourceFile:{type:["string","null"]},fileHash:{type:["string","null"]},version:{type:["string","null"]},revision:{type:["string","null"]},hash:{type:["string","null"]},isCurrent:{type:["boolean","null"]},isDefaultVersion:{type:["boolean","null"]},isDeleted:{type:["boolean","null"]},rbacTeams:{type:["string","null"]}},required:["id","organizationId","projectId","key","type","title","createdAt","updatedAt","source"],additionalProperties:!1},n={type:"object",properties:{id:{type:"string"},key:{type:"string"},title:{type:"string"},type:{type:"string"},summary:{type:["string","null"]},source:{type:"string"},relation_role:{type:["string","null"]},relation_type:{type:["string","null"],enum:t},source_file:{type:["string","null"]},created_at:{type:["string"]},updated_at:{type:["string"]},metadata:{type:["string","null"]},version:{type:["string","null"]}},required:["id","key","title","type","source","created_at","updated_at"],additionalProperties:!1},s={type:"object",properties:{id:{type:"string",minLength:1},key:{type:"string",minLength:1},title:{type:"string",minLength:1},type:{type:"string",minLength:1},summary:{type:["string","null"]},source:{type:"string",minLength:1},source_file:{type:["string","null"]},created_at:{type:["string"]},updated_at:{type:["string"]},metadata:{type:["string","object","null"]},version:{type:["string","null"]},revision:{type:["string","null"]},direction:{type:"string",enum:["outgoing","incoming"]},relation_field:{type:"string",minLength:1}},required:["id","key","title","type","source","direction","relation_field","created_at","updated_at"],additionalProperties:!1};export{r as entityDatabaseSchema,i as entityRelationDatabaseSchema,n as relatedEntityDatabaseSchema,s as relatedEntityQueryRowDatabaseSchema};
@@ -100,8 +100,6 @@ export declare const entitiesRelationsDtoSchema: {
100
100
  };
101
101
  export type EntityRelationDtoSchema = FromSchema<typeof entityRelationDtoSchema>;
102
102
  export type EntitiesRelationsDtoSchema = FromSchema<typeof entitiesRelationsDtoSchema>;
103
- export type EntityDtoSchema = EntityBaseFileSchema & {
104
- revision?: string;
105
- };
103
+ export type EntityDtoSchema = EntityBaseFileSchema;
106
104
  export type EntityAttributesDtoSchema = FromSchema<typeof entityAttributesDtoSchema>;
107
105
  //# sourceMappingURL=dto-schemas.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import type { EntityLinkFileSchema, EntityContactFileSchema } from '@redocly/config';
2
+ export type EntitySource = 'file' | 'remote';
2
3
  export type EntityRelationReadModelSchema = {
3
4
  id: string;
4
5
  organizationId: string;
@@ -10,6 +11,7 @@ export type EntityRelationReadModelSchema = {
10
11
  targetVersion?: string | null;
11
12
  targetRevision?: string | null;
12
13
  type: string;
14
+ lastSeenRunId: string | null;
13
15
  createdAt: string;
14
16
  updatedAt: string;
15
17
  object: 'catalogEntityRelation';
@@ -27,7 +29,7 @@ export type EntityReadModelSchema = {
27
29
  git?: string[] | null;
28
30
  contact?: EntityContactFileSchema | null;
29
31
  links?: EntityLinkFileSchema[] | null;
30
- source: string;
32
+ source: EntitySource;
31
33
  sourceFile?: string | null;
32
34
  version: string;
33
35
  revision: string;
@@ -1,12 +1,27 @@
1
1
  import type { SpecType } from '../types/extractors';
2
2
  import type { CatalogEntitiesService } from '../database/catalog-entities-service';
3
+ import type { FileType } from '../../../persistence/file-hashes/types.js';
3
4
  type Extractor = SpecType | 'fs';
4
5
  type CountOfEntitiesByType = Record<string, number>;
6
+ export type PendingFileHashConfirmation = {
7
+ fileType: FileType;
8
+ filePath: string;
9
+ hash: string;
10
+ };
5
11
  export declare class CatalogDataCollector {
6
12
  #private;
13
+ resetForRun(): void;
7
14
  addExtractor(extractor: Extractor): void;
8
15
  increaseSkippedFilesCount(): void;
9
16
  increaseProcessedFilesCount(): void;
17
+ markSourceFileAsChanged(sourceFile: string): void;
18
+ markSourceFileAsRemoved(sourceFile: string): void;
19
+ getPublishDelta(): {
20
+ changedSourceFiles: string[];
21
+ removedSourceFiles: string[];
22
+ };
23
+ markFileHashPendingConfirmation(entry: PendingFileHashConfirmation): void;
24
+ getFileHashConfirmations(): PendingFileHashConfirmation[];
10
25
  getCatalogEntitiesData(catalogEntitiesService: CatalogEntitiesService): Promise<{
11
26
  totalEntitiesCount: number | "error";
12
27
  countOfEntitiesByType: "error" | CountOfEntitiesByType;
@@ -1 +1 @@
1
- const i="error";class n{#t=new Set;#e;#s;#i=0;#a=0;addExtractor(t){this.#t.add(t)}increaseSkippedFilesCount(){this.#i++}increaseProcessedFilesCount(){this.#a++}async getCatalogEntitiesData(t){this.#e=this.#o(t),this.#s=this.#n(t);const[s,e]=await Promise.allSettled([this.#e,this.#s]);return{totalEntitiesCount:s.status==="fulfilled"?s.value:i,countOfEntitiesByType:e.status==="fulfilled"?e.value:i,extractors:Array.from(this.#t),totalFilesSkippedByHash:this.#i,totalProcessedFiles:this.#a}}async#o(t){return(await t.getEntities({paginationParams:{limit:1,filter:{field:"is_deleted",operator:"equal",value:!1}}})).page.total}async#n(t){return(await t.getEntitiesCountByTypes()).reduce((e,{type:a,count:o})=>(e[a]=o,e),{})}}const r=new n;export{n as CatalogDataCollector,r as catalogDataCollector};
1
+ const s="error";class o{#e=new Set;#t;#i;#s=0;#a=0;#n=new Set;#o=new Set;#r=new Map;resetForRun(){this.#e.clear(),this.#t=void 0,this.#i=void 0,this.#s=0,this.#a=0,this.#n.clear(),this.#o.clear(),this.#r.clear()}addExtractor(e){this.#e.add(e)}increaseSkippedFilesCount(){this.#s++}increaseProcessedFilesCount(){this.#a++}markSourceFileAsChanged(e){this.#n.add(e)}markSourceFileAsRemoved(e){this.#o.add(e)}getPublishDelta(){return{changedSourceFiles:Array.from(this.#n),removedSourceFiles:Array.from(this.#o)}}markFileHashPendingConfirmation(e){const t=`${e.fileType}::${e.filePath}`;this.#r.set(t,e)}getFileHashConfirmations(){return Array.from(this.#r.values())}async getCatalogEntitiesData(e){this.#t=this.#l(e),this.#i=this.#u(e);const[t,i]=await Promise.allSettled([this.#t,this.#i]);return{totalEntitiesCount:t.status==="fulfilled"?t.value:s,countOfEntitiesByType:i.status==="fulfilled"?i.value:s,extractors:Array.from(this.#e),totalFilesSkippedByHash:this.#s,totalProcessedFiles:this.#a}}async#l(e){return(await e.getEntities({paginationParams:{limit:1,filter:{field:"is_deleted",operator:"equal",value:!1}}})).page.total}async#u(e){return(await e.getEntitiesCountByTypes()).reduce((i,{type:a,count:n})=>(i[a]=n,i),{})}}const l=new o;export{o as CatalogDataCollector,l as catalogDataCollector};
@@ -18,6 +18,7 @@ export declare class HashManager {
18
18
  getByPath(filePath: string): Promise<FileHashReadModelSchema | null>;
19
19
  upsert(fileType: FileType, filePath: string, hash: string, status: FileHashStatus): Promise<string | null>;
20
20
  getAllOutdated(fileType: FileType): Promise<FileHashReadModelSchema[]>;
21
+ getStatusSnapshot(fileType: FileType): Promise<Map<string, FileHashStatus>>;
21
22
  computeFileHash(fileContent: unknown): Promise<string>;
22
23
  deleteFileHashes(filter: Filter): Promise<boolean>;
23
24
  }
@@ -1 +1 @@
1
- import{FileHashStatus as s}from"../../../persistence/file-hashes/types.js";import{sha1 as i}from"../../../utils/crypto/sha1.js";class u{#t;constructor(t){this.#t=t}async markAllAsOutdated(t){return await this.#t.updateFileHashes(s.OUTDATED,{field:"file_type",operator:"equal",value:t})}async getByPath(t){return await this.#t.getByPath(t)}async upsert(t,e,a,r){return await this.#t.upsertFileHash({fileType:t,filePath:e,hash:a,status:r})}async getAllOutdated(t){return await this.#t.getAllOutdated(t)}async computeFileHash(t){try{return i(JSON.stringify(t))}catch{throw new Error(`Error computing hash for file content: ${JSON.stringify(t)}`)}}async deleteFileHashes(t){return await this.#t.deleteFileHashes(t)}}export{u as HashManager};
1
+ import{FileHashStatus as r}from"../../../persistence/file-hashes/types.js";import{sha1 as i}from"../../../utils/crypto/sha1.js";class o{#t;constructor(t){this.#t=t}async markAllAsOutdated(t){return await this.#t.updateFileHashes(r.OUTDATED,{field:"file_type",operator:"equal",value:t})}async getByPath(t){return await this.#t.getByPath(t)}async upsert(t,s,e,a){return await this.#t.upsertFileHash({fileType:t,filePath:s,hash:e,status:a})}async getAllOutdated(t){return await this.#t.getAllOutdated(t)}async getStatusSnapshot(t){const s=await this.#t.getAllByFileType(t),e=new Map;for(const a of s)e.set(a.filePath,a.status);return e}async computeFileHash(t){try{return i(JSON.stringify(t))}catch{throw new Error(`Error computing hash for file content: ${JSON.stringify(t)}`)}}async deleteFileHashes(t){return await this.#t.deleteFileHashes(t)}}export{o as HashManager};
@@ -0,0 +1,18 @@
1
+ import type { CacheService } from '../../../persistence/cache/services/cache-service.js';
2
+ /**
3
+ * Persists a hash of the catalog RBAC config between builds and detects when it changes
4
+ * (so entity extraction can re-run attribute work tied to team membership).
5
+ */
6
+ export declare class RbacConfigHashCache {
7
+ private readonly cache;
8
+ constructor(cache: CacheService);
9
+ /**
10
+ * Compares the current RBAC config to the last build, updates the cache when the hash
11
+ * differs, and returns whether RBAC **changed** since a prior run. First run
12
+ * (`previousHash` missing) returns `rbacConfigChanged: false` but still stores the current hash.
13
+ */
14
+ syncAndDetectChange(rbacConfig: unknown): Promise<{
15
+ rbacConfigChanged: boolean;
16
+ }>;
17
+ }
18
+ //# sourceMappingURL=rbac-config-hash-cache.d.ts.map
@@ -0,0 +1 @@
1
+ import{sha1 as h}from"../../../utils/crypto/sha1.js";import{CATALOG_META_CACHE_NAMESPACE as s,RBAC_CONFIG_HASH_CACHE_KEY as t}from"../../../constants/plugins/catalog-entities.js";class C{cache;constructor(a){this.cache=a}async syncAndDetectChange(a){const c=h(JSON.stringify(a??null)),e=(await this.cache.get({key:t,namespace:s}))?.hash??null,n=e!==null&&e!==c;return e!==c&&await this.cache.set({key:t,namespace:s,value:{hash:c}}),{rbacConfigChanged:n}}}export{C as RbacConfigHashCache};
@@ -1 +1 @@
1
- import{writeFileSync as S}from"node:fs";import b from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as O}from"../../constants/common.js";import{envConfig as C}from"../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as R}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as $}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as E,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 _}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as p}from"../../../config/product-gates.js";import{isAsyncapiDoc as I}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as j}from"../../../cli/telemetry/helpers/trace-step.js";import{getBilledCatalogBuildPagesCount as q}from"./utils/get-billed-catalog-build-pages-count.js";async function Z(){return{id:"entitlements",async afterRoutesCreated(g,u){await j("build.plugin.entitlements",async t=>{const i=$.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):R(e)?a.push(e):await _(e,u)?n.push(e):await I(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 w=(await u.getConfig()).entitiesCatalog,T=E(g.getAllRoutes()),{total:y,duplicatedEntitiesPages:F}=await q(g.serverOutDir,w),h=T+y;t?.setAttribute("totalBilledPages",h.toString());const P=C.REDOCLY_METADATA_OUTPUT_FOLDER;P&&(o.info("Save total pages..."),S(b.join(P,O),JSON.stringify({totalPages:h,duplicatedEntitiesPages:F},null)))})}}}export{Z as entitlementsPlugin};
1
+ import{writeFileSync as F}from"node:fs";import S from"path";import{PAGE_COUNT_OUTPUT_FILE_NAME as b}from"../../constants/common.js";import{envConfig as O}from"../../config/env-config.js";import{logger as o}from"../../tools/notifiers/logger.js";import{isReactPage as C}from"../../utils/content/is-react-page.js";import{EntitlementsProvider as R}from"../../entitlements/entitlements-provider.js";import{getBilledPagesCount as $,isPathIgnored as M}from"../../utils/index.js";import{isGraphqlDoc as k}from"../graphql-docs/is-graphql-doc.js";import{isMarkdownPage as D}from"../markdown/is-markdown-page.js";import{isOpenapiDoc as E}from"../openapi-docs/is-openapi-doc.js";import{PRODUCT_NAME as p}from"../../../config/product-gates.js";import{isAsyncapiDoc as _}from"../asyncapi-docs/is-asyncapi-doc.js";import{telemetryTraceStep as I}from"../../../cli/telemetry/helpers/trace-step.js";import{getBilledCatalogBuildPagesCount as j}from"./utils/get-billed-catalog-build-pages-count.js";async function X(){return{id:"entitlements",async afterRoutesCreated(g,u){await I("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 c}from"../../../config/env-config.js";import{PRODUCT_NAME as s}from"../../../../config/product-gates.js";import{CatalogEntitiesService as g}from"../../catalog-entities/database/catalog-entities-service.js";async function E(t,a){const i=s.toLowerCase().includes("realm")||s.toLowerCase().includes("reef"),e=c.NEW_CATALOG_ENABLED??!1;if(!i||!e)return{total:0,duplicatedEntitiesPages:0};const o=await g.getInstance({baseDbDir:t}),{total:n}=await o.getEntitiesCount("file"),{total:l}=await o.getDuplicatedEntitiesCount(),r=u(a);return{total:n+r,duplicatedEntitiesPages:l}}function u(t){return t?.show?Object.entries(t.catalogs??{}).filter(([i,e])=>!e?.hide).length:0}export{E as getBilledCatalogBuildPagesCount};
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{McpServer as p}from"@redocly/mcp-typescript-sdk/server/mcp.js";import{StreamableHTTPServerTransport as l}from"@redocly/mcp-typescript-sdk/server/streamableHttp.js";import{logger as m}from"../../../tools/notifiers/logger.js";import{mcpToolWorkers as f,MCP_TOOL_WORKER_KEY as d}from"../../../workers/mcp-tool-worker-pool.js";async function k({name:e,tools:a,context:n}){const o=new p({name:e,version:new Date().toISOString().slice(0,10)},{capabilities:{logging:{}}}),s=new l({sessionIdGenerator:void 0});for(const r of a){const i=async(t,c)=>{m.info(`MCP tool called: ${r.name}`);const u={toolName:r.name,args:t,context:g(n),extra:I(c)};return await f.exec(d,[u],{timeout:6e4})};o.tool(r.name,r.description,r.schema,i)}return await o.connect(s),{server:o,transport:s,cleanup:async()=>{s.close()}}}function I(e){return{sessionId:e.sessionId,authInfo:e.authInfo,requestId:e.requestId,requestInfo:e.requestInfo,_meta:e._meta}}function g(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{k as createDocsMcpServer};
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 p}from"../../../../client/mcp-tool-handlers-entry.js";async function w(o){s.initialize();const{toolName:e,args:c,context:a,extra:l}=o;try{const r=p[e];if(!r)throw new Error(`Unknown MCP tool: ${e}`);const{default:i}=await r(),n=i[e];if(!n)throw new Error(`MCP tool module does not export a handler for "${e}". Expected \`export default { '${e}': handler }\`.`);const t=await n(c,a,l);if(!f(t))throw new Error(`MCP tool "${e}" returned an invalid result.`);return t.isError?s.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:e,message:`${t.content.map(({text:d})=>d).join(" ")}`,stack:""}]):s.sendMcpToolCalledMessage([{object:"mcp_server",server_type:"docs",tool:e}]),t}catch(r){throw s.sendMcpErrorMessage([{object:"mcp_server",server_type:"docs",tool:e,message:r instanceof Error?r.message:String(r),stack:r instanceof Error&&r.stack||""}]),r}}function f(o){return!o||typeof o!="object"?!1:Array.isArray(o.content)}export{w as executeMcpTool};
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,6 +1,6 @@
1
- import type { DatabaseClient } from '../../../../../providers/database/client.js';
2
- import type { DatabaseScorecardsConfig, DatabaseScorecardsConfigDto } from '../../../../../providers/database/databases/main-sqlite/schemas/scorecards-config-table.js';
3
- export declare class ScorecardsConfigLocalRepository {
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-local-repository.d.ts.map
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 l}from"../../../providers/database/database-connection-factory.js";import{BaseRepository as d}from"../../../providers/database/base-repository.js";import{shaHex as h}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{ScorecardsConfigLocalRepository as p}from"./repositories/local/scorecards-config-local-repository.js";class o extends d{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 l.create("main-local",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 h(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
+ 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 h,access as N,rm as X,constants as $}from"fs/promises";import{REDOCLY_ROUTE_RBAC as A,REDOCLY_TEAMS_RBAC as S}from"@redocly/config";import b from"picomatch";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 n}from"../../../tools/notifiers/logger.js";import{shaHexShort as H}from"../../../utils/crypto/sha-hex-short.js";import{promiseMapLimit as P}from"../../../utils/async/promise-map-limit.js";import{getLlmsTxtMdPathBySlug as U}from"../../../utils/llmstxt/get-llms-txt-md-path-by-slug.js";import{validateLLMsTxtConfig as Y,generateLLMsTxt as k}from"../llmstxt/index.js";import{ensureDir as D}from"../../../utils/fs.js";import{isResourcePubliclyAccessible as J,extractTeamsFromScopeItems as K,getRbacTeamsListForResource as V}from"../../../utils/rbac.js";const C=20,d="llms.txt:";async function Lt(t,o,{embeddingsEnabled:i,llmstxtEnabled:s}){const a=p.join(t.outdir,B);if(!s){try{await N(a,$.W_OK),await X(a)}catch{}if(!i)return}i&&n.info("Preparing semantic documents..."),s&&n.info(`${d} Generating llms.txt files...`);const L=n.startTiming(),c=n.startTiming(),f=t.getGlobalConfig("seo"),m=f?.llmstxt,T=p.resolve(t.outdir,j),u=t.getConfig(),w=u.access?.rbac??{},F=t.getAllRoutes(),y=u?.l10n?.defaultLocale||u?.i18n?.defaultLocale||_,M=(m?.excludeFiles||[]).map(e=>b(e)),x=[];if(await P(F,C,async e=>{if(e.excludeFromSearch)return;const O=await W(e,t),R=await q(e,O,o,t);if(R){if(s)for(const r of await R.getLLMsTxts()){if(M.some(l=>l(r.fsPath)))continue;const g=p.join(t.outdir,U(r.slug));D(g),await h(g,r.content),r.includeInLLMsTxt&&J(e,u)&&x.push(r)}if(i&&G.isBuildMode){const r=await R.getSearchDocuments();if(!r.length)return;const g=z(e,w),l=e.versions?.find(({active:I})=>I),E=l&&{folder:l.folderId,label:l.label,default:l.default};await Q(r,e.fsPath,g,T,y,E)}}}),i&&n.infoTime(c,"Semantic search documents prepared"),x.length)try{Y(m);const e=await k(x,m,{title:f?.title,description:f?.description},o);D(a),await h(a,e),n.infoTime(L,`${d} files generated`)}catch(e){n.error(`${d} Failed to generate llms.txt file. ${e.message}`)}}async function W(t,o){return t.getStaticData?t.getStaticData(t,o):{}}async function q(t,o,i,s){if(t.getAiDocumentsStore)return t.getAiDocumentsStore(t,{...o,[S]:t[S],[A]:t[A]},i,s)}function z(t,o){const i=K(t?.[S]);return i?.length?i:V(t,o)}async function Q(t,o,i,s,a,L){await P(t,C,async c=>{const f=`${H(o+c.content)}.json`,m=D(p.join(s,f)),T=c.locale===_?a:c.locale;v(m)||await h(m,JSON.stringify({...c,rbacTeams:i||[],version:L,locale:T}),"utf-8")})}export{Lt as prepareSemanticDocuments};
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 o}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 s=(await this.databaseClient.client.run(a`
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
- `)).rows[0]?.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===o||!i.SQLD_REMOTE_DATABASE_AUTH_TOKEN}export{n as BaseRepository};
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};
@@ -17,7 +17,7 @@ export declare class DatabaseClient {
17
17
  static init(config: Config, options?: DatabaseClientInitOptions): Promise<DatabaseClient>;
18
18
  migrate(prefix: string, suffix?: string): Promise<void>;
19
19
  close(): Promise<void>;
20
- sync(): Promise<import("@libsql/client").Replicated>;
20
+ sync(): Promise<void>;
21
21
  }
22
22
  export {};
23
23
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- import e from"node:path";import{sql as s}from"drizzle-orm";import{drizzle as o}from"drizzle-orm/libsql";import{migrate as c}from"drizzle-orm/libsql/migrator";import{TransactionsManager as l}from"./transactions-manager.js";class r{dbClient;#t;constructor(t,i){this.dbClient=o(i(t)),this.#t=new l(this.dbClient)}get transactionsManager(){return this.#t}get client(){return this.#t.tx??this.dbClient}static async init(t,i){const{createClient:a}=await import("@libsql/client"),n=new r(t,a);return i?.runWithPragmaWalWriteOptimization&&await n.dbClient.run(s.raw("PRAGMA journal_mode = WAL;")),n}async migrate(t,i=""){await c(this.dbClient,{migrationsFolder:e.join(t,"migrations",i)})}async close(){this.dbClient.$client.close()}async sync(){return this.dbClient.$client.sync()}}export{r as DatabaseClient};
1
+ import a from"node:path";import{sql as o}from"drizzle-orm";import{drizzle as c}from"drizzle-orm/libsql";import{migrate as l}from"drizzle-orm/libsql/migrator";import{TransactionsManager as m}from"./transactions-manager.js";class e{dbClient;#t;constructor(t,i){this.dbClient=c(i(t)),this.#t=new m(this.dbClient)}get transactionsManager(){return this.#t}get client(){return this.#t.tx??this.dbClient}static async init(t,i){const{createClient:s}=await import("@libsql/client"),r=new e(t,s);return i?.runWithPragmaWalWriteOptimization&&await r.dbClient.run(o.raw("PRAGMA journal_mode = WAL;")),r}async migrate(t,i=""){await l(this.dbClient,{migrationsFolder:a.join(t,"migrations",i)})}async close(){this.dbClient.$client.close()}async sync(){try{await this.dbClient.$client.sync()}catch(t){if(d(t))return;throw t}}}function d(n){if(!(n instanceof Error))return!1;const t=n.message.toLowerCase();return t.includes("syncnotsupported")&&(t.includes('("file")')||t.includes('"file"'))}export{e as DatabaseClient};
@@ -1,10 +1,5 @@
1
- export declare const CATALOG_LOCAL_DATABASE_NAME = "catalog-local.sqlite";
2
- export declare const CATALOG_LOCAL_DATABASE_FOLDER = "catalog-local";
3
- export declare const CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER = "catalog-sqlite";
4
- export declare const MAIN_LOCAL_DATABASE_NAME = "main-local.sqlite";
5
- export declare const MAIN_LOCAL_DATABASE_FOLDER = "main-local";
6
- export declare const MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER = "main-sqlite";
7
- export declare const SQLD_REMOTE_DATABASE_NAME = "sqld-remote.sqlite";
8
- export declare const SQLD_REMOTE_DATABASE_FOLDER = "sqld-remote";
9
- export declare const SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER = "sqld-sqlite";
1
+ export declare const SQLITE_DATABASE_NAME = "db.sqlite";
2
+ export declare const SQLITE_DATABASE_MIGRATIONS_FOLDER = "sqlite-db";
3
+ export declare const SQLITE_LOCAL_DATABASE_FOLDER = "local-sqlite-db";
4
+ export declare const SQLITE_REMOTE_DATABASE_FOLDER = "remote-sqlite-db";
10
5
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- const A="catalog-local.sqlite",_="catalog-local",t="catalog-sqlite",o="main-local.sqlite",E="main-local",L="main-sqlite",O="sqld-remote.sqlite",l="sqld-remote",e="sqld-sqlite";export{_ as CATALOG_LOCAL_DATABASE_FOLDER,t as CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER,A as CATALOG_LOCAL_DATABASE_NAME,E as MAIN_LOCAL_DATABASE_FOLDER,L as MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER,o as MAIN_LOCAL_DATABASE_NAME,l as SQLD_REMOTE_DATABASE_FOLDER,e as SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER,O as SQLD_REMOTE_DATABASE_NAME};
1
+ const A="db.sqlite",E="sqlite-db",t="local-sqlite-db",_="remote-sqlite-db";export{E as SQLITE_DATABASE_MIGRATIONS_FOLDER,A as SQLITE_DATABASE_NAME,t as SQLITE_LOCAL_DATABASE_FOLDER,_ as SQLITE_REMOTE_DATABASE_FOLDER};
@@ -1 +1 @@
1
- import c from"node:path";import{cpSync as m,existsSync as t,mkdirSync as l}from"node:fs";import{logger as i}from"../../tools/notifiers/logger.js";import{fromCurrentDir as d}from"../../utils/index.js";import{PACKAGE_NAME as f}from"../../../config/product-gates.js";const u=["@redocly/realm","@redocly/reef","@redocly/redoc-reef","@redocly/revel-reef"],D=r=>{if(!u.includes(f))return;const s=["catalog-sqlite","main-sqlite","sqld-sqlite"];for(const o of s){const e=d(import.meta.url,`./databases/${o}/migrations`),a=c.join(r.serverOutDir,"migrations",o);if(!t(e)){i.warn(`Migrations folder not found at ${e}`);continue}t(r.serverOutDir)||l(r.serverOutDir,{recursive:!0});try{m(e,a,{recursive:!0})}catch(n){i.error("Failed to copy migrations folder: %s",n)}}};export{D as copyMigrationsFolder};
1
+ import a from"node:path";import{cpSync as c,existsSync as t,mkdirSync as m}from"node:fs";import{logger as i}from"../../tools/notifiers/logger.js";import{fromCurrentDir as d}from"../../utils/index.js";import{PACKAGE_NAME as f}from"../../../config/product-gates.js";const l=["@redocly/realm","@redocly/reef","@redocly/redoc-reef","@redocly/revel-reef"],A=r=>{if(!l.includes(f))return;const o="sqlite-db",e=d(import.meta.url,`./databases/${o}/migrations`),s=a.join(r.serverOutDir,"migrations",o);if(!t(e)){i.warn(`Migrations folder not found at ${e}`);return}t(r.serverOutDir)||m(r.serverOutDir,{recursive:!0});try{c(e,s,{recursive:!0})}catch(n){i.error("Failed to copy migrations folder: %s",n)}};export{A as copyMigrationsFolder};
@@ -1,6 +1,6 @@
1
- import type { DatabaseConnection, DatabaseConnectionOptions, DatabaseName } from './types.js';
1
+ import type { DatabaseConnection, DatabaseConnectionOptions } from './types.js';
2
2
  export declare class DatabaseConnectionFactory {
3
3
  #private;
4
- static create(databaseName: DatabaseName, options: DatabaseConnectionOptions): Promise<DatabaseConnection | null>;
4
+ static create(options: DatabaseConnectionOptions): Promise<DatabaseConnection | null>;
5
5
  }
6
6
  //# sourceMappingURL=database-connection-factory.d.ts.map
@@ -1 +1 @@
1
- import{logger as i}from"../../tools/notifiers/logger.js";import{envConfig as e}from"../../config/env-config.js";import{CATALOG_LOCAL_DATABASE_FOLDER as A,CATALOG_LOCAL_DATABASE_MIGRATIONS_FOLDER as s,CATALOG_LOCAL_DATABASE_NAME as _,MAIN_LOCAL_DATABASE_FOLDER as l,MAIN_LOCAL_DATABASE_MIGRATIONS_FOLDER as c,MAIN_LOCAL_DATABASE_NAME as E,SQLD_REMOTE_DATABASE_FOLDER as D,SQLD_REMOTE_DATABASE_MIGRATIONS_FOLDER as T,SQLD_REMOTE_DATABASE_NAME as L}from"./constants.js";import{LocalDatabaseInitializationStrategy as o,RemoteDatabaseInitializationStrategy as d}from"./database-initialization-strategy.js";import{DatabaseConnectionsManager as m}from"./database-connections-manager.js";import{SQLD_REMOTE_DATABASE_URL_NO_DEPLOYMENT_YET_VAR as O}from"../../constants/plugins/catalog-entities.js";class N{static async create(a,t){switch(a){case"main-local":return await this.#a(t);case"catalog-local":return await this.#t(t);case"sqld-remote":return await this.#e(t);default:return null}}static async#a(a){return await new o().initialize({...a,databaseName:E,additionalFolder:l,migrationsFolder:c})}static async#t(a){return await new o().initialize({...a,databaseName:_,additionalFolder:A,migrationsFolder:s})}static async#e(a){try{const t=e.SQLD_REMOTE_DATABASE_URL||a.sqldRemoteDatabaseUrl,n=t===O?void 0:t,r=e.SQLD_REMOTE_DATABASE_AUTH_TOKEN||a.sqldRemoteDatabaseAuthToken;return(!n||!r)&&!e.isDevelopMode?(i.warn("Your remote database is not initialized yet, please wait for production deployment."),null):await m.getConnection({config:{...a,databaseName:L,additionalFolder:D,migrationsFolder:T,syncUrl:n,authToken:e.SQLD_REMOTE_DATABASE_AUTH_TOKEN||a.sqldRemoteDatabaseAuthToken},strategy:new d})}catch(t){return i.error("Remote database connection initialization failed",t),null}}}export{N as DatabaseConnectionFactory};
1
+ import{logger as n}from"../../tools/notifiers/logger.js";import{envConfig as r}from"../../config/env-config.js";import{SQLITE_DATABASE_MIGRATIONS_FOLDER as o,SQLITE_LOCAL_DATABASE_FOLDER as c,SQLITE_REMOTE_DATABASE_FOLDER as l,SQLITE_DATABASE_NAME as i}from"./constants.js";import{DatabaseConnectionsManager as s}from"./database-connections-manager.js";import{SQLD_REMOTE_DATABASE_URL_NO_DEPLOYMENT_YET_VAR as T}from"../../constants/plugins/catalog-entities.js";class u{static async create(e){return this.#r(e)==="local"?await this.#t(e):await this.#a(e)}static async#t(e){return await s.getLocalConnection({...e,databaseName:i,additionalFolder:c,migrationsFolder:o})}static async#a(e){try{const{syncUrl:t,authToken:a}=this.#e(e);return!t||!a?(r.isDevelopMode||n.warn("Your remote database is not initialized yet, please wait for production deployment."),null):await s.getRemoteConnection({...e,databaseName:i,additionalFolder:l,migrationsFolder:o,syncUrl:t,authToken:a})}catch(t){return n.error("Remote database connection initialization failed",t),null}}static#r(e){if(e.databaseType)return e.databaseType;const{syncUrl:t,authToken:a}=this.#e(e);return t&&a?"remote":"local"}static#e(e){const t=r.SQLD_REMOTE_DATABASE_URL||e.sqldRemoteDatabaseUrl,a=r.SQLD_REMOTE_DATABASE_AUTH_TOKEN||e.sqldRemoteDatabaseAuthToken;return{syncUrl:this.#n(t),authToken:a}}static#n(e){return e===T?void 0:e}}export{u as DatabaseConnectionFactory};
@@ -1,12 +1,7 @@
1
- import type { DatabaseConnectionInitOptions, DatabaseConnection } from './types.js';
2
- import { type DatabaseInitializationStrategy } from './database-initialization-strategy.js';
3
- type GetConnectionParams<TConfig extends DatabaseConnectionInitOptions> = {
4
- config: TConfig;
5
- strategy: DatabaseInitializationStrategy;
6
- };
1
+ import type { DatabaseConnection, LocalDatabaseConnectionInitOptions, RemoteDatabaseConnectionInitOptions } from './types.js';
7
2
  export declare class DatabaseConnectionsManager {
8
3
  #private;
9
- static getConnection<TConfig extends DatabaseConnectionInitOptions>({ config, strategy, }: GetConnectionParams<TConfig>): Promise<DatabaseConnection | null>;
4
+ static getLocalConnection(config: LocalDatabaseConnectionInitOptions): Promise<DatabaseConnection | null>;
5
+ static getRemoteConnection(config: RemoteDatabaseConnectionInitOptions): Promise<DatabaseConnection | null>;
10
6
  }
11
- export {};
12
7
  //# sourceMappingURL=database-connections-manager.d.ts.map
@@ -1 +1 @@
1
- import{logger as o}from"../../tools/notifiers/logger.js";const n="_redocly_db_preconnect_cache_";class t{static get#t(){const e=globalThis;if(!e[n]){const i={connections:new Map,pendingConnections:new Map,failedConnections:new Set};e[n]=i}return e[n]}static get#c(){return t.#t.connections}static get#e(){return t.#t.failedConnections}static get#i(){return t.#t.pendingConnections}static async getConnection({config:e,strategy:i}){const r=t.#l(e),c=t.#c.get(r);return c||t.#r({config:e,key:r,strategy:i})}static#r=async({config:e,key:i,strategy:r})=>{let c=t.#i.get(i);c||(t.#e.has(i)&&o.warn("Error connecting to the database, retrying..."),c=t.#n(e,i,r),t.#i.set(i,c));try{return await c}catch(l){return o.error("Error connecting to the database",l),t.#e.add(i),null}finally{t.#i.delete(i)}};static#n=async(e,i,r)=>{const c=await r.initialize(e);return t.#c.set(i,c),t.#e.delete(i),c};static#l=e=>`${e.baseDbDir}/${e.additionalFolder}/${e.databaseName}`}export{t as DatabaseConnectionsManager};
1
+ import{logger as c}from"../../tools/notifiers/logger.js";import{SqldNotRunningError as y}from"./sqld-not-running-error.js";import{retryAsyncOperation as f}from"./utils/retry-async-operation.js";import{DatabasePathGenerator as h}from"./database-path-generator.js";import{DatabaseClient as w}from"./client.js";const m="_redocly_db_preconnect_cache_";class i{static get#t(){const t=globalThis;if(!t[m]){const n={connections:new Map,pendingConnections:new Map,failedConnections:new Set};t[m]=n}return t[m]}static get#i(){return i.#t.connections}static get#e(){return i.#t.failedConnections}static get#n(){return i.#t.pendingConnections}static async getLocalConnection(t){return i.#r(t,async()=>i.#a(t))}static async getRemoteConnection(t){return i.#r(t,async()=>i.#d(t))}static async#r(t,n){const e=i.#o(t),r=i.#i.get(e);if(r)if(r.client.dbClient.$client.closed)c.warn("Cached database client is closed. Reinitializing connection..."),i.#i.delete(e);else return r;return i.#l({key:e,initializer:n})}static#o=t=>{const n="syncUrl"in t&&typeof t.syncUrl=="string"?`|${t.syncUrl}`:"",e=t.additionalFolder??"";return`${t.baseDbDir}|${e}|${t.databaseName}${n}`};static async#l({key:t,initializer:n}){let e=i.#n.get(t);e||(i.#e.has(t)&&c.warn("Error connecting to the database, retrying..."),e=i.#s(t,n),i.#n.set(t,e));try{return await e}catch(r){return c.error("Error connecting to the database",r),i.#e.add(t),null}finally{i.#n.delete(t)}}static async#s(t,n){const e=await n();return i.#i.set(t,e),i.#e.delete(t),e}static async#a({removeExisting:t,baseDbDir:n,runWithPragmaWalWriteOptimization:e,databaseName:r,additionalFolder:a,migrationsFolder:d}){c.info("Initializing local database client...");const l=c.startTiming(),s=await i.#c({removeExisting:t,baseDbDir:n,databaseName:r,additionalFolder:a,migrationsFolder:d,runWithPragmaWalWriteOptimization:e});return c.infoTime(l,"Local database client initialized"),s}static async#d({removeExisting:t,baseDbDir:n,syncUrl:e,authToken:r,databaseName:a,additionalFolder:d,migrationsFolder:l}){c.info("Initializing remote database client...");const s=c.startTiming();return await f(async()=>{try{const o=await i.#c({removeExisting:t,baseDbDir:n,databaseName:a,additionalFolder:d,migrationsFolder:l,syncUrl:e,authToken:r});return c.infoTime(s,"Remote database client initialized"),o}catch(o){throw y.isSqldNotRunningError(o)?new y("SQLD server is not running yet, wait for production deployment",{cause:o}):o}},{maxRetries:3,retryStrategy:"exponential",delay:1e3,logger:c,messages:{retry:"Retrying remote database client initialization",maxRetriesReached:"Max retries reached, remote database client initialization failed"}})}static async#c({removeExisting:t,baseDbDir:n,databaseName:e,additionalFolder:r,migrationsFolder:a,runWithPragmaWalWriteOptimization:d,syncUrl:l,authToken:s}){const{databasePath:o}=await h.prepareDatabasePath({baseDir:n,databaseName:e,additionalFolder:r,removeExisting:t}),p=l&&s?{url:`file:${o}`,syncUrl:l,authToken:s}:{url:`file:${o}`},u=await w.init(p,{runWithPragmaWalWriteOptimization:d});return await u.migrate(n,a),{client:u,path:o}}}export{i as DatabaseConnectionsManager};
@@ -1 +1 @@
1
- import{logger as o}from"../../tools/notifiers/logger.js";import{envConfig as n}from"../../config/env-config.js";import{DatabaseConnectionFactory as i}from"./database-connection-factory.js";class t{static#t=!1;static async init(e){if(!(n.REDOCLY_INTERNAL_DEV||n.CI)&&!t.#t)try{await t.#e(e)==="PRECONNECTED"&&(t.#t=!0)}catch(r){o.error("Failed to preconnect to sqld remote database",r)}}static#e=async e=>await i.create("sqld-remote",{baseDbDir:e})?(o.info("Sqld remote database preconnected"),"PRECONNECTED"):(o.warn("Sqld remote database preconnect failed"),"NOT_PRECONNECTED")}export{t as DatabasePreconnectService};
1
+ import{logger as o}from"../../tools/notifiers/logger.js";import{envConfig as a}from"../../config/env-config.js";import{DatabaseConnectionFactory as i}from"./database-connection-factory.js";class t{static#t=!1;static async init(e){if(!(a.REDOCLY_INTERNAL_DEV||a.CI)&&!t.#t)try{await t.#e(e)==="PRECONNECTED"&&(t.#t=!0)}catch(r){o.error("Failed to preconnect to sqld remote database",r)}}static#e=async e=>await i.create({baseDbDir:e,databaseType:"remote"})?(o.info("Sqld remote database preconnected"),"PRECONNECTED"):(o.warn("Sqld remote database preconnect failed"),"NOT_PRECONNECTED")}export{t as DatabasePreconnectService};
@@ -0,0 +1,12 @@
1
+ type DrizzleDbCredentials = {
2
+ url: string;
3
+ authToken?: string;
4
+ };
5
+ declare const _default: {
6
+ schema: string;
7
+ out: string;
8
+ dialect: "turso";
9
+ dbCredentials: DrizzleDbCredentials;
10
+ };
11
+ export default _default;
12
+ //# sourceMappingURL=drizzle.config.d.ts.map
@@ -0,0 +1 @@
1
+ import{DatabasePathGenerator as a}from"../../database-path-generator";import{SQLITE_DATABASE_NAME as o,SQLITE_LOCAL_DATABASE_FOLDER as A}from"../../constants";const E="./dist/server/esbuild/cache/server",_="./src/server/providers/database/databases/sqlite-db/schemas/*",n="./src/server/providers/database/databases/sqlite-db/migrations",r="DRIZZLE_DB_TARGET",T=()=>process.env[r]==="remote"?"remote":"local",c=()=>`file:${a.generateDatabasePath({baseDir:E,databaseName:o,additionalFolder:A})}`,D=()=>{const s=T(),e=process.env.SQLD_REMOTE_DATABASE_URL,t=process.env.SQLD_REMOTE_DATABASE_AUTH_TOKEN;if(s==="remote"){if(!e||!t)throw new Error(`Remote DB selected (${r}=remote), but SQLD_REMOTE_DATABASE_URL or SQLD_REMOTE_DATABASE_AUTH_TOKEN is missing.`);return{url:e,authToken:t}}return{url:c()}};var S={schema:_,out:n,dialect:"turso",dbCredentials:D()};export{S as default};