@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,71 @@
1
+ import { parseCheckInput, shownHeaders, UPTIME_LIMITS, uptimeList } from "@wizeworks/lens-core";
2
+ import { requireProject } from "../auth/principal.js";
3
+ import { fail, readJsonBody, sendJson } from "../http/http.js";
4
+ import { audit } from "../repo/audit.js";
5
+ import { checkById, countChecks, createCheck, deleteCheck, listChecks, listIncidents, updateCheck } from "../repo/uptime.js";
6
+ import { checkUrlProblem, runCloudCheck } from "../uptime/run.js";
7
+ const shown = (c) => c && { ...c, headers: shownHeaders(c.headers) };
8
+ /** The URL as the audit log keeps it: no query string. */
9
+ const urlOf = (url) => url.split("?")[0];
10
+ /** A check from the body, with the same rules as the hub, and an address the cloud may call. */
11
+ async function inputOf(ctx, current) {
12
+ const parsed = parseCheckInput(await readJsonBody(ctx.req), current);
13
+ if (!parsed.ok)
14
+ return fail(400, parsed.error);
15
+ const problem = await checkUrlProblem(parsed.input.url, ctx.app.config.allowPrivateWebhooks);
16
+ if (problem)
17
+ fail(400, `${parsed.input.url}: ${problem}`);
18
+ return parsed.input;
19
+ }
20
+ async function list(ctx) {
21
+ const { project } = await requireProject(ctx, ctx.params.project);
22
+ const now = ctx.app.config.now();
23
+ const checks = await listChecks(ctx.app.db, ctx.app.secrets, project.id);
24
+ sendJson(ctx.res, 200, uptimeList(checks, await listIncidents(ctx.app.db, project.id, now), now));
25
+ }
26
+ async function create(ctx) {
27
+ const { project, actor } = await requireProject(ctx, ctx.params.project, "write");
28
+ if ((await countChecks(ctx.app.db, project.id)) >= UPTIME_LIMITS.maxChecks)
29
+ fail(400, `A project runs at most ${UPTIME_LIMITS.maxChecks} checks.`);
30
+ const input = await inputOf(ctx);
31
+ const now = ctx.app.config.now();
32
+ const id = await createCheck(ctx.app.db, ctx.app.secrets, project.id, input, actor, now);
33
+ await audit(ctx.app.db, project.orgId, actor, "uptime.create", { projectId: project.id, checkId: id, name: input.name, url: urlOf(input.url) }, now);
34
+ sendJson(ctx.res, 201, shown(await checkById(ctx.app.db, ctx.app.secrets, project.id, id)));
35
+ }
36
+ /** The check named in the path, with write access checked. */
37
+ async function writable(ctx) {
38
+ const access = await requireProject(ctx, ctx.params.project, "write");
39
+ const check = await checkById(ctx.app.db, ctx.app.secrets, access.project.id, ctx.params.id);
40
+ if (!check)
41
+ return fail(404, "Check not found.");
42
+ return { ...access, check };
43
+ }
44
+ async function change(ctx) {
45
+ const { project, actor, check } = await writable(ctx);
46
+ const input = await inputOf(ctx, check);
47
+ const now = ctx.app.config.now();
48
+ await updateCheck(ctx.app.db, ctx.app.secrets, check, input, now);
49
+ await audit(ctx.app.db, project.orgId, actor, "uptime.update", { projectId: project.id, checkId: check.id, name: input.name, url: urlOf(input.url), enabled: input.enabled }, now);
50
+ sendJson(ctx.res, 200, shown(await checkById(ctx.app.db, ctx.app.secrets, project.id, check.id)));
51
+ }
52
+ async function remove(ctx) {
53
+ const { project, actor, check } = await writable(ctx);
54
+ await deleteCheck(ctx.app.db, project.id, check.id);
55
+ await audit(ctx.app.db, project.orgId, actor, "uptime.delete", { projectId: project.id, checkId: check.id, name: check.name }, ctx.app.config.now());
56
+ sendJson(ctx.res, 200, { ok: true });
57
+ }
58
+ /** Run a check now, for "does it work?" after a change. */
59
+ async function runNow(ctx) {
60
+ const { project, check } = await writable(ctx);
61
+ await runCloudCheck(ctx.app, check);
62
+ sendJson(ctx.res, 200, shown(await checkById(ctx.app.db, ctx.app.secrets, project.id, check.id)));
63
+ }
64
+ export function uptimeRoutes(r) {
65
+ r.on("GET", "api/projects/:project/uptime", list)
66
+ .on("POST", "api/projects/:project/uptime", create)
67
+ .on("PATCH", "api/projects/:project/uptime/:id", change)
68
+ .on("DELETE", "api/projects/:project/uptime/:id", remove)
69
+ .on("POST", "api/projects/:project/uptime/:id/run", runNow);
70
+ }
71
+ //# sourceMappingURL=uptime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uptime.js","sourceRoot":"","sources":["../../src/routes/uptime.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { type Executor, type SqlRunner } from "@wizeworks/lens-core";
2
2
  import type { Queryable } from "./db/db.js";
