@wizeworks/lens-cloud 0.3.0-alpha.2 → 0.3.0-alpha.4

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 (597) hide show
  1. package/README.md +4 -0
  2. package/dist/alerts/evaluate.d.ts +6 -5
  3. package/dist/alerts/evaluate.d.ts.map +1 -1
  4. package/dist/alerts/evaluate.js +60 -28
  5. package/dist/alerts/evaluate.js.map +1 -1
  6. package/dist/alerts/problem-link.d.ts +12 -0
  7. package/dist/alerts/problem-link.d.ts.map +1 -0
  8. package/dist/alerts/problem-link.js +31 -0
  9. package/dist/alerts/problem-link.js.map +1 -0
  10. package/dist/app.d.ts +15 -0
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/auth/auth.d.ts +8 -2
  13. package/dist/auth/auth.d.ts.map +1 -1
  14. package/dist/auth/auth.js +25 -2
  15. package/dist/auth/auth.js.map +1 -1
  16. package/dist/auth/billing-hooks.d.ts +9 -0
  17. package/dist/auth/billing-hooks.d.ts.map +1 -0
  18. package/dist/auth/billing-hooks.js +49 -0
  19. package/dist/auth/billing-hooks.js.map +1 -0
  20. package/dist/auth/bridge.js +2 -2
  21. package/dist/auth/bridge.js.map +1 -1
  22. package/dist/auth/crypto.d.ts +2 -0
  23. package/dist/auth/crypto.d.ts.map +1 -1
  24. package/dist/auth/crypto.js +2 -2
  25. package/dist/auth/crypto.js.map +1 -1
  26. package/dist/auth/deps.d.ts +7 -0
  27. package/dist/auth/deps.d.ts.map +1 -1
  28. package/dist/auth/deps.js.map +1 -1
  29. package/dist/auth/hooks.d.ts.map +1 -1
  30. package/dist/auth/hooks.js +8 -1
  31. package/dist/auth/hooks.js.map +1 -1
  32. package/dist/auth/join-scope.d.ts +7 -0
  33. package/dist/auth/join-scope.d.ts.map +1 -0
  34. package/dist/auth/join-scope.js +21 -0
  35. package/dist/auth/join-scope.js.map +1 -0
  36. package/dist/auth/oauth-access.d.ts +8 -0
  37. package/dist/auth/oauth-access.d.ts.map +1 -0
  38. package/dist/auth/oauth-access.js +31 -0
  39. package/dist/auth/oauth-access.js.map +1 -0
  40. package/dist/auth/oauth-grant.d.ts +5 -0
  41. package/dist/auth/oauth-grant.d.ts.map +1 -0
  42. package/dist/auth/oauth-grant.js +79 -0
  43. package/dist/auth/oauth-grant.js.map +1 -0
  44. package/dist/auth/oauth-names.d.ts +104 -0
  45. package/dist/auth/oauth-names.d.ts.map +1 -0
  46. package/dist/auth/oauth-names.js +72 -0
  47. package/dist/auth/oauth-names.js.map +1 -0
  48. package/dist/auth/oauth.d.ts +17 -0
  49. package/dist/auth/oauth.d.ts.map +1 -0
  50. package/dist/auth/oauth.js +47 -0
  51. package/dist/auth/oauth.js.map +1 -0
  52. package/dist/auth/options.d.ts.map +1 -1
  53. package/dist/auth/options.js +2 -0
  54. package/dist/auth/options.js.map +1 -1
  55. package/dist/auth/plugins.d.ts.map +1 -1
  56. package/dist/auth/plugins.js +15 -1
  57. package/dist/auth/plugins.js.map +1 -1
  58. package/dist/auth/principal.d.ts +10 -1
  59. package/dist/auth/principal.d.ts.map +1 -1
  60. package/dist/auth/principal.js +8 -7
  61. package/dist/auth/principal.js.map +1 -1
  62. package/dist/auth/roles.d.ts +5 -2
  63. package/dist/auth/roles.d.ts.map +1 -1
  64. package/dist/auth/roles.js +1 -0
  65. package/dist/auth/roles.js.map +1 -1
  66. package/dist/auth/schema-names.d.ts +33 -0
  67. package/dist/auth/schema-names.d.ts.map +1 -1
  68. package/dist/auth/schema-names.js +23 -0
  69. package/dist/auth/schema-names.js.map +1 -1
  70. package/dist/auth/scim.d.ts +6 -0
  71. package/dist/auth/scim.d.ts.map +1 -0
  72. package/dist/auth/scim.js +56 -0
  73. package/dist/auth/scim.js.map +1 -0
  74. package/dist/auth/signup.d.ts.map +1 -1
  75. package/dist/auth/signup.js +5 -2
  76. package/dist/auth/signup.js.map +1 -1
  77. package/dist/auth/wire.d.ts +2 -1
  78. package/dist/auth/wire.d.ts.map +1 -1
  79. package/dist/auth/wire.js +4 -1
  80. package/dist/auth/wire.js.map +1 -1
  81. package/dist/billing/cli.d.ts +6 -0
  82. package/dist/billing/cli.d.ts.map +1 -0
  83. package/dist/billing/cli.js +54 -0
  84. package/dist/billing/cli.js.map +1 -0
  85. package/dist/billing/gate.d.ts +13 -0
  86. package/dist/billing/gate.d.ts.map +1 -0
  87. package/dist/billing/gate.js +27 -0
  88. package/dist/billing/gate.js.map +1 -0
  89. package/dist/billing/limits.d.ts +29 -0
  90. package/dist/billing/limits.d.ts.map +1 -0
  91. package/dist/billing/limits.js +69 -0
  92. package/dist/billing/limits.js.map +1 -0
  93. package/dist/billing/notices.d.ts +4 -0
  94. package/dist/billing/notices.d.ts.map +1 -0
  95. package/dist/billing/notices.js +40 -0
  96. package/dist/billing/notices.js.map +1 -0
  97. package/dist/billing/options.d.ts +37 -0
  98. package/dist/billing/options.d.ts.map +1 -0
  99. package/dist/billing/options.js +33 -0
  100. package/dist/billing/options.js.map +1 -0
  101. package/dist/billing/plans.d.ts +50 -0
  102. package/dist/billing/plans.d.ts.map +1 -0
  103. package/dist/billing/plans.js +47 -0
  104. package/dist/billing/plans.js.map +1 -0
  105. package/dist/billing/report.d.ts +26 -0
  106. package/dist/billing/report.d.ts.map +1 -0
  107. package/dist/billing/report.js +53 -0
  108. package/dist/billing/report.js.map +1 -0
  109. package/dist/billing/service.d.ts +20 -0
  110. package/dist/billing/service.d.ts.map +1 -0
  111. package/dist/billing/service.js +29 -0
  112. package/dist/billing/service.js.map +1 -0
  113. package/dist/billing/stripe-plugin.d.ts +14 -0
  114. package/dist/billing/stripe-plugin.d.ts.map +1 -0
  115. package/dist/billing/stripe-plugin.js +39 -0
  116. package/dist/billing/stripe-plugin.js.map +1 -0
  117. package/dist/billing/stripe-setup.d.ts +15 -0
  118. package/dist/billing/stripe-setup.d.ts.map +1 -0
  119. package/dist/billing/stripe-setup.js +73 -0
  120. package/dist/billing/stripe-setup.js.map +1 -0
  121. package/dist/billing/summary.d.ts +59 -0
  122. package/dist/billing/summary.d.ts.map +1 -0
  123. package/dist/billing/summary.js +50 -0
  124. package/dist/billing/summary.js.map +1 -0
  125. package/dist/billing/sync.d.ts +5 -0
  126. package/dist/billing/sync.d.ts.map +1 -0
  127. package/dist/billing/sync.js +35 -0
  128. package/dist/billing/sync.js.map +1 -0
  129. package/dist/billing/usage-sub.d.ts +17 -0
  130. package/dist/billing/usage-sub.d.ts.map +1 -0
  131. package/dist/billing/usage-sub.js +47 -0
  132. package/dist/billing/usage-sub.js.map +1 -0
  133. package/dist/billing/usage.d.ts +28 -0
  134. package/dist/billing/usage.d.ts.map +1 -0
  135. package/dist/billing/usage.js +80 -0
  136. package/dist/billing/usage.js.map +1 -0
  137. package/dist/billing/webhook.d.ts +6 -0
  138. package/dist/billing/webhook.d.ts.map +1 -0
  139. package/dist/billing/webhook.js +41 -0
  140. package/dist/billing/webhook.js.map +1 -0
  141. package/dist/changes.d.ts +15 -0
  142. package/dist/changes.d.ts.map +1 -0
  143. package/dist/changes.js +45 -0
  144. package/dist/changes.js.map +1 -0
  145. package/dist/cli-args.d.ts +1 -1
  146. package/dist/cli-args.d.ts.map +1 -1
  147. package/dist/cli-args.js +44 -2
  148. package/dist/cli-args.js.map +1 -1
  149. package/dist/cli.js +10 -0
  150. package/dist/cli.js.map +1 -1
  151. package/dist/config.d.ts +19 -3
  152. package/dist/config.d.ts.map +1 -1
  153. package/dist/config.js +21 -1
  154. package/dist/config.js.map +1 -1
  155. package/dist/copy-cli.d.ts +3 -0
  156. package/dist/copy-cli.d.ts.map +1 -0
  157. package/dist/copy-cli.js +24 -0
  158. package/dist/copy-cli.js.map +1 -0
  159. package/dist/db/db.d.ts +2 -0
  160. package/dist/db/db.d.ts.map +1 -1
  161. package/dist/db/db.js +15 -4
  162. package/dist/db/db.js.map +1 -1
  163. package/dist/db/schema-alerts.d.ts +2 -0
  164. package/dist/db/schema-alerts.d.ts.map +1 -0
  165. package/dist/db/schema-alerts.js +15 -0
  166. package/dist/db/schema-alerts.js.map +1 -0
  167. package/dist/db/schema-billing.d.ts +2 -0
  168. package/dist/db/schema-billing.d.ts.map +1 -0
  169. package/dist/db/schema-billing.js +38 -0
  170. package/dist/db/schema-billing.js.map +1 -0
  171. package/dist/db/schema-issues.d.ts +2 -0
  172. package/dist/db/schema-issues.d.ts.map +1 -0
  173. package/dist/db/schema-issues.js +9 -0
  174. package/dist/db/schema-issues.js.map +1 -0
  175. package/dist/db/schema-logs.d.ts +2 -0
  176. package/dist/db/schema-logs.d.ts.map +1 -0
  177. package/dist/db/schema-logs.js +13 -0
  178. package/dist/db/schema-logs.js.map +1 -0
  179. package/dist/db/schema-oauth.d.ts +2 -0
  180. package/dist/db/schema-oauth.d.ts.map +1 -0
  181. package/dist/db/schema-oauth.js +69 -0
  182. package/dist/db/schema-oauth.js.map +1 -0
  183. package/dist/db/schema-saved-move.d.ts +2 -0
  184. package/dist/db/schema-saved-move.d.ts.map +1 -0
  185. package/dist/db/schema-saved-move.js +13 -0
  186. package/dist/db/schema-saved-move.js.map +1 -0
  187. package/dist/db/schema-saved.d.ts +2 -0
  188. package/dist/db/schema-saved.d.ts.map +1 -0
  189. package/dist/db/schema-saved.js +13 -0
  190. package/dist/db/schema-saved.js.map +1 -0
  191. package/dist/db/schema-scim.d.ts +2 -0
  192. package/dist/db/schema-scim.d.ts.map +1 -0
  193. package/dist/db/schema-scim.js +28 -0
  194. package/dist/db/schema-scim.js.map +1 -0
  195. package/dist/db/schema-search.d.ts +2 -0
  196. package/dist/db/schema-search.d.ts.map +1 -0
  197. package/dist/db/schema-search.js +16 -0
  198. package/dist/db/schema-search.js.map +1 -0
  199. package/dist/db/schema-slos.d.ts +2 -0
  200. package/dist/db/schema-slos.d.ts.map +1 -0
  201. package/dist/db/schema-slos.js +12 -0
  202. package/dist/db/schema-slos.js.map +1 -0
  203. package/dist/db/schema-sourcemaps.d.ts +2 -0
  204. package/dist/db/schema-sourcemaps.d.ts.map +1 -0
  205. package/dist/db/schema-sourcemaps.js +9 -0
  206. package/dist/db/schema-sourcemaps.js.map +1 -0
  207. package/dist/db/schema-tags.d.ts +2 -0
  208. package/dist/db/schema-tags.d.ts.map +1 -0
  209. package/dist/db/schema-tags.js +12 -0
  210. package/dist/db/schema-tags.js.map +1 -0
  211. package/dist/db/schema-team.d.ts +2 -0
  212. package/dist/db/schema-team.d.ts.map +1 -0
  213. package/dist/db/schema-team.js +15 -0
  214. package/dist/db/schema-team.js.map +1 -0
  215. package/dist/db/schema-uptime.d.ts +2 -0
  216. package/dist/db/schema-uptime.d.ts.map +1 -0
  217. package/dist/db/schema-uptime.js +22 -0
  218. package/dist/db/schema-uptime.js.map +1 -0
  219. package/dist/db/schema.d.ts.map +1 -1
  220. package/dist/db/schema.js +32 -0
  221. package/dist/db/schema.js.map +1 -1
  222. package/dist/db/trigram.d.ts +4 -0
  223. package/dist/db/trigram.d.ts.map +1 -0
  224. package/dist/db/trigram.js +34 -0
  225. package/dist/db/trigram.js.map +1 -0
  226. package/dist/http/http.d.ts +5 -1
  227. package/dist/http/http.d.ts.map +1 -1
  228. package/dist/http/http.js +5 -1
  229. package/dist/http/http.js.map +1 -1
  230. package/dist/jobs.d.ts +1 -1
  231. package/dist/jobs.d.ts.map +1 -1
  232. package/dist/jobs.js +23 -9
  233. package/dist/jobs.js.map +1 -1
  234. package/dist/mail/blocks.d.ts +1 -1
  235. package/dist/mail/blocks.js +2 -2
  236. package/dist/mail/blocks.js.map +1 -1
  237. package/dist/mail/emails-billing.d.ts +17 -0
  238. package/dist/mail/emails-billing.d.ts.map +1 -0
  239. package/dist/mail/emails-billing.js +36 -0
  240. package/dist/mail/emails-billing.js.map +1 -0
  241. package/dist/mail/emails.d.ts +1 -1
  242. package/dist/mail/emails.d.ts.map +1 -1
  243. package/dist/mail/emails.js +7 -4
  244. package/dist/mail/emails.js.map +1 -1
  245. package/dist/mail/layout.d.ts +1 -1
  246. package/dist/mail/layout.d.ts.map +1 -1
  247. package/dist/mail/layout.js +2 -2
  248. package/dist/mail/layout.js.map +1 -1
  249. package/dist/mail/mailer.d.ts +1 -1
  250. package/dist/mail/mailer.d.ts.map +1 -1
  251. package/dist/mail/mailer.js +4 -3
  252. package/dist/mail/mailer.js.map +1 -1
  253. package/dist/mail/resend.d.ts +2 -0
  254. package/dist/mail/resend.d.ts.map +1 -1
  255. package/dist/mail/resend.js +1 -1
  256. package/dist/mail/resend.js.map +1 -1
  257. package/dist/mail/samples.d.ts.map +1 -1
  258. package/dist/mail/samples.js +17 -0
  259. package/dist/mail/samples.js.map +1 -1
  260. package/dist/mail/templates.d.ts +1 -1
  261. package/dist/mail/templates.d.ts.map +1 -1
  262. package/dist/mail/theme.d.ts +7 -1
  263. package/dist/mail/theme.d.ts.map +1 -1
  264. package/dist/mail/theme.js +7 -1
  265. package/dist/mail/theme.js.map +1 -1
  266. package/dist/notify/digest-data.d.ts +2 -1
  267. package/dist/notify/digest-data.d.ts.map +1 -1
  268. package/dist/notify/digest-data.js +5 -11
  269. package/dist/notify/digest-data.js.map +1 -1
  270. package/dist/notify/digest.d.ts.map +1 -1
  271. package/dist/notify/digest.js +5 -2
  272. package/dist/notify/digest.js.map +1 -1
  273. package/dist/notify/health.d.ts.map +1 -1
  274. package/dist/notify/health.js +4 -5
  275. package/dist/notify/health.js.map +1 -1
  276. package/dist/notify/team-describe.d.ts.map +1 -1
  277. package/dist/notify/team-describe.js +14 -0
  278. package/dist/notify/team-describe.js.map +1 -1
  279. package/dist/repo/alert-events.d.ts +38 -0
  280. package/dist/repo/alert-events.d.ts.map +1 -0
  281. package/dist/repo/alert-events.js +29 -0
  282. package/dist/repo/alert-events.js.map +1 -0
  283. package/dist/repo/alerts.d.ts +14 -44
  284. package/dist/repo/alerts.d.ts.map +1 -1
  285. package/dist/repo/alerts.js +35 -13
  286. package/dist/repo/alerts.js.map +1 -1
  287. package/dist/repo/audit.d.ts +19 -1
  288. package/dist/repo/audit.d.ts.map +1 -1
  289. package/dist/repo/audit.js +24 -2
  290. package/dist/repo/audit.js.map +1 -1
  291. package/dist/repo/auth-prune.d.ts +1 -1
  292. package/dist/repo/auth-prune.d.ts.map +1 -1
  293. package/dist/repo/auth-prune.js +13 -1
  294. package/dist/repo/auth-prune.js.map +1 -1
  295. package/dist/repo/billing.d.ts +30 -0
  296. package/dist/repo/billing.d.ts.map +1 -0
  297. package/dist/repo/billing.js +47 -0
  298. package/dist/repo/billing.js.map +1 -0
  299. package/dist/repo/grants.d.ts +30 -0
  300. package/dist/repo/grants.d.ts.map +1 -0
  301. package/dist/repo/grants.js +57 -0
  302. package/dist/repo/grants.js.map +1 -0
  303. package/dist/repo/issues.d.ts +15 -0
  304. package/dist/repo/issues.d.ts.map +1 -0
  305. package/dist/repo/issues.js +31 -0
  306. package/dist/repo/issues.js.map +1 -0
  307. package/dist/repo/keys.d.ts +51 -0
  308. package/dist/repo/keys.d.ts.map +1 -0
  309. package/dist/repo/keys.js +58 -0
  310. package/dist/repo/keys.js.map +1 -0
  311. package/dist/repo/log-retention.d.ts +8 -0
  312. package/dist/repo/log-retention.d.ts.map +1 -0
  313. package/dist/repo/log-retention.js +20 -0
  314. package/dist/repo/log-retention.js.map +1 -0
  315. package/dist/repo/metric-read.d.ts +2 -0
  316. package/dist/repo/metric-read.d.ts.map +1 -1
  317. package/dist/repo/metric-read.js +5 -1
  318. package/dist/repo/metric-read.js.map +1 -1
  319. package/dist/repo/metric-write.d.ts.map +1 -1
  320. package/dist/repo/metric-write.js +3 -2
  321. package/dist/repo/metric-write.js.map +1 -1
  322. package/dist/repo/orgs.d.ts +2 -0
  323. package/dist/repo/orgs.d.ts.map +1 -1
  324. package/dist/repo/orgs.js +5 -1
  325. package/dist/repo/orgs.js.map +1 -1
  326. package/dist/repo/project-roles.d.ts +28 -0
  327. package/dist/repo/project-roles.d.ts.map +1 -0
  328. package/dist/repo/project-roles.js +39 -0
  329. package/dist/repo/project-roles.js.map +1 -0
  330. package/dist/repo/projects.d.ts +3 -22
  331. package/dist/repo/projects.d.ts.map +1 -1
  332. package/dist/repo/projects.js +4 -29
  333. package/dist/repo/projects.js.map +1 -1
  334. package/dist/repo/saved.d.ts +9 -0
  335. package/dist/repo/saved.d.ts.map +1 -0
  336. package/dist/repo/saved.js +29 -0
  337. package/dist/repo/saved.js.map +1 -0
  338. package/dist/repo/scim-tokens.d.ts +20 -0
  339. package/dist/repo/scim-tokens.d.ts.map +1 -0
  340. package/dist/repo/scim-tokens.js +32 -0
  341. package/dist/repo/scim-tokens.js.map +1 -0
  342. package/dist/repo/services.d.ts +6 -0
  343. package/dist/repo/services.d.ts.map +1 -0
  344. package/dist/repo/services.js +17 -0
  345. package/dist/repo/services.js.map +1 -0
  346. package/dist/repo/settings.d.ts +30 -0
  347. package/dist/repo/settings.d.ts.map +1 -0
  348. package/dist/repo/settings.js +55 -0
  349. package/dist/repo/settings.js.map +1 -0
  350. package/dist/repo/slos.d.ts +10 -0
  351. package/dist/repo/slos.d.ts.map +1 -0
  352. package/dist/repo/slos.js +27 -0
  353. package/dist/repo/slos.js.map +1 -0
  354. package/dist/repo/sourcemaps.d.ts +9 -0
  355. package/dist/repo/sourcemaps.d.ts.map +1 -0
  356. package/dist/repo/sourcemaps.js +34 -0
  357. package/dist/repo/sourcemaps.js.map +1 -0
  358. package/dist/repo/tags.d.ts +11 -0
  359. package/dist/repo/tags.d.ts.map +1 -0
  360. package/dist/repo/tags.js +33 -0
  361. package/dist/repo/tags.js.map +1 -0
  362. package/dist/repo/trace-join.d.ts +9 -0
  363. package/dist/repo/trace-join.d.ts.map +1 -0
  364. package/dist/repo/trace-join.js +35 -0
  365. package/dist/repo/trace-join.js.map +1 -0
  366. package/dist/repo/trace-read.d.ts +6 -13
  367. package/dist/repo/trace-read.d.ts.map +1 -1
  368. package/dist/repo/trace-read.js +11 -4
  369. package/dist/repo/trace-read.js.map +1 -1
  370. package/dist/repo/trace-write.d.ts +6 -2
  371. package/dist/repo/trace-write.d.ts.map +1 -1
  372. package/dist/repo/trace-write.js +22 -7
  373. package/dist/repo/trace-write.js.map +1 -1
  374. package/dist/repo/uptime.d.ts +21 -0
  375. package/dist/repo/uptime.d.ts.map +1 -0
  376. package/dist/repo/uptime.js +53 -0
  377. package/dist/repo/uptime.js.map +1 -0
  378. package/dist/routes/alerts.d.ts.map +1 -1
  379. package/dist/routes/alerts.js +65 -66
  380. package/dist/routes/alerts.js.map +1 -1
  381. package/dist/routes/apps.d.ts +20 -0
  382. package/dist/routes/apps.d.ts.map +1 -0
  383. package/dist/routes/apps.js +53 -0
  384. package/dist/routes/apps.js.map +1 -0
  385. package/dist/routes/billing.d.ts +4 -0
  386. package/dist/routes/billing.d.ts.map +1 -0
  387. package/dist/routes/billing.js +51 -0
  388. package/dist/routes/billing.js.map +1 -0
  389. package/dist/routes/changes.d.ts +4 -0
  390. package/dist/routes/changes.d.ts.map +1 -0
  391. package/dist/routes/changes.js +19 -0
  392. package/dist/routes/changes.js.map +1 -0
  393. package/dist/routes/data.d.ts.map +1 -1
  394. package/dist/routes/data.js +38 -14
  395. package/dist/routes/data.js.map +1 -1
  396. package/dist/routes/index.d.ts.map +1 -1
  397. package/dist/routes/index.js +28 -0
  398. package/dist/routes/index.js.map +1 -1
  399. package/dist/routes/ingest.d.ts +3 -1
  400. package/dist/routes/ingest.d.ts.map +1 -1
  401. package/dist/routes/ingest.js +60 -14
  402. package/dist/routes/ingest.js.map +1 -1
  403. package/dist/routes/issues.d.ts +4 -0
  404. package/dist/routes/issues.d.ts.map +1 -0
  405. package/dist/routes/issues.js +34 -0
  406. package/dist/routes/issues.js.map +1 -0
  407. package/dist/routes/keys.d.ts +4 -0
  408. package/dist/routes/keys.d.ts.map +1 -0
  409. package/dist/routes/keys.js +70 -0
  410. package/dist/routes/keys.js.map +1 -0
  411. package/dist/routes/mcp.d.ts.map +1 -1
  412. package/dist/routes/mcp.js +85 -31
  413. package/dist/routes/mcp.js.map +1 -1
  414. package/dist/routes/me.d.ts.map +1 -1
  415. package/dist/routes/me.js +15 -5
  416. package/dist/routes/me.js.map +1 -1
  417. package/dist/routes/metrics.d.ts +2 -2
  418. package/dist/routes/metrics.d.ts.map +1 -1
  419. package/dist/routes/metrics.js +3 -4
  420. package/dist/routes/metrics.js.map +1 -1
  421. package/dist/routes/models.d.ts +9 -1
  422. package/dist/routes/models.d.ts.map +1 -1
  423. package/dist/routes/models.js +62 -21
  424. package/dist/routes/models.js.map +1 -1
  425. package/dist/routes/notify.d.ts.map +1 -1
  426. package/dist/routes/notify.js +3 -1
  427. package/dist/routes/notify.js.map +1 -1
  428. package/dist/routes/oauth-meta.d.ts +7 -0
  429. package/dist/routes/oauth-meta.d.ts.map +1 -0
  430. package/dist/routes/oauth-meta.js +52 -0
  431. package/dist/routes/oauth-meta.js.map +1 -0
  432. package/dist/routes/orgs.d.ts.map +1 -1
  433. package/dist/routes/orgs.js +27 -7
  434. package/dist/routes/orgs.js.map +1 -1
  435. package/dist/routes/projects.d.ts.map +1 -1
  436. package/dist/routes/projects.js +32 -22
  437. package/dist/routes/projects.js.map +1 -1
  438. package/dist/routes/saved.d.ts +4 -0
  439. package/dist/routes/saved.d.ts.map +1 -0
  440. package/dist/routes/saved.js +56 -0
  441. package/dist/routes/saved.js.map +1 -0
  442. package/dist/routes/scim.d.ts +4 -0
  443. package/dist/routes/scim.d.ts.map +1 -0
  444. package/dist/routes/scim.js +37 -0
  445. package/dist/routes/scim.js.map +1 -0
  446. package/dist/routes/search.d.ts +4 -0
  447. package/dist/routes/search.d.ts.map +1 -0
  448. package/dist/routes/search.js +36 -0
  449. package/dist/routes/search.js.map +1 -0
  450. package/dist/routes/settings.d.ts +4 -0
  451. package/dist/routes/settings.d.ts.map +1 -0
  452. package/dist/routes/settings.js +39 -0
  453. package/dist/routes/settings.js.map +1 -0
  454. package/dist/routes/shares.d.ts +3 -0
  455. package/dist/routes/shares.d.ts.map +1 -1
  456. package/dist/routes/shares.js +34 -18
  457. package/dist/routes/shares.js.map +1 -1
  458. package/dist/routes/slos.d.ts +4 -0
  459. package/dist/routes/slos.d.ts.map +1 -0
  460. package/dist/routes/slos.js +76 -0
  461. package/dist/routes/slos.js.map +1 -0
  462. package/dist/routes/sourcemaps.d.ts +9 -0
  463. package/dist/routes/sourcemaps.d.ts.map +1 -0
  464. package/dist/routes/sourcemaps.js +54 -0
  465. package/dist/routes/sourcemaps.js.map +1 -0
  466. package/dist/routes/status.d.ts +4 -0
  467. package/dist/routes/status.d.ts.map +1 -0
  468. package/dist/routes/status.js +60 -0
  469. package/dist/routes/status.js.map +1 -0
  470. package/dist/routes/tags.d.ts +4 -0
  471. package/dist/routes/tags.d.ts.map +1 -0
  472. package/dist/routes/tags.js +81 -0
  473. package/dist/routes/tags.js.map +1 -0
  474. package/dist/routes/uptime.d.ts +4 -0
  475. package/dist/routes/uptime.d.ts.map +1 -0
  476. package/dist/routes/uptime.js +71 -0
  477. package/dist/routes/uptime.js.map +1 -0
  478. package/dist/scale-exec.d.ts +3 -2
  479. package/dist/scale-exec.d.ts.map +1 -1
  480. package/dist/scale-exec.js +5 -4
  481. package/dist/scale-exec.js.map +1 -1
  482. package/dist/server.d.ts.map +1 -1
  483. package/dist/server.js +45 -10
  484. package/dist/server.js.map +1 -1
  485. package/dist/settle.d.ts +13 -9
  486. package/dist/settle.d.ts.map +1 -1
  487. package/dist/settle.js +40 -20
  488. package/dist/settle.js.map +1 -1
  489. package/dist/telemetry/cached.d.ts +11 -0
  490. package/dist/telemetry/cached.d.ts.map +1 -0
  491. package/dist/telemetry/cached.js +30 -0
  492. package/dist/telemetry/cached.js.map +1 -0
  493. package/dist/telemetry/ch/admin.d.ts +14 -0
  494. package/dist/telemetry/ch/admin.d.ts.map +1 -0
  495. package/dist/telemetry/ch/admin.js +82 -0
  496. package/dist/telemetry/ch/admin.js.map +1 -0
  497. package/dist/telemetry/ch/http.d.ts +19 -0
  498. package/dist/telemetry/ch/http.d.ts.map +1 -0
  499. package/dist/telemetry/ch/http.js +91 -0
  500. package/dist/telemetry/ch/http.js.map +1 -0
  501. package/dist/telemetry/ch/metrics.d.ts +10 -0
  502. package/dist/telemetry/ch/metrics.d.ts.map +1 -0
  503. package/dist/telemetry/ch/metrics.js +61 -0
  504. package/dist/telemetry/ch/metrics.js.map +1 -0
  505. package/dist/telemetry/ch/queries.d.ts +19 -0
  506. package/dist/telemetry/ch/queries.d.ts.map +1 -0
  507. package/dist/telemetry/ch/queries.js +30 -0
  508. package/dist/telemetry/ch/queries.js.map +1 -0
  509. package/dist/telemetry/ch/queue.d.ts +36 -0
  510. package/dist/telemetry/ch/queue.d.ts.map +1 -0
  511. package/dist/telemetry/ch/queue.js +83 -0
  512. package/dist/telemetry/ch/queue.js.map +1 -0
  513. package/dist/telemetry/ch/read.d.ts +12 -0
  514. package/dist/telemetry/ch/read.d.ts.map +1 -0
  515. package/dist/telemetry/ch/read.js +74 -0
  516. package/dist/telemetry/ch/read.js.map +1 -0
  517. package/dist/telemetry/ch/rebuild.d.ts +23 -0
  518. package/dist/telemetry/ch/rebuild.d.ts.map +1 -0
  519. package/dist/telemetry/ch/rebuild.js +65 -0
  520. package/dist/telemetry/ch/rebuild.js.map +1 -0
  521. package/dist/telemetry/ch/schema-facts.d.ts +6 -0
  522. package/dist/telemetry/ch/schema-facts.d.ts.map +1 -0
  523. package/dist/telemetry/ch/schema-facts.js +55 -0
  524. package/dist/telemetry/ch/schema-facts.js.map +1 -0
  525. package/dist/telemetry/ch/schema-raw.d.ts +10 -0
  526. package/dist/telemetry/ch/schema-raw.d.ts.map +1 -0
  527. package/dist/telemetry/ch/schema-raw.js +37 -0
  528. package/dist/telemetry/ch/schema-raw.js.map +1 -0
  529. package/dist/telemetry/ch/schema-rollups.d.ts +2 -0
  530. package/dist/telemetry/ch/schema-rollups.d.ts.map +1 -0
  531. package/dist/telemetry/ch/schema-rollups.js +61 -0
  532. package/dist/telemetry/ch/schema-rollups.js.map +1 -0
  533. package/dist/telemetry/ch/schema.d.ts +12 -0
  534. package/dist/telemetry/ch/schema.d.ts.map +1 -0
  535. package/dist/telemetry/ch/schema.js +25 -0
  536. package/dist/telemetry/ch/schema.js.map +1 -0
  537. package/dist/telemetry/ch/settle-pool.d.ts +24 -0
  538. package/dist/telemetry/ch/settle-pool.d.ts.map +1 -0
  539. package/dist/telemetry/ch/settle-pool.js +58 -0
  540. package/dist/telemetry/ch/settle-pool.js.map +1 -0
  541. package/dist/telemetry/ch/settle-rows.d.ts +16 -0
  542. package/dist/telemetry/ch/settle-rows.d.ts.map +1 -0
  543. package/dist/telemetry/ch/settle-rows.js +74 -0
  544. package/dist/telemetry/ch/settle-rows.js.map +1 -0
  545. package/dist/telemetry/ch/settle-work.d.ts +21 -0
  546. package/dist/telemetry/ch/settle-work.d.ts.map +1 -0
  547. package/dist/telemetry/ch/settle-work.js +52 -0
  548. package/dist/telemetry/ch/settle-work.js.map +1 -0
  549. package/dist/telemetry/ch/settle-worker.d.ts +2 -0
  550. package/dist/telemetry/ch/settle-worker.d.ts.map +1 -0
  551. package/dist/telemetry/ch/settle-worker.js +10 -0
  552. package/dist/telemetry/ch/settle-worker.js.map +1 -0
  553. package/dist/telemetry/ch/settle.d.ts +21 -0
  554. package/dist/telemetry/ch/settle.d.ts.map +1 -0
  555. package/dist/telemetry/ch/settle.js +55 -0
  556. package/dist/telemetry/ch/settle.js.map +1 -0
  557. package/dist/telemetry/ch/store.d.ts +27 -0
  558. package/dist/telemetry/ch/store.d.ts.map +1 -0
  559. package/dist/telemetry/ch/store.js +94 -0
  560. package/dist/telemetry/ch/store.js.map +1 -0
  561. package/dist/telemetry/ch/util.d.ts +27 -0
  562. package/dist/telemetry/ch/util.d.ts.map +1 -0
  563. package/dist/telemetry/ch/util.js +49 -0
  564. package/dist/telemetry/ch/util.js.map +1 -0
  565. package/dist/telemetry/ch/write.d.ts +12 -0
  566. package/dist/telemetry/ch/write.d.ts.map +1 -0
  567. package/dist/telemetry/ch/write.js +59 -0
  568. package/dist/telemetry/ch/write.js.map +1 -0
  569. package/dist/telemetry/copy.d.ts +9 -0
  570. package/dist/telemetry/copy.d.ts.map +1 -0
  571. package/dist/telemetry/copy.js +60 -0
  572. package/dist/telemetry/copy.js.map +1 -0
  573. package/dist/telemetry/index.d.ts +14 -0
  574. package/dist/telemetry/index.d.ts.map +1 -0
  575. package/dist/telemetry/index.js +26 -0
  576. package/dist/telemetry/index.js.map +1 -0
  577. package/dist/telemetry/pg-store.d.ts +5 -0
  578. package/dist/telemetry/pg-store.d.ts.map +1 -0
  579. package/dist/telemetry/pg-store.js +83 -0
  580. package/dist/telemetry/pg-store.js.map +1 -0
  581. package/dist/telemetry/store.d.ts +85 -0
  582. package/dist/telemetry/store.d.ts.map +1 -0
  583. package/dist/telemetry/store.js +2 -0
  584. package/dist/telemetry/store.js.map +1 -0
  585. package/dist/uptime/headers.d.ts +6 -0
  586. package/dist/uptime/headers.d.ts.map +1 -0
  587. package/dist/uptime/headers.js +25 -0
  588. package/dist/uptime/headers.js.map +1 -0
  589. package/dist/uptime/run.d.ts +9 -0
  590. package/dist/uptime/run.d.ts.map +1 -0
  591. package/dist/uptime/run.js +40 -0
  592. package/dist/uptime/run.js.map +1 -0
  593. package/package.json +10 -5
  594. package/dist/alerts/notify.d.ts +0 -28
  595. package/dist/alerts/notify.d.ts.map +0 -1
  596. package/dist/alerts/notify.js +0 -52
  597. package/dist/alerts/notify.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ import { withCachedCounts } from "./cached.js";
