@wizeworks/lens-cloud 0.3.0-alpha.3 → 0.3.0-alpha.5

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 (514) hide show
  1. package/README.md +3 -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 +59 -26
  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 +9 -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 +1 -1
  33. package/dist/auth/join-scope.d.ts.map +1 -1
  34. package/dist/auth/join-scope.js +8 -4
  35. package/dist/auth/join-scope.js.map +1 -1
  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/cli-args.d.ts +1 -1
  142. package/dist/cli-args.d.ts.map +1 -1
  143. package/dist/cli-args.js +33 -2
  144. package/dist/cli-args.js.map +1 -1
  145. package/dist/cli.js +6 -0
  146. package/dist/cli.js.map +1 -1
  147. package/dist/config.d.ts +15 -3
  148. package/dist/config.d.ts.map +1 -1
  149. package/dist/config.js +19 -1
  150. package/dist/config.js.map +1 -1
  151. package/dist/db/schema-alerts.d.ts +2 -0
  152. package/dist/db/schema-alerts.d.ts.map +1 -0
  153. package/dist/db/schema-alerts.js +15 -0
  154. package/dist/db/schema-alerts.js.map +1 -0
  155. package/dist/db/schema-billing.d.ts +2 -0
  156. package/dist/db/schema-billing.d.ts.map +1 -0
  157. package/dist/db/schema-billing.js +38 -0
  158. package/dist/db/schema-billing.js.map +1 -0
  159. package/dist/db/schema-issues.d.ts +2 -0
  160. package/dist/db/schema-issues.d.ts.map +1 -0
  161. package/dist/db/schema-issues.js +9 -0
  162. package/dist/db/schema-issues.js.map +1 -0
  163. package/dist/db/schema-logs.d.ts +2 -0
  164. package/dist/db/schema-logs.d.ts.map +1 -0
  165. package/dist/db/schema-logs.js +13 -0
  166. package/dist/db/schema-logs.js.map +1 -0
  167. package/dist/db/schema-oauth.d.ts +2 -0
  168. package/dist/db/schema-oauth.d.ts.map +1 -0
  169. package/dist/db/schema-oauth.js +69 -0
  170. package/dist/db/schema-oauth.js.map +1 -0
  171. package/dist/db/schema-saved-move.d.ts +2 -0
  172. package/dist/db/schema-saved-move.d.ts.map +1 -0
  173. package/dist/db/schema-saved-move.js +13 -0
  174. package/dist/db/schema-saved-move.js.map +1 -0
  175. package/dist/db/schema-saved.d.ts +2 -0
  176. package/dist/db/schema-saved.d.ts.map +1 -0
  177. package/dist/db/schema-saved.js +13 -0
  178. package/dist/db/schema-saved.js.map +1 -0
  179. package/dist/db/schema-scim.d.ts +2 -0
  180. package/dist/db/schema-scim.d.ts.map +1 -0
  181. package/dist/db/schema-scim.js +28 -0
  182. package/dist/db/schema-scim.js.map +1 -0
  183. package/dist/db/schema-slos.d.ts +2 -0
  184. package/dist/db/schema-slos.d.ts.map +1 -0
  185. package/dist/db/schema-slos.js +12 -0
  186. package/dist/db/schema-slos.js.map +1 -0
  187. package/dist/db/schema-sourcemaps.d.ts +2 -0
  188. package/dist/db/schema-sourcemaps.d.ts.map +1 -0
  189. package/dist/db/schema-sourcemaps.js +9 -0
  190. package/dist/db/schema-sourcemaps.js.map +1 -0
  191. package/dist/db/schema-tags.d.ts +2 -0
  192. package/dist/db/schema-tags.d.ts.map +1 -0
  193. package/dist/db/schema-tags.js +12 -0
  194. package/dist/db/schema-tags.js.map +1 -0
  195. package/dist/db/schema-team.d.ts +2 -0
  196. package/dist/db/schema-team.d.ts.map +1 -0
  197. package/dist/db/schema-team.js +15 -0
  198. package/dist/db/schema-team.js.map +1 -0
  199. package/dist/db/schema-uptime.d.ts +2 -0
  200. package/dist/db/schema-uptime.d.ts.map +1 -0
  201. package/dist/db/schema-uptime.js +22 -0
  202. package/dist/db/schema-uptime.js.map +1 -0
  203. package/dist/db/schema.d.ts.map +1 -1
  204. package/dist/db/schema.js +30 -0
  205. package/dist/db/schema.js.map +1 -1
  206. package/dist/http/http.d.ts +5 -1
  207. package/dist/http/http.d.ts.map +1 -1
  208. package/dist/http/http.js +5 -1
  209. package/dist/http/http.js.map +1 -1
  210. package/dist/jobs.d.ts +1 -1
  211. package/dist/jobs.d.ts.map +1 -1
  212. package/dist/jobs.js +15 -2
  213. package/dist/jobs.js.map +1 -1
  214. package/dist/mail/emails-billing.d.ts +17 -0
  215. package/dist/mail/emails-billing.d.ts.map +1 -0
  216. package/dist/mail/emails-billing.js +36 -0
  217. package/dist/mail/emails-billing.js.map +1 -0
  218. package/dist/mail/emails.d.ts +1 -1
  219. package/dist/mail/emails.d.ts.map +1 -1
  220. package/dist/mail/emails.js +7 -4
  221. package/dist/mail/emails.js.map +1 -1
  222. package/dist/mail/mailer.d.ts +1 -1
  223. package/dist/mail/mailer.d.ts.map +1 -1
  224. package/dist/mail/samples.d.ts.map +1 -1
  225. package/dist/mail/samples.js +17 -0
  226. package/dist/mail/samples.js.map +1 -1
  227. package/dist/mail/templates.d.ts +1 -1
  228. package/dist/mail/templates.d.ts.map +1 -1
  229. package/dist/notify/digest-data.d.ts.map +1 -1
  230. package/dist/notify/digest-data.js +2 -2
  231. package/dist/notify/digest-data.js.map +1 -1
  232. package/dist/notify/digest.d.ts.map +1 -1
  233. package/dist/notify/digest.js +4 -1
  234. package/dist/notify/digest.js.map +1 -1
  235. package/dist/notify/team-describe.d.ts.map +1 -1
  236. package/dist/notify/team-describe.js +14 -0
  237. package/dist/notify/team-describe.js.map +1 -1
  238. package/dist/repo/alert-events.d.ts +38 -0
  239. package/dist/repo/alert-events.d.ts.map +1 -0
  240. package/dist/repo/alert-events.js +29 -0
  241. package/dist/repo/alert-events.js.map +1 -0
  242. package/dist/repo/alerts.d.ts +14 -44
  243. package/dist/repo/alerts.d.ts.map +1 -1
  244. package/dist/repo/alerts.js +35 -13
  245. package/dist/repo/alerts.js.map +1 -1
  246. package/dist/repo/audit.d.ts +19 -1
  247. package/dist/repo/audit.d.ts.map +1 -1
  248. package/dist/repo/audit.js +24 -2
  249. package/dist/repo/audit.js.map +1 -1
  250. package/dist/repo/auth-prune.d.ts +1 -1
  251. package/dist/repo/auth-prune.d.ts.map +1 -1
  252. package/dist/repo/auth-prune.js +13 -1
  253. package/dist/repo/auth-prune.js.map +1 -1
  254. package/dist/repo/billing.d.ts +30 -0
  255. package/dist/repo/billing.d.ts.map +1 -0
  256. package/dist/repo/billing.js +47 -0
  257. package/dist/repo/billing.js.map +1 -0
  258. package/dist/repo/grants.d.ts +30 -0
  259. package/dist/repo/grants.d.ts.map +1 -0
  260. package/dist/repo/grants.js +57 -0
  261. package/dist/repo/grants.js.map +1 -0
  262. package/dist/repo/issues.d.ts +15 -0
  263. package/dist/repo/issues.d.ts.map +1 -0
  264. package/dist/repo/issues.js +31 -0
  265. package/dist/repo/issues.js.map +1 -0
  266. package/dist/repo/keys.d.ts +51 -0
  267. package/dist/repo/keys.d.ts.map +1 -0
  268. package/dist/repo/keys.js +58 -0
  269. package/dist/repo/keys.js.map +1 -0
  270. package/dist/repo/log-retention.d.ts +8 -0
  271. package/dist/repo/log-retention.d.ts.map +1 -0
  272. package/dist/repo/log-retention.js +20 -0
  273. package/dist/repo/log-retention.js.map +1 -0
  274. package/dist/repo/metric-read.d.ts +2 -0
  275. package/dist/repo/metric-read.d.ts.map +1 -1
  276. package/dist/repo/metric-read.js +5 -1
  277. package/dist/repo/metric-read.js.map +1 -1
  278. package/dist/repo/metric-write.d.ts.map +1 -1
  279. package/dist/repo/metric-write.js +3 -2
  280. package/dist/repo/metric-write.js.map +1 -1
  281. package/dist/repo/orgs.d.ts +2 -0
  282. package/dist/repo/orgs.d.ts.map +1 -1
  283. package/dist/repo/orgs.js +5 -1
  284. package/dist/repo/orgs.js.map +1 -1
  285. package/dist/repo/project-roles.d.ts +28 -0
  286. package/dist/repo/project-roles.d.ts.map +1 -0
  287. package/dist/repo/project-roles.js +39 -0
  288. package/dist/repo/project-roles.js.map +1 -0
  289. package/dist/repo/projects.d.ts +3 -22
  290. package/dist/repo/projects.d.ts.map +1 -1
  291. package/dist/repo/projects.js +4 -29
  292. package/dist/repo/projects.js.map +1 -1
  293. package/dist/repo/saved.d.ts +9 -0
  294. package/dist/repo/saved.d.ts.map +1 -0
  295. package/dist/repo/saved.js +29 -0
  296. package/dist/repo/saved.js.map +1 -0
  297. package/dist/repo/scim-tokens.d.ts +20 -0
  298. package/dist/repo/scim-tokens.d.ts.map +1 -0
  299. package/dist/repo/scim-tokens.js +32 -0
  300. package/dist/repo/scim-tokens.js.map +1 -0
  301. package/dist/repo/services.d.ts.map +1 -1
  302. package/dist/repo/services.js +2 -1
  303. package/dist/repo/services.js.map +1 -1
  304. package/dist/repo/settings.d.ts +30 -0
  305. package/dist/repo/settings.d.ts.map +1 -0
  306. package/dist/repo/settings.js +55 -0
  307. package/dist/repo/settings.js.map +1 -0
  308. package/dist/repo/slos.d.ts +10 -0
  309. package/dist/repo/slos.d.ts.map +1 -0
  310. package/dist/repo/slos.js +27 -0
  311. package/dist/repo/slos.js.map +1 -0
  312. package/dist/repo/sourcemaps.d.ts +9 -0
  313. package/dist/repo/sourcemaps.d.ts.map +1 -0
  314. package/dist/repo/sourcemaps.js +34 -0
  315. package/dist/repo/sourcemaps.js.map +1 -0
  316. package/dist/repo/tags.d.ts +11 -0
  317. package/dist/repo/tags.d.ts.map +1 -0
  318. package/dist/repo/tags.js +33 -0
  319. package/dist/repo/tags.js.map +1 -0
  320. package/dist/repo/trace-read.d.ts.map +1 -1
  321. package/dist/repo/trace-read.js +3 -1
  322. package/dist/repo/trace-read.js.map +1 -1
  323. package/dist/repo/trace-write.d.ts +1 -1
  324. package/dist/repo/trace-write.d.ts.map +1 -1
  325. package/dist/repo/trace-write.js +11 -5
  326. package/dist/repo/trace-write.js.map +1 -1
  327. package/dist/repo/uptime.d.ts +21 -0
  328. package/dist/repo/uptime.d.ts.map +1 -0
  329. package/dist/repo/uptime.js +53 -0
  330. package/dist/repo/uptime.js.map +1 -0
  331. package/dist/routes/alerts.d.ts.map +1 -1
  332. package/dist/routes/alerts.js +65 -66
  333. package/dist/routes/alerts.js.map +1 -1
  334. package/dist/routes/apps.d.ts +20 -0
  335. package/dist/routes/apps.d.ts.map +1 -0
  336. package/dist/routes/apps.js +53 -0
  337. package/dist/routes/apps.js.map +1 -0
  338. package/dist/routes/billing.d.ts +4 -0
  339. package/dist/routes/billing.d.ts.map +1 -0
  340. package/dist/routes/billing.js +51 -0
  341. package/dist/routes/billing.js.map +1 -0
  342. package/dist/routes/data.d.ts.map +1 -1
  343. package/dist/routes/data.js +16 -7
  344. package/dist/routes/data.js.map +1 -1
  345. package/dist/routes/index.d.ts.map +1 -1
  346. package/dist/routes/index.js +24 -0
  347. package/dist/routes/index.js.map +1 -1
  348. package/dist/routes/ingest.d.ts +3 -1
  349. package/dist/routes/ingest.d.ts.map +1 -1
  350. package/dist/routes/ingest.js +55 -14
  351. package/dist/routes/ingest.js.map +1 -1
  352. package/dist/routes/issues.d.ts +4 -0
  353. package/dist/routes/issues.d.ts.map +1 -0
  354. package/dist/routes/issues.js +34 -0
  355. package/dist/routes/issues.js.map +1 -0
  356. package/dist/routes/keys.d.ts +4 -0
  357. package/dist/routes/keys.d.ts.map +1 -0
  358. package/dist/routes/keys.js +70 -0
  359. package/dist/routes/keys.js.map +1 -0
  360. package/dist/routes/mcp.d.ts.map +1 -1
  361. package/dist/routes/mcp.js +60 -23
  362. package/dist/routes/mcp.js.map +1 -1
  363. package/dist/routes/me.d.ts.map +1 -1
  364. package/dist/routes/me.js +15 -5
  365. package/dist/routes/me.js.map +1 -1
  366. package/dist/routes/metrics.js +1 -1
  367. package/dist/routes/metrics.js.map +1 -1
  368. package/dist/routes/models.d.ts +7 -1
  369. package/dist/routes/models.d.ts.map +1 -1
  370. package/dist/routes/models.js +55 -19
  371. package/dist/routes/models.js.map +1 -1
  372. package/dist/routes/notify.d.ts.map +1 -1
  373. package/dist/routes/notify.js +3 -1
  374. package/dist/routes/notify.js.map +1 -1
  375. package/dist/routes/oauth-meta.d.ts +7 -0
  376. package/dist/routes/oauth-meta.d.ts.map +1 -0
  377. package/dist/routes/oauth-meta.js +52 -0
  378. package/dist/routes/oauth-meta.js.map +1 -0
  379. package/dist/routes/orgs.d.ts.map +1 -1
  380. package/dist/routes/orgs.js +23 -7
  381. package/dist/routes/orgs.js.map +1 -1
  382. package/dist/routes/projects.d.ts.map +1 -1
  383. package/dist/routes/projects.js +31 -22
  384. package/dist/routes/projects.js.map +1 -1
  385. package/dist/routes/saved.d.ts +4 -0
  386. package/dist/routes/saved.d.ts.map +1 -0
  387. package/dist/routes/saved.js +56 -0
  388. package/dist/routes/saved.js.map +1 -0
  389. package/dist/routes/scim.d.ts +4 -0
  390. package/dist/routes/scim.d.ts.map +1 -0
  391. package/dist/routes/scim.js +37 -0
  392. package/dist/routes/scim.js.map +1 -0
  393. package/dist/routes/search.d.ts.map +1 -1
  394. package/dist/routes/search.js +8 -5
  395. package/dist/routes/search.js.map +1 -1
  396. package/dist/routes/settings.d.ts +4 -0
  397. package/dist/routes/settings.d.ts.map +1 -0
  398. package/dist/routes/settings.js +39 -0
  399. package/dist/routes/settings.js.map +1 -0
  400. package/dist/routes/shares.d.ts +3 -0
  401. package/dist/routes/shares.d.ts.map +1 -1
  402. package/dist/routes/shares.js +28 -15
  403. package/dist/routes/shares.js.map +1 -1
  404. package/dist/routes/slos.d.ts +4 -0
  405. package/dist/routes/slos.d.ts.map +1 -0
  406. package/dist/routes/slos.js +76 -0
  407. package/dist/routes/slos.js.map +1 -0
  408. package/dist/routes/sourcemaps.d.ts +9 -0
  409. package/dist/routes/sourcemaps.d.ts.map +1 -0
  410. package/dist/routes/sourcemaps.js +54 -0
  411. package/dist/routes/sourcemaps.js.map +1 -0
  412. package/dist/routes/status.d.ts +4 -0
  413. package/dist/routes/status.d.ts.map +1 -0
  414. package/dist/routes/status.js +60 -0
  415. package/dist/routes/status.js.map +1 -0
  416. package/dist/routes/tags.d.ts +4 -0
  417. package/dist/routes/tags.d.ts.map +1 -0
  418. package/dist/routes/tags.js +81 -0
  419. package/dist/routes/tags.js.map +1 -0
  420. package/dist/routes/uptime.d.ts +4 -0
  421. package/dist/routes/uptime.d.ts.map +1 -0
  422. package/dist/routes/uptime.js +71 -0
  423. package/dist/routes/uptime.js.map +1 -0
  424. package/dist/scale-exec.d.ts +3 -2
  425. package/dist/scale-exec.d.ts.map +1 -1
  426. package/dist/scale-exec.js +5 -4
  427. package/dist/scale-exec.js.map +1 -1
  428. package/dist/server.d.ts.map +1 -1
  429. package/dist/server.js +30 -7
  430. package/dist/server.js.map +1 -1
  431. package/dist/settle.d.ts +6 -3
  432. package/dist/settle.d.ts.map +1 -1
  433. package/dist/settle.js +11 -8
  434. package/dist/settle.js.map +1 -1
  435. package/dist/telemetry/ch/admin.d.ts +8 -4
  436. package/dist/telemetry/ch/admin.d.ts.map +1 -1
  437. package/dist/telemetry/ch/admin.js +33 -16
  438. package/dist/telemetry/ch/admin.js.map +1 -1
  439. package/dist/telemetry/ch/queue.d.ts +6 -4
  440. package/dist/telemetry/ch/queue.d.ts.map +1 -1
  441. package/dist/telemetry/ch/queue.js +13 -9
  442. package/dist/telemetry/ch/queue.js.map +1 -1
  443. package/dist/telemetry/ch/read.d.ts.map +1 -1
  444. package/dist/telemetry/ch/read.js +3 -1
  445. package/dist/telemetry/ch/read.js.map +1 -1
  446. package/dist/telemetry/ch/rebuild.d.ts +23 -0
  447. package/dist/telemetry/ch/rebuild.d.ts.map +1 -0
  448. package/dist/telemetry/ch/rebuild.js +65 -0
  449. package/dist/telemetry/ch/rebuild.js.map +1 -0
  450. package/dist/telemetry/ch/schema-facts.d.ts +1 -1
  451. package/dist/telemetry/ch/schema-facts.d.ts.map +1 -1
  452. package/dist/telemetry/ch/schema-facts.js +8 -2
  453. package/dist/telemetry/ch/schema-facts.js.map +1 -1
  454. package/dist/telemetry/ch/schema-raw.d.ts +2 -0
  455. package/dist/telemetry/ch/schema-raw.d.ts.map +1 -1
  456. package/dist/telemetry/ch/schema-raw.js +2 -0
  457. package/dist/telemetry/ch/schema-raw.js.map +1 -1
  458. package/dist/telemetry/ch/schema.d.ts.map +1 -1
  459. package/dist/telemetry/ch/schema.js +2 -2
  460. package/dist/telemetry/ch/schema.js.map +1 -1
  461. package/dist/telemetry/ch/settle-pool.d.ts +24 -0
  462. package/dist/telemetry/ch/settle-pool.d.ts.map +1 -0
  463. package/dist/telemetry/ch/settle-pool.js +58 -0
  464. package/dist/telemetry/ch/settle-pool.js.map +1 -0
  465. package/dist/telemetry/ch/settle-rows.d.ts +7 -4
  466. package/dist/telemetry/ch/settle-rows.d.ts.map +1 -1
  467. package/dist/telemetry/ch/settle-rows.js +15 -8
  468. package/dist/telemetry/ch/settle-rows.js.map +1 -1
  469. package/dist/telemetry/ch/settle-work.d.ts +21 -0
  470. package/dist/telemetry/ch/settle-work.d.ts.map +1 -0
  471. package/dist/telemetry/ch/settle-work.js +52 -0
  472. package/dist/telemetry/ch/settle-work.js.map +1 -0
  473. package/dist/telemetry/ch/settle-worker.d.ts +2 -0
  474. package/dist/telemetry/ch/settle-worker.d.ts.map +1 -0
  475. package/dist/telemetry/ch/settle-worker.js +10 -0
  476. package/dist/telemetry/ch/settle-worker.js.map +1 -0
  477. package/dist/telemetry/ch/settle.d.ts +17 -3
  478. package/dist/telemetry/ch/settle.d.ts.map +1 -1
  479. package/dist/telemetry/ch/settle.js +15 -56
  480. package/dist/telemetry/ch/settle.js.map +1 -1
  481. package/dist/telemetry/ch/store.d.ts +12 -1
  482. package/dist/telemetry/ch/store.d.ts.map +1 -1
  483. package/dist/telemetry/ch/store.js +37 -8
  484. package/dist/telemetry/ch/store.js.map +1 -1
  485. package/dist/telemetry/ch/util.d.ts +7 -0
  486. package/dist/telemetry/ch/util.d.ts.map +1 -1
  487. package/dist/telemetry/ch/util.js +4 -0
  488. package/dist/telemetry/ch/util.js.map +1 -1
  489. package/dist/telemetry/ch/write.d.ts +2 -1
  490. package/dist/telemetry/ch/write.d.ts.map +1 -1
  491. package/dist/telemetry/ch/write.js +10 -10
  492. package/dist/telemetry/ch/write.js.map +1 -1
  493. package/dist/telemetry/index.d.ts +4 -1
  494. package/dist/telemetry/index.d.ts.map +1 -1
  495. package/dist/telemetry/index.js +8 -3
  496. package/dist/telemetry/index.js.map +1 -1
  497. package/dist/telemetry/pg-store.d.ts.map +1 -1
  498. package/dist/telemetry/pg-store.js +13 -8
  499. package/dist/telemetry/pg-store.js.map +1 -1
  500. package/dist/telemetry/store.d.ts +13 -2
  501. package/dist/telemetry/store.d.ts.map +1 -1
  502. package/dist/uptime/headers.d.ts +6 -0
  503. package/dist/uptime/headers.d.ts.map +1 -0
  504. package/dist/uptime/headers.js +25 -0
  505. package/dist/uptime/headers.js.map +1 -0
  506. package/dist/uptime/run.d.ts +9 -0
  507. package/dist/uptime/run.d.ts.map +1 -0
  508. package/dist/uptime/run.js +40 -0
  509. package/dist/uptime/run.js.map +1 -0
  510. package/package.json +9 -5
  511. package/dist/alerts/notify.d.ts +0 -28
  512. package/dist/alerts/notify.d.ts.map +0 -1
  513. package/dist/alerts/notify.js +0 -52
  514. package/dist/alerts/notify.js.map +0 -1
