@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
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { createContext, useCallback, useEffect, useRef, useState } from "react";
|
|
6
|
-
import { ApiRequestError } from "
|
|
7
|
-
import {
|
|
6
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
7
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
8
|
+
import { listFolders, listMailboxes } from "../../../lib/mail/mailApi.js";
|
|
8
9
|
import { FOLDER_ORDER, MAIL_FOLDER_TYPES, isMailFolder, knownFolderUids, reconcileFolders, removeFolder, upsertFolder } from "./folderTree.js";
|
|
9
10
|
import { orderMailboxes } from "./primaryMailbox.js";
|
|
10
11
|
import { useMailLiveUpdates } from "./useMailLiveUpdates.js";
|
|
@@ -28,6 +29,7 @@ export const MailConnectionContext = createContext(null);
|
|
|
28
29
|
* state from `MailConnectionContext` when there is a frame, and runs this hook itself when there isn't (a page rendered outside the router).
|
|
29
30
|
*/
|
|
30
31
|
export function useMailConnection({ userUid, enabled, open }) {
|
|
32
|
+
const client = useApiClient();
|
|
31
33
|
const [status, setStatus] = useState("checking");
|
|
32
34
|
const [error, setError] = useState(null);
|
|
33
35
|
const [mailboxes, setMailboxes] = useState([]);
|
|
@@ -37,7 +39,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
37
39
|
if (!userUid || !enabled) {
|
|
38
40
|
return;
|
|
39
41
|
}
|
|
40
|
-
listMailboxes({ limit: MAILBOX_LIST_LIMIT })
|
|
42
|
+
listMailboxes({ limit: MAILBOX_LIST_LIMIT }, client)
|
|
41
43
|
.then((result) => {
|
|
42
44
|
// The caller's own mailbox first, then the others: every sidebar, picker and default below follows this order.
|
|
43
45
|
setMailboxes(orderMailboxes(result, userUid));
|
|
@@ -47,7 +49,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
47
49
|
setError(err instanceof ApiRequestError ? err.message : "Could not load your mailboxes.");
|
|
48
50
|
setStatus("error");
|
|
49
51
|
});
|
|
50
|
-
}, [userUid, enabled]);
|
|
52
|
+
}, [userUid, enabled, client]);
|
|
51
53
|
// Fans out one listFolders() call per accessible mailbox in parallel - each call catches its own failure into a MailboxFolders.error
|
|
52
54
|
// rather than letting Promise.all reject, so one mailbox's fetch failure renders that section's own inline Alert instead of blanking out
|
|
53
55
|
// every other mailbox's folder tree.
|
|
@@ -60,7 +62,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
60
62
|
return;
|
|
61
63
|
}
|
|
62
64
|
setFoldersLoading(true);
|
|
63
|
-
void Promise.all(mailboxes.map((mailbox) => listFolders(mailbox.uid)
|
|
65
|
+
void Promise.all(mailboxes.map((mailbox) => listFolders(mailbox.uid, client)
|
|
64
66
|
.then((result) => ({ mailbox, folders: result.filter(isMailFolder) }))
|
|
65
67
|
.catch((err) => ({
|
|
66
68
|
mailbox,
|
|
@@ -69,7 +71,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
69
71
|
}))))
|
|
70
72
|
.then(setMailboxFolders)
|
|
71
73
|
.finally(() => setFoldersLoading(false));
|
|
72
|
-
}, [mailboxes]);
|
|
74
|
+
}, [mailboxes, client]);
|
|
73
75
|
/** Files a newly created folder under its own mailbox, leaving every other mailbox's list untouched - and ignoring a type the
|
|
74
76
|
* sidebar doesn't list at all, the same filter the fetch above applies. One already there (another client's create event can arrive
|
|
75
77
|
* after, or twice, or alongside our own) is not added again - see `upsertFolder()`. */
|
|
@@ -97,7 +99,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
97
99
|
onFolderDeleted,
|
|
98
100
|
onFoldersListed,
|
|
99
101
|
onMessageCreated: notifications.announce,
|
|
100
|
-
onSendEvent: handleSendEvent,
|
|
102
|
+
onSendEvent: (event) => handleSendEvent(event, client),
|
|
101
103
|
});
|
|
102
104
|
const noteFolderUids = useCallback((folderUids) => {
|
|
103
105
|
const known = knownFolderUids(foldersRef.current);
|
|
@@ -118,8 +120,8 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
118
120
|
usePushConnectionNotice(!!userUid && enabled);
|
|
119
121
|
// The Outbox indicator: a message being sent from this tab counts at once (before the server has heard of it), settled - or taken back - when
|
|
120
122
|
// the server answers (see `sendJob.ts`); once it accepted one, the folders are read again, since the Outbox may not have existed yet.
|
|
121
|
-
const latestRef = useRef({ mailboxFolders, folderCounts });
|
|
122
|
-
latestRef.current = { mailboxFolders, folderCounts };
|
|
123
|
+
const latestRef = useRef({ mailboxFolders, folderCounts, client });
|
|
124
|
+
latestRef.current = { mailboxFolders, folderCounts, client };
|
|
123
125
|
useEffect(() => {
|
|
124
126
|
if (!userUid || !enabled) {
|
|
125
127
|
return;
|
|
@@ -132,7 +134,7 @@ export function useMailConnection({ userUid, enabled, open }) {
|
|
|
132
134
|
// The server accepted a message: the Outbox (and, on an older server, Sent Items) may just have been made. The counts' read-back lists
|
|
133
135
|
// every mailbox's folders and files the new ones (`onFoldersListed`); this reads the one mailbox at once.
|
|
134
136
|
latestRef.current.folderCounts.refresh(0);
|
|
135
|
-
listFolders(mailboxUid).then(onFoldersListed, () => undefined);
|
|
137
|
+
listFolders(mailboxUid, latestRef.current.client).then(onFoldersListed, () => undefined);
|
|
136
138
|
});
|
|
137
139
|
}, [userUid, enabled, onFoldersListed]);
|
|
138
140
|
const outbox = useOutboxStatus(mailboxFolders, folderCounts.counts, live.tick, !!userUid && enabled);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Folder, Mailbox, Message } from "
|
|
2
|
-
import { SendEvent } from "
|
|
1
|
+
import { Folder, Mailbox, Message } from "../../../lib/mail/mailApi.js";
|
|
2
|
+
import { SendEvent } from "../../../lib/mail/sendEvents.js";
|
|
3
3
|
import type { MailboxFolders } from "../components/mail/layout/MailShell.js";
|
|
4
4
|
import { FolderCounts } from "./folderCounts.js";
|
|
5
5
|
import { FolderChange } from "./folderTree.js";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { getPushClient } from "
|
|
7
|
-
import { parseSendEvent } from "
|
|
6
|
+
import { getPushClient } from "../../../lib/mail/pushClient.js";
|
|
7
|
+
import { parseSendEvent } from "../../../lib/mail/sendEvents.js";
|
|
8
8
|
import { SIGN_OUT_CHANNEL } from "../search/localIndexRpcClient.js";
|
|
9
9
|
import { useFolderCounts } from "./folderCounts.js";
|
|
10
10
|
import { sortFolders } from "./folderTree.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Mailbox } from "
|
|
2
|
-
/** Forgets every remembered answer - for the tests, and anything that changes the caller's
|
|
1
|
+
import type { Mailbox } from "../../../lib/mail/mailApi.js";
|
|
2
|
+
/** Forgets every remembered answer of the default global client - for the tests, and anything that changes the caller's
|
|
3
|
+
* access mid-session. An explicit `ApiClient`'s own cache is scoped to that instance and needs no separate clearing. */
|
|
3
4
|
export declare function clearMailboxUpdateAccessCache(): void;
|
|
4
5
|
/**
|
|
5
6
|
* Whether the reader may change the messages of `mailbox`: `false` only for a mailbox shared with them (`accessRole: "delegate"`) that
|
|
@@ -3,22 +3,42 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useState } from "react";
|
|
6
|
-
import { getMyMailboxAccess } from "
|
|
7
|
-
|
|
6
|
+
import { getMyMailboxAccess } from "../../../lib/mail/mailboxAccessApi.js";
|
|
7
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
8
|
+
/** What the server said about the caller's update access to a mailbox, remembered per mailbox for the page load - for the
|
|
9
|
+
* default global client (no `ApiClientContext.Provider` above the caller). */
|
|
8
10
|
const answers = new Map();
|
|
9
|
-
/**
|
|
11
|
+
/** The same, per explicit `ApiClient` instance (each of `tauri-client`'s accounts has its own), so two accounts never
|
|
12
|
+
* answer each other's question even if their mailbox uids ever collided. A `WeakMap` so an account's cache is dropped
|
|
13
|
+
* with its `ApiClient` rather than growing forever. */
|
|
14
|
+
const clientAnswers = new WeakMap();
|
|
15
|
+
/** The cache to use for `client` (`answers` itself for the default, undefined case). */
|
|
16
|
+
function cacheFor(client) {
|
|
17
|
+
if (!client) {
|
|
18
|
+
return answers;
|
|
19
|
+
}
|
|
20
|
+
let cache = clientAnswers.get(client);
|
|
21
|
+
if (!cache) {
|
|
22
|
+
cache = new Map();
|
|
23
|
+
clientAnswers.set(client, cache);
|
|
24
|
+
}
|
|
25
|
+
return cache;
|
|
26
|
+
}
|
|
27
|
+
/** Forgets every remembered answer of the default global client - for the tests, and anything that changes the caller's
|
|
28
|
+
* access mid-session. An explicit `ApiClient`'s own cache is scoped to that instance and needs no separate clearing. */
|
|
10
29
|
export function clearMailboxUpdateAccessCache() {
|
|
11
30
|
answers.clear();
|
|
12
31
|
}
|
|
13
32
|
/** Whether the caller may change things in `mailboxUid` (move, mark and flag its messages, add its filters): the server's own ACL check. Never rejects; `undefined` when it could not be asked (which is not cached). */
|
|
14
|
-
function fetchUpdateAccess(mailboxUid) {
|
|
15
|
-
|
|
33
|
+
function fetchUpdateAccess(mailboxUid, client) {
|
|
34
|
+
const cache = cacheFor(client);
|
|
35
|
+
let answer = cache.get(mailboxUid);
|
|
16
36
|
if (!answer) {
|
|
17
|
-
answer = getMyMailboxAccess(mailboxUid).then((access) => access.canUpdate, () => {
|
|
18
|
-
|
|
37
|
+
answer = getMyMailboxAccess(mailboxUid, client).then((access) => access.canUpdate, () => {
|
|
38
|
+
cache.delete(mailboxUid);
|
|
19
39
|
return undefined;
|
|
20
40
|
});
|
|
21
|
-
|
|
41
|
+
cache.set(mailboxUid, answer);
|
|
22
42
|
}
|
|
23
43
|
return answer;
|
|
24
44
|
}
|
|
@@ -30,6 +50,7 @@ function fetchUpdateAccess(mailboxUid) {
|
|
|
30
50
|
* that then says why it failed.
|
|
31
51
|
*/
|
|
32
52
|
export function useMailboxUpdateAccess(mailbox) {
|
|
53
|
+
const client = useApiClient();
|
|
33
54
|
const uid = mailbox?.uid;
|
|
34
55
|
const delegated = mailbox?.accessRole === "delegate";
|
|
35
56
|
const [writable, setWritable] = useState(true);
|
|
@@ -39,7 +60,7 @@ export function useMailboxUpdateAccess(mailbox) {
|
|
|
39
60
|
return;
|
|
40
61
|
}
|
|
41
62
|
let cancelled = false;
|
|
42
|
-
void fetchUpdateAccess(uid).then((canUpdate) => {
|
|
63
|
+
void fetchUpdateAccess(uid, client).then((canUpdate) => {
|
|
43
64
|
if (!cancelled && canUpdate === false) {
|
|
44
65
|
setWritable(false);
|
|
45
66
|
}
|
|
@@ -47,6 +68,6 @@ export function useMailboxUpdateAccess(mailbox) {
|
|
|
47
68
|
return () => {
|
|
48
69
|
cancelled = true;
|
|
49
70
|
};
|
|
50
|
-
}, [uid, delegated]);
|
|
71
|
+
}, [uid, delegated, client]);
|
|
51
72
|
return writable;
|
|
52
73
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Message } from "
|
|
1
|
+
import type { Message } from "../../../lib/mail/mailApi.js";
|
|
2
2
|
/**
|
|
3
3
|
* Marks a message read when it is opened in a reading pane, through `setReadState()`: the row and the folder badge change at
|
|
4
4
|
* once. `onPatched` is handed each copy of the message as it changes (the optimistic one, then the server's, or the original
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useRef } from "react";
|
|
6
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
6
7
|
import { useMailShell } from "../components/mail/layout/MailShell.js";
|
|
7
8
|
import { setReadState } from "./messageReadState.js";
|
|
8
9
|
/**
|
|
@@ -17,10 +18,11 @@ import { setReadState } from "./messageReadState.js";
|
|
|
17
18
|
*/
|
|
18
19
|
export function useMarkMessageRead(message, onPatched) {
|
|
19
20
|
const { trackMessageChange } = useMailShell();
|
|
21
|
+
const client = useApiClient();
|
|
20
22
|
const openUidRef = useRef(undefined);
|
|
21
23
|
const requestedRef = useRef(new Set());
|
|
22
|
-
const latestRef = useRef({ onPatched, trackMessageChange });
|
|
23
|
-
latestRef.current = { onPatched, trackMessageChange };
|
|
24
|
+
const latestRef = useRef({ onPatched, trackMessageChange, client });
|
|
25
|
+
latestRef.current = { onPatched, trackMessageChange, client };
|
|
24
26
|
useEffect(() => {
|
|
25
27
|
if (message?.uid !== openUidRef.current) {
|
|
26
28
|
// Another message (or none) is open now: whatever was asked about the last one is over.
|
|
@@ -39,6 +41,6 @@ export function useMarkMessageRead(message, onPatched) {
|
|
|
39
41
|
void setReadState(message, true, {
|
|
40
42
|
patch: (updated, previous) => latestRef.current.onPatched(updated, previous),
|
|
41
43
|
track: (previous, next) => latestRef.current.trackMessageChange(previous, next),
|
|
42
|
-
});
|
|
44
|
+
}, latestRef.current.client);
|
|
43
45
|
}, [message]);
|
|
44
46
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Mailbox, Message } from "
|
|
1
|
+
import type { Mailbox, Message } from "../../../lib/mail/mailApi.js";
|
|
2
2
|
import type { MailboxFolders } from "../components/mail/layout/MailShell.js";
|
|
3
3
|
/** How long a new-mail pop-up stays before it goes by itself (while it is neither hovered nor focused, and the tab is in view). */
|
|
4
4
|
export declare const TOAST_DURATION_MS = 8000;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactElement } from "react";
|
|
2
|
-
import type { Message } from "
|
|
2
|
+
import type { Message } from "../../../lib/mail/mailApi.js";
|
|
3
3
|
import { EmptyFolderOutcome, PurgeOutcome } from "./permanentDelete.js";
|
|
4
4
|
/** The folder "Empty folder" is about. */
|
|
5
5
|
export interface EmptiableFolder {
|
|
@@ -4,6 +4,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
4
4
|
// SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { useRef, useState } from "react";
|
|
7
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
7
8
|
import PermanentDeleteDialog from "../components/mail/PermanentDeleteDialog.js";
|
|
8
9
|
import { useMailShell } from "../components/mail/layout/MailShell.js";
|
|
9
10
|
import { notifyApiError } from "../notifications/apiErrors.js";
|
|
@@ -18,6 +19,7 @@ import { messageCount, notifyFolderEmptied, notifyPurged, purgeFolder, purgeMess
|
|
|
18
19
|
*/
|
|
19
20
|
export function usePermanentDelete() {
|
|
20
21
|
const { trackMessageChange, refreshFolderCounts } = useMailShell();
|
|
22
|
+
const client = useApiClient();
|
|
21
23
|
const [pending, setPending] = useState(null);
|
|
22
24
|
const [running, setRunning] = useState(false);
|
|
23
25
|
// Set at once (state is a render later), so a key pressed twice does not open two dialogs.
|
|
@@ -57,7 +59,7 @@ export function usePermanentDelete() {
|
|
|
57
59
|
const { request } = pendingRef.current;
|
|
58
60
|
setRunning(true);
|
|
59
61
|
if (request.kind === "messages") {
|
|
60
|
-
const outcome = await purgeMessages(request.messages);
|
|
62
|
+
const outcome = await purgeMessages(request.messages, client);
|
|
61
63
|
afterDeleted(outcome.deleted);
|
|
62
64
|
notifyPurged(outcome);
|
|
63
65
|
finish(outcome);
|
|
@@ -65,7 +67,7 @@ export function usePermanentDelete() {
|
|
|
65
67
|
}
|
|
66
68
|
let outcome;
|
|
67
69
|
try {
|
|
68
|
-
outcome = await purgeFolder(request.folder.uid);
|
|
70
|
+
outcome = await purgeFolder(request.folder.uid, undefined, client);
|
|
69
71
|
}
|
|
70
72
|
catch (err) {
|
|
71
73
|
notifyApiError(err, `Couldn't empty ${request.folder.name}`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Branding } from "
|
|
1
|
+
import type { Branding } from "../../../lib/branding/brandingApi.js";
|
|
2
2
|
/** The name the deployment goes by in the browser tab: its branding title, else its company name, else RapidMX. */
|
|
3
3
|
export declare function brandName(branding?: Pick<Branding, "title" | "companyName"> | null): string;
|
|
4
4
|
/**
|
|
@@ -5,7 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { useEffect } from "react";
|
|
7
7
|
import { HiOutlineBell, HiOutlineCheckCircle, HiOutlineEnvelope, HiOutlineExclamationCircle, HiOutlineExclamationTriangle, HiOutlineInformationCircle, HiOutlineXMark, } from "react-icons/hi2";
|
|
8
|
-
import CopyButton from "
|
|
8
|
+
import CopyButton from "../../../lib/components/buttons/CopyButton.js";
|
|
9
9
|
import { dismiss, setAllPaused, setPaused } from "./store.js";
|
|
10
10
|
import { useNotifications } from "./useNotifications.js";
|
|
11
11
|
import { useSystemErrorNotifications } from "./systemErrors.js";
|
|
@@ -4,8 +4,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
4
4
|
// SPDX-License-Identifier: MPL-2.0
|
|
5
5
|
///////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
import { useEffect, useRef } from "react";
|
|
7
|
-
import Modal from "
|
|
8
|
-
import CopyButton from "
|
|
7
|
+
import Modal from "../../../lib/components/overlays/Modal.js";
|
|
8
|
+
import CopyButton from "../../../lib/components/buttons/CopyButton.js";
|
|
9
9
|
import { useNotifications } from "./useNotifications.js";
|
|
10
10
|
const KIND_LABEL = {
|
|
11
11
|
mail: "New message",
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { ApiRequestError } from "
|
|
6
|
-
import { describeSendFailure } from "
|
|
5
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
6
|
+
import { describeSendFailure } from "../../../lib/mail/sendFailure.js";
|
|
7
7
|
import { notify } from "./store.js";
|
|
8
8
|
/** Whether `err` is a request that was cancelled (`AbortError`) - by name, since a `DOMException` is not always an `Error` (jsdom's is not). */
|
|
9
9
|
export function isAbortError(err) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect } from "react";
|
|
6
|
-
import { getPushClient } from "
|
|
6
|
+
import { getPushClient } from "../../../lib/mail/pushClient.js";
|
|
7
7
|
import { dismiss, notify } from "./store.js";
|
|
8
8
|
/** How long the live connection has to be down before anyone is told: a reconnect within a few seconds is not worth a word. */
|
|
9
9
|
export const PUSH_OFFLINE_NOTICE_MS = 10000;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect } from "react";
|
|
6
|
-
import { ApiRequestError } from "
|
|
6
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
7
7
|
import { isAbortError } from "./apiErrors.js";
|
|
8
8
|
import { notify } from "./store.js";
|
|
9
9
|
/** The one key every unexpected failure shares: a page that throws in a loop is one pop-up with a count, never a flood. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { PublicKey } from "
|
|
2
|
-
import type { Folder } from "
|
|
1
|
+
import type { PublicKey } from "../../../lib/crypto/keyvaultApi.js";
|
|
2
|
+
import type { Folder } from "../../../lib/mail/mailApi.js";
|
|
3
3
|
export declare const POLL_INTERVAL_MS = 5000;
|
|
4
4
|
export interface LocalIndexLifecycleProps {
|
|
5
5
|
mailboxUid?: string;
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
* handles that case itself via `destroyAllLocalIndexes()`.
|
|
22
22
|
*/
|
|
23
23
|
import { useEffect, useRef } from "react";
|
|
24
|
-
import { getUnlockedKeys } from "
|
|
24
|
+
import { getUnlockedKeys } from "../../../lib/crypto/keySession.js";
|
|
25
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
25
26
|
/**
|
|
26
27
|
* The index builder (with the message security code it decrypts through - PKI.js and the ASN.1/X.509 libraries, over half a
|
|
27
28
|
* megabyte) is loaded only once a mailbox is actually unlocked and a build is due, so an inbox that never unlocks - the
|
|
@@ -37,14 +38,18 @@ import { destroyLocalIndex, pruneInaccessibleLocalIndexes } from "./localIndexRp
|
|
|
37
38
|
export const POLL_INTERVAL_MS = 5000;
|
|
38
39
|
/** Renders nothing - pure side-effect component, mounted by `MailShell.tsx`. */
|
|
39
40
|
export default function LocalIndexLifecycle({ mailboxUid, folders, accessibleMailboxUids }) {
|
|
41
|
+
// The explicit ApiClient (from useApiClient()) this component is rendered under - undefined for every existing caller (the SSR web/admin
|
|
42
|
+
// apps, Electron), which keeps building the index against the default global cookie-based session exactly as before. A native,
|
|
43
|
+
// multi-account host that renders this under an ApiClientContext.Provider gets its own account's client threaded through instead.
|
|
44
|
+
const client = useApiClient();
|
|
40
45
|
// mailboxUid -> whether it was unlocked at the last check. An entry exists for every mailbox whose
|
|
41
46
|
// build this component started; only ever changed by a real observed transition, never reset by an
|
|
42
47
|
// effect re-run.
|
|
43
48
|
const trackedRef = useRef(new Map());
|
|
44
|
-
// The latest props, for the long-lived polling interval below.
|
|
45
|
-
const latestRef = useRef({ mailboxUid, folders });
|
|
46
|
-
latestRef.current = { mailboxUid, folders };
|
|
47
|
-
function startBuildIfUnlocked(targetMailboxUid, targetFolders) {
|
|
49
|
+
// The latest props (and client), for the long-lived polling interval below.
|
|
50
|
+
const latestRef = useRef({ mailboxUid, folders, client });
|
|
51
|
+
latestRef.current = { mailboxUid, folders, client };
|
|
52
|
+
function startBuildIfUnlocked(targetMailboxUid, targetFolders, targetClient) {
|
|
48
53
|
const unlocked = getUnlockedKeys(targetMailboxUid);
|
|
49
54
|
if (!unlocked || targetFolders.length === 0 || trackedRef.current.get(targetMailboxUid)) {
|
|
50
55
|
return;
|
|
@@ -53,14 +58,14 @@ export default function LocalIndexLifecycle({ mailboxUid, folders, accessibleMai
|
|
|
53
58
|
// Never an unhandled rejection - a broken local index is best-effort infrastructure, not a build
|
|
54
59
|
// the rest of the app depends on.
|
|
55
60
|
loadBuilder()
|
|
56
|
-
.then(({ buildLocalIndex }) => buildLocalIndex(targetMailboxUid, unlocked, targetFolders))
|
|
61
|
+
.then(({ buildLocalIndex }) => buildLocalIndex(targetMailboxUid, unlocked, targetFolders, undefined, targetClient))
|
|
57
62
|
.catch(() => undefined);
|
|
58
63
|
}
|
|
59
64
|
useEffect(() => {
|
|
60
65
|
if (mailboxUid) {
|
|
61
|
-
startBuildIfUnlocked(mailboxUid, folders);
|
|
66
|
+
startBuildIfUnlocked(mailboxUid, folders, client);
|
|
62
67
|
}
|
|
63
|
-
}, [mailboxUid, folders]);
|
|
68
|
+
}, [mailboxUid, folders, client]);
|
|
64
69
|
useEffect(() => {
|
|
65
70
|
const interval = setInterval(() => {
|
|
66
71
|
for (const [trackedUid, wasUnlocked] of trackedRef.current) {
|
|
@@ -76,9 +81,9 @@ export default function LocalIndexLifecycle({ mailboxUid, folders, accessibleMai
|
|
|
76
81
|
}
|
|
77
82
|
}
|
|
78
83
|
// The active mailbox was (re-)unlocked since the last check, e.g. via an on-demand unlock prompt.
|
|
79
|
-
const { mailboxUid: activeUid, folders: activeFolders } = latestRef.current;
|
|
84
|
+
const { mailboxUid: activeUid, folders: activeFolders, client: activeClient } = latestRef.current;
|
|
80
85
|
if (activeUid) {
|
|
81
|
-
startBuildIfUnlocked(activeUid, activeFolders);
|
|
86
|
+
startBuildIfUnlocked(activeUid, activeFolders, activeClient);
|
|
82
87
|
}
|
|
83
88
|
}, POLL_INTERVAL_MS);
|
|
84
89
|
return () => clearInterval(interval);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SearchResult } from "
|
|
1
|
+
import type { SearchResult } from "../../../lib/search/searchApi.js";
|
|
2
2
|
/**
|
|
3
3
|
* How far a cross-mailbox search fans out. Exported (and mutable) so a test can shrink them instead of building 26 mailboxes or waiting a
|
|
4
4
|
* minute for a timeout; nothing else writes to it.
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*
|
|
11
11
|
* A search of one mailbox is the same code with a list of one: nothing here changes what that returns.
|
|
12
12
|
*/
|
|
13
|
-
import { ApiRequestError } from "
|
|
14
|
-
import { normalizeServerScores } from "
|
|
13
|
+
import { ApiRequestError } from "../../../lib/util/api.js";
|
|
14
|
+
import { normalizeServerScores } from "../../../lib/search/searchScoring.js";
|
|
15
15
|
/**
|
|
16
16
|
* How far a cross-mailbox search fans out. Exported (and mutable) so a test can shrink them instead of building 26 mailboxes or waiting a
|
|
17
17
|
* minute for a timeout; nothing else writes to it.
|
|
@@ -31,8 +31,9 @@
|
|
|
31
31
|
* seals nothing. Signed-only (unencrypted) messages aren't sealed here: this pass never fetches their raw MIME (see
|
|
32
32
|
* above), and fetching it only to seal would cost a download per message; they are sealed when opened.
|
|
33
33
|
*/
|
|
34
|
-
import { type Folder } from "
|
|
35
|
-
import type { UnlockedKeys } from "
|
|
34
|
+
import { type Folder } from "../../../lib/mail/mailApi.js";
|
|
35
|
+
import type { UnlockedKeys } from "../../../lib/crypto/keySession.js";
|
|
36
|
+
import type { ApiClient } from "../../../lib/util/api.js";
|
|
36
37
|
/** §11's Window Sizing table's time-floor column - explicitly unvalidated starting-point default per the
|
|
37
38
|
* spec's own §16 "Measurement Task" ("cannot be supplied by design work... MUST NOT be treated as
|
|
38
39
|
* validated"). Used as-is rather than invented/adjusted here. Not user-adjustable today (unlike the byte
|
|
@@ -78,7 +79,7 @@ export declare const MAX_SEAL_WRITES_PER_PASS = 200;
|
|
|
78
79
|
* preference change in Settings takes effect starting with this mailbox's next build pass (its next
|
|
79
80
|
* unlock), without requiring a reload.
|
|
80
81
|
*/
|
|
81
|
-
export declare function buildLocalIndex(mailboxUid: string, unlocked: UnlockedKeys, folders: Folder[], windowConfig?: LocalIndexWindowConfig): Promise<void>;
|
|
82
|
+
export declare function buildLocalIndex(mailboxUid: string, unlocked: UnlockedKeys, folders: Folder[], windowConfig?: LocalIndexWindowConfig, client?: ApiClient): Promise<void>;
|
|
82
83
|
/** Stops a mailbox's running build pass, if any (e.g. its keys were just destroyed), resolving once it has
|
|
83
84
|
* wound down. The Worker independently rejects the pass's later calls once the index is destroyed (see
|
|
84
85
|
* `GenerationParams`); this just stops the fetching and decrypting too. Never rejects. */
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
* seals nothing. Signed-only (unencrypted) messages aren't sealed here: this pass never fetches their raw MIME (see
|
|
36
36
|
* above), and fetching it only to seal would cost a download per message; they are sealed when opened.
|
|
37
37
|
*/
|
|
38
|
-
import { getMessageRawContent, listFolders, listMessages } from "
|
|
39
|
-
import { evaluateMessageSecurity, evaluateMessageSecurityWithSeal } from "
|
|
38
|
+
import { getMessageRawContent, listFolders, listMessages } from "../../../lib/mail/mailApi.js";
|
|
39
|
+
import { evaluateMessageSecurity, evaluateMessageSecurityWithSeal } from "../../../lib/crypto/messageSecurity.js";
|
|
40
40
|
import { getPinnedSignerFingerprints } from "../components/mail/pinnedSigners.js";
|
|
41
41
|
import { currentVerificationSeal, readVaultGeneration, sendVerificationSeal, verificationSealPending } from "../components/mail/verificationSeals.js";
|
|
42
42
|
import { getIndexedVersions, indexLocalEntities, initLocalIndex, nextLocalIndexGeneration, pruneLocalEntities, setLocalIndexBuilding, setLocalIndexWindow, } from "./localIndexRpcClient.js";
|
|
@@ -75,7 +75,7 @@ export const FETCH_CONCURRENCY = 6;
|
|
|
75
75
|
export const SEAL_WRITE_CONCURRENCY = 2;
|
|
76
76
|
/** The most verification seals one pass writes. */
|
|
77
77
|
export const MAX_SEAL_WRITES_PER_PASS = 200;
|
|
78
|
-
function createPassSealer(mailboxUid, unlocked, signal) {
|
|
78
|
+
function createPassSealer(mailboxUid, unlocked, signal, client) {
|
|
79
79
|
let generation;
|
|
80
80
|
const pins = new Map();
|
|
81
81
|
const queue = [];
|
|
@@ -83,12 +83,12 @@ function createPassSealer(mailboxUid, unlocked, signal) {
|
|
|
83
83
|
let active = 0;
|
|
84
84
|
let idle;
|
|
85
85
|
const stopped = () => signal.aborted || !!unlocked.destroyed;
|
|
86
|
-
const vaultGeneration = () => (generation ?? (generation = readVaultGeneration(mailboxUid)));
|
|
86
|
+
const vaultGeneration = () => (generation ?? (generation = readVaultGeneration(mailboxUid, client)));
|
|
87
87
|
const pinsFor = (address) => {
|
|
88
88
|
const key = address.toLowerCase();
|
|
89
89
|
let entry = pins.get(key);
|
|
90
90
|
if (!entry) {
|
|
91
|
-
entry = getPinnedSignerFingerprints(mailboxUid, address).then((fingerprints) => (fingerprints.length > 0 ? fingerprints : undefined), () => undefined);
|
|
91
|
+
entry = getPinnedSignerFingerprints(mailboxUid, address, client).then((fingerprints) => (fingerprints.length > 0 ? fingerprints : undefined), () => undefined);
|
|
92
92
|
pins.set(key, entry);
|
|
93
93
|
}
|
|
94
94
|
return entry;
|
|
@@ -126,7 +126,7 @@ function createPassSealer(mailboxUid, unlocked, signal) {
|
|
|
126
126
|
const sealToWrite = result.sealToWrite;
|
|
127
127
|
if (sealToWrite && queued < MAX_SEAL_WRITES_PER_PASS) {
|
|
128
128
|
queued++;
|
|
129
|
-
queue.push(() => sendVerificationSeal(message.uid, sealToWrite));
|
|
129
|
+
queue.push(() => sendVerificationSeal(message.uid, sealToWrite, client));
|
|
130
130
|
pump();
|
|
131
131
|
}
|
|
132
132
|
return result;
|
|
@@ -178,6 +178,9 @@ async function mapWithConcurrency(items, limit, fn) {
|
|
|
178
178
|
async function buildEntity(message, sealer) {
|
|
179
179
|
let rawMime;
|
|
180
180
|
try {
|
|
181
|
+
// getMessageRawContent() bypasses apiFetch() entirely (it streams message/rfc822, not JSON - see its own doc comment) and does not
|
|
182
|
+
// yet accept an explicit ApiClient at all; threading a per-account client through it is out of scope here (mailApi.ts is not one of
|
|
183
|
+
// this task's files). It still falls back to the default global session even under an ApiClientContext.Provider.
|
|
181
184
|
rawMime = await getMessageRawContent(message.uid);
|
|
182
185
|
}
|
|
183
186
|
catch {
|
|
@@ -241,7 +244,7 @@ async function buildEntity(message, sealer) {
|
|
|
241
244
|
* preference change in Settings takes effect starting with this mailbox's next build pass (its next
|
|
242
245
|
* unlock), without requiring a reload.
|
|
243
246
|
*/
|
|
244
|
-
export async function buildLocalIndex(mailboxUid, unlocked, folders, windowConfig = { timeFloorMonths: WEB_TIME_FLOOR_MONTHS, byteBudgetBytes: getLocalIndexByteBudget() }) {
|
|
247
|
+
export async function buildLocalIndex(mailboxUid, unlocked, folders, windowConfig = { timeFloorMonths: WEB_TIME_FLOOR_MONTHS, byteBudgetBytes: getLocalIndexByteBudget() }, client) {
|
|
245
248
|
// At most one pass per mailbox: a newer one cancels the older and waits for it to wind down first.
|
|
246
249
|
const previous = activeBuilds.get(mailboxUid);
|
|
247
250
|
const controller = new AbortController();
|
|
@@ -250,7 +253,7 @@ export async function buildLocalIndex(mailboxUid, unlocked, folders, windowConfi
|
|
|
250
253
|
previous.controller.abort();
|
|
251
254
|
await previous.settled;
|
|
252
255
|
}
|
|
253
|
-
await runBuildPass(mailboxUid, unlocked, folders, windowConfig, controller.signal);
|
|
256
|
+
await runBuildPass(mailboxUid, unlocked, folders, windowConfig, controller.signal, client);
|
|
254
257
|
})();
|
|
255
258
|
const entry = { controller, settled: run.catch(() => undefined) };
|
|
256
259
|
activeBuilds.set(mailboxUid, entry);
|
|
@@ -277,7 +280,7 @@ export async function cancelLocalIndexBuild(mailboxUid) {
|
|
|
277
280
|
function isOlderThan(date, watermark) {
|
|
278
281
|
return !!watermark && new Date(date).getTime() < new Date(watermark).getTime();
|
|
279
282
|
}
|
|
280
|
-
async function runBuildPass(mailboxUid, unlocked, folders, windowConfig, signal) {
|
|
283
|
+
async function runBuildPass(mailboxUid, unlocked, folders, windowConfig, signal, client) {
|
|
281
284
|
const generation = nextLocalIndexGeneration();
|
|
282
285
|
const indexKey = await deriveLocalIndexKey(unlocked.masterKey, mailboxUid);
|
|
283
286
|
signal.throwIfAborted();
|
|
@@ -295,7 +298,7 @@ async function runBuildPass(mailboxUid, unlocked, folders, windowConfig, signal)
|
|
|
295
298
|
// count, no listing/fetch failure and no budget cut-off - the only case where coverage can be used to
|
|
296
299
|
// narrow Tier 3.
|
|
297
300
|
let complete = true;
|
|
298
|
-
const sealer = createPassSealer(mailboxUid, unlocked, signal);
|
|
301
|
+
const sealer = createPassSealer(mailboxUid, unlocked, signal, client);
|
|
299
302
|
try {
|
|
300
303
|
if (folders.some((f) => !MESSAGE_FOLDER_TYPES.has(f.type) && !NON_MESSAGE_FOLDER_TYPES.has(f.type))) {
|
|
301
304
|
complete = false;
|
|
@@ -309,7 +312,7 @@ async function runBuildPass(mailboxUid, unlocked, folders, windowConfig, signal)
|
|
|
309
312
|
signal.throwIfAborted();
|
|
310
313
|
let messages;
|
|
311
314
|
try {
|
|
312
|
-
messages = await listMessages(folder.uid, { page, limit: PAGE_SIZE });
|
|
315
|
+
messages = await listMessages(folder.uid, { page, limit: PAGE_SIZE }, client);
|
|
313
316
|
}
|
|
314
317
|
catch {
|
|
315
318
|
return "failed";
|
|
@@ -350,7 +353,7 @@ async function runBuildPass(mailboxUid, unlocked, folders, windowConfig, signal)
|
|
|
350
353
|
/** Each folder's current total, or `undefined` if the listing failed. */
|
|
351
354
|
async function folderTotals() {
|
|
352
355
|
try {
|
|
353
|
-
return new Map((await listFolders(mailboxUid)).map((f) => [f.uid, f.totalCount]));
|
|
356
|
+
return new Map((await listFolders(mailboxUid, client)).map((f) => [f.uid, f.totalCount]));
|
|
354
357
|
}
|
|
355
358
|
catch {
|
|
356
359
|
return undefined;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* already uniformly random) and avoids needing to persist, transmit, or ever lose a random salt just to
|
|
15
15
|
* re-derive the same key on the next unlock.
|
|
16
16
|
*/
|
|
17
|
-
import { hkdfDerive } from "
|
|
17
|
+
import { hkdfDerive } from "../../../lib/crypto/masterKey.js";
|
|
18
18
|
/** Fixed, non-secret HKDF salt - see this module's own doc comment for why a fixed salt is fine here. */
|
|
19
19
|
const FIXED_SALT = new TextEncoder().encode("rapidmx-local-search-index-v1");
|
|
20
20
|
/** Derives this mailbox's local-index page-encryption key from its already-unlocked master key. Every
|