@rapidmx/web-client 0.21.0 → 0.23.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/README.md +48 -14
- package/apps/admin/_layout.tsx +2 -2
- package/apps/admin/audit-log/index.tsx +4 -4
- package/apps/admin/branding/index.tsx +3 -3
- package/apps/admin/data-requests/index.tsx +8 -8
- package/apps/admin/distribution-lists/[uid].tsx +3 -3
- package/apps/admin/distribution-lists/index.tsx +4 -4
- package/apps/admin/distribution-lists/new/index.tsx +5 -5
- package/apps/admin/domains/[uid].tsx +6 -6
- package/apps/admin/domains/index.tsx +4 -4
- package/apps/admin/domains/new/index.tsx +5 -5
- package/apps/admin/encryption-policy/index.tsx +1 -1
- package/apps/admin/escrow-scopes/[uid].tsx +7 -7
- package/apps/admin/escrow-scopes/index.tsx +4 -4
- package/apps/admin/escrow-scopes/new/index.tsx +5 -5
- package/apps/admin/index.tsx +6 -6
- package/apps/admin/ingest-queue/index.tsx +4 -4
- package/apps/admin/mailbox-policy/index.tsx +1 -1
- package/apps/admin/mailboxes/[uid].tsx +5 -5
- package/apps/admin/quarantine/index.tsx +5 -5
- package/apps/admin/retention-policy/index.tsx +3 -3
- package/apps/admin/signing-certificates/index.tsx +5 -5
- package/apps/admin/transport-rules/[uid].tsx +5 -5
- package/apps/admin/transport-rules/_transportRuleConfig.tsx +3 -3
- package/apps/admin/transport-rules/index.tsx +4 -4
- package/apps/admin/transport-rules/new/index.tsx +5 -5
- package/apps/escrow/_layout.tsx +1 -1
- package/apps/escrow/audit-log/index.tsx +4 -4
- package/apps/escrow/index.tsx +4 -4
- package/apps/escrow/matters/[uid].tsx +10 -10
- package/apps/escrow/matters/new/index.tsx +6 -6
- package/apps/shared/appearance/AppearanceForm.tsx +3 -3
- package/apps/shared/appearance/AppearanceHead.tsx +1 -1
- package/apps/shared/appearance/AppearanceProvider.tsx +3 -3
- package/apps/shared/appearance/appearanceCache.ts +1 -1
- package/apps/shared/appearance/appearanceContext.ts +1 -1
- package/apps/shared/appearance/theme.ts +1 -1
- package/apps/shared/auth/adminAccess.ts +1 -1
- package/apps/shared/calendar/bookingPlugin.ts +1 -1
- package/apps/shared/calendar/calendarLiveUpdates.ts +1 -1
- package/apps/shared/calendar/calendarReminders.ts +1 -1
- package/apps/shared/calendar/useCalendarReminders.ts +1 -1
- package/apps/shared/components/admin/diagnostics/DiagnosticsManager.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/InstalledPlugins.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/LogsPanel.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/PackagesTable.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/RuntimePanel.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/SystemPanel.tsx +2 -2
- package/apps/shared/components/admin/diagnostics/VersionsPanel.tsx +1 -1
- package/apps/shared/components/admin/diagnostics/diagnosticsApi.ts +1 -1
- package/apps/shared/components/admin/diagnostics/format.ts +1 -1
- package/apps/shared/components/admin/diagnostics/logClient.ts +1 -1
- package/apps/shared/components/admin/distributionLists/MemberListCard.tsx +4 -4
- package/apps/shared/components/admin/elevation.ts +1 -1
- package/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.tsx +3 -3
- package/apps/shared/components/admin/layout/AdminShell.tsx +8 -8
- package/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.tsx +6 -6
- package/apps/shared/components/admin/mailboxes/EscrowScopeCard.tsx +10 -8
- package/apps/shared/components/admin/mailboxes/LeftoverMailboxesSection.tsx +4 -4
- package/apps/shared/components/admin/mailboxes/MailboxTable.tsx +1 -1
- package/apps/shared/components/admin/mailboxes/ResourceSettingsCard.tsx +19 -14
- package/apps/shared/components/admin/mailboxes/ShareAccessCard.tsx +5 -5
- package/apps/shared/components/admin/settings/BrandingForm.tsx +5 -5
- package/apps/shared/components/admin/settings/DomainDnsSetup.tsx +5 -5
- package/apps/shared/components/admin/settings/EncryptionPolicyForm.tsx +4 -4
- package/apps/shared/components/admin/settings/LoadedSettingsForm.tsx +2 -2
- package/apps/shared/components/admin/settings/MailboxCreateForm.tsx +32 -27
- package/apps/shared/components/admin/settings/MailboxPolicyForm.tsx +4 -4
- package/apps/shared/components/admin/settings/PluginsManager.tsx +5 -5
- package/apps/shared/components/admin/settings/RetentionPolicyForm.tsx +5 -5
- package/apps/shared/components/admin/setup/EscrowSetupStep.tsx +7 -7
- package/apps/shared/components/admin/setup/SetupWizard.tsx +28 -24
- package/apps/shared/components/admin/signOut.ts +1 -1
- package/apps/shared/components/admin/usePagedList.tsx +2 -2
- package/apps/shared/components/calendar/AppointmentQuickForm.tsx +3 -3
- package/apps/shared/components/calendar/CalendarListSidebar.tsx +3 -3
- package/apps/shared/components/calendar/DescriptionEditor.tsx +1 -1
- package/apps/shared/components/calendar/EventDescriptionView.tsx +1 -1
- package/apps/shared/components/calendar/EventDetails.tsx +16 -14
- package/apps/shared/components/calendar/EventEditor.tsx +54 -39
- package/apps/shared/components/calendar/EventExpandedForm.tsx +3 -3
- package/apps/shared/components/calendar/EventFormParts.tsx +2 -2
- package/apps/shared/components/calendar/EventModal.tsx +5 -5
- package/apps/shared/components/calendar/EventQuickForm.tsx +3 -3
- package/apps/shared/components/calendar/EventShell.tsx +1 -1
- package/apps/shared/components/calendar/FindATime.tsx +6 -4
- package/apps/shared/components/calendar/GuestInput.tsx +2 -2
- package/apps/shared/components/calendar/MonthView.tsx +2 -2
- package/apps/shared/components/calendar/QuickCreateFaces.tsx +1 -1
- package/apps/shared/components/calendar/QuickFaceFrame.tsx +1 -1
- package/apps/shared/components/calendar/RecurrenceEditor.tsx +2 -2
- package/apps/shared/components/calendar/RequestChangeForm.tsx +8 -6
- package/apps/shared/components/calendar/ResourcePicker.tsx +7 -5
- package/apps/shared/components/calendar/SplitDayView.tsx +1 -1
- package/apps/shared/components/calendar/TaskQuickForm.tsx +23 -18
- package/apps/shared/components/calendar/TimeGridView.tsx +5 -3
- package/apps/shared/components/calendar/allDay.ts +2 -2
- package/apps/shared/components/calendar/eventDialogFields.ts +3 -3
- package/apps/shared/components/calendar/eventForm.ts +3 -3
- package/apps/shared/components/calendar/eventFormat.ts +3 -3
- package/apps/shared/components/calendar/findTimeGrid.ts +2 -2
- package/apps/shared/components/calendar/layout/CalendarShell.tsx +11 -9
- package/apps/shared/components/contacts/ContactDetailPane.tsx +4 -4
- package/apps/shared/components/contacts/ContactForm.tsx +27 -17
- package/apps/shared/components/contacts/ContactsSidebar.tsx +7 -5
- package/apps/shared/components/contacts/KeyChangeReview.tsx +5 -5
- package/apps/shared/components/contacts/contactKeys.ts +3 -3
- package/apps/shared/components/contacts/layout/ContactsShell.tsx +9 -7
- package/apps/shared/components/escrow/layout/EscrowShell.tsx +6 -6
- package/apps/shared/components/forms/StringListField.tsx +1 -1
- package/apps/shared/components/layout/AppShell.tsx +12 -10
- package/apps/shared/components/layout/BrandingChrome.tsx +1 -1
- package/apps/shared/components/layout/KeyEnrollmentGate.tsx +9 -9
- package/apps/shared/components/layout/MailboxProvisioning.tsx +8 -6
- package/apps/shared/components/layout/RecoveryCodeUnlock.tsx +9 -9
- package/apps/shared/components/layout/ThemeSwitch.tsx +1 -1
- package/apps/shared/components/layout/UnlockPromptProvider.tsx +6 -6
- package/apps/shared/components/layout/UserMenu.tsx +6 -4
- package/apps/shared/components/mail/ConversationList.tsx +25 -10
- package/apps/shared/components/mail/ConversationThreadPane.tsx +33 -17
- package/apps/shared/components/mail/InviteCard.tsx +11 -9
- package/apps/shared/components/mail/LazyReadingPane.tsx +2 -2
- package/apps/shared/components/mail/MailAddress.tsx +1 -1
- package/apps/shared/components/mail/MailListToolbar.tsx +2 -2
- package/apps/shared/components/mail/MailSelectionBar.tsx +2 -2
- package/apps/shared/components/mail/MenuButton.tsx +1 -1
- package/apps/shared/components/mail/MessageDetailPane.tsx +69 -48
- package/apps/shared/components/mail/MoveToFolderDialog.tsx +8 -6
- package/apps/shared/components/mail/OutboxRowStatus.tsx +1 -1
- package/apps/shared/components/mail/PermanentDeleteDialog.tsx +2 -2
- package/apps/shared/components/mail/compose/ComposeContext.tsx +14 -3
- package/apps/shared/components/mail/compose/ComposeWindow.tsx +34 -30
- package/apps/shared/components/mail/compose/ComposeWindowPlaceholder.tsx +4 -4
- package/apps/shared/components/mail/compose/EmojiPicker.tsx +2 -2
- package/apps/shared/components/mail/compose/GifPicker.tsx +3 -3
- package/apps/shared/components/mail/compose/RecipientInput.tsx +1 -1
- package/apps/shared/components/mail/compose/ScheduleSendPicker.tsx +1 -1
- package/apps/shared/components/mail/compose/encryptionRequirement.ts +2 -2
- package/apps/shared/components/mail/compose/quotedBody.ts +5 -5
- package/apps/shared/components/mail/compose/recipients.ts +1 -1
- package/apps/shared/components/mail/invite/InviteRowChip.tsx +10 -14
- package/apps/shared/components/mail/invite/InviteRsvpPopover.tsx +11 -9
- package/apps/shared/components/mail/invite/InviteTimeline.tsx +1 -1
- package/apps/shared/components/mail/invite/ProposeTimeForm.tsx +2 -2
- package/apps/shared/components/mail/invite/inviteFormat.ts +2 -2
- package/apps/shared/components/mail/invite/inviteStore.ts +14 -6
- package/apps/shared/components/mail/labelMenu.tsx +9 -7
- package/apps/shared/components/mail/layout/MailShell.tsx +4 -4
- package/apps/shared/components/mail/listPreferences.ts +2 -2
- package/apps/shared/components/mail/pinnedSigners.ts +45 -19
- package/apps/shared/components/mail/reading/EncryptedBody.tsx +2 -2
- package/apps/shared/components/mail/reading/MessageBody.tsx +6 -6
- package/apps/shared/components/mail/reading/MessageCard.tsx +3 -3
- package/apps/shared/components/mail/reading/MessageSourceDialog.tsx +3 -3
- package/apps/shared/components/mail/reading/PendingMessageCard.tsx +1 -1
- package/apps/shared/components/mail/reading/bodyContent.ts +3 -3
- package/apps/shared/components/mail/reading/bodyHtml.ts +1 -1
- package/apps/shared/components/mail/reading/conversationPrint.ts +76 -0
- package/apps/shared/components/mail/reading/messageExport.ts +1 -1
- package/apps/shared/components/mail/reading/printMessage.ts +46 -9
- package/apps/shared/components/mail/reading/useMessageActions.ts +28 -21
- package/apps/shared/components/mail/unreadStyle.tsx +1 -1
- package/apps/shared/components/mail/verificationSeals.ts +16 -12
- package/apps/shared/components/mail/writableMailboxes.ts +14 -7
- package/apps/shared/components/rules/RuleBuilder.tsx +1 -1
- package/apps/shared/components/settings/SigningCertificateCard.tsx +4 -4
- package/apps/shared/components/settings/layout/SettingsShell.tsx +8 -6
- package/apps/shared/components/sharing/PrincipalListField.tsx +1 -1
- package/apps/shared/components/sharing/PrincipalPicker.tsx +1 -1
- package/apps/shared/components/sharing/PrincipalResolver.tsx +4 -4
- package/apps/shared/components/tasks/TasksSidebar.tsx +7 -5
- package/apps/shared/components/tasks/layout/TasksShell.tsx +9 -7
- package/apps/shared/keyboard/ShortcutsDialog.tsx +1 -1
- package/apps/shared/keyboard/keymap.ts +1 -0
- package/apps/shared/mail/decryptedMessages.ts +116 -0
- package/apps/shared/mail/findWellKnownFolderUid.ts +6 -4
- package/apps/shared/mail/folderCounts.ts +8 -4
- package/apps/shared/mail/folderOfType.ts +5 -3
- package/apps/shared/mail/folderTree.ts +1 -1
- package/apps/shared/mail/listSnapshots.ts +2 -2
- package/apps/shared/mail/messageReadState.ts +6 -5
- package/apps/shared/mail/newMailNotifications.ts +2 -2
- package/apps/shared/mail/outbox/composeBridge.ts +2 -2
- package/apps/shared/mail/outbox/outboxState.ts +1 -1
- package/apps/shared/mail/outbox/outgoingReplies.ts +2 -2
- package/apps/shared/mail/outbox/sendDecision.ts +2 -2
- package/apps/shared/mail/outbox/sendJob.ts +40 -35
- package/apps/shared/mail/outbox/sendOutcomes.ts +20 -15
- package/apps/shared/mail/outbox/useOutboxStatus.ts +5 -3
- package/apps/shared/mail/permanentDelete.ts +8 -7
- package/apps/shared/mail/primaryMailbox.ts +1 -1
- package/apps/shared/mail/reportNotices.ts +1 -1
- package/apps/shared/mail/senderBlocking.ts +36 -20
- package/apps/shared/mail/useMailConnection.ts +12 -10
- package/apps/shared/mail/useMailLiveUpdates.ts +3 -3
- package/apps/shared/mail/useMailboxUpdateAccess.ts +35 -11
- package/apps/shared/mail/useMarkMessageRead.ts +14 -7
- package/apps/shared/mail/useNewMailNotifications.ts +1 -1
- package/apps/shared/mail/usePermanentDelete.tsx +5 -3
- package/apps/shared/navigation/pageTitle.ts +1 -1
- package/apps/shared/notifications/NotificationCenter.tsx +1 -1
- package/apps/shared/notifications/NotificationHistoryDialog.tsx +2 -2
- package/apps/shared/notifications/apiErrors.ts +2 -2
- package/apps/shared/notifications/pushStatus.ts +1 -1
- package/apps/shared/notifications/systemErrors.ts +1 -1
- package/apps/shared/search/LocalIndexLifecycle.tsx +18 -12
- package/apps/shared/search/crossMailboxSearch.ts +3 -3
- package/apps/shared/search/localIndexBuilder.ts +24 -12
- package/apps/shared/search/localIndexKey.ts +1 -1
- package/apps/shared/search/localIndexRpcClient.ts +150 -30
- package/apps/shared/search/localIndexTransport.ts +84 -0
- package/apps/shared/search/localIndexWorker.ts +1 -1
- package/apps/shared/search/searchTier2.ts +3 -3
- package/apps/shared/signing/enrollmentTracker.ts +3 -3
- package/apps/shared/signing/enrollmentView.ts +1 -1
- package/apps/shared/signing/signingInfo.ts +1 -1
- package/apps/shared/signing/useSigningEnrollmentWatcher.ts +6 -4
- package/apps/shared/styles/app.css +14 -23
- package/apps/www/_layout.tsx +2 -2
- package/apps/www/calendar/index.tsx +20 -18
- package/apps/www/contacts/[uid].tsx +8 -6
- package/apps/www/contacts/index.tsx +19 -17
- package/apps/www/index.tsx +68 -48
- package/apps/www/messages/[uid].tsx +11 -9
- package/apps/www/settings/auto-reply/index.tsx +6 -4
- package/apps/www/settings/blocked-senders/index.tsx +9 -7
- package/apps/www/settings/encryption/index.tsx +38 -32
- package/apps/www/settings/filters/[uid].tsx +19 -14
- package/apps/www/settings/filters/_mailFilterRuleConfig.tsx +2 -2
- package/apps/www/settings/filters/index.tsx +4 -4
- package/apps/www/settings/filters/new/index.tsx +10 -8
- package/apps/www/settings/labels/index.tsx +12 -10
- package/apps/www/settings/privacy/index.tsx +18 -14
- package/apps/www/settings/profile/index.tsx +16 -11
- package/apps/www/settings/read-receipts/index.tsx +17 -12
- package/apps/www/settings/sharing/index.tsx +6 -6
- package/apps/www/settings/signatures/[uid].tsx +5 -5
- package/apps/www/settings/signatures/index.tsx +4 -4
- package/apps/www/settings/signatures/new/index.tsx +4 -4
- package/apps/www/settings/signatures/signatureDefaults.ts +1 -1
- package/apps/www/tasks/index.tsx +28 -23
- package/dist/apps/admin/_layout.d.ts +1 -1
- package/dist/apps/admin/_layout.js +1 -1
- package/dist/apps/admin/audit-log/index.d.ts +1 -1
- package/dist/apps/admin/audit-log/index.js +4 -4
- package/dist/apps/admin/branding/index.js +3 -3
- package/dist/apps/admin/data-requests/index.js +8 -8
- package/dist/apps/admin/distribution-lists/[uid].js +3 -3
- package/dist/apps/admin/distribution-lists/index.js +4 -4
- package/dist/apps/admin/distribution-lists/new/index.js +5 -5
- package/dist/apps/admin/domains/[uid].js +6 -6
- package/dist/apps/admin/domains/index.js +4 -4
- package/dist/apps/admin/domains/new/index.js +5 -5
- package/dist/apps/admin/encryption-policy/index.js +1 -1
- package/dist/apps/admin/escrow-scopes/[uid].d.ts +1 -1
- package/dist/apps/admin/escrow-scopes/[uid].js +7 -7
- package/dist/apps/admin/escrow-scopes/index.js +4 -4
- package/dist/apps/admin/escrow-scopes/new/index.js +5 -5
- package/dist/apps/admin/index.js +6 -6
- package/dist/apps/admin/ingest-queue/index.js +4 -4
- package/dist/apps/admin/mailbox-policy/index.js +1 -1
- package/dist/apps/admin/mailboxes/[uid].js +5 -5
- package/dist/apps/admin/quarantine/index.js +5 -5
- package/dist/apps/admin/retention-policy/index.js +3 -3
- package/dist/apps/admin/signing-certificates/index.js +5 -5
- package/dist/apps/admin/transport-rules/[uid].js +5 -5
- package/dist/apps/admin/transport-rules/_transportRuleConfig.d.ts +1 -1
- package/dist/apps/admin/transport-rules/_transportRuleConfig.js +2 -2
- package/dist/apps/admin/transport-rules/index.js +4 -4
- package/dist/apps/admin/transport-rules/new/index.js +5 -5
- package/dist/apps/escrow/_layout.d.ts +1 -1
- package/dist/apps/escrow/audit-log/index.d.ts +1 -1
- package/dist/apps/escrow/audit-log/index.js +4 -4
- package/dist/apps/escrow/index.js +4 -4
- package/dist/apps/escrow/matters/[uid].js +10 -10
- package/dist/apps/escrow/matters/new/index.js +6 -6
- package/dist/apps/shared/appearance/AppearanceForm.js +3 -3
- package/dist/apps/shared/appearance/AppearanceHead.js +1 -1
- package/dist/apps/shared/appearance/AppearanceProvider.d.ts +1 -1
- package/dist/apps/shared/appearance/AppearanceProvider.js +3 -3
- package/dist/apps/shared/appearance/appearanceCache.d.ts +1 -1
- package/dist/apps/shared/appearance/appearanceCache.js +1 -1
- package/dist/apps/shared/appearance/appearanceContext.d.ts +1 -1
- package/dist/apps/shared/appearance/theme.d.ts +1 -1
- package/dist/apps/shared/auth/adminAccess.js +1 -1
- package/dist/apps/shared/calendar/bookingPlugin.js +1 -1
- package/dist/apps/shared/calendar/calendarLiveUpdates.d.ts +1 -1
- package/dist/apps/shared/calendar/calendarReminders.d.ts +1 -1
- package/dist/apps/shared/calendar/useCalendarReminders.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/DiagnosticsManager.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/InstalledPlugins.d.ts +1 -1
- package/dist/apps/shared/components/admin/diagnostics/InstalledPlugins.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/LogsPanel.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/PackagesTable.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/RuntimePanel.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/SystemPanel.js +2 -2
- package/dist/apps/shared/components/admin/diagnostics/VersionsPanel.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/diagnosticsApi.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/format.js +1 -1
- package/dist/apps/shared/components/admin/diagnostics/logClient.js +1 -1
- package/dist/apps/shared/components/admin/distributionLists/MemberListCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/distributionLists/MemberListCard.js +4 -4
- package/dist/apps/shared/components/admin/elevation.js +1 -1
- package/dist/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.js +3 -3
- package/dist/apps/shared/components/admin/layout/AdminShell.d.ts +1 -1
- package/dist/apps/shared/components/admin/layout/AdminShell.js +7 -7
- package/dist/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/EraseLeftoverDataDialog.js +6 -6
- package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.js +10 -8
- package/dist/apps/shared/components/admin/mailboxes/LeftoverMailboxesSection.js +4 -4
- package/dist/apps/shared/components/admin/mailboxes/MailboxTable.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.d.ts +1 -1
- package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.js +7 -5
- package/dist/apps/shared/components/admin/mailboxes/ShareAccessCard.js +5 -5
- package/dist/apps/shared/components/admin/settings/BrandingForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/BrandingForm.js +5 -5
- package/dist/apps/shared/components/admin/settings/DomainDnsSetup.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/DomainDnsSetup.js +5 -5
- package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.js +4 -4
- package/dist/apps/shared/components/admin/settings/LoadedSettingsForm.js +2 -2
- package/dist/apps/shared/components/admin/settings/MailboxCreateForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/MailboxCreateForm.js +14 -12
- package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.js +4 -4
- package/dist/apps/shared/components/admin/settings/PluginsManager.js +5 -5
- package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.d.ts +1 -1
- package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.js +5 -5
- package/dist/apps/shared/components/admin/setup/EscrowSetupStep.js +7 -7
- package/dist/apps/shared/components/admin/setup/SetupWizard.d.ts +4 -4
- package/dist/apps/shared/components/admin/setup/SetupWizard.js +27 -23
- package/dist/apps/shared/components/admin/signOut.js +1 -1
- package/dist/apps/shared/components/admin/usePagedList.js +2 -2
- package/dist/apps/shared/components/calendar/AppointmentQuickForm.js +3 -3
- package/dist/apps/shared/components/calendar/CalendarListSidebar.d.ts +1 -1
- package/dist/apps/shared/components/calendar/CalendarListSidebar.js +2 -2
- package/dist/apps/shared/components/calendar/DescriptionEditor.js +1 -1
- package/dist/apps/shared/components/calendar/EventDescriptionView.js +1 -1
- package/dist/apps/shared/components/calendar/EventDetails.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventDetails.js +16 -14
- package/dist/apps/shared/components/calendar/EventEditor.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventEditor.js +22 -20
- package/dist/apps/shared/components/calendar/EventExpandedForm.js +2 -2
- package/dist/apps/shared/components/calendar/EventFormParts.d.ts +1 -1
- package/dist/apps/shared/components/calendar/EventFormParts.js +1 -1
- package/dist/apps/shared/components/calendar/EventModal.d.ts +2 -2
- package/dist/apps/shared/components/calendar/EventModal.js +3 -3
- package/dist/apps/shared/components/calendar/EventQuickForm.js +3 -3
- package/dist/apps/shared/components/calendar/EventShell.js +1 -1
- package/dist/apps/shared/components/calendar/FindATime.js +6 -4
- package/dist/apps/shared/components/calendar/GuestInput.d.ts +2 -2
- package/dist/apps/shared/components/calendar/MonthView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/MonthView.js +1 -1
- package/dist/apps/shared/components/calendar/QuickCreateFaces.js +1 -1
- package/dist/apps/shared/components/calendar/QuickFaceFrame.js +1 -1
- package/dist/apps/shared/components/calendar/RecurrenceEditor.d.ts +1 -1
- package/dist/apps/shared/components/calendar/RecurrenceEditor.js +1 -1
- package/dist/apps/shared/components/calendar/RequestChangeForm.js +8 -6
- package/dist/apps/shared/components/calendar/ResourcePicker.d.ts +1 -1
- package/dist/apps/shared/components/calendar/ResourcePicker.js +7 -5
- package/dist/apps/shared/components/calendar/SplitDayView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TaskQuickForm.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TaskQuickForm.js +9 -7
- package/dist/apps/shared/components/calendar/TimeGridView.d.ts +1 -1
- package/dist/apps/shared/components/calendar/TimeGridView.js +2 -2
- package/dist/apps/shared/components/calendar/allDay.d.ts +2 -2
- package/dist/apps/shared/components/calendar/allDay.js +1 -1
- package/dist/apps/shared/components/calendar/eventDialogFields.d.ts +2 -2
- package/dist/apps/shared/components/calendar/eventDialogFields.js +2 -2
- package/dist/apps/shared/components/calendar/eventForm.d.ts +3 -3
- package/dist/apps/shared/components/calendar/eventFormat.d.ts +1 -1
- package/dist/apps/shared/components/calendar/eventFormat.js +2 -2
- package/dist/apps/shared/components/calendar/findTimeGrid.d.ts +1 -1
- package/dist/apps/shared/components/calendar/findTimeGrid.js +1 -1
- package/dist/apps/shared/components/calendar/layout/CalendarShell.d.ts +1 -1
- package/dist/apps/shared/components/calendar/layout/CalendarShell.js +11 -9
- package/dist/apps/shared/components/contacts/ContactDetailPane.d.ts +1 -1
- package/dist/apps/shared/components/contacts/ContactDetailPane.js +2 -2
- package/dist/apps/shared/components/contacts/ContactForm.d.ts +2 -2
- package/dist/apps/shared/components/contacts/ContactForm.js +12 -8
- package/dist/apps/shared/components/contacts/ContactsSidebar.d.ts +1 -1
- package/dist/apps/shared/components/contacts/ContactsSidebar.js +7 -5
- package/dist/apps/shared/components/contacts/KeyChangeReview.d.ts +1 -1
- package/dist/apps/shared/components/contacts/KeyChangeReview.js +5 -5
- package/dist/apps/shared/components/contacts/contactKeys.d.ts +2 -2
- package/dist/apps/shared/components/contacts/contactKeys.js +2 -2
- package/dist/apps/shared/components/contacts/layout/ContactsShell.d.ts +1 -1
- package/dist/apps/shared/components/contacts/layout/ContactsShell.js +9 -7
- package/dist/apps/shared/components/escrow/layout/EscrowShell.js +6 -6
- package/dist/apps/shared/components/forms/StringListField.js +1 -1
- package/dist/apps/shared/components/layout/AppShell.d.ts +2 -2
- package/dist/apps/shared/components/layout/AppShell.js +11 -9
- package/dist/apps/shared/components/layout/BrandingChrome.d.ts +1 -1
- package/dist/apps/shared/components/layout/KeyEnrollmentGate.d.ts +1 -1
- package/dist/apps/shared/components/layout/KeyEnrollmentGate.js +9 -9
- package/dist/apps/shared/components/layout/MailboxProvisioning.js +8 -6
- package/dist/apps/shared/components/layout/RecoveryCodeUnlock.d.ts +1 -1
- package/dist/apps/shared/components/layout/RecoveryCodeUnlock.js +9 -9
- package/dist/apps/shared/components/layout/UnlockPromptProvider.d.ts +2 -2
- package/dist/apps/shared/components/layout/UnlockPromptProvider.js +5 -5
- package/dist/apps/shared/components/layout/UserMenu.js +6 -4
- package/dist/apps/shared/components/mail/ConversationList.d.ts +2 -2
- package/dist/apps/shared/components/mail/ConversationList.js +23 -8
- package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/ConversationThreadPane.js +19 -13
- package/dist/apps/shared/components/mail/InviteCard.js +10 -8
- package/dist/apps/shared/components/mail/LazyReadingPane.js +2 -2
- package/dist/apps/shared/components/mail/MailAddress.d.ts +1 -1
- package/dist/apps/shared/components/mail/MailAddress.js +1 -1
- package/dist/apps/shared/components/mail/MailListToolbar.d.ts +2 -2
- package/dist/apps/shared/components/mail/MailSelectionBar.d.ts +2 -2
- package/dist/apps/shared/components/mail/MenuButton.js +1 -1
- package/dist/apps/shared/components/mail/MessageDetailPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/MessageDetailPane.js +61 -46
- package/dist/apps/shared/components/mail/MoveToFolderDialog.d.ts +1 -1
- package/dist/apps/shared/components/mail/MoveToFolderDialog.js +8 -6
- package/dist/apps/shared/components/mail/OutboxRowStatus.d.ts +1 -1
- package/dist/apps/shared/components/mail/PermanentDeleteDialog.js +2 -2
- package/dist/apps/shared/components/mail/compose/ComposeContext.d.ts +10 -1
- package/dist/apps/shared/components/mail/compose/ComposeContext.js +4 -2
- package/dist/apps/shared/components/mail/compose/ComposeWindow.js +34 -30
- package/dist/apps/shared/components/mail/compose/ComposeWindowPlaceholder.js +4 -4
- package/dist/apps/shared/components/mail/compose/EmojiPicker.js +2 -2
- package/dist/apps/shared/components/mail/compose/GifPicker.js +3 -3
- package/dist/apps/shared/components/mail/compose/RecipientInput.d.ts +1 -1
- package/dist/apps/shared/components/mail/compose/RecipientInput.js +1 -1
- package/dist/apps/shared/components/mail/compose/ScheduleSendPicker.js +1 -1
- package/dist/apps/shared/components/mail/compose/encryptionRequirement.d.ts +2 -2
- package/dist/apps/shared/components/mail/compose/encryptionRequirement.js +1 -1
- package/dist/apps/shared/components/mail/compose/quotedBody.d.ts +3 -3
- package/dist/apps/shared/components/mail/compose/quotedBody.js +3 -3
- package/dist/apps/shared/components/mail/compose/recipients.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRowChip.d.ts +3 -3
- package/dist/apps/shared/components/mail/invite/InviteRowChip.js +7 -9
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.d.ts +2 -2
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.js +11 -9
- package/dist/apps/shared/components/mail/invite/InviteTimeline.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/ProposeTimeForm.js +1 -1
- package/dist/apps/shared/components/mail/invite/inviteFormat.d.ts +2 -2
- package/dist/apps/shared/components/mail/invite/inviteStore.d.ts +9 -3
- package/dist/apps/shared/components/mail/invite/inviteStore.js +13 -6
- package/dist/apps/shared/components/mail/labelMenu.d.ts +1 -1
- package/dist/apps/shared/components/mail/labelMenu.js +9 -7
- package/dist/apps/shared/components/mail/layout/MailShell.d.ts +1 -1
- package/dist/apps/shared/components/mail/layout/MailShell.js +3 -3
- package/dist/apps/shared/components/mail/listPreferences.d.ts +2 -2
- package/dist/apps/shared/components/mail/listPreferences.js +1 -1
- package/dist/apps/shared/components/mail/pinnedSigners.d.ts +12 -5
- package/dist/apps/shared/components/mail/pinnedSigners.js +37 -18
- package/dist/apps/shared/components/mail/reading/EncryptedBody.js +2 -2
- package/dist/apps/shared/components/mail/reading/MessageBody.d.ts +2 -2
- package/dist/apps/shared/components/mail/reading/MessageBody.js +4 -4
- package/dist/apps/shared/components/mail/reading/MessageCard.d.ts +1 -1
- package/dist/apps/shared/components/mail/reading/MessageCard.js +2 -2
- package/dist/apps/shared/components/mail/reading/MessageSourceDialog.js +3 -3
- package/dist/apps/shared/components/mail/reading/PendingMessageCard.js +1 -1
- package/dist/apps/shared/components/mail/reading/bodyContent.d.ts +2 -2
- package/dist/apps/shared/components/mail/reading/bodyContent.js +2 -2
- package/dist/apps/shared/components/mail/reading/bodyHtml.js +1 -1
- package/dist/apps/shared/components/mail/reading/conversationPrint.d.ts +15 -0
- package/dist/apps/shared/components/mail/reading/conversationPrint.js +69 -0
- package/dist/apps/shared/components/mail/reading/messageExport.js +1 -1
- package/dist/apps/shared/components/mail/reading/printMessage.d.ts +9 -3
- package/dist/apps/shared/components/mail/reading/printMessage.js +33 -6
- package/dist/apps/shared/components/mail/reading/useMessageActions.d.ts +1 -1
- package/dist/apps/shared/components/mail/reading/useMessageActions.js +18 -16
- package/dist/apps/shared/components/mail/unreadStyle.d.ts +1 -1
- package/dist/apps/shared/components/mail/verificationSeals.d.ts +27 -6
- package/dist/apps/shared/components/mail/verificationSeals.js +15 -11
- package/dist/apps/shared/components/mail/writableMailboxes.d.ts +8 -3
- package/dist/apps/shared/components/mail/writableMailboxes.js +12 -6
- package/dist/apps/shared/components/rules/RuleBuilder.js +1 -1
- package/dist/apps/shared/components/settings/SigningCertificateCard.d.ts +1 -1
- package/dist/apps/shared/components/settings/SigningCertificateCard.js +3 -3
- package/dist/apps/shared/components/settings/layout/SettingsShell.d.ts +1 -1
- package/dist/apps/shared/components/settings/layout/SettingsShell.js +8 -6
- package/dist/apps/shared/components/sharing/PrincipalListField.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalPicker.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalPicker.js +1 -1
- package/dist/apps/shared/components/sharing/PrincipalResolver.d.ts +1 -1
- package/dist/apps/shared/components/sharing/PrincipalResolver.js +3 -3
- package/dist/apps/shared/components/tasks/TasksSidebar.d.ts +1 -1
- package/dist/apps/shared/components/tasks/TasksSidebar.js +7 -5
- package/dist/apps/shared/components/tasks/layout/TasksShell.d.ts +1 -1
- package/dist/apps/shared/components/tasks/layout/TasksShell.js +9 -7
- package/dist/apps/shared/keyboard/ShortcutsDialog.js +1 -1
- package/dist/apps/shared/keyboard/keymap.d.ts +6 -0
- package/dist/apps/shared/keyboard/keymap.js +1 -0
- package/dist/apps/shared/mail/decryptedMessages.d.ts +27 -0
- package/dist/apps/shared/mail/decryptedMessages.js +97 -0
- package/dist/apps/shared/mail/findWellKnownFolderUid.d.ts +5 -3
- package/dist/apps/shared/mail/findWellKnownFolderUid.js +5 -4
- package/dist/apps/shared/mail/folderCounts.d.ts +1 -1
- package/dist/apps/shared/mail/folderCounts.js +6 -4
- package/dist/apps/shared/mail/folderOfType.d.ts +3 -2
- package/dist/apps/shared/mail/folderOfType.js +4 -4
- package/dist/apps/shared/mail/folderTree.d.ts +1 -1
- package/dist/apps/shared/mail/listSnapshots.d.ts +2 -2
- package/dist/apps/shared/mail/messageReadState.d.ts +4 -3
- package/dist/apps/shared/mail/messageReadState.js +5 -5
- package/dist/apps/shared/mail/newMailNotifications.d.ts +1 -1
- package/dist/apps/shared/mail/newMailNotifications.js +1 -1
- package/dist/apps/shared/mail/outbox/composeBridge.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/outboxState.d.ts +1 -1
- package/dist/apps/shared/mail/outbox/outgoingReplies.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/sendDecision.d.ts +2 -2
- package/dist/apps/shared/mail/outbox/sendDecision.js +1 -1
- package/dist/apps/shared/mail/outbox/sendJob.d.ts +10 -6
- package/dist/apps/shared/mail/outbox/sendJob.js +39 -35
- package/dist/apps/shared/mail/outbox/sendOutcomes.d.ts +6 -3
- package/dist/apps/shared/mail/outbox/sendOutcomes.js +19 -15
- package/dist/apps/shared/mail/outbox/useOutboxStatus.js +5 -3
- package/dist/apps/shared/mail/permanentDelete.d.ts +4 -3
- package/dist/apps/shared/mail/permanentDelete.js +8 -8
- package/dist/apps/shared/mail/primaryMailbox.d.ts +1 -1
- package/dist/apps/shared/mail/primaryMailbox.js +1 -1
- package/dist/apps/shared/mail/reportNotices.d.ts +1 -1
- package/dist/apps/shared/mail/senderBlocking.d.ts +5 -4
- package/dist/apps/shared/mail/senderBlocking.js +19 -16
- package/dist/apps/shared/mail/useMailConnection.d.ts +1 -1
- package/dist/apps/shared/mail/useMailConnection.js +12 -10
- package/dist/apps/shared/mail/useMailLiveUpdates.d.ts +2 -2
- package/dist/apps/shared/mail/useMailLiveUpdates.js +2 -2
- package/dist/apps/shared/mail/useMailboxUpdateAccess.d.ts +3 -2
- package/dist/apps/shared/mail/useMailboxUpdateAccess.js +31 -10
- package/dist/apps/shared/mail/useMarkMessageRead.d.ts +1 -1
- package/dist/apps/shared/mail/useMarkMessageRead.js +5 -3
- package/dist/apps/shared/mail/useNewMailNotifications.d.ts +1 -1
- package/dist/apps/shared/mail/usePermanentDelete.d.ts +1 -1
- package/dist/apps/shared/mail/usePermanentDelete.js +4 -2
- package/dist/apps/shared/navigation/pageTitle.d.ts +1 -1
- package/dist/apps/shared/notifications/NotificationCenter.js +1 -1
- package/dist/apps/shared/notifications/NotificationHistoryDialog.js +2 -2
- package/dist/apps/shared/notifications/apiErrors.js +2 -2
- package/dist/apps/shared/notifications/pushStatus.js +1 -1
- package/dist/apps/shared/notifications/systemErrors.js +1 -1
- package/dist/apps/shared/search/LocalIndexLifecycle.d.ts +2 -2
- package/dist/apps/shared/search/LocalIndexLifecycle.js +15 -10
- package/dist/apps/shared/search/crossMailboxSearch.d.ts +1 -1
- package/dist/apps/shared/search/crossMailboxSearch.js +2 -2
- package/dist/apps/shared/search/localIndexBuilder.d.ts +4 -3
- package/dist/apps/shared/search/localIndexBuilder.js +15 -12
- package/dist/apps/shared/search/localIndexKey.js +1 -1
- package/dist/apps/shared/search/localIndexRpcClient.d.ts +43 -31
- package/dist/apps/shared/search/localIndexRpcClient.js +113 -20
- package/dist/apps/shared/search/localIndexTransport.d.ts +77 -0
- package/dist/apps/shared/search/localIndexTransport.js +1 -0
- package/dist/apps/shared/search/localIndexWorker.d.ts +1 -1
- package/dist/apps/shared/search/searchTier2.d.ts +3 -3
- package/dist/apps/shared/signing/enrollmentTracker.d.ts +1 -1
- package/dist/apps/shared/signing/enrollmentTracker.js +3 -3
- package/dist/apps/shared/signing/enrollmentView.d.ts +1 -1
- package/dist/apps/shared/signing/signingInfo.d.ts +1 -1
- package/dist/apps/shared/signing/signingInfo.js +1 -1
- package/dist/apps/shared/signing/useSigningEnrollmentWatcher.d.ts +1 -1
- package/dist/apps/shared/signing/useSigningEnrollmentWatcher.js +5 -3
- package/dist/apps/shared/styles/app.css +14 -23
- package/dist/apps/www/_layout.d.ts +1 -1
- package/dist/apps/www/_layout.js +1 -1
- package/dist/apps/www/calendar/index.d.ts +1 -1
- package/dist/apps/www/calendar/index.js +20 -18
- package/dist/apps/www/contacts/[uid].d.ts +1 -1
- package/dist/apps/www/contacts/[uid].js +8 -6
- package/dist/apps/www/contacts/index.d.ts +1 -1
- package/dist/apps/www/contacts/index.js +19 -17
- package/dist/apps/www/index.d.ts +1 -1
- package/dist/apps/www/index.js +64 -50
- package/dist/apps/www/messages/[uid].d.ts +1 -1
- package/dist/apps/www/messages/[uid].js +11 -9
- package/dist/apps/www/settings/appearance/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.d.ts +1 -1
- package/dist/apps/www/settings/auto-reply/index.js +6 -4
- package/dist/apps/www/settings/blocked-senders/index.d.ts +1 -1
- package/dist/apps/www/settings/blocked-senders/index.js +6 -4
- package/dist/apps/www/settings/encryption/index.d.ts +1 -1
- package/dist/apps/www/settings/encryption/index.js +31 -29
- package/dist/apps/www/settings/filters/[uid].d.ts +1 -1
- package/dist/apps/www/settings/filters/[uid].js +11 -9
- package/dist/apps/www/settings/filters/_mailFilterRuleConfig.d.ts +2 -2
- package/dist/apps/www/settings/filters/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/index.js +4 -4
- package/dist/apps/www/settings/filters/new/index.d.ts +1 -1
- package/dist/apps/www/settings/filters/new/index.js +10 -8
- package/dist/apps/www/settings/labels/index.d.ts +1 -1
- package/dist/apps/www/settings/labels/index.js +12 -10
- package/dist/apps/www/settings/privacy/index.d.ts +1 -1
- package/dist/apps/www/settings/privacy/index.js +18 -14
- package/dist/apps/www/settings/profile/index.d.ts +1 -1
- package/dist/apps/www/settings/profile/index.js +7 -5
- package/dist/apps/www/settings/read-receipts/index.d.ts +1 -1
- package/dist/apps/www/settings/read-receipts/index.js +5 -3
- package/dist/apps/www/settings/sharing/index.d.ts +1 -1
- package/dist/apps/www/settings/sharing/index.js +6 -6
- package/dist/apps/www/settings/signatures/[uid].d.ts +1 -1
- package/dist/apps/www/settings/signatures/[uid].js +5 -5
- package/dist/apps/www/settings/signatures/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/index.js +4 -4
- package/dist/apps/www/settings/signatures/new/index.d.ts +1 -1
- package/dist/apps/www/settings/signatures/new/index.js +4 -4
- package/dist/apps/www/settings/signatures/signatureDefaults.d.ts +1 -1
- package/dist/apps/www/settings/signatures/signatureDefaults.js +1 -1
- package/dist/apps/www/tasks/index.d.ts +1 -1
- package/dist/apps/www/tasks/index.js +17 -15
- package/dist/lib/admin/auditLogApi.d.ts +32 -0
- package/dist/lib/admin/auditLogApi.js +27 -0
- package/dist/lib/admin/distributionListsApi.d.ts +47 -0
- package/dist/lib/admin/distributionListsApi.js +34 -0
- package/dist/lib/admin/domainsApi.d.ts +75 -0
- package/dist/lib/admin/domainsApi.js +44 -0
- package/dist/lib/admin/escrowAccessRequestsApi.d.ts +79 -0
- package/dist/lib/admin/escrowAccessRequestsApi.js +46 -0
- package/dist/lib/admin/escrowAuditLogApi.d.ts +66 -0
- package/dist/lib/admin/escrowAuditLogApi.js +31 -0
- package/dist/lib/admin/escrowScopesApi.d.ts +78 -0
- package/dist/lib/admin/escrowScopesApi.js +50 -0
- package/dist/lib/admin/leftoverMailboxApi.d.ts +73 -0
- package/dist/lib/admin/leftoverMailboxApi.js +67 -0
- package/dist/lib/admin/mailboxPolicyApi.d.ts +27 -0
- package/dist/lib/admin/mailboxPolicyApi.js +21 -0
- package/dist/lib/admin/matterExportApi.d.ts +40 -0
- package/dist/lib/admin/matterExportApi.js +39 -0
- package/dist/lib/admin/matterSearchApi.d.ts +20 -0
- package/dist/lib/admin/matterSearchApi.js +27 -0
- package/dist/lib/admin/mattersApi.d.ts +56 -0
- package/dist/lib/admin/mattersApi.js +40 -0
- package/dist/lib/admin/pluginsApi.d.ts +265 -0
- package/dist/lib/admin/pluginsApi.js +102 -0
- package/dist/lib/admin/retentionPolicyApi.d.ts +32 -0
- package/dist/lib/admin/retentionPolicyApi.js +29 -0
- package/dist/lib/admin/setupApi.d.ts +23 -0
- package/dist/lib/admin/setupApi.js +26 -0
- package/dist/lib/admin/transportRulesApi.d.ts +66 -0
- package/dist/lib/admin/transportRulesApi.js +43 -0
- package/dist/lib/appearance/preferencesApi.d.ts +128 -0
- package/dist/lib/appearance/preferencesApi.js +257 -0
- package/dist/lib/auth/profileApi.d.ts +33 -0
- package/dist/lib/auth/profileApi.js +52 -0
- package/dist/lib/auth/session.d.ts +70 -0
- package/dist/lib/auth/session.js +210 -0
- package/dist/lib/branding/brandingApi.d.ts +47 -0
- package/dist/lib/branding/brandingApi.js +61 -0
- package/dist/lib/branding/useBranding.d.ts +23 -0
- package/dist/lib/branding/useBranding.js +65 -0
- package/dist/lib/calendar/calendarApi.d.ts +230 -0
- package/dist/lib/calendar/calendarApi.js +106 -0
- package/dist/lib/calendar/calendarColors.d.ts +18 -0
- package/dist/lib/calendar/calendarColors.js +39 -0
- package/dist/lib/calendar/calendarDragIds.d.ts +42 -0
- package/dist/lib/calendar/calendarDragIds.js +92 -0
- package/dist/lib/calendar/calendarMutations.d.ts +68 -0
- package/dist/lib/calendar/calendarMutations.js +190 -0
- package/dist/lib/calendar/eventDescription.d.ts +43 -0
- package/dist/lib/calendar/eventDescription.js +195 -0
- package/dist/lib/calendar/freeBusyApi.d.ts +100 -0
- package/dist/lib/calendar/freeBusyApi.js +119 -0
- package/dist/lib/calendar/inviteApi.d.ts +121 -0
- package/dist/lib/calendar/inviteApi.js +54 -0
- package/dist/lib/calendar/recurrence.d.ts +60 -0
- package/dist/lib/calendar/recurrence.js +225 -0
- package/dist/lib/components/avatar/ContactAvatar.d.ts +8 -0
- package/dist/lib/components/avatar/ContactAvatar.js +26 -0
- package/dist/lib/components/buttons/Button.d.ts +9 -0
- package/dist/lib/components/buttons/Button.js +14 -0
- package/dist/lib/components/buttons/CopyButton.d.ts +18 -0
- package/dist/lib/components/buttons/CopyButton.js +14 -0
- package/dist/lib/components/feedback/Alert.d.ts +4 -0
- package/dist/lib/components/feedback/Alert.js +4 -0
- package/dist/lib/components/feedback/Skeleton.d.ts +21 -0
- package/dist/lib/components/feedback/Skeleton.js +14 -0
- package/dist/lib/components/forms/FormField.d.ts +8 -0
- package/dist/lib/components/forms/FormField.js +5 -0
- package/dist/lib/components/navigation/BottomTabBar.d.ts +27 -0
- package/dist/lib/components/navigation/BottomTabBar.js +32 -0
- package/dist/lib/components/overlays/Drawer.d.ts +20 -0
- package/dist/lib/components/overlays/Drawer.js +27 -0
- package/dist/lib/components/overlays/Modal.d.ts +17 -0
- package/dist/lib/components/overlays/Modal.js +25 -0
- package/dist/lib/components/overlays/PopoverPortal.d.ts +23 -0
- package/dist/lib/components/overlays/PopoverPortal.js +53 -0
- package/dist/lib/components/overlays/overlayStack.d.ts +31 -0
- package/dist/lib/components/overlays/overlayStack.js +143 -0
- package/dist/lib/components/pickers/MiniDatePicker.d.ts +13 -0
- package/dist/lib/components/pickers/MiniDatePicker.js +42 -0
- package/dist/lib/contacts/contactsApi.d.ts +174 -0
- package/dist/lib/contacts/contactsApi.js +139 -0
- package/dist/lib/contacts/vcard.d.ts +23 -0
- package/dist/lib/contacts/vcard.js +179 -0
- package/dist/lib/crypto/composeSecurity.d.ts +67 -0
- package/dist/lib/crypto/composeSecurity.js +93 -0
- package/dist/lib/crypto/encoding.d.ts +9 -0
- package/dist/lib/crypto/encoding.js +32 -0
- package/dist/lib/crypto/escrowKeys.d.ts +25 -0
- package/dist/lib/crypto/escrowKeys.js +59 -0
- package/dist/lib/crypto/idleTimeout.d.ts +16 -0
- package/dist/lib/crypto/idleTimeout.js +47 -0
- package/dist/lib/crypto/keySession.d.ts +159 -0
- package/dist/lib/crypto/keySession.js +367 -0
- package/dist/lib/crypto/keys.d.ts +50 -0
- package/dist/lib/crypto/keys.js +89 -0
- package/dist/lib/crypto/keyvaultApi.d.ts +394 -0
- package/dist/lib/crypto/keyvaultApi.js +350 -0
- package/dist/lib/crypto/masterKey.d.ts +59 -0
- package/dist/lib/crypto/masterKey.js +104 -0
- package/dist/lib/crypto/masterKeyWraps.d.ts +108 -0
- package/dist/lib/crypto/masterKeyWraps.js +228 -0
- package/dist/lib/crypto/messageSecurity.d.ts +248 -0
- package/dist/lib/crypto/messageSecurity.js +367 -0
- package/dist/lib/crypto/mime.d.ts +143 -0
- package/dist/lib/crypto/mime.js +504 -0
- package/dist/lib/crypto/passkeyUnlock.d.ts +20 -0
- package/dist/lib/crypto/passkeyUnlock.js +79 -0
- package/dist/lib/crypto/passwordUnlock.d.ts +39 -0
- package/dist/lib/crypto/passwordUnlock.js +73 -0
- package/dist/lib/crypto/recoveryCode.d.ts +28 -0
- package/dist/lib/crypto/recoveryCode.js +86 -0
- package/dist/lib/crypto/signingProviderApi.d.ts +95 -0
- package/dist/lib/crypto/signingProviderApi.js +60 -0
- package/dist/lib/crypto/smime.d.ts +128 -0
- package/dist/lib/crypto/smime.js +402 -0
- package/dist/lib/crypto/smimeMessage.d.ts +132 -0
- package/dist/lib/crypto/smimeMessage.js +341 -0
- package/dist/lib/crypto/useIdleKeyTimeout.d.ts +10 -0
- package/dist/lib/crypto/useIdleKeyTimeout.js +163 -0
- package/dist/lib/crypto/verificationSeal.d.ts +56 -0
- package/dist/lib/crypto/verificationSeal.js +220 -0
- package/dist/lib/mail/compose/composeQuoting.d.ts +88 -0
- package/dist/lib/mail/compose/composeQuoting.js +204 -0
- package/dist/lib/mail/compose/emojiData.d.ts +9 -0
- package/dist/lib/mail/compose/emojiData.js +18 -0
- package/dist/lib/mail/compose/giphyApi.d.ts +17 -0
- package/dist/lib/mail/compose/giphyApi.js +20 -0
- package/dist/lib/mail/conversationsApi.d.ts +80 -0
- package/dist/lib/mail/conversationsApi.js +44 -0
- package/dist/lib/mail/dataExportApi.d.ts +50 -0
- package/dist/lib/mail/dataExportApi.js +40 -0
- package/dist/lib/mail/directoryApi.d.ts +49 -0
- package/dist/lib/mail/directoryApi.js +101 -0
- package/dist/lib/mail/erasureRequestApi.d.ts +45 -0
- package/dist/lib/mail/erasureRequestApi.js +43 -0
- package/dist/lib/mail/flaggedMessages.d.ts +22 -0
- package/dist/lib/mail/flaggedMessages.js +73 -0
- package/dist/lib/mail/focusedInboxOverridesApi.d.ts +37 -0
- package/dist/lib/mail/focusedInboxOverridesApi.js +34 -0
- package/dist/lib/mail/labelsApi.d.ts +47 -0
- package/dist/lib/mail/labelsApi.js +38 -0
- package/dist/lib/mail/mailAddress.d.ts +27 -0
- package/dist/lib/mail/mailAddress.js +54 -0
- package/dist/lib/mail/mailApi.d.ts +850 -0
- package/dist/lib/mail/mailApi.js +602 -0
- package/dist/lib/mail/mailDetailHooks.d.ts +10 -0
- package/dist/lib/mail/mailDetailHooks.js +53 -0
- package/dist/lib/mail/mailFilterRulesApi.d.ts +76 -0
- package/dist/lib/mail/mailFilterRulesApi.js +45 -0
- package/dist/lib/mail/mailSignaturesApi.d.ts +49 -0
- package/dist/lib/mail/mailSignaturesApi.js +42 -0
- package/dist/lib/mail/mailboxAccessApi.d.ts +74 -0
- package/dist/lib/mail/mailboxAccessApi.js +56 -0
- package/dist/lib/mail/mailboxImportApi.d.ts +53 -0
- package/dist/lib/mail/mailboxImportApi.js +51 -0
- package/dist/lib/mail/messageBodySanitizer.d.ts +16 -0
- package/dist/lib/mail/messageBodySanitizer.js +118 -0
- package/dist/lib/mail/pushClient.d.ts +106 -0
- package/dist/lib/mail/pushClient.js +317 -0
- package/dist/lib/mail/sendEvents.d.ts +33 -0
- package/dist/lib/mail/sendEvents.js +44 -0
- package/dist/lib/mail/sendFailure.d.ts +16 -0
- package/dist/lib/mail/sendFailure.js +86 -0
- package/dist/lib/mail/senderListsApi.d.ts +69 -0
- package/dist/lib/mail/senderListsApi.js +126 -0
- package/dist/lib/search/queryGrammar.d.ts +51 -0
- package/dist/lib/search/queryGrammar.js +111 -0
- package/dist/lib/search/searchApi.d.ts +100 -0
- package/dist/lib/search/searchApi.js +107 -0
- package/dist/lib/search/searchScoring.d.ts +34 -0
- package/dist/lib/search/searchScoring.js +44 -0
- package/dist/lib/search/searchTier3.d.ts +64 -0
- package/dist/lib/search/searchTier3.js +335 -0
- package/dist/lib/tasks/tasksApi.d.ts +85 -0
- package/dist/lib/tasks/tasksApi.js +55 -0
- package/dist/lib/util/api.d.ts +160 -0
- package/dist/lib/util/api.js +251 -0
- package/dist/lib/util/apiClientContext.d.ts +7 -0
- package/dist/lib/util/apiClientContext.js +32 -0
- package/dist/lib/util/apiQuery.d.ts +32 -0
- package/dist/lib/util/apiQuery.js +42 -0
- package/dist/lib/util/clipboard.d.ts +7 -0
- package/dist/lib/util/clipboard.js +56 -0
- package/dist/lib/util/dateInput.d.ts +6 -0
- package/dist/lib/util/dateInput.js +14 -0
- package/dist/lib/util/timeZone.d.ts +12 -0
- package/dist/lib/util/timeZone.js +32 -0
- package/dist/lib/util/useCopyToClipboard.d.ts +12 -0
- package/dist/lib/util/useCopyToClipboard.js +34 -0
- package/dist/lib/util/useIsMobile.d.ts +10 -0
- package/dist/lib/util/useIsMobile.js +29 -0
- package/dist/lib/videoconf/videoMeetingsApi.d.ts +116 -0
- package/dist/lib/videoconf/videoMeetingsApi.js +49 -0
- package/lib/admin/auditLogApi.ts +48 -0
- package/lib/admin/distributionListsApi.ts +77 -0
- package/lib/admin/domainsApi.ts +113 -0
- package/lib/admin/escrowAccessRequestsApi.ts +110 -0
- package/lib/admin/escrowAuditLogApi.ts +101 -0
- package/lib/admin/escrowScopesApi.ts +112 -0
- package/lib/admin/leftoverMailboxApi.ts +120 -0
- package/lib/admin/mailboxPolicyApi.ts +38 -0
- package/lib/admin/matterExportApi.ts +62 -0
- package/lib/admin/matterSearchApi.ts +35 -0
- package/lib/admin/mattersApi.ts +86 -0
- package/lib/admin/pluginsApi.ts +339 -0
- package/lib/admin/retentionPolicyApi.ts +46 -0
- package/lib/admin/setupApi.ts +40 -0
- package/lib/admin/transportRulesApi.ts +106 -0
- package/lib/appearance/preferencesApi.ts +335 -0
- package/lib/auth/profileApi.ts +77 -0
- package/lib/auth/session.ts +238 -0
- package/lib/branding/brandingApi.ts +97 -0
- package/lib/branding/useBranding.ts +81 -0
- package/lib/calendar/calendarApi.ts +309 -0
- package/lib/calendar/calendarColors.ts +45 -0
- package/lib/calendar/calendarDragIds.ts +112 -0
- package/lib/calendar/calendarMutations.ts +236 -0
- package/lib/calendar/eventDescription.ts +211 -0
- package/lib/calendar/freeBusyApi.ts +197 -0
- package/lib/calendar/inviteApi.ts +154 -0
- package/lib/calendar/recurrence.ts +285 -0
- package/lib/components/avatar/ContactAvatar.tsx +47 -0
- package/lib/components/buttons/Button.tsx +40 -0
- package/lib/components/buttons/CopyButton.tsx +45 -0
- package/lib/components/feedback/Alert.tsx +13 -0
- package/lib/components/feedback/Skeleton.tsx +38 -0
- package/lib/components/forms/FormField.tsx +23 -0
- package/lib/components/navigation/BottomTabBar.tsx +66 -0
- package/lib/components/overlays/Drawer.tsx +72 -0
- package/lib/components/overlays/Modal.tsx +64 -0
- package/lib/components/overlays/PopoverPortal.tsx +74 -0
- package/lib/components/overlays/overlayStack.ts +165 -0
- package/lib/components/pickers/MiniDatePicker.tsx +90 -0
- package/lib/contacts/contactsApi.ts +289 -0
- package/lib/contacts/vcard.ts +197 -0
- package/lib/crypto/composeSecurity.ts +140 -0
- package/lib/crypto/encoding.ts +36 -0
- package/lib/crypto/escrowKeys.ts +74 -0
- package/lib/crypto/idleTimeout.ts +49 -0
- package/lib/crypto/keySession.ts +483 -0
- package/lib/crypto/keys.ts +105 -0
- package/lib/crypto/keyvaultApi.ts +674 -0
- package/lib/crypto/masterKey.ts +134 -0
- package/lib/crypto/masterKeyWraps.ts +269 -0
- package/lib/crypto/messageSecurity.ts +600 -0
- package/lib/crypto/mime.ts +568 -0
- package/lib/crypto/passkeyUnlock.ts +103 -0
- package/lib/crypto/passwordUnlock.ts +98 -0
- package/lib/crypto/recoveryCode.ts +93 -0
- package/lib/crypto/signingProviderApi.ts +135 -0
- package/lib/crypto/smime.ts +459 -0
- package/lib/crypto/smimeMessage.ts +491 -0
- package/lib/crypto/useIdleKeyTimeout.ts +176 -0
- package/lib/crypto/verificationSeal.ts +288 -0
- package/lib/mail/compose/composeQuoting.ts +243 -0
- package/lib/mail/compose/emojiData.ts +34 -0
- package/lib/mail/compose/giphyApi.ts +31 -0
- package/lib/mail/conversationsApi.ts +123 -0
- package/lib/mail/dataExportApi.ts +73 -0
- package/lib/mail/directoryApi.ts +161 -0
- package/lib/mail/erasureRequestApi.ts +71 -0
- package/lib/mail/flaggedMessages.ts +80 -0
- package/lib/mail/focusedInboxOverridesApi.ts +64 -0
- package/lib/mail/labelsApi.ts +71 -0
- package/lib/mail/mailAddress.ts +76 -0
- package/lib/mail/mailApi.ts +1286 -0
- package/lib/mail/mailDetailHooks.ts +57 -0
- package/lib/mail/mailFilterRulesApi.ts +116 -0
- package/lib/mail/mailSignaturesApi.ts +84 -0
- package/lib/mail/mailboxAccessApi.ts +106 -0
- package/lib/mail/mailboxImportApi.ts +87 -0
- package/lib/mail/messageBodySanitizer.ts +129 -0
- package/lib/mail/pushClient.ts +375 -0
- package/lib/mail/sendEvents.ts +72 -0
- package/lib/mail/sendFailure.ts +98 -0
- package/lib/mail/senderListsApi.ts +161 -0
- package/lib/search/queryGrammar.ts +179 -0
- package/lib/search/searchApi.ts +199 -0
- package/lib/search/searchScoring.ts +46 -0
- package/lib/search/searchTier3.ts +406 -0
- package/lib/tasks/tasksApi.ts +128 -0
- package/lib/util/api.ts +318 -0
- package/lib/util/apiClientContext.ts +35 -0
- package/lib/util/apiQuery.ts +61 -0
- package/lib/util/clipboard.ts +55 -0
- package/lib/util/dateInput.ts +15 -0
- package/lib/util/timeZone.ts +33 -0
- package/lib/util/useCopyToClipboard.ts +48 -0
- package/lib/util/useIsMobile.ts +34 -0
- package/lib/videoconf/videoMeetingsApi.ts +144 -0
- package/package.json +10 -4
|
@@ -5,24 +5,25 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { addMasterKeyWrap, cancelSignEnrollment, findActivePublicKey, getCurrentSignEnrollment, getEscrowInfo, getKeyVault, rekey, removeMasterKeyWrap, startSignEnrollment, } from "
|
|
10
|
-
import { ENCRYPTION_PRIVATE_KEY_AAD_PURPOSE, SIGNING_PRIVATE_KEY_AAD_PURPOSE, destroyUnlockedKeys, getUnlockedKeys, unlockWithPassword, } from "
|
|
11
|
-
import { IDLE_TIMEOUT_OPTIONS_MINUTES, getIdleTimeoutMinutes, setIdleTimeoutMinutes } from "
|
|
8
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
9
|
+
import { addMasterKeyWrap, cancelSignEnrollment, findActivePublicKey, getCurrentSignEnrollment, getEscrowInfo, getKeyVault, rekey, removeMasterKeyWrap, startSignEnrollment, } from "../../../../lib/crypto/keyvaultApi.js";
|
|
10
|
+
import { ENCRYPTION_PRIVATE_KEY_AAD_PURPOSE, SIGNING_PRIVATE_KEY_AAD_PURPOSE, destroyUnlockedKeys, getUnlockedKeys, unlockWithPassword, } from "../../../../lib/crypto/keySession.js";
|
|
11
|
+
import { IDLE_TIMEOUT_OPTIONS_MINUTES, getIdleTimeoutMinutes, setIdleTimeoutMinutes } from "../../../../lib/crypto/idleTimeout.js";
|
|
12
12
|
import { LOCAL_INDEX_SIZE_OPTIONS, getDefaultLocalIndexByteBudget, getLocalIndexByteBudget, setLocalIndexByteBudget, } from "../../../shared/search/localIndexSizePreference.js";
|
|
13
|
-
import { fromBase64 } from "
|
|
14
|
-
import { KeysLockedError, buildAad, generateMasterKey, openWithKey, sealWithKey } from "
|
|
15
|
-
import { buildEscrowWrap, buildPasswordWrap, buildRecoveryWraps } from "
|
|
16
|
-
import { exportPrivateKeyPkcs8, generateKeyPairWithCsr } from "
|
|
17
|
-
import { getMailbox } from "
|
|
13
|
+
import { fromBase64 } from "../../../../lib/crypto/encoding.js";
|
|
14
|
+
import { KeysLockedError, buildAad, generateMasterKey, openWithKey, sealWithKey } from "../../../../lib/crypto/masterKey.js";
|
|
15
|
+
import { buildEscrowWrap, buildPasswordWrap, buildRecoveryWraps } from "../../../../lib/crypto/masterKeyWraps.js";
|
|
16
|
+
import { exportPrivateKeyPkcs8, generateKeyPairWithCsr } from "../../../../lib/crypto/keys.js";
|
|
17
|
+
import { getMailbox } from "../../../../lib/mail/mailApi.js";
|
|
18
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
18
19
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
19
20
|
import KeyEnrollmentGate from "../../../shared/components/layout/KeyEnrollmentGate.js";
|
|
20
21
|
import { useUnlockPrompt } from "../../../shared/components/layout/UnlockPromptProvider.js";
|
|
21
22
|
import { destroyLocalIndex } from "../../../shared/search/localIndexRpcClient.js";
|
|
22
23
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
23
|
-
import Alert from "
|
|
24
|
-
import Button from "
|
|
25
|
-
import Modal from "
|
|
24
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
25
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
26
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
26
27
|
import SigningCertificateCard from "../../../shared/components/settings/SigningCertificateCard.js";
|
|
27
28
|
import { readStoredSignEnrollment, storeSignEnrollment } from "../../../shared/signing/enrollmentStorage.js";
|
|
28
29
|
import { checkEnrollmentNow, forgetEnrollment, recordEnrollmentResult, useEnrollmentSnapshot, watchCurrentEnrollment, watchEnrollment, } from "../../../shared/signing/enrollmentTracker.js";
|
|
@@ -170,6 +171,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
170
171
|
const { mailboxUid, mailboxes } = useSettingsShell();
|
|
171
172
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid);
|
|
172
173
|
const { requestUnlock } = useUnlockPrompt();
|
|
174
|
+
const client = useApiClient();
|
|
173
175
|
const [vault, setVault] = useState(null);
|
|
174
176
|
const [loadError, setLoadError] = useState(null);
|
|
175
177
|
const [removingMethod, setRemovingMethod] = useState(null);
|
|
@@ -245,7 +247,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
245
247
|
*/
|
|
246
248
|
async function verifiedUnlockedKeys() {
|
|
247
249
|
const current = await currentUnlockedKeys();
|
|
248
|
-
const freshVault = await getKeyVault(mailboxUid);
|
|
250
|
+
const freshVault = await getKeyVault(mailboxUid, client);
|
|
249
251
|
if (!(await masterKeyOpensVault(mailboxUid, current.masterKey, freshVault))) {
|
|
250
252
|
throw new StaleSessionKeysError();
|
|
251
253
|
}
|
|
@@ -274,9 +276,9 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
274
276
|
try {
|
|
275
277
|
// Only reachable when mailbox.escrowScopeId is set (see the render guard below).
|
|
276
278
|
const { current } = await verifiedUnlockedKeys();
|
|
277
|
-
const escrowInfo = await getEscrowInfo(mailboxUid);
|
|
279
|
+
const escrowInfo = await getEscrowInfo(mailboxUid, client);
|
|
278
280
|
const wrap = await buildEscrowWrap(current.masterKey, escrowInfo.escrowScopeId, fromBase64(escrowInfo.publicKey.publicKey));
|
|
279
|
-
await addMasterKeyWrap(mailboxUid, wrap);
|
|
281
|
+
await addMasterKeyWrap(mailboxUid, wrap, undefined, client);
|
|
280
282
|
await loadVault();
|
|
281
283
|
}
|
|
282
284
|
catch (err) {
|
|
@@ -297,7 +299,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
297
299
|
release = watchEnrollment(mailboxUid, storedId);
|
|
298
300
|
}
|
|
299
301
|
else if (canManageKeys) {
|
|
300
|
-
getCurrentSignEnrollment(mailboxUid)
|
|
302
|
+
getCurrentSignEnrollment(mailboxUid, client)
|
|
301
303
|
.then((current) => {
|
|
302
304
|
if (!cancelled && current) {
|
|
303
305
|
if (current.status === "pending") {
|
|
@@ -340,7 +342,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
340
342
|
let timer;
|
|
341
343
|
let attempts = 0;
|
|
342
344
|
const refresh = () => {
|
|
343
|
-
getMailbox(mailboxUid)
|
|
345
|
+
getMailbox(mailboxUid, {}, client)
|
|
344
346
|
.then((refreshed) => {
|
|
345
347
|
if (cancelled) {
|
|
346
348
|
return;
|
|
@@ -365,7 +367,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
365
367
|
setCancelEnrollmentError(null);
|
|
366
368
|
setCancelingEnrollment(true);
|
|
367
369
|
try {
|
|
368
|
-
const result = await cancelSignEnrollment(mailboxUid, enrollmentId);
|
|
370
|
+
const result = await cancelSignEnrollment(mailboxUid, enrollmentId, client);
|
|
369
371
|
if (result.status === "pending") {
|
|
370
372
|
setCancelEnrollmentError("The enrollment couldn't be cancelled yet. Try again.");
|
|
371
373
|
}
|
|
@@ -408,7 +410,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
408
410
|
const { enrollmentId } = await startSignEnrollment(mailboxUid, {
|
|
409
411
|
csr: csrPem,
|
|
410
412
|
wrappedKey: { ciphertext: wrappedKeySealed.ciphertext, nonce: wrappedKeySealed.nonce, algorithm: "AES-256-GCM" },
|
|
411
|
-
});
|
|
413
|
+
}, client);
|
|
412
414
|
storeSignEnrollment(mailboxUid, enrollmentId);
|
|
413
415
|
// Followed from now on (and after this page is left): the server has just accepted it, so it is pending - no need to ask first.
|
|
414
416
|
watchEnrollment(mailboxUid, enrollmentId, { initial: { status: "pending" } });
|
|
@@ -431,7 +433,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
431
433
|
setLocalIndexByteBudgetState(bytes);
|
|
432
434
|
}
|
|
433
435
|
function loadVault() {
|
|
434
|
-
return getKeyVault(mailboxUid)
|
|
436
|
+
return getKeyVault(mailboxUid, client)
|
|
435
437
|
.then(setVault)
|
|
436
438
|
.catch((err) => setLoadError(err instanceof ApiRequestError ? err.message : "Could not load your key vault."));
|
|
437
439
|
}
|
|
@@ -456,7 +458,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
456
458
|
setRemovingMethod(key);
|
|
457
459
|
setActionError(null);
|
|
458
460
|
try {
|
|
459
|
-
await removeMasterKeyWrap(mailboxUid, wrap.method, wrap.methodId);
|
|
461
|
+
await removeMasterKeyWrap(mailboxUid, wrap.method, wrap.methodId, client);
|
|
460
462
|
await loadVault();
|
|
461
463
|
}
|
|
462
464
|
catch (err) {
|
|
@@ -484,7 +486,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
484
486
|
try {
|
|
485
487
|
const { current } = await verifiedUnlockedKeys();
|
|
486
488
|
const wrap = await buildPasswordWrap(mailboxUid, current.masterKey, newPassword);
|
|
487
|
-
await addMasterKeyWrap(mailboxUid, wrap);
|
|
489
|
+
await addMasterKeyWrap(mailboxUid, wrap, undefined, client);
|
|
488
490
|
setNewPassword("");
|
|
489
491
|
setConfirmNewPassword("");
|
|
490
492
|
await loadVault();
|
|
@@ -550,12 +552,12 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
550
552
|
if (free <= 0) {
|
|
551
553
|
// Guaranteed non-empty by the shortfall check above.
|
|
552
554
|
const old = pendingOld.shift();
|
|
553
|
-
await removeMasterKeyWrap(mailboxUid, "recovery", old.methodId);
|
|
555
|
+
await removeMasterKeyWrap(mailboxUid, "recovery", old.methodId, client);
|
|
554
556
|
removedForThis = old;
|
|
555
557
|
removedEarly++;
|
|
556
558
|
free++;
|
|
557
559
|
}
|
|
558
|
-
await addMasterKeyWrap(mailboxUid, { ...built.wraps[i], methodId: `recovery-${batch}-${i + 1}` });
|
|
560
|
+
await addMasterKeyWrap(mailboxUid, { ...built.wraps[i], methodId: `recovery-${batch}-${i + 1}` }, undefined, client);
|
|
559
561
|
free--;
|
|
560
562
|
savedCodes.push(built.codes[i]);
|
|
561
563
|
}
|
|
@@ -563,7 +565,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
563
565
|
addError = err;
|
|
564
566
|
if (removedForThis) {
|
|
565
567
|
try {
|
|
566
|
-
await addMasterKeyWrap(mailboxUid, removedForThis);
|
|
568
|
+
await addMasterKeyWrap(mailboxUid, removedForThis, undefined, client);
|
|
567
569
|
removedEarly--;
|
|
568
570
|
}
|
|
569
571
|
catch {
|
|
@@ -593,7 +595,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
593
595
|
let notRemoved = 0;
|
|
594
596
|
for (const wrap of pendingOld) {
|
|
595
597
|
try {
|
|
596
|
-
await removeMasterKeyWrap(mailboxUid, "recovery", wrap.methodId);
|
|
598
|
+
await removeMasterKeyWrap(mailboxUid, "recovery", wrap.methodId, client);
|
|
597
599
|
}
|
|
598
600
|
catch {
|
|
599
601
|
notRemoved++;
|
|
@@ -654,7 +656,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
654
656
|
let codes;
|
|
655
657
|
try {
|
|
656
658
|
const current = await currentUnlockedKeys();
|
|
657
|
-
const [freshVault, freshMailbox] = await Promise.all([getKeyVault(mailboxUid), getMailbox(mailboxUid)]);
|
|
659
|
+
const [freshVault, freshMailbox] = await Promise.all([getKeyVault(mailboxUid, client), getMailbox(mailboxUid, {}, client)]);
|
|
658
660
|
keys = freshMailbox.keys ?? [];
|
|
659
661
|
// A session key that opens nothing is stale (rotated elsewhere) rather than missing some keys.
|
|
660
662
|
if (!(await masterKeyOpensVault(mailboxUid, current.masterKey, freshVault))) {
|
|
@@ -673,7 +675,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
673
675
|
// rotating without it would end escrow coverage. restapi's own 409 stays the final word.
|
|
674
676
|
if (freshVault.masterKeyWraps.some((w) => w.method === "escrow")) {
|
|
675
677
|
try {
|
|
676
|
-
const escrowInfo = await getEscrowInfo(mailboxUid);
|
|
678
|
+
const escrowInfo = await getEscrowInfo(mailboxUid, client);
|
|
677
679
|
masterKeyWraps.push(await buildEscrowWrap(mk, escrowInfo.escrowScopeId, fromBase64(escrowInfo.publicKey.publicKey)));
|
|
678
680
|
}
|
|
679
681
|
catch (err) {
|
|
@@ -682,7 +684,7 @@ function EncryptionContent({ canManageKeys }) {
|
|
|
682
684
|
}
|
|
683
685
|
}
|
|
684
686
|
}
|
|
685
|
-
await rekey(mailboxUid, { wrappedKeys: rewrapped.wrappedKeys, masterKeyWraps, keys });
|
|
687
|
+
await rekey(mailboxUid, { wrappedKeys: rewrapped.wrappedKeys, masterKeyWraps, keys }, client);
|
|
686
688
|
}
|
|
687
689
|
catch (err) {
|
|
688
690
|
if (err instanceof UncoveredVaultKeysError) {
|
|
@@ -9,5 +9,5 @@ declare function MailFilterDetailPage(props: MailFilterDetailPageProps): React.J
|
|
|
9
9
|
export default MailFilterDetailPage;
|
|
10
10
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
11
11
|
export declare const title: (props: {
|
|
12
|
-
branding?: Pick<import("
|
|
12
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
13
13
|
}) => string;
|
|
@@ -5,15 +5,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { listFolders } from "
|
|
10
|
-
import { getMailFilterRule, updateMailFilterRule, } from "
|
|
8
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
9
|
+
import { listFolders } from "../../../../lib/mail/mailApi.js";
|
|
10
|
+
import { getMailFilterRule, updateMailFilterRule, } from "../../../../lib/mail/mailFilterRulesApi.js";
|
|
11
11
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
12
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
12
13
|
import RuleBuilder, { hasConditions } from "../../../shared/components/rules/RuleBuilder.js";
|
|
13
14
|
import { MAIL_FILTER_CONDITION_FIELDS, buildMailFilterActionTypes } from "./_mailFilterRuleConfig.js";
|
|
14
|
-
import Alert from "
|
|
15
|
-
import Button from "
|
|
16
|
-
import FormField from "
|
|
15
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
16
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
17
|
+
import FormField from "../../../../lib/components/forms/FormField.js";
|
|
17
18
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
18
19
|
const INPUT_CLASS = "w-full text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
19
20
|
function MailFilterDetailPage(props) {
|
|
@@ -21,6 +22,7 @@ function MailFilterDetailPage(props) {
|
|
|
21
22
|
}
|
|
22
23
|
function MailFilterDetailContent({ uid }) {
|
|
23
24
|
const { mailboxUid } = useSettingsShell();
|
|
25
|
+
const client = useApiClient();
|
|
24
26
|
const [original, setOriginal] = useState(null);
|
|
25
27
|
const [name, setName] = useState("");
|
|
26
28
|
const [rule, setRule] = useState(null);
|
|
@@ -38,12 +40,12 @@ function MailFilterDetailContent({ uid }) {
|
|
|
38
40
|
if (!ruleMailboxUid) {
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
41
|
-
listFolders(ruleMailboxUid).then(setFolders).catch(() => setFolders([]));
|
|
43
|
+
listFolders(ruleMailboxUid, client).then(setFolders).catch(() => setFolders([]));
|
|
42
44
|
}, [ruleMailboxUid]);
|
|
43
45
|
useEffect(() => {
|
|
44
46
|
setLoading(true);
|
|
45
47
|
setError(null);
|
|
46
|
-
getMailFilterRule(uid)
|
|
48
|
+
getMailFilterRule(uid, client)
|
|
47
49
|
.then((loaded) => {
|
|
48
50
|
setOriginal(loaded);
|
|
49
51
|
if (loaded) {
|
|
@@ -83,7 +85,7 @@ function MailFilterDetailContent({ uid }) {
|
|
|
83
85
|
version: original.version,
|
|
84
86
|
name: name.trim(),
|
|
85
87
|
...rule,
|
|
86
|
-
});
|
|
88
|
+
}, client);
|
|
87
89
|
setOriginal(updated);
|
|
88
90
|
setSaved(true);
|
|
89
91
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Folder } from "
|
|
2
|
-
import { MailFilterAction } from "
|
|
1
|
+
import { Folder } from "../../../../lib/mail/mailApi.js";
|
|
2
|
+
import { MailFilterAction } from "../../../../lib/mail/mailFilterRulesApi.js";
|
|
3
3
|
import { ActionTypeDef, ConditionFieldDef } from "../../../shared/components/rules/RuleBuilder.js";
|
|
4
4
|
export declare const MAIL_FILTER_CONDITION_FIELDS: ConditionFieldDef[];
|
|
5
5
|
/**
|
|
@@ -5,5 +5,5 @@ declare function SettingsFiltersPage(props: SettingsFiltersPageProps): React.JSX
|
|
|
5
5
|
export default SettingsFiltersPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,11 +5,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { listMailFilterRules } from "
|
|
8
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
9
|
+
import { listMailFilterRules } from "../../../../lib/mail/mailFilterRulesApi.js";
|
|
10
10
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
11
|
-
import Alert from "
|
|
12
|
-
import Button from "
|
|
11
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
12
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
13
13
|
function SettingsFiltersPage(props) {
|
|
14
14
|
return (_jsx(SettingsShell, { ...props, active: "filters", children: _jsx(FiltersContent, {}) }));
|
|
15
15
|
}
|
|
@@ -5,5 +5,5 @@ declare function NewMailFilterPage(props: NewMailFilterPageProps): React.JSX.Ele
|
|
|
5
5
|
export default NewMailFilterPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -6,15 +6,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
import { pageTitle } from "../../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useNavigate } from "../../../../shared/navigation/index.js";
|
|
8
8
|
import { useEffect, useState } from "react";
|
|
9
|
-
import { ApiRequestError } from "
|
|
10
|
-
import { listFolders } from "
|
|
11
|
-
import { createMailFilterRule, } from "
|
|
9
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
10
|
+
import { listFolders } from "../../../../../lib/mail/mailApi.js";
|
|
11
|
+
import { createMailFilterRule, } from "../../../../../lib/mail/mailFilterRulesApi.js";
|
|
12
12
|
import SettingsShell, { useSettingsShell } from "../../../../shared/components/settings/layout/SettingsShell.js";
|
|
13
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
13
14
|
import RuleBuilder, { hasConditions } from "../../../../shared/components/rules/RuleBuilder.js";
|
|
14
15
|
import { MAIL_FILTER_CONDITION_FIELDS, buildMailFilterActionTypes } from "../_mailFilterRuleConfig.js";
|
|
15
|
-
import Alert from "
|
|
16
|
-
import Button from "
|
|
17
|
-
import FormField from "
|
|
16
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
17
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
18
|
+
import FormField from "../../../../../lib/components/forms/FormField.js";
|
|
18
19
|
import { notifyApiError } from "../../../../shared/notifications/apiErrors.js";
|
|
19
20
|
const INPUT_CLASS = "w-full text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
20
21
|
function NewMailFilterPage(props) {
|
|
@@ -40,6 +41,7 @@ function prefillFromSearch(search) {
|
|
|
40
41
|
function NewMailFilterForm() {
|
|
41
42
|
const navigate = useNavigate();
|
|
42
43
|
const { mailboxUid } = useSettingsShell();
|
|
44
|
+
const client = useApiClient();
|
|
43
45
|
// Read once, when the form opens, and what the reader then edits is theirs. From the browser's own location rather than the router's (which a shallow
|
|
44
46
|
// navigation could change under the form): this form is only mounted once the shell has fetched the mailbox, in the browser, so there is no
|
|
45
47
|
// server render for the two to disagree with.
|
|
@@ -60,7 +62,7 @@ function NewMailFilterForm() {
|
|
|
60
62
|
// `SettingsShell` only ever renders its children once `mailboxUid` has resolved — same established
|
|
61
63
|
// non-null pattern as `apps/www/settings/auto-reply/index.tsx`.
|
|
62
64
|
useEffect(() => {
|
|
63
|
-
listFolders(mailboxUid)
|
|
65
|
+
listFolders(mailboxUid, client)
|
|
64
66
|
.then(setFolders)
|
|
65
67
|
.catch((err) => setFolderError(err instanceof ApiRequestError ? err.message : "Could not load this mailbox's folders."));
|
|
66
68
|
}, [mailboxUid]);
|
|
@@ -78,7 +80,7 @@ function NewMailFilterForm() {
|
|
|
78
80
|
}
|
|
79
81
|
setSaving(true);
|
|
80
82
|
try {
|
|
81
|
-
const created = await createMailFilterRule({ mailboxUid: mailboxUid, name: name.trim(), ...rule });
|
|
83
|
+
const created = await createMailFilterRule({ mailboxUid: mailboxUid, name: name.trim(), ...rule }, client);
|
|
82
84
|
navigate(`/settings/filters/${encodeURIComponent(created.uid)}?mailboxUid=${encodeURIComponent(mailboxUid)}`);
|
|
83
85
|
}
|
|
84
86
|
catch (err) {
|
|
@@ -5,5 +5,5 @@ declare function SettingsLabelsPage(props: SettingsLabelsPageProps): React.JSX.E
|
|
|
5
5
|
export default SettingsLabelsPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,19 +5,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { createLabel, deleteLabel, listLabels, updateLabel } from "
|
|
8
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
9
|
+
import { createLabel, deleteLabel, listLabels, updateLabel } from "../../../../lib/mail/labelsApi.js";
|
|
10
10
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
11
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
12
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
13
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
14
|
+
import FormField from "../../../../lib/components/forms/FormField.js";
|
|
15
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
15
16
|
function SettingsLabelsPage(props) {
|
|
16
17
|
return (_jsx(SettingsShell, { ...props, active: "labels", children: _jsx(LabelsContent, {}) }));
|
|
17
18
|
}
|
|
18
19
|
const DEFAULT_COLOR = "#6366f1";
|
|
19
20
|
function LabelsContent() {
|
|
20
21
|
const { mailboxUid } = useSettingsShell();
|
|
22
|
+
const client = useApiClient();
|
|
21
23
|
const [labels, setLabels] = useState([]);
|
|
22
24
|
const [loading, setLoading] = useState(true);
|
|
23
25
|
const [error, setError] = useState(null);
|
|
@@ -34,7 +36,7 @@ function LabelsContent() {
|
|
|
34
36
|
// `SettingsShell` only ever renders its children once `mailboxUid` has resolved — same established
|
|
35
37
|
// non-null pattern as `apps/www/settings/auto-reply/index.tsx`.
|
|
36
38
|
useEffect(() => {
|
|
37
|
-
listLabels(mailboxUid)
|
|
39
|
+
listLabels(mailboxUid, {}, client)
|
|
38
40
|
.then(setLabels)
|
|
39
41
|
.catch((err) => setError(err instanceof ApiRequestError ? err.message : "Could not load labels."))
|
|
40
42
|
.finally(() => setLoading(false));
|
|
@@ -58,11 +60,11 @@ function LabelsContent() {
|
|
|
58
60
|
setFormError(null);
|
|
59
61
|
try {
|
|
60
62
|
if (editing) {
|
|
61
|
-
const updated = await updateLabel({ uid: editing.uid, version: editing.version, name: formName, color: formColor });
|
|
63
|
+
const updated = await updateLabel({ uid: editing.uid, version: editing.version, name: formName, color: formColor }, client);
|
|
62
64
|
setLabels((prev) => prev.map((l) => (l.uid === updated.uid ? updated : l)));
|
|
63
65
|
}
|
|
64
66
|
else {
|
|
65
|
-
const created = await createLabel({ mailboxUid: mailboxUid, name: formName, color: formColor });
|
|
67
|
+
const created = await createLabel({ mailboxUid: mailboxUid, name: formName, color: formColor }, client);
|
|
66
68
|
setLabels((prev) => [...prev, created]);
|
|
67
69
|
}
|
|
68
70
|
setFormOpen(false);
|
|
@@ -78,7 +80,7 @@ function LabelsContent() {
|
|
|
78
80
|
setDeleteBusy(true);
|
|
79
81
|
setDeleteError(null);
|
|
80
82
|
try {
|
|
81
|
-
await deleteLabel(deleting.uid, deleting.version);
|
|
83
|
+
await deleteLabel(deleting.uid, deleting.version, client);
|
|
82
84
|
setLabels((prev) => prev.filter((l) => l.uid !== deleting.uid));
|
|
83
85
|
setDeleting(null);
|
|
84
86
|
}
|
|
@@ -5,5 +5,5 @@ declare function SettingsPrivacyPage(props: SettingsPrivacyPageProps): React.JSX
|
|
|
5
5
|
export default SettingsPrivacyPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,15 +5,16 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useEffect, useRef, useState } from "react";
|
|
8
|
-
import { ApiRequestError } from "
|
|
9
|
-
import { createExportRequest, exportRequestDownloadUrl, listExportRequests, } from "
|
|
10
|
-
import { listImportRequests, uploadMailboxImport, } from "
|
|
11
|
-
import { createErasureRequest, listErasureRequests, } from "
|
|
12
|
-
import { listFolders } from "
|
|
8
|
+
import { ApiRequestError } from "../../../../lib/util/api.js";
|
|
9
|
+
import { createExportRequest, exportRequestDownloadUrl, listExportRequests, } from "../../../../lib/mail/dataExportApi.js";
|
|
10
|
+
import { listImportRequests, uploadMailboxImport, } from "../../../../lib/mail/mailboxImportApi.js";
|
|
11
|
+
import { createErasureRequest, listErasureRequests, } from "../../../../lib/mail/erasureRequestApi.js";
|
|
12
|
+
import { listFolders } from "../../../../lib/mail/mailApi.js";
|
|
13
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
13
14
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
14
|
-
import Alert from "
|
|
15
|
-
import Button from "
|
|
16
|
-
import Modal from "
|
|
15
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
16
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
17
|
+
import Modal from "../../../../lib/components/overlays/Modal.js";
|
|
17
18
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
18
19
|
const NON_MAIL_FOLDER_TYPES = new Set(["calendar", "contacts", "tasks", "notes"]);
|
|
19
20
|
function importFormatFromFilename(filename) {
|
|
@@ -65,6 +66,7 @@ function OwnMailboxOnlyNotice({ ownedMailboxCount, ownMailboxLabel }) {
|
|
|
65
66
|
return (_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold mb-2", children: "Export, import, or delete my data" }), _jsxs("p", { className: "text-xs text-text-muted", children: ["Exporting your data, importing mail, and deleting your account only apply to your own mailbox, not one shared with you. ", detail] })] }));
|
|
66
67
|
}
|
|
67
68
|
function ExportSection({ mailboxUid, mailboxLabel }) {
|
|
69
|
+
const client = useApiClient();
|
|
68
70
|
const [requests, setRequests] = useState([]);
|
|
69
71
|
const [loading, setLoading] = useState(true);
|
|
70
72
|
const [loadError, setLoadError] = useState(null);
|
|
@@ -76,7 +78,7 @@ function ExportSection({ mailboxUid, mailboxLabel }) {
|
|
|
76
78
|
const loadSeq = useRef(0);
|
|
77
79
|
function loadRequests() {
|
|
78
80
|
const seq = ++loadSeq.current;
|
|
79
|
-
return listExportRequests()
|
|
81
|
+
return listExportRequests({}, client)
|
|
80
82
|
.then((data) => {
|
|
81
83
|
if (seq === loadSeq.current) {
|
|
82
84
|
setRequests(data);
|
|
@@ -95,7 +97,7 @@ function ExportSection({ mailboxUid, mailboxLabel }) {
|
|
|
95
97
|
e.preventDefault();
|
|
96
98
|
setCreating(true);
|
|
97
99
|
try {
|
|
98
|
-
await createExportRequest({ format });
|
|
100
|
+
await createExportRequest({ format }, client);
|
|
99
101
|
await loadRequests();
|
|
100
102
|
}
|
|
101
103
|
catch (err) {
|
|
@@ -108,6 +110,7 @@ function ExportSection({ mailboxUid, mailboxLabel }) {
|
|
|
108
110
|
return (_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold mb-2", children: "Export my data" }), _jsxs("p", { className: "text-xs text-text-muted mb-3", children: ["Requests a copy of ", _jsx("strong", { children: mailboxLabel }), "\u2019s messages, contacts, calendar, tasks, and notes. This runs in the background and can take a few minutes \u2014 check back here for a download link once it\u2019s ready."] }), _jsxs("form", { onSubmit: handleCreate, className: "flex items-end gap-3 mb-5", children: [_jsxs("label", { className: "flex flex-col gap-1.5 text-sm", children: [_jsx("span", { className: "font-semibold", children: "Format" }), _jsxs("select", { "aria-label": "Export format", className: "text-sm border border-border rounded-sm py-1.5 px-2 bg-surface", value: format, onChange: (e) => setFormat(e.target.value), children: [_jsx("option", { value: "json", children: "JSON" }), _jsx("option", { value: "mbox", children: "Mbox" })] })] }), _jsx(Button, { type: "submit", variant: "secondary", className: "!w-auto", loading: creating, disabled: creating, children: "Request export" })] }), loadError && _jsx(Alert, { children: loadError }), loading ? (_jsx("p", { className: "text-sm text-text-muted", children: "Loading\u2026" })) : requests.length === 0 ? (_jsx("p", { className: "text-sm text-text-muted", children: "No export requests yet." })) : (_jsx("ul", { className: "flex flex-col gap-2", children: requests.map((request) => (_jsxs("li", { className: "flex items-center justify-between gap-3 text-sm py-1.5 px-3 bg-surface-alt rounded-sm", children: [_jsxs("span", { children: [request.format.toUpperCase(), " \u00B7 ", new Date(request.dateCreated).toLocaleString(), request.status === "failed" && request.errorMessage && (_jsxs("span", { className: "text-danger", children: [" \u2014 ", request.errorMessage] }))] }), _jsxs("span", { className: "flex items-center gap-3", children: [_jsx("span", { className: `text-xs font-bold uppercase tracking-wide py-0.5 px-2 rounded-pill ${statusBadgeClass(request.status)}`, children: statusLabel(request.status) }), request.status === "ready" && (_jsx("a", { href: exportRequestDownloadUrl(request.uid), className: "text-primary-dark hover:underline font-medium", children: "Download" }))] })] }, request.uid))) }))] }));
|
|
109
111
|
}
|
|
110
112
|
function ImportSection({ mailboxUid }) {
|
|
113
|
+
const client = useApiClient();
|
|
111
114
|
const [folders, setFolders] = useState([]);
|
|
112
115
|
const [targetFolderUid, setTargetFolderUid] = useState("");
|
|
113
116
|
const [foldersError, setFoldersError] = useState(null);
|
|
@@ -122,7 +125,7 @@ function ImportSection({ mailboxUid }) {
|
|
|
122
125
|
const loadSeq = useRef(0);
|
|
123
126
|
function loadRequests() {
|
|
124
127
|
const seq = ++loadSeq.current;
|
|
125
|
-
return listImportRequests()
|
|
128
|
+
return listImportRequests({}, client)
|
|
126
129
|
.then((data) => {
|
|
127
130
|
if (seq === loadSeq.current) {
|
|
128
131
|
setRequests(data);
|
|
@@ -138,7 +141,7 @@ function ImportSection({ mailboxUid }) {
|
|
|
138
141
|
// Only reachable once mailboxUid is resolved - SettingsShell never renders this page's children
|
|
139
142
|
// until then, the same invariant every other settings page in this codebase already relies on.
|
|
140
143
|
void Promise.all([
|
|
141
|
-
listFolders(mailboxUid)
|
|
144
|
+
listFolders(mailboxUid, client)
|
|
142
145
|
.then((all) => {
|
|
143
146
|
const mailFolders = all.filter((f) => !NON_MAIL_FOLDER_TYPES.has(f.type));
|
|
144
147
|
setFolders(mailFolders);
|
|
@@ -163,6 +166,7 @@ function ImportSection({ mailboxUid }) {
|
|
|
163
166
|
return (_jsxs("div", { children: [_jsx("h2", { className: "text-sm font-semibold mb-2", children: "Import mail" }), _jsx("p", { className: "text-xs text-text-muted mb-3", children: "Uploads an Mbox or PST archive and imports every message it contains into the folder you choose below. This runs in the background \u2014 check back here for its progress." }), folders.length > 0 && (_jsxs("label", { className: "flex flex-col gap-1.5 text-sm mb-3 max-w-xs", children: [_jsx("span", { className: "font-semibold", children: "Destination folder" }), _jsx("select", { "aria-label": "Destination folder", className: "text-sm border border-border rounded-sm py-1.5 px-2 bg-surface", value: targetFolderUid, onChange: (e) => setTargetFolderUid(e.target.value), children: folders.map((folder) => (_jsx("option", { value: folder.uid, children: folder.name }, folder.uid))) })] })), _jsx(Button, { type: "button", variant: "secondary", className: "!w-auto mb-3", loading: uploading, disabled: uploading || !targetFolderUid, onClick: () => fileInputRef.current?.click(), children: "Upload Mbox or PST file" }), _jsx("input", { ref: fileInputRef, type: "file", accept: ".mbox,.pst", "aria-label": "Upload mail archive", className: "hidden", onChange: handleFileChange }), foldersError && _jsx(Alert, { children: foldersError }), loadError && _jsx(Alert, { children: loadError }), loading ? (_jsx("p", { className: "text-sm text-text-muted", children: "Loading\u2026" })) : requests.length === 0 ? (_jsx("p", { className: "text-sm text-text-muted", children: "No import requests yet." })) : (_jsx("ul", { className: "flex flex-col gap-2", children: requests.map((request) => (_jsxs("li", { className: "flex items-center justify-between gap-3 text-sm py-1.5 px-3 bg-surface-alt rounded-sm", children: [_jsxs("span", { children: [request.format.toUpperCase(), " \u00B7 ", new Date(request.dateCreated).toLocaleString(), request.status === "completed" && (_jsxs("span", { className: "text-text-muted", children: [" ", "\u2014 ", request.importedCount ?? 0, " imported", request.failedCount ? `, ${request.failedCount} failed` : ""] })), request.status === "failed" && request.errorMessage && (_jsxs("span", { className: "text-danger", children: [" \u2014 ", request.errorMessage] }))] }), _jsx("span", { className: `text-xs font-bold uppercase tracking-wide py-0.5 px-2 rounded-pill ${statusBadgeClass(request.status)}`, children: statusLabel(request.status) })] }, request.uid))) }))] }));
|
|
164
167
|
}
|
|
165
168
|
function ErasureSection({ mailboxLabel }) {
|
|
169
|
+
const client = useApiClient();
|
|
166
170
|
const [requests, setRequests] = useState([]);
|
|
167
171
|
const [loading, setLoading] = useState(true);
|
|
168
172
|
const [loadError, setLoadError] = useState(null);
|
|
@@ -170,7 +174,7 @@ function ErasureSection({ mailboxLabel }) {
|
|
|
170
174
|
const [creating, setCreating] = useState(false);
|
|
171
175
|
const [createError, setCreateError] = useState(null);
|
|
172
176
|
function loadRequests() {
|
|
173
|
-
return listErasureRequests()
|
|
177
|
+
return listErasureRequests({}, client)
|
|
174
178
|
.then(setRequests)
|
|
175
179
|
.catch((err) => setLoadError(err instanceof ApiRequestError ? err.message : "Could not load your erasure requests."));
|
|
176
180
|
}
|
|
@@ -185,7 +189,7 @@ function ErasureSection({ mailboxLabel }) {
|
|
|
185
189
|
setCreateError(null);
|
|
186
190
|
setCreating(true);
|
|
187
191
|
try {
|
|
188
|
-
await createErasureRequest();
|
|
192
|
+
await createErasureRequest(client);
|
|
189
193
|
setConfirming(false);
|
|
190
194
|
await loadRequests();
|
|
191
195
|
}
|
|
@@ -5,5 +5,5 @@ declare function SettingsProfilePage(props: SettingsProfilePageProps): React.JSX
|
|
|
5
5
|
export default SettingsProfilePage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|
|
@@ -5,11 +5,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { pageTitle } from "../../../shared/navigation/pageTitle.js";
|
|
7
7
|
import { useMemo, useState } from "react";
|
|
8
|
-
import { freeBusyVisibilityOf, isSharedWithMe, updateMailbox } from "
|
|
9
|
-
import { DEFAULT_TIME_ZONE, deviceTimeZone, timeZoneOptions } from "
|
|
8
|
+
import { freeBusyVisibilityOf, isSharedWithMe, updateMailbox } from "../../../../lib/mail/mailApi.js";
|
|
9
|
+
import { DEFAULT_TIME_ZONE, deviceTimeZone, timeZoneOptions } from "../../../../lib/util/timeZone.js";
|
|
10
10
|
import SettingsShell, { useSettingsShell } from "../../../shared/components/settings/layout/SettingsShell.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
11
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
12
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
13
|
+
import FormField from "../../../../lib/components/forms/FormField.js";
|
|
13
14
|
import { notifyApiError } from "../../../shared/notifications/apiErrors.js";
|
|
14
15
|
const INPUT_CLASS = "w-full text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
15
16
|
const SELECT_CLASS = "text-sm py-2.5 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
@@ -47,6 +48,7 @@ function ProfileContent() {
|
|
|
47
48
|
// `SettingsShell` only ever renders its children once `mailboxes` has loaded and `mailboxUid` has
|
|
48
49
|
// resolved to one of them — same established non-null pattern as `apps/www/settings/auto-reply/index.tsx`.
|
|
49
50
|
const mailbox = mailboxes.find((mb) => mb.uid === mailboxUid);
|
|
51
|
+
const client = useApiClient();
|
|
50
52
|
const deviceZone = useMemo(() => deviceTimeZone(), []);
|
|
51
53
|
// What the server holds, which is what "changed" is measured against - moved along by each successful save.
|
|
52
54
|
const [savedName, setSavedName] = useState(mailbox.displayName);
|
|
@@ -92,7 +94,7 @@ function ProfileContent() {
|
|
|
92
94
|
...(nameChanged && { displayName: name }),
|
|
93
95
|
...(zoneChanged && { timezone }),
|
|
94
96
|
...(freeBusyChanged && { freeBusyVisibility: freeBusy }),
|
|
95
|
-
});
|
|
97
|
+
}, client);
|
|
96
98
|
setVersion(updated.version);
|
|
97
99
|
setSavedName(name);
|
|
98
100
|
setSavedZone(timezone);
|
|
@@ -5,5 +5,5 @@ declare function SettingsReadReceiptsPage(props: SettingsReadReceiptsPageProps):
|
|
|
5
5
|
export default SettingsReadReceiptsPage;
|
|
6
6
|
/** The tab's title: `Brand: Settings` (see `pageTitle()`). */
|
|
7
7
|
export declare const title: (props: {
|
|
8
|
-
branding?: Pick<import("
|
|
8
|
+
branding?: Pick<import("../../../../lib/branding/brandingApi.js").Branding, "title" | "companyName"> | null;
|
|
9
9
|
}) => string;
|