package/README.md CHANGED
@@ -40,6 +40,9 @@ WIZELENS_HUB_TOKEN=wl_ik_...
40
40
  | `--setup-token <text>` | `WIZELENS_CLOUD_SETUP_TOKEN` | random, printed at start while no account exists |
41
41
  | `--[no-]check-pwned-passwords` | `WIZELENS_CLOUD_CHECK_PWNED=1\|0` | on with Postgres, off with PGlite |
42
42
  | `--sso-origins <list>` | `WIZELENS_CLOUD_SSO_ORIGINS` | none: identity provider origins for OIDC single sign-on, comma separated (`https://acme.okta.com`) |
43
+ | `--stripe-secret-key <key>` | `WIZELENS_CLOUD_STRIPE_SECRET_KEY` | none: billing off, every organization unlimited. With it: plans, limits, and the Billing page |
44
+ | `--stripe-webhook-secret <s>` | `WIZELENS_CLOUD_STRIPE_WEBHOOK_SECRET` | none; required with a Stripe key (webhook: `<public-url>/_wizelens/api/auth/stripe/webhook`) |
45
+ | `--stripe-prices <json>` | `WIZELENS_CLOUD_STRIPE_PRICES` | none; required with a Stripe key: what `wizelens-cloud stripe-setup` prints |
43
46
 
