spindb 0.37.2 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/dist/cli/bin.js +9 -0
  2. package/dist/cli/bin.js.map +1 -0
  3. package/dist/cli/commands/attach.js +102 -0
  4. package/dist/cli/commands/attach.js.map +1 -0
  5. package/dist/cli/commands/backup.js +197 -0
  6. package/dist/cli/commands/backup.js.map +1 -0
  7. package/dist/cli/commands/backups.js +190 -0
  8. package/dist/cli/commands/backups.js.map +1 -0
  9. package/dist/cli/commands/clone.js +119 -0
  10. package/dist/cli/commands/clone.js.map +1 -0
  11. package/dist/cli/commands/config.js +276 -0
  12. package/dist/cli/commands/config.js.map +1 -0
  13. package/dist/cli/commands/connect.js +559 -0
  14. package/dist/cli/commands/connect.js.map +1 -0
  15. package/dist/cli/commands/create.js +952 -0
  16. package/dist/cli/commands/create.js.map +1 -0
  17. package/dist/cli/commands/databases.js +485 -0
  18. package/dist/cli/commands/databases.js.map +1 -0
  19. package/dist/cli/commands/delete.js +106 -0
  20. package/dist/cli/commands/delete.js.map +1 -0
  21. package/dist/cli/commands/deps.js +238 -0
  22. package/dist/cli/commands/deps.js.map +1 -0
  23. package/dist/cli/commands/detach.js +81 -0
  24. package/dist/cli/commands/detach.js.map +1 -0
  25. package/dist/cli/commands/doctor.js +567 -0
  26. package/dist/cli/commands/doctor.js.map +1 -0
  27. package/dist/cli/commands/duckdb.js +207 -0
  28. package/dist/cli/commands/duckdb.js.map +1 -0
  29. package/dist/cli/commands/edit.js +524 -0
  30. package/dist/cli/commands/edit.js.map +1 -0
  31. package/dist/cli/commands/engines.js +1414 -0
  32. package/dist/cli/commands/engines.js.map +1 -0
  33. package/dist/cli/commands/export.js +383 -0
  34. package/dist/cli/commands/export.js.map +1 -0
  35. package/dist/cli/commands/info.js +270 -0
  36. package/dist/cli/commands/info.js.map +1 -0
  37. package/dist/cli/commands/list.js +215 -0
  38. package/dist/cli/commands/list.js.map +1 -0
  39. package/dist/cli/commands/logs.js +81 -0
  40. package/dist/cli/commands/logs.js.map +1 -0
  41. package/dist/cli/commands/menu/backup-handlers.js +1202 -0
  42. package/dist/cli/commands/menu/backup-handlers.js.map +1 -0
  43. package/dist/cli/commands/menu/container-handlers.js +1788 -0
  44. package/dist/cli/commands/menu/container-handlers.js.map +1 -0
  45. package/dist/cli/commands/menu/engine-handlers.js +235 -0
  46. package/dist/cli/commands/menu/engine-handlers.js.map +1 -0
  47. package/dist/cli/commands/menu/index.js +266 -0
  48. package/dist/cli/commands/menu/index.js.map +1 -0
  49. package/dist/cli/commands/menu/settings-handlers.js +320 -0
  50. package/dist/cli/commands/menu/settings-handlers.js.map +1 -0
  51. package/dist/cli/commands/menu/shared.js +13 -0
  52. package/dist/cli/commands/menu/shared.js.map +1 -0
  53. package/dist/cli/commands/menu/shell-handlers.js +1573 -0
  54. package/dist/cli/commands/menu/shell-handlers.js.map +1 -0
  55. package/dist/cli/commands/menu/sql-handlers.js +185 -0
  56. package/dist/cli/commands/menu/sql-handlers.js.map +1 -0
  57. package/dist/cli/commands/menu/update-handlers.js +322 -0
  58. package/dist/cli/commands/menu/update-handlers.js.map +1 -0
  59. package/dist/cli/commands/menu/validators.js +9 -0
  60. package/dist/cli/commands/menu/validators.js.map +1 -0
  61. package/dist/cli/commands/ports.js +166 -0
  62. package/dist/cli/commands/ports.js.map +1 -0
  63. package/dist/cli/commands/pull.js +166 -0
  64. package/dist/cli/commands/pull.js.map +1 -0
  65. package/dist/cli/commands/query.js +180 -0
  66. package/dist/cli/commands/query.js.map +1 -0
  67. package/dist/cli/commands/restore.js +428 -0
  68. package/dist/cli/commands/restore.js.map +1 -0
  69. package/dist/cli/commands/run.js +115 -0
  70. package/dist/cli/commands/run.js.map +1 -0
  71. package/dist/cli/commands/self-update.js +99 -0
  72. package/dist/cli/commands/self-update.js.map +1 -0
  73. package/dist/cli/commands/sqlite.js +207 -0
  74. package/dist/cli/commands/sqlite.js.map +1 -0
  75. package/dist/cli/commands/start.js +196 -0
  76. package/dist/cli/commands/start.js.map +1 -0
  77. package/dist/cli/commands/stop.js +182 -0
  78. package/dist/cli/commands/stop.js.map +1 -0
  79. package/dist/cli/commands/url.js +88 -0
  80. package/dist/cli/commands/url.js.map +1 -0
  81. package/dist/cli/commands/users.js +189 -0
  82. package/dist/cli/commands/users.js.map +1 -0
  83. package/dist/cli/commands/version.js +52 -0
  84. package/dist/cli/commands/version.js.map +1 -0
  85. package/dist/cli/commands/which.js +258 -0
  86. package/dist/cli/commands/which.js.map +1 -0
  87. package/dist/cli/constants.js +212 -0
  88. package/dist/cli/constants.js.map +1 -0
  89. package/dist/cli/helpers.js +1120 -0
  90. package/dist/cli/helpers.js.map +1 -0
  91. package/dist/cli/index.js +146 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/ui/prompts.js +1002 -0
  94. package/dist/cli/ui/prompts.js.map +1 -0
  95. package/dist/cli/ui/spinner.js +74 -0
  96. package/dist/cli/ui/spinner.js.map +1 -0
  97. package/dist/cli/ui/theme.js +99 -0
  98. package/dist/cli/ui/theme.js.map +1 -0
  99. package/dist/cli/utils/file-follower.js +79 -0
  100. package/dist/cli/utils/file-follower.js.map +1 -0
  101. package/dist/config/backup-formats.js +363 -0
  102. package/dist/config/backup-formats.js.map +1 -0
  103. package/dist/config/defaults.js +25 -0
  104. package/dist/config/defaults.js.map +1 -0
  105. package/dist/config/engine-defaults.js +303 -0
  106. package/dist/config/engine-defaults.js.map +1 -0
  107. package/dist/config/engines-registry.js +103 -0
  108. package/dist/config/engines-registry.js.map +1 -0
  109. package/dist/config/os-dependencies.js +767 -0
  110. package/dist/config/os-dependencies.js.map +1 -0
  111. package/dist/config/paths.js +156 -0
  112. package/dist/config/paths.js.map +1 -0
  113. package/dist/config/version.js +3 -0
  114. package/dist/config/version.js.map +1 -0
  115. package/dist/core/backup-restore.js +219 -0
  116. package/dist/core/backup-restore.js.map +1 -0
  117. package/dist/core/base-binary-manager.js +403 -0
  118. package/dist/core/base-binary-manager.js.map +1 -0
  119. package/dist/core/base-document-binary-manager.js +364 -0
  120. package/dist/core/base-document-binary-manager.js.map +1 -0
  121. package/dist/core/base-embedded-binary-manager.js +364 -0
  122. package/dist/core/base-embedded-binary-manager.js.map +1 -0
  123. package/dist/core/base-server-binary-manager.js +368 -0
  124. package/dist/core/base-server-binary-manager.js.map +1 -0
  125. package/dist/core/config-manager.js +495 -0
  126. package/dist/core/config-manager.js.map +1 -0
  127. package/dist/core/container-manager.js +609 -0
  128. package/dist/core/container-manager.js.map +1 -0
  129. package/dist/core/credential-generator.js +67 -0
  130. package/dist/core/credential-generator.js.map +1 -0
  131. package/dist/core/credential-manager.js +211 -0
  132. package/dist/core/credential-manager.js.map +1 -0
  133. package/dist/core/dblab-utils.js +105 -0
  134. package/dist/core/dblab-utils.js.map +1 -0
  135. package/dist/core/dependency-manager.js +359 -0
  136. package/dist/core/dependency-manager.js.map +1 -0
  137. package/dist/core/docker-exporter.js +1077 -0
  138. package/dist/core/docker-exporter.js.map +1 -0
  139. package/dist/core/error-handler.js +295 -0
  140. package/dist/core/error-handler.js.map +1 -0
  141. package/dist/core/fs-error-utils.js +74 -0
  142. package/dist/core/fs-error-utils.js.map +1 -0
  143. package/dist/core/homebrew-version-manager.js +280 -0
  144. package/dist/core/homebrew-version-manager.js.map +1 -0
  145. package/dist/core/hostdb-client.js +252 -0
  146. package/dist/core/hostdb-client.js.map +1 -0
  147. package/dist/core/hostdb-metadata.js +243 -0
  148. package/dist/core/hostdb-metadata.js.map +1 -0
  149. package/dist/core/hostdb-releases-factory.js +161 -0
  150. package/dist/core/hostdb-releases-factory.js.map +1 -0
  151. package/dist/core/library-env.js +88 -0
  152. package/dist/core/library-env.js.map +1 -0
  153. package/dist/core/pgweb-utils.js +53 -0
  154. package/dist/core/pgweb-utils.js.map +1 -0
  155. package/dist/core/platform-service.js +632 -0
  156. package/dist/core/platform-service.js.map +1 -0
  157. package/dist/core/port-manager.js +136 -0
  158. package/dist/core/port-manager.js.map +1 -0
  159. package/dist/core/process-manager.js +445 -0
  160. package/dist/core/process-manager.js.map +1 -0
  161. package/dist/core/pull-manager.js +418 -0
  162. package/dist/core/pull-manager.js.map +1 -0
  163. package/dist/core/query-parser.js +449 -0
  164. package/dist/core/query-parser.js.map +1 -0
  165. package/dist/core/spawn-utils.js +90 -0
  166. package/dist/core/spawn-utils.js.map +1 -0
  167. package/dist/core/start-with-retry.js +90 -0
  168. package/dist/core/start-with-retry.js.map +1 -0
  169. package/dist/core/test-cleanup.js +85 -0
  170. package/dist/core/test-cleanup.js.map +1 -0
  171. package/dist/core/tls-generator.js +84 -0
  172. package/dist/core/tls-generator.js.map +1 -0
  173. package/dist/core/transaction-manager.js +139 -0
  174. package/dist/core/transaction-manager.js.map +1 -0
  175. package/dist/core/update-manager.js +241 -0
  176. package/dist/core/update-manager.js.map +1 -0
  177. package/dist/core/version-migration.js +260 -0
  178. package/dist/core/version-migration.js.map +1 -0
  179. package/dist/core/version-utils.js +91 -0
  180. package/dist/core/version-utils.js.map +1 -0
  181. package/dist/engines/base-engine.js +179 -0
  182. package/dist/engines/base-engine.js.map +1 -0
  183. package/dist/engines/clickhouse/backup.js +289 -0
  184. package/dist/engines/clickhouse/backup.js.map +1 -0
  185. package/dist/engines/clickhouse/binary-manager.js +145 -0
  186. package/dist/engines/clickhouse/binary-manager.js.map +1 -0
  187. package/dist/engines/clickhouse/binary-urls.js +100 -0
  188. package/dist/engines/clickhouse/binary-urls.js.map +1 -0
  189. package/dist/engines/clickhouse/cli-utils.js +143 -0
  190. package/dist/engines/clickhouse/cli-utils.js.map +1 -0
  191. package/dist/engines/clickhouse/hostdb-releases.js +24 -0
  192. package/dist/engines/clickhouse/hostdb-releases.js.map +1 -0
  193. package/dist/engines/clickhouse/index.js +1077 -0
  194. package/dist/engines/clickhouse/index.js.map +1 -0
  195. package/dist/engines/clickhouse/restore.js +335 -0
  196. package/dist/engines/clickhouse/restore.js.map +1 -0
  197. package/dist/engines/clickhouse/version-maps.js +83 -0
  198. package/dist/engines/clickhouse/version-maps.js.map +1 -0
  199. package/dist/engines/clickhouse/version-validator.js +133 -0
  200. package/dist/engines/clickhouse/version-validator.js.map +1 -0
  201. package/dist/engines/cockroachdb/backup.js +261 -0
  202. package/dist/engines/cockroachdb/backup.js.map +1 -0
  203. package/dist/engines/cockroachdb/binary-manager.js +33 -0
  204. package/dist/engines/cockroachdb/binary-manager.js.map +1 -0
  205. package/dist/engines/cockroachdb/binary-urls.js +33 -0
  206. package/dist/engines/cockroachdb/binary-urls.js.map +1 -0
  207. package/dist/engines/cockroachdb/cli-utils.js +338 -0
  208. package/dist/engines/cockroachdb/cli-utils.js.map +1 -0
  209. package/dist/engines/cockroachdb/hostdb-releases.js +21 -0
  210. package/dist/engines/cockroachdb/hostdb-releases.js.map +1 -0
  211. package/dist/engines/cockroachdb/index.js +1016 -0
  212. package/dist/engines/cockroachdb/index.js.map +1 -0
  213. package/dist/engines/cockroachdb/restore.js +323 -0
  214. package/dist/engines/cockroachdb/restore.js.map +1 -0
  215. package/dist/engines/cockroachdb/version-maps.js +37 -0
  216. package/dist/engines/cockroachdb/version-maps.js.map +1 -0
  217. package/dist/engines/couchdb/api-client.js +64 -0
  218. package/dist/engines/couchdb/api-client.js.map +1 -0
  219. package/dist/engines/couchdb/backup.js +90 -0
  220. package/dist/engines/couchdb/backup.js.map +1 -0
  221. package/dist/engines/couchdb/binary-manager.js +62 -0
  222. package/dist/engines/couchdb/binary-manager.js.map +1 -0
  223. package/dist/engines/couchdb/binary-urls.js +92 -0
  224. package/dist/engines/couchdb/binary-urls.js.map +1 -0
  225. package/dist/engines/couchdb/hostdb-releases.js +21 -0
  226. package/dist/engines/couchdb/hostdb-releases.js.map +1 -0
  227. package/dist/engines/couchdb/index.js +1043 -0
  228. package/dist/engines/couchdb/index.js.map +1 -0
  229. package/dist/engines/couchdb/restore.js +198 -0
  230. package/dist/engines/couchdb/restore.js.map +1 -0
  231. package/dist/engines/couchdb/version-maps.js +67 -0
  232. package/dist/engines/couchdb/version-maps.js.map +1 -0
  233. package/dist/engines/couchdb/version-validator.js +88 -0
  234. package/dist/engines/couchdb/version-validator.js.map +1 -0
  235. package/dist/engines/duckdb/binary-manager.js +33 -0
  236. package/dist/engines/duckdb/binary-manager.js.map +1 -0
  237. package/{engines/duckdb/binary-urls.ts → dist/engines/duckdb/binary-urls.js} +11 -16
  238. package/dist/engines/duckdb/binary-urls.js.map +1 -0
  239. package/dist/engines/duckdb/hostdb-releases.js +21 -0
  240. package/dist/engines/duckdb/hostdb-releases.js.map +1 -0
  241. package/dist/engines/duckdb/index.js +594 -0
  242. package/dist/engines/duckdb/index.js.map +1 -0
  243. package/dist/engines/duckdb/registry.js +265 -0
  244. package/dist/engines/duckdb/registry.js.map +1 -0
  245. package/dist/engines/duckdb/scanner.js +12 -0
  246. package/dist/engines/duckdb/scanner.js.map +1 -0
  247. package/dist/engines/duckdb/version-maps.js +67 -0
  248. package/dist/engines/duckdb/version-maps.js.map +1 -0
  249. package/dist/engines/duckdb/version-validator.js +62 -0
  250. package/dist/engines/duckdb/version-validator.js.map +1 -0
  251. package/dist/engines/ferretdb/backup.js +170 -0
  252. package/dist/engines/ferretdb/backup.js.map +1 -0
  253. package/dist/engines/ferretdb/binary-manager.js +765 -0
  254. package/dist/engines/ferretdb/binary-manager.js.map +1 -0
  255. package/dist/engines/ferretdb/binary-urls.js +135 -0
  256. package/dist/engines/ferretdb/binary-urls.js.map +1 -0
  257. package/dist/engines/ferretdb/index.js +1517 -0
  258. package/dist/engines/ferretdb/index.js.map +1 -0
  259. package/dist/engines/ferretdb/restore.js +310 -0
  260. package/dist/engines/ferretdb/restore.js.map +1 -0
  261. package/{engines/ferretdb/version-maps.ts → dist/engines/ferretdb/version-maps.js} +62 -79
  262. package/dist/engines/ferretdb/version-maps.js.map +1 -0
  263. package/dist/engines/file-based-utils.js +184 -0
  264. package/dist/engines/file-based-utils.js.map +1 -0
  265. package/dist/engines/index.js +124 -0
  266. package/dist/engines/index.js.map +1 -0
  267. package/dist/engines/influxdb/api-client.js +54 -0
  268. package/dist/engines/influxdb/api-client.js.map +1 -0
  269. package/dist/engines/influxdb/backup.js +119 -0
  270. package/dist/engines/influxdb/backup.js.map +1 -0
  271. package/dist/engines/influxdb/binary-manager.js +87 -0
  272. package/dist/engines/influxdb/binary-manager.js.map +1 -0
  273. package/dist/engines/influxdb/binary-urls.js +56 -0
  274. package/dist/engines/influxdb/binary-urls.js.map +1 -0
  275. package/dist/engines/influxdb/hostdb-releases.js +21 -0
  276. package/dist/engines/influxdb/hostdb-releases.js.map +1 -0
  277. package/dist/engines/influxdb/index.js +962 -0
  278. package/dist/engines/influxdb/index.js.map +1 -0
  279. package/dist/engines/influxdb/restore.js +329 -0
  280. package/dist/engines/influxdb/restore.js.map +1 -0
  281. package/dist/engines/influxdb/version-maps.js +64 -0
  282. package/dist/engines/influxdb/version-maps.js.map +1 -0
  283. package/dist/engines/influxdb/version-validator.js +109 -0
  284. package/dist/engines/influxdb/version-validator.js.map +1 -0
  285. package/dist/engines/mariadb/backup.js +178 -0
  286. package/dist/engines/mariadb/backup.js.map +1 -0
  287. package/dist/engines/mariadb/binary-manager.js +33 -0
  288. package/dist/engines/mariadb/binary-manager.js.map +1 -0
  289. package/{engines/mariadb/binary-urls.ts → dist/engines/mariadb/binary-urls.js} +38 -55
  290. package/dist/engines/mariadb/binary-urls.js.map +1 -0
  291. package/dist/engines/mariadb/hostdb-releases.js +21 -0
  292. package/dist/engines/mariadb/hostdb-releases.js.map +1 -0
  293. package/dist/engines/mariadb/index.js +1011 -0
  294. package/dist/engines/mariadb/index.js.map +1 -0
  295. package/dist/engines/mariadb/restore.js +322 -0
  296. package/dist/engines/mariadb/restore.js.map +1 -0
  297. package/dist/engines/mariadb/version-maps.js +63 -0
  298. package/dist/engines/mariadb/version-maps.js.map +1 -0
  299. package/dist/engines/mariadb/version-validator.js +143 -0
  300. package/dist/engines/mariadb/version-validator.js.map +1 -0
  301. package/dist/engines/meilisearch/api-client.js +50 -0
  302. package/dist/engines/meilisearch/api-client.js.map +1 -0
  303. package/dist/engines/meilisearch/backup.js +167 -0
  304. package/dist/engines/meilisearch/backup.js.map +1 -0
  305. package/dist/engines/meilisearch/binary-manager.js +31 -0
  306. package/dist/engines/meilisearch/binary-manager.js.map +1 -0
  307. package/dist/engines/meilisearch/binary-urls.js +56 -0
  308. package/dist/engines/meilisearch/binary-urls.js.map +1 -0
  309. package/dist/engines/meilisearch/hostdb-releases.js +21 -0
  310. package/dist/engines/meilisearch/hostdb-releases.js.map +1 -0
  311. package/dist/engines/meilisearch/index.js +992 -0
  312. package/dist/engines/meilisearch/index.js.map +1 -0
  313. package/dist/engines/meilisearch/restore.js +167 -0
  314. package/dist/engines/meilisearch/restore.js.map +1 -0
  315. package/dist/engines/meilisearch/version-maps.js +67 -0
  316. package/dist/engines/meilisearch/version-maps.js.map +1 -0
  317. package/dist/engines/meilisearch/version-validator.js +109 -0
  318. package/dist/engines/meilisearch/version-validator.js.map +1 -0
  319. package/dist/engines/mongodb/backup.js +109 -0
  320. package/dist/engines/mongodb/backup.js.map +1 -0
  321. package/dist/engines/mongodb/binary-manager.js +36 -0
  322. package/dist/engines/mongodb/binary-manager.js.map +1 -0
  323. package/dist/engines/mongodb/binary-urls.js +46 -0
  324. package/dist/engines/mongodb/binary-urls.js.map +1 -0
  325. package/dist/engines/mongodb/cli-utils.js +131 -0
  326. package/dist/engines/mongodb/cli-utils.js.map +1 -0
  327. package/dist/engines/mongodb/hostdb-releases.js +77 -0
  328. package/dist/engines/mongodb/hostdb-releases.js.map +1 -0
  329. package/dist/engines/mongodb/index.js +873 -0
  330. package/dist/engines/mongodb/index.js.map +1 -0
  331. package/dist/engines/mongodb/restore.js +276 -0
  332. package/dist/engines/mongodb/restore.js.map +1 -0
  333. package/dist/engines/mongodb/version-maps.js +79 -0
  334. package/dist/engines/mongodb/version-maps.js.map +1 -0
  335. package/dist/engines/mongodb/version-validator.js +133 -0
  336. package/dist/engines/mongodb/version-validator.js.map +1 -0
  337. package/dist/engines/mysql/backup.js +210 -0
  338. package/dist/engines/mysql/backup.js.map +1 -0
  339. package/dist/engines/mysql/binary-detection.js +325 -0
  340. package/dist/engines/mysql/binary-detection.js.map +1 -0
  341. package/dist/engines/mysql/binary-manager.js +30 -0
  342. package/dist/engines/mysql/binary-manager.js.map +1 -0
  343. package/dist/engines/mysql/binary-urls.js +87 -0
  344. package/dist/engines/mysql/binary-urls.js.map +1 -0
  345. package/{engines/mysql/hostdb-releases.ts → dist/engines/mysql/hostdb-releases.js} +20 -23
  346. package/dist/engines/mysql/hostdb-releases.js.map +1 -0
  347. package/dist/engines/mysql/index.js +1066 -0
  348. package/dist/engines/mysql/index.js.map +1 -0
  349. package/dist/engines/mysql/restore.js +361 -0
  350. package/dist/engines/mysql/restore.js.map +1 -0
  351. package/dist/engines/mysql/version-maps.js +79 -0
  352. package/dist/engines/mysql/version-maps.js.map +1 -0
  353. package/dist/engines/mysql/version-validator.js +266 -0
  354. package/dist/engines/mysql/version-validator.js.map +1 -0
  355. package/dist/engines/postgresql/backup.js +118 -0
  356. package/dist/engines/postgresql/backup.js.map +1 -0
  357. package/dist/engines/postgresql/binary-manager.js +85 -0
  358. package/dist/engines/postgresql/binary-manager.js.map +1 -0
  359. package/dist/engines/postgresql/binary-urls.js +80 -0
  360. package/dist/engines/postgresql/binary-urls.js.map +1 -0
  361. package/dist/engines/postgresql/hostdb-releases.js +21 -0
  362. package/dist/engines/postgresql/hostdb-releases.js.map +1 -0
  363. package/dist/engines/postgresql/index.js +852 -0
  364. package/dist/engines/postgresql/index.js.map +1 -0
  365. package/dist/engines/postgresql/remote-version.js +109 -0
  366. package/dist/engines/postgresql/remote-version.js.map +1 -0
  367. package/dist/engines/postgresql/restore.js +254 -0
  368. package/dist/engines/postgresql/restore.js.map +1 -0
  369. package/dist/engines/postgresql/version-maps.js +73 -0
  370. package/dist/engines/postgresql/version-maps.js.map +1 -0
  371. package/dist/engines/postgresql/version-validator.js +286 -0
  372. package/dist/engines/postgresql/version-validator.js.map +1 -0
  373. package/dist/engines/qdrant/api-client.js +50 -0
  374. package/dist/engines/qdrant/api-client.js.map +1 -0
  375. package/dist/engines/qdrant/backup.js +115 -0
  376. package/dist/engines/qdrant/backup.js.map +1 -0
  377. package/dist/engines/qdrant/binary-manager.js +31 -0
  378. package/dist/engines/qdrant/binary-manager.js.map +1 -0
  379. package/dist/engines/qdrant/binary-urls.js +92 -0
  380. package/dist/engines/qdrant/binary-urls.js.map +1 -0
  381. package/dist/engines/qdrant/cli-utils.js +39 -0
  382. package/dist/engines/qdrant/cli-utils.js.map +1 -0
  383. package/dist/engines/qdrant/hostdb-releases.js +21 -0
  384. package/dist/engines/qdrant/hostdb-releases.js.map +1 -0
  385. package/dist/engines/qdrant/index.js +1002 -0
  386. package/dist/engines/qdrant/index.js.map +1 -0
  387. package/dist/engines/qdrant/restore.js +154 -0
  388. package/dist/engines/qdrant/restore.js.map +1 -0
  389. package/dist/engines/qdrant/version-maps.js +67 -0
  390. package/dist/engines/qdrant/version-maps.js.map +1 -0
  391. package/dist/engines/qdrant/version-validator.js +109 -0
  392. package/dist/engines/qdrant/version-validator.js.map +1 -0
  393. package/dist/engines/questdb/backup.js +191 -0
  394. package/dist/engines/questdb/backup.js.map +1 -0
  395. package/dist/engines/questdb/binary-manager.js +247 -0
  396. package/dist/engines/questdb/binary-manager.js.map +1 -0
  397. package/dist/engines/questdb/binary-urls.js +27 -0
  398. package/dist/engines/questdb/binary-urls.js.map +1 -0
  399. package/dist/engines/questdb/hostdb-releases.js +21 -0
  400. package/dist/engines/questdb/hostdb-releases.js.map +1 -0
  401. package/dist/engines/questdb/index.js +814 -0
  402. package/dist/engines/questdb/index.js.map +1 -0
  403. package/dist/engines/questdb/restore.js +202 -0
  404. package/dist/engines/questdb/restore.js.map +1 -0
  405. package/dist/engines/questdb/version-maps.js +33 -0
  406. package/dist/engines/questdb/version-maps.js.map +1 -0
  407. package/dist/engines/questdb/version-validator.js +99 -0
  408. package/dist/engines/questdb/version-validator.js.map +1 -0
  409. package/dist/engines/redis/backup.js +292 -0
  410. package/dist/engines/redis/backup.js.map +1 -0
  411. package/dist/engines/redis/binary-manager.js +32 -0
  412. package/dist/engines/redis/binary-manager.js.map +1 -0
  413. package/dist/engines/redis/binary-urls.js +96 -0
  414. package/dist/engines/redis/binary-urls.js.map +1 -0
  415. package/dist/engines/redis/cli-utils.js +38 -0
  416. package/dist/engines/redis/cli-utils.js.map +1 -0
  417. package/dist/engines/redis/hostdb-releases.js +21 -0
  418. package/dist/engines/redis/hostdb-releases.js.map +1 -0
  419. package/dist/engines/redis/index.js +1263 -0
  420. package/dist/engines/redis/index.js.map +1 -0
  421. package/dist/engines/redis/restore.js +338 -0
  422. package/dist/engines/redis/restore.js.map +1 -0
  423. package/dist/engines/redis/version-maps.js +70 -0
  424. package/dist/engines/redis/version-maps.js.map +1 -0
  425. package/dist/engines/redis/version-validator.js +109 -0
  426. package/dist/engines/redis/version-validator.js.map +1 -0
  427. package/dist/engines/sqlite/binary-manager.js +39 -0
  428. package/dist/engines/sqlite/binary-manager.js.map +1 -0
  429. package/{engines/sqlite/binary-urls.ts → dist/engines/sqlite/binary-urls.js} +11 -16
  430. package/dist/engines/sqlite/binary-urls.js.map +1 -0
  431. package/dist/engines/sqlite/hostdb-releases.js +21 -0
  432. package/dist/engines/sqlite/hostdb-releases.js.map +1 -0
  433. package/dist/engines/sqlite/index.js +493 -0
  434. package/dist/engines/sqlite/index.js.map +1 -0
  435. package/dist/engines/sqlite/registry.js +163 -0
  436. package/dist/engines/sqlite/registry.js.map +1 -0
  437. package/dist/engines/sqlite/scanner.js +12 -0
  438. package/dist/engines/sqlite/scanner.js.map +1 -0
  439. package/dist/engines/sqlite/version-maps.js +57 -0
  440. package/dist/engines/sqlite/version-maps.js.map +1 -0
  441. package/dist/engines/surrealdb/backup.js +97 -0
  442. package/dist/engines/surrealdb/backup.js.map +1 -0
  443. package/dist/engines/surrealdb/binary-manager.js +33 -0
  444. package/dist/engines/surrealdb/binary-manager.js.map +1 -0
  445. package/dist/engines/surrealdb/binary-urls.js +33 -0
  446. package/dist/engines/surrealdb/binary-urls.js.map +1 -0
  447. package/dist/engines/surrealdb/cli-utils.js +147 -0
  448. package/dist/engines/surrealdb/cli-utils.js.map +1 -0
  449. package/dist/engines/surrealdb/hostdb-releases.js +21 -0
  450. package/dist/engines/surrealdb/hostdb-releases.js.map +1 -0
  451. package/dist/engines/surrealdb/index.js +1022 -0
  452. package/dist/engines/surrealdb/index.js.map +1 -0
  453. package/dist/engines/surrealdb/restore.js +224 -0
  454. package/dist/engines/surrealdb/restore.js.map +1 -0
  455. package/dist/engines/surrealdb/version-maps.js +36 -0
  456. package/dist/engines/surrealdb/version-maps.js.map +1 -0
  457. package/dist/engines/tigerbeetle/backup.js +36 -0
  458. package/dist/engines/tigerbeetle/backup.js.map +1 -0
  459. package/dist/engines/tigerbeetle/binary-manager.js +72 -0
  460. package/dist/engines/tigerbeetle/binary-manager.js.map +1 -0
  461. package/dist/engines/tigerbeetle/binary-urls.js +49 -0
  462. package/dist/engines/tigerbeetle/binary-urls.js.map +1 -0
  463. package/dist/engines/tigerbeetle/hostdb-releases.js +21 -0
  464. package/dist/engines/tigerbeetle/hostdb-releases.js.map +1 -0
  465. package/dist/engines/tigerbeetle/index.js +559 -0
  466. package/dist/engines/tigerbeetle/index.js.map +1 -0
  467. package/dist/engines/tigerbeetle/restore.js +91 -0
  468. package/dist/engines/tigerbeetle/restore.js.map +1 -0
  469. package/{engines/tigerbeetle/version-maps.ts → dist/engines/tigerbeetle/version-maps.js} +22 -31
  470. package/dist/engines/tigerbeetle/version-maps.js.map +1 -0
  471. package/dist/engines/tigerbeetle/version-validator.js +108 -0
  472. package/dist/engines/tigerbeetle/version-validator.js.map +1 -0
  473. package/dist/engines/typedb/backup.js +129 -0
  474. package/dist/engines/typedb/backup.js.map +1 -0
  475. package/dist/engines/typedb/binary-manager.js +151 -0
  476. package/dist/engines/typedb/binary-manager.js.map +1 -0
  477. package/dist/engines/typedb/binary-urls.js +33 -0
  478. package/dist/engines/typedb/binary-urls.js.map +1 -0
  479. package/dist/engines/typedb/cli-utils.js +163 -0
  480. package/dist/engines/typedb/cli-utils.js.map +1 -0
  481. package/dist/engines/typedb/hostdb-releases.js +21 -0
  482. package/dist/engines/typedb/hostdb-releases.js.map +1 -0
  483. package/dist/engines/typedb/index.js +1003 -0
  484. package/dist/engines/typedb/index.js.map +1 -0
  485. package/dist/engines/typedb/restore.js +279 -0
  486. package/dist/engines/typedb/restore.js.map +1 -0
  487. package/dist/engines/typedb/version-maps.js +40 -0
  488. package/dist/engines/typedb/version-maps.js.map +1 -0
  489. package/dist/engines/typedb/version-validator.js +103 -0
  490. package/dist/engines/typedb/version-validator.js.map +1 -0
  491. package/dist/engines/valkey/backup.js +292 -0
  492. package/dist/engines/valkey/backup.js.map +1 -0
  493. package/dist/engines/valkey/binary-manager.js +33 -0
  494. package/dist/engines/valkey/binary-manager.js.map +1 -0
  495. package/dist/engines/valkey/binary-urls.js +98 -0
  496. package/dist/engines/valkey/binary-urls.js.map +1 -0
  497. package/dist/engines/valkey/cli-utils.js +38 -0
  498. package/dist/engines/valkey/cli-utils.js.map +1 -0
  499. package/dist/engines/valkey/hostdb-releases.js +21 -0
  500. package/dist/engines/valkey/hostdb-releases.js.map +1 -0
  501. package/dist/engines/valkey/index.js +1257 -0
  502. package/dist/engines/valkey/index.js.map +1 -0
  503. package/dist/engines/valkey/restore.js +340 -0
  504. package/dist/engines/valkey/restore.js.map +1 -0
  505. package/dist/engines/valkey/version-maps.js +70 -0
  506. package/dist/engines/valkey/version-maps.js.map +1 -0
  507. package/dist/engines/valkey/version-validator.js +112 -0
  508. package/dist/engines/valkey/version-validator.js.map +1 -0
  509. package/dist/engines/weaviate/api-client.js +50 -0
  510. package/dist/engines/weaviate/api-client.js.map +1 -0
  511. package/dist/engines/weaviate/backup.js +95 -0
  512. package/dist/engines/weaviate/backup.js.map +1 -0
  513. package/dist/engines/weaviate/binary-manager.js +58 -0
  514. package/dist/engines/weaviate/binary-manager.js.map +1 -0
  515. package/dist/engines/weaviate/binary-urls.js +92 -0
  516. package/dist/engines/weaviate/binary-urls.js.map +1 -0
  517. package/dist/engines/weaviate/cli-utils.js +39 -0
  518. package/dist/engines/weaviate/cli-utils.js.map +1 -0
  519. package/dist/engines/weaviate/hostdb-releases.js +21 -0
  520. package/dist/engines/weaviate/hostdb-releases.js.map +1 -0
  521. package/dist/engines/weaviate/index.js +871 -0
  522. package/dist/engines/weaviate/index.js.map +1 -0
  523. package/dist/engines/weaviate/restore.js +185 -0
  524. package/dist/engines/weaviate/restore.js.map +1 -0
  525. package/dist/engines/weaviate/version-maps.js +67 -0
  526. package/dist/engines/weaviate/version-maps.js.map +1 -0
  527. package/dist/engines/weaviate/version-validator.js +109 -0
  528. package/dist/engines/weaviate/version-validator.js.map +1 -0
  529. package/dist/types/index.js +102 -0
  530. package/dist/types/index.js.map +1 -0
  531. package/package.json +12 -9
  532. package/bin/cli.js +0 -68
  533. package/cli/bin.ts +0 -10
  534. package/cli/commands/attach.ts +0 -139
  535. package/cli/commands/backup.ts +0 -290
  536. package/cli/commands/backups.ts +0 -247
  537. package/cli/commands/clone.ts +0 -159
  538. package/cli/commands/config.ts +0 -367
  539. package/cli/commands/connect.ts +0 -684
  540. package/cli/commands/create.ts +0 -1201
  541. package/cli/commands/databases.ts +0 -630
  542. package/cli/commands/delete.ts +0 -133
  543. package/cli/commands/deps.ts +0 -342
  544. package/cli/commands/detach.ts +0 -107
  545. package/cli/commands/doctor.ts +0 -689
  546. package/cli/commands/duckdb.ts +0 -273
  547. package/cli/commands/edit.ts +0 -683
  548. package/cli/commands/engines.ts +0 -1914
  549. package/cli/commands/export.ts +0 -544
  550. package/cli/commands/info.ts +0 -340
  551. package/cli/commands/list.ts +0 -284
  552. package/cli/commands/logs.ts +0 -102
  553. package/cli/commands/menu/backup-handlers.ts +0 -1571
  554. package/cli/commands/menu/container-handlers.ts +0 -2288
  555. package/cli/commands/menu/engine-handlers.ts +0 -355
  556. package/cli/commands/menu/index.ts +0 -342
  557. package/cli/commands/menu/settings-handlers.ts +0 -365
  558. package/cli/commands/menu/shared.ts +0 -23
  559. package/cli/commands/menu/shell-handlers.ts +0 -1811
  560. package/cli/commands/menu/sql-handlers.ts +0 -231
  561. package/cli/commands/menu/update-handlers.ts +0 -378
  562. package/cli/commands/menu/validators.ts +0 -8
  563. package/cli/commands/ports.ts +0 -211
  564. package/cli/commands/pull.ts +0 -223
  565. package/cli/commands/query.ts +0 -241
  566. package/cli/commands/restore.ts +0 -587
  567. package/cli/commands/run.ts +0 -178
  568. package/cli/commands/self-update.ts +0 -121
  569. package/cli/commands/sqlite.ts +0 -273
  570. package/cli/commands/start.ts +0 -218
  571. package/cli/commands/stop.ts +0 -241
  572. package/cli/commands/url.ts +0 -104
  573. package/cli/commands/users.ts +0 -264
  574. package/cli/commands/version.ts +0 -55
  575. package/cli/commands/which.ts +0 -290
  576. package/cli/constants.ts +0 -233
  577. package/cli/helpers.ts +0 -1593
  578. package/cli/index.ts +0 -162
  579. package/cli/ui/prompts.ts +0 -1525
  580. package/cli/ui/spinner.ts +0 -88
  581. package/cli/ui/theme.ts +0 -128
  582. package/cli/utils/file-follower.ts +0 -93
  583. package/config/backup-formats.ts +0 -446
  584. package/config/defaults.ts +0 -56
  585. package/config/engine-defaults.ts +0 -336
  586. package/config/engines-registry.ts +0 -150
  587. package/config/engines.schema.json +0 -135
  588. package/config/os-dependencies.ts +0 -888
  589. package/config/paths.ts +0 -200
  590. package/core/backup-restore.ts +0 -330
  591. package/core/base-binary-manager.ts +0 -562
  592. package/core/base-document-binary-manager.ts +0 -523
  593. package/core/base-embedded-binary-manager.ts +0 -547
  594. package/core/base-server-binary-manager.ts +0 -523
  595. package/core/config-manager.ts +0 -652
  596. package/core/container-manager.ts +0 -787
  597. package/core/credential-generator.ts +0 -93
  598. package/core/credential-manager.ts +0 -259
  599. package/core/dblab-utils.ts +0 -113
  600. package/core/dependency-manager.ts +0 -512
  601. package/core/docker-exporter.ts +0 -1345
  602. package/core/error-handler.ts +0 -419
  603. package/core/fs-error-utils.ts +0 -82
  604. package/core/homebrew-version-manager.ts +0 -352
  605. package/core/hostdb-client.ts +0 -344
  606. package/core/hostdb-metadata.ts +0 -350
  607. package/core/hostdb-releases-factory.ts +0 -237
  608. package/core/library-env.ts +0 -118
  609. package/core/pgweb-utils.ts +0 -62
  610. package/core/platform-service.ts +0 -829
  611. package/core/port-manager.ts +0 -165
  612. package/core/process-manager.ts +0 -576
  613. package/core/pull-manager.ts +0 -511
  614. package/core/query-parser.ts +0 -514
  615. package/core/spawn-utils.ts +0 -122
  616. package/core/start-with-retry.ts +0 -130
  617. package/core/test-cleanup.ts +0 -108
  618. package/core/tls-generator.ts +0 -116
  619. package/core/transaction-manager.ts +0 -158
  620. package/core/update-manager.ts +0 -308
  621. package/core/version-migration.ts +0 -346
  622. package/core/version-utils.ts +0 -104
  623. package/engines/base-engine.ts +0 -340
  624. package/engines/clickhouse/README.md +0 -231
  625. package/engines/clickhouse/backup.ts +0 -398
  626. package/engines/clickhouse/binary-manager.ts +0 -201
  627. package/engines/clickhouse/binary-urls.ts +0 -125
  628. package/engines/clickhouse/cli-utils.ts +0 -176
  629. package/engines/clickhouse/hostdb-releases.ts +0 -30
  630. package/engines/clickhouse/index.ts +0 -1345
  631. package/engines/clickhouse/restore.ts +0 -466
  632. package/engines/clickhouse/version-maps.ts +0 -95
  633. package/engines/clickhouse/version-validator.ts +0 -154
  634. package/engines/cockroachdb/README.md +0 -170
  635. package/engines/cockroachdb/backup.ts +0 -376
  636. package/engines/cockroachdb/binary-manager.ts +0 -45
  637. package/engines/cockroachdb/binary-urls.ts +0 -40
  638. package/engines/cockroachdb/cli-utils.ts +0 -384
  639. package/engines/cockroachdb/hostdb-releases.ts +0 -26
  640. package/engines/cockroachdb/index.ts +0 -1276
  641. package/engines/cockroachdb/restore.ts +0 -455
  642. package/engines/cockroachdb/version-maps.ts +0 -42
  643. package/engines/couchdb/README.md +0 -257
  644. package/engines/couchdb/api-client.ts +0 -81
  645. package/engines/couchdb/backup.ts +0 -137
  646. package/engines/couchdb/binary-manager.ts +0 -86
  647. package/engines/couchdb/binary-urls.ts +0 -115
  648. package/engines/couchdb/hostdb-releases.ts +0 -23
  649. package/engines/couchdb/index.ts +0 -1429
  650. package/engines/couchdb/restore.ts +0 -290
  651. package/engines/couchdb/version-maps.ts +0 -78
  652. package/engines/couchdb/version-validator.ts +0 -111
  653. package/engines/duckdb/README.md +0 -154
  654. package/engines/duckdb/binary-manager.ts +0 -45
  655. package/engines/duckdb/hostdb-releases.ts +0 -23
  656. package/engines/duckdb/index.ts +0 -749
  657. package/engines/duckdb/registry.ts +0 -303
  658. package/engines/duckdb/scanner.ts +0 -22
  659. package/engines/duckdb/version-maps.ts +0 -78
  660. package/engines/duckdb/version-validator.ts +0 -78
  661. package/engines/ferretdb/README.md +0 -262
  662. package/engines/ferretdb/backup.ts +0 -173
  663. package/engines/ferretdb/binary-manager.ts +0 -1095
  664. package/engines/ferretdb/binary-urls.ts +0 -183
  665. package/engines/ferretdb/index.ts +0 -1907
  666. package/engines/ferretdb/restore.ts +0 -357
  667. package/engines/file-based-utils.ts +0 -262
  668. package/engines/index.ts +0 -131
  669. package/engines/influxdb/README.md +0 -180
  670. package/engines/influxdb/api-client.ts +0 -64
  671. package/engines/influxdb/backup.ts +0 -160
  672. package/engines/influxdb/binary-manager.ts +0 -110
  673. package/engines/influxdb/binary-urls.ts +0 -69
  674. package/engines/influxdb/hostdb-releases.ts +0 -23
  675. package/engines/influxdb/index.ts +0 -1272
  676. package/engines/influxdb/restore.ts +0 -417
  677. package/engines/influxdb/version-maps.ts +0 -75
  678. package/engines/influxdb/version-validator.ts +0 -128
  679. package/engines/mariadb/README.md +0 -141
  680. package/engines/mariadb/backup.ts +0 -233
  681. package/engines/mariadb/binary-manager.ts +0 -45
  682. package/engines/mariadb/hostdb-releases.ts +0 -23
  683. package/engines/mariadb/index.ts +0 -1300
  684. package/engines/mariadb/restore.ts +0 -447
  685. package/engines/mariadb/version-maps.ts +0 -72
  686. package/engines/mariadb/version-validator.ts +0 -181
  687. package/engines/meilisearch/README.md +0 -255
  688. package/engines/meilisearch/api-client.ts +0 -61
  689. package/engines/meilisearch/backup.ts +0 -233
  690. package/engines/meilisearch/binary-manager.ts +0 -43
  691. package/engines/meilisearch/binary-urls.ts +0 -69
  692. package/engines/meilisearch/hostdb-releases.ts +0 -26
  693. package/engines/meilisearch/index.ts +0 -1292
  694. package/engines/meilisearch/restore.ts +0 -219
  695. package/engines/meilisearch/version-maps.ts +0 -78
  696. package/engines/meilisearch/version-validator.ts +0 -128
  697. package/engines/mongodb/README.md +0 -162
  698. package/engines/mongodb/backup.ts +0 -127
  699. package/engines/mongodb/binary-manager.ts +0 -48
  700. package/engines/mongodb/binary-urls.ts +0 -63
  701. package/engines/mongodb/cli-utils.ts +0 -171
  702. package/engines/mongodb/hostdb-releases.ts +0 -91
  703. package/engines/mongodb/index.ts +0 -1118
  704. package/engines/mongodb/restore.ts +0 -361
  705. package/engines/mongodb/version-maps.ts +0 -91
  706. package/engines/mongodb/version-validator.ts +0 -160
  707. package/engines/mysql/README.md +0 -142
  708. package/engines/mysql/backup.ts +0 -270
  709. package/engines/mysql/binary-detection.ts +0 -408
  710. package/engines/mysql/binary-manager.ts +0 -42
  711. package/engines/mysql/binary-urls.ts +0 -104
  712. package/engines/mysql/index.ts +0 -1361
  713. package/engines/mysql/restore.ts +0 -500
  714. package/engines/mysql/version-maps.ts +0 -91
  715. package/engines/mysql/version-validator.ts +0 -369
  716. package/engines/postgresql/README.md +0 -158
  717. package/engines/postgresql/backup.ts +0 -151
  718. package/engines/postgresql/binary-manager.ts +0 -114
  719. package/engines/postgresql/binary-urls.ts +0 -99
  720. package/engines/postgresql/hostdb-releases.ts +0 -26
  721. package/engines/postgresql/index.ts +0 -1143
  722. package/engines/postgresql/remote-version.ts +0 -161
  723. package/engines/postgresql/restore.ts +0 -342
  724. package/engines/postgresql/version-maps.ts +0 -83
  725. package/engines/postgresql/version-validator.ts +0 -413
  726. package/engines/qdrant/README.md +0 -222
  727. package/engines/qdrant/api-client.ts +0 -61
  728. package/engines/qdrant/backup.ts +0 -165
  729. package/engines/qdrant/binary-manager.ts +0 -43
  730. package/engines/qdrant/binary-urls.ts +0 -115
  731. package/engines/qdrant/cli-utils.ts +0 -43
  732. package/engines/qdrant/hostdb-releases.ts +0 -23
  733. package/engines/qdrant/index.ts +0 -1312
  734. package/engines/qdrant/restore.ts +0 -203
  735. package/engines/qdrant/version-maps.ts +0 -78
  736. package/engines/qdrant/version-validator.ts +0 -128
  737. package/engines/questdb/README.md +0 -334
  738. package/engines/questdb/backup.ts +0 -220
  739. package/engines/questdb/binary-manager.ts +0 -310
  740. package/engines/questdb/binary-urls.ts +0 -34
  741. package/engines/questdb/hostdb-releases.ts +0 -23
  742. package/engines/questdb/index.ts +0 -1023
  743. package/engines/questdb/restore.ts +0 -260
  744. package/engines/questdb/version-maps.ts +0 -37
  745. package/engines/questdb/version-validator.ts +0 -121
  746. package/engines/redis/README.md +0 -173
  747. package/engines/redis/backup.ts +0 -389
  748. package/engines/redis/binary-manager.ts +0 -44
  749. package/engines/redis/binary-urls.ts +0 -117
  750. package/engines/redis/cli-utils.ts +0 -42
  751. package/engines/redis/hostdb-releases.ts +0 -23
  752. package/engines/redis/index.ts +0 -1583
  753. package/engines/redis/restore.ts +0 -443
  754. package/engines/redis/version-maps.ts +0 -81
  755. package/engines/redis/version-validator.ts +0 -131
  756. package/engines/sqlite/README.md +0 -162
  757. package/engines/sqlite/binary-manager.ts +0 -52
  758. package/engines/sqlite/hostdb-releases.ts +0 -23
  759. package/engines/sqlite/index.ts +0 -641
  760. package/engines/sqlite/registry.ts +0 -198
  761. package/engines/sqlite/scanner.ts +0 -22
  762. package/engines/sqlite/version-maps.ts +0 -64
  763. package/engines/surrealdb/README.md +0 -218
  764. package/engines/surrealdb/backup.ts +0 -131
  765. package/engines/surrealdb/binary-manager.ts +0 -45
  766. package/engines/surrealdb/binary-urls.ts +0 -40
  767. package/engines/surrealdb/cli-utils.ts +0 -173
  768. package/engines/surrealdb/hostdb-releases.ts +0 -23
  769. package/engines/surrealdb/index.ts +0 -1246
  770. package/engines/surrealdb/restore.ts +0 -302
  771. package/engines/surrealdb/version-maps.ts +0 -41
  772. package/engines/tigerbeetle/README.md +0 -61
  773. package/engines/tigerbeetle/backup.ts +0 -49
  774. package/engines/tigerbeetle/binary-manager.ts +0 -95
  775. package/engines/tigerbeetle/binary-urls.ts +0 -62
  776. package/engines/tigerbeetle/hostdb-releases.ts +0 -26
  777. package/engines/tigerbeetle/index.ts +0 -746
  778. package/engines/tigerbeetle/restore.ts +0 -130
  779. package/engines/tigerbeetle/version-validator.ts +0 -126
  780. package/engines/typedb/backup.ts +0 -167
  781. package/engines/typedb/binary-manager.ts +0 -200
  782. package/engines/typedb/binary-urls.ts +0 -40
  783. package/engines/typedb/cli-utils.ts +0 -210
  784. package/engines/typedb/hostdb-releases.ts +0 -23
  785. package/engines/typedb/index.ts +0 -1275
  786. package/engines/typedb/restore.ts +0 -377
  787. package/engines/typedb/version-maps.ts +0 -48
  788. package/engines/typedb/version-validator.ts +0 -127
  789. package/engines/valkey/README.md +0 -219
  790. package/engines/valkey/backup.ts +0 -389
  791. package/engines/valkey/binary-manager.ts +0 -45
  792. package/engines/valkey/binary-urls.ts +0 -122
  793. package/engines/valkey/cli-utils.ts +0 -42
  794. package/engines/valkey/hostdb-releases.ts +0 -23
  795. package/engines/valkey/index.ts +0 -1585
  796. package/engines/valkey/restore.ts +0 -446
  797. package/engines/valkey/version-maps.ts +0 -81
  798. package/engines/valkey/version-validator.ts +0 -131
  799. package/engines/weaviate/README.md +0 -302
  800. package/engines/weaviate/api-client.ts +0 -61
  801. package/engines/weaviate/backup.ts +0 -145
  802. package/engines/weaviate/binary-manager.ts +0 -80
  803. package/engines/weaviate/binary-urls.ts +0 -115
  804. package/engines/weaviate/cli-utils.ts +0 -43
  805. package/engines/weaviate/hostdb-releases.ts +0 -23
  806. package/engines/weaviate/index.ts +0 -1139
  807. package/engines/weaviate/restore.ts +0 -235
  808. package/engines/weaviate/version-maps.ts +0 -78
  809. package/engines/weaviate/version-validator.ts +0 -128
  810. package/types/index.ts +0 -624
  811. /package/{config → dist/config}/engines.json +0 -0
