@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,11 @@
1
+ import type { CloudConfig } from "../config.js";
2
+ import type { Db } from "../db/db.js";
3
+ import type { RetentionOf, TelemetryStore } from "./store.js";
4
+ export type { MetricQuery, SettleOptions, TelemetryStore, TraceQuery } from "./store.js";
5
+ /** Retention days of the projects that still exist; deleted projects are left out. */
6
+ export declare const pgRetentionOf: (db: Db) => RetentionOf;
7
+ /** The telemetry store for this cloud: ClickHouse (scale mode) when a URL is set, else the cloud's own database. */
8
+ export declare function openTelemetry(config: CloudConfig, db: Db): Promise<TelemetryStore>;
9
+ /** Drop the telemetry of projects that were deleted (or cleared) in Postgres. */
10
+ export declare function clearProjects(t: TelemetryStore, projectIds: readonly string[]): Promise<void>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzF,sFAAsF;AACtF,eAAO,MAAM,aAAa,OAAQ,EAAE,KAAG,WAGtC,CAAC;AAEF,oHAAoH;AACpH,wBAAsB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAKxF;AAED,iFAAiF;AACjF,wBAAsB,aAAa,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnG"}
@@ -0,0 +1,21 @@
1
+ import { withCachedCounts } from "./cached.js";
2
+ import { openClickHouse } from "./ch/store.js";
3
+ import { pgTelemetry } from "./pg-store.js";
4
+ /** Retention days of the projects that still exist; deleted projects are left out. */
5
+ export const pgRetentionOf = (db) => async (ids) => {
6
+ const rows = await db.query("SELECT p.id, o.retention_days AS d FROM projects p JOIN orgs o ON o.id = p.org_id WHERE p.id = ANY($1)", [[...ids]]);
7
+ return new Map(rows.map((r) => [r.id, r.d]));
8
+ };
9
+ /** The telemetry store for this cloud: ClickHouse (scale mode) when a URL is set, else the cloud's own database. */
10
+ export async function openTelemetry(config, db) {
11
+ const store = config.clickhouseUrl
12
+ ? await openClickHouse({ url: config.clickhouseUrl, retentionOf: pgRetentionOf(db), defaultRetentionDays: config.retentionDays, now: config.now })
13
+ : pgTelemetry(db);
14
+ return withCachedCounts(store, Date.now);
15
+ }
16
+ /** Drop the telemetry of projects that were deleted (or cleared) in Postgres. */
17
+ export async function clearProjects(t, projectIds) {
18
+ for (const id of projectIds)
19
+ await t.clearProject(id);
20
+ }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAM,EAAe,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CAA4B,wGAAwG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7K,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAmB,EAAE,EAAM;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa;QAChC,CAAC,CAAC,MAAM,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,oBAAoB,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QAClJ,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpB,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAiB,EAAE,UAA6B;IAClF,KAAK,MAAM,EAAE,IAAI,UAAU;QAAE,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Db } from "../db/db.js";
2
+ import type { TelemetryStore } from "./store.js";
3
+ /** Telemetry in the cloud's own database. Retention reads the organizations from the same database. */
4
+ export declare function pgTelemetry(db: Db): TelemetryStore;
5
+ //# sourceMappingURL=pg-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-store.d.ts","sourceRoot":"","sources":["../../src/telemetry/pg-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAStC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA0BjD,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,CAgDlD"}
@@ -0,0 +1,78 @@
1
+ // Small mode: telemetry in the same Postgres (or PGlite) as accounts. The default, and what self-hosters and tests run.
2
+ import { PG_DIALECT, searchSql, suggestSql } from "@wizeworks/lens-core";
3
+ import { ensureTrigram } from "../db/trigram.js";
4
+ import { loadMetricAlertData, loadMetricData } from "../repo/metric-read.js";
5
+ import { METRIC_TABLES } from "../repo/metric-write.js";
6
+ import { getJoinedTrace } from "../repo/trace-join.js";
7
+ import { countRows, getTrace, queryTraces, traceEnvsPg } from "../repo/trace-read.js";
8
+ import { pruneByRetention, pruneMetricsByRetention, writeTelemetry } from "../repo/trace-write.js";
9
+ import { cloudExecutor, cloudSettling, pgRunner } from "../scale-exec.js";
10
+ import { factsStale, pruneRollups, resetFacts, settleCloud, STATS_TABLES } from "../settle.js";
11
+ const TELEMETRY_TABLES = ["spans", "logs", "traces", "metric_points", ...METRIC_TABLES, ...STATS_TABLES];
12
+ async function slowestEndpoints(db, projectId, w, minCount, limit) {
13
+ const rows = await db.query(`SELECT endpoint, percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_ms) AS p95, count(*)::int AS n FROM fact_requests
14
+ WHERE project_id = $1 AND start_ms >= $2 AND start_ms < $3 GROUP BY endpoint HAVING count(*) >= $4 ORDER BY p95 DESC LIMIT $5`, [projectId, w.from, w.to, minCount, limit]);
15
+ return rows.map((r) => ({ endpoint: r.endpoint, p95Ms: Number(r.p95), count: r.n }));
16
+ }
17
+ async function lastTraceMs(db) {
18
+ const rows = await db.query("SELECT project_id, max(start_ms) AS last_ms FROM traces GROUP BY project_id");
19
+ return new Map(rows.map((r) => [r.project_id, Number(r.last_ms)]));
20
+ }
21
+ async function activeHours(db, projectId, from, to) {
22
+ const [row] = await db.query("SELECT count(DISTINCT floor(start_ms / 3600000))::int AS n FROM traces WHERE project_id = $1 AND start_ms > $2 AND start_ms <= $3", [projectId, from, to]);
23
+ return row?.n ?? 0;
24
+ }
25
+ /** Telemetry in the cloud's own database. Retention reads the organizations from the same database. */
26
+ export function pgTelemetry(db) {
27
+ const src = (projectId) => ({ d: PG_DIALECT, run: pgRunner(db), scope: { project: projectId } });
28
+ // A facts reset can take minutes on a big database, so it runs after start; settling waits for it, and tries again if it failed.
29
+ let reset = Promise.resolve();
30
+ const startReset = () => {
31
+ reset = resetFacts(db);
32
+ reset.catch((err) => console.error("Facts reset failed; settling tries again.", err));
33
+ };
34
+ // Trigram indexes build in the background too; close waits for them.
35
+ let trigram = Promise.resolve();
36
+ return {
37
+ kind: "postgres",
38
+ write: (projectId, w, now) => db.tx((q) => writeTelemetry(q, projectId, w, now)),
39
+ traces: (t) => queryTraces(db, t),
40
+ trace: (projectId, traceId) => getTrace(db, projectId, traceId),
41
+ joinedTrace: (primaryId, scope, traceId) => getJoinedTrace(db, primaryId, scope, traceId),
42
+ counts: (projectId) => countRows(db, projectId),
43
+ traceEnvs: (projectId) => traceEnvsPg(db, projectId),
44
+ activeHours: (projectId, from, to) => activeHours(db, projectId, from, to),
45
+ lastTraceMs: () => lastTraceMs(db),
46
+ executor: (projectId, retentionMs, env) => cloudExecutor(db, projectId, retentionMs, env),
47
+ settling: (projectId, env) => cloudSettling(db, projectId, env),
48
+ search: (projectId, q) => searchSql(src(projectId), q),
49
+ suggest: (projectId, r) => suggestSql(src(projectId), r),
50
+ slowestEndpoints: (projectId, w, minCount, limit) => slowestEndpoints(db, projectId, w, minCount, limit),
51
+ metricData: (m, range, params, now) => loadMetricData(db, m, range, params, now),
52
+ metricAlertData: (m, name, w, now) => loadMetricAlertData(db, m, name, w, now),
53
+ async settle(now, o) {
54
+ await reset.catch(() => (startReset(), reset));
55
+ return settleCloud(db, now, o);
56
+ },
57
+ async prune(now) {
58
+ while ((await pruneByRetention(db, now)) > 0)
59
+ ;
60
+ await pruneMetricsByRetention(db, now);
61
+ await pruneRollups(db, now, true);
62
+ },
63
+ pruneRollups: (now) => pruneRollups(db, now),
64
+ async checkFactsVersion() {
65
+ trigram = ensureTrigram(db).catch((err) => console.error("Trigram indexes failed; text searches scan until the next start.", err));
66
+ if (!(await factsStale(db)))
67
+ return false;
68
+ startReset();
69
+ return true;
70
+ },
71
+ async clearProject(projectId) {
72
+ for (const table of TELEMETRY_TABLES)
73
+ await db.query(`DELETE FROM ${table} WHERE project_id = $1`, [projectId]);
74
+ },
75
+ close: async () => void (await trigram),
76
+ };
77
+ }
78
+ //# sourceMappingURL=pg-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pg-store.js","sourceRoot":"","sources":["../../src/telemetry/pg-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { Executor, MetricAlertData, MetricData, SearchPage, SearchQuery, Suggestion, SuggestRequest, TimeRange, TimeWindow, Trace } from "@wizeworks/lens-core";
2
+ import type { HubWrite } from "@wizeworks/lens-hub/kit";
3
+ export interface TraceQuery {
4
+ projectId: string;
5
+ /** Changed at or after (server clock). */
6
+ since?: number;
7
+ /** Started before. For paging back. */
8
+ before?: number;
9
+ /** Started at or after. For time windows. */
10
+ from?: number;
11
+ env?: string;
12
+ session?: string;
13
+ limit: number;
14
+ }
15
+ export interface MetricQuery {
16
+ projectId: string;
17
+ env?: string;
18
+ service?: string;
19
+ }
20
+ /** How long each project's organization keeps data, in days; the default when a project has none. */
21
+ export type RetentionOf = (projectIds: readonly string[]) => Promise<Map<string, number>>;
22
+ export interface SettleOptions {
23
+ defaultRetentionDays?: number;
24
+ batch?: number;
25
+ budgetMs?: number;
26
+ /** Called for each project whose stats a batch wrote. */
27
+ onSettled?: (projectId: string) => void;
28
+ }
29
+ /** One telemetry backend. Postgres ("small mode") and ClickHouse ("scale mode") answer the same calls with the same results. */
30
+ export interface TelemetryStore {
31
+ readonly kind: "postgres" | "clickhouse";
32
+ /** Spans, logs, trace bounds, and metric points of one batch. */
33
+ write(projectId: string, w: HubWrite, now: number): Promise<void>;
34
+ traces(t: TraceQuery): Promise<Trace[]>;
35
+ trace(projectId: string, traceId: string): Promise<Trace | undefined>;
36
+ /** One trace with its parts from the other projects in `scope` (already checked by the caller). */
37
+ joinedTrace(primaryId: string, scope: readonly string[], traceId: string): Promise<Trace | undefined>;
38
+ counts(projectId: string): Promise<{
39
+ traces: number;
40
+ spans: number;
41
+ }>;
42
+ /** Environments seen on traces. */
43
+ traceEnvs(projectId: string): Promise<string[]>;
44
+ /** Distinct hours with a trace in (from, to]. */
45
+ activeHours(projectId: string, from: number, to: number): Promise<number>;
46
+ /** The newest trace start per project; projects without traces are left out. */
47
+ lastTraceMs(): Promise<Map<string, number>>;
48
+ /** Page needs from the project's stats. */
49
+ executor(projectId: string, retentionMs: number, env?: string): Executor;
50
+ /** Traces still waiting for their stats, or null when none. */
51
+ settling(projectId: string, env?: string): Promise<number | null>;
52
+ search(projectId: string, q: SearchQuery): Promise<SearchPage>;
53
+ suggest(projectId: string, r: SuggestRequest): Promise<Suggestion[]>;
54
+ /** The slowest endpoints by p95 in a window, with at least `minCount` requests. */
55
+ slowestEndpoints(projectId: string, w: TimeWindow, minCount: number, limit: number): Promise<{
56
+ endpoint: string;
57
+ p95Ms: number;
58
+ count: number;
59
+ }[]>;
60
+ metricData(m: MetricQuery, range: TimeRange, params: Readonly<Record<string, string>>, now: number): Promise<MetricData>;
61
+ metricAlertData(m: MetricQuery, name: string, w: TimeWindow, now: number): Promise<MetricAlertData>;
62
+ /** Build stats for quiet traces. Returns how many settled. */
63
+ settle(now: number, o?: SettleOptions): Promise<number>;
64
+ /** Drop traces, metrics, and rollups past each organization's retention. */
65
+ prune(now: number): Promise<void>;
66
+ /** Age out the short rollup tiers. */
67
+ pruneRollups(now: number): Promise<void>;
68
+ /** On startup: rebuild the stats when the facts version changed. True when it did. */
69
+ checkFactsVersion(): Promise<boolean>;
70
+ /** Delete every trace, span, log, metric, and stat of a project. */
71
+ clearProject(projectId: string): Promise<void>;
72
+ close(): Promise<void>;
73
+ }
74
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizeworks/lens-cloud",
3
- "version": "0.3.0-alpha.1",
3
+ "version": "0.3.0-alpha.3",
4
4
  "description": "The WizeLens cloud service: many organizations, accounts and teams, server-side stats, alerts, sharing, and scoped AI access, on Postgres.",