44
47
  Put it behind https, and set `--public-url` to the https address: cookies are then Secure, and passkeys and email links use it.
45
48
  Sending mail needs `--public-url`. Without `--resend-api-key` or `--smtp-url`, nobody gets email: reset and invite links are in
@@ -1,9 +1,10 @@
1
+ import { type AlertNoticeState, type AlertRule, type AnomalyAlertValue } from "@wizeworks/lens-core";
1
2
  import type { CloudApp } from "../app.js";
2
- import { type AlertRule } from "../repo/alerts.js";
3
- import { type Notice } from "./notify.js";
4
- /** Send a notice and keep it as an event. */
5
- export declare function notify(app: CloudApp, rule: AlertRule, state: Notice["state"], value: number | null, now: number): Promise<string>;
6
- /** Check one rule. It notifies only when the state changes: ok to firing, or firing to ok. */
3
+ /** Send a notice and keep it as an event, with the problem it names. */
4
+ export declare function notify(app: CloudApp, rule: AlertRule, state: AlertNoticeState, value: number | null, now: number, anomaly?: AnomalyAlertValue): Promise<string>;
5
+ /** True when the value breaks the rule. */
6
+ export declare const breaches: (rule: AlertRule, value: number | null) => boolean;
7
+ /** Check one rule: keep its value, and send a notice when it starts or stops firing, or a reminder while it keeps firing. */
7
8
  export declare function evaluateRule(app: CloudApp, rule: AlertRule, now: number): Promise<void>;
