@revealui/mcp 0.1.0 → 0.1.3

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 (293) hide show
  1. package/LICENSE +22 -0
  2. package/LICENSE.commercial +111 -0
  3. package/README.md +3 -0
  4. package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
  5. package/dist/adapters/db.d.ts.map +1 -0
  6. package/dist/adapters/db.js.map +1 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js.map +1 -0
  9. package/dist/contracts.d.ts.map +1 -0
  10. package/dist/contracts.js.map +1 -0
  11. package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
  12. package/dist/hypervisor.d.ts.map +1 -0
  13. package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
  14. package/dist/hypervisor.js.map +1 -0
  15. package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/{packages/mcp/src/index.js → index.js} +8 -4
  18. package/dist/index.js.map +1 -0
  19. package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
  20. package/dist/servers/adapter.d.ts.map +1 -0
  21. package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
  22. package/dist/servers/adapter.js.map +1 -0
  23. package/dist/servers/revealui-content.d.ts +21 -0
  24. package/dist/servers/revealui-content.d.ts.map +1 -0
  25. package/dist/servers/revealui-content.js +211 -0
  26. package/dist/servers/revealui-content.js.map +1 -0
  27. package/dist/servers/revealui-email.d.ts +18 -0
  28. package/dist/servers/revealui-email.d.ts.map +1 -0
  29. package/dist/servers/revealui-email.js +190 -0
  30. package/dist/servers/revealui-email.js.map +1 -0
  31. package/dist/servers/revealui-stripe.d.ts +19 -0
  32. package/dist/servers/revealui-stripe.d.ts.map +1 -0
  33. package/dist/servers/revealui-stripe.js +228 -0
  34. package/dist/servers/revealui-stripe.js.map +1 -0
  35. package/package.json +50 -11
  36. package/.env.example +0 -9
  37. package/MCP_MAINTENANCE.md +0 -265
  38. package/__tests__/crdt.integration.test.ts +0 -156
  39. package/configs/README.md +0 -77
  40. package/configs/claude-template.json +0 -54
  41. package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
  42. package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
  43. package/dist/packages/core/src/database/ssl-config.js +0 -8
  44. package/dist/packages/core/src/database/ssl-config.js.map +0 -1
  45. package/dist/packages/core/src/features.d.ts +0 -86
  46. package/dist/packages/core/src/features.d.ts.map +0 -1
  47. package/dist/packages/core/src/features.js +0 -93
  48. package/dist/packages/core/src/features.js.map +0 -1
  49. package/dist/packages/core/src/license.d.ts +0 -75
  50. package/dist/packages/core/src/license.d.ts.map +0 -1
  51. package/dist/packages/core/src/license.js +0 -174
  52. package/dist/packages/core/src/license.js.map +0 -1
  53. package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
  54. package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
  55. package/dist/packages/core/src/monitoring/alerts.js +0 -325
  56. package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
  57. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
  58. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
  59. package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
  60. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
  61. package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
  62. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
  63. package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
  64. package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
  65. package/dist/packages/core/src/monitoring/index.d.ts +0 -14
  66. package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
  67. package/dist/packages/core/src/monitoring/index.js +0 -18
  68. package/dist/packages/core/src/monitoring/index.js.map +0 -1
  69. package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
  70. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
  71. package/dist/packages/core/src/monitoring/process-registry.js +0 -223
  72. package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
  73. package/dist/packages/core/src/monitoring/types.d.ts +0 -231
  74. package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
  75. package/dist/packages/core/src/monitoring/types.js +0 -43
  76. package/dist/packages/core/src/monitoring/types.js.map +0 -1
  77. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
  78. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
  79. package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
  80. package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
  81. package/dist/packages/core/src/observability/logger.d.ts +0 -47
  82. package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
  83. package/dist/packages/core/src/observability/logger.js +0 -141
  84. package/dist/packages/core/src/observability/logger.js.map +0 -1
  85. package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
  86. package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
  87. package/dist/packages/core/src/utils/logger-server.js +0 -69
  88. package/dist/packages/core/src/utils/logger-server.js.map +0 -1
  89. package/dist/packages/core/src/utils/request-context.d.ts +0 -143
  90. package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
  91. package/dist/packages/core/src/utils/request-context.js +0 -169
  92. package/dist/packages/core/src/utils/request-context.js.map +0 -1
  93. package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
  94. package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
  95. package/dist/packages/dev/src/code-validator/index.js +0 -20
  96. package/dist/packages/dev/src/code-validator/index.js.map +0 -1
  97. package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
  98. package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
  99. package/dist/packages/dev/src/code-validator/types.js +0 -7
  100. package/dist/packages/dev/src/code-validator/types.js.map +0 -1
  101. package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
  102. package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
  103. package/dist/packages/dev/src/code-validator/validator.js +0 -176
  104. package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
  105. package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
  106. package/dist/packages/mcp/src/adapters/db.js.map +0 -1
  107. package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
  108. package/dist/packages/mcp/src/config/index.js.map +0 -1
  109. package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
  110. package/dist/packages/mcp/src/contracts.js.map +0 -1
  111. package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
  112. package/dist/packages/mcp/src/hypervisor.js.map +0 -1
  113. package/dist/packages/mcp/src/index.d.ts.map +0 -1
  114. package/dist/packages/mcp/src/index.js.map +0 -1
  115. package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
  116. package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
  117. package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
  118. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
  119. package/dist/packages/mcp/src/servers/code-validator.js +0 -156
  120. package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
  121. package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
  122. package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
  123. package/dist/packages/mcp/src/servers/neon.js +0 -90
  124. package/dist/packages/mcp/src/servers/neon.js.map +0 -1
  125. package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
  126. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
  127. package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
  128. package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
  129. package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
  130. package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
  131. package/dist/packages/mcp/src/servers/playwright.js +0 -68
  132. package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
  133. package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
  134. package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
  135. package/dist/packages/mcp/src/servers/stripe.js +0 -86
  136. package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
  137. package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
  138. package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
  139. package/dist/packages/mcp/src/servers/supabase.js +0 -144
  140. package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
  141. package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
  142. package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
  143. package/dist/packages/mcp/src/servers/vercel.js +0 -87
  144. package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
  145. package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
  146. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
  147. package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
  148. package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
  149. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
  150. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
  151. package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
  152. package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
  153. package/dist/scripts/lib/analyzers/index.d.ts +0 -11
  154. package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
  155. package/dist/scripts/lib/analyzers/index.js +0 -11
  156. package/dist/scripts/lib/analyzers/index.js.map +0 -1
  157. package/dist/scripts/lib/args.d.ts +0 -104
  158. package/dist/scripts/lib/args.d.ts.map +0 -1
  159. package/dist/scripts/lib/args.js +0 -304
  160. package/dist/scripts/lib/args.js.map +0 -1
  161. package/dist/scripts/lib/cache.d.ts +0 -185
  162. package/dist/scripts/lib/cache.d.ts.map +0 -1
  163. package/dist/scripts/lib/cache.js +0 -390
  164. package/dist/scripts/lib/cache.js.map +0 -1
  165. package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
  166. package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
  167. package/dist/scripts/lib/cli/dispatch.js +0 -206
  168. package/dist/scripts/lib/cli/dispatch.js.map +0 -1
  169. package/dist/scripts/lib/cli/index.d.ts +0 -10
  170. package/dist/scripts/lib/cli/index.d.ts.map +0 -1
  171. package/dist/scripts/lib/cli/index.js +0 -10
  172. package/dist/scripts/lib/cli/index.js.map +0 -1
  173. package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
  174. package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
  175. package/dist/scripts/lib/database/ssl-config.js +0 -47
  176. package/dist/scripts/lib/database/ssl-config.js.map +0 -1
  177. package/dist/scripts/lib/errors.d.ts +0 -218
  178. package/dist/scripts/lib/errors.d.ts.map +0 -1
  179. package/dist/scripts/lib/errors.js +0 -543
  180. package/dist/scripts/lib/errors.js.map +0 -1
  181. package/dist/scripts/lib/exec.d.ts +0 -107
  182. package/dist/scripts/lib/exec.d.ts.map +0 -1
  183. package/dist/scripts/lib/exec.js +0 -232
  184. package/dist/scripts/lib/exec.js.map +0 -1
  185. package/dist/scripts/lib/index.d.ts +0 -50
  186. package/dist/scripts/lib/index.d.ts.map +0 -1
  187. package/dist/scripts/lib/index.js +0 -65
  188. package/dist/scripts/lib/index.js.map +0 -1
  189. package/dist/scripts/lib/logger.d.ts +0 -50
  190. package/dist/scripts/lib/logger.d.ts.map +0 -1
  191. package/dist/scripts/lib/logger.js +0 -159
  192. package/dist/scripts/lib/logger.js.map +0 -1
  193. package/dist/scripts/lib/output.d.ts +0 -149
  194. package/dist/scripts/lib/output.d.ts.map +0 -1
  195. package/dist/scripts/lib/output.js +0 -263
  196. package/dist/scripts/lib/output.js.map +0 -1
  197. package/dist/scripts/lib/parallel.d.ts +0 -164
  198. package/dist/scripts/lib/parallel.d.ts.map +0 -1
  199. package/dist/scripts/lib/parallel.js +0 -355
  200. package/dist/scripts/lib/parallel.js.map +0 -1
  201. package/dist/scripts/lib/paths.d.ts +0 -92
  202. package/dist/scripts/lib/paths.d.ts.map +0 -1
  203. package/dist/scripts/lib/paths.js +0 -171
  204. package/dist/scripts/lib/paths.js.map +0 -1
  205. package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
  206. package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
  207. package/dist/scripts/lib/state/adapters/memory.js +0 -110
  208. package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
  209. package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
  210. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
  211. package/dist/scripts/lib/state/adapters/pglite.js +0 -256
  212. package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
  213. package/dist/scripts/lib/state/index.d.ts +0 -16
  214. package/dist/scripts/lib/state/index.d.ts.map +0 -1
  215. package/dist/scripts/lib/state/index.js +0 -16
  216. package/dist/scripts/lib/state/index.js.map +0 -1
  217. package/dist/scripts/lib/state/types.d.ts +0 -111
  218. package/dist/scripts/lib/state/types.d.ts.map +0 -1
  219. package/dist/scripts/lib/state/types.js +0 -8
  220. package/dist/scripts/lib/state/types.js.map +0 -1
  221. package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
  222. package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
  223. package/dist/scripts/lib/state/workflow-state.js +0 -331
  224. package/dist/scripts/lib/state/workflow-state.js.map +0 -1
  225. package/dist/scripts/lib/telemetry.d.ts +0 -194
  226. package/dist/scripts/lib/telemetry.d.ts.map +0 -1
  227. package/dist/scripts/lib/telemetry.js +0 -394
  228. package/dist/scripts/lib/telemetry.js.map +0 -1
  229. package/dist/scripts/lib/utils.d.ts +0 -270
  230. package/dist/scripts/lib/utils.d.ts.map +0 -1
  231. package/dist/scripts/lib/utils.js +0 -473
  232. package/dist/scripts/lib/utils.js.map +0 -1
  233. package/dist/scripts/lib/validation/database.d.ts +0 -83
  234. package/dist/scripts/lib/validation/database.d.ts.map +0 -1
  235. package/dist/scripts/lib/validation/database.js +0 -199
  236. package/dist/scripts/lib/validation/database.js.map +0 -1
  237. package/dist/scripts/lib/validation/env.d.ts +0 -80
  238. package/dist/scripts/lib/validation/env.d.ts.map +0 -1
  239. package/dist/scripts/lib/validation/env.js +0 -246
  240. package/dist/scripts/lib/validation/env.js.map +0 -1
  241. package/dist/scripts/lib/validation/index.d.ts +0 -16
  242. package/dist/scripts/lib/validation/index.d.ts.map +0 -1
  243. package/dist/scripts/lib/validation/index.js +0 -16
  244. package/dist/scripts/lib/validation/index.js.map +0 -1
  245. package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
  246. package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
  247. package/dist/scripts/lib/validation/post-execution.js +0 -110
  248. package/dist/scripts/lib/validation/post-execution.js.map +0 -1
  249. package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
  250. package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
  251. package/dist/scripts/lib/validation/pre-execution.js +0 -466
  252. package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
  253. package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
  254. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
  255. package/dist/scripts/lib/validators/documentation-validator.js +0 -584
  256. package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
  257. package/dist/scripts/lib/validators/index.d.ts +0 -11
  258. package/dist/scripts/lib/validators/index.d.ts.map +0 -1
  259. package/dist/scripts/lib/validators/index.js +0 -11
  260. package/dist/scripts/lib/validators/index.js.map +0 -1
  261. package/docker-compose.yml +0 -46
  262. package/docs/INDEX.md +0 -88
  263. package/docs/README.md +0 -774
  264. package/docs/SETUP.md +0 -264
  265. package/docs/servers/code-validator.md +0 -586
  266. package/eslint.config.js +0 -7
  267. package/migrations/0001_add_crdt_columns.sql +0 -8
  268. package/migrations/0001_rollback.sql +0 -6
  269. package/migrations/005_performance_indexes.sql +0 -190
  270. package/migrations/backfill_crdt_meta.js +0 -45
  271. package/src/__tests__/hypervisor.test.ts +0 -212
  272. package/src/adapters/db.ts +0 -180
  273. package/src/config/config.json +0 -49
  274. package/src/config/index.ts +0 -30
  275. package/src/contracts.ts +0 -221
  276. package/src/hypervisor.ts +0 -464
  277. package/src/index.ts +0 -87
  278. package/src/servers/adapter.ts +0 -643
  279. package/src/servers/code-validator.ts +0 -188
  280. package/src/servers/neon.ts +0 -103
  281. package/src/servers/next-devtools.ts +0 -230
  282. package/src/servers/playwright.ts +0 -77
  283. package/src/servers/stripe.ts +0 -99
  284. package/src/servers/supabase.ts +0 -161
  285. package/src/servers/vercel.ts +0 -100
  286. package/src/servers/vultr-test.ts +0 -97
  287. package/tsconfig.json +0 -12
  288. package/vitest.config.ts +0 -22
  289. /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
  290. /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
  291. /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
  292. /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
  293. /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