@@ -0,0 +1,871 @@
1
+ import { spawn } from 'child_process';
2
+ import { existsSync, openSync, closeSync } from 'fs';
3
+ import { chmod, mkdir, writeFile, readFile, unlink } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { BaseEngine } from '../base-engine.js';
6
+ import { paths } from '../../config/paths.js';
7
+ import { getEngineDefaults } from '../../config/defaults.js';
8
+ import { platformService, isWindows } from '../../core/platform-service.js';
9
+ import { configManager } from '../../core/config-manager.js';
10
+ import { logDebug, logWarning, assertValidUsername, } from '../../core/error-handler.js';
11
+ import { processManager } from '../../core/process-manager.js';
12
+ import { portManager } from '../../core/port-manager.js';
13
+ import { weaviateBinaryManager } from './binary-manager.js';
14
+ import { getBinaryUrl } from './binary-urls.js';
15
+ import { normalizeVersion, SUPPORTED_MAJOR_VERSIONS, WEAVIATE_VERSION_MAP, } from './version-maps.js';
16
+ import { fetchAvailableVersions as fetchHostdbVersions } from './hostdb-releases.js';
17
+ import { detectBackupFormat as detectBackupFormatImpl, restoreBackup, } from './restore.js';
18
+ import { createBackup } from './backup.js';
19
+ import { weaviateApiRequest } from './api-client.js';
20
+ import { parseRESTAPIResult } from '../../core/query-parser.js';
21
+ const ENGINE = 'weaviate';
22
+ const engineDef = getEngineDefaults(ENGINE);
23
+ /**
24
+ * Parse a Weaviate connection string
25
+ * Supported formats:
26
+ * - http://host:port
27
+ * - https://host:port
28
+ * - http://host:port?api_key=KEY (for API key auth)
29
+ */
30
+ function parseWeaviateConnectionString(connectionString) {
31
+ let url;
32
+ // Ensure scheme is present
33
+ let normalized = connectionString.trim();
34
+ if (!normalized.startsWith('http://') && !normalized.startsWith('https://')) {
35
+ normalized = `http://${normalized}`;
36
+ }
37
+ try {
38
+ url = new URL(normalized);
39
+ }
40
+ catch {
41
+ // Redact query params (may contain api_key) before including in error
42
+ const safeString = normalized.split('?')[0];
43
+ throw new Error(`Invalid Weaviate connection string: ${safeString}\n` +
44
+ 'Expected format: http://host:port');
45
+ }
46
+ // Extract API key if provided
47
+ const apiKey = url.searchParams.get('api_key');
48
+ const scheme = url.protocol.replace(':', '');
49
+ const headers = {
50
+ 'Content-Type': 'application/json',
51
+ };
52
+ if (apiKey) {
53
+ headers['Authorization'] = `Bearer ${apiKey}`;
54
+ }
55
+ // Construct base URL without query params
56
+ const port = url.port || '8080';
57
+ const baseUrl = `${scheme}://${url.hostname}:${port}`;
58
+ return { baseUrl, headers };
59
+ }
60
+ /**
61
+ * Make an HTTP request to a remote Weaviate server
62
+ */
63
+ async function remoteWeaviateRequest(baseUrl, method, path, headers, body, timeoutMs = 30000) {
64
+ const url = `${baseUrl}${path}`;
65
+ const controller = new AbortController();
66
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
67
+ const options = {
68
+ method,
69
+ headers,
70
+ signal: controller.signal,
71
+ };
72
+ if (body) {
73
+ options.body = JSON.stringify(body);
74
+ }
75
+ try {
76
+ const response = await fetch(url, options);
77
+ // Try to parse as JSON, fall back to text
78
+ let data;
79
+ const contentType = response.headers.get('content-type') || '';
80
+ if (contentType.includes('application/json')) {
81
+ data = await response.json();
82
+ }
83
+ else {
84
+ data = await response.text();
85
+ }
86
+ return { status: response.status, data };
87
+ }
88
+ catch (error) {
89
+ if (error instanceof Error && error.name === 'AbortError') {
90
+ throw new Error(`Remote Weaviate request timed out after ${timeoutMs / 1000}s: ${method} ${path}`);
91
+ }
92
+ throw error;
93
+ }
94
+ finally {
95
+ clearTimeout(timeoutId);
96
+ }
97
+ }
98
+ export class WeaviateEngine extends BaseEngine {
99
+ name = ENGINE;
100
+ displayName = 'Weaviate';
101
+ defaultPort = engineDef.defaultPort;
102
+ supportedVersions = SUPPORTED_MAJOR_VERSIONS;
103
+ // Get platform info for binary operations
104
+ getPlatformInfo() {
105
+ return platformService.getPlatformInfo();
106
+ }
107
+ // Fetch available versions from hostdb (dynamically or from cache/fallback)
108
+ async fetchAvailableVersions() {
109
+ return fetchHostdbVersions();
110
+ }
111
+ // Get binary download URL from hostdb
112
+ getBinaryUrl(version, platform, arch) {
113
+ return getBinaryUrl(version, platform, arch);
114
+ }
115
+ // Resolves version string to full version (e.g., '1' -> '1.35.7')
116
+ resolveFullVersion(version) {
117
+ // Check if already a full version (has at least two dots)
118
+ if (/^\d+\.\d+\.\d+$/.test(version)) {
119
+ return version;
120
+ }
121
+ // It's a major version, resolve using version map
122
+ return WEAVIATE_VERSION_MAP[version] || `${version}.0.0`;
123
+ }
124
+ // Get the path where binaries for a version would be installed
125
+ getBinaryPath(version) {
126
+ const fullVersion = this.resolveFullVersion(version);
127
+ const { platform: p, arch: a } = this.getPlatformInfo();
128
+ return paths.getBinaryPath({
129
+ engine: 'weaviate',
130
+ version: fullVersion,
131
+ platform: p,
132
+ arch: a,
133
+ });
134
+ }
135
+ // Verify that Weaviate binaries are available
136
+ async verifyBinary(binPath) {
137
+ const ext = platformService.getExecutableExtension();
138
+ const serverPath = join(binPath, 'bin', `weaviate${ext}`);
139
+ return existsSync(serverPath);
140
+ }
141
+ // Check if a specific Weaviate version is installed (downloaded)
142
+ async isBinaryInstalled(version) {
143
+ const { platform, arch } = this.getPlatformInfo();
144
+ return weaviateBinaryManager.isInstalled(version, platform, arch);
145
+ }
146
+ /**
147
+ * Ensure Weaviate binaries are available for a specific version
148
+ * Downloads from hostdb if not already installed
149
+ * Returns the path to the bin directory
150
+ */
151
+ async ensureBinaries(version, onProgress) {
152
+ const { platform, arch } = this.getPlatformInfo();
153
+ const binPath = await weaviateBinaryManager.ensureInstalled(version, platform, arch, onProgress);
154
+ // Register binaries in config
155
+ const ext = platformService.getExecutableExtension();
156
+ const tools = ['weaviate'];
157
+ for (const tool of tools) {
158
+ const toolPath = join(binPath, 'bin', `${tool}${ext}`);
159
+ if (existsSync(toolPath)) {
160
+ await configManager.setBinaryPath(tool, toolPath, 'bundled');
161
+ }
162
+ }
163
+ return binPath;
164
+ }
165
+ /**
166
+ * Initialize a new Weaviate data directory
167
+ * Creates the directory structure
168
+ */
169
+ async initDataDir(containerName, _version, options = {}) {
170
+ const dataDir = paths.getContainerDataPath(containerName, {
171
+ engine: ENGINE,
172
+ });
173
+ const containerDir = paths.getContainerPath(containerName, {
174
+ engine: ENGINE,
175
+ });
176
+ const port = options.port || engineDef.defaultPort;
177
+ // Create data directory if it doesn't exist
178
+ if (!existsSync(dataDir)) {
179
+ await mkdir(dataDir, { recursive: true });
180
+ logDebug(`Created Weaviate data directory: ${dataDir}`);
181
+ }
182
+ // Create backups directory
183
+ const backupsDir = join(dataDir, 'backups');
184
+ if (!existsSync(backupsDir)) {
185
+ await mkdir(backupsDir, { recursive: true });
186
+ logDebug(`Created Weaviate backups directory: ${backupsDir}`);
187
+ }
188
+ // Write a config file with port info for reference
189
+ const configPath = join(containerDir, 'weaviate.env');
190
+ const configContent = [
191
+ '# SpinDB generated Weaviate configuration',
192
+ `PERSISTENCE_DATA_PATH=${dataDir}`,
193
+ `BACKUP_FILESYSTEM_PATH=${backupsDir}`,
194
+ `QUERY_DEFAULTS_LIMIT=25`,
195
+ `AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true`,
196
+ `DEFAULT_VECTORIZER_MODULE=none`,
197
+ `CLUSTER_HOSTNAME=node1`,
198
+ '',
199
+ ].join('\n');
200
+ await writeFile(configPath, configContent);
201
+ logDebug(`Generated Weaviate config: ${configPath} (port: ${port})`);
202
+ return dataDir;
203
+ }
204
+ // Get the path to weaviate server for a version
205
+ async getWeaviateServerPath(version) {
206
+ const { platform, arch } = this.getPlatformInfo();
207
+ const fullVersion = normalizeVersion(version);
208
+ const binPath = paths.getBinaryPath({
209
+ engine: 'weaviate',
210
+ version: fullVersion,
211
+ platform,
212
+ arch,
213
+ });
214
+ const ext = platformService.getExecutableExtension();
215
+ const serverPath = join(binPath, 'bin', `weaviate${ext}`);
216
+ if (existsSync(serverPath)) {
217
+ return serverPath;
218
+ }
219
+ throw new Error(`Weaviate ${version} is not installed. Run: spindb engines download weaviate ${version}`);
220
+ }
221
+ // Get the path to weaviate binary
222
+ async getWeaviatePath(version) {
223
+ // Check config cache first
224
+ const cached = await configManager.getBinaryPath('weaviate');
225
+ if (cached && existsSync(cached)) {
226
+ return cached;
227
+ }
228
+ // If version provided, use downloaded binary
229
+ if (version) {
230
+ const { platform, arch } = this.getPlatformInfo();
231
+ const fullVersion = normalizeVersion(version);
232
+ const binPath = paths.getBinaryPath({
233
+ engine: 'weaviate',
234
+ version: fullVersion,
235
+ platform,
236
+ arch,
237
+ });
238
+ const ext = platformService.getExecutableExtension();
239
+ const weaviatePath = join(binPath, 'bin', `weaviate${ext}`);
240
+ if (existsSync(weaviatePath)) {
241
+ return weaviatePath;
242
+ }
243
+ }
244
+ throw new Error('weaviate not found. Run: spindb engines download weaviate <version>');
245
+ }
246
+ /**
247
+ * Start Weaviate server
248
+ * Weaviate uses environment variables for configuration
249
+ */
250
+ async start(container, onProgress) {
251
+ const { name, port, version, binaryPath } = container;
252
+ // Check if already running (idempotent behavior)
253
+ const alreadyRunning = await processManager.isRunning(name, {
254
+ engine: ENGINE,
255
+ });
256
+ if (alreadyRunning) {
257
+ return {
258
+ port,
259
+ connectionString: this.getConnectionString(container),
260
+ };
261
+ }
262
+ // Use stored binary path if available (from container creation)
263
+ let weaviateServer = null;
264
+ if (binaryPath && existsSync(binaryPath)) {
265
+ const ext = platformService.getExecutableExtension();
266
+ const serverPath = join(binaryPath, 'bin', `weaviate${ext}`);
267
+ if (existsSync(serverPath)) {
268
+ weaviateServer = serverPath;
269
+ logDebug(`Using stored binary path: ${weaviateServer}`);
270
+ }
271
+ }
272
+ // If we didn't find the binary above, fall back to normal path
273
+ if (!weaviateServer) {
274
+ try {
275
+ weaviateServer = await this.getWeaviateServerPath(version);
276
+ }
277
+ catch (error) {
278
+ const originalMessage = error instanceof Error ? error.message : String(error);
279
+ throw new Error(`Weaviate ${version} is not installed. Run: spindb engines download weaviate ${version}\n` +
280
+ ` Original error: ${originalMessage}`);
281
+ }
282
+ }
283
+ logDebug(`Using weaviate for version ${version}: ${weaviateServer}`);
284
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
285
+ const dataDir = paths.getContainerDataPath(name, { engine: ENGINE });
286
+ const backupsDir = join(dataDir, 'backups');
287
+ const logFile = paths.getContainerLogPath(name, { engine: ENGINE });
288
+ const pidFile = join(containerDir, 'weaviate.pid');
289
+ const grpcPort = port + 1;
290
+ // Check if gRPC port is available (Weaviate uses HTTP port + 1 for gRPC)
291
+ const portWaitTimeout = isWindows() ? 60000 : 0;
292
+ const portCheckInterval = 1000;
293
+ const grpcCheckStart = Date.now();
294
+ while (!(await portManager.isPortAvailable(grpcPort))) {
295
+ if (Date.now() - grpcCheckStart >= portWaitTimeout) {
296
+ throw new Error(`gRPC port ${grpcPort} is already in use. ` +
297
+ `Weaviate requires both HTTP port ${port} and gRPC port ${grpcPort} to be available.`);
298
+ }
299
+ logDebug(`Waiting for gRPC port ${grpcPort} to become available...`);
300
+ await new Promise((resolve) => setTimeout(resolve, portCheckInterval));
301
+ }
302
+ // Also check HTTP port on Windows
303
+ if (isWindows()) {
304
+ const httpCheckStart = Date.now();
305
+ while (!(await portManager.isPortAvailable(port))) {
306
+ if (Date.now() - httpCheckStart >= portWaitTimeout) {
307
+ throw new Error(`HTTP port ${port} is already in use. ` +
308
+ `Weaviate requires both HTTP port ${port} and gRPC port ${grpcPort} to be available.`);
309
+ }
310
+ logDebug(`Waiting for HTTP port ${port} to become available...`);
311
+ await new Promise((resolve) => setTimeout(resolve, portCheckInterval));
312
+ }
313
+ }
314
+ // Ensure backups directory exists
315
+ if (!existsSync(backupsDir)) {
316
+ await mkdir(backupsDir, { recursive: true });
317
+ }
318
+ onProgress?.({ stage: 'starting', message: 'Starting Weaviate...' });
319
+ logDebug(`Starting weaviate on port ${port}`);
320
+ /**
321
+ * Check log file for startup errors
322
+ */
323
+ const checkLogForError = async () => {
324
+ try {
325
+ const logContent = await readFile(logFile, 'utf-8');
326
+ const recentLog = logContent.slice(-2000); // Last 2KB
327
+ if (recentLog.includes('Address already in use') ||
328
+ recentLog.includes('bind: Address already in use')) {
329
+ return `Port ${port} is already in use`;
330
+ }
331
+ if (recentLog.includes('Failed to bind')) {
332
+ return `Port ${port} is already in use`;
333
+ }
334
+ }
335
+ catch {
336
+ // Log file might not exist yet
337
+ }
338
+ return null;
339
+ };
340
+ // Weaviate uses environment variables for configuration
341
+ const args = [
342
+ '--host',
343
+ '127.0.0.1',
344
+ '--port',
345
+ String(port),
346
+ '--scheme',
347
+ 'http',
348
+ ];
349
+ // Derive unique internal cluster ports from the HTTP port to avoid conflicts
350
+ // when running multiple Weaviate containers simultaneously.
351
+ // Default internal ports (7946, 7947, 8300, 8301) are fixed and will conflict.
352
+ const gossipPort = port + 100; // e.g., 8080 → 8180
353
+ const dataPort = port + 101; // e.g., 8080 → 8181
354
+ const raftPort = port + 200; // e.g., 8080 → 8280
355
+ const raftInternalRpcPort = raftPort + 1; // e.g., 8080 → 8281
356
+ // Read weaviate.env file (written by initDataDir and updated by createUser)
357
+ // so that API key / auth settings persist across restarts
358
+ const envFilePath = join(containerDir, 'weaviate.env');
359
+ const fileEnv = {};
360
+ if (existsSync(envFilePath)) {
361
+ try {
362
+ const envContent = await readFile(envFilePath, 'utf-8');
363
+ for (const line of envContent.split('\n')) {
364
+ const trimmed = line.trim();
365
+ if (!trimmed || trimmed.startsWith('#'))
366
+ continue;
367
+ const eqIdx = trimmed.indexOf('=');
368
+ if (eqIdx > 0) {
369
+ fileEnv[trimmed.substring(0, eqIdx)] = trimmed.substring(eqIdx + 1);
370
+ }
371
+ }
372
+ }
373
+ catch {
374
+ logDebug(`Could not read ${envFilePath}, using defaults`);
375
+ }
376
+ }
377
+ const env = {
378
+ ...process.env,
379
+ // Defaults from weaviate.env file (includes auth settings from createUser)
380
+ ...fileEnv,
381
+ // Explicit spawn values always override file values
382
+ PERSISTENCE_DATA_PATH: dataDir,
383
+ BACKUP_FILESYSTEM_PATH: backupsDir,
384
+ ENABLE_MODULES: 'backup-filesystem',
385
+ CLUSTER_HOSTNAME: `node-${port}`,
386
+ GRPC_PORT: String(grpcPort),
387
+ CLUSTER_GOSSIP_BIND_PORT: String(gossipPort),
388
+ CLUSTER_DATA_BIND_PORT: String(dataPort),
389
+ RAFT_PORT: String(raftPort),
390
+ RAFT_INTERNAL_RPC_PORT: String(raftInternalRpcPort),
391
+ };
392
+ // Redirect stdout/stderr to log file via file descriptor so
393
+ // checkLogForError can find startup errors. File descriptors are
394
+ // inherited by the child and don't keep Node.js event loop alive
395
+ // (unlike 'pipe'), so proc.unref() works correctly.
396
+ const logFd = openSync(logFile, 'a');
397
+ const spawnOpts = {
398
+ cwd: containerDir,
399
+ stdio: ['ignore', logFd, logFd],
400
+ detached: true,
401
+ env,
402
+ };
403
+ if (isWindows()) {
404
+ spawnOpts.windowsHide = true;
405
+ }
406
+ const proc = spawn(weaviateServer, args, spawnOpts);
407
+ proc.unref();
408
+ // Close fd in parent — child inherited its own copy
409
+ closeSync(logFd);
410
+ if (!proc.pid) {
411
+ throw new Error('Weaviate server process failed to start (no PID)');
412
+ }
413
+ try {
414
+ await writeFile(pidFile, String(proc.pid));
415
+ }
416
+ catch {
417
+ // Non-fatal
418
+ }
419
+ // Wait for Weaviate to be ready
420
+ const ready = await this.waitForReady(port);
421
+ if (ready) {
422
+ return {
423
+ port,
424
+ connectionString: this.getConnectionString(container),
425
+ };
426
+ }
427
+ // Clean up the orphaned detached process before throwing
428
+ if (platformService.isProcessRunning(proc.pid)) {
429
+ try {
430
+ await platformService.terminateProcess(proc.pid, true);
431
+ }
432
+ catch {
433
+ // Ignore cleanup errors - best effort
434
+ }
435
+ }
436
+ const portError = await checkLogForError();
437
+ const errorDetails = [
438
+ portError || 'Weaviate failed to start within timeout.',
439
+ `Binary: ${weaviateServer}`,
440
+ `Log file: ${logFile}`,
441
+ ]
442
+ .filter(Boolean)
443
+ .join('\n');
444
+ throw new Error(errorDetails);
445
+ }
446
+ // Wait for Weaviate to be ready to accept connections
447
+ async waitForReady(port, timeoutMs = 30000) {
448
+ const startTime = Date.now();
449
+ const checkInterval = 500;
450
+ while (Date.now() - startTime < timeoutMs) {
451
+ try {
452
+ // Use Weaviate's readiness endpoint
453
+ const response = await weaviateApiRequest(port, 'GET', '/v1/.well-known/ready');
454
+ if (response.status === 200) {
455
+ logDebug(`Weaviate ready on port ${port}`);
456
+ return true;
457
+ }
458
+ }
459
+ catch {
460
+ // Connection failed, wait and retry
461
+ }
462
+ await new Promise((resolve) => setTimeout(resolve, checkInterval));
463
+ }
464
+ logDebug(`Weaviate did not become ready within ${timeoutMs}ms`);
465
+ return false;
466
+ }
467
+ /**
468
+ * Stop Weaviate server
469
+ * Uses process termination
470
+ */
471
+ async stop(container) {
472
+ const { name, port } = container;
473
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
474
+ const pidFile = join(containerDir, 'weaviate.pid');
475
+ const grpcPort = port + 1;
476
+ logDebug(`Stopping Weaviate container "${name}" on port ${port}`);
477
+ // Get PID and terminate
478
+ let pid = null;
479
+ if (existsSync(pidFile)) {
480
+ try {
481
+ const content = await readFile(pidFile, 'utf8');
482
+ pid = parseInt(content.trim(), 10);
483
+ }
484
+ catch {
485
+ // Ignore
486
+ }
487
+ }
488
+ // Kill process if running
489
+ if (pid && platformService.isProcessRunning(pid)) {
490
+ logDebug(`Killing Weaviate process ${pid}`);
491
+ try {
492
+ if (isWindows()) {
493
+ await platformService.terminateProcess(pid, true);
494
+ }
495
+ else {
496
+ await platformService.terminateProcess(pid, false);
497
+ await new Promise((resolve) => setTimeout(resolve, 2000));
498
+ if (platformService.isProcessRunning(pid)) {
499
+ logWarning(`Graceful termination failed, force killing ${pid}`);
500
+ await platformService.terminateProcess(pid, true);
501
+ }
502
+ }
503
+ }
504
+ catch (error) {
505
+ logDebug(`Process termination error: ${error}`);
506
+ }
507
+ }
508
+ // Wait for process to fully terminate
509
+ const terminationWait = isWindows() ? 3000 : 1000;
510
+ await new Promise((resolve) => setTimeout(resolve, terminationWait));
511
+ // Kill any processes still listening on the ports
512
+ const portPids = await platformService.findProcessByPort(port);
513
+ const grpcPids = await platformService.findProcessByPort(grpcPort);
514
+ const allPids = [...new Set([...portPids, ...grpcPids])];
515
+ for (const portPid of allPids) {
516
+ if (platformService.isProcessRunning(portPid)) {
517
+ logDebug(`Killing process ${portPid} still on port ${port}/${grpcPort}`);
518
+ try {
519
+ await platformService.terminateProcess(portPid, true);
520
+ }
521
+ catch {
522
+ // Ignore
523
+ }
524
+ }
525
+ }
526
+ // On Windows, wait again after killing port processes
527
+ if (isWindows() && allPids.length > 0) {
528
+ await new Promise((resolve) => setTimeout(resolve, 2000));
529
+ }
530
+ // Cleanup PID file
531
+ if (existsSync(pidFile)) {
532
+ try {
533
+ await unlink(pidFile);
534
+ }
535
+ catch {
536
+ // Ignore
537
+ }
538
+ }
539
+ // On Windows, wait for ports to be released
540
+ if (isWindows()) {
541
+ logDebug(`Waiting for ports ${port} and ${grpcPort} to be released...`);
542
+ const portWaitStart = Date.now();
543
+ const portWaitTimeout = 30000;
544
+ const checkInterval = 500;
545
+ while (Date.now() - portWaitStart < portWaitTimeout) {
546
+ const httpAvailable = await portManager.isPortAvailable(port);
547
+ const grpcAvailable = await portManager.isPortAvailable(grpcPort);
548
+ if (httpAvailable && grpcAvailable) {
549
+ logDebug('Ports released successfully');
550
+ break;
551
+ }
552
+ await new Promise((resolve) => setTimeout(resolve, checkInterval));
553
+ }
554
+ }
555
+ logDebug('Weaviate stopped');
556
+ }
557
+ // Get Weaviate server status
558
+ async status(container) {
559
+ const { name, port } = container;
560
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
561
+ const pidFile = join(containerDir, 'weaviate.pid');
562
+ // Try health check via REST API
563
+ try {
564
+ const response = await weaviateApiRequest(port, 'GET', '/v1/.well-known/ready');
565
+ if (response.status === 200) {
566
+ return { running: true, message: 'Weaviate is running' };
567
+ }
568
+ }
569
+ catch {
570
+ // Not responding, check PID
571
+ }
572
+ // Check PID file
573
+ if (existsSync(pidFile)) {
574
+ try {
575
+ const content = await readFile(pidFile, 'utf8');
576
+ const pid = parseInt(content.trim(), 10);
577
+ if (!isNaN(pid) && pid > 0 && platformService.isProcessRunning(pid)) {
578
+ return {
579
+ running: true,
580
+ message: `Weaviate is running (PID: ${pid})`,
581
+ };
582
+ }
583
+ }
584
+ catch {
585
+ // Ignore
586
+ }
587
+ }
588
+ return { running: false, message: 'Weaviate is not running' };
589
+ }
590
+ // Detect backup format
591
+ async detectBackupFormat(filePath) {
592
+ return detectBackupFormatImpl(filePath);
593
+ }
594
+ /**
595
+ * Restore a backup
596
+ * IMPORTANT: Weaviate must be stopped before restore
597
+ */
598
+ async restore(container, backupPath, _options = {}) {
599
+ const { name } = container;
600
+ // Check if container is running - Weaviate must be stopped for snapshot restore
601
+ const statusResult = await this.status(container);
602
+ if (statusResult.running) {
603
+ throw new Error(`Weaviate container "${name}" must be stopped before restore. ` +
604
+ `Run: spindb stop ${name}`);
605
+ }
606
+ const dataDir = paths.getContainerDataPath(name, { engine: ENGINE });
607
+ return restoreBackup(backupPath, {
608
+ containerName: name,
609
+ dataDir,
610
+ });
611
+ }
612
+ /**
613
+ * Get connection string
614
+ * Format: http://127.0.0.1:PORT
615
+ */
616
+ getConnectionString(container, _database) {
617
+ const { port } = container;
618
+ return `http://127.0.0.1:${port}`;
619
+ }
620
+ // Open HTTP API (Weaviate uses REST/GraphQL API, no interactive shell)
621
+ async connect(container, _database) {
622
+ const { port } = container;
623
+ const url = `http://127.0.0.1:${port}`;
624
+ console.log(`Weaviate REST API available at: ${url}/v1`);
625
+ console.log(`Weaviate GraphQL endpoint: ${url}/v1/graphql`);
626
+ console.log(`gRPC endpoint: 127.0.0.1:${port + 1}`);
627
+ console.log('');
628
+ console.log('Example commands:');
629
+ console.log(` curl ${url}/v1/schema`);
630
+ console.log(` curl ${url}/v1/.well-known/ready`);
631
+ }
632
+ /**
633
+ * Create a new class (collection)
634
+ * Weaviate uses classes instead of traditional databases
635
+ */
636
+ async createDatabase(container, database) {
637
+ const { port } = container;
638
+ // Create a class with default vector config
639
+ const response = await weaviateApiRequest(port, 'POST', '/v1/schema', {
640
+ class: database,
641
+ vectorizer: 'none',
642
+ });
643
+ if (response.status !== 200) {
644
+ throw new Error(`Failed to create class: ${JSON.stringify(response.data)}`);
645
+ }
646
+ logDebug(`Created Weaviate class: ${database}`);
647
+ }
648
+ /**
649
+ * Drop a class
650
+ */
651
+ async dropDatabase(container, database) {
652
+ const { port } = container;
653
+ const response = await weaviateApiRequest(port, 'DELETE', `/v1/schema/${database}`);
654
+ if (response.status !== 200) {
655
+ throw new Error(`Failed to delete class: ${JSON.stringify(response.data)}`);
656
+ }
657
+ logDebug(`Deleted Weaviate class: ${database}`);
658
+ }
659
+ /**
660
+ * Get the storage size of the Weaviate instance
661
+ */
662
+ async getDatabaseSize(container) {
663
+ const { port } = container;
664
+ try {
665
+ await weaviateApiRequest(port, 'GET', '/v1/meta');
666
+ // Weaviate doesn't expose direct storage size in meta
667
+ return null;
668
+ }
669
+ catch {
670
+ return null;
671
+ }
672
+ }
673
+ /**
674
+ * Dump from a remote Weaviate connection
675
+ * Uses Weaviate's REST API to create and download a full backup
676
+ *
677
+ * Connection string format: http://host:port
678
+ * For API key auth: http://host:port?api_key=YOUR_KEY
679
+ */
680
+ async dumpFromConnectionString(connectionString, _outputPath) {
681
+ // Parse connection string
682
+ const { baseUrl, headers } = parseWeaviateConnectionString(connectionString);
683
+ logDebug(`Connecting to remote Weaviate at ${baseUrl}`);
684
+ // Check connectivity and get schema
685
+ const schemaResponse = await remoteWeaviateRequest(baseUrl, 'GET', '/v1/schema', headers);
686
+ if (schemaResponse.status !== 200) {
687
+ throw new Error(`Failed to connect to Weaviate at ${baseUrl}: ${JSON.stringify(schemaResponse.data)}`);
688
+ }
689
+ const schemaData = schemaResponse.data;
690
+ const classCount = schemaData.classes?.length ?? 0;
691
+ logDebug(`Found ${classCount} classes on remote server`);
692
+ // Weaviate's filesystem backup backend writes to the server's local disk
693
+ // (BACKUP_FILESYSTEM_PATH/<backup_id>/). These files cannot be downloaded
694
+ // over the REST API — only the backup metadata is exposed via GET.
695
+ // To dump from a remote Weaviate instance, use an object-store backup
696
+ // backend (s3, gcs, azure) which supports remote access.
697
+ throw new Error(`Cannot dump from a remote Weaviate instance using the filesystem backup backend.\n` +
698
+ `Weaviate filesystem backups are written to the server's local disk ` +
699
+ `(BACKUP_FILESYSTEM_PATH/<backup_id>/) and cannot be downloaded over HTTP.\n\n` +
700
+ `To export data from a remote Weaviate instance, either:\n` +
701
+ ` 1. SSH into the server and copy the backup directory directly\n` +
702
+ ` 2. Configure an object-store backup backend (S3, GCS, Azure) on the remote server\n` +
703
+ ` and use the appropriate backup module endpoint instead of /v1/backups/filesystem\n` +
704
+ ` 3. Use the Weaviate client SDK to read and re-insert objects programmatically\n\n` +
705
+ `Remote server at ${baseUrl} has ${classCount} class(es).`);
706
+ }
707
+ // Create a backup
708
+ async backup(container, outputPath, options) {
709
+ return createBackup(container, outputPath, options);
710
+ }
711
+ // Run a command - Weaviate uses REST/GraphQL API, not command files
712
+ async runScript(container, options) {
713
+ const { port } = container;
714
+ if (options.file) {
715
+ throw new Error('Weaviate does not support command files. Use the REST API directly.\n' +
716
+ `Example: curl -X GET http://127.0.0.1:${port}/v1/schema`);
717
+ }
718
+ if (options.sql) {
719
+ // Try to interpret as a simple command
720
+ const command = options.sql.trim().toUpperCase();
721
+ if (command === 'LIST CLASSES' || command === 'SHOW CLASSES') {
722
+ const response = await weaviateApiRequest(port, 'GET', '/v1/schema');
723
+ console.log(JSON.stringify(response.data, null, 2));
724
+ return;
725
+ }
726
+ throw new Error('Weaviate uses REST/GraphQL API for operations. Use curl or the Weaviate client libraries.\n' +
727
+ `API endpoint: http://127.0.0.1:${port}/v1`);
728
+ }
729
+ throw new Error('Either file or sql option must be provided');
730
+ }
731
+ /**
732
+ * Execute a query via REST API
733
+ *
734
+ * Query format: METHOD /path [JSON body]
735
+ * Examples:
736
+ * GET /v1/schema
737
+ * POST /v1/graphql {"query": "{ Get { MyClass { name } } }"}
738
+ */
739
+ async executeQuery(container, query, options) {
740
+ const { port } = container;
741
+ // Parse the query string: METHOD /path [body]
742
+ const trimmed = query.trim();
743
+ const spaceIdx = trimmed.indexOf(' ');
744
+ if (spaceIdx === -1) {
745
+ throw new Error('Invalid query format. Expected: METHOD /path [body]\n' +
746
+ 'Example: GET /v1/schema');
747
+ }
748
+ const method = (options?.method ||
749
+ trimmed.substring(0, spaceIdx).toUpperCase());
750
+ const rest = trimmed.substring(spaceIdx + 1).trim();
751
+ // Extract path and optional JSON body
752
+ let path;
753
+ let body = options?.body;
754
+ const bodyStart = rest.indexOf('{');
755
+ if (bodyStart !== -1) {
756
+ // Always extract path without the JSON blob
757
+ path = rest.substring(0, bodyStart).trim();
758
+ if (options?.body) {
759
+ throw new Error('Cannot specify both inline JSON body in query and options.body. Use one or the other.');
760
+ }
761
+ try {
762
+ body = JSON.parse(rest.substring(bodyStart));
763
+ }
764
+ catch {
765
+ throw new Error('Invalid JSON body in query');
766
+ }
767
+ }
768
+ else {
769
+ path = rest;
770
+ }
771
+ // Ensure path starts with /
772
+ if (!path.startsWith('/')) {
773
+ path = '/' + path;
774
+ }
775
+ const response = await weaviateApiRequest(port, method, path, body);
776
+ if (response.status >= 400) {
777
+ throw new Error(`Weaviate API error (${response.status}): ${JSON.stringify(response.data)}`);
778
+ }
779
+ return parseRESTAPIResult(JSON.stringify(response.data));
780
+ }
781
+ /**
782
+ * List databases for Weaviate.
783
+ * Weaviate uses classes, not databases. Returns the configured database.
784
+ */
785
+ async listDatabases(container) {
786
+ return [container.database];
787
+ }
788
+ /**
789
+ * Create/update the API key for Weaviate.
790
+ *
791
+ * Weaviate supports API key authentication via environment variables.
792
+ * Calling createUser will update the config and require a restart.
793
+ */
794
+ async createUser(container, options) {
795
+ const { username, password } = options;
796
+ assertValidUsername(username);
797
+ const { port, name } = container;
798
+ // Read current env config and add/update API key
799
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
800
+ const configPath = join(containerDir, 'weaviate.env');
801
+ if (!existsSync(configPath)) {
802
+ throw new Error(`Weaviate config not found: ${configPath}\n` +
803
+ `This file is created during container setup. ` +
804
+ `Try recreating the container: spindb delete ${name} && spindb create ${name}`);
805
+ }
806
+ const currentConfig = await readFile(configPath, 'utf-8');
807
+ // Update or add authentication settings
808
+ const lines = currentConfig.split('\n');
809
+ let foundAnonAccess = false;
810
+ let foundApiKeyEnabled = false;
811
+ let foundApiKeyAllowed = false;
812
+ let foundApiKeyUsers = false;
813
+ for (let i = 0; i < lines.length; i++) {
814
+ if (lines[i].startsWith('AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=')) {
815
+ lines[i] = 'AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false';
816
+ foundAnonAccess = true;
817
+ }
818
+ if (lines[i].startsWith('AUTHENTICATION_APIKEY_ENABLED=')) {
819
+ lines[i] = 'AUTHENTICATION_APIKEY_ENABLED=true';
820
+ foundApiKeyEnabled = true;
821
+ }
822
+ if (lines[i].startsWith('AUTHENTICATION_APIKEY_ALLOWED_KEYS=')) {
823
+ lines[i] = `AUTHENTICATION_APIKEY_ALLOWED_KEYS=${password}`;
824
+ foundApiKeyAllowed = true;
825
+ }
826
+ if (lines[i].startsWith('AUTHENTICATION_APIKEY_USERS=')) {
827
+ lines[i] = `AUTHENTICATION_APIKEY_USERS=${username}`;
828
+ foundApiKeyUsers = true;
829
+ }
830
+ }
831
+ if (!foundAnonAccess) {
832
+ lines.push('AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false');
833
+ }
834
+ if (!foundApiKeyEnabled) {
835
+ lines.push('AUTHENTICATION_APIKEY_ENABLED=true');
836
+ }
837
+ if (!foundApiKeyAllowed) {
838
+ lines.push(`AUTHENTICATION_APIKEY_ALLOWED_KEYS=${password}`);
839
+ }
840
+ if (!foundApiKeyUsers) {
841
+ lines.push(`AUTHENTICATION_APIKEY_USERS=${username}`);
842
+ }
843
+ const updatedConfig = lines.join('\n');
844
+ // Only restart if the container is currently running
845
+ const statusResult = await this.status(container);
846
+ if (statusResult.running) {
847
+ logWarning(`Restarting Weaviate container "${name}" to apply API key change. ` +
848
+ 'Active client connections will be disconnected.');
849
+ await this.stop(container);
850
+ await writeFile(configPath, updatedConfig);
851
+ await chmod(configPath, 0o600);
852
+ await this.start(container);
853
+ }
854
+ else {
855
+ await writeFile(configPath, updatedConfig);
856
+ await chmod(configPath, 0o600);
857
+ }
858
+ logDebug(`Configured Weaviate API key (credential label: ${username})`);
859
+ const connectionString = `http://127.0.0.1:${port}`;
860
+ return {
861
+ username,
862
+ password: '',
863
+ connectionString,
864
+ engine: container.engine,
865
+ container: container.name,
866
+ apiKey: password,
867
+ };
868
+ }
869
+ }
870
+ export const weaviateEngine = new WeaviateEngine();
871
+ //# sourceMappingURL=index.js.map