8
9
  /** Check every enabled rule once. One failing rule does not stop the others. */
9
10
  export declare function evaluateAll(app: CloudApp): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/alerts/evaluate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAY,KAAK,SAAS,EAAgC,MAAM,mBAAmB,CAAC;AAI3F,OAAO,EAAW,KAAK,MAAM,EAAe,MAAM,aAAa,CAAC;AAsDhE,6CAA6C;AAC7C,wBAAsB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKvI;AAED,8FAA8F;AAC9F,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;AAED,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/alerts/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EAErB,KAAK,SAAS,EAGd,KAAK,iBAAiB,EAYvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAiF1C,wEAAwE;AACxE,wBAAsB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMrK;AAED,2CAA2C;AAC3C,eAAO,MAAM,QAAQ,SAAU,SAAS,SAAS,MAAM,GAAG,IAAI,KAAG,OAC2G,CAAC;AAY7K,6HAA6H;AAC7H,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAED,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D"}
@@ -1,22 +1,29 @@
1
- import { alertBreached, alignNow, alertContext, alertMessage, alertPage, computePage, metricAlertMessage, metricAlertUnit, metricAlertValueOf } from "@wizeworks/lens-core";
2
- import { addEvent, enabledRules, saveEvaluation } from "../repo/alerts.js";
3
- import { projectRetentionMs } from "../scale-exec.js";
1
+ import { alertBreached, alertContext, alertMessage, alertPage, alertStep, alignNow, anomalyAlertMessage, anomalyAlertPage, computePage, metricAlertMessage, metricAlertUnit, metricAlertValueOf, opHolds, sloBurnMessage, sloBurnPage, sloContext, } from "@wizeworks/lens-core";
2
+ import { deliver } from "@wizeworks/lens-hub/kit";
4
3
  import { alertMail } from "../mail/templates.js";
4
+ import { addEvent } from "../repo/alert-events.js";
5
+ import { enabledRules, saveEvaluation } from "../repo/alerts.js";
6
+ import { sloById } from "../repo/slos.js";
5
7
  import { memberEmails } from "../repo/users.js";
