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,962 @@
1
+ import { spawn } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import { 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 } from '../../core/error-handler.js';
11
+ import { processManager } from '../../core/process-manager.js';
12
+ import { portManager } from '../../core/port-manager.js';
13
+ import { influxdbBinaryManager } from './binary-manager.js';
14
+ import { getBinaryUrl } from './binary-urls.js';
15
+ import { normalizeVersion, SUPPORTED_MAJOR_VERSIONS } 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 { influxdbApiRequest } from './api-client.js';
20
+ import { parseRESTAPIResult } from '../../core/query-parser.js';
21
+ const ENGINE = 'influxdb';
22
+ const engineDef = getEngineDefaults(ENGINE);
23
+ /**
24
+ * Initial delay before checking if InfluxDB is ready after spawning.
25
+ * Windows requires a longer delay as process startup is slower.
26
+ */
27
+ const START_CHECK_DELAY_MS = isWindows() ? 2000 : 500;
28
+ /**
29
+ * Parse an InfluxDB connection string
30
+ * Supported formats:
31
+ * - http://host:port
32
+ * - https://host:port
33
+ * - influxdb://host:port (converted to http)
34
+ */
35
+ function parseInfluxDBConnectionString(connectionString) {
36
+ let url;
37
+ let scheme = 'http';
38
+ // Handle influxdb:// scheme by converting to http://
39
+ let normalized = connectionString.trim();
40
+ if (normalized.startsWith('influxdb://')) {
41
+ normalized = normalized.replace('influxdb://', 'http://');
42
+ }
43
+ // Ensure scheme is present
44
+ if (!normalized.startsWith('http://') && !normalized.startsWith('https://')) {
45
+ normalized = `http://${normalized}`;
46
+ }
47
+ try {
48
+ url = new URL(normalized);
49
+ scheme = url.protocol.replace(':', '');
50
+ }
51
+ catch {
52
+ throw new Error(`Invalid InfluxDB connection string: ${connectionString}\n` +
53
+ 'Expected format: http://host:port or influxdb://host:port');
54
+ }
55
+ // Extract token if provided
56
+ const token = url.searchParams.get('token');
57
+ const database = url.searchParams.get('db') || undefined;
58
+ const headers = {
59
+ 'Content-Type': 'application/json',
60
+ };
61
+ if (token) {
62
+ headers['Authorization'] = `Bearer ${token}`;
63
+ }
64
+ // Construct base URL without query params
65
+ const port = url.port || '8086';
66
+ const baseUrl = `${scheme}://${url.hostname}:${port}`;
67
+ return { baseUrl, headers, database };
68
+ }
69
+ /**
70
+ * Make an HTTP request to a remote InfluxDB server
71
+ */
72
+ async function remoteInfluxDBRequest(baseUrl, method, path, headers, body, timeoutMs = 30000) {
73
+ const url = `${baseUrl}${path}`;
74
+ const controller = new AbortController();
75
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
76
+ const options = {
77
+ method,
78
+ headers,
79
+ signal: controller.signal,
80
+ };
81
+ if (body) {
82
+ options.body = JSON.stringify(body);
83
+ }
84
+ try {
85
+ const response = await fetch(url, options);
86
+ let data;
87
+ const contentType = response.headers.get('content-type') || '';
88
+ if (contentType.includes('application/json')) {
89
+ data = await response.json();
90
+ }
91
+ else {
92
+ data = await response.text();
93
+ }
94
+ return { status: response.status, data };
95
+ }
96
+ catch (error) {
97
+ if (error instanceof Error && error.name === 'AbortError') {
98
+ throw new Error(`Remote InfluxDB request timed out after ${timeoutMs / 1000}s: ${method} ${path}`);
99
+ }
100
+ throw error;
101
+ }
102
+ finally {
103
+ clearTimeout(timeoutId);
104
+ }
105
+ }
106
+ export class InfluxDBEngine extends BaseEngine {
107
+ name = ENGINE;
108
+ displayName = 'InfluxDB';
109
+ defaultPort = engineDef.defaultPort;
110
+ supportedVersions = SUPPORTED_MAJOR_VERSIONS;
111
+ // Get platform info for binary operations
112
+ getPlatformInfo() {
113
+ return platformService.getPlatformInfo();
114
+ }
115
+ // Fetch available versions from hostdb
116
+ async fetchAvailableVersions() {
117
+ return fetchHostdbVersions();
118
+ }
119
+ // Get binary download URL from hostdb
120
+ getBinaryUrl(version, platform, arch) {
121
+ return getBinaryUrl(version, platform, arch);
122
+ }
123
+ // Resolves version string to full version (e.g., '3' -> '3.8.0')
124
+ resolveFullVersion(version) {
125
+ return normalizeVersion(version);
126
+ }
127
+ // Get the path where binaries for a version would be installed
128
+ getBinaryPath(version) {
129
+ const fullVersion = this.resolveFullVersion(version);
130
+ const { platform: p, arch: a } = this.getPlatformInfo();
131
+ return paths.getBinaryPath({
132
+ engine: 'influxdb',
133
+ version: fullVersion,
134
+ platform: p,
135
+ arch: a,
136
+ });
137
+ }
138
+ // Verify that InfluxDB binaries are available
139
+ async verifyBinary(binPath) {
140
+ const ext = platformService.getExecutableExtension();
141
+ const serverPath = join(binPath, 'bin', `influxdb3${ext}`);
142
+ return existsSync(serverPath);
143
+ }
144
+ // Check if a specific InfluxDB version is installed
145
+ async isBinaryInstalled(version) {
146
+ const { platform, arch } = this.getPlatformInfo();
147
+ return influxdbBinaryManager.isInstalled(version, platform, arch);
148
+ }
149
+ /**
150
+ * Ensure InfluxDB binaries are available for a specific version
151
+ * Downloads from hostdb if not already installed
152
+ * Returns the path to the bin directory
153
+ */
154
+ async ensureBinaries(version, onProgress) {
155
+ const { platform, arch } = this.getPlatformInfo();
156
+ const binPath = await influxdbBinaryManager.ensureInstalled(version, platform, arch, onProgress);
157
+ // Register binaries in config
158
+ const ext = platformService.getExecutableExtension();
159
+ const tools = ['influxdb3'];
160
+ for (const tool of tools) {
161
+ const toolPath = join(binPath, 'bin', `${tool}${ext}`);
162
+ if (existsSync(toolPath)) {
163
+ await configManager.setBinaryPath(tool, toolPath, 'bundled');
164
+ }
165
+ }
166
+ return binPath;
167
+ }
168
+ /**
169
+ * Initialize a new InfluxDB data directory
170
+ */
171
+ async initDataDir(containerName, _version, _options = {}) {
172
+ const dataDir = paths.getContainerDataPath(containerName, {
173
+ engine: ENGINE,
174
+ });
175
+ const containerDir = paths.getContainerPath(containerName, {
176
+ engine: ENGINE,
177
+ });
178
+ // Create container directory if it doesn't exist
179
+ if (!existsSync(containerDir)) {
180
+ await mkdir(containerDir, { recursive: true });
181
+ }
182
+ // Create data directory if it doesn't exist
183
+ if (!existsSync(dataDir)) {
184
+ await mkdir(dataDir, { recursive: true });
185
+ logDebug(`Created InfluxDB data directory: ${dataDir}`);
186
+ }
187
+ return dataDir;
188
+ }
189
+ // Get the path to influxdb3 server for a version
190
+ async getInfluxDBServerPath(version) {
191
+ const { platform, arch } = this.getPlatformInfo();
192
+ const fullVersion = normalizeVersion(version);
193
+ const binPath = paths.getBinaryPath({
194
+ engine: 'influxdb',
195
+ version: fullVersion,
196
+ platform,
197
+ arch,
198
+ });
199
+ const ext = platformService.getExecutableExtension();
200
+ const serverPath = join(binPath, 'bin', `influxdb3${ext}`);
201
+ if (existsSync(serverPath)) {
202
+ return serverPath;
203
+ }
204
+ throw new Error(`InfluxDB ${version} is not installed. Run: spindb engines download influxdb ${version}`);
205
+ }
206
+ // Get the path to influxdb3 binary
207
+ async getInfluxDBPath(version) {
208
+ // Check config cache first
209
+ const cached = await configManager.getBinaryPath('influxdb3');
210
+ if (cached && existsSync(cached)) {
211
+ return cached;
212
+ }
213
+ // If version provided, use downloaded binary
214
+ if (version) {
215
+ const { platform, arch } = this.getPlatformInfo();
216
+ const fullVersion = normalizeVersion(version);
217
+ const binPath = paths.getBinaryPath({
218
+ engine: 'influxdb',
219
+ version: fullVersion,
220
+ platform,
221
+ arch,
222
+ });
223
+ const ext = platformService.getExecutableExtension();
224
+ const influxdbPath = join(binPath, 'bin', `influxdb3${ext}`);
225
+ if (existsSync(influxdbPath)) {
226
+ return influxdbPath;
227
+ }
228
+ }
229
+ throw new Error('influxdb3 not found. Run: spindb engines download influxdb <version>');
230
+ }
231
+ /**
232
+ * Start InfluxDB server
233
+ * CLI: influxdb3 serve --data-dir /path/to/data --http-bind 127.0.0.1:PORT
234
+ */
235
+ async start(container, onProgress) {
236
+ const { name, port, version, binaryPath } = container;
237
+ // Check if already running
238
+ const alreadyRunning = await processManager.isRunning(name, {
239
+ engine: ENGINE,
240
+ });
241
+ if (alreadyRunning) {
242
+ return {
243
+ port,
244
+ connectionString: this.getConnectionString(container),
245
+ };
246
+ }
247
+ // Use stored binary path if available
248
+ let influxdbServer = null;
249
+ if (binaryPath && existsSync(binaryPath)) {
250
+ const ext = platformService.getExecutableExtension();
251
+ const serverPath = join(binaryPath, 'bin', `influxdb3${ext}`);
252
+ if (existsSync(serverPath)) {
253
+ influxdbServer = serverPath;
254
+ logDebug(`Using stored binary path: ${influxdbServer}`);
255
+ }
256
+ }
257
+ // Fall back to normal path
258
+ if (!influxdbServer) {
259
+ try {
260
+ influxdbServer = await this.getInfluxDBServerPath(version);
261
+ }
262
+ catch (error) {
263
+ const originalMessage = error instanceof Error ? error.message : String(error);
264
+ throw new Error(`InfluxDB ${version} is not installed. Run: spindb engines download influxdb ${version}\n` +
265
+ ` Original error: ${originalMessage}`);
266
+ }
267
+ }
268
+ logDebug(`Using influxdb3 for version ${version}: ${influxdbServer}`);
269
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
270
+ const dataDir = paths.getContainerDataPath(name, { engine: ENGINE });
271
+ const logFile = paths.getContainerLogPath(name, { engine: ENGINE });
272
+ const pidFile = join(containerDir, 'influxdb.pid');
273
+ // On Windows, wait longer for ports to be released
274
+ const portWaitTimeout = isWindows() ? 60000 : 0;
275
+ const portCheckStart = Date.now();
276
+ const portCheckInterval = 1000;
277
+ // Check if HTTP port is available
278
+ while (!(await portManager.isPortAvailable(port))) {
279
+ if (Date.now() - portCheckStart >= portWaitTimeout) {
280
+ throw new Error(`HTTP port ${port} is already in use.`);
281
+ }
282
+ logDebug(`Waiting for HTTP port ${port} to become available...`);
283
+ await new Promise((resolve) => setTimeout(resolve, portCheckInterval));
284
+ }
285
+ onProgress?.({ stage: 'starting', message: 'Starting InfluxDB...' });
286
+ // Build command arguments
287
+ // InfluxDB 3.x uses 'serve' subcommand with required --node-id
288
+ // Use fixed node-id so data persists across container renames
289
+ const args = [
290
+ 'serve',
291
+ '--node-id',
292
+ 'spindb',
293
+ '--object-store',
294
+ 'file',
295
+ '--data-dir',
296
+ dataDir,
297
+ '--http-bind',
298
+ `127.0.0.1:${port}`,
299
+ '--without-auth',
300
+ ];
301
+ logDebug(`Starting influxdb3 with args: ${args.join(' ')}`);
302
+ /**
303
+ * Check log file for startup errors
304
+ */
305
+ const checkLogForError = async () => {
306
+ try {
307
+ const logContent = await readFile(logFile, 'utf-8');
308
+ const recentLog = logContent.slice(-2000); // Last 2KB
309
+ if (recentLog.includes('Address already in use') ||
310
+ recentLog.includes('bind: Address already in use')) {
311
+ return `Port ${port} is already in use`;
312
+ }
313
+ if (recentLog.includes('Failed to bind')) {
314
+ return `Port ${port} is already in use`;
315
+ }
316
+ }
317
+ catch {
318
+ // Log file might not exist yet
319
+ }
320
+ return null;
321
+ };
322
+ // InfluxDB runs in foreground, so we need to spawn detached
323
+ if (isWindows()) {
324
+ return new Promise((resolve, reject) => {
325
+ const spawnOpts = {
326
+ cwd: containerDir,
327
+ stdio: ['ignore', 'pipe', 'pipe'],
328
+ detached: true,
329
+ windowsHide: true,
330
+ };
331
+ const proc = spawn(influxdbServer, args, spawnOpts);
332
+ let settled = false;
333
+ let stderrOutput = '';
334
+ let stdoutOutput = '';
335
+ proc.on('error', (err) => {
336
+ if (settled)
337
+ return;
338
+ settled = true;
339
+ reject(new Error(`Failed to spawn InfluxDB server: ${err.message}`));
340
+ });
341
+ proc.on('exit', (code, signal) => {
342
+ if (settled)
343
+ return;
344
+ settled = true;
345
+ const reason = signal ? `signal ${signal}` : `code ${code}`;
346
+ reject(new Error(`InfluxDB process exited unexpectedly (${reason}).\n` +
347
+ `Stderr: ${stderrOutput || '(none)'}\n` +
348
+ `Stdout: ${stdoutOutput || '(none)'}`));
349
+ });
350
+ proc.stdout?.on('data', (data) => {
351
+ const str = data.toString();
352
+ stdoutOutput += str;
353
+ logDebug(`influxdb3 stdout: ${str}`);
354
+ });
355
+ proc.stderr?.on('data', (data) => {
356
+ const str = data.toString();
357
+ stderrOutput += str;
358
+ logDebug(`influxdb3 stderr: ${str}`);
359
+ });
360
+ proc.unref();
361
+ setTimeout(async () => {
362
+ if (settled)
363
+ return;
364
+ if (!proc.pid) {
365
+ settled = true;
366
+ reject(new Error('InfluxDB server process failed to start (no PID)'));
367
+ return;
368
+ }
369
+ try {
370
+ await writeFile(pidFile, String(proc.pid));
371
+ }
372
+ catch {
373
+ // Non-fatal
374
+ }
375
+ const ready = await this.waitForReady(port);
376
+ if (settled)
377
+ return;
378
+ if (ready) {
379
+ settled = true;
380
+ resolve({
381
+ port,
382
+ connectionString: this.getConnectionString(container),
383
+ });
384
+ }
385
+ else {
386
+ settled = true;
387
+ // Clean up the orphaned detached process before rejecting
388
+ if (proc.pid && platformService.isProcessRunning(proc.pid)) {
389
+ try {
390
+ await platformService.terminateProcess(proc.pid, true);
391
+ }
392
+ catch {
393
+ // Ignore cleanup errors
394
+ }
395
+ }
396
+ const portError = await checkLogForError();
397
+ const errorDetails = [
398
+ portError || 'InfluxDB failed to start within timeout.',
399
+ `Binary: ${influxdbServer}`,
400
+ `Log file: ${logFile}`,
401
+ stderrOutput ? `Stderr:\n${stderrOutput}` : '',
402
+ stdoutOutput ? `Stdout:\n${stdoutOutput}` : '',
403
+ ]
404
+ .filter(Boolean)
405
+ .join('\n');
406
+ reject(new Error(errorDetails));
407
+ }
408
+ }, START_CHECK_DELAY_MS);
409
+ });
410
+ }
411
+ // macOS/Linux: spawn with ignored stdio so Node.js can exit cleanly
412
+ const proc = spawn(influxdbServer, args, {
413
+ cwd: containerDir,
414
+ stdio: ['ignore', 'ignore', 'ignore'],
415
+ detached: true,
416
+ });
417
+ proc.unref();
418
+ if (!proc.pid) {
419
+ throw new Error('InfluxDB server process failed to start (no PID)');
420
+ }
421
+ try {
422
+ await writeFile(pidFile, String(proc.pid));
423
+ }
424
+ catch {
425
+ // Non-fatal
426
+ }
427
+ // Wait for InfluxDB to be ready
428
+ const ready = await this.waitForReady(port);
429
+ if (ready) {
430
+ return {
431
+ port,
432
+ connectionString: this.getConnectionString(container),
433
+ };
434
+ }
435
+ // Clean up the orphaned detached process before throwing
436
+ if (proc.pid) {
437
+ try {
438
+ process.kill(-proc.pid, 'SIGTERM');
439
+ logDebug(`Killed process group ${proc.pid}`);
440
+ }
441
+ catch {
442
+ try {
443
+ process.kill(proc.pid, 'SIGTERM');
444
+ logDebug(`Killed process ${proc.pid}`);
445
+ }
446
+ catch {
447
+ // Ignore - process may have already exited
448
+ }
449
+ }
450
+ }
451
+ // Clean up PID file
452
+ if (existsSync(pidFile)) {
453
+ try {
454
+ await unlink(pidFile);
455
+ }
456
+ catch {
457
+ // Non-fatal
458
+ }
459
+ }
460
+ const portError = await checkLogForError();
461
+ const errorDetails = [
462
+ portError || 'InfluxDB failed to start within timeout.',
463
+ `Binary: ${influxdbServer}`,
464
+ `Log file: ${logFile}`,
465
+ ]
466
+ .filter(Boolean)
467
+ .join('\n');
468
+ throw new Error(errorDetails);
469
+ }
470
+ // Wait for InfluxDB to be ready to accept connections
471
+ async waitForReady(port, timeoutMs = 30000) {
472
+ const startTime = Date.now();
473
+ const checkInterval = 500;
474
+ while (Date.now() - startTime < timeoutMs) {
475
+ try {
476
+ // InfluxDB 3.x health check endpoint
477
+ const response = await influxdbApiRequest(port, 'GET', '/health');
478
+ if (response.status === 200) {
479
+ logDebug(`InfluxDB ready on port ${port}`);
480
+ return true;
481
+ }
482
+ }
483
+ catch {
484
+ // Connection failed, wait and retry
485
+ }
486
+ await new Promise((resolve) => setTimeout(resolve, checkInterval));
487
+ }
488
+ logDebug(`InfluxDB did not become ready within ${timeoutMs}ms`);
489
+ return false;
490
+ }
491
+ /**
492
+ * Stop InfluxDB server
493
+ */
494
+ async stop(container) {
495
+ const { name, port } = container;
496
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
497
+ const pidFile = join(containerDir, 'influxdb.pid');
498
+ logDebug(`Stopping InfluxDB container "${name}" on port ${port}`);
499
+ // Get PID and terminate
500
+ let pid = null;
501
+ if (existsSync(pidFile)) {
502
+ try {
503
+ const content = await readFile(pidFile, 'utf8');
504
+ pid = parseInt(content.trim(), 10);
505
+ }
506
+ catch {
507
+ // Ignore
508
+ }
509
+ }
510
+ // Kill process if running
511
+ if (pid && platformService.isProcessRunning(pid)) {
512
+ logDebug(`Killing InfluxDB process ${pid}`);
513
+ try {
514
+ if (isWindows()) {
515
+ await platformService.terminateProcess(pid, true);
516
+ }
517
+ else {
518
+ await platformService.terminateProcess(pid, false);
519
+ await new Promise((resolve) => setTimeout(resolve, 2000));
520
+ if (platformService.isProcessRunning(pid)) {
521
+ logWarning(`Graceful termination failed, force killing ${pid}`);
522
+ await platformService.terminateProcess(pid, true);
523
+ }
524
+ }
525
+ }
526
+ catch (error) {
527
+ logDebug(`Process termination error: ${error}`);
528
+ }
529
+ }
530
+ // Wait for process to fully terminate
531
+ if (isWindows()) {
532
+ await new Promise((resolve) => setTimeout(resolve, 3000));
533
+ }
534
+ // Kill any processes still listening on the port
535
+ const portPids = await platformService.findProcessByPort(port);
536
+ for (const portPid of portPids) {
537
+ if (platformService.isProcessRunning(portPid)) {
538
+ logDebug(`Killing process ${portPid} still on port ${port}`);
539
+ try {
540
+ await platformService.terminateProcess(portPid, true);
541
+ }
542
+ catch {
543
+ // Ignore
544
+ }
545
+ }
546
+ }
547
+ // On Windows, wait again after killing port processes
548
+ if (isWindows() && portPids.length > 0) {
549
+ await new Promise((resolve) => setTimeout(resolve, 2000));
550
+ }
551
+ // Cleanup PID file
552
+ if (existsSync(pidFile)) {
553
+ try {
554
+ await unlink(pidFile);
555
+ }
556
+ catch {
557
+ // Ignore
558
+ }
559
+ }
560
+ // On Windows, wait for ports to be released
561
+ if (isWindows()) {
562
+ logDebug(`Waiting for port ${port} to be released...`);
563
+ const portWaitStart = Date.now();
564
+ const portWaitTimeout = 30000;
565
+ const checkInterval = 500;
566
+ while (Date.now() - portWaitStart < portWaitTimeout) {
567
+ const httpAvailable = await portManager.isPortAvailable(port);
568
+ if (httpAvailable) {
569
+ logDebug('Port released successfully');
570
+ break;
571
+ }
572
+ await new Promise((resolve) => setTimeout(resolve, checkInterval));
573
+ }
574
+ }
575
+ logDebug('InfluxDB stopped');
576
+ }
577
+ // Get InfluxDB server status
578
+ async status(container) {
579
+ const { name, port } = container;
580
+ const containerDir = paths.getContainerPath(name, { engine: ENGINE });
581
+ const pidFile = join(containerDir, 'influxdb.pid');
582
+ // Try health check via REST API
583
+ try {
584
+ const response = await influxdbApiRequest(port, 'GET', '/health');
585
+ if (response.status === 200) {
586
+ return { running: true, message: 'InfluxDB is running' };
587
+ }
588
+ }
589
+ catch {
590
+ // Not responding, check PID
591
+ }
592
+ // Check PID file
593
+ if (existsSync(pidFile)) {
594
+ try {
595
+ const content = await readFile(pidFile, 'utf8');
596
+ const pid = parseInt(content.trim(), 10);
597
+ if (!isNaN(pid) && pid > 0 && platformService.isProcessRunning(pid)) {
598
+ return {
599
+ running: true,
600
+ message: `InfluxDB is running (PID: ${pid})`,
601
+ };
602
+ }
603
+ }
604
+ catch {
605
+ // Ignore
606
+ }
607
+ }
608
+ return { running: false, message: 'InfluxDB is not running' };
609
+ }
610
+ // Detect backup format
611
+ async detectBackupFormat(filePath) {
612
+ return detectBackupFormatImpl(filePath);
613
+ }
614
+ /**
615
+ * Restore a backup
616
+ * InfluxDB can be running during SQL restore (via REST API)
617
+ */
618
+ async restore(container, backupPath, _options = {}) {
619
+ const { name, port } = container;
620
+ const database = _options.database || container.database;
621
+ return restoreBackup(backupPath, {
622
+ containerName: name,
623
+ port,
624
+ database,
625
+ });
626
+ }
627
+ /**
628
+ * Get connection string
629
+ * Format: http://127.0.0.1:PORT
630
+ */
631
+ getConnectionString(container, _database) {
632
+ const { port } = container;
633
+ return `http://127.0.0.1:${port}`;
634
+ }
635
+ // Open HTTP API (InfluxDB uses REST API)
636
+ async connect(container, _database) {
637
+ const { port } = container;
638
+ const url = `http://127.0.0.1:${port}`;
639
+ console.log(`InfluxDB REST API available at: ${url}`);
640
+ console.log('');
641
+ console.log('Example commands:');
642
+ console.log(` curl ${url}/health`);
643
+ console.log(` curl -X POST ${url}/api/v3/query_sql -H "Content-Type: application/json" -d '{"db":"mydb","q":"SELECT 1"}'`);
644
+ }
645
+ /**
646
+ * Create a new database
647
+ * InfluxDB 3.x creates databases implicitly on first write,
648
+ * but we can verify the server is running
649
+ */
650
+ async createDatabase(container, database) {
651
+ const { port } = container;
652
+ // InfluxDB 3.x creates databases implicitly when data is written
653
+ // Verify server is accessible and write a test record to create the database
654
+ const response = await influxdbApiRequest(port, 'POST', `/api/v3/write_lp?db=${encodeURIComponent(database)}`, undefined);
655
+ // A 204 or 200 means success, but we might also get a 2xx with empty body
656
+ // which is fine - database will be created on first write
657
+ if (response.status >= 400) {
658
+ logDebug(`Database creation note: ${JSON.stringify(response.data)}. Database will be created on first write.`);
659
+ }
660
+ logDebug(`InfluxDB database "${database}" ready (created on first write)`);
661
+ }
662
+ /**
663
+ * Drop a database
664
+ * InfluxDB 3.x doesn't have a direct DROP DATABASE command via REST
665
+ */
666
+ async dropDatabase(container, database) {
667
+ const { port } = container;
668
+ // Try to delete tables in the database
669
+ const tablesResponse = await influxdbApiRequest(port, 'POST', '/api/v3/query_sql', {
670
+ db: database,
671
+ q: 'SHOW TABLES',
672
+ format: 'json',
673
+ });
674
+ if (tablesResponse.status === 200) {
675
+ const tables = tablesResponse.data;
676
+ if (Array.isArray(tables)) {
677
+ for (const row of tables) {
678
+ // Only drop user tables (iox schema), skip system/information_schema
679
+ const schema = row.table_schema;
680
+ if (schema && schema !== 'iox')
681
+ continue;
682
+ const tableName = row.table_name ||
683
+ row.name ||
684
+ Object.values(row)[0];
685
+ if (tableName) {
686
+ await influxdbApiRequest(port, 'POST', '/api/v3/query_sql', {
687
+ db: database,
688
+ q: `DROP TABLE "${tableName}"`,
689
+ format: 'json',
690
+ });
691
+ }
692
+ }
693
+ }
694
+ }
695
+ logDebug(`Dropped tables in InfluxDB database: ${database}`);
696
+ }
697
+ /**
698
+ * Get the storage size of the InfluxDB instance
699
+ */
700
+ async getDatabaseSize(_container) {
701
+ // InfluxDB 3.x doesn't have a direct size endpoint
702
+ // Return null to use filesystem-based calculation
703
+ return null;
704
+ }
705
+ /**
706
+ * Dump from a remote InfluxDB connection
707
+ * Uses InfluxDB's REST API to query tables and export data as SQL
708
+ */
709
+ async dumpFromConnectionString(connectionString, outputPath) {
710
+ const { baseUrl, headers, database } = parseInfluxDBConnectionString(connectionString);
711
+ logDebug(`Connecting to remote InfluxDB at ${baseUrl}`);
712
+ // Check connectivity
713
+ const healthResponse = await remoteInfluxDBRequest(baseUrl, 'GET', '/health', headers);
714
+ if (healthResponse.status !== 200) {
715
+ throw new Error(`Failed to connect to InfluxDB at ${baseUrl}: ${JSON.stringify(healthResponse.data)}`);
716
+ }
717
+ const db = database || 'mydb';
718
+ const warnings = [];
719
+ // Get list of tables
720
+ const tablesResponse = await remoteInfluxDBRequest(baseUrl, 'POST', '/api/v3/query_sql', headers, { db, q: 'SHOW TABLES', format: 'json' });
721
+ const tablesData = tablesResponse.data;
722
+ const tables = [];
723
+ if (Array.isArray(tablesData)) {
724
+ for (const row of tablesData) {
725
+ const schema = row.table_schema;
726
+ if (schema && schema !== 'iox')
727
+ continue;
728
+ const tableName = row.table_name ||
729
+ row.name ||
730
+ Object.values(row)[0];
731
+ if (tableName)
732
+ tables.push(tableName);
733
+ }
734
+ }
735
+ logDebug(`Found ${tables.length} tables on remote server`);
736
+ if (tables.length === 0) {
737
+ warnings.push(`Remote InfluxDB instance has no tables in database "${db}"`);
738
+ }
739
+ // Build SQL dump (same format as local backup)
740
+ let sqlContent = `-- InfluxDB SQL Backup\n`;
741
+ sqlContent += `-- Database: ${db}\n`;
742
+ sqlContent += `-- Source: ${baseUrl}\n`;
743
+ sqlContent += `-- Created: ${new Date().toISOString()}\n\n`;
744
+ for (const table of tables) {
745
+ // Query column metadata for tag identification
746
+ const tagColumns = [];
747
+ try {
748
+ const colResponse = await remoteInfluxDBRequest(baseUrl, 'POST', '/api/v3/query_sql', headers, {
749
+ db,
750
+ q: `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '${table.replace(/'/g, "''")}'`,
751
+ format: 'json',
752
+ });
753
+ if (colResponse.status === 200 && Array.isArray(colResponse.data)) {
754
+ for (const col of colResponse.data) {
755
+ if (String(col.data_type || '').includes('Dictionary')) {
756
+ tagColumns.push(String(col.column_name));
757
+ }
758
+ }
759
+ }
760
+ }
761
+ catch {
762
+ logDebug(`Warning: Could not query column metadata for ${table}`);
763
+ }
764
+ // Query all data from the table
765
+ const dataResponse = await remoteInfluxDBRequest(baseUrl, 'POST', '/api/v3/query_sql', headers, {
766
+ db,
767
+ q: `SELECT * FROM "${table.replace(/"/g, '""')}"`,
768
+ format: 'json',
769
+ });
770
+ if (dataResponse.status !== 200) {
771
+ const msg = `Failed to export table ${table}: ${JSON.stringify(dataResponse.data)}`;
772
+ logDebug(`Warning: ${msg}`);
773
+ warnings.push(msg);
774
+ continue;
775
+ }
776
+ const rows = dataResponse.data;
777
+ if (Array.isArray(rows) && rows.length > 0) {
778
+ sqlContent += `-- Table: ${table}\n`;
779
+ if (tagColumns.length > 0) {
780
+ sqlContent += `-- Tags: ${tagColumns.join(', ')}\n`;
781
+ }
782
+ for (const row of rows) {
783
+ const columns = Object.keys(row);
784
+ const values = columns.map((col) => {
785
+ const val = row[col];
786
+ if (val === null || val === undefined)
787
+ return 'NULL';
788
+ if (typeof val === 'number')
789
+ return String(val);
790
+ if (typeof val === 'boolean')
791
+ return val ? 'true' : 'false';
792
+ return `'${String(val).replace(/'/g, "''")}'`;
793
+ });
794
+ sqlContent += `INSERT INTO "${table.replace(/"/g, '""')}" (${columns.map((c) => `"${c.replace(/"/g, '""')}"`).join(', ')}) VALUES (${values.join(', ')});\n`;
795
+ }
796
+ sqlContent += '\n';
797
+ }
798
+ }
799
+ // Write SQL content to file
800
+ await writeFile(outputPath, sqlContent, 'utf-8');
801
+ return {
802
+ filePath: outputPath,
803
+ warnings,
804
+ };
805
+ }
806
+ // Create a backup
807
+ async backup(container, outputPath, options) {
808
+ return createBackup(container, outputPath, options);
809
+ }
810
+ // Run a command - InfluxDB uses REST API with SQL
811
+ async runScript(container, options) {
812
+ const { port } = container;
813
+ const database = options.database || container.database;
814
+ if (options.file) {
815
+ const content = await readFile(options.file, 'utf-8');
816
+ // Ensure the database exists (InfluxDB creates DBs implicitly on write,
817
+ // but SQL queries fail if the DB doesn't exist yet)
818
+ const createDbResp = await influxdbApiRequest(port, 'POST', '/api/v3/configure/database', { db: database });
819
+ if (createDbResp.status >= 400) {
820
+ throw new Error(`Failed to create database "${database}": HTTP ${createDbResp.status} — ${JSON.stringify(createDbResp.data)}`);
821
+ }
822
+ // Line protocol files (.lp) → write via /api/v3/write_lp
823
+ if (options.file.endsWith('.lp')) {
824
+ const lines = content
825
+ .split('\n')
826
+ .filter((line) => line.trim().length > 0 && !line.startsWith('#'))
827
+ .join('\n');
828
+ const response = await influxdbApiRequest(port, 'POST', `/api/v3/write_lp?db=${encodeURIComponent(database)}`, lines);
829
+ if (response.status >= 400) {
830
+ throw new Error(`Write error: ${JSON.stringify(response.data)}`);
831
+ }
832
+ return;
833
+ }
834
+ // SQL files → execute via /api/v3/query_sql
835
+ const statements = content
836
+ .split('\n')
837
+ .filter((line) => !line.startsWith('--') && line.trim().length > 0)
838
+ .join('\n')
839
+ .split(';')
840
+ .map((s) => s.trim())
841
+ .filter((s) => s.length > 0);
842
+ for (const sql of statements) {
843
+ const response = await influxdbApiRequest(port, 'POST', '/api/v3/query_sql', {
844
+ db: database,
845
+ q: sql,
846
+ format: 'json',
847
+ });
848
+ if (response.status >= 400) {
849
+ throw new Error(`SQL error: ${JSON.stringify(response.data)}\nStatement: ${sql}`);
850
+ }
851
+ }
852
+ return;
853
+ }
854
+ if (options.sql) {
855
+ // Ensure database exists for inline SQL too
856
+ const createDbResp2 = await influxdbApiRequest(port, 'POST', '/api/v3/configure/database', { db: database });
857
+ if (createDbResp2.status >= 400) {
858
+ throw new Error(`Failed to create database "${database}": HTTP ${createDbResp2.status} — ${JSON.stringify(createDbResp2.data)}`);
859
+ }
860
+ const response = await influxdbApiRequest(port, 'POST', '/api/v3/query_sql', {
861
+ db: database,
862
+ q: options.sql,
863
+ format: 'json',
864
+ });
865
+ if (response.status >= 400) {
866
+ throw new Error(`SQL error: ${JSON.stringify(response.data)}`);
867
+ }
868
+ if (response.data) {
869
+ console.log(JSON.stringify(response.data, null, 2));
870
+ }
871
+ return;
872
+ }
873
+ throw new Error('Either file or sql option must be provided');
874
+ }
875
+ /**
876
+ * Execute a query via REST API
877
+ *
878
+ * Query format: SQL statement or METHOD /path [JSON body]
879
+ * Examples:
880
+ * SELECT * FROM cpu
881
+ * GET /health
882
+ * POST /api/v3/query_sql {"db": "mydb", "q": "SELECT 1"}
883
+ */
884
+ async executeQuery(container, query, options) {
885
+ const { port } = container;
886
+ const database = options?.database || container.database;
887
+ const trimmed = query.trim();
888
+ // Check if this is a REST API-style query (starts with HTTP method)
889
+ const httpMethods = ['GET', 'POST', 'PUT', 'DELETE'];
890
+ const firstWord = trimmed.split(/\s+/)[0].toUpperCase();
891
+ if (httpMethods.includes(firstWord)) {
892
+ // Parse as REST API query: METHOD /path [body]
893
+ const spaceIdx = trimmed.indexOf(' ');
894
+ const method = (options?.method || firstWord);
895
+ const rest = trimmed.substring(spaceIdx + 1).trim();
896
+ let path;
897
+ let body = options?.body;
898
+ const bodyStart = rest.indexOf('{');
899
+ if (bodyStart !== -1) {
900
+ path = rest.substring(0, bodyStart).trim();
901
+ if (!body) {
902
+ try {
903
+ body = JSON.parse(rest.substring(bodyStart));
904
+ }
905
+ catch {
906
+ throw new Error('Invalid JSON body in query');
907
+ }
908
+ }
909
+ }
910
+ else {
911
+ path = rest;
912
+ }
913
+ if (!path.startsWith('/')) {
914
+ path = '/' + path;
915
+ }
916
+ const response = await influxdbApiRequest(port, method, path, body);
917
+ if (response.status >= 400) {
918
+ throw new Error(`InfluxDB API error (${response.status}): ${JSON.stringify(response.data)}`);
919
+ }
920
+ return parseRESTAPIResult(JSON.stringify(response.data));
921
+ }
922
+ // Default: treat as SQL query
923
+ const response = await influxdbApiRequest(port, 'POST', '/api/v3/query_sql', {
924
+ db: database,
925
+ q: trimmed,
926
+ format: 'json',
927
+ });
928
+ if (response.status >= 400) {
929
+ throw new Error(`InfluxDB SQL error (${response.status}): ${JSON.stringify(response.data)}`);
930
+ }
931
+ return parseRESTAPIResult(JSON.stringify(response.data));
932
+ }
933
+ /**
934
+ * List databases for InfluxDB.
935
+ * InfluxDB 3.x uses GET /api/v3/configure/database?format=json
936
+ */
937
+ async listDatabases(container) {
938
+ const { port } = container;
939
+ try {
940
+ const response = await influxdbApiRequest(port, 'GET', '/api/v3/configure/database?format=json');
941
+ if (response.status === 200 && response.data) {
942
+ const data = response.data;
943
+ if (Array.isArray(data)) {
944
+ const databases = data
945
+ .map((row) => {
946
+ return (row['iox::database'] ||
947
+ row.name ||
948
+ Object.values(row)[0]);
949
+ })
950
+ .filter(Boolean);
951
+ return databases.length > 0 ? databases : [container.database];
952
+ }
953
+ }
954
+ return [container.database];
955
+ }
956
+ catch {
957
+ return [container.database];
958
+ }
959
+ }
960
+ }
961
+ export const influxdbEngine = new InfluxDBEngine();
962
+ //# sourceMappingURL=index.js.map