5
5
  "license": "MIT",
6
6
  "author": "WizeWorks LLC",
@@ -42,16 +42,29 @@
42
42
  "node": ">=22.13"
43
43
  },
44
44
  "dependencies": {
45
+ "@better-auth/passkey": "1.7.10",
46
+ "@better-auth/sso": "1.7.10",
45
47
  "@electric-sql/pglite": "^0.5.10",
48
+ "@react-email/components": "1.0.12",
49
+ "better-auth": "1.7.10",
50
+ "kysely": "^0.29.6",
51
+ "kysely-pglite-dialect": "^1.4.0",
52
+ "nodemailer": "^10.1.2",
46
53
  "pg": "^8.23.1",
47
- "@wizeworks/lens-core": "^0.3.0-alpha.1",
48
- "@wizeworks/lens-hub": "^0.3.0-alpha.1",
49
- "@wizeworks/lens-node": "^0.3.0-alpha.1",
50
- "@wizeworks/lens-ui": "^0.3.0-alpha.1"
54
+ "react": "^19.3.1",
55
+ "react-dom": "^19.3.1",
56
+ "@wizeworks/lens-core": "^0.3.0-alpha.3",
57
+ "@wizeworks/lens-hub": "^0.3.0-alpha.3",
58
+ "@wizeworks/lens-node": "^0.3.0-alpha.3",
59
+ "@wizeworks/lens-ui": "^0.3.0-alpha.3"
51
60
  },