6
- import { deliver } from "./notify.js";
7
- /** Names for the notice: project and the dashboard link. */
8
- async function noticeOf(app, rule, state, value, now) {
8
+ import { projectRetentionMs } from "../scale-exec.js";
9
+ import { problemFor } from "./problem-link.js";
10
+ /** Names for the notice: project, the link to the rule's page, and for a firing rule the problem it is part of. */
11
+ async function noticeOf(app, rule, state, value, now, anomaly) {
9
12
  const [p] = await app.db.query("SELECT name FROM projects WHERE id = $1", [rule.projectId]);
10
- const base = app.baseUrl();
13
+ const above = rule.op === "above_normal" ? (anomaly ?? (await measureAnomaly(app, rule, now))) : null;
14
+ const breach = above?.breach ?? null;
11
15
  return {
16
+ ruleId: rule.id,
12
17
  rule: rule.name,
13
18
  project: p?.name ?? rule.projectId,
14
19
  state,
15
- message: await messageOf(app, rule, state, value, now),
20
+ message: above ? anomalyAlertMessage(rule.metric, above, state) : await messageOf(app, rule, state, value, now),
16
21
  value,
17
22
  threshold: rule.threshold,
18
23
  timeMs: now,
19
- url: `${base}/_wizelens/#/alerts?project=${rule.projectId}`,
24
+ url: `${app.baseUrl()}/_wizelens/#/alerts/${rule.id}?project=${rule.projectId}`,
25
+ baseline: breach ? { normal: breach.normal, upper: breach.upper } : null,
26
+ problem: state === "fired" || state === "remind" ? await problemFor(app, rule, now, breach?.row ?? null) : null,
20
27
  };
21
28
  }
22
29
  /** One OpenTelemetry metric over the rule's window (from its rollups), and a sample series for its unit. */
@@ -28,20 +35,35 @@ async function measureMetric(app, rule, now) {
28
35
  return { value: metricAlertValueOf(data, stat), sample: data.series[0], stat };
29
36
  }
30
37
  async function messageOf(app, rule, state, value, now) {
38
+ if (rule.metric === "slo")
39
+ return sloBurnMessage((await sloById(app.db, rule.projectId, rule.sloId))?.name ?? rule.sloId, rule.op, value, rule.threshold, state);
31
40
  if (rule.metric !== "metric")
32
- return alertMessage(rule.metric, rule.op, value, rule.threshold, state);
41
+ return alertMessage(rule.metric, rule.op, value, rule.threshold, state, rule.logSearch);
33
42
  const { sample, stat } = await measureMetric(app, rule, now);
34
43
  const unit = sample ? metricAlertUnit(sample, stat) : "";
35
44
  return metricAlertMessage(rule.metricName, stat, rule.op, value, rule.threshold, unit, state);
36
45
  }
37
- /** The metric over the rule's window: from the stats tables, or from the metric's points. */
46
+ async function executorOf(app, rule, env = rule.env) {
47
+ const retentionMs = await projectRetentionMs(app.db, rule.projectId, app.config.retentionDays);
48
+ return app.telemetry.executor(rule.projectId, retentionMs, env || undefined);
49
+ }
50
+ /** An "above normal" rule: every service and endpoint over the window against the same window in earlier weeks (or days). */
51
+ async function measureAnomaly(app, rule, now) {
52
+ const page = anomalyAlertPage(rule.metric, rule.threshold);
53
+ return computePage(page, alertContext(rule.windowMs, alignNow(now)), await executorOf(app, rule));
54
+ }
55
+ /** The metric over the rule's window: from the stats tables (one service or endpoint when scoped, or a log search), or from the metric's points. */
38
56
  async function measure(app, rule, now) {
39
57
  if (rule.metric === "metric")
40
58
  return (await measureMetric(app, rule, now)).value;
41
- const retentionMs = await projectRetentionMs(app.db, rule.projectId, app.config.retentionDays);
42
- return computePage(alertPage(rule.metric), alertContext(rule.windowMs, alignNow(now)), app.telemetry.executor(rule.projectId, retentionMs, rule.env || undefined));
59
+ if (rule.metric === "slo") {
60
+ const slo = await sloById(app.db, rule.projectId, rule.sloId);
61
+ return slo ? computePage(sloBurnPage(slo), sloContext(rule.windowMs, alignNow(now)), await executorOf(app, rule, "")) : null;
62
+ }
63
+ const page = alertPage(rule.metric, { service: rule.service, endpoint: rule.endpoint }, rule.logSearch);
64
+ return computePage(page, alertContext(rule.windowMs, alignNow(now)), await executorOf(app, rule));
43
65
  }
44
- /** Webhooks, Slack, and email. Email goes only to addresses that still belong to confirmed members of the organization. */
66
+ /** Webhooks, chat, PagerDuty, and email. Email goes only to addresses that still belong to confirmed members of the organization. */
45
67
  async function outboxOf(app, projectId) {
46
68
  const [p] = await app.db.query("SELECT org_id FROM projects WHERE id = $1", [projectId]);
47
69
  const members = new Set(p ? await memberEmails(app.db, p.org_id, app.mailer.live) : []);
@@ -52,23 +74,34 @@ async function outboxOf(app, projectId) {
52
74
  const note = app.mailer.live ? `sent to ${ok.length}` : "mail is not set up (see the cloud log)";
53
75
  return `email: ${note}${ok.length < to.length ? `, ${to.length - ok.length} no longer members` : ""}`;
54
76
  };
55
- return { http: app.config.fetch, allowPrivate: app.config.allowPrivateWebhooks, email };
77
+ return { http: app.config.fetch, allowPrivate: app.config.allowPrivateWebhooks, email, pagerDutyUrl: app.config.pagerDutyUrl };
56
78
  }
57
- /** Send a notice and keep it as an event. */
58
- export async function notify(app, rule, state, value, now) {
59
- const notice = await noticeOf(app, rule, state, value, now);
79
+ /** Send a notice and keep it as an event, with the problem it names. */
80
+ export async function notify(app, rule, state, value, now, anomaly) {
81
+ const notice = await noticeOf(app, rule, state, value, now, anomaly);
60
82
  const delivery = await deliver(rule.channels, notice, await outboxOf(app, rule.projectId));
61
- await addEvent(app.db, rule, { kind: state, value, message: notice.message, timeMs: now, delivery });
83
+ const problem = notice.problem ? { id: notice.problem.id, title: notice.problem.title, url: notice.problem.url } : null;
84
+ await addEvent(app.db, rule, { kind: state, value, message: notice.message, timeMs: now, delivery, problem });
62
85
  return delivery;
63
86
  }
64
- /** Check one rule. It notifies only when the state changes: ok to firing, or firing to ok. */
65
- export async function evaluateRule(app, rule, now) {
87
+ /** True when the value breaks the rule. */
88
+ export const breaches = (rule, value) => rule.metric === "metric" || rule.metric === "slo" ? value !== null && opHolds(rule.op, value, rule.threshold) : alertBreached(rule.metric, rule.op, value, rule.threshold);
89
+ /** Whether a rule breaks now, and for "above normal" rules what broke it. */
90
+ async function verdictOf(app, rule, now) {
91
+ if (rule.op === "above_normal") {
92
+ const anomaly = await measureAnomaly(app, rule, now);
93
+ return { breached: anomaly.breach !== null, value: anomaly.value, anomaly };
94
+ }
66
95
  const value = await measure(app, rule, now);
67
- const firing = rule.metric === "metric" ? value !== null && (rule.op === ">" ? value > rule.threshold : value < rule.threshold) : alertBreached(rule.metric, rule.op, value, rule.threshold);
68
- const next = firing ? "firing" : "ok";
69
- await saveEvaluation(app.db, rule.id, next, value, now);
70
- if (next !== rule.state)
71
- await notify(app, rule, firing ? "fired" : "resolved", value, now);
96
+ return { breached: breaches(rule, value), value };
97
+ }
98
+ /** Check one rule: keep its value, and send a notice when it starts or stops firing, or a reminder while it keeps firing. */
99
+ export async function evaluateRule(app, rule, now) {
100
+ const { breached, value, anomaly } = await verdictOf(app, rule, now);
101
+ const step = alertStep(rule, breached, now);
102
+ await saveEvaluation(app.db, rule, { state: step.state, ackMs: step.ackMs, notified: step.notice !== null }, value, now);
103
+ if (step.notice)
104
+ await notify(app, rule, step.notice, value, now, anomaly);
72
105
  }
73
106
  /** Check every enabled rule once. One failing rule does not stop the others. */
74
107
  export async function evaluateAll(app) {
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/alerts/evaluate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/alerts/evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CloudApp } from "../app.js";
2
+ import type { AlertRule } from "../repo/alerts.js";
3
+ import type { NoticeProblem } from "@wizeworks/lens-hub/kit";
4
+ /** The dashboard link to one problem: its id in the range it was found in, plus the time and service that find it again later. */
5
+ export declare function problemUrl(base: string, projectId: string, p: {
6
+ id: string;
7
+ startMs: number;
8
+ row: string | null;
9
+ }): string;
10
+ /** The problem near `now` (on `service`, when given) from the last 24 hours, or null. A failure never stops the notice. */
11
+ export declare function problemFor(app: CloudApp, rule: AlertRule, now: number, service: string | null): Promise<NoticeProblem | null>;
12
+ //# sourceMappingURL=problem-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problem-link.d.ts","sourceRoot":"","sources":["../../src/alerts/problem-link.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAK7D,kIAAkI;AAClI,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,MAAM,CAI1H;AAED,2HAA2H;AAC3H,wBAAsB,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAcnI"}
@@ -0,0 +1,31 @@
1
+ import { causeText } from "@wizeworks/lens-core";
2
+ import { projectPage } from "../routes/models.js";
3
+ /** Notices look for problems in the last 24 hours, and their links open that range, so the id matches. */
4
+ const PROBLEM_RANGE = "24h";
5
+ /** The dashboard link to one problem: its id in the range it was found in, plus the time and service that find it again later. */
6
+ export function problemUrl(base, projectId, p) {
7
+ const q = new URLSearchParams({ project: projectId, range: PROBLEM_RANGE, problem: p.id, at: String(Math.round(p.startMs)) });
8
+ if (p.row)
9
+ q.set("focus", p.row);
10
+ return `${base}/_wizelens/#/problems?${q.toString()}`;
11
+ }
12
+ /** The problem near `now` (on `service`, when given) from the last 24 hours, or null. A failure never stops the notice. */
13
+ export async function problemFor(app, rule, now, service) {
14
+ try {
15
+ const [p] = await app.db.query("SELECT org_id FROM projects WHERE id = $1", [rule.projectId]);
16
+ if (!p)
17
+ return null;
18
+ const params = { at: String(now), ...(service ? { focus: service } : {}) };
19
+ const m = await projectPage(app, { id: rule.projectId, orgId: p.org_id }, "problems", PROBLEM_RANGE, params, rule.env || undefined);
20
+ const found = m.selected;
21
+ if (!found)
22
+ return null;
23
+ const row = found.anomalies[0]?.row ?? null;
24
+ return { id: found.id, title: found.title, cause: found.cause ? causeText(found.cause) : null, url: problemUrl(app.baseUrl(), rule.projectId, { id: found.id, startMs: found.startMs, row }) };
25
+ }
26
+ catch (err) {
27
+ console.error(`[wizelens-cloud] problem for alert ${rule.id} failed:`, err);
28
+ return null;
29
+ }
30
+ }
31
+ //# sourceMappingURL=problem-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problem-link.js","sourceRoot":"","sources":["../../src/alerts/problem-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,0GAA0G;AAC1G,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,kIAAkI;AAClI,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,SAAiB,EAAE,CAAsD;IAChH,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9H,IAAI,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,GAAG,IAAI,yBAAyB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;AACxD,CAAC;AAED,2HAA2H;AAC3H,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAa,EAAE,IAAe,EAAE,GAAW,EAAE,OAAsB;IAClG,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAqB,2CAA2C,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,MAAM,MAAM,GAA2B,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACnG,MAAM,CAAC,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;QACpI,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACjM,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/app.d.ts CHANGED
@@ -1,11 +1,14 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { MapLoader } from "@wizeworks/lens-core";
2
3
  import type { WizeAuth } from "./auth/auth.js";
3
4
  import type { AuthSecret } from "./auth/secret.js";
5
+ import type { Billing } from "./billing/service.js";
4
6
  import type { Changes } from "./changes.js";
5
7
  import type { CloudConfig } from "./config.js";
6
8
  import type { Db } from "./db/db.js";
7
9
  import type { RouteCtx } from "./http/router.js";
8
10
  import type { Mailer } from "./mail/mailer.js";
11
+ import type { SettingsCache } from "./repo/settings.js";
9
12
  import type { TelemetryStore } from "./telemetry/store.js";
10
13
  /** Everything a request handler needs. */
11
14
  export interface CloudApp {
@@ -20,8 +23,14 @@ export interface CloudApp {
20
23
  secrets: readonly AuthSecret[];
21
24
  /** Better Auth. Ready once the cloud listens (its address goes into links and cookie checks). */
22
25
  readonly auth: WizeAuth;
26
+ /** Plans, usage, limits, and Stripe (with billing on). */
27
+ billing: Billing;
23
28
  /** New data per project, for open dashboards. */
24
29
  changes: Changes;
30
+ /** Uploaded source maps of one project, cached. */
31
+ maps(projectId: string): MapLoader;
32
+ /** Project settings, cached for ingest and settle. */
33
+ settings: SettingsCache;
25
34
  /** The address for links: the public URL, or the address the cloud listens on. */
26
35
  baseUrl(req?: IncomingMessage): string;
27
36
  }
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,EAAE,CAAC;IACP,yFAAyF;IACzF,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,GAAI,SAAQ,QAAQ;IACnC,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,EAAE,CAAC;IACP,yFAAyF;IACzF,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,0DAA0D;IAC1D,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,sDAAsD;IACtD,QAAQ,EAAE,aAAa,CAAC;IACxB,kFAAkF;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,GAAI,SAAQ,QAAQ;IACnC,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
@@ -30,6 +30,12 @@ export interface WizeAuth {
30
30
  name: string;
31
31
  slug: string;
32
32
  } | null>;
33
+ wizelensOAuthVerify(a: {
34
+ body: {
35
+ token: string;
36
+ };
37
+ }): Promise<Record<string, unknown> | null>;
38
+ getOAuthServerConfig(...args: unknown[]): Promise<unknown>;
33
39
  };
34
40
  }
35
41
  interface SessionUser {
@@ -41,8 +47,8 @@ interface SessionUser {
41
47
  }
42
48
  /** Better Auth for the cloud: accounts, sessions, 2FA, passkeys, SSO, organizations, members, and invites (docs/CONTRACT.md, "Tenancy and access"). */
43
49
  export declare function createAuth(deps: AuthDeps): WizeAuth;
44
- /** A new organization with `userId` as owner, the cloud's default retention, a first project, and an audit line. */
45
- export declare function createOrgFor(auth: WizeAuth, deps: Pick<AuthDeps, "db" | "retentionDays">, userId: string, name: string): Promise<{
50
+ /** A new organization with `userId` as owner, the cloud's default retention (Free plan's at most, with billing on), a first project, and an audit line. */
51
+ export declare function createOrgFor(auth: WizeAuth, deps: Pick<AuthDeps, "db" | "retentionDays" | "billingOn">, userId: string, name: string): Promise<{
46
52
  id: string;
47
53
  name: string;
48
54
  slug: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA4C1C,4GAA4G;AAC5G,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE;QACH,UAAU,CAAC,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,OAAO,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG,IAAI,CAAC,CAAC;QACpG,cAAc,CAAC,CAAC,EAAE;YAAE,IAAI,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACtF,kBAAkB,CAAC,CAAC,EAAE;YAAE,IAAI,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC,CAAC;KAC7I,CAAC;CACH;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,uJAAuJ;AACvJ,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAGnD;AAED,oHAAoH;AACpH,wBAAsB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAWlL"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAiE1C,4GAA4G;AAC5G,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,EAAE,iBAAiB,CAAC;IAC3B,GAAG,EAAE;QACH,UAAU,CAAC,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,OAAO,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG,IAAI,CAAC,CAAC;QACpG,cAAc,CAAC,CAAC,EAAE;YAAE,IAAI,EAAE;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACtF,kBAAkB,CAAC,CAAC,EAAE;YAAE,IAAI,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC,CAAC;QAC5I,mBAAmB,CAAC,CAAC,EAAE;YAAE,IAAI,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7F,oBAAoB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5D,CAAC;CACH;AAED,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,uJAAuJ;AACvJ,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAGnD;AAED,2JAA2J;AAC3J,wBAAsB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,eAAe,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAYhM"}
package/dist/auth/auth.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { betterAuth } from "better-auth";
2
+ import { PLANS } from "../billing/plans.js";
2
3
  import { audit } from "../repo/audit.js";
3
4
  import { freeSlug } from "../repo/orgs.js";
4
5
  import { createProject } from "../repo/projects.js";
@@ -9,9 +10,30 @@ import { authPlugins } from "./plugins.js";
9
10
  import { securityDbHooks } from "./security-notices.js";
10
11
  import { afterSignup, confirmSsoEmail } from "./signup.js";
11
12
  const ALWAYS_OFF = ["/sign-in/social", "/link-social", "/get-access-token", "/refresh-token", "/account-info", "/delete-user/callback", "/update-session"];
13
+ /** OAuth routes the cloud does not use: apps register themselves, and grants (repo/grants.ts) hold every consent. */
14
+ const OAUTH_OFF = [
15
+ "/oauth2/introspect",
16
+ "/oauth2/userinfo",
17
+ "/oauth2/end-session",
18
+ "/oauth2/public-client-prelogin",
19
+ "/oauth2/get-consent",
20
+ "/oauth2/get-consents",
21
+ "/oauth2/update-consent",
22
+ "/oauth2/delete-consent",
23
+ "/oauth2/create-client",
24
+ "/oauth2/get-client",
25
+ "/oauth2/get-clients",
26
+ "/oauth2/update-client",
27
+ "/oauth2/delete-client",
28
+ "/oauth2/client/rotate-secret",
29
+ "/admin/oauth2/create-client",
30
+ "/admin/oauth2/update-client",
31
+ "/admin/oauth2/resources",
32
+ ];
12
33
  /** Invite ids are link secrets: no route lists them (managers see them on our Team page), nor, without real mail, by "their" email. */
13
34
  const disabledPaths = (deps) => [
14
35
  ...ALWAYS_OFF,
36
+ ...OAUTH_OFF,
15
37
  "/organization/list-invitations",
16
38
  "/organization/get-full-organization",
17
39
  ...(deps.mailer.live ? [] : ["/organization/list-user-invitations"]),
@@ -46,7 +68,7 @@ export function createAuth(deps) {
46
68
  const auth = build(deps, (userId, name) => createOrgFor(auth, deps, userId, name));
47
69
  return auth;
48
70
  }
49
- /** A new organization with `userId` as owner, the cloud's default retention, a first project, and an audit line. */
71
+ /** A new organization with `userId` as owner, the cloud's default retention (Free plan's at most, with billing on), a first project, and an audit line. */
50
72
  export async function createOrgFor(auth, deps, userId, name) {
51
73
  const clean = name.trim().slice(0, 100) || "My organization";
52
74
  const org = await auth.api.createOrganization({ body: { name: clean, slug: await freeSlug(deps.db, clean), userId } });
@@ -54,7 +76,8 @@ export async function createOrgFor(auth, deps, userId, name) {
54
76
  throw new Error("Could not create the organization.");
55
77
  const now = Date.now();
56
78
  await deps.db.tx(async (q) => {
57
- await q.query("UPDATE orgs SET retention_days = $1 WHERE id = $2", [deps.retentionDays, org.id]);
79
+ const plan = deps.billingOn ? "free" : "unlimited";
80
+ await q.query("UPDATE orgs SET retention_days = $1, plan = $2 WHERE id = $3", [Math.min(deps.retentionDays, PLANS[plan].maxRetentionDays), plan, org.id]);
58
81
  await createProject(q, org.id, "My app", now);
59
82
  await audit(q, org.id, `user:${userId}`, "org.create", { name: clean }, now);
60
83
  });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type createAuthMiddleware } from "better-auth/api";
2
+ import type { AuthDeps } from "./deps.js";
3
+ type HookCtx = Parameters<Parameters<typeof createAuthMiddleware>[0]>[0];
4
+ /** SSO setup needs a plan with SSO; plan calls must name the organization, since only organizations hold plans. */
5
+ export declare function billingGuard(deps: AuthDeps, ctx: HookCtx): Promise<void>;
6
+ /** Each change an identity provider makes through SCIM goes to the organization's audit log. */
7
+ export declare function auditScim(deps: AuthDeps, ctx: HookCtx): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=billing-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-hooks.d.ts","sourceRoot":"","sources":["../../src/auth/billing-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAKtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,KAAK,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAOzE,mHAAmH;AACnH,wBAAsB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9E;AAWD,gGAAgG;AAChG,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3E"}
@@ -0,0 +1,49 @@
1
+ import { APIError } from "better-auth/api";
2
+ import { planRequired } from "../billing/gate.js";
3
+ import { audit } from "../repo/audit.js";
4
+ import { orgHas } from "../repo/billing.js";
5
+ import { scimTokenOf } from "../repo/scim-tokens.js";
6
+ const SSO_SETUP = new Set(["/sso/register", "/sso/update-provider"]);
7
+ /** Plan calls that act for someone; the Stripe redirect back (`/subscription/success`) is not one. */
8
+ const PLAN_CALL = /^\/subscription\/(upgrade|cancel|restore|list|billing-portal)$/;
9
+ const str = (v) => (typeof v === "string" ? v : undefined);
10
+ /** SSO setup needs a plan with SSO; plan calls must name the organization, since only organizations hold plans. */
11
+ export async function billingGuard(deps, ctx) {
12
+ const body = (ctx.body ?? {});
13
+ if (SSO_SETUP.has(ctx.path)) {
14
+ const orgId = str(body.organizationId) ?? (await providerOrg(ctx, str(body.providerId)));
15
+ if (orgId && !(await orgHas(deps.db, orgId, deps.billingOn, "sso")))
16
+ throw new APIError("PAYMENT_REQUIRED", { message: planRequired("sso").message, code: "PLAN_REQUIRED" });
17
+ }
18
+ if (PLAN_CALL.test(ctx.path)) {
19
+ const query = (ctx.query ?? {});
20
+ const type = str(body.customerType) ?? str(query.customerType);
21
+ const ref = str(body.referenceId) ?? str(query.referenceId);
22
+ if (type !== "organization" || !ref)
23
+ throw new APIError("BAD_REQUEST", { message: "Plans belong to an organization: send customerType organization and its referenceId." });
24
+ }
25
+ }
26
+ async function providerOrg(ctx, providerId) {
27
+ if (!providerId)
28
+ return undefined;
29
+ const row = await ctx.context.adapter.findOne({ model: "ssoProvider", where: [{ field: "providerId", value: providerId }] });
30
+ return row?.organizationId ?? undefined;
31
+ }
32
+ const SCIM_CHANGE = /^\/scim\/v2\/(Users|Groups)(\/[^/]+)?$/;
33
+ const VERB = { POST: "create", PUT: "update", PATCH: "update", DELETE: "delete" };
34
+ /** Each change an identity provider makes through SCIM goes to the organization's audit log. */
35
+ export async function auditScim(deps, ctx) {
36
+ const verb = VERB[ctx.request?.method ?? ""];
37
+ const m = SCIM_CHANGE.exec(ctx.path);
38
+ if (!verb || !m)
39
+ return;
40
+ const bearer = ctx.headers?.get("authorization")?.replace(/^bearer\s+/i, "") ?? "";
41
+ const token = await scimTokenOf(deps.db, bearer, Date.now());
42
+ if (!token)
43
+ return;
44
+ const kind = m[1] === "Users" ? "user" : "group";
45
+ const body = (ctx.body ?? {});
46
+ const detail = { resource: kind, id: m[2]?.slice(1), userName: str(body.userName), displayName: str(body.displayName), tokenId: token.id };
47
+ await audit(deps.db, token.orgId, `scim:${token.id}`, `scim.${kind}.${verb}`, detail, Date.now());
48
+ }
49
+ //# sourceMappingURL=billing-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-hooks.js","sourceRoot":"","sources":["../../src/auth/billing-hooks.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { toNodeHandler } from "better-auth/node";
2
2
  import { AUTH_BASE_PATH, CLIENT_IP_HEADER } from "./options.js";
3
3
  const SAFE = new Set(["GET", "HEAD", "OPTIONS"]);
4
- /** Paths an outside party posts to (sign-in providers), which cannot send the dashboard header. None are on yet; SSO adds them. */
5
- const EXTERNAL = [/^\/callback\/[^/]+$/, /^\/sso\/callback(\/[^/]+)?$/, /^\/sso\/saml2\/sp\/(acs|slo)\/[^/]+$/];
4
+ /** Paths an outside party posts to (sign-in providers, OAuth apps such as Claude, SCIM from identity providers), which cannot send the dashboard header. */
5
+ const EXTERNAL = [/^\/callback\/[^/]+$/, /^\/sso\/callback(\/[^/]+)?$/, /^\/sso\/saml2\/sp\/(acs|slo)\/[^/]+$/, /^\/oauth2\/(token|register|revoke)$/, /^\/scim\/v2\/[A-Za-z]+(\/[^/]+)?$/];
6
6
  const IP_HEADERS = ["x-forwarded-for", "x-real-ip", "cf-connecting-ip", "true-client-ip", "forwarded", CLIENT_IP_HEADER];
7
7
  const MAX_BODY = 64 * 1024;
8
8
  const MAX_EXTERNAL_BODY = 1024 * 1024;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/auth/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/auth/bridge.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ export declare const TOKEN_PREFIX: {
3
3
  readonly ingest: "wl_ik_";
4
4
  readonly read: "wl_rk_";
5
5
  readonly share: "wl_sh_";
6
+ readonly status: "wl_st_";
7
+ readonly scim: "wl_sc_";
6
8
  };
7
9
  export type TokenKind = keyof typeof TOKEN_PREFIX;
8
10
  /** A new random token. Only its hash is stored. */
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/auth/crypto.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,eAAO,MAAM,YAAY;aAAK,MAAM,EAAE,QAAQ;aAAE,IAAI,EAAE,QAAQ;aAAE,KAAK,EAAE,QAAQ;CAAW,CAAC;AAC3F,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,YAAY,CAAC;AAElD,mDAAmD;AACnD,eAAO,MAAM,QAAQ,SAAU,SAAS,KAAG,MAAyE,CAAC;AAErH,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAA0D,CAAC;AAErG,eAAO,MAAM,KAAK,QAAO,MAAsB,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAMX,CAAC"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/auth/crypto.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,eAAO,MAAM,YAAY;aAAK,MAAM,EAAE,QAAQ;aAAE,IAAI,EAAE,QAAQ;aAAE,KAAK,EAAE,QAAQ;aAAE,MAAM,EAAE,QAAQ;aAAE,IAAI,EAAE,QAAQ;CAAW,CAAC;AAC7H,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,YAAY,CAAC;AAElD,mDAAmD;AACnD,eAAO,MAAM,QAAQ,SAAU,SAAS,KAAG,MAAyE,CAAC;AAErH,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MAA0D,CAAC;AAErG,eAAO,MAAM,KAAK,QAAO,MAAsB,CAAC;AAEhD,iFAAiF;AACjF,eAAO,MAAM,MAAM,SAAU,MAAM,KAAG,MAMX,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { createHash, randomBytes, randomUUID } from "node:crypto";
2
- // Our own secrets: data-plane keys and share links. Passwords, sessions, and invites are Better Auth's.
2
+ // Our own secrets: data-plane keys, share links, and status page links. Passwords, sessions, and invites are Better Auth's.
3
3
  /** Kinds of secret tokens. The prefix tells a person what a token is for. */
4
- export const TOKEN_PREFIX = { ingest: "wl_ik_", read: "wl_rk_", share: "wl_sh_" };
4
+ export const TOKEN_PREFIX = { ingest: "wl_ik_", read: "wl_rk_", share: "wl_sh_", status: "wl_st_", scim: "wl_sc_" };
5
5
  /** A new random token. Only its hash is stored. */
6
6
  export const newToken = (kind) => `${TOKEN_PREFIX[kind]}${randomBytes(24).toString("base64url")}`;
7
7
  export const hashToken = (token) => createHash("sha256").update(token).digest("hex");
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/auth/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAElE,wGAAwG;AAExG,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAW,CAAC;AAG3F,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;AAErH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE,CAAC,UAAU,EAAE,CAAC;AAEhD,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,IAAI;KACD,WAAW,EAAE;KACb,SAAS,CAAC,MAAM,CAAC;KACjB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;KACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/auth/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAElE,4HAA4H;AAE5H,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAW,CAAC;AAG7H,mDAAmD;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;AAErH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE,CAAC,UAAU,EAAE,CAAC;AAEhD,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAC7C,IAAI;KACD,WAAW,EAAE;KACb,SAAS,CAAC,MAAM,CAAC;KACjB,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;KACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { StripeDeps } from "../billing/stripe-plugin.js";
1
2
  import type { SignupMode } from "../config.js";
2
3
  import type { Db } from "../db/db.js";
3
4
  import type { Mailer } from "../mail/mailer.js";
@@ -7,6 +8,8 @@ export interface AuthDeps {
7
8
  db: Db;
8
9
  /** The cloud's own origin, for links and passkeys, for example https://lens.example.com. */
9
10
  publicUrl: string;
11
+ /** Another origin agents use for MCP only (`--mcp-url`), for example https://mcp.wizelens.com. */
12
+ mcpUrl?: string;
10
13
  /** Origins allowed to send changes: the public one (and its 127.0.0.1 twin for a local default). */
11
14
  trustedOrigins: string[];
12
15
  /** Identity provider origins the cloud may fetch OIDC settings from (`--sso-origins`). */
@@ -21,6 +24,10 @@ export interface AuthDeps {
21
24
  };
22
25
  checkPwned: boolean;
23
26
  retentionDays: number;
27
+ /** Billing is on (a Stripe key): plans limit features and retention. Off: everything is unlimited. */
28
+ billingOn: boolean;
29
+ /** The Stripe plugin's client, secret, prices, and plan sync, when billing is on. */
30
+ stripe?: StripeDeps;
24
31
  }
25
32
  /** A link into the dashboard. Tokens go in the hash, so they never reach a server log. */
26
33
  export declare const appLink: (deps: Pick<AuthDeps, "publicUrl">, route: string, token: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/auth/deps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,EAAE,CAAC;IACP,4FAA4F;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,IAAI,IAAI,CAAA;KAAE,CAAC;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,0FAA0F;AAC1F,eAAO,MAAM,OAAO,SAAU,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,MAAM,SAAS,MAAM,KAAG,MACb,CAAC"}
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/auth/deps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,EAAE,CAAC;IACP,4FAA4F;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,EAAE;QAAE,KAAK,IAAI,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,IAAI,IAAI,CAAA;KAAE,CAAC;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,sGAAsG;IACtG,SAAS,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,0FAA0F;AAC1F,eAAO,MAAM,OAAO,SAAU,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,MAAM,SAAS,MAAM,KAAG,MACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/auth/deps.ts"],"names":[],"mappings":"AAuBA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAiC,EAAE,KAAa,EAAE,KAAa,EAAU,EAAE,CACjG,GAAG,IAAI,CAAC,SAAS,gBAAgB,KAAK,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/auth/deps.ts"],"names":[],"mappings":"AA8BA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAiC,EAAE,KAAa,EAAE,KAAa,EAAU,EAAE,CACjG,GAAG,IAAI,CAAC,SAAS,gBAAgB,KAAK,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/auth/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA2H1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAWpE"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/auth/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA6H1C,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAepE"}