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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/README.md +58 -5
  2. package/dist/alerts/evaluate.d.ts.map +1 -1
  3. package/dist/alerts/evaluate.js +20 -6
  4. package/dist/alerts/evaluate.js.map +1 -1
  5. package/dist/alerts/notify.d.ts +13 -2
  6. package/dist/alerts/notify.d.ts.map +1 -1
  7. package/dist/alerts/notify.js +22 -16
  8. package/dist/alerts/notify.js.map +1 -1
  9. package/dist/app.d.ts +16 -2
  10. package/dist/app.d.ts.map +1 -1
  11. package/dist/auth/auth.d.ts +51 -0
  12. package/dist/auth/auth.d.ts.map +1 -0
  13. package/dist/auth/auth.js +63 -0
  14. package/dist/auth/auth.js.map +1 -0
  15. package/dist/auth/bridge.d.ts +7 -0
  16. package/dist/auth/bridge.d.ts.map +1 -0
  17. package/dist/auth/bridge.js +39 -0
  18. package/dist/auth/bridge.js.map +1 -0
  19. package/dist/auth/crypto.d.ts +0 -5
  20. package/dist/auth/crypto.d.ts.map +1 -1
  21. package/dist/auth/crypto.js +3 -20
  22. package/dist/auth/crypto.js.map +1 -1
  23. package/dist/auth/delete-user.d.ts +16 -0
  24. package/dist/auth/delete-user.d.ts.map +1 -0
  25. package/dist/auth/delete-user.js +21 -0
  26. package/dist/auth/delete-user.js.map +1 -0
  27. package/dist/auth/deps.d.ts +27 -0
  28. package/dist/auth/deps.d.ts.map +1 -0
  29. package/dist/auth/deps.js +3 -0
  30. package/dist/auth/deps.js.map +1 -0
  31. package/dist/auth/email-token.d.ts +8 -0
  32. package/dist/auth/email-token.d.ts.map +1 -0
  33. package/dist/auth/email-token.js +15 -0
  34. package/dist/auth/email-token.js.map +1 -0
  35. package/dist/auth/hooks.d.ts +4 -0
  36. package/dist/auth/hooks.d.ts.map +1 -0
  37. package/dist/auth/hooks.js +143 -0
  38. package/dist/auth/hooks.js.map +1 -0
  39. package/dist/auth/join-scope.d.ts +7 -0
  40. package/dist/auth/join-scope.d.ts.map +1 -0
  41. package/dist/auth/join-scope.js +17 -0
  42. package/dist/auth/join-scope.js.map +1 -0
  43. package/dist/auth/options.d.ts +17 -0
  44. package/dist/auth/options.d.ts.map +1 -0
  45. package/dist/auth/options.js +98 -0
  46. package/dist/auth/options.js.map +1 -0
  47. package/dist/auth/password.d.ts +10 -0
  48. package/dist/auth/password.d.ts.map +1 -0
  49. package/dist/auth/password.js +22 -0
  50. package/dist/auth/password.js.map +1 -0
  51. package/dist/auth/plugins.d.ts +4 -0
  52. package/dist/auth/plugins.d.ts.map +1 -0
  53. package/dist/auth/plugins.js +45 -0
  54. package/dist/auth/plugins.js.map +1 -0
  55. package/dist/auth/principal.d.ts +8 -3
  56. package/dist/auth/principal.d.ts.map +1 -1
  57. package/dist/auth/principal.js +13 -8
  58. package/dist/auth/principal.js.map +1 -1
  59. package/dist/auth/roles.d.ts +43 -3
  60. package/dist/auth/roles.d.ts.map +1 -1
  61. package/dist/auth/roles.js +15 -6
  62. package/dist/auth/roles.js.map +1 -1
  63. package/dist/auth/schema-names.d.ts +130 -0
  64. package/dist/auth/schema-names.d.ts.map +1 -0
  65. package/dist/auth/schema-names.js +53 -0
  66. package/dist/auth/schema-names.js.map +1 -0
  67. package/dist/auth/secret.d.ts +12 -0
  68. package/dist/auth/secret.d.ts.map +1 -0
  69. package/dist/auth/secret.js +32 -0
  70. package/dist/auth/secret.js.map +1 -0
  71. package/dist/auth/security-notices.d.ts +34 -0
  72. package/dist/auth/security-notices.d.ts.map +1 -0
  73. package/dist/auth/security-notices.js +81 -0
  74. package/dist/auth/security-notices.js.map +1 -0
  75. package/dist/auth/signup.d.ts +23 -0
  76. package/dist/auth/signup.d.ts.map +1 -0
  77. package/dist/auth/signup.js +61 -0
  78. package/dist/auth/signup.js.map +1 -0
  79. package/dist/auth/sso.d.ts +21 -0
  80. package/dist/auth/sso.d.ts.map +1 -0
  81. package/dist/auth/sso.js +35 -0
  82. package/dist/auth/sso.js.map +1 -0
  83. package/dist/auth/wire.d.ts +16 -0
  84. package/dist/auth/wire.d.ts.map +1 -0
  85. package/dist/auth/wire.js +47 -0
  86. package/dist/auth/wire.js.map +1 -0
  87. package/dist/changes.d.ts +15 -0
  88. package/dist/changes.d.ts.map +1 -0
  89. package/dist/changes.js +45 -0
  90. package/dist/changes.js.map +1 -0
  91. package/dist/cli-args.d.ts +1 -1
  92. package/dist/cli-args.d.ts.map +1 -1
  93. package/dist/cli-args.js +66 -14
  94. package/dist/cli-args.js.map +1 -1
  95. package/dist/cli.js +22 -2
  96. package/dist/cli.js.map +1 -1
  97. package/dist/config.d.ts +30 -4
  98. package/dist/config.d.ts.map +1 -1
  99. package/dist/config.js +37 -0
  100. package/dist/config.js.map +1 -1
  101. package/dist/copy-cli.d.ts +3 -0
  102. package/dist/copy-cli.d.ts.map +1 -0
  103. package/dist/copy-cli.js +24 -0
  104. package/dist/copy-cli.js.map +1 -0
  105. package/dist/db/db.d.ts +7 -2
  106. package/dist/db/db.d.ts.map +1 -1
  107. package/dist/db/db.js +28 -10
  108. package/dist/db/db.js.map +1 -1
  109. package/dist/db/migrate.d.ts +2 -2
  110. package/dist/db/migrate.d.ts.map +1 -1
  111. package/dist/db/migrate.js +15 -5
  112. package/dist/db/migrate.js.map +1 -1
  113. package/dist/db/schema-auth.d.ts +2 -0
  114. package/dist/db/schema-auth.d.ts.map +1 -0
  115. package/dist/db/schema-auth.js +93 -0
  116. package/dist/db/schema-auth.js.map +1 -0
  117. package/dist/db/schema-mail.d.ts +2 -0
  118. package/dist/db/schema-mail.d.ts.map +1 -0
  119. package/dist/db/schema-mail.js +8 -0
  120. package/dist/db/schema-mail.js.map +1 -0
  121. package/dist/db/schema-notify.d.ts +2 -0
  122. package/dist/db/schema-notify.d.ts.map +1 -0
  123. package/dist/db/schema-notify.js +26 -0
  124. package/dist/db/schema-notify.js.map +1 -0
  125. package/dist/db/schema-search.d.ts +2 -0
  126. package/dist/db/schema-search.d.ts.map +1 -0
  127. package/dist/db/schema-search.js +16 -0
  128. package/dist/db/schema-search.js.map +1 -0
  129. package/dist/db/schema-sso.d.ts +2 -0
  130. package/dist/db/schema-sso.d.ts.map +1 -0
  131. package/dist/db/schema-sso.js +17 -0
  132. package/dist/db/schema-sso.js.map +1 -0
  133. package/dist/db/schema.d.ts.map +1 -1
  134. package/dist/db/schema.js +10 -0
  135. package/dist/db/schema.js.map +1 -1
  136. package/dist/db/trigram.d.ts +4 -0
  137. package/dist/db/trigram.d.ts.map +1 -0
  138. package/dist/db/trigram.js +34 -0
  139. package/dist/db/trigram.js.map +1 -0
  140. package/dist/http/http.d.ts +2 -0
  141. package/dist/http/http.d.ts.map +1 -1
  142. package/dist/http/http.js +7 -3
  143. package/dist/http/http.js.map +1 -1
  144. package/dist/jobs.d.ts +1 -1
  145. package/dist/jobs.d.ts.map +1 -1
  146. package/dist/jobs.js +23 -11
  147. package/dist/jobs.js.map +1 -1
  148. package/dist/mail/blocks.d.ts +14 -0
  149. package/dist/mail/blocks.d.ts.map +1 -0
  150. package/dist/mail/blocks.js +35 -0
  151. package/dist/mail/blocks.js.map +1 -0
  152. package/dist/mail/content.d.ts +68 -0
  153. package/dist/mail/content.d.ts.map +1 -0
  154. package/dist/mail/content.js +6 -0
  155. package/dist/mail/content.js.map +1 -0
  156. package/dist/mail/emails-digest.d.ts +10 -0
  157. package/dist/mail/emails-digest.d.ts.map +1 -0
  158. package/dist/mail/emails-digest.js +55 -0
  159. package/dist/mail/emails-digest.js.map +1 -0
  160. package/dist/mail/emails-health.d.ts +6 -0
  161. package/dist/mail/emails-health.d.ts.map +1 -0
  162. package/dist/mail/emails-health.js +36 -0
  163. package/dist/mail/emails-health.js.map +1 -0
  164. package/dist/mail/emails-security.d.ts +14 -0
  165. package/dist/mail/emails-security.d.ts.map +1 -0
  166. package/dist/mail/emails-security.js +27 -0
  167. package/dist/mail/emails-security.js.map +1 -0
  168. package/dist/mail/emails-team.d.ts +11 -0
  169. package/dist/mail/emails-team.d.ts.map +1 -0
  170. package/dist/mail/emails-team.js +45 -0
  171. package/dist/mail/emails-team.js.map +1 -0
  172. package/dist/mail/emails.d.ts +9 -0
  173. package/dist/mail/emails.d.ts.map +1 -0
  174. package/dist/mail/emails.js +49 -0
  175. package/dist/mail/emails.js.map +1 -0
  176. package/dist/mail/layout.d.ts +6 -0
  177. package/dist/mail/layout.d.ts.map +1 -0
  178. package/dist/mail/layout.js +10 -0
  179. package/dist/mail/layout.js.map +1 -0
  180. package/dist/mail/mailer.d.ts +25 -0
  181. package/dist/mail/mailer.d.ts.map +1 -0
  182. package/dist/mail/mailer.js +50 -0
  183. package/dist/mail/mailer.js.map +1 -0
  184. package/dist/mail/preview.d.ts +6 -0
  185. package/dist/mail/preview.d.ts.map +1 -0
  186. package/dist/mail/preview.js +26 -0
  187. package/dist/mail/preview.js.map +1 -0
  188. package/dist/mail/resend.d.ts +13 -0
  189. package/dist/mail/resend.d.ts.map +1 -0
  190. package/dist/mail/resend.js +34 -0
  191. package/dist/mail/resend.js.map +1 -0
  192. package/dist/mail/samples.d.ts +3 -0
  193. package/dist/mail/samples.d.ts.map +1 -0
  194. package/dist/mail/samples.js +63 -0
  195. package/dist/mail/samples.js.map +1 -0
  196. package/dist/mail/stop-route.d.ts +4 -0
  197. package/dist/mail/stop-route.d.ts.map +1 -0
  198. package/dist/mail/stop-route.js +41 -0
  199. package/dist/mail/stop-route.js.map +1 -0
  200. package/dist/mail/svix.d.ts +8 -0
  201. package/dist/mail/svix.d.ts.map +1 -0
  202. package/dist/mail/svix.js +17 -0
  203. package/dist/mail/svix.js.map +1 -0
  204. package/dist/mail/templates.d.ts +12 -0
  205. package/dist/mail/templates.d.ts.map +1 -0
  206. package/dist/mail/templates.js +18 -0
  207. package/dist/mail/templates.js.map +1 -0
  208. package/dist/mail/text.d.ts +4 -0
  209. package/dist/mail/text.d.ts.map +1 -0
  210. package/dist/mail/text.js +17 -0
  211. package/dist/mail/text.js.map +1 -0
  212. package/dist/mail/theme.d.ts +32 -0
  213. package/dist/mail/theme.d.ts.map +1 -0
  214. package/dist/mail/theme.js +27 -0
  215. package/dist/mail/theme.js.map +1 -0
  216. package/dist/mail/unsubscribe.d.ts +14 -0
  217. package/dist/mail/unsubscribe.d.ts.map +1 -0
  218. package/dist/mail/unsubscribe.js +39 -0
  219. package/dist/mail/unsubscribe.js.map +1 -0
  220. package/dist/mail/webhook.d.ts +5 -0
  221. package/dist/mail/webhook.d.ts.map +1 -0
  222. package/dist/mail/webhook.js +41 -0
  223. package/dist/mail/webhook.js.map +1 -0
  224. package/dist/notify/digest-data.d.ts +32 -0
  225. package/dist/notify/digest-data.d.ts.map +1 -0
  226. package/dist/notify/digest-data.js +31 -0
  227. package/dist/notify/digest-data.js.map +1 -0
  228. package/dist/notify/digest.d.ts +17 -0
  229. package/dist/notify/digest.d.ts.map +1 -0
  230. package/dist/notify/digest.js +76 -0
  231. package/dist/notify/digest.js.map +1 -0
  232. package/dist/notify/health.d.ts +6 -0
  233. package/dist/notify/health.d.ts.map +1 -0
  234. package/dist/notify/health.js +42 -0
  235. package/dist/notify/health.js.map +1 -0
  236. package/dist/notify/team-describe.d.ts +22 -0
  237. package/dist/notify/team-describe.d.ts.map +1 -0
  238. package/dist/notify/team-describe.js +67 -0
  239. package/dist/notify/team-describe.js.map +1 -0
  240. package/dist/notify/team.d.ts +6 -0
  241. package/dist/notify/team.d.ts.map +1 -0
  242. package/dist/notify/team.js +56 -0
  243. package/dist/notify/team.js.map +1 -0
  244. package/dist/repo/alerts.d.ts +6 -2
  245. package/dist/repo/alerts.d.ts.map +1 -1
  246. package/dist/repo/alerts.js.map +1 -1
  247. package/dist/repo/auth-prune.d.ts +4 -0
  248. package/dist/repo/auth-prune.d.ts.map +1 -0
  249. package/dist/repo/auth-prune.js +8 -0
  250. package/dist/repo/auth-prune.js.map +1 -0
  251. package/dist/repo/mail-prefs.d.ts +35 -0
  252. package/dist/repo/mail-prefs.d.ts.map +1 -0
  253. package/dist/repo/mail-prefs.js +34 -0
  254. package/dist/repo/mail-prefs.js.map +1 -0
  255. package/dist/repo/orgs.d.ts +15 -25
  256. package/dist/repo/orgs.d.ts.map +1 -1
  257. package/dist/repo/orgs.js +18 -60
  258. package/dist/repo/orgs.js.map +1 -1
  259. package/dist/repo/services.d.ts +6 -0
  260. package/dist/repo/services.d.ts.map +1 -0
  261. package/dist/repo/services.js +16 -0
  262. package/dist/repo/services.js.map +1 -0
  263. package/dist/repo/suppressions.d.ts +8 -0
  264. package/dist/repo/suppressions.d.ts.map +1 -0
  265. package/dist/repo/suppressions.js +16 -0
  266. package/dist/repo/suppressions.js.map +1 -0
  267. package/dist/repo/trace-join.d.ts +9 -0
  268. package/dist/repo/trace-join.d.ts.map +1 -0
  269. package/dist/repo/trace-join.js +35 -0
  270. package/dist/repo/trace-join.js.map +1 -0
  271. package/dist/repo/trace-read.d.ts +6 -13
  272. package/dist/repo/trace-read.d.ts.map +1 -1
  273. package/dist/repo/trace-read.js +8 -3
  274. package/dist/repo/trace-read.js.map +1 -1
  275. package/dist/repo/trace-write.d.ts +5 -1
  276. package/dist/repo/trace-write.d.ts.map +1 -1
  277. package/dist/repo/trace-write.js +11 -2
  278. package/dist/repo/trace-write.js.map +1 -1
  279. package/dist/repo/users.d.ts +5 -16
  280. package/dist/repo/users.d.ts.map +1 -1
  281. package/dist/repo/users.js +2 -60
  282. package/dist/repo/users.js.map +1 -1
  283. package/dist/routes/alerts.d.ts.map +1 -1
  284. package/dist/routes/alerts.js +23 -6
  285. package/dist/routes/alerts.js.map +1 -1
  286. package/dist/routes/changes.d.ts +4 -0
  287. package/dist/routes/changes.d.ts.map +1 -0
  288. package/dist/routes/changes.js +19 -0
  289. package/dist/routes/changes.js.map +1 -0
  290. package/dist/routes/data.d.ts.map +1 -1
  291. package/dist/routes/data.js +24 -9
  292. package/dist/routes/data.js.map +1 -1
  293. package/dist/routes/index.d.ts.map +1 -1
  294. package/dist/routes/index.js +8 -2
  295. package/dist/routes/index.js.map +1 -1
  296. package/dist/routes/ingest.d.ts.map +1 -1
  297. package/dist/routes/ingest.js +7 -2
  298. package/dist/routes/ingest.js.map +1 -1
  299. package/dist/routes/mcp.d.ts.map +1 -1
  300. package/dist/routes/mcp.js +42 -25
  301. package/dist/routes/mcp.js.map +1 -1
  302. package/dist/routes/me.d.ts +4 -0
  303. package/dist/routes/me.d.ts.map +1 -0
  304. package/dist/routes/me.js +37 -0
  305. package/dist/routes/me.js.map +1 -0
  306. package/dist/routes/metrics.d.ts +2 -2
  307. package/dist/routes/metrics.d.ts.map +1 -1
  308. package/dist/routes/metrics.js +2 -3
  309. package/dist/routes/metrics.js.map +1 -1
  310. package/dist/routes/models.d.ts +2 -0
  311. package/dist/routes/models.d.ts.map +1 -1
  312. package/dist/routes/models.js +10 -5
  313. package/dist/routes/models.js.map +1 -1
  314. package/dist/routes/notify.d.ts +4 -0
  315. package/dist/routes/notify.d.ts.map +1 -0
  316. package/dist/routes/notify.js +55 -0
  317. package/dist/routes/notify.js.map +1 -0
  318. package/dist/routes/orgs.d.ts.map +1 -1
  319. package/dist/routes/orgs.js +34 -53
  320. package/dist/routes/orgs.js.map +1 -1
  321. package/dist/routes/projects.d.ts.map +1 -1
  322. package/dist/routes/projects.js +5 -3
  323. package/dist/routes/projects.js.map +1 -1
  324. package/dist/routes/search.d.ts +4 -0
  325. package/dist/routes/search.d.ts.map +1 -0
  326. package/dist/routes/search.js +33 -0
  327. package/dist/routes/search.js.map +1 -0
  328. package/dist/routes/shares.d.ts.map +1 -1
  329. package/dist/routes/shares.js +8 -5
  330. package/dist/routes/shares.js.map +1 -1
  331. package/dist/server.d.ts +2 -0
  332. package/dist/server.d.ts.map +1 -1
  333. package/dist/server.js +59 -16
  334. package/dist/server.js.map +1 -1
  335. package/dist/settle.d.ts +7 -6
  336. package/dist/settle.d.ts.map +1 -1
  337. package/dist/settle.js +30 -13
  338. package/dist/settle.js.map +1 -1
  339. package/dist/telemetry/cached.d.ts +11 -0
  340. package/dist/telemetry/cached.d.ts.map +1 -0
  341. package/dist/telemetry/cached.js +30 -0
  342. package/dist/telemetry/cached.js.map +1 -0
  343. package/dist/telemetry/ch/admin.d.ts +10 -0
  344. package/dist/telemetry/ch/admin.d.ts.map +1 -0
  345. package/dist/telemetry/ch/admin.js +65 -0
  346. package/dist/telemetry/ch/admin.js.map +1 -0
  347. package/dist/telemetry/ch/http.d.ts +19 -0
  348. package/dist/telemetry/ch/http.d.ts.map +1 -0
  349. package/dist/telemetry/ch/http.js +91 -0
  350. package/dist/telemetry/ch/http.js.map +1 -0
  351. package/dist/telemetry/ch/metrics.d.ts +10 -0
  352. package/dist/telemetry/ch/metrics.d.ts.map +1 -0
  353. package/dist/telemetry/ch/metrics.js +61 -0
  354. package/dist/telemetry/ch/metrics.js.map +1 -0
  355. package/dist/telemetry/ch/queries.d.ts +19 -0
  356. package/dist/telemetry/ch/queries.d.ts.map +1 -0
  357. package/dist/telemetry/ch/queries.js +30 -0
  358. package/dist/telemetry/ch/queries.js.map +1 -0
  359. package/dist/telemetry/ch/queue.d.ts +34 -0
  360. package/dist/telemetry/ch/queue.d.ts.map +1 -0
  361. package/dist/telemetry/ch/queue.js +79 -0
  362. package/dist/telemetry/ch/queue.js.map +1 -0
  363. package/dist/telemetry/ch/read.d.ts +12 -0
  364. package/dist/telemetry/ch/read.d.ts.map +1 -0
  365. package/dist/telemetry/ch/read.js +72 -0
  366. package/dist/telemetry/ch/read.js.map +1 -0
  367. package/dist/telemetry/ch/schema-facts.d.ts +6 -0
  368. package/dist/telemetry/ch/schema-facts.d.ts.map +1 -0
  369. package/dist/telemetry/ch/schema-facts.js +49 -0
  370. package/dist/telemetry/ch/schema-facts.js.map +1 -0
  371. package/dist/telemetry/ch/schema-raw.d.ts +8 -0
  372. package/dist/telemetry/ch/schema-raw.d.ts.map +1 -0
  373. package/dist/telemetry/ch/schema-raw.js +35 -0
  374. package/dist/telemetry/ch/schema-raw.js.map +1 -0
  375. package/dist/telemetry/ch/schema-rollups.d.ts +2 -0
  376. package/dist/telemetry/ch/schema-rollups.d.ts.map +1 -0
  377. package/dist/telemetry/ch/schema-rollups.js +61 -0
  378. package/dist/telemetry/ch/schema-rollups.js.map +1 -0
  379. package/dist/telemetry/ch/schema.d.ts +12 -0
  380. package/dist/telemetry/ch/schema.d.ts.map +1 -0
  381. package/dist/telemetry/ch/schema.js +25 -0
  382. package/dist/telemetry/ch/schema.js.map +1 -0
  383. package/dist/telemetry/ch/settle-rows.d.ts +13 -0
  384. package/dist/telemetry/ch/settle-rows.d.ts.map +1 -0
  385. package/dist/telemetry/ch/settle-rows.js +67 -0
  386. package/dist/telemetry/ch/settle-rows.js.map +1 -0
  387. package/dist/telemetry/ch/settle.d.ts +7 -0
  388. package/dist/telemetry/ch/settle.d.ts.map +1 -0
  389. package/dist/telemetry/ch/settle.js +96 -0
  390. package/dist/telemetry/ch/settle.js.map +1 -0
  391. package/dist/telemetry/ch/store.d.ts +16 -0
  392. package/dist/telemetry/ch/store.d.ts.map +1 -0
  393. package/dist/telemetry/ch/store.js +65 -0
  394. package/dist/telemetry/ch/store.js.map +1 -0
  395. package/dist/telemetry/ch/util.d.ts +20 -0
  396. package/dist/telemetry/ch/util.d.ts.map +1 -0
  397. package/dist/telemetry/ch/util.js +45 -0
  398. package/dist/telemetry/ch/util.js.map +1 -0
  399. package/dist/telemetry/ch/write.d.ts +11 -0
  400. package/dist/telemetry/ch/write.d.ts.map +1 -0
  401. package/dist/telemetry/ch/write.js +59 -0
  402. package/dist/telemetry/ch/write.js.map +1 -0
  403. package/dist/telemetry/copy.d.ts +9 -0
  404. package/dist/telemetry/copy.d.ts.map +1 -0
  405. package/dist/telemetry/copy.js +60 -0
  406. package/dist/telemetry/copy.js.map +1 -0
  407. package/dist/telemetry/index.d.ts +11 -0
  408. package/dist/telemetry/index.d.ts.map +1 -0
  409. package/dist/telemetry/index.js +21 -0
  410. package/dist/telemetry/index.js.map +1 -0
  411. package/dist/telemetry/pg-store.d.ts +5 -0
  412. package/dist/telemetry/pg-store.d.ts.map +1 -0
  413. package/dist/telemetry/pg-store.js +78 -0
  414. package/dist/telemetry/pg-store.js.map +1 -0
  415. package/dist/telemetry/store.d.ts +74 -0
  416. package/dist/telemetry/store.d.ts.map +1 -0
  417. package/dist/telemetry/store.js +2 -0
  418. package/dist/telemetry/store.js.map +1 -0
  419. package/package.json +20 -6
  420. package/dist/routes/auth.d.ts +0 -4
  421. package/dist/routes/auth.d.ts.map +0 -1
  422. package/dist/routes/auth.js +0 -106
  423. package/dist/routes/auth.js.map +0 -1