3
+ import type { SettlingScope } from "./telemetry/store.js";
3
4
  /** Reads for the SQL executor, on the cloud database. */
4
5
  export declare const pgRunner: (q: Queryable) => SqlRunner;
5
6
  /** How long a project's organization keeps data, in ms; `fallbackDays` when the project has no organization. */
6
7
  export declare function projectRetentionMs(q: Queryable, projectId: string, fallbackDays: number): Promise<number>;
7
8
  /** Page needs from a project's stats tables, optionally one environment. The 1 h tier keeps the organization's retention. */
8
9
  export declare function cloudExecutor(q: Queryable, projectId: string, retentionMs: number, env?: string): Executor;
9
- /** Traces of a project still waiting for their stats, for `pageContext(..., settling)`. Null when none. */
10
- export declare function cloudSettling(q: Queryable, projectId: string, env?: string): Promise<number | null>;
10
+ /** Traces of a project still waiting for their stats, optionally only those last written at or before `before`. Null when none. */
11
+ export declare function cloudSettling(q: Queryable, projectId: string, o?: SettlingScope): Promise<number | null>;
11
12
  //# sourceMappingURL=scale-exec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scale-exec.d.ts","sourceRoot":"","sources":["../src/scale-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,SAAS,EAAe,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C,yDAAyD;AACzD,eAAO,MAAM,QAAQ,MAAO,SAAS,KAAG,SAA2F,CAAC;AAEpI,gHAAgH;AAChH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/G;AAED,6HAA6H;AAC7H,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAQ1G;AAED,2GAA2G;AAC3G,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMzG"}
1
+ {"version":3,"file":"scale-exec.d.ts","sourceRoot":"","sources":["../src/scale-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAc,KAAK,SAAS,EAAe,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,yDAAyD;AACzD,eAAO,MAAM,QAAQ,MAAO,SAAS,KAAG,SAA2F,CAAC;AAEpI,gHAAgH;AAChH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG/G;AAED,6HAA6H;AAC7H,wBAAgB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAQ1G;AAED,mIAAmI;AACnI,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMlH"}
@@ -1,11 +1,12 @@
1
1
  import { PG_DIALECT, sqlExecutor } from "@wizeworks/lens-core";
2
2
  import { getTrace } from "./repo/trace-read.js";
3
+ import { KEEP_DAYS } from "./repo/settings.js";
3
4
  const DAY_MS = 86_400_000;
4
5
  /** Reads for the SQL executor, on the cloud database. */
5
6
  export const pgRunner = (q) => ({ all: (sql, params) => q.query(sql, [...params]) });
6
7
  /** How long a project's organization keeps data, in ms; `fallbackDays` when the project has no organization. */
7
8
  export async function projectRetentionMs(q, projectId, fallbackDays) {
8
- const [row] = await q.query("SELECT o.retention_days AS d FROM projects p JOIN orgs o ON o.id = p.org_id WHERE p.id = $1", [projectId]);
9
+ const [row] = await q.query(`SELECT ${KEEP_DAYS} AS d FROM projects p JOIN orgs o ON o.id = p.org_id WHERE p.id = $1`, [projectId]);
9
10
  return (row?.d ?? fallbackDays) * DAY_MS;
10
11
  }
11
12
  /** Page needs from a project's stats tables, optionally one environment. The 1 h tier keeps the organization's retention. */
@@ -18,9 +19,9 @@ export function cloudExecutor(q, projectId, retentionMs, env) {
18
19
  loadTrace: async (id) => (await getTrace(q, projectId, id)) ?? null,
19
20
  });
20
21
  }