2
+ import { openClickHouse } from "./ch/store.js";
3
+ import { logDaysOf } from "../repo/log-retention.js";
4
+ import { pgTelemetry } from "./pg-store.js";
5
+ import { KEEP_DAYS } from "../repo/settings.js";
6
+ /** Retention days of the projects that still exist; deleted projects are left out. */
7
+ export const pgRetentionOf = (db) => async (ids) => {
8
+ const rows = await db.query(`SELECT p.id, ${KEEP_DAYS} AS d FROM projects p JOIN orgs o ON o.id = p.org_id WHERE p.id = ANY($1)`, [[...ids]]);
9
+ return new Map(rows.map((r) => [r.id, r.d]));
10
+ };
11
+ /** Log retention days of the projects that still exist: their own, else their organization's. */
12
+ export const pgLogRetentionOf = (db) => (ids) => logDaysOf(db, ids);
13
+ /** The telemetry store for this cloud: ClickHouse (scale mode) when a URL is set, else the cloud's own database. */
14
+ export async function openTelemetry(config, db, settings) {
15
+ const settingsOf = settings && ((id) => settings.get(id));
16
+ const store = config.clickhouseUrl
17
+ ? await openClickHouse({ url: config.clickhouseUrl, retentionOf: pgRetentionOf(db), logRetentionOf: pgLogRetentionOf(db), settingsOf, defaultRetentionDays: config.retentionDays, now: config.now, settleWorkers: config.settleWorkers })
18
+ : pgTelemetry(db);
19
+ return withCachedCounts(store, Date.now);
20
+ }
21
+ /** Drop the telemetry of projects that were deleted (or cleared) in Postgres. */
22
+ export async function clearProjects(t, projectIds) {
23
+ for (const id of projectIds)
24
+ await t.clearProject(id);
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AAIpE,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAM,EAAe,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAA4B,gBAAgB,SAAS,2EAA2E,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACzK,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,iGAAiG;AACjG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAM,EAAe,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAErF,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAmB,EAAE,EAAM,EAAE,QAAwB;IACvF,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;QAChC,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;QACzO,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAiB,EAAE,UAA6B;IAClF,KAAK,MAAM,EAAE,IAAI,UAAU;QAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Db } from "../db/db.js";
2
+ import type { TelemetryStore } from "./store.js";
3
+ /** Telemetry in the cloud's own database. Retention reads the organizations from the same database. */
4
+ export declare function pgTelemetry(db: Db): TelemetryStore;
5
+ //# sourceMappingURL=pg-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-store.d.ts","sourceRoot":"","sources":["../../src/telemetry/pg-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkCjD,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,CA6ClD"}
@@ -0,0 +1,83 @@
1
+ // Small mode: telemetry in the same Postgres (or PGlite) as accounts. The default, and what self-hosters and tests run.
2
+ import { PG_DIALECT, searchSql, suggestSql } from "@wizeworks/lens-core";
3
+ import { ensureTrigram } from "../db/trigram.js";
4
+ import { loadInfraData, loadMetricAlertData, loadMetricData } from "../repo/metric-read.js";
5
+ import { METRIC_TABLES } from "../repo/metric-write.js";
6
+ import { getJoinedTrace } from "../repo/trace-join.js";
7
+ import { countRows, getTrace, queryTraces, traceEnvsPg } from "../repo/trace-read.js";
8
+ import { pruneLogsByRetention } from "../repo/log-retention.js";
9
+ import { pruneByRetention, pruneMetricsByRetention, writeTelemetry } from "../repo/trace-write.js";
10
+ import { cloudExecutor, cloudSettling, pgRunner } from "../scale-exec.js";
11
+ import { factsStale, pruneRollups, resetFacts, settleCloud, STATS_TABLES } from "../settle.js";
12
+ const TELEMETRY_TABLES = ["spans", "logs", "traces", "metric_points", ...METRIC_TABLES, ...STATS_TABLES];
13
+ async function slowestEndpoints(db, projectId, w, minCount, limit) {
14
+ const rows = await db.query(`SELECT endpoint, percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_ms) AS p95, count(*)::int AS n FROM fact_requests
15
+ WHERE project_id = $1 AND start_ms >= $2 AND start_ms < $3 GROUP BY endpoint HAVING count(*) >= $4 ORDER BY p95 DESC LIMIT $5`, [projectId, w.from, w.to, minCount, limit]);
16
+ return rows.map((r) => ({ endpoint: r.endpoint, p95Ms: Number(r.p95), count: r.n }));
17
+ }
18
+ async function lastTraceMs(db) {
19
+ const rows = await db.query("SELECT project_id, max(start_ms) AS last_ms FROM traces GROUP BY project_id");
20
+ return new Map(rows.map((r) => [r.project_id, Number(r.last_ms)]));
21
+ }
22
+ async function activeHours(db, projectId, from, to) {
23
+ const [row] = await db.query("SELECT count(DISTINCT floor(start_ms / 3600000))::int AS n FROM traces WHERE project_id = $1 AND start_ms > $2 AND start_ms <= $3", [projectId, from, to]);
24
+ return row?.n ?? 0;
25
+ }
26
+ /** Traces, then log lines, then metrics past retention, then the rollup buckets past their keep. */
27
+ async function pruneAll(db, now) {
28
+ while ((await pruneByRetention(db, now)) > 0)
29
+ ;
30
+ await pruneLogsByRetention(db, now);
31
+ await pruneMetricsByRetention(db, now);
32
+ await pruneRollups(db, now, true);
33
+ }
34
+ /** Telemetry in the cloud's own database. Retention reads the organizations from the same database. */
35
+ export function pgTelemetry(db) {
36
+ const src = (projectId) => ({ d: PG_DIALECT, run: pgRunner(db), scope: { project: projectId } });
37
+ // A facts reset can take minutes on a big database, so it runs after start; settling waits for it, and tries again if it failed.
38
+ let reset = Promise.resolve();
39
+ const startReset = () => {
40
+ reset = resetFacts(db);
41
+ reset.catch((err) => console.error("Facts reset failed; settling tries again.", err));
42
+ };
43
+ // Trigram indexes build in the background too; close waits for them.
44
+ let trigram = Promise.resolve();
45
+ return {
46
+ kind: "postgres",
47
+ write: (projectId, w, now) => db.tx((q) => writeTelemetry(q, projectId, w, now)),
48
+ traces: (t) => queryTraces(db, t),
49
+ trace: (projectId, traceId) => getTrace(db, projectId, traceId),
50
+ joinedTrace: (primaryId, scope, traceId) => getJoinedTrace(db, primaryId, scope, traceId),
51
+ counts: (projectId) => countRows(db, projectId),
52
+ traceEnvs: (projectId) => traceEnvsPg(db, projectId),
53
+ activeHours: (projectId, from, to) => activeHours(db, projectId, from, to),
54
+ lastTraceMs: () => lastTraceMs(db),
55
+ executor: (projectId, retentionMs, env) => cloudExecutor(db, projectId, retentionMs, env),
56
+ settling: (projectId, o) => cloudSettling(db, projectId, o),
57
+ search: (projectId, q) => searchSql(src(projectId), q),
58
+ suggest: (projectId, r) => suggestSql(src(projectId), r),
59
+ slowestEndpoints: (projectId, w, minCount, limit) => slowestEndpoints(db, projectId, w, minCount, limit),
60
+ metricData: (m, range, params, now) => loadMetricData(db, m, range, params, now),
61
+ metricAlertData: (m, name, w, now) => loadMetricAlertData(db, m, name, w, now),
62
+ infraData: (m, range, params, now) => loadInfraData(db, m, range, params, now),
63
+ async settle(now, o) {
64
+ await reset.catch(() => (startReset(), reset));
65
+ return settleCloud(db, now, o);
66
+ },
67
+ prune: (now) => pruneAll(db, now),
68
+ pruneRollups: (now) => pruneRollups(db, now),
69
+ async checkFactsVersion() {
70
+ trigram = ensureTrigram(db).catch((err) => console.error("Trigram indexes failed; text searches scan until the next start.", err));
71
+ if (!(await factsStale(db)))
72
+ return false;
73
+ startReset();
74
+ return true;
75
+ },
76
+ async clearProject(projectId) {
77
+ for (const table of TELEMETRY_TABLES)
78
+ await db.query(`DELETE FROM ${table} WHERE project_id = $1`, [projectId]);
79
+ },
80
+ close: async () => void (await trigram),
81
+ };
82
+ }
83
+ //# sourceMappingURL=pg-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-store.js","sourceRoot":"","sources":["../../src/telemetry/pg-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import type { Executor, FactOptions, MetricAlertData, MetricData, SearchPage, SearchQuery, Suggestion, SuggestRequest, TimeRange, TimeWindow, Trace } from "@wizeworks/lens-core";
2
+ import type { HubWrite } from "@wizeworks/lens-hub/kit";
3
+ export interface TraceQuery {
4
+ projectId: string;
5
+ /** Changed at or after (server clock). */
6
+ since?: number;
7
+ /** Started before. For paging back. */
8
+ before?: number;
9
+ /** Started at or after. For time windows. */
10
+ from?: number;
11
+ env?: string;
12
+ session?: string;
13
+ /** Leave out loose batches (lines outside a request), which are not traces to list. */
14
+ noLoose?: boolean;
15
+ limit: number;
16
+ }
17
+ export interface MetricQuery {
18
+ projectId: string;
19
+ env?: string;
20
+ service?: string;
21
+ }
22
+ /** How long each project's organization keeps data, in days; the default when a project has none. */
23
+ export type RetentionOf = (projectIds: readonly string[]) => Promise<Map<string, number>>;
24
+ /** Which waiting traces `settling` counts: one environment, and only those last written at or before `before`. */
25
+ export interface SettlingScope {
26
+ env?: string;
27
+ before?: number;
28
+ }
29
+ export interface SettleOptions {
30
+ defaultRetentionDays?: number;
31
+ /** The cloud's thresholds; a project's own settings win. */
32
+ defaultFacts?: Partial<FactOptions>;
33
+ batch?: number;
34
+ budgetMs?: number;
35
+ /** Called for each project whose stats a batch wrote. */
36
+ onSettled?: (projectId: string) => void;
37
+ }
38
+ /** One telemetry backend. Postgres ("small mode") and ClickHouse ("scale mode") answer the same calls with the same results. */
39
+ export interface TelemetryStore {
40
+ readonly kind: "postgres" | "clickhouse";
41
+ /** Spans, logs, trace bounds, and metric points of one batch. */
42
+ write(projectId: string, w: HubWrite, now: number): Promise<void>;
43
+ traces(t: TraceQuery): Promise<Trace[]>;
44
+ trace(projectId: string, traceId: string): Promise<Trace | undefined>;
45
+ /** One trace with its parts from the other projects in `scope` (already checked by the caller). */
46
+ joinedTrace(primaryId: string, scope: readonly string[], traceId: string): Promise<Trace | undefined>;
47
+ counts(projectId: string): Promise<{
48
+ traces: number;
49
+ spans: number;
50
+ }>;
51
+ /** Environments seen on traces. */
52
+ traceEnvs(projectId: string): Promise<string[]>;
53
+ /** Distinct hours with a trace in (from, to]. */
54
+ activeHours(projectId: string, from: number, to: number): Promise<number>;
55
+ /** The newest trace start per project; projects without traces are left out. */
56
+ lastTraceMs(): Promise<Map<string, number>>;
57
+ /** Page needs from the project's stats. */
58
+ executor(projectId: string, retentionMs: number, env?: string): Executor;
59
+ /** Traces still waiting for their stats, or null when none. */
60
+ settling(projectId: string, o?: SettlingScope): Promise<number | null>;
61
+ search(projectId: string, q: SearchQuery): Promise<SearchPage>;
62
+ suggest(projectId: string, r: SuggestRequest): Promise<Suggestion[]>;
63
+ /** The slowest endpoints by p95 in a window, with at least `minCount` requests. */
64
+ slowestEndpoints(projectId: string, w: TimeWindow, minCount: number, limit: number): Promise<{
65
+ endpoint: string;
66
+ p95Ms: number;
67
+ count: number;
68
+ }[]>;
69
+ metricData(m: MetricQuery, range: TimeRange, params: Readonly<Record<string, string>>, now: number): Promise<MetricData>;
70
+ metricAlertData(m: MetricQuery, name: string, w: TimeWindow, now: number): Promise<MetricAlertData>;
71
+ /** Host and Kubernetes metric series for the Hosts and Kubernetes pages. */
72
+ infraData(m: MetricQuery, range: TimeRange, params: Readonly<Record<string, string>>, now: number): Promise<MetricData>;
73
+ /** Build stats for quiet traces. Returns how many settled. */
74
+ settle(now: number, o?: SettleOptions): Promise<number>;
75
+ /** Drop traces, metrics, and rollups past each organization's retention. */
76
+ prune(now: number): Promise<void>;
77
+ /** Age out the short rollup tiers. */
78
+ pruneRollups(now: number): Promise<void>;
79
+ /** On startup: rebuild the stats when the facts version changed. True when it did. */
80
+ checkFactsVersion(): Promise<boolean>;
81
+ /** Delete every trace, span, log, metric, and stat of a project. */
82
+ clearProject(projectId: string): Promise<void>;
83
+ close(): Promise<void>;
84
+ }
85
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { AuthSecret } from "../auth/secret.js";
2
+ /** Headers as stored: encrypted with the newest secret, or "{}" when there are none. */
3
+ export declare function sealHeaders(secrets: readonly AuthSecret[], headers: Record<string, string>): Promise<string>;
4
+ /** Headers from storage. A secret that is no longer configured opens nothing: the check then runs without its headers. */
5
+ export declare function openHeaders(secrets: readonly AuthSecret[], stored: string): Promise<Record<string, string>>;
6
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/uptime/headers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,wFAAwF;AACxF,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlH;AAED,0HAA0H;AAC1H,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUjH"}
@@ -0,0 +1,25 @@
1
+ import { symmetricDecrypt, symmetricEncrypt } from "better-auth/crypto";
2
+ // Check headers often hold tokens, so they are stored encrypted with the auth secret ("v<version>:<ciphertext>"), like 2FA secrets.
3
+ /** Headers as stored: encrypted with the newest secret, or "{}" when there are none. */
4
+ export async function sealHeaders(secrets, headers) {
5
+ if (Object.keys(headers).length === 0)
6
+ return "{}";
7
+ const s = secrets[0];
8
+ return `v${s.version}:${await symmetricEncrypt({ key: s.value, data: JSON.stringify(headers) })}`;
9
+ }
10
+ /** Headers from storage. A secret that is no longer configured opens nothing: the check then runs without its headers. */
11
+ export async function openHeaders(secrets, stored) {
12
+ const m = /^v(\d+):(.+)$/s.exec(stored);
13
+ if (!m)
14
+ return JSON.parse(stored);
15
+ const secret = secrets.find((s) => s.version === Number(m[1]));
16
+ if (!secret)
17
+ return {};
18
+ try {
19
+ return JSON.parse(await symmetricDecrypt({ key: secret.value, data: m[2] }));
20
+ }
21
+ catch {
22
+ return {};
23
+ }
24
+ }
25
+ //# sourceMappingURL=headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/uptime/headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,oIAAoI;AAEpI,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA8B,EAAE,OAA+B;IAC/F,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IACtB,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AACpG,CAAC;AAED,0HAA0H;AAC1H,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA8B,EAAE,MAAc;IAC9E,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAA2B,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,gBAAgB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC,CAA2B,CAAC;IAC1G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CloudApp } from "../app.js";
2
+ import { type CloudCheck } from "../repo/uptime.js";
3
+ /** A check may not point into the cloud's own network (metadata, databases), the same rule as alert webhooks. Self-hosts can allow it. */
4
+ export declare function checkUrlProblem(url: string, allowPrivate: boolean): Promise<string | null>;
5
+ /** Run one check now: keep its result, and write it as a wizelens-uptime trace through the normal write path. */
6
+ export declare function runCloudCheck(app: CloudApp, c: CloudCheck): Promise<void>;
7
+ /** Run every due check, ten at a time. Claiming moves each check's next run first, so replicas and slow runs never double up. */
8
+ export declare function runUptime(app: CloudApp): Promise<number>;
9
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/uptime/run.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAY,KAAK,UAAU,EAAW,MAAM,mBAAmB,CAAC;AAKvE,0IAA0I;AAC1I,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhG;AAED,iHAAiH;AACjH,wBAAsB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E;AAED,iIAAiI;AACjI,wBAAsB,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ9D"}
@@ -0,0 +1,40 @@
1
+ import { lookup } from "node:dns/promises";
2
+ import { isIP } from "node:net";
3
+ import { UPTIME_SERVICE, uptimeTelemetry } from "@wizeworks/lens-core";
4
+ import { isPrivateAddress, runCheck } from "@wizeworks/lens-hub/kit";
5
+ import { writeService } from "../repo/trace-write.js";
6
+ import { claimDue, saveRun } from "../repo/uptime.js";
7
+ const BATCH = 100;
8
+ const PARALLEL = 10;
9
+ /** A check may not point into the cloud's own network (metadata, databases), the same rule as alert webhooks. Self-hosts can allow it. */
10
+ export async function checkUrlProblem(url, allowPrivate) {
11
+ if (allowPrivate)
12
+ return null;
13
+ const host = new URL(url).hostname.replace(/^\[|\]$/g, "");
14
+ const addresses = isIP(host) ? [host] : (await lookup(host, { all: true }).catch(() => [])).map((a) => a.address);
15
+ if (addresses.length === 0)
16
+ return "The host name does not resolve.";
17
+ return addresses.some(isPrivateAddress) ? "Checks cannot point at private or local addresses." : null;
18
+ }
19
+ /** Run one check now: keep its result, and write it as a wizelens-uptime trace through the normal write path. */
20
+ export async function runCloudCheck(app, c) {
21
+ const r = await runCheck(c, { allowPrivate: app.config.allowPrivateWebhooks, now: app.config.now });
22
+ await saveRun(app.db, c, r);
23
+ const sender = { service: UPTIME_SERVICE, environment: c.env || undefined, runtime: `wizelens-cloud ${app.version}` };
24
+ const w = { sender, via: "uptime", ...uptimeTelemetry(c, r), remotes: [] };
25
+ const now = app.config.now();
26
+ await writeService(app.db, c.projectId, w, now);
27
+ await app.telemetry.write(c.projectId, w, now);
28
+ }
29
+ /** Run every due check, ten at a time. Claiming moves each check's next run first, so replicas and slow runs never double up. */
30
+ export async function runUptime(app) {
31
+ const due = await claimDue(app.db, app.secrets, app.config.now(), BATCH);
32
+ const queue = [...due];
33
+ const worker = async () => {
34
+ for (let c = queue.shift(); c; c = queue.shift())
35
+ await runCloudCheck(app, c).catch((err) => console.error(`[wizelens-cloud] uptime check ${c.id} failed:`, err));
36
+ };
37
+ await Promise.all(Array.from({ length: Math.min(PARALLEL, due.length) }, worker));
38
+ return due.length;
39
+ }
40
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/uptime/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizeworks/lens-cloud",
3
- "version": "0.3.0-alpha.2",
3
+ "version": "0.3.0-alpha.4",
4
4
  "description": "The WizeLens cloud service: many organizations, accounts and teams, server-side stats, alerts, sharing, and scoped AI access, on Postgres.",
