@cosmicdrift/kumiko-bundled-features 0.368.0 → 0.370.0
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/dist/account-security/constants.d.ts +4 -0
- package/dist/account-security/constants.js +5 -0
- package/dist/account-security/feature.d.ts +14 -0
- package/dist/account-security/feature.js +62 -0
- package/dist/account-security/i18n.d.ts +6 -0
- package/dist/account-security/i18n.js +6 -0
- package/dist/account-security/index.d.ts +3 -0
- package/dist/account-security/index.js +3 -0
- package/dist/admin-shell/feature.d.ts +1 -1
- package/dist/admin-shell/index.d.ts +4 -4
- package/dist/admin-shell/overview-panels.d.ts +1 -1
- package/dist/admin-shell/web/index.d.ts +1 -1
- package/dist/agent-tools/agent-manifest.d.ts +1 -1
- package/dist/agent-tools/index.d.ts +8 -8
- package/dist/agent-tools/manifest-deny-qns.d.ts +1 -1
- package/dist/agent-tools/tool-catalog.d.ts +1 -1
- package/dist/agent-tools/tool-dispatch.d.ts +1 -1
- package/dist/audit/handlers/resolve-audit-tenant.d.ts +1 -1
- package/dist/audit/index.d.ts +3 -3
- package/dist/audit/web/index.d.ts +1 -1
- package/dist/auth-email-password/bootstrap.d.ts +1 -1
- package/dist/auth-email-password/feature.d.ts +7 -6
- package/dist/auth-email-password/feature.js +3 -1
- package/dist/auth-email-password/handlers/confirm-token-flow.d.ts +1 -1
- package/dist/auth-email-password/handlers/invite-accept-with-login.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
- package/dist/auth-email-password/handlers/invite-signup-complete.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/request-account-unlock.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/request-email-verification.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/request-password-reset.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/signup-confirm.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/signup-request.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
- package/dist/auth-email-password/handlers/token-request-handler.d.ts +2 -2
- package/dist/auth-email-password/index.d.ts +13 -13
- package/dist/auth-email-password/lockout-store.d.ts +1 -1
- package/dist/auth-email-password/magic-link-mail.d.ts +1 -1
- package/dist/auth-email-password/seeding.d.ts +3 -3
- package/dist/auth-email-password/signed-token.d.ts +1 -1
- package/dist/auth-email-password/signup-token-store.d.ts +1 -1
- package/dist/auth-email-password/testing.d.ts +1 -1
- package/dist/auth-email-password/web/auth-gate.d.ts +1 -1
- package/dist/auth-email-password/web/client-plugin.d.ts +2 -2
- package/dist/auth-email-password/web/index.d.ts +42 -42
- package/dist/auth-email-password/web/session-bootstrap-error.d.ts +1 -1
- package/dist/auth-email-password/web/session.d.ts +1 -1
- package/dist/auth-email-password/web/signup-complete-screen.d.ts +1 -1
- package/dist/auth-foundation/feature.d.ts +2 -6
- package/dist/auth-foundation/feature.js +0 -2
- package/dist/auth-foundation/index.d.ts +3 -3
- package/dist/auth-foundation/index.js +1 -1
- package/dist/auth-foundation/resolve-anonymous-access.d.ts +1 -1
- package/dist/auth-mfa/env.d.ts +13 -0
- package/dist/auth-mfa/env.js +24 -0
- package/dist/auth-mfa/errors.d.ts +1 -1
- package/dist/auth-mfa/feature-exports.d.ts +12 -0
- package/dist/auth-mfa/feature-exports.js +72 -0
- package/dist/auth-mfa/feature.d.ts +6 -12
- package/dist/auth-mfa/feature.js +53 -70
- package/dist/auth-mfa/handlers/reencrypt.job.d.ts +1 -1
- package/dist/auth-mfa/index.d.ts +12 -9
- package/dist/auth-mfa/index.js +4 -2
- package/dist/auth-mfa/mfa-challenge-token.d.ts +1 -1
- package/dist/auth-mfa/mfa-preauth-setup-token.d.ts +1 -1
- package/dist/auth-mfa/mfa-status-checker.d.ts +1 -1
- package/dist/auth-mfa/mfa-verify-attempts.d.ts +1 -1
- package/dist/auth-mfa/testing.d.ts +1 -1
- package/dist/auth-mfa/token-secrets.d.ts +7 -0
- package/dist/auth-mfa/token-secrets.js +13 -0
- package/dist/auth-mfa/verify-factor.d.ts +1 -1
- package/dist/auth-mfa/web/index.d.ts +15 -15
- package/dist/auth-mfa/web/mfa-client.d.ts +1 -1
- package/dist/auth-mfa-user-data/index.d.ts +0 -4
- package/dist/auth-mfa-user-data/index.js +0 -2
- package/dist/billing-foundation/checkout-core.d.ts +2 -2
- package/dist/billing-foundation/consumer-protection/confirmation-mail.d.ts +2 -2
- package/dist/billing-foundation/consumer-protection/consent-gate.d.ts +1 -1
- package/dist/billing-foundation/consumer-protection/consent-text.d.ts +2 -2
- package/dist/billing-foundation/consumer-protection/issue-confirmation.d.ts +1 -1
- package/dist/billing-foundation/consumer-protection/register-consent.d.ts +1 -1
- package/dist/billing-foundation/consumer-protection/register-termination.d.ts +1 -1
- package/dist/billing-foundation/consumer-protection/termination-mail.d.ts +3 -3
- package/dist/billing-foundation/consumer-protection/termination-notify.d.ts +5 -5
- package/dist/billing-foundation/consumer-protection/termination-pages.d.ts +2 -2
- package/dist/billing-foundation/consumer-protection/termination-record.d.ts +3 -3
- package/dist/billing-foundation/consumer-protection/termination-request.d.ts +2 -2
- package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +2 -2
- package/dist/billing-foundation/feature.d.ts +1 -3
- package/dist/billing-foundation/feature.js +0 -2
- package/dist/billing-foundation/handlers/billing-plans.query.d.ts +1 -1
- package/dist/billing-foundation/handlers/create-checkout-session.write.d.ts +1 -1
- package/dist/billing-foundation/handlers/create-portal-session.write.d.ts +1 -1
- package/dist/billing-foundation/handlers/start-plan-checkout.write.d.ts +1 -1
- package/dist/billing-foundation/handlers/switch-plan.write.d.ts +1 -1
- package/dist/billing-foundation/index.d.ts +16 -16
- package/dist/billing-foundation/index.js +1 -1
- package/dist/billing-foundation/plan-catalog.d.ts +1 -1
- package/dist/billing-foundation/subscription-tier-sync.d.ts +3 -1
- package/dist/billing-foundation/subscription-tier-sync.js +3 -2
- package/dist/billing-foundation/types.d.ts +3 -3
- package/dist/billing-foundation/validate-options.d.ts +1 -1
- package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +1 -1
- package/dist/billing-foundation/web/index.d.ts +6 -6
- package/dist/cap-counter/calendar-cap-usage-reservation.d.ts +4 -4
- package/dist/cap-counter/cap-reservation.d.ts +1 -1
- package/dist/cap-counter/enforce-cap.d.ts +1 -1
- package/dist/cap-counter/feature.d.ts +0 -4
- package/dist/cap-counter/feature.js +0 -2
- package/dist/cap-counter/index.d.ts +13 -13
- package/dist/cap-counter/index.js +1 -1
- package/dist/cap-counter/value-cap-guard.d.ts +1 -1
- package/dist/cap-counter/with-cap-enforcement.d.ts +1 -1
- package/dist/cap-overview/feature.d.ts +1 -1
- package/dist/cap-overview/handlers/caps-usage.query.d.ts +1 -1
- package/dist/cap-overview/handlers/tenant-caps-list.query.d.ts +1 -1
- package/dist/cap-overview/index.d.ts +6 -6
- package/dist/cap-overview/screens.d.ts +1 -1
- package/dist/cap-overview/types.d.ts +1 -1
- package/dist/cap-overview/usage-math.d.ts +1 -1
- package/dist/cap-overview/web/cap-usage-bar.d.ts +1 -1
- package/dist/cap-overview/web/index.d.ts +4 -4
- package/dist/channel-discord/discord-channel.d.ts +1 -1
- package/dist/channel-discord/feature.d.ts +1 -1
- package/dist/channel-discord/index.d.ts +2 -2
- package/dist/channel-email/email-channel.d.ts +15 -7
- package/dist/channel-email/email-channel.js +17 -3
- package/dist/channel-email/env.d.ts +14 -0
- package/dist/channel-email/env.js +27 -0
- package/dist/channel-email/feature.d.ts +14 -3
- package/dist/channel-email/feature.js +6 -2
- package/dist/channel-email/index.d.ts +6 -5
- package/dist/channel-email/index.js +2 -1
- package/dist/channel-email/pii-guard.d.ts +1 -1
- package/dist/channel-email/smtp-transport.d.ts +1 -1
- package/dist/channel-email/types.d.ts +1 -1
- package/dist/channel-in-app/in-app-channel.d.ts +1 -1
- package/dist/channel-in-app/index.d.ts +4 -4
- package/dist/channel-push/feature.d.ts +1 -1
- package/dist/channel-push/index.d.ts +3 -3
- package/dist/channel-push/push-channel.d.ts +2 -2
- package/dist/channel-slack/feature.d.ts +1 -1
- package/dist/channel-slack/index.d.ts +2 -2
- package/dist/channel-slack/slack-channel.d.ts +1 -1
- package/dist/channel-teams/feature.d.ts +1 -1
- package/dist/channel-teams/index.d.ts +2 -2
- package/dist/channel-teams/teams-channel.d.ts +1 -1
- package/dist/channel-telegram/feature.d.ts +1 -1
- package/dist/channel-telegram/index.d.ts +2 -2
- package/dist/channel-telegram/telegram-channel.d.ts +1 -1
- package/dist/compliance-profiles/feature.d.ts +1 -1
- package/dist/compliance-profiles/index.d.ts +3 -3
- package/dist/compliance-profiles/web/index.d.ts +2 -2
- package/dist/compliance-profiles-ops/index.d.ts +0 -8
- package/dist/compliance-profiles-ops/index.js +0 -2
- package/dist/config/feature.d.ts +1 -1
- package/dist/config/handlers/reencrypt.job.d.ts +1 -1
- package/dist/config/index.d.ts +8 -8
- package/dist/config/web/client-plugin.d.ts +1 -1
- package/dist/config/web/i18n.js +1 -2
- package/dist/config/web/index.d.ts +2 -2
- package/dist/crypto-shredding/env/index.d.ts +21 -0
- package/dist/crypto-shredding/env/index.js +78 -0
- package/dist/crypto-shredding/feature.d.ts +17 -2
- package/dist/crypto-shredding/feature.js +5 -1
- package/dist/crypto-shredding/index.d.ts +4 -3
- package/dist/crypto-shredding/index.js +1 -0
- package/dist/custom-fields/feature.d.ts +0 -17
- package/dist/custom-fields/feature.js +0 -2
- package/dist/custom-fields/index.d.ts +10 -10
- package/dist/custom-fields/index.js +1 -1
- package/dist/custom-fields/lib/define-or-resurrect.d.ts +2 -2
- package/dist/custom-fields/lib/field-access.d.ts +1 -1
- package/dist/custom-fields/lib/field-definition-row.d.ts +1 -1
- package/dist/custom-fields/lib/quota.d.ts +1 -1
- package/dist/custom-fields/web/index.d.ts +3 -3
- package/dist/data-retention/_internal/parse-override.d.ts +1 -1
- package/dist/data-retention/feature.d.ts +7 -7
- package/dist/data-retention/handlers/policy-for.query.d.ts +1 -1
- package/dist/data-retention/index.d.ts +3 -3
- package/dist/data-retention/resolve-for-tenant.d.ts +2 -2
- package/dist/data-retention/resolve-tenant-preset.d.ts +1 -1
- package/dist/data-retention/resolver.d.ts +1 -1
- package/dist/data-retention/run-retention-cleanup.d.ts +2 -2
- package/dist/delivery/attachment-ref.d.ts +1 -1
- package/dist/delivery/attempt-log.d.ts +1 -1
- package/dist/delivery/channel-context.d.ts +2 -2
- package/dist/delivery/chat-webhook-channel.d.ts +2 -2
- package/dist/delivery/constants.d.ts +1 -1
- package/dist/delivery/delivery-service.d.ts +2 -2
- package/dist/delivery/feature.js +3 -1
- package/dist/delivery/handlers/log.query.d.ts +1 -1
- package/dist/delivery/handlers/unsubscribe-page-chrome.query.d.ts +5 -0
- package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +44 -0
- package/dist/delivery/index.d.ts +20 -19
- package/dist/delivery/index.js +3 -2
- package/dist/delivery/notify-factory.d.ts +1 -1
- package/dist/delivery/public-names.d.ts +1 -0
- package/dist/delivery/public-names.js +1 -0
- package/dist/delivery/testing.d.ts +3 -3
- package/dist/delivery/types.d.ts +3 -3
- package/dist/delivery/unsubscribe-link.d.ts +1 -1
- package/dist/delivery/unsubscribe-page-strings.d.ts +4 -0
- package/dist/delivery/unsubscribe-page-strings.js +4 -0
- package/dist/delivery/unsubscribe-page.d.ts +27 -0
- package/dist/delivery/unsubscribe-page.js +192 -0
- package/dist/delivery/unsubscribe.d.ts +22 -1
- package/dist/delivery/unsubscribe.js +152 -65
- package/dist/delivery/web/index.d.ts +2 -2
- package/dist/derivatives-sharp/feature.d.ts +0 -4
- package/dist/derivatives-sharp/feature.js +0 -2
- package/dist/derivatives-sharp/index.d.ts +2 -2
- package/dist/derivatives-sharp/index.js +1 -1
- package/dist/document-ingest-foundation/feature.d.ts +0 -7
- package/dist/document-ingest-foundation/feature.js +0 -2
- package/dist/document-ingest-foundation/index.d.ts +7 -7
- package/dist/document-ingest-foundation/index.js +1 -1
- package/dist/document-ingest-foundation/pages.d.ts +1 -1
- package/dist/document-ingest-foundation/providers.d.ts +1 -1
- package/dist/document-ingest-foundation/write-document-extract.d.ts +1 -1
- package/dist/feature-toggles/compose-tier-resolver.d.ts +1 -1
- package/dist/feature-toggles/feature.d.ts +5 -5
- package/dist/feature-toggles/handlers/set.write.d.ts +1 -1
- package/dist/feature-toggles/index.d.ts +3 -3
- package/dist/feature-toggles/toggle-sync-signal.d.ts +1 -1
- package/dist/feature-toggles/web/index.d.ts +1 -1
- package/dist/file-derivatives/feature.d.ts +0 -2
- package/dist/file-derivatives/feature.js +0 -2
- package/dist/file-derivatives/index.d.ts +4 -4
- package/dist/file-derivatives/index.js +1 -1
- package/dist/file-foundation/feature.d.ts +0 -6
- package/dist/file-foundation/feature.js +0 -2
- package/dist/file-foundation/index.d.ts +2 -2
- package/dist/file-foundation/index.js +1 -1
- package/dist/file-provider-inmemory/feature.d.ts +0 -4
- package/dist/file-provider-inmemory/feature.js +0 -2
- package/dist/file-provider-inmemory/index.d.ts +1 -1
- package/dist/file-provider-inmemory/index.js +1 -1
- package/dist/file-provider-s3/env-feature.d.ts +12 -2
- package/dist/file-provider-s3/env-feature.js +9 -6
- package/dist/file-provider-s3/env-schema.d.ts +38 -0
- package/dist/file-provider-s3/env-schema.js +51 -0
- package/dist/file-provider-s3/feature.d.ts +1 -14
- package/dist/file-provider-s3/feature.js +0 -2
- package/dist/file-provider-s3/index.d.ts +2 -1
- package/dist/file-provider-s3/index.js +2 -1
- package/dist/file-provider-s3/lib/env-helper.d.ts +1 -1
- package/dist/file-provider-s3/lib/index.d.ts +3 -3
- package/dist/files/index.d.ts +1 -1
- package/dist/files-tenant-data/index.d.ts +2 -2
- package/dist/folders/feature.d.ts +0 -4
- package/dist/folders/feature.js +0 -2
- package/dist/folders/index.d.ts +7 -7
- package/dist/folders/index.js +1 -1
- package/dist/folders/web/folder-manager.d.ts +1 -1
- package/dist/folders/web/index.d.ts +5 -5
- package/dist/folders-user-data/index.d.ts +0 -4
- package/dist/folders-user-data/index.js +0 -2
- package/dist/form-draft/db/queries/cleanup.d.ts +1 -1
- package/dist/form-draft/feature.d.ts +0 -4
- package/dist/form-draft/feature.js +0 -2
- package/dist/form-draft/handlers/cleanup.job.d.ts +1 -1
- package/dist/form-draft/handlers/get.query.d.ts +1 -1
- package/dist/form-draft/index.d.ts +10 -10
- package/dist/form-draft/index.js +1 -1
- package/dist/form-draft/lookup.d.ts +1 -1
- package/dist/form-draft/release-file-refs.d.ts +1 -1
- package/dist/form-draft-user-data/index.d.ts +0 -4
- package/dist/form-draft-user-data/index.js +0 -2
- package/dist/foundation-shared/build-info-env.d.ts +7 -0
- package/dist/foundation-shared/build-info-env.js +15 -0
- package/dist/foundation-shared/demo-admin-env.d.ts +12 -0
- package/dist/foundation-shared/demo-admin-env.js +21 -0
- package/dist/foundation-shared/index.d.ts +5 -3
- package/dist/foundation-shared/index.js +2 -0
- package/dist/host-routing/constants.d.ts +8 -0
- package/dist/host-routing/constants.js +19 -0
- package/dist/host-routing/dispatch.d.ts +24 -0
- package/dist/host-routing/dispatch.js +102 -0
- package/dist/host-routing/feature.d.ts +3 -0
- package/dist/host-routing/feature.js +102 -0
- package/dist/host-routing/host.d.ts +14 -0
- package/dist/host-routing/host.js +37 -0
- package/dist/host-routing/index.d.ts +5 -0
- package/dist/host-routing/index.js +4 -0
- package/dist/host-routing/options.d.ts +27 -0
- package/dist/host-routing/options.js +1 -0
- package/dist/host-routing/validate-options.d.ts +2 -0
- package/dist/host-routing/validate-options.js +29 -0
- package/dist/inbound-mail-foundation/connect-routes.d.ts +2 -2
- package/dist/inbound-mail-foundation/feature.d.ts +0 -4
- package/dist/inbound-mail-foundation/feature.js +0 -2
- package/dist/inbound-mail-foundation/handlers/account-state.d.ts +1 -1
- package/dist/inbound-mail-foundation/index.d.ts +12 -12
- package/dist/inbound-mail-foundation/index.js +1 -1
- package/dist/inbound-mail-foundation/oauth-access-token.d.ts +1 -1
- package/dist/inbound-mail-foundation/provider-factory.d.ts +1 -1
- package/dist/inbound-mail-foundation/types.d.ts +1 -1
- package/dist/inbound-mail-foundation/watch-supervisor.d.ts +2 -2
- package/dist/inbound-provider-imap/feature.d.ts +1 -5
- package/dist/inbound-provider-imap/feature.js +0 -2
- package/dist/inbound-provider-imap/imap-client.d.ts +1 -1
- package/dist/inbound-provider-imap/index.d.ts +3 -3
- package/dist/inbound-provider-imap/index.js +1 -1
- package/dist/inbound-provider-inmemory/feature.d.ts +0 -4
- package/dist/inbound-provider-inmemory/feature.js +0 -2
- package/dist/inbound-provider-inmemory/index.d.ts +1 -1
- package/dist/inbound-provider-inmemory/index.js +1 -1
- package/dist/jobs/handlers/tenant-runs.query.d.ts +1 -1
- package/dist/jobs/index.d.ts +9 -9
- package/dist/jobs/web/index.d.ts +1 -1
- package/dist/ledger/feature.d.ts +0 -4
- package/dist/ledger/feature.js +0 -2
- package/dist/ledger/index.d.ts +10 -10
- package/dist/ledger/index.js +1 -1
- package/dist/ledger/recurring.d.ts +2 -2
- package/dist/ledger/reports.d.ts +2 -2
- package/dist/ledger/web/index.d.ts +3 -3
- package/dist/legal-pages/constants.d.ts +12 -0
- package/dist/legal-pages/constants.js +16 -0
- package/dist/legal-pages/feature.d.ts +6 -3
- package/dist/legal-pages/feature.js +5 -2
- package/dist/legal-pages/index.d.ts +5 -3
- package/dist/legal-pages/index.js +3 -1
- package/dist/legal-pages/layout.d.ts +10 -0
- package/dist/legal-pages/layout.js +32 -0
- package/dist/legal-pages/lib/boot-check.d.ts +1 -1
- package/dist/legal-pages/lib/validate-routes.d.ts +1 -1
- package/dist/legal-pages/markdown.d.ts +2 -2
- package/dist/legal-pages/seed.d.ts +12 -0
- package/dist/legal-pages/seed.js +38 -0
- package/dist/legal-pages/web/index.d.ts +1 -1
- package/dist/mail-foundation/feature.d.ts +4 -7
- package/dist/mail-foundation/feature.js +16 -14
- package/dist/mail-foundation/i18n.d.ts +14 -0
- package/dist/mail-foundation/i18n.js +8 -0
- package/dist/mail-foundation/index.d.ts +1 -1
- package/dist/mail-foundation/index.js +1 -1
- package/dist/mail-transport-inmemory/feature.d.ts +0 -4
- package/dist/mail-transport-inmemory/feature.js +6 -2
- package/dist/mail-transport-inmemory/index.d.ts +1 -1
- package/dist/mail-transport-inmemory/index.js +1 -1
- package/dist/mail-transport-smtp/config-keys.d.ts +7 -0
- package/dist/mail-transport-smtp/config-keys.js +65 -0
- package/dist/mail-transport-smtp/feature.d.ts +0 -16
- package/dist/mail-transport-smtp/feature.js +5 -35
- package/dist/mail-transport-smtp/i18n.d.ts +41 -0
- package/dist/mail-transport-smtp/i18n.js +28 -0
- package/dist/mail-transport-smtp/index.d.ts +1 -1
- package/dist/mail-transport-smtp/index.js +1 -1
- package/dist/managed-pages/branding.d.ts +1 -1
- package/dist/managed-pages/feature.d.ts +1 -1
- package/dist/managed-pages/handlers/branding.query.d.ts +1 -1
- package/dist/managed-pages/index.d.ts +5 -5
- package/dist/managed-pages/web/index.d.ts +2 -2
- package/dist/metrics/compute.d.ts +2 -2
- package/dist/metrics/default-metrics.d.ts +9 -9
- package/dist/metrics/feature.d.ts +1 -1
- package/dist/metrics/filters.d.ts +1 -1
- package/dist/metrics/index.d.ts +5 -5
- package/dist/metrics/types.d.ts +1 -1
- package/dist/metrics/validate.d.ts +1 -1
- package/dist/metrics/window.d.ts +2 -2
- package/dist/notes-history/feature.d.ts +0 -4
- package/dist/notes-history/feature.js +0 -2
- package/dist/notes-history/handlers/add-note.write.d.ts +1 -1
- package/dist/notes-history/index.d.ts +6 -6
- package/dist/notes-history/index.js +1 -1
- package/dist/notes-history/web/index.d.ts +3 -3
- package/dist/notes-history-user-data/index.d.ts +1 -5
- package/dist/notes-history-user-data/index.js +0 -2
- package/dist/page-render/index.d.ts +7 -7
- package/dist/page-render/layout.d.ts +1 -1
- package/dist/page-render/web.d.ts +5 -5
- package/dist/personal-access-tokens/feature.d.ts +3 -3
- package/dist/personal-access-tokens/handlers/available-scopes.query.d.ts +1 -1
- package/dist/personal-access-tokens/i18n.d.ts +1 -1
- package/dist/personal-access-tokens/index.d.ts +13 -13
- package/dist/personal-access-tokens/resolver.d.ts +1 -1
- package/dist/personal-access-tokens/screens.d.ts +1 -1
- package/dist/presets/dsgvo-self-service.d.ts +3 -1
- package/dist/presets/dsgvo-self-service.js +2 -0
- package/dist/presets/index.d.ts +2 -2
- package/dist/presets/security-baseline.d.ts +2 -0
- package/dist/presets/security-baseline.js +2 -0
- package/dist/rate-limiting/index.d.ts +2 -2
- package/dist/readiness/feature.d.ts +0 -8
- package/dist/readiness/feature.js +0 -2
- package/dist/readiness/index.d.ts +3 -3
- package/dist/readiness/index.js +1 -1
- package/dist/renderer-foundation/api.d.ts +2 -2
- package/dist/renderer-foundation/constants.d.ts +2 -2
- package/dist/renderer-foundation/feature.d.ts +1 -1
- package/dist/renderer-foundation/index.d.ts +5 -5
- package/dist/renderer-foundation/types.d.ts +24 -2
- package/dist/renderer-pdf/feature.d.ts +1 -1
- package/dist/renderer-pdf/index.d.ts +2 -2
- package/dist/renderer-pdf/render-table-pdf.d.ts +1 -1
- package/dist/secrets/constants.d.ts +7 -0
- package/dist/secrets/constants.js +7 -0
- package/dist/secrets/db/queries/read.d.ts +1 -1
- package/dist/secrets/feature.d.ts +5 -3
- package/dist/secrets/feature.js +19 -5
- package/dist/secrets/handlers/delete.write.js +4 -3
- package/dist/secrets/handlers/rotate.job.d.ts +1 -1
- package/dist/secrets/handlers/set.write.js +4 -3
- package/dist/secrets/index.d.ts +7 -7
- package/dist/secrets/index.js +1 -1
- package/dist/secrets/secrets-context.d.ts +1 -1
- package/dist/seo/feature.d.ts +3 -3
- package/dist/seo/index.d.ts +6 -6
- package/dist/sessions/feature.d.ts +1 -1
- package/dist/sessions/index.d.ts +8 -8
- package/dist/sessions/session-callbacks.d.ts +1 -1
- package/dist/sessions/testing.d.ts +1 -1
- package/dist/shared/index.d.ts +31 -31
- package/dist/step-dispatcher/dispatch-payload.d.ts +2 -2
- package/dist/step-dispatcher/index.d.ts +3 -3
- package/dist/subscription-mollie/feature.d.ts +2 -2
- package/dist/subscription-mollie/index.d.ts +3 -3
- package/dist/subscription-mollie/verify-webhook.d.ts +1 -1
- package/dist/subscription-stripe/feature.d.ts +17 -1
- package/dist/subscription-stripe/feature.js +19 -1
- package/dist/subscription-stripe/index.d.ts +2 -2
- package/dist/subscription-stripe/index.js +1 -1
- package/dist/subscription-stripe/plugin-methods.d.ts +1 -1
- package/dist/subscription-stripe/verify-webhook.d.ts +1 -1
- package/dist/tags/feature.d.ts +0 -4
- package/dist/tags/feature.js +0 -2
- package/dist/tags/handlers/assign-tag.write.d.ts +1 -1
- package/dist/tags/handlers/remove-tag.write.d.ts +1 -1
- package/dist/tags/index.d.ts +11 -11
- package/dist/tags/index.js +1 -1
- package/dist/tags/web/index.d.ts +9 -9
- package/dist/template-resolver/api.d.ts +4 -4
- package/dist/template-resolver/constants.d.ts +1 -2
- package/dist/template-resolver/constants.js +0 -1
- package/dist/template-resolver/document-sanitizer.d.ts +1 -1
- package/dist/template-resolver/handlers/bundle-import.d.ts +3 -3
- package/dist/template-resolver/handlers/collection-shared.d.ts +2 -2
- package/dist/template-resolver/handlers/copy-locale.write.d.ts +1 -1
- package/dist/template-resolver/handlers/diff-to-system.query.d.ts +1 -1
- package/dist/template-resolver/handlers/find-by-id.query.d.ts +1 -1
- package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -1
- package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -1
- package/dist/template-resolver/handlers/layout-source.query.d.ts +3 -3
- package/dist/template-resolver/handlers/override-diff.d.ts +2 -2
- package/dist/template-resolver/handlers/overview.query.d.ts +3 -3
- package/dist/template-resolver/handlers/preview.query.d.ts +1 -1
- package/dist/template-resolver/handlers/resource-link-pdf.write.d.ts +1 -1
- package/dist/template-resolver/handlers/resource-upload.write.d.ts +1 -1
- package/dist/template-resolver/handlers/send-test.write.d.ts +1 -1
- package/dist/template-resolver/handlers/send-test.write.js +4 -2
- package/dist/template-resolver/handlers/shared.d.ts +1 -1
- package/dist/template-resolver/handlers/template-gates.d.ts +4 -4
- package/dist/template-resolver/handlers/template-write.d.ts +4 -4
- package/dist/template-resolver/handlers/tenant-overrides.query.d.ts +1 -1
- package/dist/template-resolver/handlers/toggle-status.write.d.ts +1 -1
- package/dist/template-resolver/handlers/upsert-system.write.d.ts +1 -1
- package/dist/template-resolver/handlers/upsert-tenant.write.d.ts +1 -1
- package/dist/template-resolver/handlers/usage.query.d.ts +1 -1
- package/dist/template-resolver/handlers/validate.query.d.ts +3 -3
- package/dist/template-resolver/index.d.ts +25 -25
- package/dist/template-resolver/layout-appearance.d.ts +1 -1
- package/dist/template-resolver/layout-regions.d.ts +2 -2
- package/dist/template-resolver/linked-resources.d.ts +1 -1
- package/dist/template-resolver/preview-display-html.d.ts +1 -1
- package/dist/template-resolver/resource-image.d.ts +1 -1
- package/dist/template-resolver/seeding.d.ts +2 -2
- package/dist/template-resolver/store-template-resource.d.ts +1 -1
- package/dist/template-resolver/template-draft.d.ts +2 -2
- package/dist/template-resolver/template-meta.d.ts +2 -2
- package/dist/template-resolver/template-preview.d.ts +7 -6
- package/dist/template-resolver/template-preview.js +19 -12
- package/dist/template-resolver/template-resources.d.ts +1 -1
- package/dist/template-resolver/template-usage.d.ts +3 -1
- package/dist/template-resolver/template-usage.js +1 -0
- package/dist/template-resolver/template-validation.d.ts +1 -1
- package/dist/template-resolver/testing.d.ts +1 -1
- package/dist/template-resolver/user-content-table.d.ts +1 -1
- package/dist/template-resolver/web/document-editor-extensions.d.ts +1 -1
- package/dist/template-resolver/web/document-editor-extensions.js +6 -2
- package/dist/template-resolver/web/document-editor.d.ts +1 -1
- package/dist/template-resolver/web/document-tiptap-editor.d.ts +1 -1
- package/dist/template-resolver/web/document-tiptap-editor.js +13 -10
- package/dist/template-resolver/web/editor-handle.d.ts +1 -1
- package/dist/template-resolver/web/index.d.ts +7 -7
- package/dist/template-resolver/web/placeholder-line-editor-lazy.d.ts +2 -2
- package/dist/template-resolver/web/placeholder-line-editor.d.ts +1 -1
- package/dist/template-resolver-user-data/index.d.ts +0 -4
- package/dist/template-resolver-user-data/index.js +0 -2
- package/dist/tenant/feature.d.ts +1 -1
- package/dist/tenant/index.d.ts +10 -10
- package/dist/tenant/is-tenant-serving-public-content.d.ts +1 -1
- package/dist/tenant/testing.d.ts +1 -1
- package/dist/tenant/web/index.d.ts +3 -3
- package/dist/tenant-handover/feature.d.ts +1 -1
- package/dist/tenant-handover/index.d.ts +3 -3
- package/dist/tenant-handover/signup-handover-provider.d.ts +1 -1
- package/dist/tenant-lifecycle/feature.d.ts +2 -2
- package/dist/tenant-lifecycle/index.d.ts +3 -3
- package/dist/tenant-lifecycle/run-tenant-destroy.d.ts +1 -1
- package/dist/tenant-lifecycle/stages.d.ts +1 -1
- package/dist/tenant-lifecycle/testing.d.ts +1 -1
- package/dist/tenant-settings/feature.d.ts +1 -3
- package/dist/tenant-settings/feature.js +0 -2
- package/dist/tenant-settings/index.d.ts +4 -4
- package/dist/tenant-settings/index.js +1 -1
- package/dist/tier-engine/entity.d.ts +1 -1
- package/dist/tier-engine/feature.d.ts +2 -4
- package/dist/tier-engine/feature.js +0 -2
- package/dist/tier-engine/handlers/get-tenant-tier.query.d.ts +1 -1
- package/dist/tier-engine/i18n.d.ts +0 -2
- package/dist/tier-engine/i18n.js +4 -4
- package/dist/tier-engine/index.d.ts +8 -8
- package/dist/tier-engine/index.js +1 -1
- package/dist/tier-engine/tier-option-gate.d.ts +1 -1
- package/dist/tier-engine/tier-resolver.d.ts +1 -1
- package/dist/tier-engine/web/client-plugin.js +3 -2
- package/dist/tier-engine/web/index.d.ts +1 -1
- package/dist/user/index.d.ts +8 -8
- package/dist/user/invited-global-roles.d.ts +1 -1
- package/dist/user/principal-status.d.ts +1 -1
- package/dist/user/seeding.d.ts +1 -1
- package/dist/user/testing.d.ts +1 -1
- package/dist/user-data-rights/deletion-token.d.ts +1 -1
- package/dist/user-data-rights/feature.d.ts +5 -5
- package/dist/user-data-rights/feature.js +7 -4
- package/dist/user-data-rights/handlers/request-deletion.write.d.ts +1 -1
- package/dist/user-data-rights/handlers/run-forget-cleanup.write.d.ts +3 -3
- package/dist/user-data-rights/index.d.ts +13 -13
- package/dist/user-data-rights/lib/default-mailers.d.ts +7 -4
- package/dist/user-data-rights/lib/default-mailers.js +25 -3
- package/dist/user-data-rights/web/client-plugin.d.ts +1 -1
- package/dist/user-data-rights/web/index.d.ts +8 -8
- package/dist/user-data-rights-defaults/index.d.ts +11 -11
- package/dist/user-profile/index.d.ts +2 -2
- package/dist/user-profile/web/index.d.ts +2 -2
- package/dist/waitlist/constants.d.ts +9 -0
- package/dist/waitlist/constants.js +11 -0
- package/dist/waitlist/entity.d.ts +38 -6
- package/dist/waitlist/entity.js +4 -2
- package/dist/waitlist/entries-admin.d.ts +4 -0
- package/dist/waitlist/entries-admin.js +42 -0
- package/dist/waitlist/feature.d.ts +1 -1
- package/dist/waitlist/feature.js +16 -1
- package/dist/waitlist/handlers/export-purge.write.d.ts +12 -0
- package/dist/waitlist/handlers/export-purge.write.js +61 -0
- package/dist/waitlist/handlers/invite.write.d.ts +1 -1
- package/dist/waitlist/handlers/submit.write.d.ts +1 -1
- package/dist/waitlist/i18n.js +4 -0
- package/dist/waitlist/import.d.ts +24 -0
- package/dist/waitlist/import.js +51 -0
- package/dist/waitlist/index.d.ts +7 -5
- package/dist/waitlist/index.js +2 -0
- package/dist/waitlist/legacy-migrate.d.ts +27 -0
- package/dist/waitlist/legacy-migrate.js +173 -0
- package/dist/waitlist/lib.d.ts +2 -2
- package/dist/waitlist/link-on-signup.d.ts +3 -0
- package/dist/waitlist/link-on-signup.js +83 -0
- package/dist/waitlist/options.d.ts +11 -3
- package/dist/waitlist/payloads.d.ts +3 -0
- package/dist/waitlist/payloads.js +1 -0
- package/dist/workflow-runner/feature.d.ts +0 -4
- package/dist/workflow-runner/feature.js +0 -2
- package/dist/workflow-runner/index.d.ts +4 -4
- package/dist/workflow-runner/index.js +1 -1
- package/package.json +43 -27
- package/src/account-security/changes.json +8 -0
- package/src/auth-email-password/changes.json +6 -0
- package/src/auth-foundation/changes.json +8 -0
- package/src/auth-mfa/changes.json +6 -0
- package/src/auth-mfa-user-data/changes.json +10 -1
- package/src/billing-foundation/changes.json +8 -0
- package/src/cap-counter/changes.json +8 -0
- package/src/channel-email/changes.json +13 -0
- package/src/compliance-profiles-ops/changes.json +10 -0
- package/src/crypto-shredding/changes.json +6 -0
- package/src/custom-fields/changes.json +8 -0
- package/src/delivery/changes.json +12 -0
- package/src/derivatives-sharp/changes.json +8 -0
- package/src/document-ingest-foundation/changes.json +8 -0
- package/src/file-derivatives/changes.json +8 -0
- package/src/file-foundation/changes.json +8 -0
- package/src/file-provider-inmemory/changes.json +10 -1
- package/src/file-provider-s3/changes.json +22 -0
- package/src/folders/changes.json +8 -0
- package/src/folders-user-data/changes.json +10 -1
- package/src/form-draft/changes.json +8 -0
- package/src/form-draft-user-data/changes.json +10 -1
- package/src/foundation-shared/changes.json +8 -1
- package/src/host-routing/changes.json +8 -0
- package/src/inbound-mail-foundation/changes.json +8 -0
- package/src/inbound-provider-imap/changes.json +8 -0
- package/src/inbound-provider-inmemory/changes.json +10 -1
- package/src/ledger/changes.json +8 -0
- package/src/legal-pages/changes.json +6 -0
- package/src/mail-foundation/changes.json +10 -1
- package/src/mail-transport-inmemory/changes.json +10 -1
- package/src/mail-transport-smtp/changes.json +15 -0
- package/src/notes-history/changes.json +8 -0
- package/src/notes-history-user-data/changes.json +8 -0
- package/src/presets/changes.json +6 -0
- package/src/readiness/changes.json +10 -1
- package/src/secrets/changes.json +18 -0
- package/src/subscription-stripe/changes.json +6 -0
- package/src/tags/changes.json +8 -0
- package/src/template-resolver/changes.json +6 -0
- package/src/template-resolver-user-data/changes.json +10 -0
- package/src/tenant-settings/changes.json +10 -1
- package/src/tier-engine/changes.json +8 -0
- package/src/user-data-rights/changes.json +6 -0
- package/src/waitlist/changes.json +7 -0
- package/src/workflow-runner/changes.json +8 -0
- package/dist/file-provider-s3-env/index.d.ts +0 -8
- package/dist/file-provider-s3-env/index.js +0 -7
- package/dist/files-provider-s3/index.d.ts +0 -5
- package/dist/files-provider-s3/index.js +0 -5
- package/src/file-provider-s3-env/changes.json +0 -1
- package/src/files-provider-s3/changes.json +0 -1
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// Client-feature factory for tier-engine. Supplies the default translations
|
|
3
3
|
// for the declarative tier-admin actionForm (registered server-side via
|
|
4
4
|
// r.screen in the feature); the app places the screen only via r.nav.
|
|
5
|
-
import { mergeTranslations } from "@cosmicdrift/kumiko-renderer";
|
|
5
|
+
import { mergeTranslations, translationsByLocaleFromKeys, } from "@cosmicdrift/kumiko-renderer";
|
|
6
6
|
import { TIER_ENGINE_FEATURE } from "../constants.js";
|
|
7
|
-
import {
|
|
7
|
+
import { TIER_ENGINE_I18N } from "../i18n.js";
|
|
8
|
+
const defaultTranslations = translationsByLocaleFromKeys(TIER_ENGINE_I18N);
|
|
8
9
|
export function tierEngineClient(options) {
|
|
9
10
|
return {
|
|
10
11
|
name: TIER_ENGINE_FEATURE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { type TierEngineClientOptions, tierEngineClient } from "./client-plugin.
|
|
1
|
+
export { type TierEngineClientOptions, tierEngineClient } from "./client-plugin.tsx";
|
package/dist/user/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { UserCommandSchemas } from "./command-schemas.
|
|
2
|
-
export { USER_FEATURE, UserErrors, UserHandlers, UserQueries } from "./constants.
|
|
3
|
-
export { backfillUserStreamTenants, type UserStreamBackfillResult, } from "./db/queries/stream-tenant-backfill.
|
|
4
|
-
export { createUserFeature } from "./feature.
|
|
5
|
-
export { isPrincipalBlocked, isPrincipalRowBlocked, principalStatusPlugin, } from "./principal-status.
|
|
6
|
-
export { resolveUserDisplayNames } from "./resolve-display-names.
|
|
7
|
-
export type { UserStatus } from "./schema/user.
|
|
8
|
-
export { USER_ANONYMIZED_DISPLAY_NAME, USER_ANONYMIZED_EMAIL_DOMAIN, USER_ANONYMIZED_EMAIL_PREFIX, USER_DELETED_DISPLAY_NAME, USER_DELETED_EMAIL_PREFIX, USER_STATUS, userEntity, userTable, } from "./schema/user.
|
|
1
|
+
export { UserCommandSchemas } from "./command-schemas.ts";
|
|
2
|
+
export { USER_FEATURE, UserErrors, UserHandlers, UserQueries } from "./constants.ts";
|
|
3
|
+
export { backfillUserStreamTenants, type UserStreamBackfillResult, } from "./db/queries/stream-tenant-backfill.ts";
|
|
4
|
+
export { createUserFeature } from "./feature.ts";
|
|
5
|
+
export { isPrincipalBlocked, isPrincipalRowBlocked, principalStatusPlugin, } from "./principal-status.ts";
|
|
6
|
+
export { resolveUserDisplayNames } from "./resolve-display-names.ts";
|
|
7
|
+
export type { UserStatus } from "./schema/user.ts";
|
|
8
|
+
export { USER_ANONYMIZED_DISPLAY_NAME, USER_ANONYMIZED_EMAIL_DOMAIN, USER_ANONYMIZED_EMAIL_PREFIX, USER_DELETED_DISPLAY_NAME, USER_DELETED_EMAIL_PREFIX, USER_STATUS, userEntity, userTable, } from "./schema/user.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DbRunner } from "@cosmicdrift/kumiko-framework/db";
|
|
2
|
-
import { type GlobalRole } from "./constants.
|
|
2
|
+
import { type GlobalRole } from "./constants.ts";
|
|
3
3
|
export declare function parseInvitedGlobalRoles(raw: unknown): readonly GlobalRole[];
|
|
4
4
|
export declare function grantInvitedGlobalRoles(db: DbRunner, options: {
|
|
5
5
|
readonly userId: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PrincipalStatusPlugin } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type UserStatus } from "./schema/user.
|
|
2
|
+
import { type UserStatus } from "./schema/user.ts";
|
|
3
3
|
export declare function isPrincipalBlocked(status: UserStatus): boolean;
|
|
4
4
|
export declare function isPrincipalRowBlocked(row: {
|
|
5
5
|
readonly status: UserStatus;
|
package/dist/user/seeding.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DbConnection } from "@cosmicdrift/kumiko-framework/db";
|
|
2
2
|
import type { SessionUser } from "@cosmicdrift/kumiko-framework/engine";
|
|
3
|
-
import { type SeedTenantHooks } from "../tenant/seeding.
|
|
3
|
+
import { type SeedTenantHooks } from "../tenant/seeding.ts";
|
|
4
4
|
export type SeedUserOptions = {
|
|
5
5
|
readonly email: string;
|
|
6
6
|
readonly displayName: string;
|
package/dist/user/testing.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./seeding.
|
|
1
|
+
export * from "./seeding.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Temporal } from "@cosmicdrift/kumiko-types/temporal";
|
|
2
|
-
import { type RowBoundGrantResult } from "../shared/index.
|
|
2
|
+
import { type RowBoundGrantResult } from "../shared/index.ts";
|
|
3
3
|
export declare function signDeletionToken(userId: string, requestId: string, ttlMinutes: number, secret: string, now?: Temporal.Instant): {
|
|
4
4
|
readonly token: string;
|
|
5
5
|
readonly expiresAt: Temporal.Instant;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type SendDeletionRequestedEmailFn } from "./handlers/request-deletion.write.
|
|
3
|
-
import { type SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.
|
|
4
|
-
import { type GdprMailDefaults } from "./lib/default-mailers.
|
|
5
|
-
import { type SendExportFailedEmailFn, type SendExportReadyEmailFn } from "./run-export-jobs.
|
|
6
|
-
import { type SendDeletionExecutedEmailFn } from "./run-forget-cleanup.
|
|
2
|
+
import { type SendDeletionRequestedEmailFn } from "./handlers/request-deletion.write.ts";
|
|
3
|
+
import { type SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.ts";
|
|
4
|
+
import { type GdprMailDefaults } from "./lib/default-mailers.ts";
|
|
5
|
+
import { type SendExportFailedEmailFn, type SendExportReadyEmailFn } from "./run-export-jobs.ts";
|
|
6
|
+
import { type SendDeletionExecutedEmailFn } from "./run-forget-cleanup.ts";
|
|
7
7
|
/**
|
|
8
8
|
* Options fuer createUserDataRightsFeature. Notification-Callbacks
|
|
9
9
|
* (Atom 5) folgen dem password-reset-Pattern aus auth-routes.ts.
|
|
@@ -521,15 +521,18 @@ export function createUserDataRightsFeature(opts = {}) {
|
|
|
521
521
|
db: forgetDb,
|
|
522
522
|
userId: forgetUserId,
|
|
523
523
|
});
|
|
524
|
-
// Without an app callback the default mail goes out when
|
|
525
|
-
// mail renderer are mounted. The user is already erased
|
|
526
|
-
// delivery log: an attempt row would be new personal data.
|
|
524
|
+
// Without an app callback the default mail goes out when an email channel or a
|
|
525
|
+
// mail transport, plus a mail renderer, are mounted. The user is already erased
|
|
526
|
+
// here, so it bypasses the delivery log: an attempt row would be new personal data.
|
|
527
527
|
const forgetConfigResolver = ctx.configResolver;
|
|
528
528
|
const sendDeletionExecutedEmail = opts.sendDeletionExecutedEmail ??
|
|
529
|
-
(
|
|
529
|
+
((isGdprMailDeliveryAvailable(forgetRegistry) ||
|
|
530
|
+
isMailTransportAvailable(forgetRegistry)) &&
|
|
531
|
+
isMailRendererAvailable(forgetRegistry)
|
|
530
532
|
? makeDefaultDeletionExecutedEmail({
|
|
531
533
|
registry: forgetRegistry,
|
|
532
534
|
db: forgetDb,
|
|
535
|
+
...(ctx.secrets !== undefined && { secrets: ctx.secrets }),
|
|
533
536
|
resolveTransport: makeTenantMailTransportResolver({
|
|
534
537
|
registry: forgetRegistry,
|
|
535
538
|
configResolver: forgetConfigResolver,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
|
-
import { type GdprMailDefaults } from "../lib/default-mailers.
|
|
2
|
+
import { type GdprMailDefaults } from "../lib/default-mailers.ts";
|
|
3
3
|
export type SendDeletionRequestedEmailFn = (args: {
|
|
4
4
|
readonly userId: string;
|
|
5
5
|
readonly userEmail: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
|
-
import { type SendDeletionExecutedEmailFn } from "../run-forget-cleanup.
|
|
2
|
+
import { type SendDeletionExecutedEmailFn } from "../run-forget-cleanup.ts";
|
|
3
3
|
export type RunForgetCleanupOptions = {
|
|
4
4
|
readonly sendDeletionExecutedEmail?: SendDeletionExecutedEmailFn;
|
|
5
5
|
};
|
|
@@ -7,7 +7,7 @@ export declare function createRunForgetCleanupHandler(opts?: RunForgetCleanupOpt
|
|
|
7
7
|
processedUserIds: readonly string[];
|
|
8
8
|
hookCallsAttempted: number;
|
|
9
9
|
errorCount: number;
|
|
10
|
-
errors: readonly import("../run-forget-cleanup.
|
|
10
|
+
errors: readonly import("../run-forget-cleanup.ts").ForgetCleanupError[];
|
|
11
11
|
incompleteCount: number;
|
|
12
|
-
incomplete: readonly import("../run-forget-cleanup.
|
|
12
|
+
incomplete: readonly import("../run-forget-cleanup.ts").ForgetCleanupIncomplete[];
|
|
13
13
|
}, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { TENANT_MODEL_CONFIG_KEY } from "./constants.
|
|
2
|
-
export { createUserDataRightsFeature, type UserDataRightsOptions } from "./feature.
|
|
3
|
-
export type { SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.
|
|
4
|
-
export { denyIfTargetOutsideAdminTenant, TARGET_USER_NOT_IN_ADMIN_TENANT, } from "./lib/deny-if-target-outside-admin-tenant.
|
|
5
|
-
export { isSystemAdminActor } from "./lib/is-admin-actor.
|
|
6
|
-
export { backfillUserLifecycleEvents, updateUserLifecycle } from "./lib/update-user-lifecycle.
|
|
7
|
-
export type { SendExportFailedEmailFn, SendExportReadyEmailFn, } from "./run-export-jobs.
|
|
8
|
-
export type { SendDeletionExecutedEmailFn } from "./run-forget-cleanup.
|
|
9
|
-
export { policyToStrategy, runForgetCleanup } from "./run-forget-cleanup.
|
|
10
|
-
export type { UserExportBundle } from "./run-user-export.
|
|
11
|
-
export { runUserExport } from "./run-user-export.
|
|
12
|
-
export { downloadAttemptEntity, downloadAttemptsTable } from "./schema/download-attempt.
|
|
13
|
-
export { ACTIVE_JOB_CONSTRAINT, EXPORT_JOB_STATUS, type ExportJobStatus, exportJobEntity, exportJobsTable, } from "./schema/export-job.
|
|
1
|
+
export { TENANT_MODEL_CONFIG_KEY } from "./constants.ts";
|
|
2
|
+
export { createUserDataRightsFeature, type UserDataRightsOptions } from "./feature.ts";
|
|
3
|
+
export type { SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.ts";
|
|
4
|
+
export { denyIfTargetOutsideAdminTenant, TARGET_USER_NOT_IN_ADMIN_TENANT, } from "./lib/deny-if-target-outside-admin-tenant.ts";
|
|
5
|
+
export { isSystemAdminActor } from "./lib/is-admin-actor.ts";
|
|
6
|
+
export { backfillUserLifecycleEvents, updateUserLifecycle } from "./lib/update-user-lifecycle.ts";
|
|
7
|
+
export type { SendExportFailedEmailFn, SendExportReadyEmailFn, } from "./run-export-jobs.ts";
|
|
8
|
+
export type { SendDeletionExecutedEmailFn } from "./run-forget-cleanup.ts";
|
|
9
|
+
export { policyToStrategy, runForgetCleanup } from "./run-forget-cleanup.ts";
|
|
10
|
+
export type { UserExportBundle } from "./run-user-export.ts";
|
|
11
|
+
export { runUserExport } from "./run-user-export.ts";
|
|
12
|
+
export { downloadAttemptEntity, downloadAttemptsTable } from "./schema/download-attempt.ts";
|
|
13
|
+
export { ACTIVE_JOB_CONSTRAINT, EXPORT_JOB_STATUS, type ExportJobStatus, exportJobEntity, exportJobsTable, } from "./schema/export-job.ts";
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { EmailTransport } from "@cosmicdrift/kumiko-bundled-features/channel-email";
|
|
2
2
|
import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
|
|
3
3
|
import type { ConfigAccessor, NotifyFn, Registry, TenantId } from "@cosmicdrift/kumiko-framework/engine";
|
|
4
|
-
import {
|
|
5
|
-
import type
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
4
|
+
import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
|
|
5
|
+
import { type GdprMailLocale } from "../email-templates.ts";
|
|
6
|
+
import type { SendDeletionRequestedEmailFn } from "../handlers/request-deletion.write.ts";
|
|
7
|
+
import type { SendExportFailedEmailFn, SendExportReadyEmailFn } from "../run-export-jobs.ts";
|
|
8
|
+
import type { SendDeletionExecutedEmailFn } from "../run-forget-cleanup.ts";
|
|
8
9
|
export type GdprMailDefaults = {
|
|
9
10
|
readonly locale?: GdprMailLocale;
|
|
10
11
|
readonly appName?: string;
|
|
@@ -19,7 +20,9 @@ export declare function makeDefaultDeletionRequestedEmail(notify: NotifyFn, defa
|
|
|
19
20
|
export type DeletionExecutedMailDeps = {
|
|
20
21
|
readonly registry: Registry;
|
|
21
22
|
readonly db: DbConnection;
|
|
23
|
+
/** Used only when no email delivery channel is mounted. */
|
|
22
24
|
readonly resolveTransport: (tenantId: string) => Promise<EmailTransport>;
|
|
23
25
|
readonly configFor: (tenantId: TenantId) => ConfigAccessor | undefined;
|
|
26
|
+
readonly secrets?: SecretsContext;
|
|
24
27
|
};
|
|
25
28
|
export declare function makeDefaultDeletionExecutedEmail(deps: DeletionExecutedMailDeps, defaults?: GdprMailDefaults): SendDeletionExecutedEmailFn;
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
// to the user, so delivery resolves the address and the attempt row carries
|
|
8
8
|
// the recipientId the forget path erases. Deletion-executed cannot: the user
|
|
9
9
|
// is gone by then, and an attempt row written after the erasure would be new
|
|
10
|
-
// personal data. It renders the seeded template and sends
|
|
11
|
-
// mail transport, with no delivery log.
|
|
10
|
+
// personal data. It renders the seeded template and sends it straight through the
|
|
11
|
+
// email channel (or, without one, the tenant's mail transport), with no delivery log.
|
|
12
12
|
import { MAIL_TRANSPORT_EXTENSION } from "@cosmicdrift/kumiko-bundled-features/mail-foundation";
|
|
13
13
|
import { hasMailTranslations, mailT } from "@cosmicdrift/kumiko-framework/i18n";
|
|
14
|
-
import { DELIVERY_CHANNEL_EXTENSION } from "../../delivery/index.js";
|
|
14
|
+
import { buildChannelContext, collectChannels, DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, } from "../../delivery/index.js";
|
|
15
15
|
import { collectRendererPlugins, createRendererFoundationApi, } from "../../renderer-foundation/index.js";
|
|
16
16
|
import { formatGdprMailTimestamp, normalizeGdprMailLocale, } from "../email-templates.js";
|
|
17
17
|
import { GdprMailNotificationTypes, gdprMailTemplateLocale } from "../mail-notifications.js";
|
|
@@ -88,6 +88,9 @@ export function makeDefaultDeletionRequestedEmail(notify, defaults = {}) {
|
|
|
88
88
|
});
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
|
+
function emailChannelOf(registry) {
|
|
92
|
+
return collectChannels(registry).find((channel) => channel.name === EMAIL_CHANNEL_NAME);
|
|
93
|
+
}
|
|
91
94
|
export function makeDefaultDeletionExecutedEmail(deps, defaults = {}) {
|
|
92
95
|
return async (args) => {
|
|
93
96
|
// Der User ist global, der Mail-Transport per-Tenant — wir senden ueber den
|
|
@@ -121,6 +124,25 @@ export function makeDefaultDeletionExecutedEmail(deps, defaults = {}) {
|
|
|
121
124
|
if (rendered.kind !== "mail") {
|
|
122
125
|
throw new Error(`deletion-executed mail: renderer answered with kind "${rendered.kind}"`);
|
|
123
126
|
}
|
|
127
|
+
// The channel picks the same transport as every other mail of this notification
|
|
128
|
+
// (the app transport unless it is declared tenantTransport), so a tenant without
|
|
129
|
+
// its own mail provider still gets the confirmation. channel.send writes no attempt row.
|
|
130
|
+
const channel = emailChannelOf(deps.registry);
|
|
131
|
+
if (channel !== undefined) {
|
|
132
|
+
const result = await channel.send(args.userEmail, {
|
|
133
|
+
notificationType: type,
|
|
134
|
+
title: rendered.subject,
|
|
135
|
+
body: undefined,
|
|
136
|
+
data: undefined,
|
|
137
|
+
locale,
|
|
138
|
+
}, buildChannelContext(deps.db, deps.registry, undefined, tenantId, deps.secrets, config), { subject: rendered.subject, html: rendered.html, text: rendered.text });
|
|
139
|
+
if (result.status !== "sent") {
|
|
140
|
+
// No address in the message: the user is already erased.
|
|
141
|
+
throw new Error(`deletion-executed mail not sent: ${result.error ?? result.status}`);
|
|
142
|
+
}
|
|
143
|
+
// skip: the channel delivered it, the transport fallback below is for apps without one
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
124
146
|
const transport = await deps.resolveTransport(tenantId);
|
|
125
147
|
await transport.send({
|
|
126
148
|
to: args.userEmail,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
|
|
2
2
|
import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
|
|
3
|
-
import { type PublicDeletionRoutes } from "./public-deletion-gate.
|
|
3
|
+
import { type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
|
|
4
4
|
export type UserDataRightsClientOptions = {
|
|
5
5
|
/** Key-weise Overrides über die Default-Bundles (de/en). */
|
|
6
6
|
readonly translations?: TranslationsByLocale;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { type UserDataRightsClientOptions, userDataRightsClient } from "./client-plugin.
|
|
2
|
-
export type { ConfirmAccountDeletionScreenProps } from "./confirm-deletion-screen.
|
|
3
|
-
export { ConfirmAccountDeletionScreen } from "./confirm-deletion-screen.
|
|
4
|
-
export { defaultTranslations } from "./i18n.
|
|
5
|
-
export { formatDate } from "./privacy-center-screen.
|
|
6
|
-
export { makePublicDeletionGate, type PublicDeletionRoutes } from "./public-deletion-gate.
|
|
7
|
-
export type { RequestAccountDeletionScreenProps } from "./request-deletion-screen.
|
|
8
|
-
export { RequestAccountDeletionScreen } from "./request-deletion-screen.
|
|
1
|
+
export { type UserDataRightsClientOptions, userDataRightsClient } from "./client-plugin.tsx";
|
|
2
|
+
export type { ConfirmAccountDeletionScreenProps } from "./confirm-deletion-screen.tsx";
|
|
3
|
+
export { ConfirmAccountDeletionScreen } from "./confirm-deletion-screen.tsx";
|
|
4
|
+
export { defaultTranslations } from "./i18n.ts";
|
|
5
|
+
export { formatDate } from "./privacy-center-screen.tsx";
|
|
6
|
+
export { makePublicDeletionGate, type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
|
|
7
|
+
export type { RequestAccountDeletionScreenProps } from "./request-deletion-screen.tsx";
|
|
8
|
+
export { RequestAccountDeletionScreen } from "./request-deletion-screen.tsx";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { createUserDataRightsDefaultsFeature } from "./feature.
|
|
2
|
-
export { apiTokenDeleteHook, apiTokenExportHook } from "./hooks/api-token.userdata-hook.
|
|
3
|
-
export { configValueDeleteHook, configValueExportHook, } from "./hooks/config-value.userdata-hook.
|
|
4
|
-
export { deliveryAttemptDeleteHook, deliveryAttemptExportHook, } from "./hooks/delivery-attempt.userdata-hook.
|
|
5
|
-
export { fileRefDeleteHook, fileRefExportHook, } from "./hooks/file-ref.userdata-hook.
|
|
6
|
-
export { inAppMessageDeleteHook, inAppMessageExportHook, } from "./hooks/in-app-message.userdata-hook.
|
|
7
|
-
export { jobRunDeleteHook, jobRunExportHook } from "./hooks/job-run.userdata-hook.
|
|
8
|
-
export { notificationPreferenceDeleteHook, notificationPreferenceExportHook, } from "./hooks/notification-preference.userdata-hook.
|
|
9
|
-
export { tenantInvitationDeleteHook, tenantInvitationExportHook, } from "./hooks/tenant-invitation.userdata-hook.
|
|
10
|
-
export { userDeleteHook, userExportHook } from "./hooks/user.userdata-hook.
|
|
11
|
-
export { userSessionDeleteHook, userSessionExportHook, } from "./hooks/user-session.userdata-hook.
|
|
1
|
+
export { createUserDataRightsDefaultsFeature } from "./feature.ts";
|
|
2
|
+
export { apiTokenDeleteHook, apiTokenExportHook } from "./hooks/api-token.userdata-hook.ts";
|
|
3
|
+
export { configValueDeleteHook, configValueExportHook, } from "./hooks/config-value.userdata-hook.ts";
|
|
4
|
+
export { deliveryAttemptDeleteHook, deliveryAttemptExportHook, } from "./hooks/delivery-attempt.userdata-hook.ts";
|
|
5
|
+
export { fileRefDeleteHook, fileRefExportHook, } from "./hooks/file-ref.userdata-hook.ts";
|
|
6
|
+
export { inAppMessageDeleteHook, inAppMessageExportHook, } from "./hooks/in-app-message.userdata-hook.ts";
|
|
7
|
+
export { jobRunDeleteHook, jobRunExportHook } from "./hooks/job-run.userdata-hook.ts";
|
|
8
|
+
export { notificationPreferenceDeleteHook, notificationPreferenceExportHook, } from "./hooks/notification-preference.userdata-hook.ts";
|
|
9
|
+
export { tenantInvitationDeleteHook, tenantInvitationExportHook, } from "./hooks/tenant-invitation.userdata-hook.ts";
|
|
10
|
+
export { userDeleteHook, userExportHook } from "./hooks/user.userdata-hook.ts";
|
|
11
|
+
export { userSessionDeleteHook, userSessionExportHook, } from "./hooks/user-session.userdata-hook.ts";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { USER_PROFILE_FEATURE, UserDataRightsHandlers, UserProfileErrors, UserProfileHandlers, UserProfileQueries, } from "./constants.
|
|
2
|
-
export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.
|
|
1
|
+
export { USER_PROFILE_FEATURE, UserDataRightsHandlers, UserProfileErrors, UserProfileHandlers, UserProfileQueries, } from "./constants.ts";
|
|
2
|
+
export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.ts";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type UserProfileClientFeature, type UserProfileClientOptions, userProfileClient, } from "./client-plugin.
|
|
2
|
-
export { ChangeEmailSection, ChangePasswordSection } from "./profile-screen.
|
|
1
|
+
export { type UserProfileClientFeature, type UserProfileClientOptions, userProfileClient, } from "./client-plugin.ts";
|
|
2
|
+
export { ChangeEmailSection, ChangePasswordSection } from "./profile-screen.tsx";
|
|
@@ -2,6 +2,7 @@ export declare const WAITLIST_FEATURE: "waitlist";
|
|
|
2
2
|
export declare const WAITLIST_STATUS: {
|
|
3
3
|
readonly Pending: "pending";
|
|
4
4
|
readonly Invited: "invited";
|
|
5
|
+
readonly Provisioned: "provisioned";
|
|
5
6
|
readonly Rejected: "rejected";
|
|
6
7
|
};
|
|
7
8
|
export type WaitlistStatus = (typeof WAITLIST_STATUS)[keyof typeof WAITLIST_STATUS];
|
|
@@ -9,6 +10,8 @@ export declare const WaitlistHandlers: {
|
|
|
9
10
|
readonly submit: "waitlist:write:submit";
|
|
10
11
|
readonly invite: "waitlist:write:invite";
|
|
11
12
|
readonly reject: "waitlist:write:reject";
|
|
13
|
+
readonly export: "waitlist:write:export";
|
|
14
|
+
readonly purge: "waitlist:write:purge";
|
|
12
15
|
};
|
|
13
16
|
export declare const WaitlistQueries: {
|
|
14
17
|
readonly list: "waitlist:query:waitlist-entry:list";
|
|
@@ -16,6 +19,7 @@ export declare const WaitlistQueries: {
|
|
|
16
19
|
export declare const WaitlistErrors: {
|
|
17
20
|
readonly notInvitable: "waitlist_not_invitable";
|
|
18
21
|
readonly notRejectable: "waitlist_not_rejectable";
|
|
22
|
+
readonly confirmCountMismatch: "waitlist_confirm_count_mismatch";
|
|
19
23
|
};
|
|
20
24
|
export declare const WAITLIST_NOTIFICATION_TYPES: {
|
|
21
25
|
readonly confirmation: "waitlist:notify:confirmation";
|
|
@@ -31,3 +35,8 @@ export declare const WAITLIST_FIELD_LIMITS: {
|
|
|
31
35
|
readonly locale: 35;
|
|
32
36
|
readonly honeypot: 500;
|
|
33
37
|
};
|
|
38
|
+
export declare const WAITLIST_EXPORTED_EVENT_SHORT: "exported";
|
|
39
|
+
export declare const WAITLIST_PURGED_EVENT_SHORT: "purged";
|
|
40
|
+
export declare const WAITLIST_EXPORTED_EVENT_QN: "waitlist:event:exported";
|
|
41
|
+
export declare const WAITLIST_PURGED_EVENT_QN: "waitlist:event:purged";
|
|
42
|
+
export declare const WAITLIST_AUDIT_AGGREGATE_TYPE: "waitlist-audit";
|
|
@@ -4,12 +4,15 @@ export const WAITLIST_FEATURE = "waitlist";
|
|
|
4
4
|
export const WAITLIST_STATUS = {
|
|
5
5
|
Pending: "pending",
|
|
6
6
|
Invited: "invited",
|
|
7
|
+
Provisioned: "provisioned",
|
|
7
8
|
Rejected: "rejected",
|
|
8
9
|
};
|
|
9
10
|
export const WaitlistHandlers = {
|
|
10
11
|
submit: "waitlist:write:submit",
|
|
11
12
|
invite: "waitlist:write:invite",
|
|
12
13
|
reject: "waitlist:write:reject",
|
|
14
|
+
export: "waitlist:write:export",
|
|
15
|
+
purge: "waitlist:write:purge",
|
|
13
16
|
};
|
|
14
17
|
// Entity-convention list QN: entityList screens resolve their query by this shape.
|
|
15
18
|
export const WaitlistQueries = {
|
|
@@ -18,6 +21,7 @@ export const WaitlistQueries = {
|
|
|
18
21
|
export const WaitlistErrors = {
|
|
19
22
|
notInvitable: "waitlist_not_invitable",
|
|
20
23
|
notRejectable: "waitlist_not_rejectable",
|
|
24
|
+
confirmCountMismatch: "waitlist_confirm_count_mismatch",
|
|
21
25
|
};
|
|
22
26
|
export const WAITLIST_NOTIFICATION_TYPES = {
|
|
23
27
|
confirmation: "waitlist:notify:confirmation",
|
|
@@ -33,3 +37,10 @@ export const WAITLIST_FIELD_LIMITS = {
|
|
|
33
37
|
locale: 35,
|
|
34
38
|
honeypot: 500,
|
|
35
39
|
};
|
|
40
|
+
// Audit trail for the export/purge handlers: own aggregate per occurrence, payload
|
|
41
|
+
// carries counts only (never addresses).
|
|
42
|
+
export const WAITLIST_EXPORTED_EVENT_SHORT = "exported";
|
|
43
|
+
export const WAITLIST_PURGED_EVENT_SHORT = "purged";
|
|
44
|
+
export const WAITLIST_EXPORTED_EVENT_QN = "waitlist:event:exported";
|
|
45
|
+
export const WAITLIST_PURGED_EVENT_QN = "waitlist:event:purged";
|
|
46
|
+
export const WAITLIST_AUDIT_AGGREGATE_TYPE = "waitlist-audit";
|
|
@@ -134,23 +134,24 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
134
134
|
status: {
|
|
135
135
|
readonly type: "select";
|
|
136
136
|
readonly description?: string;
|
|
137
|
-
readonly options: readonly ["pending", "invited", "rejected"];
|
|
137
|
+
readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
|
|
138
138
|
readonly required?: boolean;
|
|
139
139
|
readonly sortable?: boolean;
|
|
140
140
|
readonly filterable?: boolean;
|
|
141
141
|
readonly sensitive?: boolean;
|
|
142
|
-
readonly default?: "invited" | "pending" | "rejected" | undefined;
|
|
142
|
+
readonly default?: "invited" | "pending" | "provisioned" | "rejected" | undefined;
|
|
143
143
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
144
144
|
readonly display?: "radio" | "dropdown";
|
|
145
145
|
readonly optionTones?: {
|
|
146
146
|
readonly invited?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
147
147
|
readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
148
|
+
readonly provisioned?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
148
149
|
readonly rejected?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
149
150
|
} | undefined;
|
|
150
151
|
readonly optionsQuery?: string;
|
|
151
152
|
readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
|
|
152
153
|
readonly optionsAvailabilityQuery?: string;
|
|
153
|
-
readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "rejected">[] | undefined;
|
|
154
|
+
readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "provisioned" | "rejected">[] | undefined;
|
|
154
155
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
155
156
|
required: true;
|
|
156
157
|
};
|
|
@@ -207,6 +208,21 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
|
|
|
207
208
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
208
209
|
required: false;
|
|
209
210
|
};
|
|
211
|
+
provisionedAt: {
|
|
212
|
+
readonly type: "timestamp";
|
|
213
|
+
readonly description?: string;
|
|
214
|
+
readonly required?: boolean;
|
|
215
|
+
readonly sortable?: boolean;
|
|
216
|
+
readonly filterable?: boolean;
|
|
217
|
+
readonly sensitive?: boolean;
|
|
218
|
+
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
219
|
+
readonly locatedBy?: string;
|
|
220
|
+
readonly min?: string;
|
|
221
|
+
readonly max?: string;
|
|
222
|
+
readonly locale?: string;
|
|
223
|
+
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
224
|
+
required: false;
|
|
225
|
+
};
|
|
210
226
|
linkedTenantId: {
|
|
211
227
|
readonly type: "text";
|
|
212
228
|
readonly description?: string;
|
|
@@ -366,23 +382,24 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
366
382
|
status: {
|
|
367
383
|
readonly type: "select";
|
|
368
384
|
readonly description?: string;
|
|
369
|
-
readonly options: readonly ["pending", "invited", "rejected"];
|
|
385
|
+
readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
|
|
370
386
|
readonly required?: boolean;
|
|
371
387
|
readonly sortable?: boolean;
|
|
372
388
|
readonly filterable?: boolean;
|
|
373
389
|
readonly sensitive?: boolean;
|
|
374
|
-
readonly default?: "invited" | "pending" | "rejected" | undefined;
|
|
390
|
+
readonly default?: "invited" | "pending" | "provisioned" | "rejected" | undefined;
|
|
375
391
|
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
376
392
|
readonly display?: "radio" | "dropdown";
|
|
377
393
|
readonly optionTones?: {
|
|
378
394
|
readonly invited?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
379
395
|
readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
396
|
+
readonly provisioned?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
380
397
|
readonly rejected?: "bad" | "neutral" | "ok" | "warn" | undefined;
|
|
381
398
|
} | undefined;
|
|
382
399
|
readonly optionsQuery?: string;
|
|
383
400
|
readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
|
|
384
401
|
readonly optionsAvailabilityQuery?: string;
|
|
385
|
-
readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "rejected">[] | undefined;
|
|
402
|
+
readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "provisioned" | "rejected">[] | undefined;
|
|
386
403
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
387
404
|
required: true;
|
|
388
405
|
};
|
|
@@ -439,6 +456,21 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
|
|
|
439
456
|
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
440
457
|
required: false;
|
|
441
458
|
};
|
|
459
|
+
provisionedAt: {
|
|
460
|
+
readonly type: "timestamp";
|
|
461
|
+
readonly description?: string;
|
|
462
|
+
readonly required?: boolean;
|
|
463
|
+
readonly sortable?: boolean;
|
|
464
|
+
readonly filterable?: boolean;
|
|
465
|
+
readonly sensitive?: boolean;
|
|
466
|
+
readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
|
|
467
|
+
readonly locatedBy?: string;
|
|
468
|
+
readonly min?: string;
|
|
469
|
+
readonly max?: string;
|
|
470
|
+
readonly locale?: string;
|
|
471
|
+
} & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
|
|
472
|
+
required: false;
|
|
473
|
+
};
|
|
442
474
|
linkedTenantId: {
|
|
443
475
|
readonly type: "text";
|
|
444
476
|
readonly description?: string;
|
package/dist/waitlist/entity.js
CHANGED
|
@@ -4,13 +4,14 @@ import { WAITLIST_STATUS } from "./constants.js";
|
|
|
4
4
|
const WAITLIST_STATUS_OPTIONS = [
|
|
5
5
|
WAITLIST_STATUS.Pending,
|
|
6
6
|
WAITLIST_STATUS.Invited,
|
|
7
|
+
WAITLIST_STATUS.Provisioned,
|
|
7
8
|
WAITLIST_STATUS.Rejected,
|
|
8
9
|
];
|
|
9
10
|
const OPEN_WAITLIST_STATUSES = [
|
|
10
11
|
WAITLIST_STATUS.Pending,
|
|
11
12
|
WAITLIST_STATUS.Invited,
|
|
12
13
|
];
|
|
13
|
-
// Entries still awaiting a decision; rejected
|
|
14
|
+
// Entries still awaiting a decision; provisioned and rejected are terminal.
|
|
14
15
|
export function isOpenWaitlistStatus(status) {
|
|
15
16
|
return OPEN_WAITLIST_STATUSES.some((open) => open === status);
|
|
16
17
|
}
|
|
@@ -22,7 +23,7 @@ export function isOpenWaitlistStatus(status) {
|
|
|
22
23
|
// SYSTEM_TENANT_ID, which also lets the per-tenant GDPR hooks read them.
|
|
23
24
|
export const waitlistEntryEntity = createEntity({
|
|
24
25
|
table: "read_waitlist_entries",
|
|
25
|
-
description: "A prospect's signup on the platform waitlist, tracked through pending, invited and rejected status as admins process it; name, email and message are the entry's own personal data.",
|
|
26
|
+
description: "A prospect's signup on the platform waitlist, tracked through pending, invited, provisioned and rejected status as admins process it; name, email and message are the entry's own personal data.",
|
|
26
27
|
systemStream: true,
|
|
27
28
|
tenancy: "global",
|
|
28
29
|
fields: {
|
|
@@ -57,6 +58,7 @@ export const waitlistEntryEntity = createEntity({
|
|
|
57
58
|
}),
|
|
58
59
|
invitedAt: createTimestampField(),
|
|
59
60
|
invitedBy: createTextField({ personal: false, reason: "is_admin_audit_id" }),
|
|
61
|
+
provisionedAt: createTimestampField(),
|
|
60
62
|
// Not named tenantId: that is the framework's physical tenant column.
|
|
61
63
|
linkedTenantId: createTextField({ personal: false, reason: "is_tenant_reference" }),
|
|
62
64
|
},
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TenantDb } from "@cosmicdrift/kumiko-framework/db";
|
|
2
|
+
export type WaitlistRow = Record<string, unknown>;
|
|
3
|
+
export declare function listAllWaitlistRows(db: TenantDb): Promise<readonly WaitlistRow[]>;
|
|
4
|
+
export declare function purgeWaitlistRows(db: TenantDb, rows: readonly WaitlistRow[], requestedBy: string): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { configuredPiiSubjectKms } from "@cosmicdrift/kumiko-framework/crypto";
|
|
2
|
+
import { collectErasureFailure, throwIfErasureFailed } from "../shared/index.js";
|
|
3
|
+
import { platformActor, waitlistExecutor } from "./lib.js";
|
|
4
|
+
const PAGE_SIZE = 200;
|
|
5
|
+
const PURGE_REASON = "waitlist:purge";
|
|
6
|
+
// Pages by offset on a stable sort; the list is small (a marketing waitlist) and
|
|
7
|
+
// the callers hold the whole result anyway.
|
|
8
|
+
export async function listAllWaitlistRows(db) {
|
|
9
|
+
const rows = [];
|
|
10
|
+
for (let offset = 0;; offset += PAGE_SIZE) {
|
|
11
|
+
const page = await waitlistExecutor.list({ sort: "submittedAt", sortDirection: "asc", limit: PAGE_SIZE, offset }, platformActor(), db);
|
|
12
|
+
rows.push(...page.rows);
|
|
13
|
+
if (page.rows.length < PAGE_SIZE)
|
|
14
|
+
return rows;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// Same two-step erasure as the user-data delete hook: the executor forgets the
|
|
18
|
+
// row (replays on rebuild), then the record subject key is shredded so the event
|
|
19
|
+
// log's ciphertext becomes unreadable. Keys are shredded only after every forget
|
|
20
|
+
// succeeded: a thrown failure rolls the handler transaction back, and a shredded
|
|
21
|
+
// key cannot be restored.
|
|
22
|
+
export async function purgeWaitlistRows(db, rows, requestedBy) {
|
|
23
|
+
const failures = [];
|
|
24
|
+
const forgottenIds = [];
|
|
25
|
+
for (const row of rows) {
|
|
26
|
+
const id = row["id"];
|
|
27
|
+
if (typeof id !== "string")
|
|
28
|
+
continue;
|
|
29
|
+
const forgotten = await waitlistExecutor.forget({ id }, platformActor(), db);
|
|
30
|
+
collectErasureFailure(forgotten, "waitlistEntry", id, failures);
|
|
31
|
+
if (forgotten.isSuccess)
|
|
32
|
+
forgottenIds.push(id);
|
|
33
|
+
}
|
|
34
|
+
throwIfErasureFailed(failures);
|
|
35
|
+
const kms = configuredPiiSubjectKms();
|
|
36
|
+
// skip: no PII key service configured, so there are no record keys to shred.
|
|
37
|
+
if (!kms)
|
|
38
|
+
return;
|
|
39
|
+
for (const id of forgottenIds) {
|
|
40
|
+
await kms.eraseKey({ kind: "record", entity: "waitlistEntry", id }, { requestId: PURGE_REASON, userId: requestedBy, eraseReason: PURGE_REASON });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import type { WaitlistOptions } from "./options.
|
|
2
|
+
import type { WaitlistOptions } from "./options.ts";
|
|
3
3
|
export declare function createWaitlistFeature(opts?: WaitlistOptions): FeatureDefinition;
|
package/dist/waitlist/feature.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { defineFeature, EXT_USER_DATA, i18nKey, } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { WAITLIST_FEATURE } from "./constants.js";
|
|
2
|
+
import { WAITLIST_EXPORTED_EVENT_SHORT, WAITLIST_FEATURE, WAITLIST_PURGED_EVENT_SHORT, } from "./constants.js";
|
|
3
3
|
import { waitlistEntryEntity } from "./entity.js";
|
|
4
|
+
import { exportHandler, purgeHandler } from "./handlers/export-purge.write.js";
|
|
4
5
|
import { createInviteHandler } from "./handlers/invite.write.js";
|
|
5
6
|
import { listQuery } from "./handlers/list.query.js";
|
|
6
7
|
import { rejectHandler } from "./handlers/reject.write.js";
|
|
7
8
|
import { createSubmitHandler } from "./handlers/submit.write.js";
|
|
8
9
|
import { WAITLIST_I18N } from "./i18n.js";
|
|
9
10
|
import { adminAccess } from "./lib.js";
|
|
11
|
+
import { linkWaitlistOnSignup, WAITLIST_MEMBERSHIP_CREATED_EVENT } from "./link-on-signup.js";
|
|
10
12
|
import { WAITLIST_ADMIN_NOTICE_RECORD, WAITLIST_ADMIN_NOTICE_VARIABLES, WAITLIST_CONFIRMATION_VARIABLES, waitlistAdminNoticeTemplate, waitlistConfirmationTemplate, } from "./mail.js";
|
|
13
|
+
import { WaitlistAuditEventSchema } from "./payloads.js";
|
|
11
14
|
import { waitlistListScreen } from "./screens.js";
|
|
12
15
|
import { waitlistEntryDeleteHook, waitlistEntryExportHook } from "./user-data-hooks.js";
|
|
13
16
|
export function createWaitlistFeature(opts = {}) {
|
|
@@ -31,6 +34,18 @@ export function createWaitlistFeature(opts = {}) {
|
|
|
31
34
|
r.writeHandler(createInviteHandler(opts.invite));
|
|
32
35
|
r.writeHandler(rejectHandler);
|
|
33
36
|
r.queryHandler(listQuery);
|
|
37
|
+
if (opts.exportPurge !== false) {
|
|
38
|
+
r.defineEvent(WAITLIST_EXPORTED_EVENT_SHORT, WaitlistAuditEventSchema, { piiFields: "none" });
|
|
39
|
+
r.defineEvent(WAITLIST_PURGED_EVENT_SHORT, WaitlistAuditEventSchema, { piiFields: "none" });
|
|
40
|
+
r.writeHandler(exportHandler);
|
|
41
|
+
r.writeHandler(purgeHandler);
|
|
42
|
+
}
|
|
43
|
+
if (opts.linkOnSignup === true) {
|
|
44
|
+
r.multiStreamProjection({
|
|
45
|
+
name: "link-on-signup",
|
|
46
|
+
apply: { [WAITLIST_MEMBERSHIP_CREATED_EVENT]: linkWaitlistOnSignup },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
34
49
|
r.screen(waitlistListScreen);
|
|
35
50
|
r.nav({
|
|
36
51
|
id: "waitlist",
|