@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,174 +0,0 @@
1
- /**
2
- * License validation for RevealUI Pro/Enterprise tiers.
3
- *
4
- * @dependencies
5
- * - jose - JWT token verification (Web Crypto API)
6
- * - zod - Schema validation for license payloads
7
- */
8
- import { importPKCS8, importSPKI, jwtVerify, SignJWT } from 'jose';
9
- import { z } from 'zod';
10
- /** Decoded license payload schema */
11
- const licensePayloadSchema = z.object({
12
- /** License tier */
13
- tier: z.enum(['pro', 'max', 'enterprise']),
14
- /** Organization or customer ID */
15
- customerId: z.string(),
16
- /** Licensed domain(s) */
17
- domains: z.array(z.string()).optional(),
18
- /** Maximum number of sites allowed */
19
- maxSites: z.number().int().positive().optional(),
20
- /** Maximum number of users/editors allowed */
21
- maxUsers: z.number().int().positive().optional(),
22
- /** License issued-at timestamp */
23
- iat: z.number().optional(),
24
- /** License expiration timestamp */
25
- exp: z.number().optional(),
26
- });
27
- let cachedState = {
28
- tier: 'free',
29
- payload: null,
30
- validatedAt: null,
31
- };
32
- /**
33
- * The public key used to verify license JWTs.
34
- * In production, this is fetched from the license server.
35
- * For local development, it reads from REVEALUI_LICENSE_PUBLIC_KEY env var.
36
- */
37
- function getPublicKey() {
38
- return process.env.REVEALUI_LICENSE_PUBLIC_KEY ?? null;
39
- }
40
- /**
41
- * Reads the license key from environment.
42
- */
43
- function getLicenseKey() {
44
- return process.env.REVEALUI_LICENSE_KEY ?? null;
45
- }
46
- /**
47
- * Validates a license key JWT and returns the decoded payload.
48
- * Returns null if the key is invalid, expired, or missing.
49
- */
50
- export async function validateLicenseKey(licenseKey, publicKey) {
51
- try {
52
- const key = await importSPKI(publicKey, 'RS256');
53
- const { payload } = await jwtVerify(licenseKey, key, {
54
- algorithms: ['RS256', 'ES256'],
55
- });
56
- const result = licensePayloadSchema.safeParse(payload);
57
- if (!result.success) {
58
- return null;
59
- }
60
- return result.data;
61
- }
62
- catch {
63
- return null;
64
- }
65
- }
66
- /**
67
- * Initialize the license system. Call once at application startup.
68
- * Reads REVEALUI_LICENSE_KEY and REVEALUI_LICENSE_PUBLIC_KEY from environment.
69
- *
70
- * @returns The resolved license tier
71
- */
72
- export async function initializeLicense() {
73
- const licenseKey = getLicenseKey();
74
- const publicKey = getPublicKey();
75
- if (!(licenseKey && publicKey)) {
76
- cachedState = { tier: 'free', payload: null, validatedAt: Date.now() };
77
- return 'free';
78
- }
79
- const payload = await validateLicenseKey(licenseKey, publicKey);
80
- if (!payload) {
81
- cachedState = { tier: 'free', payload: null, validatedAt: Date.now() };
82
- return 'free';
83
- }
84
- cachedState = {
85
- tier: payload.tier,
86
- payload,
87
- validatedAt: Date.now(),
88
- };
89
- return payload.tier;
90
- }
91
- /**
92
- * Returns the current license tier.
93
- * If the license hasn't been initialized, returns 'free'.
94
- */
95
- export function getCurrentTier() {
96
- return cachedState.tier;
97
- }
98
- /**
99
- * Returns the full license payload, or null if no valid license.
100
- */
101
- export function getLicensePayload() {
102
- return cachedState.payload;
103
- }
104
- /**
105
- * Checks whether the current license is at least the given tier.
106
- * Also validates that the license has not expired (checks JWT exp claim).
107
- */
108
- export function isLicensed(requiredTier) {
109
- const tierRank = {
110
- free: 0,
111
- pro: 1,
112
- max: 2,
113
- enterprise: 3,
114
- };
115
- // Free tier is always available
116
- if (requiredTier === 'free')
117
- return true;
118
- // Check expiration if present
119
- if (cachedState.payload?.exp) {
120
- const nowSeconds = Math.floor(Date.now() / 1000);
121
- if (cachedState.payload.exp < nowSeconds) {
122
- return false;
123
- }
124
- }
125
- return tierRank[cachedState.tier] >= tierRank[requiredTier];
126
- }
127
- /**
128
- * Returns the maximum number of sites allowed by the current license.
129
- */
130
- export function getMaxSites() {
131
- if (cachedState.tier === 'enterprise')
132
- return Infinity;
133
- if (cachedState.tier === 'max')
134
- return cachedState.payload?.maxSites ?? 15;
135
- if (cachedState.tier === 'pro')
136
- return cachedState.payload?.maxSites ?? 5;
137
- return 1;
138
- }
139
- /**
140
- * Returns the maximum number of users/editors allowed by the current license.
141
- */
142
- export function getMaxUsers() {
143
- if (cachedState.tier === 'enterprise')
144
- return Infinity;
145
- if (cachedState.tier === 'max')
146
- return cachedState.payload?.maxUsers ?? 100;
147
- if (cachedState.tier === 'pro')
148
- return cachedState.payload?.maxUsers ?? 25;
149
- return 3;
150
- }
151
- /**
152
- * Generates a signed license key JWT.
153
- * This is a server-only function — requires the private key.
154
- *
155
- * @param payload - License payload (tier, customerId, limits)
156
- * @param privateKey - RS256 or ES256 private key (PEM format)
157
- * @param expiresInSeconds - JWT expiration in seconds. Defaults to 1 year.
158
- * @returns Signed JWT string
159
- */
160
- export async function generateLicenseKey(payload, privateKey, expiresInSeconds = 365 * 24 * 60 * 60) {
161
- const key = await importPKCS8(privateKey, 'RS256');
162
- return new SignJWT({ ...payload })
163
- .setProtectedHeader({ alg: 'RS256' })
164
- .setIssuedAt()
165
- .setExpirationTime(`${expiresInSeconds}s`)
166
- .sign(key);
167
- }
168
- /**
169
- * Reset license state. Primarily for testing.
170
- */
171
- export function resetLicenseState() {
172
- cachedState = { tier: 'free', payload: null, validatedAt: null };
173
- }
174
- //# sourceMappingURL=license.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../../../../../core/src/license.ts"],"names":[],"mappings":"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"}
@@ -1,118 +0,0 @@
1
- /**
2
- * Alert System
3
- *
4
- * Manages alert channels (logger, Sentry, console) and alert delivery.
5
- * Provides configurable thresholds and aggregation for production.
6
- */
7
- import type { Alert } from './types.js';
8
- /**
9
- * Sentry interface for dependency injection and testing
10
- */
11
- interface SentryClient {
12
- captureMessage: (message: string, context?: unknown) => void;
13
- setUser: (user: unknown) => void;
14
- }
15
- /**
16
- * Alert channel type
17
- */
18
- type AlertChannel = 'logger' | 'sentry' | 'console';
19
- /**
20
- * Alert configuration
21
- */
22
- interface AlertConfig {
23
- /** Enabled channels */
24
- channels: AlertChannel[];
25
- /** Aggregate alerts in production (log every N minutes instead of immediately) */
26
- aggregateInProduction: boolean;
27
- /** Aggregation interval in milliseconds */
28
- aggregationInterval: number;
29
- /** Enable Sentry in production only */
30
- sentryProductionOnly: boolean;
31
- }
32
- /**
33
- * Alert manager class
34
- */
35
- declare class AlertManager {
36
- private config;
37
- private alertQueue;
38
- private aggregationTimer;
39
- private lastAggregationTime;
40
- private sentryClient;
41
- constructor(config?: Partial<AlertConfig>, sentryClient?: SentryClient | null);
42
- /**
43
- * Send an alert through configured channels
44
- */
45
- sendAlert(alert: Alert): void;
46
- /**
47
- * Send multiple alerts
48
- */
49
- sendAlerts(alerts: Alert[]): void;
50
- /**
51
- * Deliver an alert to configured channels
52
- */
53
- private deliverAlert;
54
- /**
55
- * Send alert to logger
56
- */
57
- private sendToLogger;
58
- /**
59
- * Send alert to console (uses logger for structured output)
60
- */
61
- private sendToConsole;
62
- /**
63
- * Send alert to Sentry
64
- */
65
- private sendToSentry;
66
- /**
67
- * Start aggregation timer
68
- */
69
- private startAggregation;
70
- /**
71
- * Flush aggregated alerts
72
- */
73
- private flushAlerts;
74
- /**
75
- * Stop aggregation timer
76
- */
77
- stopAggregation(): void;
78
- /**
79
- * Check if running in production
80
- */
81
- private isProduction;
82
- /**
83
- * Get alert queue stats
84
- */
85
- getStats(): {
86
- queueSize: number;
87
- lastAggregationTime: number;
88
- aggregationEnabled: boolean;
89
- };
90
- /**
91
- * Configure alert channels
92
- */
93
- setChannels(channels: AlertChannel[]): void;
94
- /**
95
- * Cleanup resources
96
- */
97
- dispose(): void;
98
- }
99
- /**
100
- * Singleton instance
101
- */
102
- export declare const alertManager: AlertManager;
103
- /**
104
- * Export AlertManager class for testing
105
- */
106
- export { AlertManager };
107
- /**
108
- * Export types for testing
109
- */
110
- export type { AlertChannel, SentryClient };
111
- /**
112
- * Convenience functions
113
- */
114
- export declare function sendAlert(alert: Alert): void;
115
- export declare function sendAlerts(alerts: Alert[]): void;
116
- export declare function getAlertStats(): ReturnType<typeof alertManager.getStats>;
117
- export declare function setAlertChannels(channels: AlertChannel[]): void;
118
- //# sourceMappingURL=alerts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../../../../../core/src/monitoring/alerts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;GAEG;AACH,UAAU,YAAY;IACpB,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5D,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACjC;AAsCD;;GAEG;AACH,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEnD;;GAEG;AACH,UAAU,WAAW;IACnB,uBAAuB;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAA;IAExB,kFAAkF;IAClF,qBAAqB,EAAE,OAAO,CAAA;IAE9B,2CAA2C;IAC3C,mBAAmB,EAAE,MAAM,CAAA;IAE3B,uCAAuC;IACvC,oBAAoB,EAAE,OAAO,CAAA;CAC9B;AAYD;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,mBAAmB,CAAI;IAC/B,OAAO,CAAC,YAAY,CAA4B;gBAEpC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI;IAUjF;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU7B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAMjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuBpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmEpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwCnB;;OAEG;IACH,eAAe,IAAI,IAAI;IAOvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAA;QACjB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,kBAAkB,EAAE,OAAO,CAAA;KAC5B;IAQD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAI3C;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,cAAqB,CAAA;AAE9C;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB;;GAEG;AACH,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA;AAE1C;;GAEG;AAEH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE5C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,IAAI,UAAU,CAAC,OAAO,YAAY,CAAC,QAAQ,CAAC,CAExE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI,CAE/D"}
@@ -1,325 +0,0 @@
1
- /**
2
- * Alert System
3
- *
4
- * Manages alert channels (logger, Sentry, console) and alert delivery.
5
- * Provides configurable thresholds and aggregation for production.
6
- */
7
- import { logger } from '../utils/logger-server.js';
8
- import { getRequestContext } from '../utils/request-context.js';
9
- /**
10
- * Get Sentry client if available
11
- * Using dynamic import with string variable to avoid build-time resolution
12
- */
13
- async function getSentryClient() {
14
- try {
15
- // Use string variable to prevent static analysis and bundler resolution
16
- const moduleName = '@sentry' + '/node';
17
- const sentry = await import(/* webpackIgnore: true */ moduleName);
18
- return sentry;
19
- }
20
- catch {
21
- return null;
22
- }
23
- }
24
- /**
25
- * Synchronous version that caches the client
26
- */
27
- let sentryClientCache;
28
- function getSentryClientSync() {
29
- if (sentryClientCache !== undefined) {
30
- return sentryClientCache;
31
- }
32
- // Initialize asynchronously in the background
33
- getSentryClient()
34
- .then((client) => {
35
- sentryClientCache = client;
36
- })
37
- .catch(() => {
38
- sentryClientCache = null;
39
- });
40
- return null;
41
- }
42
- /**
43
- * Default alert configuration
44
- */
45
- const DEFAULT_ALERT_CONFIG = {
46
- channels: ['logger', 'console'],
47
- aggregateInProduction: true,
48
- aggregationInterval: 5 * 60 * 1000, // 5 minutes
49
- sentryProductionOnly: true,
50
- };
51
- /**
52
- * Alert manager class
53
- */
54
- class AlertManager {
55
- config;
56
- alertQueue = [];
57
- aggregationTimer = null;
58
- lastAggregationTime = 0;
59
- sentryClient = null;
60
- constructor(config = {}, sentryClient) {
61
- this.config = { ...DEFAULT_ALERT_CONFIG, ...config };
62
- this.sentryClient = sentryClient !== undefined ? sentryClient : getSentryClientSync();
63
- // Start aggregation timer if enabled
64
- if (this.config.aggregateInProduction && this.isProduction()) {
65
- this.startAggregation();
66
- }
67
- }
68
- /**
69
- * Send an alert through configured channels
70
- */
71
- sendAlert(alert) {
72
- if (this.config.aggregateInProduction && this.isProduction()) {
73
- // In production, queue alerts for aggregation
74
- this.alertQueue.push(alert);
75
- }
76
- else {
77
- // In development, send immediately
78
- this.deliverAlert(alert);
79
- }
80
- }
81
- /**
82
- * Send multiple alerts
83
- */
84
- sendAlerts(alerts) {
85
- for (const alert of alerts) {
86
- this.sendAlert(alert);
87
- }
88
- }
89
- /**
90
- * Deliver an alert to configured channels
91
- */
92
- deliverAlert(alert) {
93
- for (const channel of this.config.channels) {
94
- switch (channel) {
95
- case 'logger':
96
- this.sendToLogger(alert);
97
- break;
98
- case 'console':
99
- this.sendToConsole(alert);
100
- break;
101
- case 'sentry':
102
- if (!this.config.sentryProductionOnly || this.isProduction()) {
103
- this.sendToSentry(alert);
104
- }
105
- break;
106
- }
107
- }
108
- }
109
- /**
110
- * Send alert to logger
111
- */
112
- sendToLogger(alert) {
113
- // Get request context for additional metadata
114
- const context = getRequestContext();
115
- const logData = {
116
- metric: alert.metric,
117
- value: alert.value,
118
- threshold: alert.threshold,
119
- timestamp: alert.timestamp,
120
- // Include request context if available
121
- ...(context?.userId && { userId: context.userId }),
122
- ...(context?.path && { path: context.path }),
123
- ...(context?.method && { method: context.method }),
124
- ...(context?.ip && { ip: context.ip }),
125
- };
126
- if (alert.level === 'critical') {
127
- logger.error(alert.message, logData);
128
- }
129
- else {
130
- logger.warn(alert.message, logData);
131
- }
132
- }
133
- /**
134
- * Send alert to console (uses logger for structured output)
135
- */
136
- sendToConsole(alert) {
137
- const logLevel = alert.level === 'critical' ? 'error' : 'warn';
138
- const prefix = alert.level === 'critical' ? '🔴 CRITICAL' : '⚠️ WARNING';
139
- logger[logLevel](`${prefix}: ${alert.message}`, {
140
- metric: alert.metric,
141
- value: alert.value,
142
- threshold: alert.threshold,
143
- timestamp: alert.timestamp,
144
- });
145
- }
146
- /**
147
- * Send alert to Sentry
148
- */
149
- sendToSentry(alert) {
150
- // Only send critical alerts to Sentry
151
- if (alert.level !== 'critical')
152
- return;
153
- // Check if Sentry is available
154
- if (!this.sentryClient) {
155
- logger.debug('Sentry not available for alert delivery');
156
- return;
157
- }
158
- try {
159
- // Get request context for rich tracing
160
- const context = getRequestContext();
161
- // Build tags (indexed, searchable fields)
162
- const tags = {
163
- metric: alert.metric,
164
- alert_level: alert.level,
165
- };
166
- // Add request context to tags for better filtering
167
- if (context?.requestId)
168
- tags.request_id = context.requestId;
169
- if (context?.userId)
170
- tags.user_id = context.userId;
171
- if (context?.path)
172
- tags.path = context.path;
173
- if (context?.method)
174
- tags.method = context.method;
175
- // Build extra context (non-indexed, rich data)
176
- const extra = {
177
- value: alert.value,
178
- threshold: alert.threshold,
179
- timestamp: alert.timestamp,
180
- };
181
- // Add full request context for debugging
182
- if (context) {
183
- extra.request_context = {
184
- requestId: context.requestId,
185
- startTime: context.startTime,
186
- duration: Date.now() - context.startTime,
187
- userId: context.userId,
188
- path: context.path,
189
- method: context.method,
190
- ip: context.ip,
191
- userAgent: context.userAgent,
192
- };
193
- }
194
- // Set user context if available (for Sentry user tracking)
195
- if (context?.userId) {
196
- this.sentryClient.setUser({
197
- id: context.userId,
198
- ip_address: context.ip,
199
- });
200
- }
201
- // Capture the alert as a Sentry event
202
- this.sentryClient.captureMessage(alert.message, {
203
- level: 'error',
204
- tags,
205
- extra,
206
- });
207
- }
208
- catch (error) {
209
- // Sentry error, log and continue
210
- logger.debug('Sentry not available for alert delivery', { error });
211
- }
212
- }
213
- /**
214
- * Start aggregation timer
215
- */
216
- startAggregation() {
217
- if (this.aggregationTimer)
218
- return;
219
- this.aggregationTimer = setInterval(() => {
220
- this.flushAlerts();
221
- }, this.config.aggregationInterval);
222
- // Don't keep process alive
223
- this.aggregationTimer.unref();
224
- this.lastAggregationTime = Date.now();
225
- }
226
- /**
227
- * Flush aggregated alerts
228
- */
229
- flushAlerts() {
230
- if (this.alertQueue.length === 0)
231
- return;
232
- // Group alerts by metric and level
233
- const grouped = new Map();
234
- for (const alert of this.alertQueue) {
235
- const key = `${alert.metric}:${alert.level}`;
236
- const existing = grouped.get(key) || [];
237
- existing.push(alert);
238
- grouped.set(key, existing);
239
- }
240
- // Send aggregated alerts
241
- for (const [_key, alerts] of Array.from(grouped.entries())) {
242
- if (alerts.length === 0)
243
- continue;
244
- const first = alerts[0];
245
- if (!first)
246
- continue;
247
- const count = alerts.length;
248
- const avgValue = alerts.reduce((sum, a) => sum + a.value, 0) / count;
249
- const aggregatedAlert = {
250
- level: first.level,
251
- metric: first.metric,
252
- value: first.value,
253
- threshold: first.threshold,
254
- message: `${first.message} (occurred ${count} times, avg value: ${Math.round(avgValue)})`,
255
- timestamp: Date.now(),
256
- };
257
- this.deliverAlert(aggregatedAlert);
258
- }
259
- // Clear queue
260
- this.alertQueue = [];
261
- this.lastAggregationTime = Date.now();
262
- }
263
- /**
264
- * Stop aggregation timer
265
- */
266
- stopAggregation() {
267
- if (this.aggregationTimer) {
268
- clearInterval(this.aggregationTimer);
269
- this.aggregationTimer = null;
270
- }
271
- }
272
- /**
273
- * Check if running in production
274
- */
275
- isProduction() {
276
- return process.env.NODE_ENV === 'production';
277
- }
278
- /**
279
- * Get alert queue stats
280
- */
281
- getStats() {
282
- return {
283
- queueSize: this.alertQueue.length,
284
- lastAggregationTime: this.lastAggregationTime,
285
- aggregationEnabled: this.config.aggregateInProduction && this.isProduction(),
286
- };
287
- }
288
- /**
289
- * Configure alert channels
290
- */
291
- setChannels(channels) {
292
- this.config.channels = channels;
293
- }
294
- /**
295
- * Cleanup resources
296
- */
297
- dispose() {
298
- this.stopAggregation();
299
- this.flushAlerts(); // Flush remaining alerts
300
- }
301
- }
302
- /**
303
- * Singleton instance
304
- */
305
- export const alertManager = new AlertManager();
306
- /**
307
- * Export AlertManager class for testing
308
- */
309
- export { AlertManager };
310
- /**
311
- * Convenience functions
312
- */
313
- export function sendAlert(alert) {
314
- alertManager.sendAlert(alert);
315
- }
316
- export function sendAlerts(alerts) {
317
- alertManager.sendAlerts(alerts);
318
- }
319
- export function getAlertStats() {
320
- return alertManager.getStats();
321
- }
322
- export function setAlertChannels(channels) {
323
- alertManager.setChannels(channels);
324
- }
325
- //# sourceMappingURL=alerts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../../../../../core/src/monitoring/alerts.ts"],"names":[],"mappings":"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"}