@@ -0,0 +1,34 @@
1
+ export const DIGEST_PERIODS = ["daily", "weekly", "monthly"];
2
+ /** A project with no saved choice gets the weekly digest only. */
3
+ export const DEFAULT_DIGEST = { daily: false, weekly: true, monthly: false };
4
+ export const DEFAULT_PREFS = { team: true, health: true, digests: true, timeZone: "UTC", digestHour: 8 };
5
+ export async function prefsOf(q, userId) {
6
+ const [r] = await q.query("SELECT team, health, digests, time_zone, digest_hour FROM mail_prefs WHERE user_id = $1", [userId]);
7
+ return r ? { team: r.team, health: r.health, digests: r.digests, timeZone: r.time_zone, digestHour: r.digest_hour } : { ...DEFAULT_PREFS };
8
+ }
9
+ export async function savePrefs(q, userId, patch) {
10
+ const p = { ...(await prefsOf(q, userId)), ...patch };
11
+ await q.query(`INSERT INTO mail_prefs (user_id, team, health, digests, time_zone, digest_hour) VALUES ($1, $2, $3, $4, $5, $6)
12
+ ON CONFLICT (user_id) DO UPDATE SET team = $2, health = $3, digests = $4, time_zone = $5, digest_hour = $6`, [userId, p.team, p.health, p.digests, p.timeZone, p.digestHour]);
13
+ return p;
14
+ }
15
+ /** Saved digest choices by project. Projects not in the map use DEFAULT_DIGEST. */
16
+ export async function digestPrefsOf(q, userId) {
17
+ const rows = await q.query("SELECT project_id, daily, weekly, monthly FROM digest_prefs WHERE user_id = $1", [userId]);
18
+ return new Map(rows.map((r) => [r.project_id, { daily: r.daily, weekly: r.weekly, monthly: r.monthly }]));
19
+ }
20
+ export async function saveDigestPref(q, userId, projectId, patch) {
21
+ const p = { ...((await digestPrefsOf(q, userId)).get(projectId) ?? DEFAULT_DIGEST), ...patch };
22
+ await q.query(`INSERT INTO digest_prefs (user_id, project_id, daily, weekly, monthly) VALUES ($1, $2, $3, $4, $5)
23
+ ON CONFLICT (user_id, project_id) DO UPDATE SET daily = $3, weekly = $4, monthly = $5`, [userId, projectId, p.daily, p.weekly, p.monthly]);
24
+ }
25
+ /** Turn off what a stop link names. */
26
+ export async function applyStop(q, userId, scope) {
27
+ if (typeof scope === "object")
28
+ return saveDigestPref(q, userId, scope.projectId, { [scope.period]: false });
29
+ await savePrefs(q, userId, { [scope]: false });
30
+ }
31
+ /** Owners and admins of an organization who keep this kind of notice on. With real mail, only confirmed addresses. */
32
+ export const managersOf = async (q, orgId, pref, confirmedOnly) => q.query(`SELECT u.id, u.email, u.name FROM members m JOIN users u ON u.id = m.user_id LEFT JOIN mail_prefs p ON p.user_id = u.id
33
+ WHERE m.org_id = $1 AND m.role IN ('owner', 'admin') AND COALESCE(p.${pref}, TRUE) AND (u.email_verified OR NOT $2) ORDER BY u.email`, [orgId, confirmedOnly]);
34
+ //# sourceMappingURL=mail-prefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-prefs.js","sourceRoot":"","sources":["../../src/repo/mail-prefs.ts"],"names":[],"mappings":"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"}
@@ -10,38 +10,28 @@ export interface Membership extends Org {
10
10
  role: Role;
11
11
  }