21
- /** Traces of a project still waiting for their stats, for `pageContext(..., settling)`. Null when none. */
22
- export async function cloudSettling(q, projectId, env) {
23
- const [row] = await q.query("SELECT count(*)::int AS n FROM traces WHERE project_id = $1 AND settled_ms < updated_ms AND ($2::text = '' OR env = $2::text)", [projectId, env ?? ""]);
22
+ /** Traces of a project still waiting for their stats, optionally only those last written at or before `before`. Null when none. */
23
+ export async function cloudSettling(q, projectId, o = {}) {
24
+ const [row] = await q.query("SELECT count(*)::int AS n FROM traces WHERE project_id = $1 AND settled_ms < updated_ms AND ($2::text = '' OR env = $2::text) AND ($3::float8 IS NULL OR updated_ms <= $3::float8)", [projectId, o.env ?? "", o.before ?? null]);
24
25
  return row?.n || null;
25
26
  }
26
27
  //# sourceMappingURL=scale-exec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scale-exec.js","sourceRoot":"","sources":["../src/scale-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAkB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,yDAAyD;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAA0B,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpI,gHAAgH;AAChH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,CAAY,EAAE,SAAiB,EAAE,YAAoB;IAC5F,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAgB,6FAA6F,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACvJ,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,MAAM,CAAC;AAC3C,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,SAAiB,EAAE,WAAmB,EAAE,GAAY;IAC9F,OAAO,WAAW,CAAC;QACjB,CAAC,EAAE,UAAU;QACb,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChB,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE;QAClC,WAAW;QACX,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI;KACpE,CAAC,CAAC;AACL,CAAC;AAED,2GAA2G;AAC3G,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAY,EAAE,SAAiB,EAAE,GAAY;IAC/E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CACzB,+HAA+H,EAC/H,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CACvB,CAAC;IACF,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"scale-exec.js","sourceRoot":"","sources":["../src/scale-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAkB,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9F,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,yDAAyD;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAa,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAA0B,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpI,gHAAgH;AAChH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,CAAY,EAAE,SAAiB,EAAE,YAAoB;IAC5F,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAgB,UAAU,SAAS,sEAAsE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACnJ,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,MAAM,CAAC;AAC3C,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,aAAa,CAAC,CAAY,EAAE,SAAiB,EAAE,WAAmB,EAAE,GAAY;IAC9F,OAAO,WAAW,CAAC;QACjB,CAAC,EAAE,UAAU;QACb,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChB,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE;QAClC,WAAW;QACX,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI;KACpE,CAAC,CAAC;AACL,CAAC;AAED,mIAAmI;AACnI,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAY,EAAE,SAAiB,EAAE,CAAC,GAAkB,EAAE;IACxF,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CACzB,oLAAoL,EACpL,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAC3C,CAAC;IACF,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;AACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAIjG,OAAO,KAAK,EAAE,QAAQ,EAAO,MAAM,UAAU,CAAC;AAK9C,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,aAAa,CAAC;AAgB/D,eAAO,MAAM,aAAa,EAAE,MAAoE,CAAC;AAGjG,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,sEAAsE;IACtE,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAiDD,sGAAsG;AACtG,wBAAsB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAiD5E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAKjG,OAAO,KAAK,EAAE,QAAQ,EAAO,MAAM,UAAU,CAAC;AAS9C,OAAO,EAAoB,KAAK,YAAY,EAAiB,MAAM,aAAa,CAAC;AAoBjF,eAAO,MAAM,aAAa,EAAE,MAAoE,CAAC;AAGjG,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,sEAAsE;IACtE,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAyED,sGAAsG;AACtG,wBAAsB,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,CAiD5E"}
package/dist/server.js CHANGED
@@ -1,10 +1,15 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { createServer } from "node:http";
3
+ import { SOURCEMAPS_PATH } from "@wizeworks/lens-core";
3
4
  import { otlpSignalOf } from "@wizeworks/lens-hub/kit";
4
5
  import { resolveUiDir, serveUi } from "@wizeworks/lens-node/kit";
5
6
  import { authHandler } from "./auth/bridge.js";
6
7
  import { AUTH_BASE_PATH } from "./auth/options.js";
7
8
  import { wireAuth } from "./auth/wire.js";
9
+ import { createBilling } from "./billing/service.js";
10
+ import { STRIPE_WEBHOOK_PATH, stripeWebhook } from "./billing/webhook.js";
11
+ import { Changes } from "./changes.js";
12
+ import { SettingsCache } from "./repo/settings.js";
8
13
  import { resolveConfig } from "./config.js";
9
14
  import { openDb } from "./db/db.js";
10
15
  import { migrate } from "./db/migrate.js";
@@ -16,9 +21,13 @@ import { createMailer } from "./mail/mailer.js";
16
21
  import { stopRoute } from "./mail/stop-route.js";
17
22
  import { UNSUBSCRIBE_PATH } from "./mail/unsubscribe.js";
18
23
  import { RESEND_WEBHOOK_PATH, resendWebhook } from "./mail/webhook.js";
19
- import { checkFactsVersion } from "./settle.js";
24
+ import { openTelemetry } from "./telemetry/index.js";
20
25
  import { allRoutes } from "./routes/index.js";
21
26
  import { ingestBatch, ingestOtlp } from "./routes/ingest.js";
27
+ import { listProjectMaps, uploadSourceMap } from "./routes/sourcemaps.js";
28
+ import { cloudMapLoaders } from "./repo/sourcemaps.js";
29
+ import { serveOAuthMetadata } from "./routes/oauth-meta.js";
30
+ import { forgetModels } from "./routes/models.js";
22
31
  const require = createRequire(import.meta.url);
23
32
  export const CLOUD_VERSION = require("../package.json").version;
24
33
  const BASE = "/_wizelens";
@@ -28,6 +37,11 @@ async function routeBase(p, ctx, sub) {
28
37
  const { req, res } = ctx;
29
38
  if (sub === "api/ingest" && req.method === "POST")
30
39
  return ingestBatch(ctx, p.ingest);
40
+ // Build tools upload source maps with the project's ingest key.
41
+ if (sub === SOURCEMAPS_PATH && req.method === "POST")
42
+ return uploadSourceMap(ctx, p.ingest);
43
+ if (sub === SOURCEMAPS_PATH && req.method === "GET")
44
+ return listProjectMaps(ctx, p.ingest);
31
45
  // Resend signs its webhook, so it needs no dashboard header.
32
46
  if (sub === RESEND_WEBHOOK_PATH && req.method === "POST")
33
47
  return resendWebhook(ctx);
@@ -53,8 +67,12 @@ async function route(p, req, res) {
53
67
  return void res.writeHead(200, { "Content-Type": "text/plain" }).end("ok");
54
68
  if (path === "/" || path === BASE)
55
69
  return void res.writeHead(302, { Location: `${BASE}/${url.search}` }).end();
70
+ if (path === STRIPE_WEBHOOK_PATH && req.method === "POST")
71
+ return stripeWebhook(p.app, req, res);
56
72
  if (path.startsWith(`${AUTH_BASE_PATH}/`))
57
73
  return p.auth()(req, res);
74
+ if (path.startsWith("/.well-known/") && (await serveOAuthMetadata(p.app, req, res, path)))
75
+ return;
58
76
  const signal = otlpSignalOf(path);
59
77
  if (signal && req.method === "POST")
60
78
  return ingestOtlp(ctx, signal, p.ingest);
@@ -66,27 +84,42 @@ function onError(err, res) {
66
84
  if (res.headersSent)
67
85
  return void res.end();
68
86
  if (err instanceof HttpError)
69
- return sendJson(res, err.status, { error: err.message });
87
+ return sendJson(res, err.status, { ...err.extra, error: err.message });
70
88
  console.error("[wizelens-cloud]", err);
71
89
  sendJson(res, 500, { error: "Something went wrong on the server." });
72
90
  }
73
- /** Open the database, bring its schema up to date, and build the server. Call `listen()` to start. */
74
- export async function createCloud(options = {}) {
75
- const config = resolveConfig(options);
91
+ /** The database (migrated), the telemetry store (its stats rebuilt when the facts version changed), and the new-data signal. */
92
+ async function openStores(config) {
76
93
  const db = await openDb(config.database);
77
94
  await migrate(db);
78
- await checkFactsVersion(db);
95
+ const settings = new SettingsCache(db);
96
+ const telemetry = await openTelemetry(config, db, settings);
97
+ await telemetry.checkFactsVersion();
98
+ const changes = new Changes();
99
+ changes.onAny(forgetModels);
100
+ return { db, telemetry, changes, maps: cloudMapLoaders(db), settings };
101
+ }
102
+ /** Mail, plans and usage (Stripe with billing on), and the auth wiring. */
103
+ async function openServices(config, db) {
79
104
  const mailer = await createMailer(config, db);
80
- const wiring = await wireAuth(db, config, mailer);
81
- let auth;
82
- let handler;
105
+ const billing = await createBilling(config, db);
106
+ return { mailer, billing, wiring: await wireAuth(db, config, mailer, billing.stripe) };
107
+ }
108
+ /** Open the database, bring its schema up to date, and build the server. Call `listen()` to start. */
109
+ export async function createCloud(options = {}) {
110
+ const config = resolveConfig(options);
111
+ const stores = await openStores(config);
112
+ const { db, telemetry } = stores;
113
+ const { mailer, billing, wiring } = await openServices(config, db);
114
+ let [auth, handler] = [undefined, undefined];
83
115
  let listenUrl = config.publicUrl ?? `http://localhost:${config.port}`;
84
116
  const app = {
85
- db,
117
+ ...stores,
86
118
  config,
87
119
  version: CLOUD_VERSION,
88
120
  startedMs: config.now(),
89
121
  mailer,
122
+ billing,
90
123
  secrets: wiring.secrets,
91
124
  get auth() {
92
125
  if (!auth)
@@ -118,7 +151,9 @@ export async function createCloud(options = {}) {
118
151
  stopJobs();
119
152
  server.closeAllConnections?.();
120
153
  await new Promise((resolve) => server.close(() => resolve()));
154
+ await billing.usage.flush().catch((err) => console.error("[wizelens-cloud] usage flush failed:", err));
121
155
  await mailer.close();
156
+ await telemetry.close();
122
157
  await db.close();
123
158
  },
124
159
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAEjG,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAuC,aAAa,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAY,OAAO,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AACjG,MAAM,IAAI,GAAG,YAAY,CAAC;AAmB1B,0GAA0G;AAC1G,MAAM,iBAAiB,GAAG,CAAC,GAAoB,EAAE,GAAW,EAAE,EAAE,CAC9D,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,YAAY,CAAC;AAEhI,KAAK,UAAU,SAAS,CAAC,CAAQ,EAAE,GAAQ,EAAE,GAAW;IACtD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACzB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrF,gEAAgE;IAChE,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5F,IAAI,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3F,6DAA6D;IAC7D,IAAI,GAAG,KAAK,mBAAmB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IACpF,qGAAqG;IACrG,IAAI,GAAG,KAAK,gBAAgB,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;IACvG,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,WAAW;QAAE,MAAM,IAAI,SAAS,CAAC,GAAG,EAAE,uCAAuC,CAAC,CAAC;IACvJ,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAClH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACxF,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,CAAQ,EAAE,GAAoB,EAAE,GAAmB;IACtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC1B,MAAM,GAAG,GAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3D,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/G,IAAI,IAAI,KAAK,mBAAmB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO;IAClG,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,OAAO,CAAC,GAAY,EAAE,GAAmB;IAChD,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;IAC3C,IAAI,GAAG,YAAY,SAAS;QAAE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACrG,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,gIAAgI;AAChI,KAAK,UAAU,UAAU,CAAC,MAAmB;IAC3C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AACzE,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,YAAY,CAAC,MAAmB,EAAE,EAAsC;IACrF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAiB,EAAE;IAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAuE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjH,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC;IACtE,MAAM,GAAG,GAAa;QACpB,GAAG,MAAM;QACT,MAAM;QACN,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE;QACvB,MAAM;QACN,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,IAAI;YACN,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS;KAC7C,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjI,IAAI,MAAM,CAAC,SAAS;QAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAQ,EAAE,CAAC;IAChL,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAClH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;IACzD,OAAO;QACL,MAAM;QACN,GAAG;QACH,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,GAAG,EAAE,CACX,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,SAAS;oBAAE,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACJ,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/settle.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { type Statement, type TraceState } from "@wizeworks/lens-core";
1
+ import { type FactOptions, type Statement, type TraceState } from "@wizeworks/lens-core";
2
2
  import type { Db, Queryable } from "./db/db.js";
3
+ import type { SettleOptions } from "./telemetry/store.js";
3
4
  /** Fact, rollup, and hist tables: everything settling builds. */
4
5
  export declare const STATS_TABLES: string[];
5
6
  export interface TraceStateRow {
@@ -9,18 +10,21 @@ export interface TraceStateRow {
9
10
  updated_ms?: number;
10
11
  contrib: string | null;
11
12
  retention_days: number | null;
13
+ log_retention_days?: number | null;
14
+ /** The project's settings JSON, when the settle reads it. */
15
+ settings?: string | null;
12
16
  }
13
17
  /** Run statements one by one, in the caller's transaction. */
14
18
  export declare function runStatements(q: Queryable, statements: readonly Statement[]): Promise<void>;
15
- export declare const stateOf: (r: TraceStateRow, defaultDays: number) => TraceState;
19
+ export declare const stateOf: (r: TraceStateRow, defaultDays: number, defaultFacts?: Partial<FactOptions>) => TraceState;
16
20
  /** Settle dirty traces in batches until none are left or the budget is spent. Returns how many settled. */
17
- export declare function settleCloud(db: Db, now: number, o?: {
18
- defaultRetentionDays?: number;
19
- batch?: number;
20
- budgetMs?: number;
21
- }): Promise<number>;
22
- /** Age out rollup buckets: 10 s and 5 min by their keep time, 1 h by each organization's retention. */
21
+ export declare function settleCloud(db: Db, now: number, o?: SettleOptions): Promise<number>;
22
+ /** Age out rollup buckets: 10 s and 5 min by their keep time, 1 h by each organization's retention (log kinds by the log retention, in pruneLogsByRetention). */
23
23
  export declare function pruneRollups(q: Queryable, now: number, empties?: boolean): Promise<void>;
24
- /** On startup: when the facts version changed, clear the stats so settling rebuilds them. Returns true when it did. */
24
+ /** True when the stats were built by another facts version (or never). */
25
+ export declare function factsStale(db: Db): Promise<boolean>;
26
+ /** Clear the stats and mark every trace unsettled, in batches that commit; a restart starts it again and the version is written last. */
27
+ export declare function resetFacts(db: Db): Promise<void>;
28
+ /** When the facts version changed, clear the stats so settling rebuilds them. Returns true when it did. */
25
29
  export declare function checkFactsVersion(db: Db): Promise<boolean>;
26
30
  //# sourceMappingURL=settle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settle.d.ts","sourceRoot":"","sources":["../src/settle.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,SAAS,EAAuB,KAAK,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAClK,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAUhD,iEAAiE;AACjE,eAAO,MAAM,YAAY,UAAwF,CAAC;AAElH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,8DAA8D;AAC9D,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAED,eAAO,MAAM,OAAO,MAAO,aAAa,eAAe,MAAM,KAAG,UAO9D,CAAC;AA6BH,2GAA2G;AAC3G,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CASpJ;AAED,uGAAuG;AACvG,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5F;AAED,uHAAuH;AACvH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAShE"}
1
+ {"version":3,"file":"settle.d.ts","sourceRoot":"","sources":["../src/settle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsG,KAAK,SAAS,EAAuB,KAAK,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAC9N,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,iEAAiE;AACjE,eAAO,MAAM,YAAY,UAAwF,CAAC;AAElH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,8DAA8D;AAC9D,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAED,eAAO,MAAM,OAAO,MAAO,aAAa,eAAe,MAAM,iBAAgB,OAAO,CAAC,WAAW,CAAC,KAAQ,UASvG,CAAC;AA6BH,2GAA2G;AAC3G,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAU7F;AAED,iKAAiK;AACjK,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5F;AAED,0EAA0E;AAC1E,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzD;AAED,yIAAyI;AACzI,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAetD;AAED,2GAA2G;AAC3G,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAIhE"}
package/dist/settle.js CHANGED
@@ -1,5 +1,6 @@
1
- import { FACT_TABLES, FACTS_VERSION, PG_DIALECT, settleStatements, tierPruneStatements } from "@wizeworks/lens-core";
1
+ import { FACT_TABLES, FACTS_VERSION, factOptionsOf, LOG_KINDS_SQL, PG_DIALECT, settingsOf, settleStatements, tierPruneStatements } from "@wizeworks/lens-core";
2
2
  import { loadTraces } from "./repo/trace-read.js";
3
+ import { KEEP_DAYS } from "./repo/settings.js";
3
4
  // Settling: traces quiet for a while get their facts and rollups rebuilt from the stored spans and logs (docs/CONTRACT.md).
4
5
  const BATCH = 500;
5
6
  const BUDGET_MS = 2_000;
@@ -7,6 +8,7 @@ const QUIET_MS = 5_000;
7
8
  const BUSY_MS = 30_000;
8
9
  const LOCK = 4711;
9
10
  const DAY_MS = 86_400_000;
11
+ const RESET_BATCH = 5_000;
10
12
  /** Fact, rollup, and hist tables: everything settling builds. */
11
13
  export const STATS_TABLES = [...FACT_TABLES, ...["10s", "5m", "1h"].flatMap((t) => [`rollup_${t}`, `hist_${t}`])];
12
14
  /** Run statements one by one, in the caller's transaction. */
@@ -14,13 +16,15 @@ export async function runStatements(q, statements) {
14
16
  for (const s of statements)
15
17
  await q.query(s.sql, s.params);
16
18
  }
17
- export const stateOf = (r, defaultDays) => ({
19
+ export const stateOf = (r, defaultDays, defaultFacts = {}) => ({
18
20
  traceId: r.trace_id,
19
21
  project: r.project_id,
20
22
  env: r.env,
21
23
  updatedMs: r.updated_ms ?? 0,
22
24
  contrib: r.contrib,
23
25
  retentionMs: (r.retention_days ?? defaultDays) * DAY_MS,
26
+ logRetentionMs: (r.log_retention_days ?? r.retention_days ?? defaultDays) * DAY_MS,
27
+ facts: { ...defaultFacts, ...factOptionsOf(settingsOf(r.settings)) },
24
28
  });
25
29
  async function loadAll(q, rows) {
26
30
  const byProject = new Map();
@@ -33,20 +37,20 @@ async function loadAll(q, rows) {
33
37
  return out;
34
38
  }
35
39
  /** Settle one batch in one transaction. -1 when another instance holds the lock. */
36
- async function settleBatch(db, now, batch, defaultDays) {
40
+ async function settleBatch(db, now, batch, defaultDays, defaultFacts) {
37
41
  return db.tx(async (q) => {
38
42
  const [lock] = await q.query("SELECT pg_try_advisory_xact_lock($1) AS ok", [LOCK]);
39
43
  if (!lock?.ok)
40
- return -1;
41
- const rows = await q.query(`SELECT t.project_id, t.trace_id, t.env, t.updated_ms, t.contrib, o.retention_days FROM traces t
44
+ return { n: -1, projects: [] };
45
+ const rows = await q.query(`SELECT t.project_id, t.trace_id, t.env, t.updated_ms, t.contrib, ${KEEP_DAYS} AS retention_days, p.log_retention_days, p.settings FROM traces t
42
46
  LEFT JOIN projects p ON p.id = t.project_id LEFT JOIN orgs o ON o.id = p.org_id
43
47
  WHERE t.settled_ms < t.updated_ms AND (t.updated_ms <= $1 OR t.settled_ms <= $2) ORDER BY t.start_ms DESC LIMIT $3`, [now - QUIET_MS, now - BUSY_MS, batch]);
44
48
  if (!rows.length)
45
- return 0;
49
+ return { n: 0, projects: [] };
46
50
  const traces = await loadAll(q, rows);
47
- const work = rows.map((r) => ({ state: stateOf(r, defaultDays), trace: traces.get(`${r.project_id} ${r.trace_id}`) }));
51
+ const work = rows.map((r) => ({ state: stateOf(r, defaultDays, defaultFacts), trace: traces.get(`${r.project_id} ${r.trace_id}`) }));
48
52
  await runStatements(q, settleStatements(PG_DIALECT, work, now, true));
49
- return rows.length;
53
+ return { n: rows.length, projects: [...new Set(rows.map((r) => r.project_id))] };
50
54
  });
51
55
  }
52
56
  /** Settle dirty traces in batches until none are left or the budget is spent. Returns how many settled. */
@@ -55,31 +59,47 @@ export async function settleCloud(db, now, o = {}) {
55
59
  const batch = o.batch ?? BATCH;
56
60
  let total = 0;
57
61
  for (;;) {
58
- const n = await settleBatch(db, now, batch, o.defaultRetentionDays ?? 30);
62
+ const { n, projects } = await settleBatch(db, now, batch, o.defaultRetentionDays ?? 30, o.defaultFacts);
59
63
  if (n > 0)
60
64
  total += n;
65
+ for (const p of projects)
66
+ o.onSettled?.(p);
61
67
  if (n < batch || Date.now() - start >= (o.budgetMs ?? BUDGET_MS))
62
68
  return total;
63
69
  }
64
70
  }
65
- /** Age out rollup buckets: 10 s and 5 min by their keep time, 1 h by each organization's retention. */
71
+ /** Age out rollup buckets: 10 s and 5 min by their keep time, 1 h by each organization's retention (log kinds by the log retention, in pruneLogsByRetention). */
66
72
  export async function pruneRollups(q, now, empties = false) {
67
73
  await runStatements(q, tierPruneStatements(now, empties));
68
74
  for (const t of ["rollup_1h", "hist_1h"]) {
69
- await q.query(`DELETE FROM ${t} r USING projects p, orgs o WHERE p.id = r.project_id AND o.id = p.org_id AND r.bucket_ms <= $1 - o.retention_days * 86400000.0`, [now - 3_600_000]);
75
+ await q.query(`DELETE FROM ${t} r USING projects p, orgs o WHERE p.id = r.project_id AND o.id = p.org_id AND r.bucket_ms <= $1 - ${KEEP_DAYS} * 86400000.0 AND r.kind NOT IN (${LOG_KINDS_SQL})`, [now - 3_600_000]);
70
76
  }
71
77
  }
72
- /** On startup: when the facts version changed, clear the stats so settling rebuilds them. Returns true when it did. */
73
- export async function checkFactsVersion(db) {
78
+ /** True when the stats were built by another facts version (or never). */
79
+ export async function factsStale(db) {
74
80
  const [row] = await db.query("SELECT value FROM scale_meta WHERE key = 'facts'");
75
- if (row?.value === String(FACTS_VERSION))
81
+ return row?.value !== String(FACTS_VERSION);
82
+ }
83
+ /** Clear the stats and mark every trace unsettled, in batches that commit; a restart starts it again and the version is written last. */
84
+ export async function resetFacts(db) {
85
+ await db.query(`TRUNCATE ${STATS_TABLES.join(", ")}`);
86
+ const mark = "UPDATE traces SET settled_ms = 0, contrib = NULL WHERE (project_id, trace_id) > ($1, $2)";
87
+ let after = ["", ""];
88
+ for (;;) {
89
+ const [end] = await db.query(`SELECT project_id, trace_id FROM traces WHERE (project_id, trace_id) > ($1, $2) ORDER BY project_id, trace_id OFFSET ${RESET_BATCH - 1} LIMIT 1`, after);
90
+ if (!end)
91
+ break;
92
+ await db.query(`${mark} AND (project_id, trace_id) <= ($3, $4)`, [...after, end.project_id, end.trace_id]);
93
+ after = [end.project_id, end.trace_id];
94
+ }
95
+ await db.query(mark, after);
96
+ await db.query("INSERT INTO scale_meta (key, value) VALUES ('facts', $1) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value", [String(FACTS_VERSION)]);
97
+ }
98
+ /** When the facts version changed, clear the stats so settling rebuilds them. Returns true when it did. */
99
+ export async function checkFactsVersion(db) {
100
+ if (!(await factsStale(db)))
76
101
  return false;
77
- await db.tx(async (q) => {
78
- for (const t of STATS_TABLES)
79
- await q.query(`DELETE FROM ${t}`);
80
- await q.query("UPDATE traces SET settled_ms = 0, contrib = NULL");
81
- await q.query("INSERT INTO scale_meta (key, value) VALUES ('facts', $1) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value", [String(FACTS_VERSION)]);
82
- });
102
+ await resetFacts(db);
83
103
  return true;
84
104
  }
85
105
  //# sourceMappingURL=settle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settle.js","sourceRoot":"","sources":["../src/settle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settle.js","sourceRoot":"","sources":["../src/settle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { TelemetryStore } from "./store.js";
2
+ interface Memo<T> {
3
+ get(key: string): Promise<T>;
4
+ drop(key: string): void;
5
+ }
6
+ /** One call per key at a time, and its answer kept for `ttlMs`; a failed call is not kept. */
7
+ export declare function memo<T>(fn: (key: string) => Promise<T>, now: () => number, ttlMs?: number): Memo<T>;
8
+ /** The store with project counts and environments shared between callers for a minute (new data shows within it); clearing a project drops them. */
9
+ export declare function withCachedCounts(store: TelemetryStore, now: () => number): TelemetryStore;
10
+ export {};
11
+ //# sourceMappingURL=cached.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached.d.ts","sourceRoot":"","sources":["../../src/telemetry/cached.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,UAAU,IAAI,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,8FAA8F;AAC9F,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,MAAM,EAAE,KAAK,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAanG;AAED,oJAAoJ;AACpJ,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,MAAM,GAAG,cAAc,CASzF"}
@@ -0,0 +1,30 @@
1
+ // Every page asks for a project's counts and environments; each answer scans the project's rows, so it is shared for a minute.
2
+ const TTL_MS = 60_000;
3
+ /** One call per key at a time, and its answer kept for `ttlMs`; a failed call is not kept. */
4
+ export function memo(fn, now, ttlMs = TTL_MS) {
5
+ const entries = new Map();
6
+ return {
7
+ get(key) {
8
+ const hit = entries.get(key);
9
+ if (hit && now() - hit.at < ttlMs)
10
+ return hit.value;
11
+ const value = fn(key);
12
+ entries.set(key, { at: now(), value });
13
+ value.catch(() => entries.get(key)?.value === value && entries.delete(key));
14
+ return value;
15
+ },
16
+ drop: (key) => void entries.delete(key),
17
+ };
18
+ }
19
+ /** The store with project counts and environments shared between callers for a minute (new data shows within it); clearing a project drops them. */
20
+ export function withCachedCounts(store, now) {
21
+ const counts = memo((id) => store.counts(id), now);
22
+ const envs = memo((id) => store.traceEnvs(id), now);
23
+ return {
24
+ ...store,
25
+ counts: (id) => counts.get(id),
26
+ traceEnvs: (id) => envs.get(id),
27
+ clearProject: (id) => (counts.drop(id), envs.drop(id), store.clearProject(id)),
28
+ };
29
+ }
30
+ //# sourceMappingURL=cached.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached.js","sourceRoot":"","sources":["../../src/telemetry/cached.ts"],"names":[],"mappings":"AAEA,+HAA+H;AAC/H,MAAM,MAAM,GAAG,MAAM,CAAC;AAOtB,8FAA8F;AAC9F,MAAM,UAAU,IAAI,CAAI,EAA+B,EAAE,GAAiB,EAAE,KAAK,GAAG,MAAM;IACxF,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6C,CAAC;IACrE,OAAO;QACL,GAAG,CAAC,GAAG;YACL,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK;gBAAE,OAAO,GAAG,CAAC,KAAK,CAAC;YACpD,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,oJAAoJ;AACpJ,MAAM,UAAU,gBAAgB,CAAC,KAAqB,EAAE,GAAiB;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO;QACL,GAAG,KAAK;QACR,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { RetentionOf } from "../store.js";
2
+ import type { ChClient } from "./http.js";
3
+ import type { SettleQueue } from "./queue.js";
4
+ import { type Rebuild } from "./rebuild.js";
5
+ /** When the facts version changed: empty the stats and settle every trace again, a page at a time. True when it did. */
6
+ export declare function checkFactsVersionCh(ch: ChClient, rebuild: Rebuild): Promise<boolean>;
7
+ /** Delete every row of a project, in every table. */
8
+ export declare function clearProjectCh(ch: ChClient, queue: SettleQueue, projectId: string): Promise<void>;
9
+ /** Retention runs out by TTL. Here: drop projects deleted in Postgres, and follow retention changes (traces and logs). */
10
+ export declare function syncProjects(ch: ChClient, queue: SettleQueue, retentionOf: {
11
+ days: RetentionOf;
12
+ logDays: RetentionOf;
13
+ }, now: number): Promise<void>;
14
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/telemetry/ch/admin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAkBxD,wHAAwH;AACxH,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1F;AAED,qDAAqD;AACrD,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvG;AA8BD,0HAA0H;AAC1H,wBAAsB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezJ"}