@cosmicdrift/kumiko-bundled-features 0.369.0 → 0.371.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 +2 -1
- package/dist/auth-foundation/resolve-anonymous-access.js +9 -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 +24 -5
- package/dist/billing-foundation/subscription-tier-sync.js +48 -19
- 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/billing-foundation/webhook-handler.d.ts +2 -1
- package/dist/billing-foundation/webhook-handler.js +2 -2
- 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 +2 -2
- 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 +5 -1
- package/dist/channel-email/index.d.ts +6 -5
- package/dist/channel-email/index.js +1 -0
- 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/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 +2 -0
- 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 -20
- 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 +11 -3
- package/dist/delivery/unsubscribe.js +146 -64
- 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 +54 -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 +0 -7
- package/dist/mail-foundation/feature.js +0 -2
- 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 +0 -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/feature.d.ts +0 -16
- package/dist/mail-transport-smtp/feature.js +0 -2
- 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 +4 -3
- package/dist/secrets/feature.js +4 -2
- package/dist/secrets/handlers/delete.write.js +2 -2
- package/dist/secrets/handlers/rotate.job.d.ts +1 -1
- package/dist/secrets/handlers/set.write.js +2 -2
- 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 -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/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/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 +4 -4
- 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 +14 -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 +14 -0
- package/src/cap-counter/changes.json +8 -0
- package/src/channel-email/changes.json +6 -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 +13 -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 +28 -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 +8 -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 +12 -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/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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { DEFAULT_CAP_USAGE_ROLES } from "./access.
|
|
2
|
-
export { CAP_CARDS_PANEL_COMPONENT, CAP_OVERVIEW_FEATURE, CAP_USAGE_CELL_COMPONENT, CapOverviewQueries, capFieldName, MY_CAPS_SCREEN_ID, PLATFORM_TENANT_CAPS_SCREEN_ID, TENANT_CAP_LIST_SCREEN_ID, } from "./constants.
|
|
3
|
-
export { type CreateCapOverviewOptions, createCapOverviewFeature } from "./feature.
|
|
4
|
-
export { createMyCapsScreen, createTenantCapListScreen, platformTenantCapsScreen, } from "./screens.
|
|
5
|
-
export type { CapSpec, CapUsage, CapUsageTone, CapUsageWithMeta } from "./types.
|
|
6
|
-
export { computeFraction, computeTone } from "./usage-math.
|
|
1
|
+
export { DEFAULT_CAP_USAGE_ROLES } from "./access.ts";
|
|
2
|
+
export { CAP_CARDS_PANEL_COMPONENT, CAP_OVERVIEW_FEATURE, CAP_USAGE_CELL_COMPONENT, CapOverviewQueries, capFieldName, MY_CAPS_SCREEN_ID, PLATFORM_TENANT_CAPS_SCREEN_ID, TENANT_CAP_LIST_SCREEN_ID, } from "./constants.ts";
|
|
3
|
+
export { type CreateCapOverviewOptions, createCapOverviewFeature } from "./feature.ts";
|
|
4
|
+
export { createMyCapsScreen, createTenantCapListScreen, platformTenantCapsScreen, } from "./screens.ts";
|
|
5
|
+
export type { CapSpec, CapUsage, CapUsageTone, CapUsageWithMeta } from "./types.ts";
|
|
6
|
+
export { computeFraction, computeTone } from "./usage-math.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ScreenDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import type { CapSpec } from "./types.
|
|
2
|
+
import type { CapSpec } from "./types.ts";
|
|
3
3
|
export declare function createTenantCapListScreen(caps: readonly CapSpec[], listCaps: readonly string[], tiers?: readonly string[]): ScreenDefinition;
|
|
4
4
|
export declare function createMyCapsScreen(usageRoles: readonly string[]): ScreenDefinition;
|
|
5
5
|
export declare const platformTenantCapsScreen: ScreenDefinition;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TenantDb } from "@cosmicdrift/kumiko-framework/db";
|
|
2
2
|
import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
|
|
3
|
-
import type { CapLimitContext } from "../cap-counter/index.
|
|
3
|
+
import type { CapLimitContext } from "../cap-counter/index.ts";
|
|
4
4
|
export type CapIconKey = "file" | "hash" | "database" | "users" | "mail" | "gauge";
|
|
5
5
|
export type CapSpec = {
|
|
6
6
|
readonly id: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CapUsageTone } from "./types.
|
|
1
|
+
import type { CapUsageTone } from "./types.ts";
|
|
2
2
|
export declare function computeFraction(used: number, limit: number | null): number;
|
|
3
3
|
export declare function computeUnclampedFraction(used: number, limit: number | null): number;
|
|
4
4
|
export declare function computeTone(fraction: number): CapUsageTone;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CapCardsPanel } from "./cap-cards-panel.
|
|
2
|
-
export { CapUsageBar } from "./cap-usage-bar.
|
|
3
|
-
export { CapUsageCell } from "./cap-usage-cell.
|
|
4
|
-
export { type CapOverviewClientOptions, capOverviewClient } from "./client-plugin.
|
|
1
|
+
export { CapCardsPanel } from "./cap-cards-panel.tsx";
|
|
2
|
+
export { CapUsageBar } from "./cap-usage-bar.tsx";
|
|
3
|
+
export { CapUsageCell } from "./cap-usage-cell.tsx";
|
|
4
|
+
export { type CapOverviewClientOptions, capOverviewClient } from "./client-plugin.tsx";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.
|
|
1
|
+
import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.ts";
|
|
2
2
|
export type DiscordChannelOptions = ChatWebhookChannelOptions;
|
|
3
3
|
export declare const DISCORD_SECRET_KEYS: {
|
|
4
4
|
readonly webhookPrefix: "channel-discord:webhooks.";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type DiscordChannelOptions } from "./discord-channel.
|
|
2
|
+
import { type DiscordChannelOptions } from "./discord-channel.ts";
|
|
3
3
|
export declare function createChannelDiscordFeature(options?: DiscordChannelOptions): FeatureDefinition;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createDiscordChannel, DISCORD_DEFAULT_ALLOWED_HOSTS, DISCORD_SECRET_KEYS, DISCORD_WEBHOOK_PATH_PREFIX, type DiscordChannelOptions, } from "./discord-channel.
|
|
2
|
-
export { createChannelDiscordFeature } from "./feature.
|
|
1
|
+
export { createDiscordChannel, DISCORD_DEFAULT_ALLOWED_HOSTS, DISCORD_SECRET_KEYS, DISCORD_WEBHOOK_PATH_PREFIX, type DiscordChannelOptions, } from "./discord-channel.ts";
|
|
2
|
+
export { createChannelDiscordFeature } from "./feature.ts";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type ChannelContext, type DeliveryChannel, type EmailAttachmentRef } from "../delivery/index.
|
|
3
|
-
import type { EmailTransport } from "./types.
|
|
2
|
+
import { type ChannelContext, type DeliveryChannel, type EmailAttachmentRef } from "../delivery/index.ts";
|
|
3
|
+
import type { EmailTransport } from "./types.ts";
|
|
4
4
|
export declare function fileAttachmentsFrom(data: Readonly<Record<string, unknown>> | undefined, messageLocale?: string): readonly EmailAttachmentRef[];
|
|
5
5
|
/** Resolves the sending tenant's own transport, null when it has none. Built per send and
|
|
6
6
|
* never cached, so a provider change applies to the next mail; a throw fails the send. */
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
/** Env block `createSmtpTransportFromEnv` reads. All optional: without
|
|
3
|
+
* `SMTP_HOST` no app-level transport is built and auth mail flows stay off. */
|
|
4
|
+
export declare const smtpEnvSchema: z.ZodObject<{
|
|
5
|
+
SMTP_HOST: z.ZodOptional<z.ZodString>;
|
|
6
|
+
SMTP_PORT: z.ZodOptional<z.ZodString>;
|
|
7
|
+
SMTP_SECURE: z.ZodOptional<z.ZodEnum<{
|
|
8
|
+
false: "false";
|
|
9
|
+
true: "true";
|
|
10
|
+
}>>;
|
|
11
|
+
SMTP_USER: z.ZodOptional<z.ZodString>;
|
|
12
|
+
SMTP_PASS: z.ZodOptional<z.ZodString>;
|
|
13
|
+
SMTP_FROM: z.ZodOptional<z.ZodString>;
|
|
14
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
/** Env block `createSmtpTransportFromEnv` reads. All optional: without
|
|
3
|
+
* `SMTP_HOST` no app-level transport is built and auth mail flows stay off. */
|
|
4
|
+
export const smtpEnvSchema = z.object({
|
|
5
|
+
SMTP_HOST: z.string().min(1).optional().describe("SMTP host; unset disables app-level mail."),
|
|
6
|
+
SMTP_PORT: z
|
|
7
|
+
.string()
|
|
8
|
+
.regex(/^\d+$/, "must be a port number")
|
|
9
|
+
.optional()
|
|
10
|
+
.describe("SMTP port (default 587)."),
|
|
11
|
+
SMTP_SECURE: z
|
|
12
|
+
.enum(["true", "false"])
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Implicit TLS ("true") or STARTTLS/plain ("false", default).'),
|
|
15
|
+
SMTP_USER: z.string().min(1).optional().describe("SMTP auth user; auth needs SMTP_PASS too."),
|
|
16
|
+
SMTP_PASS: z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("SMTP auth password.")
|
|
21
|
+
.meta({ kumiko: { pulumi: { secret: true } } }),
|
|
22
|
+
SMTP_FROM: z
|
|
23
|
+
.string()
|
|
24
|
+
.min(1)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Sender address; the app's fallback sender applies when unset."),
|
|
27
|
+
});
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { type EmailChannelOptions } from "./email-channel.ts";
|
|
2
|
+
export declare function createChannelEmailFeature(options: EmailChannelOptions): import("@cosmicdrift/kumiko-framework/env").FeatureWithEnvSchema<import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
|
|
3
|
+
readonly exports: void;
|
|
4
|
+
}, {
|
|
5
|
+
SMTP_HOST: import("zod").ZodOptional<import("zod").ZodString>;
|
|
6
|
+
SMTP_PORT: import("zod").ZodOptional<import("zod").ZodString>;
|
|
7
|
+
SMTP_SECURE: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
8
|
+
false: "false";
|
|
9
|
+
true: "true";
|
|
10
|
+
}>>;
|
|
11
|
+
SMTP_USER: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
|
+
SMTP_PASS: import("zod").ZodOptional<import("zod").ZodString>;
|
|
13
|
+
SMTP_FROM: import("zod").ZodOptional<import("zod").ZodString>;
|
|
14
|
+
}>;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, } from "@cosmicdrift/kumiko-bundled-features/delivery";
|
|
2
2
|
import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
|
|
3
|
+
import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
|
|
3
4
|
import { createEmailChannel } from "./email-channel.js";
|
|
5
|
+
import { smtpEnvSchema } from "./env.js";
|
|
4
6
|
export function createChannelEmailFeature(options) {
|
|
5
7
|
const channel = createEmailChannel(options);
|
|
6
|
-
|
|
8
|
+
const feature = defineFeature("channel-email", (r) => {
|
|
7
9
|
r.describe("Wires an `EmailTransport` (typically `mail-transport-smtp` in production, `createInMemoryTransport()` in tests) into the delivery system as the `email` channel. Requires `delivery`; pass an `EmailChannelOptions` with a `transport` and a `resolveEmail` function that maps a user ID to their email address. Mails render from stored templates (`renderer-mail-html`): a notification routed to this channel needs `template` + `meta` on `r.notification`, otherwise its delivery fails. Pass `tenantTransport: tenantMailTransport` (from `mail-foundation`) to send the notifications declared with `tenantTransport: true` through the sending tenant's own configured provider: a broken provider fails the send, a tenant without one uses the app `transport`; every other notification (password reset, sign-in) always goes through the app `transport`. `transport` may be left out when `tenantTransport` is set; a mail that then has no transport fails with `missing_credentials`. Notifications declared with `unsubscribe: true` get a signed `data.unsubscribeUrl` from delivery, which turns into the `List-Unsubscribe` headers.");
|
|
8
10
|
r.uiHints({
|
|
9
11
|
displayLabel: "Email Channel",
|
|
@@ -11,6 +13,7 @@ export function createChannelEmailFeature(options) {
|
|
|
11
13
|
recommended: false,
|
|
12
14
|
});
|
|
13
15
|
r.requires({ features: ["delivery"] });
|
|
16
|
+
r.envSchema(smtpEnvSchema);
|
|
14
17
|
r.translations({ keys: { "delivery.channel.email": { en: "Email" } } });
|
|
15
18
|
r.useExtension(DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, {
|
|
16
19
|
mode: channel.mode,
|
|
@@ -19,4 +22,5 @@ export function createChannelEmailFeature(options) {
|
|
|
19
22
|
send: channel.send,
|
|
20
23
|
});
|
|
21
24
|
});
|
|
25
|
+
return featureWithEnvSchema(feature, smtpEnvSchema);
|
|
22
26
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export { createEmailChannel, type EmailChannelOptions, type TenantTransportResolver, } from "./email-channel.
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
1
|
+
export { createEmailChannel, type EmailChannelOptions, type TenantTransportResolver, } from "./email-channel.ts";
|
|
2
|
+
export { smtpEnvSchema } from "./env.ts";
|
|
3
|
+
export { createChannelEmailFeature } from "./feature.ts";
|
|
4
|
+
export { guardEmailMessage, withPiiCiphertextGuard } from "./pii-guard.ts";
|
|
5
|
+
export { createSmtpTransport, createSmtpTransportFromEnv, type SmtpEnv, type SmtpTransportOptions, } from "./smtp-transport.ts";
|
|
6
|
+
export { createInMemoryTransport, type EmailAttachment, type EmailAttachmentRef, type EmailMessage, type EmailTransport, } from "./types.ts";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createEmailChannel, } from "./email-channel.js";
|
|
2
|
+
export { smtpEnvSchema } from "./env.js";
|
|
2
3
|
export { createChannelEmailFeature } from "./feature.js";
|
|
3
4
|
export { guardEmailMessage, withPiiCiphertextGuard } from "./pii-guard.js";
|
|
4
5
|
export { createSmtpTransport, createSmtpTransportFromEnv, } from "./smtp-transport.js";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { EmailMessage, EmailTransport } from "./types.
|
|
1
|
+
import type { EmailMessage, EmailTransport } from "./types.ts";
|
|
2
2
|
export declare function guardEmailMessage(message: EmailMessage): EmailMessage;
|
|
3
3
|
export declare function withPiiCiphertextGuard(transport: EmailTransport): EmailTransport;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EmailAttachmentRef, FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../delivery/index.
|
|
1
|
+
import type { EmailAttachmentRef, FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../delivery/index.ts";
|
|
2
2
|
export type { EmailAttachmentRef };
|
|
3
3
|
export type EmailAttachment = (InlineAttachmentRef | FileAttachmentRef | Pick<RenderedPdfAttachmentRef, "kind" | "templateSlug">) & {
|
|
4
4
|
readonly content: Uint8Array;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { DeliveryChannel } from "../delivery/index.
|
|
1
|
+
import type { DeliveryChannel } from "../delivery/index.ts";
|
|
2
2
|
export declare const inAppChannel: DeliveryChannel;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CHANNEL_IN_APP_FEATURE, InAppHandlers, InAppQueries } from "./constants.
|
|
2
|
-
export { createChannelInAppFeature } from "./feature.
|
|
3
|
-
export { inAppChannel } from "./in-app-channel.
|
|
4
|
-
export { inAppMessagesTable } from "./tables.
|
|
1
|
+
export { CHANNEL_IN_APP_FEATURE, InAppHandlers, InAppQueries } from "./constants.ts";
|
|
2
|
+
export { createChannelInAppFeature } from "./feature.ts";
|
|
3
|
+
export { inAppChannel } from "./in-app-channel.ts";
|
|
4
|
+
export { inAppMessagesTable } from "./tables.ts";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type PushChannelOptions } from "./push-channel.
|
|
2
|
+
import { type PushChannelOptions } from "./push-channel.ts";
|
|
3
3
|
export declare function createChannelPushFeature(options: PushChannelOptions): FeatureDefinition;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createChannelPushFeature } from "./feature.
|
|
2
|
-
export { createPushChannel, type PushChannelOptions } from "./push-channel.
|
|
3
|
-
export { createInMemoryPushTransport, type PushMessage, type PushTransport } from "./types.
|
|
1
|
+
export { createChannelPushFeature } from "./feature.ts";
|
|
2
|
+
export { createPushChannel, type PushChannelOptions } from "./push-channel.ts";
|
|
3
|
+
export { createInMemoryPushTransport, type PushMessage, type PushTransport } from "./types.ts";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import type { DeliveryChannel } from "../delivery/index.
|
|
3
|
-
import type { PushTransport } from "./types.
|
|
2
|
+
import type { DeliveryChannel } from "../delivery/index.ts";
|
|
3
|
+
import type { PushTransport } from "./types.ts";
|
|
4
4
|
export type PushChannelOptions = {
|
|
5
5
|
readonly transport: PushTransport;
|
|
6
6
|
readonly resolveToken: (userId: string, ctx: {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type SlackChannelOptions } from "./slack-channel.
|
|
2
|
+
import { type SlackChannelOptions } from "./slack-channel.ts";
|
|
3
3
|
export declare function createChannelSlackFeature(options?: SlackChannelOptions): FeatureDefinition;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createChannelSlackFeature } from "./feature.
|
|
2
|
-
export { createSlackChannel, SLACK_DEFAULT_ALLOWED_HOSTS, SLACK_SECRET_KEYS, type SlackChannelOptions, } from "./slack-channel.
|
|
1
|
+
export { createChannelSlackFeature } from "./feature.ts";
|
|
2
|
+
export { createSlackChannel, SLACK_DEFAULT_ALLOWED_HOSTS, SLACK_SECRET_KEYS, type SlackChannelOptions, } from "./slack-channel.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.
|
|
1
|
+
import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.ts";
|
|
2
2
|
export type SlackChannelOptions = ChatWebhookChannelOptions;
|
|
3
3
|
export declare const SLACK_SECRET_KEYS: {
|
|
4
4
|
readonly webhookPrefix: "channel-slack:webhooks.";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type TeamsChannelOptions } from "./teams-channel.
|
|
2
|
+
import { type TeamsChannelOptions } from "./teams-channel.ts";
|
|
3
3
|
export declare function createChannelTeamsFeature(options?: TeamsChannelOptions): FeatureDefinition;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createChannelTeamsFeature } from "./feature.
|
|
2
|
-
export { createTeamsChannel, TEAMS_DEFAULT_ALLOWED_HOSTS, TEAMS_SECRET_KEYS, type TeamsChannelOptions, } from "./teams-channel.
|
|
1
|
+
export { createChannelTeamsFeature } from "./feature.ts";
|
|
2
|
+
export { createTeamsChannel, TEAMS_DEFAULT_ALLOWED_HOSTS, TEAMS_SECRET_KEYS, type TeamsChannelOptions, } from "./teams-channel.ts";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ChatSendResult, type ChatWebhookChannelOptions, type ChatWebhookResponse, type DeliveryChannel } from "../delivery/index.
|
|
1
|
+
import { type ChatSendResult, type ChatWebhookChannelOptions, type ChatWebhookResponse, type DeliveryChannel } from "../delivery/index.ts";
|
|
2
2
|
export type TeamsChannelOptions = ChatWebhookChannelOptions;
|
|
3
3
|
export declare const TEAMS_SECRET_KEYS: {
|
|
4
4
|
readonly webhookPrefix: "channel-teams:webhooks.";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type TelegramChannelOptions } from "./telegram-channel.
|
|
2
|
+
import { type TelegramChannelOptions } from "./telegram-channel.ts";
|
|
3
3
|
export declare function createChannelTelegramFeature(options?: TelegramChannelOptions): FeatureDefinition;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createChannelTelegramFeature } from "./feature.
|
|
2
|
-
export { createTelegramChannel, isTelegramBotToken, isTelegramChatId, TELEGRAM_DEFAULT_API_BASE_URL, TELEGRAM_SECRET_KEYS, type TelegramChannelOptions, } from "./telegram-channel.
|
|
1
|
+
export { createChannelTelegramFeature } from "./feature.ts";
|
|
2
|
+
export { createTelegramChannel, isTelegramBotToken, isTelegramChatId, TELEGRAM_DEFAULT_API_BASE_URL, TELEGRAM_SECRET_KEYS, type TelegramChannelOptions, } from "./telegram-channel.ts";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
export { tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./schema/profile-selection.
|
|
2
|
+
export { tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./schema/profile-selection.ts";
|
|
3
3
|
export type ComplianceProfilesFeatureOptions = {
|
|
4
4
|
readonly access?: readonly string[];
|
|
5
5
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { COMPLIANCE_PROFILE_SCREEN_ID, COMPLIANCE_PROFILES_FEATURE, ComplianceProfileHandlers, ComplianceProfileQueries, } from "./constants.
|
|
2
|
-
export { type ComplianceProfilesFeatureOptions, createComplianceProfilesFeature, tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./feature.
|
|
3
|
-
export { resolveProfileForTenant } from "./resolve-for-tenant.
|
|
1
|
+
export { COMPLIANCE_PROFILE_SCREEN_ID, COMPLIANCE_PROFILES_FEATURE, ComplianceProfileHandlers, ComplianceProfileQueries, } from "./constants.ts";
|
|
2
|
+
export { type ComplianceProfilesFeatureOptions, createComplianceProfilesFeature, tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./feature.ts";
|
|
3
|
+
export { resolveProfileForTenant } from "./resolve-for-tenant.ts";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type ComplianceProfilesClientOptions, complianceProfilesClient, } from "./client-plugin.
|
|
2
|
-
export { ComplianceProfileCatalog } from "./compliance-profile-catalog.
|
|
1
|
+
export { type ComplianceProfilesClientOptions, complianceProfilesClient, } from "./client-plugin.tsx";
|
|
2
|
+
export { ComplianceProfileCatalog } from "./compliance-profile-catalog.tsx";
|
|
@@ -5,11 +5,3 @@ export declare function createComplianceProfilesOpsFeature(): import("@cosmicdri
|
|
|
5
5
|
};
|
|
6
6
|
};
|
|
7
7
|
};
|
|
8
|
-
/** @deprecated Use createComplianceProfilesOpsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
|
|
9
|
-
export declare const complianceProfilesOpsFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
|
|
10
|
-
readonly exports: {
|
|
11
|
-
queries: {
|
|
12
|
-
tenantsMissingProfile: import("@cosmicdrift/kumiko-types/handlers").HandlerRef;
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
};
|
|
@@ -28,5 +28,3 @@ export function createComplianceProfilesOpsFeature() {
|
|
|
28
28
|
return { queries };
|
|
29
29
|
}, { dedupeOptions: {} });
|
|
30
30
|
}
|
|
31
|
-
/** @deprecated Use createComplianceProfilesOpsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
|
|
32
|
-
export const complianceProfilesOpsFeature = createComplianceProfilesOpsFeature();
|
package/dist/config/feature.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { DbConnection, TenantDb } from "@cosmicdrift/kumiko-framework/db";
|
|
2
2
|
import { type ConfigAccessor, type ConfigAccessorFactory, type ConfigSecretsReader, type FeatureDefinition, type HandlerContext, type Registry, type TenantId } from "@cosmicdrift/kumiko-framework/engine";
|
|
3
3
|
import type { EnvelopeCipher } from "@cosmicdrift/kumiko-framework/secrets";
|
|
4
|
-
import type { ConfigResolver } from "./resolver.
|
|
4
|
+
import type { ConfigResolver } from "./resolver.ts";
|
|
5
5
|
export type ConfigContext = {
|
|
6
6
|
readonly config: ConfigAccessor;
|
|
7
7
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type JobHandlerFn } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
-
import { type ChunkedMigrationStopReason } from "../../shared/index.
|
|
2
|
+
import { type ChunkedMigrationStopReason } from "../../shared/index.ts";
|
|
3
3
|
export type ReencryptJobPayload = {
|
|
4
4
|
readonly maxDurationMs?: number;
|
|
5
5
|
readonly maxFailures?: number;
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
|
|
2
2
|
import type { Registry } from "@cosmicdrift/kumiko-framework/engine";
|
|
3
3
|
import type { EnvelopeCipher } from "@cosmicdrift/kumiko-framework/secrets";
|
|
4
|
-
export { CONFIG_FEATURE, ConfigErrors, ConfigHandlers, ConfigQueries, } from "./constants.
|
|
5
|
-
export type { ConfigContext } from "./feature.
|
|
6
|
-
export { createConfigAccessor, createConfigAccessorFactory, createConfigFeature, } from "./feature.
|
|
7
|
-
export type { ReadinessMissingKey, RequiredKeyGate } from "./handlers/readiness.query.
|
|
8
|
-
export { buildProviderSelectionGate, collectMissingRequiredConfig, } from "./handlers/readiness.query.
|
|
9
|
-
export type { AppConfigOverrides, ConfigResolver } from "./resolver.
|
|
10
|
-
export { buildEnvConfigOverrides, createConfigResolver, validateAppOverrides } from "./resolver.
|
|
11
|
-
export { configValueEntity, configValuesTable } from "./table.
|
|
4
|
+
export { CONFIG_FEATURE, ConfigErrors, ConfigHandlers, ConfigQueries, } from "./constants.ts";
|
|
5
|
+
export type { ConfigContext } from "./feature.ts";
|
|
6
|
+
export { createConfigAccessor, createConfigAccessorFactory, createConfigFeature, } from "./feature.ts";
|
|
7
|
+
export type { ReadinessMissingKey, RequiredKeyGate } from "./handlers/readiness.query.ts";
|
|
8
|
+
export { buildProviderSelectionGate, collectMissingRequiredConfig, } from "./handlers/readiness.query.ts";
|
|
9
|
+
export type { AppConfigOverrides, ConfigResolver } from "./resolver.ts";
|
|
10
|
+
export { buildEnvConfigOverrides, createConfigResolver, validateAppOverrides } from "./resolver.ts";
|
|
11
|
+
export { configValueEntity, configValuesTable } from "./table.ts";
|
|
12
12
|
export declare function seedAllConfigValues(registry: Registry, db: DbConnection, cipher?: EnvelopeCipher): Promise<{
|
|
13
13
|
created: number;
|
|
14
14
|
skipped: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
|
|
2
|
-
import { CONFIG_FEATURE } from "../constants.
|
|
2
|
+
import { CONFIG_FEATURE } from "../constants.ts";
|
|
3
3
|
export type ConfigClientOptions = {
|
|
4
4
|
/** Key-wise overrides over the default bundles (de/en). */
|
|
5
5
|
readonly translations?: TranslationsByLocale;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { type ConfigClientFeature, type ConfigClientOptions, configClient, } from "./client-plugin.
|
|
2
|
-
export { defaultTranslations } from "./i18n.
|
|
1
|
+
export { type ConfigClientFeature, type ConfigClientOptions, configClient, } from "./client-plugin.ts";
|
|
2
|
+
export { defaultTranslations } from "./i18n.ts";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
/** Env block of the subject-key KMS: the platform KEK (and its rotation
|
|
3
|
+
* predecessor), the blind-index key, the DEK store, and the Key Manager
|
|
4
|
+
* coordinates for slots delivered as `<NAME>_CIPHERTEXT`. Every field is
|
|
5
|
+
* optional here; an app that requires crypto-shredding in production enforces
|
|
6
|
+
* the all-or-none set in its own boot wiring. */
|
|
7
|
+
export declare const kmsEnvSchema: z.ZodObject<{
|
|
8
|
+
PLATFORM_KEK: z.ZodOptional<z.ZodString>;
|
|
9
|
+
SUBJECT_KEYS_DATABASE_URL: z.ZodOptional<z.ZodString>;
|
|
10
|
+
KUMIKO_BLIND_INDEX_KEY: z.ZodOptional<z.ZodString>;
|
|
11
|
+
PLATFORM_KEK_VERSION: z.ZodOptional<z.ZodString>;
|
|
12
|
+
PLATFORM_KEK_PREVIOUS: z.ZodOptional<z.ZodString>;
|
|
13
|
+
PLATFORM_KEK_PREVIOUS_VERSION: z.ZodOptional<z.ZodString>;
|
|
14
|
+
PLATFORM_KEK_CIPHERTEXT: z.ZodOptional<z.ZodString>;
|
|
15
|
+
PLATFORM_KEK_PREVIOUS_CIPHERTEXT: z.ZodOptional<z.ZodString>;
|
|
16
|
+
KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: z.ZodOptional<z.ZodString>;
|
|
17
|
+
KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: z.ZodOptional<z.ZodString>;
|
|
18
|
+
PLATFORM_KEK_KMS_KEY_ID: z.ZodOptional<z.ZodString>;
|
|
19
|
+
PLATFORM_KEK_KMS_TOKEN: z.ZodOptional<z.ZodString>;
|
|
20
|
+
PLATFORM_KEK_KMS_REGION: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
const GENERATED_KEY = { generator: "openssl rand -base64 32", secret: true };
|
|
3
|
+
/** Env block of the subject-key KMS: the platform KEK (and its rotation
|
|
4
|
+
* predecessor), the blind-index key, the DEK store, and the Key Manager
|
|
5
|
+
* coordinates for slots delivered as `<NAME>_CIPHERTEXT`. Every field is
|
|
6
|
+
* optional here; an app that requires crypto-shredding in production enforces
|
|
7
|
+
* the all-or-none set in its own boot wiring. */
|
|
8
|
+
export const kmsEnvSchema = z.object({
|
|
9
|
+
PLATFORM_KEK: z
|
|
10
|
+
.string()
|
|
11
|
+
.min(1)
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("KEK (base64, 32 bytes) that wraps the subject DEKs in the subject-keys store. Losing it makes every encrypted PII field unreadable.")
|
|
14
|
+
.meta({ kumiko: { kms: true, pulumi: GENERATED_KEY } }),
|
|
15
|
+
SUBJECT_KEYS_DATABASE_URL: z
|
|
16
|
+
.string()
|
|
17
|
+
.min(1)
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Connection URL of the subject-keys database (DEK store). Comes from the database secret, never from Pulumi config."),
|
|
20
|
+
KUMIKO_BLIND_INDEX_KEY: z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1)
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("HMAC key (base64, 32 bytes) for blind-index columns, the equality lookups on encrypted fields. Kept separate from the KEK.")
|
|
25
|
+
.meta({ kumiko: { kms: true, pulumi: GENERATED_KEY } }),
|
|
26
|
+
PLATFORM_KEK_VERSION: z
|
|
27
|
+
.string()
|
|
28
|
+
.regex(/^\d+$/, "must be a generation number")
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Active KEK generation (default 1)."),
|
|
31
|
+
PLATFORM_KEK_PREVIOUS: z
|
|
32
|
+
.string()
|
|
33
|
+
.min(1)
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("KEK of the previous generation (base64), set only during a rotation.")
|
|
36
|
+
.meta({ kumiko: { kms: true } }),
|
|
37
|
+
PLATFORM_KEK_PREVIOUS_VERSION: z
|
|
38
|
+
.string()
|
|
39
|
+
.regex(/^\d+$/, "must be a generation number")
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Generation number of the previous KEK."),
|
|
42
|
+
PLATFORM_KEK_CIPHERTEXT: z
|
|
43
|
+
.string()
|
|
44
|
+
.min(1)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Key Manager ciphertext of PLATFORM_KEK, used when PLATFORM_KEK is unset. Not a Pulumi secret: it is useless without the Key Manager key."),
|
|
47
|
+
PLATFORM_KEK_PREVIOUS_CIPHERTEXT: z
|
|
48
|
+
.string()
|
|
49
|
+
.min(1)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Key Manager ciphertext of PLATFORM_KEK_PREVIOUS, rotation only."),
|
|
52
|
+
KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: z
|
|
53
|
+
.string()
|
|
54
|
+
.min(1)
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Key Manager ciphertext of KUMIKO_BLIND_INDEX_KEY, wrapped by the same key as the KEK."),
|
|
57
|
+
KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: z
|
|
58
|
+
.string()
|
|
59
|
+
.min(1)
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("Key Manager ciphertext of KUMIKO_SECRETS_MASTER_KEY_V1, wrapped by the same key as the KEK."),
|
|
62
|
+
PLATFORM_KEK_KMS_KEY_ID: z
|
|
63
|
+
.string()
|
|
64
|
+
.min(1)
|
|
65
|
+
.optional()
|
|
66
|
+
.describe("Scaleway Key Manager key id the ciphertexts were wrapped with."),
|
|
67
|
+
PLATFORM_KEK_KMS_TOKEN: z
|
|
68
|
+
.string()
|
|
69
|
+
.min(1)
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Scaleway API secret key for the decrypt call. Scope it to KeyManagerKeyDecrypt; a broader key trades the KEK for infrastructure access.")
|
|
72
|
+
.meta({ kumiko: { pulumi: { secret: true } } }),
|
|
73
|
+
PLATFORM_KEK_KMS_REGION: z
|
|
74
|
+
.string()
|
|
75
|
+
.min(1)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Key Manager region. Default fr-par."),
|
|
78
|
+
});
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export declare function createCryptoShreddingFeature(): import("@cosmicdrift/kumiko-framework/env").FeatureWithEnvSchema<import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
|
|
2
|
+
readonly exports: void;
|
|
3
|
+
}, {
|
|
4
|
+
PLATFORM_KEK: import("zod").ZodOptional<import("zod").ZodString>;
|
|
5
|
+
SUBJECT_KEYS_DATABASE_URL: import("zod").ZodOptional<import("zod").ZodString>;
|
|
6
|
+
KUMIKO_BLIND_INDEX_KEY: import("zod").ZodOptional<import("zod").ZodString>;
|
|
7
|
+
PLATFORM_KEK_VERSION: import("zod").ZodOptional<import("zod").ZodString>;
|
|
8
|
+
PLATFORM_KEK_PREVIOUS: import("zod").ZodOptional<import("zod").ZodString>;
|
|
9
|
+
PLATFORM_KEK_PREVIOUS_VERSION: import("zod").ZodOptional<import("zod").ZodString>;
|
|
10
|
+
PLATFORM_KEK_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
|
|
11
|
+
PLATFORM_KEK_PREVIOUS_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
|
+
KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
|
|
13
|
+
KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
|
|
14
|
+
PLATFORM_KEK_KMS_KEY_ID: import("zod").ZodOptional<import("zod").ZodString>;
|
|
15
|
+
PLATFORM_KEK_KMS_TOKEN: import("zod").ZodOptional<import("zod").ZodString>;
|
|
16
|
+
PLATFORM_KEK_KMS_REGION: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
+
}>;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
|
|
2
|
+
import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
|
|
2
3
|
import { CRYPTO_SHREDDING_FEATURE_NAME } from "./constants.js";
|
|
4
|
+
import { kmsEnvSchema } from "./env/index.js";
|
|
3
5
|
import { forgetSubjectWrite, subjectForgetDeniedSchema, subjectForgottenSchema, } from "./handlers/forget-subject.write.js";
|
|
4
6
|
export function createCryptoShreddingFeature() {
|
|
5
|
-
|
|
7
|
+
const feature = defineFeature(CRYPTO_SHREDDING_FEATURE_NAME, (r) => {
|
|
6
8
|
r.describe("Operator-level crypto-shredding trigger. `forget-subject` erases a user or tenant subject key in the configured KMS adapter, making every PII field encrypted under it permanently unreadable (reads render the `[[erased]]` sentinel), and appends a `subject-forgotten` audit event. Requires a KMS adapter (`runProdApp({ kms })`). The automated Art.-17 deletion pipeline in `user-data-rights` erases keys itself; this command covers manual forgets (authority requests, operator recovery, tenant destroy).");
|
|
7
9
|
r.uiHints({
|
|
8
10
|
displayLabel: "Crypto-Shredding",
|
|
9
11
|
category: "compliance",
|
|
10
12
|
});
|
|
13
|
+
r.envSchema(kmsEnvSchema);
|
|
11
14
|
// `reason` is operator free text and may name the subject, yet stays plaintext: the forget
|
|
12
15
|
// erases the subject key before the audit append, so a forget of the actor's own tenant
|
|
13
16
|
// would fail to seal the reason under that tenant's key.
|
|
@@ -15,4 +18,5 @@ export function createCryptoShreddingFeature() {
|
|
|
15
18
|
r.defineEvent("forget-denied", subjectForgetDeniedSchema, { piiFields: "none" });
|
|
16
19
|
r.writeHandler(forgetSubjectWrite);
|
|
17
20
|
}, { dedupeOptions: {} });
|
|
21
|
+
return featureWithEnvSchema(feature, kmsEnvSchema);
|
|
18
22
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
1
|
+
export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.ts";
|
|
2
|
+
export { kmsEnvSchema } from "./env/index.ts";
|
|
3
|
+
export { createCryptoShreddingFeature } from "./feature.ts";
|
|
4
|
+
export { forgetSubjectSchema, subjectForgetDeniedSchema, subjectForgottenSchema, subjectIdSchema, } from "./handlers/forget-subject.write.ts";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.js";
|
|
2
|
+
export { kmsEnvSchema } from "./env/index.js";
|
|
2
3
|
export { createCryptoShreddingFeature } from "./feature.js";
|
|
3
4
|
export { forgetSubjectSchema, subjectForgetDeniedSchema, subjectForgottenSchema, subjectIdSchema, } from "./handlers/forget-subject.write.js";
|