12
12
  export interface Member {
13
+ /** The membership id Better Auth uses to change a role. */
14
+ memberId: string;
13
15
  userId: string;
14
16
  email: string;
15
17
  name: string;
16
18
  role: Role;
17
19
  sinceMs: number;
18
20
  }
19
- /** A new organization with `ownerId` as its owner. */
20
- export declare function createOrg(q: Queryable, name: string, ownerId: string, now: number, retentionDays?: number): Promise<Org>;
21
- export declare const orgsOfUser: (q: Queryable, userId: string) => Promise<Membership[]>;
22
- export declare function membership(q: Queryable, userId: string, orgId: string): Promise<Membership | undefined>;
23
- export declare function updateOrg(q: Queryable, orgId: string, change: {
24
- name?: string;
25
- retentionDays?: number;
26
- }): Promise<void>;
27
- export declare const listMembers: (q: Queryable, orgId: string) => Promise<Member[]>;
28
- export declare function setRole(q: Queryable, orgId: string, userId: string, role: Role): Promise<void>;
29
- export declare function removeMember(q: Queryable, orgId: string, userId: string): Promise<void>;
30
- export declare function ownerCount(q: Queryable, orgId: string): Promise<number>;
31
- /** A new invite link token for one email address. Valid for 7 days. */
32
- export declare function createInvite(q: Queryable, orgId: string, email: string, role: Role, by: string, now: number): Promise<string>;
33
- export interface Invite {
34
- orgId: string;
35
- orgName: string;
36
- email: string;
37
- role: Role;
38
- }
39
- export declare function openInvite(q: Queryable, token: string, now: number): Promise<Invite | undefined>;
40
- /** Join the organization of an open invite. The invite then cannot be used again. */
41
- export declare function acceptInvite(q: Queryable, token: string, userId: string, now: number): Promise<Invite | undefined>;
42
- export declare const pendingInvites: (q: Queryable, orgId: string, now: number) => Promise<{
21
+ export interface PendingInvite {
22
+ id: string;
43
23
  email: string;
44
24
  role: Role;
45
25
  expiresMs: number;
46
- }[]>;
26
+ }
27
+ /** A slug no organization has yet, from the name. */
28
+ export declare function freeSlug(q: Queryable, name: string): Promise<string>;
29
+ export declare const orgsOfUser: (q: Queryable, userId: string) => Promise<Membership[]>;
30
+ export declare function membership(q: Queryable, userId: string, orgId: string): Promise<Membership | undefined>;
31
+ export declare function setRetention(q: Queryable, orgId: string, retentionDays: number): Promise<void>;
32
+ export declare const listMembers: (q: Queryable, orgId: string) => Promise<Member[]>;
33
+ /** Open invites. Their ids are the secret part of the link, so only managers see them. */
34
+ export declare const pendingInvites: (q: Queryable, orgId: string) => Promise<PendingInvite[]>;
35
+ /** Delete an organization: every project's data first, then the row (members, invites, projects, keys, alerts, and shares go with it). */
36
+ export declare function deleteOrgEverything(q: Queryable, orgId: string): Promise<void>;
47
37
  //# sourceMappingURL=orgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/repo/orgs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAaD,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,SAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAK1H;AAED,eAAO,MAAM,UAAU,MAAO,SAAS,UAAU,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CACqE,CAAC;AAEpJ,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAM7G;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7H;AAED,eAAO,MAAM,WAAW,MAAO,SAAS,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAKvE,CAAC;AAEJ,wBAAsB,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7E;AAED,uEAAuE;AACvE,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYnI;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOtG;AAED,qFAAqF;AACrF,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMxH;AAED,eAAO,MAAM,cAAc,MAAO,SAAS,SAAS,MAAM,OAAO,MAAM;WACpD,MAAM;UAAQ,IAAI;eAAa,MAAM;IAGrD,CAAC"}