5
5
  "license": "MIT",
6
6
  "author": "WizeWorks LLC",
@@ -42,8 +42,11 @@
42
42
  "node": ">=22.13"
43
43
  },
44
44
  "dependencies": {
45
+ "@better-auth/oauth-provider": "1.7.10",
45
46
  "@better-auth/passkey": "1.7.10",
47
+ "@better-auth/scim": "1.7.10",
46
48
  "@better-auth/sso": "1.7.10",
49
+ "@better-auth/stripe": "1.7.10",
47
50
  "@electric-sql/pglite": "^0.5.10",
48
51
  "@react-email/components": "1.0.12",
49
52
  "better-auth": "1.7.10",
@@ -53,12 +56,14 @@
53
56
  "pg": "^8.23.1",
54
57
  "react": "^19.3.1",
55
58
  "react-dom": "^19.3.1",
56
- "@wizeworks/lens-core": "^0.3.0-alpha.2",
57
- "@wizeworks/lens-hub": "^0.3.0-alpha.2",
58
- "@wizeworks/lens-ui": "^0.3.0-alpha.2",
59
- "@wizeworks/lens-node": "^0.3.0-alpha.2"
59
+ "stripe": "22.6.2",
60
+ "@wizeworks/lens-node": "^0.3.0-alpha.4",
61
+ "@wizeworks/lens-hub": "^0.3.0-alpha.4",
62
+ "@wizeworks/lens-ui": "^0.3.0-alpha.4",
63
+ "@wizeworks/lens-core": "^0.3.0-alpha.4"
60
64
  },
