@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,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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"}
|
package/dist/repo/orgs.d.ts
CHANGED
|
@@ -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
|
-
|
|
20
|
-
|
|
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
|
package/dist/repo/orgs.d.ts.map
CHANGED
|
@@ -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;
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
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
|
|
29
|
-
|
|
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.
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
export async function
|
|
40
|
-
await q.query("
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
package/dist/repo/orgs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/repo/orgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/dist/repo/trace-read.js
CHANGED
|
@@ -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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAA0E,MAAM,sBAAsB,CAAC;
|
|
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
|
-
/**
|
|
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,
|
|
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"}
|
package/dist/repo/trace-write.js
CHANGED
|
@@ -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
|
-
/**
|
|
35
|
-
export async function
|
|
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":"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"}
|
package/dist/repo/users.d.ts
CHANGED
|
@@ -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
|
-
|
|
12
|
-
export declare
|
|
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
|
package/dist/repo/users.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/repo/users.ts"],"names":[],"mappings":"
|
|
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"}
|