1
+ {"version":3,"file":"orgs.d.ts","sourceRoot":"","sources":["../../src/repo/orgs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,MAAM;IACrB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD,qDAAqD;AACrD,wBAAsB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1E;AAED,eAAO,MAAM,UAAU,MAAO,SAAS,UAAU,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CACqE,CAAC;AAEpJ,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAG7G;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED,eAAO,MAAM,WAAW,MAAO,SAAS,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAKvE,CAAC;AAEJ,0FAA0F;AAC1F,eAAO,MAAM,cAAc,MAAO,SAAS,SAAS,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAIjF,CAAC;AAEJ,0IAA0I;AAC1I,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF"}
package/dist/repo/orgs.js CHANGED
@@ -1,8 +1,9 @@
1
- import { hashToken, newId, newToken, slugOf } from "../auth/crypto.js";
2
- import { normalizeEmail } from "./users.js";
3
- const INVITE_MS = 7 * 24 * 60 * 60_000;
4
- const ORG_COLUMNS = "o.id, o.name, o.slug, o.retention_days AS \"retentionDays\"";
5
- async function freeSlug(q, name) {
1
+ import { slugOf } from "../auth/crypto.js";
2
+ import { deleteProjectData } from "./projects.js";
3
+ const ORG_COLUMNS = `o.id, o.name, o.slug, o.retention_days AS "retentionDays"`;
4
+ const ms = (column) => `(extract(epoch FROM ${column}) * 1000)::double precision`;
5
+ /** A slug no organization has yet, from the name. */
6
+ export async function freeSlug(q, name) {
6
7
  const base = slugOf(name);
7
8
  const taken = new Set((await q.query("SELECT slug FROM orgs WHERE slug LIKE $1", [`${base}%`])).map((r) => r.slug));
8
9
  let slug = base;
@@ -10,66 +11,23 @@ async function freeSlug(q, name) {
10
11
  slug = `${base}-${i}`;
11
12
  return slug;
12
13
  }
13
- /** A new organization with `ownerId` as its owner. */
14
- export async function createOrg(q, name, ownerId, now, retentionDays = 30) {
15
- const org = { id: newId(), name: name.trim().slice(0, 100) || "My organization", slug: await freeSlug(q, name), retentionDays };
16
- await q.query("INSERT INTO orgs (id, name, slug, retention_days, created_ms) VALUES ($1, $2, $3, $4, $5)", [org.id, org.name, org.slug, retentionDays, now]);
17
- await q.query("INSERT INTO members (org_id, user_id, role, created_ms) VALUES ($1, $2, 'owner', $3)", [org.id, ownerId, now]);
18
- return org;
19
- }
20
14
  export const orgsOfUser = (q, userId) => q.query(`SELECT ${ORG_COLUMNS}, m.role FROM members m JOIN orgs o ON o.id = m.org_id WHERE m.user_id = $1 ORDER BY o.name`, [userId]);
21
15
  export async function membership(q, userId, orgId) {
22
- const [row] = await q.query(`SELECT ${ORG_COLUMNS}, m.role FROM members m JOIN orgs o ON o.id = m.org_id WHERE m.user_id = $1 AND m.org_id = $2`, [
23
- userId,
24
- orgId,
25
- ]);
16
+ const [row] = await q.query(`SELECT ${ORG_COLUMNS}, m.role FROM members m JOIN orgs o ON o.id = m.org_id WHERE m.user_id = $1 AND m.org_id = $2`, [userId, orgId]);
26
17
  return row;
27
18
  }
28
- export async function updateOrg(q, orgId, change) {
29
- if (change.name !== undefined)
30
- await q.query("UPDATE orgs SET name = $1 WHERE id = $2", [change.name.trim().slice(0, 100), orgId]);
31
- if (change.retentionDays !== undefined)
32
- await q.query("UPDATE orgs SET retention_days = $1 WHERE id = $2", [change.retentionDays, orgId]);
19
+ export async function setRetention(q, orgId, retentionDays) {
20
+ await q.query("UPDATE orgs SET retention_days = $1 WHERE id = $2", [retentionDays, orgId]);
33
21
  }
34
- export const listMembers = (q, orgId) => q.query(`SELECT u.id AS "userId", u.email, u.name, m.role, m.created_ms AS "sinceMs" FROM members m JOIN users u ON u.id = m.user_id
22
+ export const listMembers = (q, orgId) => q.query(`SELECT m.id AS "memberId", u.id AS "userId", u.email, u.name, m.role, ${ms("m.created_at")} AS "sinceMs" FROM members m JOIN users u ON u.id = m.user_id
35
23
  WHERE m.org_id = $1 ORDER BY u.name`, [orgId]);
36
- export async function setRole(q, orgId, userId, role) {
37
- await q.query("UPDATE members SET role = $1 WHERE org_id = $2 AND user_id = $3", [role, orgId, userId]);
38
- }
39
- export async function removeMember(q, orgId, userId) {
40
- await q.query("DELETE FROM members WHERE org_id = $1 AND user_id = $2", [orgId, userId]);
41
- }
42
- export async function ownerCount(q, orgId) {
43
- const [row] = await q.query("SELECT count(*)::int AS n FROM members WHERE org_id = $1 AND role = 'owner'", [orgId]);
44
- return row?.n ?? 0;
45
- }
46
- /** A new invite link token for one email address. Valid for 7 days. */
47
- export async function createInvite(q, orgId, email, role, by, now) {
48
- const token = newToken("invite");
49
- await q.query("INSERT INTO invites (token_hash, org_id, email, role, created_by, created_ms, expires_ms) VALUES ($1, $2, $3, $4, $5, $6, $7)", [
50
- hashToken(token),
51
- orgId,
52
- normalizeEmail(email),
53
- role,
54
- by,
55
- now,
56
- now + INVITE_MS,
57
- ]);
58
- return token;
59
- }
60
- export async function openInvite(q, token, now) {
61
- const [row] = await q.query(`SELECT i.org_id AS "orgId", o.name AS "orgName", i.email, i.role FROM invites i JOIN orgs o ON o.id = i.org_id
62
- WHERE i.token_hash = $1 AND i.accepted_ms IS NULL AND i.expires_ms > $2`, [hashToken(token), now]);
63
- return row;
64
- }
65
- /** Join the organization of an open invite. The invite then cannot be used again. */
66
- export async function acceptInvite(q, token, userId, now) {
67
- const invite = await openInvite(q, token, now);
68
- if (!invite)
69
- return undefined;
70
- await q.query("UPDATE invites SET accepted_ms = $1 WHERE token_hash = $2", [now, hashToken(token)]);
71
- await q.query("INSERT INTO members (org_id, user_id, role, created_ms) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING", [invite.orgId, userId, invite.role, now]);
72
- return invite;
24
+ /** Open invites. Their ids are the secret part of the link, so only managers see them. */
25
+ export const pendingInvites = (q, orgId) => q.query(`SELECT id, email, role, ${ms("expires_at")} AS "expiresMs" FROM invites WHERE org_id = $1 AND status = 'pending' AND expires_at > now() ORDER BY created_at DESC`, [orgId]);
26
+ /** Delete an organization: every project's data first, then the row (members, invites, projects, keys, alerts, and shares go with it). */
27
+ export async function deleteOrgEverything(q, orgId) {
28
+ for (const { id } of await q.query("SELECT id FROM projects WHERE org_id = $1", [orgId]))
29
+ await deleteProjectData(q, id);
30
+ await q.query("DELETE FROM audit WHERE org_id = $1", [orgId]);
31
+ await q.query("DELETE FROM orgs WHERE id = $1", [orgId]);
73
32
  }
74
- export const pendingInvites = (q, orgId, now) => q.query(`SELECT email, role, expires_ms AS "expiresMs" FROM invites WHERE org_id = $1 AND accepted_ms IS NULL AND expires_ms > $2 ORDER BY created_ms DESC`, [orgId, now]);
75
33
  //# sourceMappingURL=orgs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/repo/orgs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/repo/orgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAgClD,MAAM,WAAW,GAAG,2DAA2D,CAAC;AAChF,MAAM,EAAE,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,uBAAuB,MAAM,6BAA6B,CAAC;AAE1F,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAY,EAAE,IAAY;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAmB,0CAA0C,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtI,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,MAAc,EAAyB,EAAE,CAChF,CAAC,CAAC,KAAK,CAAa,UAAU,WAAW,6FAA6F,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpJ,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAY,EAAE,MAAc,EAAE,KAAa;IAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAa,UAAU,WAAW,+FAA+F,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/K,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAY,EAAE,KAAa,EAAE,aAAqB;IACnF,MAAM,CAAC,CAAC,KAAK,CAAC,mDAAmD,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAY,EAAE,KAAa,EAAqB,EAAE,CAC5E,CAAC,CAAC,KAAK,CACL,yEAAyE,EAAE,CAAC,cAAc,CAAC;yCACtD,EACrC,CAAC,KAAK,CAAC,CACR,CAAC;AAEJ,0FAA0F;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAY,EAAE,KAAa,EAA4B,EAAE,CACtF,CAAC,CAAC,KAAK,CACL,2BAA2B,EAAE,CAAC,YAAY,CAAC,uHAAuH,EAClK,CAAC,KAAK,CAAC,CACR,CAAC;AAEJ,0IAA0I;AAC1I,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,CAAY,EAAE,KAAa;IACnE,KAAK,MAAM,EAAE,EAAE,EAAE,IAAI,MAAM,CAAC,CAAC,KAAK,CAAiB,2CAA2C,EAAE,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzI,MAAM,CAAC,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Queryable } from "../db/db.js";
2
+ /** Drop registry rows not heard from within the organization's retention, like the traces they sent. Returns how many. */
3
+ export declare function pruneServices(q: Queryable, now: number): Promise<number>;
4
+ /** Forget a project's offline hosts (old pods). The newest host of each service stays, so no service drops off the list. */
5
+ export declare function forgetOfflineServices(q: Queryable, projectId: string, now: number): Promise<number>;
6
+ //# sourceMappingURL=services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/repo/services.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,0HAA0H;AAC1H,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9E;AAED,4HAA4H;AAC5H,wBAAsB,qBAAqB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzG"}
@@ -0,0 +1,16 @@
1
+ import { HUB_ONLINE_MS } from "@wizeworks/lens-core";
2
+ /** Drop registry rows not heard from within the organization's retention, like the traces they sent. Returns how many. */
3
+ export async function pruneServices(q, now) {
4
+ const rows = await q.query(`DELETE FROM services s USING projects p, orgs o WHERE p.id = s.project_id AND o.id = p.org_id
5
+ AND s.last_seen < $1 - o.retention_days * 86400000.0 RETURNING s.host`, [now]);
6
+ return rows.length;
7
+ }
8
+ /** Forget a project's offline hosts (old pods). The newest host of each service stays, so no service drops off the list. */
9
+ export async function forgetOfflineServices(q, projectId, now) {
10
+ const rows = await q.query(`DELETE FROM services s WHERE s.project_id = $1 AND s.last_seen < $2 AND EXISTS (
11
+ SELECT 1 FROM services n WHERE n.project_id = s.project_id AND n.service = s.service AND n.environment = s.environment
12
+ AND COALESCE(n.info::jsonb->>'project', '') = COALESCE(s.info::jsonb->>'project', '') AND n.last_seen > s.last_seen
13
+ ) RETURNING s.host`, [projectId, now - HUB_ONLINE_MS]);
14
+ return rows.length;
15
+ }
16
+ //# sourceMappingURL=services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/repo/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,0HAA0H;AAC1H,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAY,EAAE,GAAW;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CACxB;2EACuE,EACvE,CAAC,GAAG,CAAC,CACN,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,4HAA4H;AAC5H,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,CAAY,EAAE,SAAiB,EAAE,GAAW;IACtF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CACxB;;;wBAGoB,EACpB,CAAC,SAAS,EAAE,GAAG,GAAG,aAAa,CAAC,CACjC,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Queryable } from "../db/db.js";
2
+ export type SuppressReason = "bounce" | "complaint";
3
+ /** Skip this address from now on. A bounce wins over a complaint, since nothing can reach the address. */
4
+ export declare function suppress(q: Queryable, email: string, reason: SuppressReason, detail: string, now: number): Promise<void>;
5
+ export declare function suppressionOf(q: Queryable, email: string): Promise<SuppressReason | null>;
6
+ /** The person proved the address works (they opened a link sent to it), so mail may go there again. */
7
+ export declare function unsuppress(q: Queryable, email: string): Promise<void>;
8
+ //# sourceMappingURL=suppressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppressions.d.ts","sourceRoot":"","sources":["../../src/repo/suppressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;AAIpD,0GAA0G;AAC1G,wBAAsB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9H;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAG/F;AAED,uGAAuG;AACvG,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E"}
@@ -0,0 +1,16 @@
1
+ const norm = (email) => email.trim().toLowerCase();
2
+ /** Skip this address from now on. A bounce wins over a complaint, since nothing can reach the address. */
3
+ export async function suppress(q, email, reason, detail, now) {
4
+ await q.query(`INSERT INTO mail_suppressions (email, reason, detail, created_ms) VALUES ($1, $2, $3, $4)
5
+ ON CONFLICT (email) DO UPDATE SET reason = CASE WHEN mail_suppressions.reason = 'bounce' THEN 'bounce' ELSE EXCLUDED.reason END,
6
+ detail = EXCLUDED.detail, created_ms = EXCLUDED.created_ms`, [norm(email), reason, detail.slice(0, 500), now]);
7
+ }
8
+ export async function suppressionOf(q, email) {
9
+ const rows = await q.query("SELECT reason FROM mail_suppressions WHERE email = $1", [norm(email)]);
10
+ return rows[0]?.reason ?? null;
11
+ }
12
+ /** The person proved the address works (they opened a link sent to it), so mail may go there again. */
13
+ export async function unsuppress(q, email) {
14
+ await q.query("DELETE FROM mail_suppressions WHERE email = $1", [norm(email)]);
15
+ }
16
+ //# sourceMappingURL=suppressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/repo/suppressions.ts"],"names":[],"mappings":"AAIA,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAE3D,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAY,EAAE,KAAa,EAAE,MAAsB,EAAE,MAAc,EAAE,GAAW;IAC7G,MAAM,CAAC,CAAC,KAAK,CACX;;kEAE8D,EAC9D,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAY,EAAE,KAAa;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAA6B,uDAAuD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/H,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAY,EAAE,KAAa;IAC1D,MAAM,CAAC,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type Trace } from "@wizeworks/lens-core";
2
+ import type { Queryable } from "../db/db.js";
3
+ /** Every project of one organization. */
4
+ export declare function orgProjectIds(q: Queryable, orgId: string): Promise<string[]>;
5
+ /** The projects of `ids` that belong to `orgId`. Anything outside the organization is dropped. */
6
+ export declare function inOrg(q: Queryable, orgId: string, ids: readonly string[]): Promise<string[]>;
7
+ /** One trace with its parts from the projects in `scope` (already checked: same organization, readable by the caller). Undefined when the primary project has no part. */
8
+ export declare function getJoinedTrace(q: Queryable, primaryId: string, scope: readonly string[], traceId: string): Promise<Trace | undefined>;
9
+ //# sourceMappingURL=trace-join.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-join.d.ts","sourceRoot":"","sources":["../../src/repo/trace-join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C,yCAAyC;AACzC,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGlF;AAED,kGAAkG;AAClG,wBAAsB,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAIlG;AASD,0KAA0K;AAC1K,wBAAsB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAU3I"}
@@ -0,0 +1,35 @@
1
+ import { buildTrace } from "@wizeworks/lens-core";
2
+ import { getTrace } from "./trace-read.js";
3
+ /** Every project of one organization. */
4
+ export async function orgProjectIds(q, orgId) {
5
+ const rows = await q.query("SELECT id FROM projects WHERE org_id = $1", [orgId]);
6
+ return rows.map((r) => r.id);
7
+ }
8
+ /** The projects of `ids` that belong to `orgId`. Anything outside the organization is dropped. */
9
+ export async function inOrg(q, orgId, ids) {
10
+ if (ids.length === 0)
11
+ return [];
12
+ const rows = await q.query("SELECT id FROM projects WHERE org_id = $1 AND id = ANY($2)", [orgId, [...ids]]);
13
+ return rows.map((r) => r.id);
14
+ }
15
+ async function partsOf(q, projectIds, traceId) {
16
+ const ids = [...projectIds];
17
+ const spans = await q.query("SELECT json FROM spans WHERE project_id = ANY($1) AND trace_id = $2", [ids, traceId]);
18
+ const logs = await q.query("SELECT json FROM logs WHERE project_id = ANY($1) AND trace_id = $2", [ids, traceId]);
19
+ return { spans: spans.map((r) => JSON.parse(r.json)), logs: logs.map((r) => JSON.parse(r.json)) };
20
+ }
21
+ /** One trace with its parts from the projects in `scope` (already checked: same organization, readable by the caller). Undefined when the primary project has no part. */
22
+ export async function getJoinedTrace(q, primaryId, scope, traceId) {
23
+ const own = await getTrace(q, primaryId, traceId);
24
+ const others = scope.filter((id) => id !== primaryId);
25
+ if (!own || others.length === 0)
26
+ return own;
27
+ const extra = await partsOf(q, others, traceId);
28
+ if (extra.spans.length + extra.logs.length === 0)
29
+ return own;
30
+ const seen = new Set(own.spans.map((s) => s.spanId));
31
+ const spans = [...own.spans, ...extra.spans.filter((s) => !seen.has(s.spanId) && seen.add(s.spanId))];
32
+ const logs = [...own.logs, ...extra.logs].sort((a, b) => a.timeMs - b.timeMs);
33
+ return buildTrace(traceId, spans, logs, []);
34
+ }
35
+ //# sourceMappingURL=trace-join.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-join.js","sourceRoot":"","sources":["../../src/repo/trace-join.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,7 @@
1
1
  import { type HubService, type Trace } from "@wizeworks/lens-core";
2
2
  import type { Queryable } from "../db/db.js";
3
- export interface TraceQuery {
4
- projectId: string;
5
- /** Changed at or after (server clock). */
6
- since?: number;
7
- /** Started before. For paging back. */
8
- before?: number;
9
- /** Started at or after. For time windows. */
10
- from?: number;
11
- env?: string;
12
- session?: string;
13
- limit: number;
14
- }
3
+ import type { TraceQuery } from "../telemetry/store.js";
4
+ export type { TraceQuery };
15
5
  export declare function findTraceIds(q: Queryable, t: TraceQuery): Promise<string[]>;
16
6
  /** Full traces, in the order of `ids`. */
17
7
  export declare function loadTraces(q: Queryable, projectId: string, ids: readonly string[]): Promise<Trace[]>;
@@ -20,7 +10,10 @@ export declare function getTrace(q: Queryable, projectId: string, traceId: strin
20
10
  /** How many traces started in [from, to). */
21
11
  export declare function countTraces(q: Queryable, projectId: string, from: number, to: number, env?: string): Promise<number>;
22
12
  export declare function listServices(q: Queryable, projectId: string, now: number): Promise<HubService[]>;
23
- export declare function environmentsOf(q: Queryable, projectId: string): Promise<string[]>;
13
+ /** Environments of the project's services, plus those seen on traces (from the telemetry store). */
14
+ export declare function environmentsOf(q: Queryable, projectId: string, traceEnvs: readonly string[]): Promise<string[]>;
15
+ /** Environments seen on a project's traces (Postgres store). */
16
+ export declare function traceEnvsPg(q: Queryable, projectId: string): Promise<string[]>;
24
17
  export declare function countRows(q: Queryable, projectId: string): Promise<{
25
18
  traces: number;
26
19
  spans: number;
@@ -1 +1 @@
1
- {"version":3,"file":"trace-read.d.ts","sourceRoot":"","sources":["../../src/repo/trace-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,UAAU,EAA6B,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAejF;AAmBD,0CAA0C;AAC1C,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAS1G;AAED,eAAO,MAAM,WAAW,MAAa,SAAS,KAAK,UAAU,KAAG,OAAO,CAAC,KAAK,EAAE,CAAyD,CAAC;AAEzI,wBAAsB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAG3G;AAED,6CAA6C;AAC7C,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1H;AASD,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGtG;AAED,wBAAsB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGvF;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAG3G"}
1
+ {"version":3,"file":"trace-read.d.ts","sourceRoot":"","sources":["../../src/repo/trace-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,UAAU,EAA6B,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,YAAY,EAAE,UAAU,EAAE,CAAC;AAI3B,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAejF;AAmBD,0CAA0C;AAC1C,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAS1G;AAED,eAAO,MAAM,WAAW,MAAa,SAAS,KAAK,UAAU,KAAG,OAAO,CAAC,KAAK,EAAE,CAAyD,CAAC;AAEzI,wBAAsB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAG3G;AAED,6CAA6C;AAC7C,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1H;AASD,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAGtG;AAED,oGAAoG;AACpG,wBAAsB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGrH;AAED,gEAAgE;AAChE,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEpF;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAG3G"}
@@ -65,9 +65,14 @@ export async function listServices(q, projectId, now) {
65
65
  const rows = await q.query("SELECT via, info, first_seen, last_seen FROM services WHERE project_id = $1 ORDER BY last_seen DESC", [projectId]);
66
66
  return rows.map((r) => ({ ...JSON.parse(r.info), via: r.via, firstSeenMs: r.first_seen, lastSeenMs: r.last_seen, online: now - r.last_seen <= HUB_ONLINE_MS }));
67
67
  }
68
- export async function environmentsOf(q, projectId) {
69
- const rows = await q.query("SELECT environment AS e FROM services WHERE project_id = $1 UNION SELECT DISTINCT env FROM traces WHERE project_id = $1", [projectId]);
70
- return rows.map((r) => r.e).filter(Boolean).sort();
68
+ /** Environments of the project's services, plus those seen on traces (from the telemetry store). */
69
+ export async function environmentsOf(q, projectId, traceEnvs) {
70
+ const rows = await q.query("SELECT DISTINCT environment AS e FROM services WHERE project_id = $1", [projectId]);
71
+ return [...new Set([...rows.map((r) => r.e), ...traceEnvs])].filter(Boolean).sort();
72
+ }
73
+ /** Environments seen on a project's traces (Postgres store). */
74
+ export async function traceEnvsPg(q, projectId) {
75
+ return (await q.query("SELECT DISTINCT env AS e FROM traces WHERE project_id = $1", [projectId])).map((r) => r.e);
71
76
  }
72
77
  export async function countRows(q, projectId) {
73
78
  const n = async (table) => (await q.query(`SELECT count(*)::int AS n FROM ${table} WHERE project_id = $1`, [projectId]))[0]?.n ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"trace-read.js","sourceRoot":"","sources":["../../src/repo/trace-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-read.js","sourceRoot":"","sources":["../../src/repo/trace-read.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
1
  import type { HubWrite } from "@wizeworks/lens-hub/kit";
2
2
  import type { Queryable } from "../db/db.js";
3
- /** Save one batch for one project, in the caller's transaction. */
3
+ /** Record the sender in the project's service registry (Postgres, whatever keeps the telemetry). */
4
+ export declare function writeService(q: Queryable, projectId: string, w: HubWrite, now: number): Promise<void>;
5
+ /** Save one batch for one project: registry and telemetry, in the caller's transaction (Postgres small mode, and tests). */
4
6
  export declare function writeBatch(q: Queryable, projectId: string, w: HubWrite, now: number): Promise<void>;
7
+ /** Save one batch's spans, logs, trace bounds, and metrics to Postgres, in the caller's transaction. */
8
+ export declare function writeTelemetry(q: Queryable, projectId: string, w: HubWrite, now: number): Promise<void>;
5
9
  /** Drop metric points older than each organization's retention. */
6
10
  export declare function pruneMetricsByRetention(q: Queryable, now: number): Promise<void>;
7
11
  /** Drop traces older than each organization's retention. Returns how many traces were dropped. */
@@ -1 +1 @@
1
- {"version":3,"file":"trace-write.d.ts","sourceRoot":"","sources":["../../src/repo/trace-write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAM,SAAS,EAAE,MAAM,aAAa,CAAC;AAoCjD,mEAAmE;AACnE,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBzG;AASD,mEAAmE;AACnE,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtF;AAED,kGAAkG;AAClG,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAejF"}
1
+ {"version":3,"file":"trace-write.d.ts","sourceRoot":"","sources":["../../src/repo/trace-write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAM,SAAS,EAAE,MAAM,aAAa,CAAC;AAoCjD,oGAAoG;AACpG,wBAAsB,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3G;AAED,4HAA4H;AAC5H,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzG;AAED,wGAAwG;AACxG,wBAAsB,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB7G;AASD,mEAAmE;AACnE,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtF;AAED,kGAAkG;AAClG,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAejF"}
@@ -31,11 +31,20 @@ function traceRows(w, projectId, now) {
31
31
  const env = w.sender.environment ?? "";
32
32
  return [...bounds].map(([id, [start, end]]) => [projectId, id, start, end, now, env]);
33
33
  }
34
- /** Save one batch for one project, in the caller's transaction. */
35
- export async function writeBatch(q, projectId, w, now) {
34
+ /** Record the sender in the project's service registry (Postgres, whatever keeps the telemetry). */
35
+ export async function writeService(q, projectId, w, now) {
36
36
  const s = w.sender;
37
37
  await q.query(`INSERT INTO services (project_id, service, environment, host, via, info, first_seen, last_seen) VALUES ($1, $2, $3, $4, $5, $6, $7, $7)
38
38
  ON CONFLICT (project_id, service, environment, host) DO UPDATE SET via = EXCLUDED.via, info = EXCLUDED.info, last_seen = EXCLUDED.last_seen`, [projectId, s.service, s.environment ?? "", s.host ?? "", w.via, JSON.stringify(s), now]);
39
+ }
40
+ /** Save one batch for one project: registry and telemetry, in the caller's transaction (Postgres small mode, and tests). */
41
+ export async function writeBatch(q, projectId, w, now) {
42
+ await writeService(q, projectId, w, now);
43
+ await writeTelemetry(q, projectId, w, now);
44
+ }
45
+ /** Save one batch's spans, logs, trace bounds, and metrics to Postgres, in the caller's transaction. */
46
+ export async function writeTelemetry(q, projectId, w, now) {
47
+ const s = w.sender;
39
48
  await insertMany(q, "INSERT INTO traces (project_id, trace_id, start_ms, end_ms, updated_ms, env)", traceRows(w, projectId, now), `
40
49
  ON CONFLICT (project_id, trace_id) DO UPDATE SET start_ms = LEAST(traces.start_ms, EXCLUDED.start_ms),
41
50
  end_ms = GREATEST(traces.end_ms, EXCLUDED.end_ms), updated_ms = EXCLUDED.updated_ms,
@@ -1 +1 @@
1
- {"version":3,"file":"trace-write.js","sourceRoot":"","sources":["../../src/repo/trace-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-write.js","sourceRoot":"","sources":["../../src/repo/trace-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAa,MAAM,sBAAsB,CAAC;AAGzH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,KAAK,GAAG,GAAG,CAAC;AAElB,+EAA+E;AAC/E,KAAK,UAAU,UAAU,CAAC,CAAY,EAAE,IAAY,EAAE,IAAiB,EAAE,IAAY;IACnF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtH,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,CAAC,CAAO,EAAE,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC;AAEF,0FAA0F;AAC1F,SAAS,SAAS,CAAC,CAAW,EAAE,SAAiB,EAAE,GAAW;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,KAAa,EAAE,GAAW,EAAE,EAAE;QACvD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;QAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAC/E,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACvC,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAY,EAAE,SAAiB,EAAE,CAAW,EAAE,GAAW;IAC1F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,CAAC,KAAK,CACX;iJAC6I,EAC7I,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,4HAA4H;AAC5H,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAY,EAAE,SAAiB,EAAE,CAAW,EAAE,GAAW;IACxF,MAAM,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,CAAY,EAAE,SAAiB,EAAE,CAAW,EAAE,GAAW;IAC5F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,UAAU,CAAC,CAAC,EAAE,8EAA8E,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;;;4EAGxD,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7K,MAAM,UAAU,CAAC,CAAC,EAAE,kGAAkG,EAAE,KAAK,EAAE;uHACV,CAAC,CAAC;IACvH,MAAM,IAAI,GAAG,MAAM,CACjB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAC/G,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CACzB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,CAAC,CAAC,EAAE,6DAA6D,EAAE,IAAI,EAAE,wBAAwB,CAAC,CAAC;IACnH,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;IAChC,2FAA2F;IAC3F,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrI,MAAM,UAAU,CAAC,CAAC,EAAE,uFAAuF,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1H,MAAM,kBAAkB,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,oGAAoG;AACpG,SAAS,MAAM,CAAI,KAAmB,EAAE,GAAqB;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,CAAY,EAAE,GAAW;IACrE,MAAM,CAAC,CAAC,KAAK,CACX;wDACoD,EACpD,CAAC,GAAG,CAAC,CACN,CAAC;IACF,MAAM,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,CAAY,EAAE,GAAW;IAC9D,MAAM,KAAK,GAAG,KAAK,EAAE,CAAY,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,KAAK,CAC1B;wEACkE,EAClE,CAAC,GAAG,CAAC,CACN,CAAC;QACF,0EAA0E;QAC1E,MAAM,aAAa,CAAC,CAAC,EAAE,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACtH,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,MAAM,CAAC,CAAC,KAAK,CAAC,eAAe,KAAK,0CAA0C,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpI,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAE,CAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -1,24 +1,13 @@
1
1
  import type { Queryable } from "../db/db.js";
2
+ /** A signed-in person, as our routes see them. Accounts themselves are Better Auth's (auth/auth.ts). */
2
3
  export interface User {
3
4
  id: string;
4
5
  email: string;
5
6
  name: string;
7
+ emailVerified: boolean;
8
+ twoFactorEnabled: boolean;
6
9
  }
7
- export declare const normalizeEmail: (email: string) => string;
8
- /** Check sign-up input. Returns an error message, or null when it is fine. */
9
- export declare function signUpProblem(email: string, password: string, name: string): string | null;
10
10
  export declare function userCount(q: Queryable): Promise<number>;
11
- export declare function createUser(q: Queryable, email: string, password: string, name: string, now: number): Promise<User>;
12
- export declare function userByEmail(q: Queryable, email: string): Promise<User | undefined>;
13
- /** The user when the email and password match. Takes the same time when the email is unknown. */
14
- export declare function verifyLogin(q: Queryable, email: string, password: string): Promise<User | undefined>;
15
- export declare function setPassword(q: Queryable, userId: string, password: string): Promise<void>;
16
- /** A new session. Returns the token for the cookie; only its hash is stored. */
17
- export declare function createSession(q: Queryable, userId: string, now: number): Promise<{
18
- token: string;
19
- expiresMs: number;
20
- }>;
21
- export declare function userBySession(q: Queryable, token: string, now: number): Promise<User | undefined>;
22
- export declare function endSession(q: Queryable, token: string): Promise<void>;
23
- export declare function pruneSessions(q: Queryable, now: number): Promise<void>;
11
+ /** Emails of an organization's members, for alert emails. When mail really goes out, only confirmed ones. */
12
+ export declare const memberEmails: (q: Queryable, orgId: string, confirmedOnly: boolean) => Promise<string[]>;
24
13
  //# sourceMappingURL=users.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/repo/users.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAGD,eAAO,MAAM,cAAc,UAAW,MAAM,KAAG,MAAoC,CAAC;AAGpF,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM1F;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxH;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAGxF;AAED,iGAAiG;AACjG,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAM1G;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/F;AAED,gFAAgF;AAChF,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAK5H;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAMvG;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/repo/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,wGAAwG;AACxG,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D;AAED,6GAA6G;AAC7G,eAAO,MAAM,YAAY,MAAa,SAAS,SAAS,MAAM,iBAAiB,OAAO,KAAG,OAAO,CAAC,MAAM,EAAE,CAGtG,CAAC"}