61
65
  "devDependencies": {
66
+ "@modelcontextprotocol/sdk": "^1.32.1",
62
67
  "@types/node": "^24.19.2",
63
68
  "@types/nodemailer": "^8.0.2",
64
69
  "@types/pg": "^8.23.1",
@@ -1,28 +0,0 @@
1
- import type { Channel } from "../repo/alerts.js";
2
- export interface Notice {
3
- rule: string;
4
- project: string;
5
- state: "fired" | "resolved" | "test";
6
- message: string;
7
- value: number | null;
8
- threshold: number;
9
- timeMs: number;
10
- /** Link to the project in the dashboard. */
11
- url: string;
12
- }
13
- /** How notices leave: HTTP for webhooks and Slack, and a mail function that sends to the members still allowed and says what it did. */
14
- export interface Outbox {
15
- http: typeof fetch;
16
- allowPrivate: boolean;
17
- email: (to: readonly string[], n: Notice) => string;
18
- }
19
- /** A webhook may not point into the service's own network (cloud metadata, databases). Self-hosts can allow it. */
20
- export declare function checkTarget(url: string, allowPrivate: boolean): Promise<string | null>;
21
- /** The notice in words, for Slack and email. */
22
- export declare function noticeLines(n: Notice): {
23
- subject: string;
24
- lines: string[];
25
- };
26
- /** Send to every channel. Returns one line per channel, for the delivery note of the event. */
27
- export declare function deliver(channels: readonly Channel[], n: Notice, out: Outbox): Promise<string>;
28
- //# sourceMappingURL=notify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/alerts/notify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wIAAwI;AACxI,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,OAAO,KAAK,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACrD;AAKD,mHAAmH;AACnH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY5F;AAED,gDAAgD;AAChD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAG3E;AAoBD,+FAA+F;AAC/F,wBAAsB,OAAO,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnG"}
@@ -1,52 +0,0 @@
1
- import { lookup } from "node:dns/promises";
2
- import { isIP } from "node:net";
3
- const PRIVATE_V4 = [/^10\./, /^127\./, /^169\.254\./, /^172\.(1[6-9]|2\d|3[01])\./, /^192\.168\./, /^0\./, /^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./];
4
- const isPrivate = (ip) => (isIP(ip) === 6 ? /^(::1|fc|fd|fe80|::ffff:(10|127|169\.254|192\.168)\.)/i.test(ip) || ip === "::" : PRIVATE_V4.some((r) => r.test(ip)));
5
- /** A webhook may not point into the service's own network (cloud metadata, databases). Self-hosts can allow it. */
6
- export async function checkTarget(url, allowPrivate) {
7
- let u;
8
- try {
9
- u = new URL(url);
10
- }
11
- catch {
12
- return "Not a valid URL.";
13
- }
14
- if (u.protocol !== "https:" && !(allowPrivate && u.protocol === "http:"))
15
- return "Use an https:// URL.";
16
- if (allowPrivate)
17
- return null;
18
- const addresses = isIP(u.hostname) ? [u.hostname] : (await lookup(u.hostname, { all: true }).catch(() => [])).map((a) => a.address);
19
- if (addresses.length === 0)
20
- return "The host name does not resolve.";
21
- return addresses.some(isPrivate) ? "Webhooks cannot point at private or local addresses." : null;
22
- }
23
- /** The notice in words, for Slack and email. */
24
- export function noticeLines(n) {
25
- const verb = n.state === "fired" ? "Alert" : n.state === "resolved" ? "Resolved" : "Test";
26
- return { subject: `${verb}: ${n.rule} (${n.project})`, lines: [`${verb}: ${n.rule} in ${n.project}.`, n.message] };
27
- }
28
- function bodyOf(channel, n) {
29
- if (channel.kind === "webhook")
30
- return n;
31
- const icon = n.state === "fired" ? ":rotating_light:" : n.state === "resolved" ? ":white_check_mark:" : ":bell:";
32
- const { subject } = noticeLines(n);
33
- return { text: `${icon} *${subject}*\n${n.message}\n<${n.url}|Open WizeLens>` };
34
- }
35
- async function post(c, n, out) {
36
- const problem = await checkTarget(c.url, out.allowPrivate);
37
- if (problem)
38
- return `${c.kind}: ${problem}`;
39
- try {
40
- const res = await out.http(c.url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(bodyOf(c, n)), signal: AbortSignal.timeout(5000), redirect: "error" });
41
- return `${c.kind}: ${res.ok ? "sent" : `HTTP ${res.status}`}`;
42
- }
43
- catch (err) {
44
- return `${c.kind}: ${err instanceof Error ? err.message : "failed"}`;
45
- }
46
- }
47
- /** Send to every channel. Returns one line per channel, for the delivery note of the event. */
48
- export async function deliver(channels, n, out) {
49
- const results = await Promise.all(channels.map(async (c) => (c.kind === "email" ? out.email(c.to, n) : post(c, n, out))));
50
- return results.join("; ") || "no channels";
51
- }
52
- //# sourceMappingURL=notify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/alerts/notify.ts"],"names":[],"mappings":"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"}