clawsql 0.1.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 (311) hide show
  1. package/.env.example +97 -0
  2. package/README.md +372 -0
  3. package/dist/__tests__/config/settings.test.d.ts +5 -0
  4. package/dist/__tests__/config/settings.test.d.ts.map +1 -0
  5. package/dist/__tests__/config/settings.test.js +154 -0
  6. package/dist/__tests__/config/settings.test.js.map +1 -0
  7. package/dist/__tests__/core/discovery/topology.test.d.ts +5 -0
  8. package/dist/__tests__/core/discovery/topology.test.d.ts.map +1 -0
  9. package/dist/__tests__/core/discovery/topology.test.js +191 -0
  10. package/dist/__tests__/core/discovery/topology.test.js.map +1 -0
  11. package/dist/__tests__/core/failover/executor.test.d.ts +5 -0
  12. package/dist/__tests__/core/failover/executor.test.d.ts.map +1 -0
  13. package/dist/__tests__/core/failover/executor.test.js +256 -0
  14. package/dist/__tests__/core/failover/executor.test.js.map +1 -0
  15. package/dist/__tests__/core/monitoring/collector.test.d.ts +5 -0
  16. package/dist/__tests__/core/monitoring/collector.test.d.ts.map +1 -0
  17. package/dist/__tests__/core/monitoring/collector.test.js +131 -0
  18. package/dist/__tests__/core/monitoring/collector.test.js.map +1 -0
  19. package/dist/__tests__/core/monitoring/exporters.test.d.ts +5 -0
  20. package/dist/__tests__/core/monitoring/exporters.test.d.ts.map +1 -0
  21. package/dist/__tests__/core/monitoring/exporters.test.js +90 -0
  22. package/dist/__tests__/core/monitoring/exporters.test.js.map +1 -0
  23. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts +5 -0
  24. package/dist/__tests__/core/routing/proxysql-manager.test.d.ts.map +1 -0
  25. package/dist/__tests__/core/routing/proxysql-manager.test.js +155 -0
  26. package/dist/__tests__/core/routing/proxysql-manager.test.js.map +1 -0
  27. package/dist/__tests__/types/index.test.d.ts +5 -0
  28. package/dist/__tests__/types/index.test.d.ts.map +1 -0
  29. package/dist/__tests__/types/index.test.js +290 -0
  30. package/dist/__tests__/types/index.test.js.map +1 -0
  31. package/dist/__tests__/utils/exceptions.test.d.ts +5 -0
  32. package/dist/__tests__/utils/exceptions.test.d.ts.map +1 -0
  33. package/dist/__tests__/utils/exceptions.test.js +142 -0
  34. package/dist/__tests__/utils/exceptions.test.js.map +1 -0
  35. package/dist/api/routes/clusters.d.ts +7 -0
  36. package/dist/api/routes/clusters.d.ts.map +1 -0
  37. package/dist/api/routes/clusters.js +123 -0
  38. package/dist/api/routes/clusters.js.map +1 -0
  39. package/dist/api/routes/config.d.ts +7 -0
  40. package/dist/api/routes/config.d.ts.map +1 -0
  41. package/dist/api/routes/config.js +65 -0
  42. package/dist/api/routes/config.js.map +1 -0
  43. package/dist/api/routes/failover.d.ts +7 -0
  44. package/dist/api/routes/failover.d.ts.map +1 -0
  45. package/dist/api/routes/failover.js +100 -0
  46. package/dist/api/routes/failover.js.map +1 -0
  47. package/dist/api/routes/instances.d.ts +11 -0
  48. package/dist/api/routes/instances.d.ts.map +1 -0
  49. package/dist/api/routes/instances.js +315 -0
  50. package/dist/api/routes/instances.js.map +1 -0
  51. package/dist/api/routes/monitoring.d.ts +7 -0
  52. package/dist/api/routes/monitoring.d.ts.map +1 -0
  53. package/dist/api/routes/monitoring.js +72 -0
  54. package/dist/api/routes/monitoring.js.map +1 -0
  55. package/dist/api/routes/webhooks.d.ts +12 -0
  56. package/dist/api/routes/webhooks.d.ts.map +1 -0
  57. package/dist/api/routes/webhooks.js +232 -0
  58. package/dist/api/routes/webhooks.js.map +1 -0
  59. package/dist/api/schemas/index.d.ts +965 -0
  60. package/dist/api/schemas/index.d.ts.map +1 -0
  61. package/dist/api/schemas/index.js +171 -0
  62. package/dist/api/schemas/index.js.map +1 -0
  63. package/dist/app.d.ts +13 -0
  64. package/dist/app.d.ts.map +1 -0
  65. package/dist/app.js +197 -0
  66. package/dist/app.js.map +1 -0
  67. package/dist/bin/clawsql.d.ts +12 -0
  68. package/dist/bin/clawsql.d.ts.map +1 -0
  69. package/dist/bin/clawsql.js +43 -0
  70. package/dist/bin/clawsql.js.map +1 -0
  71. package/dist/cli/agent/handler.d.ts +73 -0
  72. package/dist/cli/agent/handler.d.ts.map +1 -0
  73. package/dist/cli/agent/handler.js +258 -0
  74. package/dist/cli/agent/handler.js.map +1 -0
  75. package/dist/cli/agent/index.d.ts +14 -0
  76. package/dist/cli/agent/index.d.ts.map +1 -0
  77. package/dist/cli/agent/index.js +30 -0
  78. package/dist/cli/agent/index.js.map +1 -0
  79. package/dist/cli/agent/openclaw-integration.d.ts +81 -0
  80. package/dist/cli/agent/openclaw-integration.d.ts.map +1 -0
  81. package/dist/cli/agent/openclaw-integration.js +341 -0
  82. package/dist/cli/agent/openclaw-integration.js.map +1 -0
  83. package/dist/cli/agent/providers/anthropic.d.ts +27 -0
  84. package/dist/cli/agent/providers/anthropic.d.ts.map +1 -0
  85. package/dist/cli/agent/providers/anthropic.js +106 -0
  86. package/dist/cli/agent/providers/anthropic.js.map +1 -0
  87. package/dist/cli/agent/providers/base.d.ts +91 -0
  88. package/dist/cli/agent/providers/base.d.ts.map +1 -0
  89. package/dist/cli/agent/providers/base.js +24 -0
  90. package/dist/cli/agent/providers/base.js.map +1 -0
  91. package/dist/cli/agent/providers/openai.d.ts +27 -0
  92. package/dist/cli/agent/providers/openai.d.ts.map +1 -0
  93. package/dist/cli/agent/providers/openai.js +98 -0
  94. package/dist/cli/agent/providers/openai.js.map +1 -0
  95. package/dist/cli/agent/tools/index.d.ts +32 -0
  96. package/dist/cli/agent/tools/index.d.ts.map +1 -0
  97. package/dist/cli/agent/tools/index.js +263 -0
  98. package/dist/cli/agent/tools/index.js.map +1 -0
  99. package/dist/cli/commands/cleanup.d.ts +12 -0
  100. package/dist/cli/commands/cleanup.d.ts.map +1 -0
  101. package/dist/cli/commands/cleanup.js +205 -0
  102. package/dist/cli/commands/cleanup.js.map +1 -0
  103. package/dist/cli/commands/clusters.d.ts +12 -0
  104. package/dist/cli/commands/clusters.d.ts.map +1 -0
  105. package/dist/cli/commands/clusters.js +468 -0
  106. package/dist/cli/commands/clusters.js.map +1 -0
  107. package/dist/cli/commands/config.d.ts +12 -0
  108. package/dist/cli/commands/config.d.ts.map +1 -0
  109. package/dist/cli/commands/config.js +406 -0
  110. package/dist/cli/commands/config.js.map +1 -0
  111. package/dist/cli/commands/cron.d.ts +12 -0
  112. package/dist/cli/commands/cron.d.ts.map +1 -0
  113. package/dist/cli/commands/cron.js +215 -0
  114. package/dist/cli/commands/cron.js.map +1 -0
  115. package/dist/cli/commands/doctor.d.ts +13 -0
  116. package/dist/cli/commands/doctor.d.ts.map +1 -0
  117. package/dist/cli/commands/doctor.js +687 -0
  118. package/dist/cli/commands/doctor.js.map +1 -0
  119. package/dist/cli/commands/failover.d.ts +16 -0
  120. package/dist/cli/commands/failover.d.ts.map +1 -0
  121. package/dist/cli/commands/failover.js +333 -0
  122. package/dist/cli/commands/failover.js.map +1 -0
  123. package/dist/cli/commands/health.d.ts +12 -0
  124. package/dist/cli/commands/health.d.ts.map +1 -0
  125. package/dist/cli/commands/health.js +125 -0
  126. package/dist/cli/commands/health.js.map +1 -0
  127. package/dist/cli/commands/help.d.ts +12 -0
  128. package/dist/cli/commands/help.d.ts.map +1 -0
  129. package/dist/cli/commands/help.js +52 -0
  130. package/dist/cli/commands/help.js.map +1 -0
  131. package/dist/cli/commands/instances.d.ts +12 -0
  132. package/dist/cli/commands/instances.d.ts.map +1 -0
  133. package/dist/cli/commands/instances.js +801 -0
  134. package/dist/cli/commands/instances.js.map +1 -0
  135. package/dist/cli/commands/notify.d.ts +12 -0
  136. package/dist/cli/commands/notify.d.ts.map +1 -0
  137. package/dist/cli/commands/notify.js +43 -0
  138. package/dist/cli/commands/notify.js.map +1 -0
  139. package/dist/cli/commands/sql.d.ts +12 -0
  140. package/dist/cli/commands/sql.d.ts.map +1 -0
  141. package/dist/cli/commands/sql.js +90 -0
  142. package/dist/cli/commands/sql.js.map +1 -0
  143. package/dist/cli/commands/start.d.ts +12 -0
  144. package/dist/cli/commands/start.d.ts.map +1 -0
  145. package/dist/cli/commands/start.js +174 -0
  146. package/dist/cli/commands/start.js.map +1 -0
  147. package/dist/cli/commands/status.d.ts +12 -0
  148. package/dist/cli/commands/status.d.ts.map +1 -0
  149. package/dist/cli/commands/status.js +218 -0
  150. package/dist/cli/commands/status.js.map +1 -0
  151. package/dist/cli/commands/stop.d.ts +12 -0
  152. package/dist/cli/commands/stop.d.ts.map +1 -0
  153. package/dist/cli/commands/stop.js +128 -0
  154. package/dist/cli/commands/stop.js.map +1 -0
  155. package/dist/cli/commands/topology.d.ts +12 -0
  156. package/dist/cli/commands/topology.d.ts.map +1 -0
  157. package/dist/cli/commands/topology.js +106 -0
  158. package/dist/cli/commands/topology.js.map +1 -0
  159. package/dist/cli/completer.d.ts +47 -0
  160. package/dist/cli/completer.d.ts.map +1 -0
  161. package/dist/cli/completer.js +332 -0
  162. package/dist/cli/completer.js.map +1 -0
  163. package/dist/cli/formatter.d.ts +165 -0
  164. package/dist/cli/formatter.d.ts.map +1 -0
  165. package/dist/cli/formatter.js +408 -0
  166. package/dist/cli/formatter.js.map +1 -0
  167. package/dist/cli/index.d.ts +21 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +79 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/raw-input.d.ts +97 -0
  172. package/dist/cli/raw-input.d.ts.map +1 -0
  173. package/dist/cli/raw-input.js +493 -0
  174. package/dist/cli/raw-input.js.map +1 -0
  175. package/dist/cli/registry.d.ts +103 -0
  176. package/dist/cli/registry.d.ts.map +1 -0
  177. package/dist/cli/registry.js +205 -0
  178. package/dist/cli/registry.js.map +1 -0
  179. package/dist/cli/repl.d.ts +83 -0
  180. package/dist/cli/repl.d.ts.map +1 -0
  181. package/dist/cli/repl.js +447 -0
  182. package/dist/cli/repl.js.map +1 -0
  183. package/dist/cli/ui/components.d.ts +144 -0
  184. package/dist/cli/ui/components.d.ts.map +1 -0
  185. package/dist/cli/ui/components.js +331 -0
  186. package/dist/cli/ui/components.js.map +1 -0
  187. package/dist/cli/ui/index.d.ts +7 -0
  188. package/dist/cli/ui/index.d.ts.map +1 -0
  189. package/dist/cli/ui/index.js +23 -0
  190. package/dist/cli/ui/index.js.map +1 -0
  191. package/dist/cli/utils/docker-files.d.ts +39 -0
  192. package/dist/cli/utils/docker-files.d.ts.map +1 -0
  193. package/dist/cli/utils/docker-files.js +223 -0
  194. package/dist/cli/utils/docker-files.js.map +1 -0
  195. package/dist/cli/utils/docker-prereq.d.ts +48 -0
  196. package/dist/cli/utils/docker-prereq.d.ts.map +1 -0
  197. package/dist/cli/utils/docker-prereq.js +203 -0
  198. package/dist/cli/utils/docker-prereq.js.map +1 -0
  199. package/dist/config/settings.d.ts +594 -0
  200. package/dist/config/settings.d.ts.map +1 -0
  201. package/dist/config/settings.js +250 -0
  202. package/dist/config/settings.js.map +1 -0
  203. package/dist/core/discovery/cluster-view.d.ts +50 -0
  204. package/dist/core/discovery/cluster-view.d.ts.map +1 -0
  205. package/dist/core/discovery/cluster-view.js +235 -0
  206. package/dist/core/discovery/cluster-view.js.map +1 -0
  207. package/dist/core/discovery/scanner.d.ts +70 -0
  208. package/dist/core/discovery/scanner.d.ts.map +1 -0
  209. package/dist/core/discovery/scanner.js +197 -0
  210. package/dist/core/discovery/scanner.js.map +1 -0
  211. package/dist/core/discovery/topology.d.ts +118 -0
  212. package/dist/core/discovery/topology.d.ts.map +1 -0
  213. package/dist/core/discovery/topology.js +550 -0
  214. package/dist/core/discovery/topology.js.map +1 -0
  215. package/dist/core/failover/candidate-selector.d.ts +46 -0
  216. package/dist/core/failover/candidate-selector.d.ts.map +1 -0
  217. package/dist/core/failover/candidate-selector.js +70 -0
  218. package/dist/core/failover/candidate-selector.js.map +1 -0
  219. package/dist/core/failover/executor.d.ts +104 -0
  220. package/dist/core/failover/executor.d.ts.map +1 -0
  221. package/dist/core/failover/executor.js +248 -0
  222. package/dist/core/failover/executor.js.map +1 -0
  223. package/dist/core/failover/operation-builder.d.ts +71 -0
  224. package/dist/core/failover/operation-builder.d.ts.map +1 -0
  225. package/dist/core/failover/operation-builder.js +157 -0
  226. package/dist/core/failover/operation-builder.js.map +1 -0
  227. package/dist/core/failover/operation-runner.d.ts +75 -0
  228. package/dist/core/failover/operation-runner.d.ts.map +1 -0
  229. package/dist/core/failover/operation-runner.js +191 -0
  230. package/dist/core/failover/operation-runner.js.map +1 -0
  231. package/dist/core/failover/promoter.d.ts +33 -0
  232. package/dist/core/failover/promoter.d.ts.map +1 -0
  233. package/dist/core/failover/promoter.js +97 -0
  234. package/dist/core/failover/promoter.js.map +1 -0
  235. package/dist/core/failover/recovery-manager.d.ts +47 -0
  236. package/dist/core/failover/recovery-manager.d.ts.map +1 -0
  237. package/dist/core/failover/recovery-manager.js +145 -0
  238. package/dist/core/failover/recovery-manager.js.map +1 -0
  239. package/dist/core/failover/types.d.ts +54 -0
  240. package/dist/core/failover/types.d.ts.map +1 -0
  241. package/dist/core/failover/types.js +8 -0
  242. package/dist/core/failover/types.js.map +1 -0
  243. package/dist/core/monitoring/collector.d.ts +25 -0
  244. package/dist/core/monitoring/collector.d.ts.map +1 -0
  245. package/dist/core/monitoring/collector.js +115 -0
  246. package/dist/core/monitoring/collector.js.map +1 -0
  247. package/dist/core/monitoring/exporters.d.ts +49 -0
  248. package/dist/core/monitoring/exporters.d.ts.map +1 -0
  249. package/dist/core/monitoring/exporters.js +126 -0
  250. package/dist/core/monitoring/exporters.js.map +1 -0
  251. package/dist/core/routing/proxysql-manager.d.ts +213 -0
  252. package/dist/core/routing/proxysql-manager.d.ts.map +1 -0
  253. package/dist/core/routing/proxysql-manager.js +632 -0
  254. package/dist/core/routing/proxysql-manager.js.map +1 -0
  255. package/dist/core/sync/replica-recovery.d.ts +40 -0
  256. package/dist/core/sync/replica-recovery.d.ts.map +1 -0
  257. package/dist/core/sync/replica-recovery.js +134 -0
  258. package/dist/core/sync/replica-recovery.js.map +1 -0
  259. package/dist/core/sync/sync-coordinator.d.ts +83 -0
  260. package/dist/core/sync/sync-coordinator.d.ts.map +1 -0
  261. package/dist/core/sync/sync-coordinator.js +254 -0
  262. package/dist/core/sync/sync-coordinator.js.map +1 -0
  263. package/dist/core/sync/topology-watcher.d.ts +76 -0
  264. package/dist/core/sync/topology-watcher.d.ts.map +1 -0
  265. package/dist/core/sync/topology-watcher.js +222 -0
  266. package/dist/core/sync/topology-watcher.js.map +1 -0
  267. package/dist/core/sync/types.d.ts +85 -0
  268. package/dist/core/sync/types.d.ts.map +1 -0
  269. package/dist/core/sync/types.js +8 -0
  270. package/dist/core/sync/types.js.map +1 -0
  271. package/dist/index.d.ts +5 -0
  272. package/dist/index.d.ts.map +1 -0
  273. package/dist/index.js +9 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/types/index.d.ts +212 -0
  276. package/dist/types/index.d.ts.map +1 -0
  277. package/dist/types/index.js +153 -0
  278. package/dist/types/index.js.map +1 -0
  279. package/dist/utils/database.d.ts +62 -0
  280. package/dist/utils/database.d.ts.map +1 -0
  281. package/dist/utils/database.js +257 -0
  282. package/dist/utils/database.js.map +1 -0
  283. package/dist/utils/exceptions.d.ts +69 -0
  284. package/dist/utils/exceptions.d.ts.map +1 -0
  285. package/dist/utils/exceptions.js +121 -0
  286. package/dist/utils/exceptions.js.map +1 -0
  287. package/dist/utils/logger.d.ts +20 -0
  288. package/dist/utils/logger.d.ts.map +1 -0
  289. package/dist/utils/logger.js +90 -0
  290. package/dist/utils/logger.js.map +1 -0
  291. package/dist/utils/mysql-client.d.ts +43 -0
  292. package/dist/utils/mysql-client.d.ts.map +1 -0
  293. package/dist/utils/mysql-client.js +125 -0
  294. package/dist/utils/mysql-client.js.map +1 -0
  295. package/docker/Dockerfile +61 -0
  296. package/docker/Dockerfile.node +41 -0
  297. package/docker/grafana/dashboards/clawsql.json +212 -0
  298. package/docker/grafana/provisioning/dashboards/dashboards.yml +13 -0
  299. package/docker/grafana/provisioning/datasources/datasources.yml +12 -0
  300. package/docker/init/primary.sql +26 -0
  301. package/docker/init/replica.sql +16 -0
  302. package/docker/orchestrator/orchestrator.conf.json +98 -0
  303. package/docker/prometheus/prometheus.yml +45 -0
  304. package/docker/proxysql/entrypoint.sh +8 -0
  305. package/docker/proxysql/init.sql.demo +30 -0
  306. package/docker/proxysql/proxysql.cnf +38 -0
  307. package/docker-compose.demo.yml +115 -0
  308. package/docker-compose.yml +217 -0
  309. package/init/primary.sql +19 -0
  310. package/init/replica.sql +13 -0
  311. package/package.json +84 -0
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL - Configuration Settings
4
+ *
5
+ * Application configuration loaded from environment variables.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getSettings = getSettings;
12
+ exports.resetSettings = resetSettings;
13
+ const zod_1 = require("zod");
14
+ const dotenv_1 = __importDefault(require("dotenv"));
15
+ // Load environment variables
16
+ dotenv_1.default.config();
17
+ // =============================================================================
18
+ // Configuration Schemas
19
+ // =============================================================================
20
+ const MetadataDBSettingsSchema = zod_1.z.object({
21
+ host: zod_1.z.string().optional(), // If not set, use 'metadata-mysql' container
22
+ port: zod_1.z.number().int().min(1).max(65535).default(3306),
23
+ name: zod_1.z.string().default('clawsql_meta'),
24
+ user: zod_1.z.string().default('clawsql'),
25
+ password: zod_1.z.string().default('clawsql_password'),
26
+ poolSize: zod_1.z.number().int().min(1).max(100).default(10),
27
+ });
28
+ const OrchestratorSettingsSchema = zod_1.z.object({
29
+ url: zod_1.z.string().url().default('http://localhost:3000'),
30
+ timeout: zod_1.z.number().positive().default(30.0),
31
+ tlsEnabled: zod_1.z.boolean().default(false),
32
+ tlsCert: zod_1.z.string().optional(),
33
+ tlsKey: zod_1.z.string().optional(),
34
+ });
35
+ const ProxySQLSettingsSchema = zod_1.z.object({
36
+ host: zod_1.z.string().default('localhost'),
37
+ adminPort: zod_1.z.number().int().default(6032),
38
+ mysqlPort: zod_1.z.number().int().default(6033),
39
+ adminUser: zod_1.z.string().default('clawsql'),
40
+ adminPassword: zod_1.z.string().default('clawsql'),
41
+ });
42
+ const PrometheusSettingsSchema = zod_1.z.object({
43
+ url: zod_1.z.string().url().default('http://localhost:9090'),
44
+ retentionDays: zod_1.z.number().int().positive().default(15),
45
+ });
46
+ const MonitoringSettingsSchema = zod_1.z.object({
47
+ collectionInterval: zod_1.z.number().positive().default(15.0),
48
+ healthCheckInterval: zod_1.z.number().positive().default(10.0),
49
+ alertCooldownMinutes: zod_1.z.number().int().min(0).default(5),
50
+ });
51
+ const FailoverSettingsSchema = zod_1.z.object({
52
+ autoFailoverEnabled: zod_1.z.boolean().default(true),
53
+ timeoutSeconds: zod_1.z.number().int().min(10).default(30),
54
+ minReplicasForFailover: zod_1.z.number().int().min(0).default(2),
55
+ confirmationChecks: zod_1.z.number().int().min(1).default(3),
56
+ });
57
+ const DiscoverySettingsSchema = zod_1.z.object({
58
+ networkSegments: zod_1.z.string().default('172.18.0.0/24'),
59
+ portRangeStart: zod_1.z.number().int().default(3306),
60
+ portRangeEnd: zod_1.z.number().int().default(3306),
61
+ timeout: zod_1.z.number().positive().default(2.0),
62
+ maxConcurrent: zod_1.z.number().int().positive().default(100),
63
+ });
64
+ const APISettingsSchema = zod_1.z.object({
65
+ host: zod_1.z.string().default('0.0.0.0'),
66
+ port: zod_1.z.number().int().min(1).max(65535).default(8080),
67
+ tokenSecret: zod_1.z.string().default('change-me-in-production'),
68
+ tokenExpiryHours: zod_1.z.number().int().positive().default(24),
69
+ });
70
+ const MySQLCredentialsSchema = zod_1.z.object({
71
+ adminUser: zod_1.z.string().default('clawsql'),
72
+ adminPassword: zod_1.z.string().default(''),
73
+ replicationUser: zod_1.z.string().default('repl'),
74
+ replicationPassword: zod_1.z.string().default(''),
75
+ });
76
+ const LogSettingsSchema = zod_1.z.object({
77
+ level: zod_1.z.enum(['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', 'SILENT']).default('ERROR'),
78
+ format: zod_1.z.enum(['json', 'text']).default('json'),
79
+ });
80
+ const AISettingsSchema = zod_1.z.object({
81
+ enabled: zod_1.z.boolean().default(false),
82
+ provider: zod_1.z.enum(['anthropic', 'openai', 'openclaw']).default('openclaw'),
83
+ model: zod_1.z.string().optional(),
84
+ maxTokens: zod_1.z.number().int().min(100).max(32000).default(4096),
85
+ temperature: zod_1.z.number().min(0).max(2).default(0.7),
86
+ });
87
+ const SyncSettingsSchema = zod_1.z.object({
88
+ enabled: zod_1.z.boolean().default(true),
89
+ pollIntervalMs: zod_1.z.number().int().min(60000).default(300000), // 5 minutes default
90
+ webhookSecret: zod_1.z.string().optional(),
91
+ syncCooldownMs: zod_1.z.number().int().min(1000).default(5000),
92
+ debounceMs: zod_1.z.number().int().min(100).default(1000),
93
+ maxRetries: zod_1.z.number().int().min(1).max(5).default(2),
94
+ });
95
+ const SettingsSchema = zod_1.z.object({
96
+ appName: zod_1.z.string().default('ClawSQL'),
97
+ appVersion: zod_1.z.string().default('0.1.0'),
98
+ debug: zod_1.z.boolean().default(false),
99
+ metadataDb: MetadataDBSettingsSchema,
100
+ orchestrator: OrchestratorSettingsSchema,
101
+ proxysql: ProxySQLSettingsSchema,
102
+ prometheus: PrometheusSettingsSchema,
103
+ monitoring: MonitoringSettingsSchema,
104
+ failover: FailoverSettingsSchema,
105
+ discovery: DiscoverySettingsSchema,
106
+ api: APISettingsSchema,
107
+ mysql: MySQLCredentialsSchema,
108
+ logging: LogSettingsSchema,
109
+ ai: AISettingsSchema,
110
+ sync: SyncSettingsSchema,
111
+ });
112
+ // =============================================================================
113
+ // Helper functions for environment variable parsing
114
+ // =============================================================================
115
+ function getEnvString(key, prefix = '') {
116
+ return process.env[`${prefix}${key}`];
117
+ }
118
+ function getEnvNumber(key, prefix = '') {
119
+ const value = process.env[`${prefix}${key}`];
120
+ return value ? parseFloat(value) : undefined;
121
+ }
122
+ function getEnvInt(key, prefix = '') {
123
+ const value = process.env[`${prefix}${key}`];
124
+ return value ? parseInt(value, 10) : undefined;
125
+ }
126
+ function getEnvBool(key, prefix = '') {
127
+ const value = process.env[`${prefix}${key}`];
128
+ if (value === undefined)
129
+ return undefined;
130
+ return value.toLowerCase() === 'true' || value === '1';
131
+ }
132
+ // =============================================================================
133
+ // Load and validate settings
134
+ // =============================================================================
135
+ function loadSettings() {
136
+ const rawSettings = {
137
+ appName: getEnvString('APP_NAME'),
138
+ appVersion: getEnvString('APP_VERSION'),
139
+ debug: getEnvBool('DEBUG'),
140
+ metadataDb: {
141
+ host: getEnvString('METADATA_DB_HOST'),
142
+ port: getEnvInt('METADATA_DB_PORT'),
143
+ name: getEnvString('METADATA_DB_NAME'),
144
+ user: getEnvString('METADATA_DB_USER'),
145
+ password: getEnvString('METADATA_DB_PASSWORD'),
146
+ poolSize: getEnvInt('METADATA_DB_POOL_SIZE'),
147
+ },
148
+ orchestrator: {
149
+ url: getEnvString('ORCHESTRATOR_URL'),
150
+ timeout: getEnvNumber('ORCHESTRATOR_TIMEOUT'),
151
+ tlsEnabled: getEnvBool('ORCHESTRATOR_TLS_ENABLED'),
152
+ tlsCert: getEnvString('ORCHESTRATOR_TLS_CERT'),
153
+ tlsKey: getEnvString('ORCHESTRATOR_TLS_KEY'),
154
+ },
155
+ proxysql: {
156
+ host: getEnvString('PROXYSQL_HOST'),
157
+ adminPort: getEnvInt('PROXYSQL_ADMIN_PORT'),
158
+ mysqlPort: getEnvInt('PROXYSQL_MYSQL_PORT'),
159
+ adminUser: getEnvString('PROXYSQL_ADMIN_USER'),
160
+ adminPassword: getEnvString('PROXYSQL_ADMIN_PASSWORD'),
161
+ },
162
+ prometheus: {
163
+ url: getEnvString('PROMETHEUS_URL'),
164
+ retentionDays: getEnvInt('PROMETHEUS_RETENTION_DAYS'),
165
+ },
166
+ monitoring: {
167
+ collectionInterval: getEnvNumber('MONITORING_COLLECTION_INTERVAL'),
168
+ healthCheckInterval: getEnvNumber('MONITORING_HEALTH_CHECK_INTERVAL'),
169
+ alertCooldownMinutes: getEnvInt('MONITORING_ALERT_COOLDOWN_MINUTES'),
170
+ },
171
+ failover: {
172
+ autoFailoverEnabled: getEnvBool('AUTO_FAILOVER_ENABLED'),
173
+ timeoutSeconds: getEnvInt('FAILOVER_TIMEOUT_SECONDS'),
174
+ minReplicasForFailover: getEnvInt('FAILOVER_MIN_REPLICAS'),
175
+ confirmationChecks: getEnvInt('FAILOVER_CONFIRMATION_CHECKS'),
176
+ },
177
+ discovery: {
178
+ networkSegments: getEnvString('DISCOVERY_NETWORK_SEGMENTS'),
179
+ portRangeStart: getEnvInt('DISCOVERY_PORT_RANGE_START'),
180
+ portRangeEnd: getEnvInt('DISCOVERY_PORT_RANGE_END'),
181
+ timeout: getEnvNumber('DISCOVERY_TIMEOUT'),
182
+ maxConcurrent: getEnvInt('DISCOVERY_MAX_CONCURRENT'),
183
+ },
184
+ api: {
185
+ host: getEnvString('API_HOST'),
186
+ port: getEnvInt('API_PORT'),
187
+ tokenSecret: getEnvString('API_TOKEN_SECRET'),
188
+ tokenExpiryHours: getEnvInt('API_TOKEN_EXPIRY_HOURS'),
189
+ },
190
+ mysql: {
191
+ adminUser: getEnvString('MYSQL_ADMIN_USER'),
192
+ adminPassword: getEnvString('MYSQL_ADMIN_PASSWORD'),
193
+ replicationUser: getEnvString('MYSQL_REPLICATION_USER'),
194
+ replicationPassword: getEnvString('MYSQL_REPLICATION_PASSWORD'),
195
+ },
196
+ logging: {
197
+ level: getEnvString('LOG_LEVEL'),
198
+ format: getEnvString('LOG_FORMAT'),
199
+ },
200
+ ai: {
201
+ enabled: getEnvBool('CLAWSQL_AI_ENABLED'),
202
+ provider: getEnvString('CLAWSQL_AI_PROVIDER'),
203
+ model: getEnvString('CLAWSQL_AI_MODEL'),
204
+ maxTokens: getEnvInt('CLAWSQL_AI_MAX_TOKENS'),
205
+ temperature: getEnvNumber('CLAWSQL_AI_TEMPERATURE'),
206
+ },
207
+ sync: {
208
+ enabled: getEnvBool('SYNC_ENABLED'),
209
+ pollIntervalMs: getEnvInt('SYNC_POLL_INTERVAL_MS'),
210
+ webhookSecret: getEnvString('SYNC_WEBHOOK_SECRET'),
211
+ syncCooldownMs: getEnvInt('SYNC_COOLDOWN_MS'),
212
+ debounceMs: getEnvInt('SYNC_DEBOUNCE_MS'),
213
+ maxRetries: getEnvInt('SYNC_MAX_RETRIES'),
214
+ },
215
+ };
216
+ // Remove undefined values recursively
217
+ const removeUndefined = (obj) => {
218
+ const result = {};
219
+ for (const [key, value] of Object.entries(obj)) {
220
+ if (value !== undefined) {
221
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
222
+ result[key] = removeUndefined(value);
223
+ }
224
+ else {
225
+ result[key] = value;
226
+ }
227
+ }
228
+ }
229
+ return result;
230
+ };
231
+ return SettingsSchema.parse(removeUndefined(rawSettings));
232
+ }
233
+ // Cached settings instance
234
+ let cachedSettings = null;
235
+ /**
236
+ * Get application settings (cached)
237
+ */
238
+ function getSettings() {
239
+ if (!cachedSettings) {
240
+ cachedSettings = loadSettings();
241
+ }
242
+ return cachedSettings;
243
+ }
244
+ /**
245
+ * Reset settings cache (for testing)
246
+ */
247
+ function resetSettings() {
248
+ cachedSettings = null;
249
+ }
250
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/config/settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * ClawSQL - Cluster View Service
3
+ *
4
+ * Merges Orchestrator topology with ProxySQL routing/connection data
5
+ * to provide a unified view of cluster status.
6
+ */
7
+ import { MergedClusterView } from '../../types/index.js';
8
+ import { OrchestratorClient } from './topology.js';
9
+ import { ProxySQLManager } from '../routing/proxysql-manager.js';
10
+ /**
11
+ * Service for creating merged cluster views
12
+ */
13
+ export declare class ClusterViewService {
14
+ private orchestrator;
15
+ private proxysql;
16
+ constructor(orchestrator: OrchestratorClient, proxysql: ProxySQLManager);
17
+ /**
18
+ * Get merged cluster views for all clusters
19
+ */
20
+ getAllMergedViews(): Promise<MergedClusterView[]>;
21
+ /**
22
+ * Get merged cluster view for a specific cluster
23
+ */
24
+ getMergedView(clusterName: string): Promise<MergedClusterView | null>;
25
+ /**
26
+ * Merge Orchestrator instance data with ProxySQL stats
27
+ */
28
+ private mergeInstance;
29
+ /**
30
+ * Create a lookup map from server stats
31
+ */
32
+ private createStatsMap;
33
+ /**
34
+ * Find hostgroup mapping for a cluster
35
+ */
36
+ private createHostgroupMap;
37
+ /**
38
+ * Calculate overall health based on instance states
39
+ */
40
+ private calculateHealth;
41
+ /**
42
+ * Detect sync warnings between Orchestrator and ProxySQL
43
+ */
44
+ private detectSyncWarnings;
45
+ }
46
+ /**
47
+ * Get the cluster view service instance
48
+ */
49
+ export declare function getClusterViewService(): ClusterViewService;
50
+ //# sourceMappingURL=cluster-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-view.d.ts","sourceRoot":"","sources":["../../../src/core/discovery/cluster-view.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAEL,iBAAiB,EAKlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,eAAe,EAGhB,MAAM,gCAAgC,CAAC;AAIxC;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ;gBADR,YAAY,EAAE,kBAAkB,EAChC,QAAQ,EAAE,eAAe;IAGnC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAcvD;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA0D3E;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA6E3B;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAU1D"}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+ /**
3
+ * ClawSQL - Cluster View Service
4
+ *
5
+ * Merges Orchestrator topology with ProxySQL routing/connection data
6
+ * to provide a unified view of cluster status.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClusterViewService = void 0;
10
+ exports.getClusterViewService = getClusterViewService;
11
+ const logger_js_1 = require("../../utils/logger.js");
12
+ const index_js_1 = require("../../types/index.js");
13
+ const logger = (0, logger_js_1.getLogger)('cluster-view');
14
+ /**
15
+ * Service for creating merged cluster views
16
+ */
17
+ class ClusterViewService {
18
+ orchestrator;
19
+ proxysql;
20
+ constructor(orchestrator, proxysql) {
21
+ this.orchestrator = orchestrator;
22
+ this.proxysql = proxysql;
23
+ }
24
+ /**
25
+ * Get merged cluster views for all clusters
26
+ */
27
+ async getAllMergedViews() {
28
+ const clusters = await this.orchestrator.getClusters();
29
+ const views = [];
30
+ for (const clusterName of clusters) {
31
+ const view = await this.getMergedView(clusterName);
32
+ if (view) {
33
+ views.push(view);
34
+ }
35
+ }
36
+ return views;
37
+ }
38
+ /**
39
+ * Get merged cluster view for a specific cluster
40
+ */
41
+ async getMergedView(clusterName) {
42
+ try {
43
+ // Fetch all data in parallel
44
+ const [topology, serverStats, hostgroups] = await Promise.all([
45
+ this.orchestrator.getTopology(clusterName),
46
+ this.proxysql.getServerStats(),
47
+ this.proxysql.getReplicationHostgroups(),
48
+ ]);
49
+ if (!topology) {
50
+ return null;
51
+ }
52
+ // Create lookup maps
53
+ const statsMap = this.createStatsMap(serverStats);
54
+ const hostgroupMap = this.createHostgroupMap(hostgroups, topology.clusterId);
55
+ // Build merged view
56
+ const primary = topology.primary
57
+ ? this.mergeInstance(topology.primary, statsMap, hostgroupMap.writer)
58
+ : null;
59
+ const replicas = topology.replicas.map((r) => this.mergeInstance(r, statsMap, hostgroupMap.reader));
60
+ // Calculate health
61
+ const health = this.calculateHealth(primary, replicas);
62
+ // Detect sync warnings
63
+ const syncWarnings = this.detectSyncWarnings(primary, replicas, hostgroupMap, serverStats);
64
+ return {
65
+ clusterId: topology.clusterId,
66
+ displayName: topology.name || clusterName,
67
+ endpoint: {
68
+ host: this.proxysql.getHost(),
69
+ port: this.proxysql.getMySQLPort(),
70
+ },
71
+ hostgroups: hostgroupMap.writer !== undefined
72
+ ? { writer: hostgroupMap.writer, reader: hostgroupMap.reader ?? 20 }
73
+ : undefined,
74
+ primary,
75
+ replicas,
76
+ health,
77
+ syncWarnings,
78
+ };
79
+ }
80
+ catch (error) {
81
+ logger.error({ error, clusterName }, 'Failed to get merged cluster view');
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Merge Orchestrator instance data with ProxySQL stats
87
+ */
88
+ mergeInstance(instance, statsMap, hostgroup) {
89
+ const key = `${instance.host}:${instance.port}`;
90
+ const stats = statsMap.get(key);
91
+ return {
92
+ host: instance.host,
93
+ port: instance.port,
94
+ state: instance.state,
95
+ role: instance.role,
96
+ version: instance.version,
97
+ serverId: instance.serverId,
98
+ replicationLag: instance.replicationLag,
99
+ hostgroup,
100
+ proxysqlStatus: stats?.status,
101
+ connections: stats?.connUsed,
102
+ };
103
+ }
104
+ /**
105
+ * Create a lookup map from server stats
106
+ */
107
+ createStatsMap(stats) {
108
+ const map = new Map();
109
+ for (const stat of stats) {
110
+ const key = `${stat.host}:${stat.port}`;
111
+ map.set(key, stat);
112
+ }
113
+ return map;
114
+ }
115
+ /**
116
+ * Find hostgroup mapping for a cluster
117
+ */
118
+ createHostgroupMap(hostgroups, clusterId) {
119
+ // Try to find by cluster ID in comment
120
+ for (const hg of hostgroups) {
121
+ if (hg.comment?.includes(clusterId) || hg.comment?.includes('Cluster:')) {
122
+ return { writer: hg.writerHostgroup, reader: hg.readerHostgroup };
123
+ }
124
+ }
125
+ // Default to standard hostgroups
126
+ if (hostgroups.length > 0) {
127
+ return {
128
+ writer: hostgroups[0].writerHostgroup,
129
+ reader: hostgroups[0].readerHostgroup,
130
+ };
131
+ }
132
+ // Fallback to defaults
133
+ return { writer: 10, reader: 20 };
134
+ }
135
+ /**
136
+ * Calculate overall health based on instance states
137
+ */
138
+ calculateHealth(primary, replicas) {
139
+ const totalInstances = (primary ? 1 : 0) + replicas.length;
140
+ if (totalInstances === 0) {
141
+ return index_js_1.HealthStatus.UNKNOWN;
142
+ }
143
+ let healthyCount = 0;
144
+ if (primary && primary.state === index_js_1.InstanceState.ONLINE) {
145
+ healthyCount++;
146
+ }
147
+ healthyCount += replicas.filter((r) => r.state === index_js_1.InstanceState.ONLINE).length;
148
+ const ratio = healthyCount / totalInstances;
149
+ if (ratio >= 1.0)
150
+ return index_js_1.HealthStatus.HEALTHY;
151
+ if (ratio >= 0.5)
152
+ return index_js_1.HealthStatus.DEGRADED;
153
+ return index_js_1.HealthStatus.UNHEALTHY;
154
+ }
155
+ /**
156
+ * Detect sync warnings between Orchestrator and ProxySQL
157
+ */
158
+ detectSyncWarnings(primary, replicas, hostgroupMap, allServerStats) {
159
+ const warnings = [];
160
+ const orchestratorInstances = new Set();
161
+ // Check primary
162
+ if (primary) {
163
+ const key = `${primary.host}:${primary.port}`;
164
+ orchestratorInstances.add(key);
165
+ // Check if primary is missing in ProxySQL
166
+ if (!primary.proxysqlStatus) {
167
+ warnings.push({
168
+ type: 'missing_in_proxysql',
169
+ instance: key,
170
+ message: `Primary ${key} is not configured in ProxySQL`,
171
+ });
172
+ }
173
+ // Check if primary is in wrong hostgroup (should be in writer)
174
+ else if (hostgroupMap.writer !== undefined &&
175
+ primary.hostgroup !== undefined &&
176
+ primary.hostgroup !== hostgroupMap.writer) {
177
+ warnings.push({
178
+ type: 'wrong_hostgroup',
179
+ instance: key,
180
+ message: `Primary ${key} is in hostgroup ${primary.hostgroup} (should be ${hostgroupMap.writer})`,
181
+ });
182
+ }
183
+ }
184
+ // Check replicas
185
+ for (const replica of replicas) {
186
+ const key = `${replica.host}:${replica.port}`;
187
+ orchestratorInstances.add(key);
188
+ // Check if replica is missing in ProxySQL
189
+ if (!replica.proxysqlStatus) {
190
+ warnings.push({
191
+ type: 'missing_in_proxysql',
192
+ instance: key,
193
+ message: `Replica ${key} is not configured in ProxySQL`,
194
+ });
195
+ }
196
+ // Check if replica is in wrong hostgroup (should be in reader)
197
+ else if (hostgroupMap.reader !== undefined &&
198
+ replica.hostgroup !== undefined &&
199
+ replica.hostgroup !== hostgroupMap.reader) {
200
+ warnings.push({
201
+ type: 'wrong_hostgroup',
202
+ instance: key,
203
+ message: `Replica ${key} is in hostgroup ${replica.hostgroup} (should be ${hostgroupMap.reader})`,
204
+ });
205
+ }
206
+ }
207
+ // Check for instances in ProxySQL that are not in Orchestrator topology
208
+ for (const stat of allServerStats) {
209
+ const key = `${stat.host}:${stat.port}`;
210
+ if (!orchestratorInstances.has(key) && stat.status === 'ONLINE') {
211
+ warnings.push({
212
+ type: 'unknown_in_orchestrator',
213
+ instance: key,
214
+ message: `${key} is in ProxySQL but not in Orchestrator topology`,
215
+ });
216
+ }
217
+ }
218
+ return warnings;
219
+ }
220
+ }
221
+ exports.ClusterViewService = ClusterViewService;
222
+ // Singleton instance
223
+ let clusterViewService = null;
224
+ /**
225
+ * Get the cluster view service instance
226
+ */
227
+ function getClusterViewService() {
228
+ if (!clusterViewService) {
229
+ const { getOrchestratorClient } = require('./topology.js');
230
+ const { getProxySQLManager } = require('../routing/proxysql-manager.js');
231
+ clusterViewService = new ClusterViewService(getOrchestratorClient(), getProxySQLManager());
232
+ }
233
+ return clusterViewService;
234
+ }
235
+ //# sourceMappingURL=cluster-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster-view.js","sourceRoot":"","sources":["../../../src/core/discovery/cluster-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * ClawSQL - Network Scanner
3
+ *
4
+ * Scans networks for MySQL instances.
5
+ */
6
+ /**
7
+ * MySQL instance discovered on the network
8
+ */
9
+ export interface DiscoveredInstance {
10
+ host: string;
11
+ port: number;
12
+ version?: string;
13
+ serverId?: number;
14
+ isMySQL: boolean;
15
+ error?: string;
16
+ }
17
+ /**
18
+ * Scanner options
19
+ */
20
+ export interface ScannerOptions {
21
+ /** Network CIDR (e.g., '192.168.1.0/24') */
22
+ network: string;
23
+ /** Port range start */
24
+ portStart: number;
25
+ /** Port range end */
26
+ portEnd: number;
27
+ /** Connection timeout in ms */
28
+ timeout: number;
29
+ /** Maximum concurrent connections */
30
+ maxConcurrent: number;
31
+ /** MySQL credentials for probing */
32
+ user?: string;
33
+ password?: string;
34
+ }
35
+ /**
36
+ * Network Scanner
37
+ */
38
+ export declare class NetworkScanner {
39
+ private options;
40
+ constructor(options: Partial<ScannerOptions> & {
41
+ network: string;
42
+ });
43
+ /**
44
+ * Scan the network for MySQL instances
45
+ */
46
+ scan(onProgress?: (found: number, scanned: number) => void): Promise<DiscoveredInstance[]>;
47
+ /**
48
+ * Expand CIDR network to list of IP addresses
49
+ */
50
+ private expandNetwork;
51
+ /**
52
+ * Expand port range to list of ports
53
+ */
54
+ private expandPorts;
55
+ /**
56
+ * Probe a host:port for MySQL
57
+ */
58
+ private probeMySQL;
59
+ }
60
+ /**
61
+ * Quick scan for a single host
62
+ */
63
+ export declare function probeMySQLInstance(host: string, port: number, user?: string, password?: string, timeout?: number): Promise<DiscoveredInstance>;
64
+ /**
65
+ * Get or create a network scanner
66
+ */
67
+ export declare function getScanner(options?: Partial<ScannerOptions> & {
68
+ network: string;
69
+ }): NetworkScanner;
70
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/core/discovery/scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAIlE;;OAEG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAyChG;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;YACW,UAAU;CA2DzB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAKD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAKlG"}