@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.
- package/README.md +58 -5
- package/dist/alerts/evaluate.d.ts.map +1 -1
- package/dist/alerts/evaluate.js +20 -6
- package/dist/alerts/evaluate.js.map +1 -1
- package/dist/alerts/notify.d.ts +13 -2
- package/dist/alerts/notify.d.ts.map +1 -1
- package/dist/alerts/notify.js +22 -16
- package/dist/alerts/notify.js.map +1 -1
- package/dist/app.d.ts +16 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/auth/auth.d.ts +51 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +63 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/bridge.d.ts +7 -0
- package/dist/auth/bridge.d.ts.map +1 -0
- package/dist/auth/bridge.js +39 -0
- package/dist/auth/bridge.js.map +1 -0
- package/dist/auth/crypto.d.ts +0 -5
- package/dist/auth/crypto.d.ts.map +1 -1
- package/dist/auth/crypto.js +3 -20
- package/dist/auth/crypto.js.map +1 -1
- package/dist/auth/delete-user.d.ts +16 -0
- package/dist/auth/delete-user.d.ts.map +1 -0
- package/dist/auth/delete-user.js +21 -0
- package/dist/auth/delete-user.js.map +1 -0
- package/dist/auth/deps.d.ts +27 -0
- package/dist/auth/deps.d.ts.map +1 -0
- package/dist/auth/deps.js +3 -0
- package/dist/auth/deps.js.map +1 -0
- package/dist/auth/email-token.d.ts +8 -0
- package/dist/auth/email-token.d.ts.map +1 -0
- package/dist/auth/email-token.js +15 -0
- package/dist/auth/email-token.js.map +1 -0
- package/dist/auth/hooks.d.ts +4 -0
- package/dist/auth/hooks.d.ts.map +1 -0
- package/dist/auth/hooks.js +143 -0
- package/dist/auth/hooks.js.map +1 -0
- package/dist/auth/join-scope.d.ts +7 -0
- package/dist/auth/join-scope.d.ts.map +1 -0
- package/dist/auth/join-scope.js +17 -0
- package/dist/auth/join-scope.js.map +1 -0
- package/dist/auth/options.d.ts +17 -0
- package/dist/auth/options.d.ts.map +1 -0
- package/dist/auth/options.js +98 -0
- package/dist/auth/options.js.map +1 -0
- package/dist/auth/password.d.ts +10 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +22 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/plugins.d.ts +4 -0
- package/dist/auth/plugins.d.ts.map +1 -0
- package/dist/auth/plugins.js +45 -0
- package/dist/auth/plugins.js.map +1 -0
- package/dist/auth/principal.d.ts +8 -3
- package/dist/auth/principal.d.ts.map +1 -1
- package/dist/auth/principal.js +13 -8
- package/dist/auth/principal.js.map +1 -1
- package/dist/auth/roles.d.ts +43 -3
- package/dist/auth/roles.d.ts.map +1 -1
- package/dist/auth/roles.js +15 -6
- package/dist/auth/roles.js.map +1 -1
- package/dist/auth/schema-names.d.ts +130 -0
- package/dist/auth/schema-names.d.ts.map +1 -0
- package/dist/auth/schema-names.js +53 -0
- package/dist/auth/schema-names.js.map +1 -0
- package/dist/auth/secret.d.ts +12 -0
- package/dist/auth/secret.d.ts.map +1 -0
- package/dist/auth/secret.js +32 -0
- package/dist/auth/secret.js.map +1 -0
- package/dist/auth/security-notices.d.ts +34 -0
- package/dist/auth/security-notices.d.ts.map +1 -0
- package/dist/auth/security-notices.js +81 -0
- package/dist/auth/security-notices.js.map +1 -0
- package/dist/auth/signup.d.ts +23 -0
- package/dist/auth/signup.d.ts.map +1 -0
- package/dist/auth/signup.js +61 -0
- package/dist/auth/signup.js.map +1 -0
- package/dist/auth/sso.d.ts +21 -0
- package/dist/auth/sso.d.ts.map +1 -0
- package/dist/auth/sso.js +35 -0
- package/dist/auth/sso.js.map +1 -0
- package/dist/auth/wire.d.ts +16 -0
- package/dist/auth/wire.d.ts.map +1 -0
- package/dist/auth/wire.js +47 -0
- package/dist/auth/wire.js.map +1 -0
- package/dist/changes.d.ts +15 -0
- package/dist/changes.d.ts.map +1 -0
- package/dist/changes.js +45 -0
- package/dist/changes.js.map +1 -0
- package/dist/cli-args.d.ts +1 -1
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +66 -14
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +22 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +30 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +37 -0
- package/dist/config.js.map +1 -1
- package/dist/copy-cli.d.ts +3 -0
- package/dist/copy-cli.d.ts.map +1 -0
- package/dist/copy-cli.js +24 -0
- package/dist/copy-cli.js.map +1 -0
- package/dist/db/db.d.ts +7 -2
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +28 -10
- package/dist/db/db.js.map +1 -1
- package/dist/db/migrate.d.ts +2 -2
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +15 -5
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema-auth.d.ts +2 -0
- package/dist/db/schema-auth.d.ts.map +1 -0
- package/dist/db/schema-auth.js +93 -0
- package/dist/db/schema-auth.js.map +1 -0
- package/dist/db/schema-mail.d.ts +2 -0
- package/dist/db/schema-mail.d.ts.map +1 -0
- package/dist/db/schema-mail.js +8 -0
- package/dist/db/schema-mail.js.map +1 -0
- package/dist/db/schema-notify.d.ts +2 -0
- package/dist/db/schema-notify.d.ts.map +1 -0
- package/dist/db/schema-notify.js +26 -0
- package/dist/db/schema-notify.js.map +1 -0
- package/dist/db/schema-search.d.ts +2 -0
- package/dist/db/schema-search.d.ts.map +1 -0
- package/dist/db/schema-search.js +16 -0
- package/dist/db/schema-search.js.map +1 -0
- package/dist/db/schema-sso.d.ts +2 -0
- package/dist/db/schema-sso.d.ts.map +1 -0
- package/dist/db/schema-sso.js +17 -0
- package/dist/db/schema-sso.js.map +1 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +10 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/db/trigram.d.ts +4 -0
- package/dist/db/trigram.d.ts.map +1 -0
- package/dist/db/trigram.js +34 -0
- package/dist/db/trigram.js.map +1 -0
- package/dist/http/http.d.ts +2 -0
- package/dist/http/http.d.ts.map +1 -1
- package/dist/http/http.js +7 -3
- package/dist/http/http.js.map +1 -1
- package/dist/jobs.d.ts +1 -1
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +23 -11
- package/dist/jobs.js.map +1 -1
- package/dist/mail/blocks.d.ts +14 -0
- package/dist/mail/blocks.d.ts.map +1 -0
- package/dist/mail/blocks.js +35 -0
- package/dist/mail/blocks.js.map +1 -0
- package/dist/mail/content.d.ts +68 -0
- package/dist/mail/content.d.ts.map +1 -0
- package/dist/mail/content.js +6 -0
- package/dist/mail/content.js.map +1 -0
- package/dist/mail/emails-digest.d.ts +10 -0
- package/dist/mail/emails-digest.d.ts.map +1 -0
- package/dist/mail/emails-digest.js +55 -0
- package/dist/mail/emails-digest.js.map +1 -0
- package/dist/mail/emails-health.d.ts +6 -0
- package/dist/mail/emails-health.d.ts.map +1 -0
- package/dist/mail/emails-health.js +36 -0
- package/dist/mail/emails-health.js.map +1 -0
- package/dist/mail/emails-security.d.ts +14 -0
- package/dist/mail/emails-security.d.ts.map +1 -0
- package/dist/mail/emails-security.js +27 -0
- package/dist/mail/emails-security.js.map +1 -0
- package/dist/mail/emails-team.d.ts +11 -0
- package/dist/mail/emails-team.d.ts.map +1 -0
- package/dist/mail/emails-team.js +45 -0
- package/dist/mail/emails-team.js.map +1 -0
- package/dist/mail/emails.d.ts +9 -0
- package/dist/mail/emails.d.ts.map +1 -0
- package/dist/mail/emails.js +49 -0
- package/dist/mail/emails.js.map +1 -0
- package/dist/mail/layout.d.ts +6 -0
- package/dist/mail/layout.d.ts.map +1 -0
- package/dist/mail/layout.js +10 -0
- package/dist/mail/layout.js.map +1 -0
- package/dist/mail/mailer.d.ts +25 -0
- package/dist/mail/mailer.d.ts.map +1 -0
- package/dist/mail/mailer.js +50 -0
- package/dist/mail/mailer.js.map +1 -0
- package/dist/mail/preview.d.ts +6 -0
- package/dist/mail/preview.d.ts.map +1 -0
- package/dist/mail/preview.js +26 -0
- package/dist/mail/preview.js.map +1 -0
- package/dist/mail/resend.d.ts +13 -0
- package/dist/mail/resend.d.ts.map +1 -0
- package/dist/mail/resend.js +34 -0
- package/dist/mail/resend.js.map +1 -0
- package/dist/mail/samples.d.ts +3 -0
- package/dist/mail/samples.d.ts.map +1 -0
- package/dist/mail/samples.js +63 -0
- package/dist/mail/samples.js.map +1 -0
- package/dist/mail/stop-route.d.ts +4 -0
- package/dist/mail/stop-route.d.ts.map +1 -0
- package/dist/mail/stop-route.js +41 -0
- package/dist/mail/stop-route.js.map +1 -0
- package/dist/mail/svix.d.ts +8 -0
- package/dist/mail/svix.d.ts.map +1 -0
- package/dist/mail/svix.js +17 -0
- package/dist/mail/svix.js.map +1 -0
- package/dist/mail/templates.d.ts +12 -0
- package/dist/mail/templates.d.ts.map +1 -0
- package/dist/mail/templates.js +18 -0
- package/dist/mail/templates.js.map +1 -0
- package/dist/mail/text.d.ts +4 -0
- package/dist/mail/text.d.ts.map +1 -0
- package/dist/mail/text.js +17 -0
- package/dist/mail/text.js.map +1 -0
- package/dist/mail/theme.d.ts +32 -0
- package/dist/mail/theme.d.ts.map +1 -0
- package/dist/mail/theme.js +27 -0
- package/dist/mail/theme.js.map +1 -0
- package/dist/mail/unsubscribe.d.ts +14 -0
- package/dist/mail/unsubscribe.d.ts.map +1 -0
- package/dist/mail/unsubscribe.js +39 -0
- package/dist/mail/unsubscribe.js.map +1 -0
- package/dist/mail/webhook.d.ts +5 -0
- package/dist/mail/webhook.d.ts.map +1 -0
- package/dist/mail/webhook.js +41 -0
- package/dist/mail/webhook.js.map +1 -0
- package/dist/notify/digest-data.d.ts +32 -0
- package/dist/notify/digest-data.d.ts.map +1 -0
- package/dist/notify/digest-data.js +31 -0
- package/dist/notify/digest-data.js.map +1 -0
- package/dist/notify/digest.d.ts +17 -0
- package/dist/notify/digest.d.ts.map +1 -0
- package/dist/notify/digest.js +76 -0
- package/dist/notify/digest.js.map +1 -0
- package/dist/notify/health.d.ts +6 -0
- package/dist/notify/health.d.ts.map +1 -0
- package/dist/notify/health.js +42 -0
- package/dist/notify/health.js.map +1 -0
- package/dist/notify/team-describe.d.ts +22 -0
- package/dist/notify/team-describe.d.ts.map +1 -0
- package/dist/notify/team-describe.js +67 -0
- package/dist/notify/team-describe.js.map +1 -0
- package/dist/notify/team.d.ts +6 -0
- package/dist/notify/team.d.ts.map +1 -0
- package/dist/notify/team.js +56 -0
- package/dist/notify/team.js.map +1 -0
- package/dist/repo/alerts.d.ts +6 -2
- package/dist/repo/alerts.d.ts.map +1 -1
- package/dist/repo/alerts.js.map +1 -1
- package/dist/repo/auth-prune.d.ts +4 -0
- package/dist/repo/auth-prune.d.ts.map +1 -0
- package/dist/repo/auth-prune.js +8 -0
- package/dist/repo/auth-prune.js.map +1 -0
- package/dist/repo/mail-prefs.d.ts +35 -0
- package/dist/repo/mail-prefs.d.ts.map +1 -0
- package/dist/repo/mail-prefs.js +34 -0
- package/dist/repo/mail-prefs.js.map +1 -0
- package/dist/repo/orgs.d.ts +15 -25
- package/dist/repo/orgs.d.ts.map +1 -1
- package/dist/repo/orgs.js +18 -60
- package/dist/repo/orgs.js.map +1 -1
- package/dist/repo/services.d.ts +6 -0
- package/dist/repo/services.d.ts.map +1 -0
- package/dist/repo/services.js +16 -0
- package/dist/repo/services.js.map +1 -0
- package/dist/repo/suppressions.d.ts +8 -0
- package/dist/repo/suppressions.d.ts.map +1 -0
- package/dist/repo/suppressions.js +16 -0
- package/dist/repo/suppressions.js.map +1 -0
- package/dist/repo/trace-join.d.ts +9 -0
- package/dist/repo/trace-join.d.ts.map +1 -0
- package/dist/repo/trace-join.js +35 -0
- package/dist/repo/trace-join.js.map +1 -0
- package/dist/repo/trace-read.d.ts +6 -13
- package/dist/repo/trace-read.d.ts.map +1 -1
- package/dist/repo/trace-read.js +8 -3
- package/dist/repo/trace-read.js.map +1 -1
- package/dist/repo/trace-write.d.ts +5 -1
- package/dist/repo/trace-write.d.ts.map +1 -1
- package/dist/repo/trace-write.js +11 -2
- package/dist/repo/trace-write.js.map +1 -1
- package/dist/repo/users.d.ts +5 -16
- package/dist/repo/users.d.ts.map +1 -1
- package/dist/repo/users.js +2 -60
- package/dist/repo/users.js.map +1 -1
- package/dist/routes/alerts.d.ts.map +1 -1
- package/dist/routes/alerts.js +23 -6
- package/dist/routes/alerts.js.map +1 -1
- package/dist/routes/changes.d.ts +4 -0
- package/dist/routes/changes.d.ts.map +1 -0
- package/dist/routes/changes.js +19 -0
- package/dist/routes/changes.js.map +1 -0
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +24 -9
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +8 -2
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/ingest.d.ts.map +1 -1
- package/dist/routes/ingest.js +7 -2
- package/dist/routes/ingest.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +42 -25
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/me.d.ts +4 -0
- package/dist/routes/me.d.ts.map +1 -0
- package/dist/routes/me.js +37 -0
- package/dist/routes/me.js.map +1 -0
- package/dist/routes/metrics.d.ts +2 -2
- package/dist/routes/metrics.d.ts.map +1 -1
- package/dist/routes/metrics.js +2 -3
- package/dist/routes/metrics.js.map +1 -1
- package/dist/routes/models.d.ts +2 -0
- package/dist/routes/models.d.ts.map +1 -1
- package/dist/routes/models.js +10 -5
- package/dist/routes/models.js.map +1 -1
- package/dist/routes/notify.d.ts +4 -0
- package/dist/routes/notify.d.ts.map +1 -0
- package/dist/routes/notify.js +55 -0
- package/dist/routes/notify.js.map +1 -0
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +34 -53
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +5 -3
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/search.d.ts +4 -0
- package/dist/routes/search.d.ts.map +1 -0
- package/dist/routes/search.js +33 -0
- package/dist/routes/search.js.map +1 -0
- package/dist/routes/shares.d.ts.map +1 -1
- package/dist/routes/shares.js +8 -5
- package/dist/routes/shares.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +59 -16
- package/dist/server.js.map +1 -1
- package/dist/settle.d.ts +7 -6
- package/dist/settle.d.ts.map +1 -1
- package/dist/settle.js +30 -13
- package/dist/settle.js.map +1 -1
- package/dist/telemetry/cached.d.ts +11 -0
- package/dist/telemetry/cached.d.ts.map +1 -0
- package/dist/telemetry/cached.js +30 -0
- package/dist/telemetry/cached.js.map +1 -0
- package/dist/telemetry/ch/admin.d.ts +10 -0
- package/dist/telemetry/ch/admin.d.ts.map +1 -0
- package/dist/telemetry/ch/admin.js +65 -0
- package/dist/telemetry/ch/admin.js.map +1 -0
- package/dist/telemetry/ch/http.d.ts +19 -0
- package/dist/telemetry/ch/http.d.ts.map +1 -0
- package/dist/telemetry/ch/http.js +91 -0
- package/dist/telemetry/ch/http.js.map +1 -0
- package/dist/telemetry/ch/metrics.d.ts +10 -0
- package/dist/telemetry/ch/metrics.d.ts.map +1 -0
- package/dist/telemetry/ch/metrics.js +61 -0
- package/dist/telemetry/ch/metrics.js.map +1 -0
- package/dist/telemetry/ch/queries.d.ts +19 -0
- package/dist/telemetry/ch/queries.d.ts.map +1 -0
- package/dist/telemetry/ch/queries.js +30 -0
- package/dist/telemetry/ch/queries.js.map +1 -0
- package/dist/telemetry/ch/queue.d.ts +34 -0
- package/dist/telemetry/ch/queue.d.ts.map +1 -0
- package/dist/telemetry/ch/queue.js +79 -0
- package/dist/telemetry/ch/queue.js.map +1 -0
- package/dist/telemetry/ch/read.d.ts +12 -0
- package/dist/telemetry/ch/read.d.ts.map +1 -0
- package/dist/telemetry/ch/read.js +72 -0
- package/dist/telemetry/ch/read.js.map +1 -0
- package/dist/telemetry/ch/schema-facts.d.ts +6 -0
- package/dist/telemetry/ch/schema-facts.d.ts.map +1 -0
- package/dist/telemetry/ch/schema-facts.js +49 -0
- package/dist/telemetry/ch/schema-facts.js.map +1 -0
- package/dist/telemetry/ch/schema-raw.d.ts +8 -0
- package/dist/telemetry/ch/schema-raw.d.ts.map +1 -0
- package/dist/telemetry/ch/schema-raw.js +35 -0
- package/dist/telemetry/ch/schema-raw.js.map +1 -0
- package/dist/telemetry/ch/schema-rollups.d.ts +2 -0
- package/dist/telemetry/ch/schema-rollups.d.ts.map +1 -0
- package/dist/telemetry/ch/schema-rollups.js +61 -0
- package/dist/telemetry/ch/schema-rollups.js.map +1 -0
- package/dist/telemetry/ch/schema.d.ts +12 -0
- package/dist/telemetry/ch/schema.d.ts.map +1 -0
- package/dist/telemetry/ch/schema.js +25 -0
- package/dist/telemetry/ch/schema.js.map +1 -0
- package/dist/telemetry/ch/settle-rows.d.ts +13 -0
- package/dist/telemetry/ch/settle-rows.d.ts.map +1 -0
- package/dist/telemetry/ch/settle-rows.js +67 -0
- package/dist/telemetry/ch/settle-rows.js.map +1 -0
- package/dist/telemetry/ch/settle.d.ts +7 -0
- package/dist/telemetry/ch/settle.d.ts.map +1 -0
- package/dist/telemetry/ch/settle.js +96 -0
- package/dist/telemetry/ch/settle.js.map +1 -0
- package/dist/telemetry/ch/store.d.ts +16 -0
- package/dist/telemetry/ch/store.d.ts.map +1 -0
- package/dist/telemetry/ch/store.js +65 -0
- package/dist/telemetry/ch/store.js.map +1 -0
- package/dist/telemetry/ch/util.d.ts +20 -0
- package/dist/telemetry/ch/util.d.ts.map +1 -0
- package/dist/telemetry/ch/util.js +45 -0
- package/dist/telemetry/ch/util.js.map +1 -0
- package/dist/telemetry/ch/write.d.ts +11 -0
- package/dist/telemetry/ch/write.d.ts.map +1 -0
- package/dist/telemetry/ch/write.js +59 -0
- package/dist/telemetry/ch/write.js.map +1 -0
- package/dist/telemetry/copy.d.ts +9 -0
- package/dist/telemetry/copy.d.ts.map +1 -0
- package/dist/telemetry/copy.js +60 -0
- package/dist/telemetry/copy.js.map +1 -0
- package/dist/telemetry/index.d.ts +11 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +21 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/pg-store.d.ts +5 -0
- package/dist/telemetry/pg-store.d.ts.map +1 -0
- package/dist/telemetry/pg-store.js +78 -0
- package/dist/telemetry/pg-store.js.map +1 -0
- package/dist/telemetry/store.d.ts +74 -0
- package/dist/telemetry/store.d.ts.map +1 -0
- package/dist/telemetry/store.js +2 -0
- package/dist/telemetry/store.js.map +1 -0
- package/package.json +20 -6
- package/dist/routes/auth.d.ts +0 -4
- package/dist/routes/auth.d.ts.map +0 -1
- package/dist/routes/auth.js +0 -106
- 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 @@
|
|
|
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.
|
|
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
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"@wizeworks/lens-
|
|
50
|
-
"@wizeworks/lens-
|
|
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
|
}
|
package/dist/routes/auth.d.ts
DELETED
|
@@ -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"}
|
package/dist/routes/auth.js
DELETED
|
@@ -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
|
package/dist/routes/auth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/routes/auth.ts"],"names":[],"mappings":"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"}
|