@@ -1,199 +0,0 @@
1
- /**
2
- * Database Validation Utilities
3
- *
4
- * Validates database connections and schema.
5
- *
6
- * @dependencies
7
- * - scripts/lib/logger.ts - Logger utilities
8
- * - pg - PostgreSQL client for connection testing
9
- */
10
- import { getSSLConfig } from '../database/ssl-config.js';
11
- import { createLogger } from '../logger.js';
12
- /**
13
- * Parses a PostgreSQL connection string to extract components.
14
- */
15
- export function parseConnectionString(connectionString) {
16
- try {
17
- const url = new URL(connectionString);
18
- return {
19
- host: url.hostname,
20
- port: Number.parseInt(url.port, 10) || 5432,
21
- database: url.pathname.slice(1) || 'postgres',
22
- user: url.username,
23
- password: url.password,
24
- ssl: url.searchParams.get('sslmode') !== 'disable',
25
- };
26
- }
27
- catch {
28
- return null;
29
- }
30
- }
31
- /**
32
- * Detects the database provider from a connection string.
33
- */
34
- export function detectDatabaseProvider(connectionString) {
35
- const lowerUrl = connectionString.toLowerCase();
36
- if (lowerUrl.includes('.neon.tech') || lowerUrl.includes('neon.')) {
37
- return 'neon';
38
- }
39
- if (lowerUrl.includes('.supabase.co') || lowerUrl.includes('pooler.supabase.com')) {
40
- return 'supabase';
41
- }
42
- if (lowerUrl.startsWith('postgresql://') || lowerUrl.startsWith('postgres://')) {
43
- return 'postgres';
44
- }
45
- return 'unknown';
46
- }
47
- /**
48
- * Validates a database connection by attempting to connect.
49
- *
50
- * @example
51
- * ```typescript
52
- * const result = await validateDatabaseConnection(process.env.POSTGRES_URL!)
53
- * if (!result.connected) {
54
- * console.error('Connection failed:', result.error)
55
- * }
56
- * ```
57
- */
58
- export async function validateDatabaseConnection(connectionString, options = {}) {
59
- const { timeout = 10000, logger = createLogger({ level: 'silent' }) } = options;
60
- const provider = detectDatabaseProvider(connectionString);
61
- const result = {
62
- connected: false,
63
- isNeon: provider === 'neon',
64
- isSupabase: provider === 'supabase',
65
- };
66
- const startTime = Date.now();
67
- try {
68
- // Use pg Pool for connection testing
69
- const { Pool } = await import('pg');
70
- const pool = new Pool({
71
- connectionString,
72
- connectionTimeoutMillis: timeout,
73
- ssl: getSSLConfig(connectionString),
74
- });
75
- try {
76
- const client = await pool.connect();
77
- try {
78
- // Test basic query
79
- const versionResult = await client.query('SELECT version(), current_database()');
80
- const row = versionResult.rows[0];
81
- result.connected = true;
82
- result.latencyMs = Date.now() - startTime;
83
- result.serverVersion = row?.version?.split(' ')[1] || 'unknown';
84
- result.database = row?.current_database || 'unknown';
85
- logger.success(`Connected to ${provider} database: ${result.database}`);
86
- logger.info(`Latency: ${result.latencyMs}ms`);
87
- }
88
- finally {
89
- client.release();
90
- }
91
- }
92
- finally {
93
- await pool.end();
94
- }
95
- }
96
- catch (error) {
97
- result.error = error instanceof Error ? error.message : String(error);
98
- logger.error(`Failed to connect to database: ${result.error}`);
99
- }
100
- return result;
101
- }
102
- /**
103
- * Validates that required tables exist in the database.
104
- *
105
- * @example
106
- * ```typescript
107
- * const { valid, missing } = await validateTables(connectionString, ['users', 'sessions', 'sites'])
108
- * ```
109
- */
110
- export async function validateTables(connectionString, expectedTables) {
111
- const { Pool } = await import('pg');
112
- const pool = new Pool({
113
- connectionString,
114
- ssl: getSSLConfig(connectionString),
115
- });
116
- try {
117
- const client = await pool.connect();
118
- try {
119
- const result = await client.query(`
120
- SELECT table_name
121
- FROM information_schema.tables
122
- WHERE table_schema = 'public'
123
- AND table_type = 'BASE TABLE'
124
- `);
125
- const existingTables = new Set(result.rows.map((r) => r.table_name));
126
- const existing = expectedTables.filter((t) => existingTables.has(t));
127
- const missing = expectedTables.filter((t) => !existingTables.has(t));
128
- return {
129
- valid: missing.length === 0,
130
- existing,
131
- missing,
132
- };
133
- }
134
- finally {
135
- client.release();
136
- }
137
- }
138
- finally {
139
- await pool.end();
140
- }
141
- }
142
- /**
143
- * Gets the list of all tables in the database.
144
- */
145
- export async function listTables(connectionString) {
146
- const { Pool } = await import('pg');
147
- const pool = new Pool({
148
- connectionString,
149
- ssl: getSSLConfig(connectionString),
150
- });
151
- try {
152
- const client = await pool.connect();
153
- try {
154
- const result = await client.query(`
155
- SELECT table_name
156
- FROM information_schema.tables
157
- WHERE table_schema = 'public'
158
- AND table_type = 'BASE TABLE'
159
- ORDER BY table_name
160
- `);
161
- return result.rows.map((r) => r.table_name);
162
- }
163
- finally {
164
- client.release();
165
- }
166
- }
167
- finally {
168
- await pool.end();
169
- }
170
- }
171
- /**
172
- * Core tables that should exist in the RevealUI database.
173
- */
174
- export const CORE_TABLES = [
175
- 'users',
176
- 'sessions',
177
- 'sites',
178
- 'pages',
179
- 'page_revisions',
180
- 'site_collaborators',
181
- 'media',
182
- 'posts',
183
- 'global_settings',
184
- 'global_header',
185
- 'global_footer',
186
- ];
187
- /**
188
- * Agent-related tables.
189
- */
190
- export const AGENT_TABLES = ['agent_memories', 'agent_contexts', 'agent_actions', 'conversations'];
191
- /**
192
- * CRDT-related tables.
193
- */
194
- export const CRDT_TABLES = ['crdt_operations', 'node_id_mappings'];
195
- /**
196
- * All expected tables in the RevealUI database.
197
- */
198
- export const ALL_TABLES = [...CORE_TABLES, ...AGENT_TABLES, ...CRDT_TABLES];
199
- //# sourceMappingURL=database.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/database.ts"],"names":[],"mappings":"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"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Environment Validation Utilities
3
- *
4
- * Validates environment variables and provides helpful error messages.
5
- *
6
- * @dependencies
7
- * - scripts/lib/errors.ts - ErrorCode enum for exit codes
8
- * - scripts/lib/logger.ts - Logger utilities
9
- * - scripts/lib/paths.ts - Project root resolution for .env file lookup
10
- * - node:fs/promises - File system operations for reading .env files
11
- * - node:path - Path manipulation utilities
12
- */
13
- import { type Logger } from '../logger.js';
14
- export interface EnvVariable {
15
- name: string;
16
- required: boolean;
17
- description: string;
18
- validator?: (value: string) => boolean;
19
- sensitive?: boolean;
20
- defaultValue?: string;
21
- }
22
- export interface EnvValidationResult {
23
- valid: boolean;
24
- missing: string[];
25
- invalid: string[];
26
- warnings: string[];
27
- }
28
- /**
29
- * Core required environment variables for RevealUI
30
- */
31
- export declare const REQUIRED_ENV_VARS: EnvVariable[];
32
- /**
33
- * Optional environment variables
34
- */
35
- export declare const OPTIONAL_ENV_VARS: EnvVariable[];
36
- /**
37
- * Validates environment variables against the specification.
38
- *
39
- * @example
40
- * ```typescript
41
- * const result = await validateEnv()
42
- * if (!result.valid) {
43
- * console.error('Missing:', result.missing)
44
- * process.exit(ErrorCode.EXECUTION_ERROR)
45
- * }
46
- * ```
47
- */
48
- export declare function validateEnv(variables?: EnvVariable[], env?: Record<string, string | undefined>): EnvValidationResult;
49
- /**
50
- * Validates environment and logs results.
51
- *
52
- * @param options.exitOnError - Whether to exit the process on validation failure (default: false)
53
- * @returns Whether validation passed
54
- */
55
- export declare function validateEnvWithLogging(options?: {
56
- logger?: Logger;
57
- exitOnError?: boolean;
58
- importMetaUrl?: string;
59
- }): Promise<boolean>;
60
- /**
61
- * Checks if a .env file exists at the project root.
62
- */
63
- export declare function envFileExists(importMetaUrl: string): Promise<boolean>;
64
- /**
65
- * Checks if .env.development.local exists.
66
- */
67
- export declare function devEnvFileExists(importMetaUrl: string): Promise<boolean>;
68
- /**
69
- * Reads and parses an env file.
70
- */
71
- export declare function parseEnvFile(filePath: string): Promise<Record<string, string>>;
72
- /**
73
- * Detects running environment.
74
- */
75
- export declare function detectEnvironment(): 'development' | 'test' | 'production' | 'ci';
76
- /**
77
- * Checks if running in CI environment.
78
- */
79
- export declare function isCI(): boolean;
80
- //# sourceMappingURL=env.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAGxD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACtC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,EAe1C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAAW,EAuC1C,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,SAAS,GAAE,WAAW,EAAiD,EACvE,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,mBAAmB,CAmCrB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,OAAO,CAAC,OAAO,CAAC,CA2ClB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ3E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ9E;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgCpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAWhF;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAS9B"}
@@ -1,246 +0,0 @@
1
- /**
2
- * Environment Validation Utilities
3
- *
4
- * Validates environment variables and provides helpful error messages.
5
- *
6
- * @dependencies
7
- * - scripts/lib/errors.ts - ErrorCode enum for exit codes
8
- * - scripts/lib/logger.ts - Logger utilities
9
- * - scripts/lib/paths.ts - Project root resolution for .env file lookup
10
- * - node:fs/promises - File system operations for reading .env files
11
- * - node:path - Path manipulation utilities
12
- */
13
- import { access, readFile } from 'node:fs/promises';
14
- import { join } from 'node:path';
15
- import { ErrorCode } from '../../lib/errors.js';
16
- import { createLogger } from '../logger.js';
17
- import { getProjectRoot } from '../paths.js';
18
- /**
19
- * Core required environment variables for RevealUI
20
- */
21
- export const REQUIRED_ENV_VARS = [
22
- {
23
- name: 'REVEALUI_SECRET',
24
- required: true,
25
- description: 'Secret key for JWT tokens (32+ characters)',
26
- validator: (v) => v.length >= 32,
27
- sensitive: true,
28
- },
29
- {
30
- name: 'POSTGRES_URL',
31
- required: true,
32
- description: 'PostgreSQL connection string',
33
- validator: (v) => v.startsWith('postgresql://') || v.startsWith('postgres://'),
34
- sensitive: true,
35
- },
36
- ];
37
- /**
38
- * Optional environment variables
39
- */
40
- export const OPTIONAL_ENV_VARS = [
41
- {
42
- name: 'REVEALUI_PUBLIC_SERVER_URL',
43
- required: false,
44
- description: 'Public server URL',
45
- defaultValue: 'http://localhost:4000',
46
- },
47
- {
48
- name: 'NEXT_PUBLIC_SERVER_URL',
49
- required: false,
50
- description: 'Next.js public server URL',
51
- defaultValue: 'http://localhost:4000',
52
- },
53
- {
54
- name: 'BLOB_READ_WRITE_TOKEN',
55
- required: false,
56
- description: 'Vercel Blob Storage token',
57
- sensitive: true,
58
- },
59
- {
60
- name: 'STRIPE_SECRET_KEY',
61
- required: false,
62
- description: 'Stripe secret key',
63
- validator: (v) => v.startsWith('sk_'),
64
- sensitive: true,
65
- },
66
- {
67
- name: 'NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY',
68
- required: false,
69
- description: 'Stripe publishable key',
70
- validator: (v) => v.startsWith('pk_'),
71
- },
72
- {
73
- name: 'DATABASE_URL',
74
- required: false,
75
- description: 'Alternative database connection string',
76
- validator: (v) => v.startsWith('postgresql://') || v.startsWith('postgres://'),
77
- sensitive: true,
78
- },
79
- ];
80
- /**
81
- * Validates environment variables against the specification.
82
- *
83
- * @example
84
- * ```typescript
85
- * const result = await validateEnv()
86
- * if (!result.valid) {
87
- * console.error('Missing:', result.missing)
88
- * process.exit(ErrorCode.EXECUTION_ERROR)
89
- * }
90
- * ```
91
- */
92
- export function validateEnv(variables = [...REQUIRED_ENV_VARS, ...OPTIONAL_ENV_VARS], env = process.env) {
93
- const missing = [];
94
- const invalid = [];
95
- const warnings = [];
96
- for (const variable of variables) {
97
- const value = env[variable.name];
98
- if (!value) {
99
- if (variable.required) {
100
- missing.push(variable.name);
101
- }
102
- else if (!variable.defaultValue) {
103
- warnings.push(`${variable.name} is not set (optional)`);
104
- }
105
- continue;
106
- }
107
- if (variable.validator && !variable.validator(value)) {
108
- invalid.push(variable.name);
109
- }
110
- }
111
- // Check for DATABASE_URL fallback
112
- if (missing.includes('POSTGRES_URL') && env.DATABASE_URL) {
113
- const idx = missing.indexOf('POSTGRES_URL');
114
- missing.splice(idx, 1);
115
- warnings.push('Using DATABASE_URL as fallback for POSTGRES_URL');
116
- }
117
- return {
118
- valid: missing.length === 0 && invalid.length === 0,
119
- missing,
120
- invalid,
121
- warnings,
122
- };
123
- }
124
- /**
125
- * Validates environment and logs results.
126
- *
127
- * @param options.exitOnError - Whether to exit the process on validation failure (default: false)
128
- * @returns Whether validation passed
129
- */
130
- export async function validateEnvWithLogging(options = {}) {
131
- const logger = options.logger || createLogger();
132
- const result = validateEnv();
133
- if (result.valid) {
134
- logger.success('Environment validation passed');
135
- for (const warning of result.warnings) {
136
- logger.warn(warning);
137
- }
138
- return true;
139
- }
140
- logger.error('Environment validation failed');
141
- if (result.missing.length > 0) {
142
- logger.error(`Missing required variables: ${result.missing.join(', ')}`);
143
- for (const name of result.missing) {
144
- const variable = [...REQUIRED_ENV_VARS, ...OPTIONAL_ENV_VARS].find((v) => v.name === name);
145
- if (variable) {
146
- logger.info(` ${name}: ${variable.description}`);
147
- }
148
- }
149
- }
150
- if (result.invalid.length > 0) {
151
- logger.error(`Invalid variables: ${result.invalid.join(', ')}`);
152
- for (const name of result.invalid) {
153
- const variable = [...REQUIRED_ENV_VARS, ...OPTIONAL_ENV_VARS].find((v) => v.name === name);
154
- if (variable) {
155
- logger.info(` ${name}: ${variable.description}`);
156
- }
157
- }
158
- }
159
- for (const warning of result.warnings) {
160
- logger.warn(warning);
161
- }
162
- if (options.exitOnError) {
163
- process.exit(ErrorCode.EXECUTION_ERROR);
164
- }
165
- return false;
166
- }
167
- /**
168
- * Checks if a .env file exists at the project root.
169
- */
170
- export async function envFileExists(importMetaUrl) {
171
- try {
172
- const root = await getProjectRoot(importMetaUrl);
173
- await access(join(root, '.env'));
174
- return true;
175
- }
176
- catch {
177
- return false;
178
- }
179
- }
180
- /**
181
- * Checks if .env.development.local exists.
182
- */
183
- export async function devEnvFileExists(importMetaUrl) {
184
- try {
185
- const root = await getProjectRoot(importMetaUrl);
186
- await access(join(root, '.env.development.local'));
187
- return true;
188
- }
189
- catch {
190
- return false;
191
- }
192
- }
193
- /**
194
- * Reads and parses an env file.
195
- */
196
- export async function parseEnvFile(filePath) {
197
- const content = await readFile(filePath, 'utf-8');
198
- const env = {};
199
- for (const line of content.split('\n')) {
200
- const trimmed = line.trim();
201
- // Skip comments and empty lines
202
- if (!trimmed || trimmed.startsWith('#')) {
203
- continue;
204
- }
205
- const eqIndex = trimmed.indexOf('=');
206
- if (eqIndex === -1) {
207
- continue;
208
- }
209
- const key = trimmed.substring(0, eqIndex).trim();
210
- let value = trimmed.substring(eqIndex + 1).trim();
211
- // Remove quotes if present
212
- if ((value.startsWith('"') && value.endsWith('"')) ||
213
- (value.startsWith("'") && value.endsWith("'"))) {
214
- value = value.slice(1, -1);
215
- }
216
- env[key] = value;
217
- }
218
- return env;
219
- }
220
- /**
221
- * Detects running environment.
222
- */
223
- export function detectEnvironment() {
224
- if (process.env.CI) {
225
- return 'ci';
226
- }
227
- if (process.env.NODE_ENV === 'test') {
228
- return 'test';
229
- }
230
- if (process.env.NODE_ENV === 'production') {
231
- return 'production';
232
- }
233
- return 'development';
234
- }
235
- /**
236
- * Checks if running in CI environment.
237
- */
238
- export function isCI() {
239
- return Boolean(process.env.CI ||
240
- process.env.GITHUB_ACTIONS ||
241
- process.env.GITLAB_CI ||
242
- process.env.CIRCLECI ||
243
- process.env.TRAVIS ||
244
- process.env.JENKINS_URL);
245
- }
246
- //# sourceMappingURL=env.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/env.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Validation Module
3
- *
4
- * Provides validation utilities for environment, database, pre-execution, and post-execution.
5
- *
6
- * @dependencies
7
- * - scripts/lib/validation/database.ts - Database validation utilities
8
- * - scripts/lib/validation/env.ts - Environment validation utilities
9
- * - scripts/lib/validation/post-execution.ts - Post-execution validation
10
- * - scripts/lib/validation/pre-execution.ts - Pre-execution validation
11
- */
12
- export * from './database.js';
13
- export * from './env.js';
14
- export * from './post-execution.js';
15
- export * from './pre-execution.js';
16
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Validation Module
3
- *
4
- * Provides validation utilities for environment, database, pre-execution, and post-execution.
5
- *
6
- * @dependencies
7
- * - scripts/lib/validation/database.ts - Database validation utilities
8
- * - scripts/lib/validation/env.ts - Environment validation utilities
9
- * - scripts/lib/validation/post-execution.ts - Post-execution validation
10
- * - scripts/lib/validation/pre-execution.ts - Pre-execution validation
11
- */
12
- export * from './database.js';
13
- export * from './env.js';
14
- export * from './post-execution.js';
15
- export * from './pre-execution.js';
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Post-Execution Validation
3
- *
4
- * Validation checks to run after script execution to verify
5
- * correctness and completeness of operations.
6
- *
7
- * @dependencies
8
- * - node:child_process - Process execution for validation commands
9
- * - node:fs - Synchronous file system checks
10
- * - node:fs/promises - File stat operations
11
- * - node:util - Promisify utilities for exec
12
- *
13
- * @example
14
- * ```typescript
15
- * const validator = new PostExecutionValidator()
16
- *
17
- * const result = await validator.validate({
18
- * checks: ['files', 'database'],
19
- * expectedFiles: ['output.json', 'backup.sql'],
20
- * expectedRecords: { users: 10, posts: 50 },
21
- * })
22
- * ```
23
- */
24
- /**
25
- * Post-execution check types
26
- */
27
- export type PostCheckType = 'files' | 'database' | 'output' | 'side-effects';
28
- /**
29
- * Post-execution validation options
30
- */
31
- export interface PostValidationOptions {
32
- /** Checks to perform */
33
- checks?: PostCheckType[];
34
- /** Files that should exist */
35
- expectedFiles?: string[];
36
- /** Files that should not exist */
37
- unexpectedFiles?: string[];
38
- /** Expected file sizes (path: minBytes) */
39
- expectedFileSizes?: Record<string, number>;
40
- /** Expected database record counts */
41
- expectedRecords?: Record<string, number>;
42
- /** Expected output structure */
43
- expectedOutput?: unknown;
44
- /** Custom validation functions */
45
- customValidators?: Array<() => Promise<boolean>>;
46
- }
47
- /**
48
- * Post-execution validation result
49
- */
50
- export interface PostValidationResult {
51
- /** Whether all checks passed */
52
- passed: boolean;
53
- /** Validation errors */
54
- errors: string[];
55
- /** Validation warnings */
56
- warnings: string[];
57
- /** Check details */
58
- details: Record<string, unknown>;
59
- }
60
- export declare class PostExecutionValidator {
61
- /**
62
- * Validate post-execution state
63
- */
64
- validate(options?: PostValidationOptions): Promise<PostValidationResult>;
65
- /**
66
- * Check file existence and properties
67
- */
68
- private checkFiles;
69
- }
70
- /**
71
- * Create a post-execution validator
72
- */
73
- export declare function createPostExecutionValidator(): PostExecutionValidator;
74
- //# sourceMappingURL=post-execution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"post-execution.d.ts","sourceRoot":"","sources":["../../../../../../scripts/lib/validation/post-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,UAAU,GACV,QAAQ,GACR,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wBAAwB;IACxB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;IAExB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IAExB,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE1C,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAExC,gCAAgC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,MAAM,EAAE,OAAO,CAAA;IAEf,wBAAwB;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;IAEhB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAElB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAMD,qBAAa,sBAAsB;IACjC;;OAEG;IACG,QAAQ,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8ClF;;OAEG;YACW,UAAU;CAyCzB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAErE"}