52
61
  "devDependencies": {
62
+ "@modelcontextprotocol/sdk": "^1.32.1",
53
63
  "@types/node": "^24.19.2",
64
+ "@types/nodemailer": "^8.0.2",
54
65
  "@types/pg": "^8.23.1",
66
+ "@types/react": "^19.3.0",
67
+ "@types/react-dom": "^19.3.0",
55
68
  "typescript": "^7.0.2",
56
69
  "vitest": "^5.0.5"
57
70
  },
@@ -61,6 +74,7 @@
61
74
  "scripts": {
62
75
  "build": "tsc -p tsconfig.build.json",
63
76
  "test": "vitest run",
64
- "start": "node dist/cli.js"
77
+ "start": "node dist/cli.js",
78
+ "email:preview": "node dist/mail/preview.js"
65
79
  }
66
80
  }
@@ -1,4 +0,0 @@
1
- import type { Ctx } from "../app.js";
2
- import type { Router } from "../http/router.js";
3
- export declare function authRoutes(r: Router<Ctx>): void;
4
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA8FhD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAQ/C"}
@@ -1,106 +0,0 @@
1
- import { principalOf, requireUser, SESSION_COOKIE } from "../auth/principal.js";
2
- import { cookie, cookieOf, fail, readJsonBody, sendJson, str } from "../http/http.js";
3
- import { audit } from "../repo/audit.js";
4
- import { acceptInvite, createOrg, openInvite, orgsOfUser } from "../repo/orgs.js";
5
- import { createProject, listProjects } from "../repo/projects.js";
6
- import { createSession, createUser, endSession, signUpProblem, userByEmail, userCount, verifyLogin } from "../repo/users.js";
7
- const MAX_AGE_S = 30 * 24 * 60 * 60;
8
- async function signIn(ctx, user, status = 200) {
9
- const { token } = await createSession(ctx.app.db, user.id, ctx.app.config.now());
10
- const set = cookie(SESSION_COOKIE, token, MAX_AGE_S, ctx.app.config.secureCookies);
11
- sendJson(ctx.res, status, { user }, { "Set-Cookie": set });
12
- }
13
- /** The signed-in person with their organizations and each one's projects. */
14
- async function meOf(ctx, user) {
15
- const orgs = await orgsOfUser(ctx.app.db, user.id);
16
- const withProjects = await Promise.all(orgs.map(async (o) => ({ ...o, projects: await listProjects(ctx.app.db, o.id) })));
17
- return { user, orgs: withProjects };
18
- }
19
- async function state(ctx) {
20
- const p = await principalOf(ctx);
21
- const needsSetup = (await userCount(ctx.app.db)) === 0;
22
- const me = p?.kind === "user" ? await meOf(ctx, p.user) : null;
23
- sendJson(ctx.res, 200, { signedIn: !!me, needsSetup, signup: ctx.app.config.signup, ...(me ?? {}) });
24
- }
25
- /** The first account: creates the person, their organization, and a first project. Only while no account exists. */
26
- async function setup(ctx) {
27
- const body = await readJsonBody(ctx.req);
28
- const [email, password, name] = [str(body, "email"), str(body, "password"), str(body, "name")];
29
- const problem = signUpProblem(email, password, name);
30
- if (problem)
31
- fail(400, problem);
32
- const now = ctx.app.config.now();
33
- const user = await ctx.app.db.tx(async (q) => {
34
- if ((await userCount(q)) > 0)
35
- fail(409, "Setup is already done. Sign in instead.");
36
- const u = await createUser(q, email, password, name, now);
37
- const org = await createOrg(q, str(body, "orgName", false) || `${name.trim()}'s team`, u.id, now, ctx.app.config.retentionDays);
38
- await createProject(q, org.id, str(body, "projectName", false) || "My app", now);
39
- await audit(q, org.id, `user:${u.id}`, "org.create", { name: org.name }, now);
40
- return u;
41
- });
42
- await signIn(ctx, user, 201);
43
- }
44
- /** A new account. Needs an invite, unless sign-up is open (then it gets its own organization). */
45
- async function signup(ctx) {
46
- const body = await readJsonBody(ctx.req);
47
- const [email, password, name, invite] = [str(body, "email"), str(body, "password"), str(body, "name"), str(body, "invite", false)];
48
- const problem = signUpProblem(email, password, name);
49
- if (problem)
50
- fail(400, problem);
51
- const now = ctx.app.config.now();
52
- if (!invite && ctx.app.config.signup !== "open")
53
- fail(403, "Sign-up needs an invite link.");
54
- if (await userByEmail(ctx.app.db, email))
55
- fail(409, "An account with this email exists. Sign in instead.");
56
- const user = await ctx.app.db.tx(async (q) => {
57
- const open = invite ? await openInvite(q, invite, now) : undefined;
58
- if (invite && !open)
59
- fail(410, "This invite link is not valid any more.");
60
- const u = await createUser(q, email, password, name, now);
61
- if (open)
62
- await acceptInvite(q, invite, u.id, now);
63
- else
64
- await createProject(q, (await createOrg(q, `${name.trim()}'s team`, u.id, now, ctx.app.config.retentionDays)).id, "My app", now);
65
- return u;
66
- });
67
- await signIn(ctx, user, 201);
68
- }
69
- async function login(ctx) {
70
- const body = await readJsonBody(ctx.req);
71
- const user = await verifyLogin(ctx.app.db, str(body, "email"), str(body, "password"));
72
- if (!user)
73
- fail(401, "The email or password is not right.");
74
- await signIn(ctx, user);
75
- }
76
- async function logout(ctx) {
77
- const token = cookieOf(ctx.req, SESSION_COOKIE);
78
- if (token)
79
- await endSession(ctx.app.db, token);
80
- sendJson(ctx.res, 200, { ok: true }, { "Set-Cookie": cookie(SESSION_COOKIE, "", 0, ctx.app.config.secureCookies) });
81
- }
82
- async function showInvite(ctx) {
83
- const invite = await openInvite(ctx.app.db, ctx.params.token, ctx.app.config.now());
84
- if (!invite)
85
- fail(404, "This invite link is not valid any more.");
86
- sendJson(ctx.res, 200, { orgName: invite.orgName, email: invite.email, role: invite.role });
87
- }
88
- /** A signed-in person joins with an invite link. */
89
- async function joinInvite(ctx) {
90
- const user = await requireUser(ctx);
91
- const invite = await acceptInvite(ctx.app.db, ctx.params.token, user.id, ctx.app.config.now());
92
- if (!invite)
93
- fail(410, "This invite link is not valid any more.");
94
- await audit(ctx.app.db, invite.orgId, `user:${user.id}`, "member.join", { role: invite.role }, ctx.app.config.now());
95
- sendJson(ctx.res, 200, await meOf(ctx, user));
96
- }
97
- export function authRoutes(r) {
98
- r.on("GET", "api/auth/state", state)
99
- .on("POST", "api/auth/setup", setup)
100
- .on("POST", "api/auth/signup", signup)
101
- .on("POST", "api/auth/login", login)
102
- .on("POST", "api/auth/logout", logout)
103
- .on("GET", "api/auth/invites/:token", showInvite)
104
- .on("POST", "api/auth/invites/:token/accept", joinInvite);
105
- }
106
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}