@revealui/mcp 0.1.0 → 0.1.1

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 +112 -0
  3. package/README.md +3 -0
  4. package/dist/adapters/db.d.ts.map +1 -0
  5. package/dist/adapters/db.js.map +1 -0
  6. package/dist/config/index.d.ts.map +1 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/contracts.d.ts.map +1 -0
  9. package/dist/contracts.js.map +1 -0
  10. package/dist/hypervisor.d.ts.map +1 -0
  11. package/dist/hypervisor.js.map +1 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
  15. package/dist/servers/adapter.d.ts.map +1 -0
  16. package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
  17. package/dist/servers/adapter.js.map +1 -0
  18. package/dist/servers/revealui-content.d.ts +21 -0
  19. package/dist/servers/revealui-content.d.ts.map +1 -0
  20. package/dist/servers/revealui-content.js +199 -0
  21. package/dist/servers/revealui-content.js.map +1 -0
  22. package/dist/servers/revealui-email.d.ts +18 -0
  23. package/dist/servers/revealui-email.d.ts.map +1 -0
  24. package/dist/servers/revealui-email.js +185 -0
  25. package/dist/servers/revealui-email.js.map +1 -0
  26. package/dist/servers/revealui-stripe.d.ts +19 -0
  27. package/dist/servers/revealui-stripe.d.ts.map +1 -0
  28. package/dist/servers/revealui-stripe.js +211 -0
  29. package/dist/servers/revealui-stripe.js.map +1 -0
  30. package/package.json +47 -8
  31. package/.env.example +0 -9
  32. package/MCP_MAINTENANCE.md +0 -265
  33. package/__tests__/crdt.integration.test.ts +0 -156
  34. package/configs/README.md +0 -77
  35. package/configs/claude-template.json +0 -54
  36. package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
  37. package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
  38. package/dist/packages/core/src/database/ssl-config.js +0 -8
  39. package/dist/packages/core/src/database/ssl-config.js.map +0 -1
  40. package/dist/packages/core/src/features.d.ts +0 -86
  41. package/dist/packages/core/src/features.d.ts.map +0 -1
  42. package/dist/packages/core/src/features.js +0 -93
  43. package/dist/packages/core/src/features.js.map +0 -1
  44. package/dist/packages/core/src/license.d.ts +0 -75
  45. package/dist/packages/core/src/license.d.ts.map +0 -1
  46. package/dist/packages/core/src/license.js +0 -174
  47. package/dist/packages/core/src/license.js.map +0 -1
  48. package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
  49. package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
  50. package/dist/packages/core/src/monitoring/alerts.js +0 -325
  51. package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
  52. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
  53. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
  54. package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
  55. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
  56. package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
  57. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
  58. package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
  59. package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
  60. package/dist/packages/core/src/monitoring/index.d.ts +0 -14
  61. package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
  62. package/dist/packages/core/src/monitoring/index.js +0 -18
  63. package/dist/packages/core/src/monitoring/index.js.map +0 -1
  64. package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
  65. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
  66. package/dist/packages/core/src/monitoring/process-registry.js +0 -223
  67. package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
  68. package/dist/packages/core/src/monitoring/types.d.ts +0 -231
  69. package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
  70. package/dist/packages/core/src/monitoring/types.js +0 -43
  71. package/dist/packages/core/src/monitoring/types.js.map +0 -1
  72. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
  73. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
  74. package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
  75. package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
  76. package/dist/packages/core/src/observability/logger.d.ts +0 -47
  77. package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
  78. package/dist/packages/core/src/observability/logger.js +0 -141
  79. package/dist/packages/core/src/observability/logger.js.map +0 -1
  80. package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
  81. package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
  82. package/dist/packages/core/src/utils/logger-server.js +0 -69
  83. package/dist/packages/core/src/utils/logger-server.js.map +0 -1
  84. package/dist/packages/core/src/utils/request-context.d.ts +0 -143
  85. package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
  86. package/dist/packages/core/src/utils/request-context.js +0 -169
  87. package/dist/packages/core/src/utils/request-context.js.map +0 -1
  88. package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
  89. package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
  90. package/dist/packages/dev/src/code-validator/index.js +0 -20
  91. package/dist/packages/dev/src/code-validator/index.js.map +0 -1
  92. package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
  93. package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
  94. package/dist/packages/dev/src/code-validator/types.js +0 -7
  95. package/dist/packages/dev/src/code-validator/types.js.map +0 -1
  96. package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
  97. package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
  98. package/dist/packages/dev/src/code-validator/validator.js +0 -176
  99. package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
  100. package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
  101. package/dist/packages/mcp/src/adapters/db.js.map +0 -1
  102. package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
  103. package/dist/packages/mcp/src/config/index.js.map +0 -1
  104. package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
  105. package/dist/packages/mcp/src/contracts.js.map +0 -1
  106. package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
  107. package/dist/packages/mcp/src/hypervisor.js.map +0 -1
  108. package/dist/packages/mcp/src/index.d.ts.map +0 -1
  109. package/dist/packages/mcp/src/index.js.map +0 -1
  110. package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
  111. package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
  112. package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
  113. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
  114. package/dist/packages/mcp/src/servers/code-validator.js +0 -156
  115. package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
  116. package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
  117. package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
  118. package/dist/packages/mcp/src/servers/neon.js +0 -90
  119. package/dist/packages/mcp/src/servers/neon.js.map +0 -1
  120. package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
  121. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
  122. package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
  123. package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
  124. package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
  125. package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
  126. package/dist/packages/mcp/src/servers/playwright.js +0 -68
  127. package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
  128. package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
  129. package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
  130. package/dist/packages/mcp/src/servers/stripe.js +0 -86
  131. package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
  132. package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
  133. package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
  134. package/dist/packages/mcp/src/servers/supabase.js +0 -144
  135. package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
  136. package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
  137. package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
  138. package/dist/packages/mcp/src/servers/vercel.js +0 -87
  139. package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
  140. package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
  141. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
  142. package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
  143. package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
  144. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
  145. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
  146. package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
  147. package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
  148. package/dist/scripts/lib/analyzers/index.d.ts +0 -11
  149. package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
  150. package/dist/scripts/lib/analyzers/index.js +0 -11
  151. package/dist/scripts/lib/analyzers/index.js.map +0 -1
  152. package/dist/scripts/lib/args.d.ts +0 -104
  153. package/dist/scripts/lib/args.d.ts.map +0 -1
  154. package/dist/scripts/lib/args.js +0 -304
  155. package/dist/scripts/lib/args.js.map +0 -1
  156. package/dist/scripts/lib/cache.d.ts +0 -185
  157. package/dist/scripts/lib/cache.d.ts.map +0 -1
  158. package/dist/scripts/lib/cache.js +0 -390
  159. package/dist/scripts/lib/cache.js.map +0 -1
  160. package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
  161. package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
  162. package/dist/scripts/lib/cli/dispatch.js +0 -206
  163. package/dist/scripts/lib/cli/dispatch.js.map +0 -1
  164. package/dist/scripts/lib/cli/index.d.ts +0 -10
  165. package/dist/scripts/lib/cli/index.d.ts.map +0 -1
  166. package/dist/scripts/lib/cli/index.js +0 -10
  167. package/dist/scripts/lib/cli/index.js.map +0 -1
  168. package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
  169. package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
  170. package/dist/scripts/lib/database/ssl-config.js +0 -47
  171. package/dist/scripts/lib/database/ssl-config.js.map +0 -1
  172. package/dist/scripts/lib/errors.d.ts +0 -218
  173. package/dist/scripts/lib/errors.d.ts.map +0 -1
  174. package/dist/scripts/lib/errors.js +0 -543
  175. package/dist/scripts/lib/errors.js.map +0 -1
  176. package/dist/scripts/lib/exec.d.ts +0 -107
  177. package/dist/scripts/lib/exec.d.ts.map +0 -1
  178. package/dist/scripts/lib/exec.js +0 -232
  179. package/dist/scripts/lib/exec.js.map +0 -1
  180. package/dist/scripts/lib/index.d.ts +0 -50
  181. package/dist/scripts/lib/index.d.ts.map +0 -1
  182. package/dist/scripts/lib/index.js +0 -65
  183. package/dist/scripts/lib/index.js.map +0 -1
  184. package/dist/scripts/lib/logger.d.ts +0 -50
  185. package/dist/scripts/lib/logger.d.ts.map +0 -1
  186. package/dist/scripts/lib/logger.js +0 -159
  187. package/dist/scripts/lib/logger.js.map +0 -1
  188. package/dist/scripts/lib/output.d.ts +0 -149
  189. package/dist/scripts/lib/output.d.ts.map +0 -1
  190. package/dist/scripts/lib/output.js +0 -263
  191. package/dist/scripts/lib/output.js.map +0 -1
  192. package/dist/scripts/lib/parallel.d.ts +0 -164
  193. package/dist/scripts/lib/parallel.d.ts.map +0 -1
  194. package/dist/scripts/lib/parallel.js +0 -355
  195. package/dist/scripts/lib/parallel.js.map +0 -1
  196. package/dist/scripts/lib/paths.d.ts +0 -92
  197. package/dist/scripts/lib/paths.d.ts.map +0 -1
  198. package/dist/scripts/lib/paths.js +0 -171
  199. package/dist/scripts/lib/paths.js.map +0 -1
  200. package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
  201. package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
  202. package/dist/scripts/lib/state/adapters/memory.js +0 -110
  203. package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
  204. package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
  205. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
  206. package/dist/scripts/lib/state/adapters/pglite.js +0 -256
  207. package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
  208. package/dist/scripts/lib/state/index.d.ts +0 -16
  209. package/dist/scripts/lib/state/index.d.ts.map +0 -1
  210. package/dist/scripts/lib/state/index.js +0 -16
  211. package/dist/scripts/lib/state/index.js.map +0 -1
  212. package/dist/scripts/lib/state/types.d.ts +0 -111
  213. package/dist/scripts/lib/state/types.d.ts.map +0 -1
  214. package/dist/scripts/lib/state/types.js +0 -8
  215. package/dist/scripts/lib/state/types.js.map +0 -1
  216. package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
  217. package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
  218. package/dist/scripts/lib/state/workflow-state.js +0 -331
  219. package/dist/scripts/lib/state/workflow-state.js.map +0 -1
  220. package/dist/scripts/lib/telemetry.d.ts +0 -194
  221. package/dist/scripts/lib/telemetry.d.ts.map +0 -1
  222. package/dist/scripts/lib/telemetry.js +0 -394
  223. package/dist/scripts/lib/telemetry.js.map +0 -1
  224. package/dist/scripts/lib/utils.d.ts +0 -270
  225. package/dist/scripts/lib/utils.d.ts.map +0 -1
  226. package/dist/scripts/lib/utils.js +0 -473
  227. package/dist/scripts/lib/utils.js.map +0 -1
  228. package/dist/scripts/lib/validation/database.d.ts +0 -83
  229. package/dist/scripts/lib/validation/database.d.ts.map +0 -1
  230. package/dist/scripts/lib/validation/database.js +0 -199
  231. package/dist/scripts/lib/validation/database.js.map +0 -1
  232. package/dist/scripts/lib/validation/env.d.ts +0 -80
  233. package/dist/scripts/lib/validation/env.d.ts.map +0 -1
  234. package/dist/scripts/lib/validation/env.js +0 -246
  235. package/dist/scripts/lib/validation/env.js.map +0 -1
  236. package/dist/scripts/lib/validation/index.d.ts +0 -16
  237. package/dist/scripts/lib/validation/index.d.ts.map +0 -1
  238. package/dist/scripts/lib/validation/index.js +0 -16
  239. package/dist/scripts/lib/validation/index.js.map +0 -1
  240. package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
  241. package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
  242. package/dist/scripts/lib/validation/post-execution.js +0 -110
  243. package/dist/scripts/lib/validation/post-execution.js.map +0 -1
  244. package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
  245. package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
  246. package/dist/scripts/lib/validation/pre-execution.js +0 -466
  247. package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
  248. package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
  249. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
  250. package/dist/scripts/lib/validators/documentation-validator.js +0 -584
  251. package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
  252. package/dist/scripts/lib/validators/index.d.ts +0 -11
  253. package/dist/scripts/lib/validators/index.d.ts.map +0 -1
  254. package/dist/scripts/lib/validators/index.js +0 -11
  255. package/dist/scripts/lib/validators/index.js.map +0 -1
  256. package/docker-compose.yml +0 -46
  257. package/docs/INDEX.md +0 -88
  258. package/docs/README.md +0 -774
  259. package/docs/SETUP.md +0 -264
  260. package/docs/servers/code-validator.md +0 -586
  261. package/eslint.config.js +0 -7
  262. package/migrations/0001_add_crdt_columns.sql +0 -8
  263. package/migrations/0001_rollback.sql +0 -6
  264. package/migrations/005_performance_indexes.sql +0 -190
  265. package/migrations/backfill_crdt_meta.js +0 -45
  266. package/src/__tests__/hypervisor.test.ts +0 -212
  267. package/src/adapters/db.ts +0 -180
  268. package/src/config/config.json +0 -49
  269. package/src/config/index.ts +0 -30
  270. package/src/contracts.ts +0 -221
  271. package/src/hypervisor.ts +0 -464
  272. package/src/index.ts +0 -87
  273. package/src/servers/adapter.ts +0 -643
  274. package/src/servers/code-validator.ts +0 -188
  275. package/src/servers/neon.ts +0 -103
  276. package/src/servers/next-devtools.ts +0 -230
  277. package/src/servers/playwright.ts +0 -77
  278. package/src/servers/stripe.ts +0 -99
  279. package/src/servers/supabase.ts +0 -161
  280. package/src/servers/vercel.ts +0 -100
  281. package/src/servers/vultr-test.ts +0 -97
  282. package/tsconfig.json +0 -12
  283. package/vitest.config.ts +0 -22
  284. /package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +0 -0
  285. /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
  286. /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
  287. /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
  288. /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
  289. /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
  290. /package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +0 -0
  291. /package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +0 -0
  292. /package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +0 -0
  293. /package/dist/{packages/mcp/src/index.js → index.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"}