@rapidmx/web-client 0.21.0 → 0.22.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 +27 -23
- 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 +2 -2
- 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 +7 -5
- package/apps/shared/components/mail/ConversationThreadPane.tsx +26 -15
- 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 +32 -30
- 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 +2 -2
- package/apps/shared/components/mail/invite/InviteRsvpPopover.tsx +9 -7
- 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/messageExport.ts +1 -1
- package/apps/shared/components/mail/reading/printMessage.ts +2 -2
- 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/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 +57 -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.js +26 -22
- 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 +1 -1
- 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 +6 -4
- package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +3 -3
- package/dist/apps/shared/components/mail/ConversationThreadPane.js +13 -11
- 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 +30 -28
- 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 +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.d.ts +1 -1
- package/dist/apps/shared/components/mail/invite/InviteRsvpPopover.js +9 -7
- 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/messageExport.js +1 -1
- package/dist/apps/shared/components/mail/reading/printMessage.d.ts +2 -2
- 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/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 +54 -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
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { Message, cancelScheduledSend, getMessage, listAttachments, listFolders, queueMessageSend } from "
|
|
6
|
-
import { SendEvent, describeSendEventError } from "
|
|
5
|
+
import { Message, cancelScheduledSend, getMessage, listAttachments, listFolders, queueMessageSend } from "../../../../lib/mail/mailApi.js";
|
|
6
|
+
import { SendEvent, describeSendEventError } from "../../../../lib/mail/sendEvents.js";
|
|
7
|
+
import type { ApiClient } from "../../../../lib/util/api.js";
|
|
7
8
|
import { formatRecipient } from "../../components/mail/compose/recipients.js";
|
|
8
9
|
import { loadOriginalMessage } from "../../components/mail/compose/quotedBody.js";
|
|
9
10
|
import { notifyApiError } from "../../notifications/apiErrors.js";
|
|
@@ -29,13 +30,13 @@ function summary(recipients: string[]): string {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/** Moves a message the server failed to relay back into Drafts (the only place it can be edited or sent again), and returns it as it is there. */
|
|
32
|
-
async function moveBackToDrafts(uid: string, mailboxUid: string): Promise<Message> {
|
|
33
|
-
const message = await getMessage(uid);
|
|
34
|
-
const drafts = (await listFolders(mailboxUid)).find((folder) => folder.type === "drafts");
|
|
33
|
+
async function moveBackToDrafts(uid: string, mailboxUid: string, client: ApiClient | undefined): Promise<Message> {
|
|
34
|
+
const message = await getMessage(uid, client);
|
|
35
|
+
const drafts = (await listFolders(mailboxUid, client)).find((folder) => folder.type === "drafts");
|
|
35
36
|
if (!drafts || message.folderUid === drafts.uid) {
|
|
36
37
|
return message;
|
|
37
38
|
}
|
|
38
|
-
return cancelScheduledSend(message, drafts.uid);
|
|
39
|
+
return cancelScheduledSend(message, drafts.uid, client);
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
function escapeHtml(text: string): string {
|
|
@@ -43,9 +44,9 @@ function escapeHtml(text: string): string {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
/** "Open draft" for a message the server failed to relay: back into Drafts, and into a compose window with what was written. */
|
|
46
|
-
async function openFailedDraft(event: SendEvent): Promise<void> {
|
|
47
|
+
async function openFailedDraft(event: SendEvent, client: ApiClient | undefined): Promise<void> {
|
|
47
48
|
try {
|
|
48
|
-
const moved = await moveBackToDrafts(event.uid, event.mailboxUid ?? "");
|
|
49
|
+
const moved = await moveBackToDrafts(event.uid, event.mailboxUid ?? "", client);
|
|
49
50
|
// Back in Drafts it is no longer a message on its way in its conversation.
|
|
50
51
|
forgetOutgoing(event.uid);
|
|
51
52
|
const request = retainedRequest(event.uid);
|
|
@@ -63,8 +64,10 @@ async function openFailedDraft(event: SendEvent): Promise<void> {
|
|
|
63
64
|
});
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
67
|
+
// loadOriginalMessage() (quotedBody.ts) does not yet accept an explicit ApiClient itself - out of scope here (that module is not one of
|
|
68
|
+
// this task's files); it still falls back to the default global session even under an ApiClientContext.Provider.
|
|
66
69
|
const original = await loadOriginalMessage(moved, null);
|
|
67
|
-
const attachments = await listAttachments(moved.folderUid, moved.uid).catch(() => []);
|
|
70
|
+
const attachments = await listAttachments(moved.folderUid, moved.uid, client).catch(() => []);
|
|
68
71
|
const byType = (type: "to" | "cc" | "bcc") => moved.recipients.filter((recipient) => recipient.type === type).map(formatRecipient).join(", ");
|
|
69
72
|
openComposeFromOutside({
|
|
70
73
|
mailboxUid: moved.mailboxUid,
|
|
@@ -88,7 +91,7 @@ async function openFailedDraft(event: SendEvent): Promise<void> {
|
|
|
88
91
|
}
|
|
89
92
|
|
|
90
93
|
/** "Retry" for a message the server failed to relay: the same send call again - a failed message stays in Outbox and the server queues it afresh (with a new retry budget). */
|
|
91
|
-
async function retryFailed(event: SendEvent): Promise<void> {
|
|
94
|
+
async function retryFailed(event: SendEvent, client: ApiClient | undefined): Promise<void> {
|
|
92
95
|
if (!beginPendingSend({ draftUid: event.uid, mailboxUid: event.mailboxUid ?? "", subject: event.subject, recipients: event.recipients, scheduled: false })) {
|
|
93
96
|
return;
|
|
94
97
|
}
|
|
@@ -96,7 +99,7 @@ async function retryFailed(event: SendEvent): Promise<void> {
|
|
|
96
99
|
markOutgoingSending(event.uid);
|
|
97
100
|
try {
|
|
98
101
|
setPendingStage(event.uid, "queuing");
|
|
99
|
-
const result = await queueMessageSend(event.uid);
|
|
102
|
+
const result = await queueMessageSend(event.uid, client);
|
|
100
103
|
if (!result.queued) {
|
|
101
104
|
notifySent();
|
|
102
105
|
}
|
|
@@ -107,8 +110,10 @@ async function retryFailed(event: SendEvent): Promise<void> {
|
|
|
107
110
|
}
|
|
108
111
|
}
|
|
109
112
|
|
|
110
|
-
/** Shows what a send event means to the user.
|
|
111
|
-
|
|
113
|
+
/** Shows what a send event means to the user. `client` is the explicit `ApiClient` (from `useApiClient()`) whichever code observed this push
|
|
114
|
+
* event was rendered under - `undefined` (the default) for every existing caller, which keeps using the default global cookie-based session
|
|
115
|
+
* exactly as before. */
|
|
116
|
+
export function handleSendEvent(event: SendEvent, client?: ApiClient): void {
|
|
112
117
|
if (event.action === "send-succeeded") {
|
|
113
118
|
dismiss(retryId(event.uid));
|
|
114
119
|
dismiss(failedId(event.uid));
|
|
@@ -139,8 +144,8 @@ export function handleSendEvent(event: SendEvent): void {
|
|
|
139
144
|
}
|
|
140
145
|
dismiss(retryId(event.uid));
|
|
141
146
|
const actions = [
|
|
142
|
-
{ label: "Retry", onClick: () => void retryFailed(event) },
|
|
143
|
-
{ label: "Open draft", onClick: () => void openFailedDraft(event) },
|
|
147
|
+
{ label: "Retry", onClick: () => void retryFailed(event, client) },
|
|
148
|
+
{ label: "Open draft", onClick: () => void openFailedDraft(event, client) },
|
|
144
149
|
];
|
|
145
150
|
notify({
|
|
146
151
|
id: failedId(event.uid),
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useMemo, useState } from "react";
|
|
6
|
-
import { listMessages } from "
|
|
6
|
+
import { listMessages } from "../../../../lib/mail/mailApi.js";
|
|
7
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
7
8
|
import type { MailboxFolders } from "../../components/mail/layout/MailShell.js";
|
|
8
9
|
import { FolderCount, countOfFolder } from "../folderCounts.js";
|
|
9
10
|
import { OutboxFolderStatus, summarizeOutbox } from "./outboxState.js";
|
|
@@ -17,6 +18,7 @@ export const OUTBOX_STATUS_LIMIT = 50;
|
|
|
17
18
|
* whenever that count or the live updates change, so an empty Outbox - almost always - is free. A failed read keeps what was known.
|
|
18
19
|
*/
|
|
19
20
|
export function useOutboxStatus(mailboxFolders: MailboxFolders[], counts: Record<string, FolderCount>, liveTick: number, enabled: boolean): Record<string, OutboxFolderStatus> {
|
|
21
|
+
const client = useApiClient();
|
|
20
22
|
const [statuses, setStatuses] = useState<Record<string, OutboxFolderStatus>>({});
|
|
21
23
|
const outboxes = useMemo(
|
|
22
24
|
() =>
|
|
@@ -43,7 +45,7 @@ export function useOutboxStatus(mailboxFolders: MailboxFolders[], counts: Record
|
|
|
43
45
|
});
|
|
44
46
|
let cancelled = false;
|
|
45
47
|
for (const outbox of occupied) {
|
|
46
|
-
listMessages(outbox.uid, { limit: OUTBOX_STATUS_LIMIT }).then(
|
|
48
|
+
listMessages(outbox.uid, { limit: OUTBOX_STATUS_LIMIT }, client).then(
|
|
47
49
|
(messages) => {
|
|
48
50
|
if (!cancelled) {
|
|
49
51
|
setStatuses((previous) => ({ ...previous, [outbox.uid]: summarizeOutbox(messages) }));
|
|
@@ -55,7 +57,7 @@ export function useOutboxStatus(mailboxFolders: MailboxFolders[], counts: Record
|
|
|
55
57
|
return () => {
|
|
56
58
|
cancelled = true;
|
|
57
59
|
};
|
|
58
|
-
}, [enabled, key, liveTick]);
|
|
60
|
+
}, [enabled, key, liveTick, client]);
|
|
59
61
|
|
|
60
62
|
return statuses;
|
|
61
63
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { Message, emptyFolder, listMessages, purgeMessage } from "
|
|
6
|
-
import { ApiRequestError } from "
|
|
5
|
+
import { Message, emptyFolder, listMessages, purgeMessage } from "../../../lib/mail/mailApi.js";
|
|
6
|
+
import { ApiClient, ApiRequestError } from "../../../lib/util/api.js";
|
|
7
7
|
import { displaySubject } from "../components/mail/reading/EncryptedPreview.js";
|
|
8
8
|
import { notifySessionExpired } from "../notifications/apiErrors.js";
|
|
9
9
|
import { notify } from "../notifications/store.js";
|
|
@@ -64,14 +64,14 @@ export function messageCount(count: number): string {
|
|
|
64
64
|
* to delete, a message that is already gone) is recorded against its message and the rest carry on. `deleted` and `failed` keep the order of
|
|
65
65
|
* `messages`.
|
|
66
66
|
*/
|
|
67
|
-
export async function purgeMessages(messages: Message[]): Promise<PurgeOutcome> {
|
|
67
|
+
export async function purgeMessages(messages: Message[], client?: ApiClient): Promise<PurgeOutcome> {
|
|
68
68
|
const failures: (PurgeFailure | null)[] = new Array(messages.length).fill(null);
|
|
69
69
|
let next = 0;
|
|
70
70
|
async function worker(): Promise<void> {
|
|
71
71
|
while (next < messages.length) {
|
|
72
72
|
const index = next++;
|
|
73
73
|
try {
|
|
74
|
-
await purgeMessage(messages[index].uid);
|
|
74
|
+
await purgeMessage(messages[index].uid, client);
|
|
75
75
|
} catch (err) {
|
|
76
76
|
failures[index] = { message: messages[index], ...describeFailure(err) };
|
|
77
77
|
}
|
|
@@ -93,17 +93,18 @@ export async function purgeMessages(messages: Message[]): Promise<PurgeOutcome>
|
|
|
93
93
|
export async function purgeFolder(
|
|
94
94
|
folderUid: string,
|
|
95
95
|
paging: { pageSize: number; maxPages: number } = { pageSize: LIST_PAGE_SIZE, maxPages: MAX_LIST_PAGES },
|
|
96
|
+
client?: ApiClient,
|
|
96
97
|
): Promise<EmptyFolderOutcome> {
|
|
97
98
|
try {
|
|
98
|
-
await emptyFolder(folderUid);
|
|
99
|
+
await emptyFolder(folderUid, client);
|
|
99
100
|
return { emptied: true, deleted: [], failed: [] };
|
|
100
101
|
} catch (err) {
|
|
101
102
|
if (!(err instanceof ApiRequestError) || (err.status !== 403 && err.status !== 409)) {
|
|
102
103
|
throw err;
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
|
-
const listed = await listAllPages((page) => listMessages(folderUid, { limit: paging.pageSize, page }), paging.pageSize, paging.maxPages);
|
|
106
|
-
const outcome = await purgeMessages(listed.items);
|
|
106
|
+
const listed = await listAllPages((page) => listMessages(folderUid, { limit: paging.pageSize, page }, client), paging.pageSize, paging.maxPages);
|
|
107
|
+
const outcome = await purgeMessages(listed.items, client);
|
|
107
108
|
return { ...outcome, emptied: outcome.failed.length === 0 && !listed.truncated };
|
|
108
109
|
}
|
|
109
110
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*
|
|
18
18
|
* `orderMailboxes()` puts the primary mailbox first, then the caller's other mailboxes, then the shared ones, each group alphabetical.
|
|
19
19
|
*/
|
|
20
|
-
import { isSharedWithMe, type Mailbox } from "
|
|
20
|
+
import { isSharedWithMe, type Mailbox } from "../../../lib/mail/mailApi.js";
|
|
21
21
|
|
|
22
22
|
/** Whether `mailbox` is the signed-in user's own. */
|
|
23
23
|
export function isOwnMailbox(mailbox: Mailbox, userUid: string | undefined): boolean {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import type { MessageReportKind, MessageReportResult } from "
|
|
5
|
+
import type { MessageReportKind, MessageReportResult } from "../../../lib/mail/mailApi.js";
|
|
6
6
|
|
|
7
7
|
/** Where a notification's "Manage blocked senders" goes: the Blocked and safe senders page of the mailbox. */
|
|
8
8
|
export function senderListsHref(mailboxUid: string): string {
|
|
@@ -8,7 +8,8 @@ import {
|
|
|
8
8
|
deleteMailFilterRule,
|
|
9
9
|
listMailFilterRules,
|
|
10
10
|
updateMailFilterRule,
|
|
11
|
-
} from "
|
|
11
|
+
} from "../../../lib/mail/mailFilterRulesApi.js";
|
|
12
|
+
import type { ApiClient } from "../../../lib/util/api.js";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* "Block sender" and "Never block sender", expressed as the mailbox's own mail filter rules - the server has no blocked-senders list.
|
|
@@ -75,6 +76,7 @@ async function ensureRule(
|
|
|
75
76
|
addresses: string[],
|
|
76
77
|
folderUid: string,
|
|
77
78
|
prefix: string,
|
|
79
|
+
client?: ApiClient,
|
|
78
80
|
): Promise<{ outcome: "created" | "existing" | "enabled"; rule: MailFilterRule }> {
|
|
79
81
|
const found = rules.find((rule) => isSenderRule(rule, addresses, folderUid));
|
|
80
82
|
if (found) {
|
|
@@ -83,24 +85,30 @@ async function ensureRule(
|
|
|
83
85
|
}
|
|
84
86
|
// The whole rule, as the filters page saves one: the update replaces the record.
|
|
85
87
|
const { uid, version, name, sequence, stopProcessingRules, conditions, actions } = found;
|
|
86
|
-
return {
|
|
88
|
+
return {
|
|
89
|
+
outcome: "enabled",
|
|
90
|
+
rule: await updateMailFilterRule({ uid, version, name, enabled: true, sequence, stopProcessingRules, conditions, actions }, client),
|
|
91
|
+
};
|
|
87
92
|
}
|
|
88
|
-
const rule = await createMailFilterRule(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
93
|
+
const rule = await createMailFilterRule(
|
|
94
|
+
{
|
|
95
|
+
mailboxUid,
|
|
96
|
+
name: `${prefix}${addresses[0]}`,
|
|
97
|
+
sequence: firstSequence(rules),
|
|
98
|
+
stopProcessingRules: true,
|
|
99
|
+
conditions: { fromContains: addresses },
|
|
100
|
+
actions: [{ type: "move_to_folder", folderUid }],
|
|
101
|
+
},
|
|
102
|
+
client,
|
|
103
|
+
);
|
|
96
104
|
return { outcome: "created", rule };
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
/** Takes away every rule that is `folderUid` for `addresses`. */
|
|
100
|
-
async function removeRules(rules: MailFilterRule[], addresses: string[], folderUid: string): Promise<MailFilterRule[]> {
|
|
108
|
+
async function removeRules(rules: MailFilterRule[], addresses: string[], folderUid: string, client?: ApiClient): Promise<MailFilterRule[]> {
|
|
101
109
|
const doomed = rules.filter((rule) => isSenderRule(rule, addresses, folderUid));
|
|
102
110
|
for (const rule of doomed) {
|
|
103
|
-
await deleteMailFilterRule(rule.uid, rule.version);
|
|
111
|
+
await deleteMailFilterRule(rule.uid, rule.version, client);
|
|
104
112
|
}
|
|
105
113
|
return doomed;
|
|
106
114
|
}
|
|
@@ -110,10 +118,16 @@ async function removeRules(rules: MailFilterRule[], addresses: string[], folderU
|
|
|
110
118
|
* usually has both) goes to `junkFolderUid` from now on. Idempotent: the rule is made once, and a rule that was turned off is turned on.
|
|
111
119
|
* A "Never block" rule for the same sender is taken away, since the two would fight.
|
|
112
120
|
*/
|
|
113
|
-
export async function blockSender(
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
export async function blockSender(
|
|
122
|
+
mailboxUid: string,
|
|
123
|
+
addresses: string[],
|
|
124
|
+
junkFolderUid: string,
|
|
125
|
+
inboxFolderUid: string,
|
|
126
|
+
client?: ApiClient,
|
|
127
|
+
): Promise<BlockResult> {
|
|
128
|
+
const rules = await listMailFilterRules(mailboxUid, { limit: RULE_LIMIT }, client);
|
|
129
|
+
await removeRules(rules, addresses, inboxFolderUid, client);
|
|
130
|
+
return ensureRule(rules, mailboxUid, addresses, junkFolderUid, BLOCK_RULE_PREFIX, client);
|
|
117
131
|
}
|
|
118
132
|
|
|
119
133
|
/** Never blocks a sender: takes away the block rule for `addresses` and makes (once) the rule that keeps their mail in the Inbox. */
|
|
@@ -122,20 +136,22 @@ export async function neverBlockSender(
|
|
|
122
136
|
addresses: string[],
|
|
123
137
|
junkFolderUid: string,
|
|
124
138
|
inboxFolderUid: string,
|
|
139
|
+
client?: ApiClient,
|
|
125
140
|
): Promise<NeverBlockResult> {
|
|
126
|
-
const rules = await listMailFilterRules(mailboxUid, { limit: RULE_LIMIT });
|
|
127
|
-
const removed = await removeRules(rules, addresses, junkFolderUid);
|
|
141
|
+
const rules = await listMailFilterRules(mailboxUid, { limit: RULE_LIMIT }, client);
|
|
142
|
+
const removed = await removeRules(rules, addresses, junkFolderUid, client);
|
|
128
143
|
const kept = await ensureRule(
|
|
129
144
|
rules.filter((rule) => !removed.includes(rule)),
|
|
130
145
|
mailboxUid,
|
|
131
146
|
addresses,
|
|
132
147
|
inboxFolderUid,
|
|
133
148
|
NEVER_BLOCK_RULE_PREFIX,
|
|
149
|
+
client,
|
|
134
150
|
);
|
|
135
151
|
return { removed, ...kept };
|
|
136
152
|
}
|
|
137
153
|
|
|
138
154
|
/** Takes back a rule this module made (the notification's Undo). */
|
|
139
|
-
export function removeSenderRule(rule: MailFilterRule): Promise<void> {
|
|
140
|
-
return deleteMailFilterRule(rule.uid, rule.version);
|
|
155
|
+
export function removeSenderRule(rule: MailFilterRule, client?: ApiClient): Promise<void> {
|
|
156
|
+
return deleteMailFilterRule(rule.uid, rule.version, client);
|
|
141
157
|
}
|
|
@@ -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 { Folder, Mailbox, Message, listFolders, listMailboxes } from "../../../lib/mail/mailApi.js";
|
|
8
9
|
import { FOLDER_ORDER, FolderChange, MAIL_FOLDER_TYPES, isMailFolder, knownFolderUids, reconcileFolders, removeFolder, upsertFolder } from "./folderTree.js";
|
|
9
10
|
import type { MailboxFolders } from "../components/mail/layout/MailShell.js";
|
|
10
11
|
import { orderMailboxes } from "./primaryMailbox.js";
|
|
@@ -75,6 +76,7 @@ export interface UseMailConnectionOptions {
|
|
|
75
76
|
* state from `MailConnectionContext` when there is a frame, and runs this hook itself when there isn't (a page rendered outside the router).
|
|
76
77
|
*/
|
|
77
78
|
export function useMailConnection({ userUid, enabled, open }: UseMailConnectionOptions): MailConnection {
|
|
79
|
+
const client = useApiClient();
|
|
78
80
|
const [status, setStatus] = useState<MailConnectionStatus>("checking");
|
|
79
81
|
const [error, setError] = useState<string | null>(null);
|
|
80
82
|
const [mailboxes, setMailboxes] = useState<Mailbox[]>([]);
|
|
@@ -85,7 +87,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
85
87
|
if (!userUid || !enabled) {
|
|
86
88
|
return;
|
|
87
89
|
}
|
|
88
|
-
listMailboxes({ limit: MAILBOX_LIST_LIMIT })
|
|
90
|
+
listMailboxes({ limit: MAILBOX_LIST_LIMIT }, client)
|
|
89
91
|
.then((result) => {
|
|
90
92
|
// The caller's own mailbox first, then the others: every sidebar, picker and default below follows this order.
|
|
91
93
|
setMailboxes(orderMailboxes(result, userUid));
|
|
@@ -95,7 +97,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
95
97
|
setError(err instanceof ApiRequestError ? err.message : "Could not load your mailboxes.");
|
|
96
98
|
setStatus("error");
|
|
97
99
|
});
|
|
98
|
-
}, [userUid, enabled]);
|
|
100
|
+
}, [userUid, enabled, client]);
|
|
99
101
|
|
|
100
102
|
// Fans out one listFolders() call per accessible mailbox in parallel - each call catches its own failure into a MailboxFolders.error
|
|
101
103
|
// rather than letting Promise.all reject, so one mailbox's fetch failure renders that section's own inline Alert instead of blanking out
|
|
@@ -111,7 +113,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
111
113
|
setFoldersLoading(true);
|
|
112
114
|
void Promise.all(
|
|
113
115
|
mailboxes.map((mailbox) =>
|
|
114
|
-
listFolders(mailbox.uid)
|
|
116
|
+
listFolders(mailbox.uid, client)
|
|
115
117
|
.then((result): MailboxFolders => ({ mailbox, folders: result.filter(isMailFolder) }))
|
|
116
118
|
.catch(
|
|
117
119
|
(err): MailboxFolders => ({
|
|
@@ -124,7 +126,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
124
126
|
)
|
|
125
127
|
.then(setMailboxFolders)
|
|
126
128
|
.finally(() => setFoldersLoading(false));
|
|
127
|
-
}, [mailboxes]);
|
|
129
|
+
}, [mailboxes, client]);
|
|
128
130
|
|
|
129
131
|
/** Files a newly created folder under its own mailbox, leaving every other mailbox's list untouched - and ignoring a type the
|
|
130
132
|
* sidebar doesn't list at all, the same filter the fetch above applies. One already there (another client's create event can arrive
|
|
@@ -154,7 +156,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
154
156
|
onFolderDeleted,
|
|
155
157
|
onFoldersListed,
|
|
156
158
|
onMessageCreated: notifications.announce,
|
|
157
|
-
onSendEvent: handleSendEvent,
|
|
159
|
+
onSendEvent: (event) => handleSendEvent(event, client),
|
|
158
160
|
});
|
|
159
161
|
const noteFolderUids = useCallback(
|
|
160
162
|
(folderUids: Iterable<string>) => {
|
|
@@ -179,8 +181,8 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
179
181
|
|
|
180
182
|
// 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
|
|
181
183
|
// the server answers (see `sendJob.ts`); once it accepted one, the folders are read again, since the Outbox may not have existed yet.
|
|
182
|
-
const latestRef = useRef({ mailboxFolders, folderCounts });
|
|
183
|
-
latestRef.current = { mailboxFolders, folderCounts };
|
|
184
|
+
const latestRef = useRef({ mailboxFolders, folderCounts, client });
|
|
185
|
+
latestRef.current = { mailboxFolders, folderCounts, client };
|
|
184
186
|
useEffect(() => {
|
|
185
187
|
if (!userUid || !enabled) {
|
|
186
188
|
return;
|
|
@@ -195,7 +197,7 @@ export function useMailConnection({ userUid, enabled, open }: UseMailConnectionO
|
|
|
195
197
|
// The server accepted a message: the Outbox (and, on an older server, Sent Items) may just have been made. The counts' read-back lists
|
|
196
198
|
// every mailbox's folders and files the new ones (`onFoldersListed`); this reads the one mailbox at once.
|
|
197
199
|
latestRef.current.folderCounts.refresh(0);
|
|
198
|
-
listFolders(mailboxUid).then(onFoldersListed, () => undefined);
|
|
200
|
+
listFolders(mailboxUid, latestRef.current.client).then(onFoldersListed, () => undefined);
|
|
199
201
|
},
|
|
200
202
|
);
|
|
201
203
|
}, [userUid, enabled, onFoldersListed]);
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { Folder, Mailbox, Message } from "
|
|
7
|
-
import { getPushClient, PushEvent } from "
|
|
8
|
-
import { SendEvent, parseSendEvent } from "
|
|
6
|
+
import { Folder, Mailbox, Message } from "../../../lib/mail/mailApi.js";
|
|
7
|
+
import { getPushClient, PushEvent } from "../../../lib/mail/pushClient.js";
|
|
8
|
+
import { SendEvent, parseSendEvent } from "../../../lib/mail/sendEvents.js";
|
|
9
9
|
import type { MailboxFolders } from "../components/mail/layout/MailShell.js";
|
|
10
10
|
import { SIGN_OUT_CHANNEL } from "../search/localIndexRpcClient.js";
|
|
11
11
|
import { FolderCounts, useFolderCounts } from "./folderCounts.js";
|
|
@@ -3,29 +3,52 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useState } from "react";
|
|
6
|
-
import type { Mailbox } from "
|
|
7
|
-
import { getMyMailboxAccess } from "
|
|
6
|
+
import type { Mailbox } from "../../../lib/mail/mailApi.js";
|
|
7
|
+
import { getMyMailboxAccess } from "../../../lib/mail/mailboxAccessApi.js";
|
|
8
|
+
import type { ApiClient } from "../../../lib/util/api.js";
|
|
9
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
8
10
|
|
|
9
|
-
/** What the server said about the caller's update access to a mailbox, remembered per mailbox for the page load
|
|
11
|
+
/** What the server said about the caller's update access to a mailbox, remembered per mailbox for the page load - for the
|
|
12
|
+
* default global client (no `ApiClientContext.Provider` above the caller). */
|
|
10
13
|
const answers = new Map<string, Promise<boolean | undefined>>();
|
|
11
14
|
|
|
12
|
-
/**
|
|
15
|
+
/** The same, per explicit `ApiClient` instance (each of `tauri-client`'s accounts has its own), so two accounts never
|
|
16
|
+
* answer each other's question even if their mailbox uids ever collided. A `WeakMap` so an account's cache is dropped
|
|
17
|
+
* with its `ApiClient` rather than growing forever. */
|
|
18
|
+
const clientAnswers = new WeakMap<ApiClient, Map<string, Promise<boolean | undefined>>>();
|
|
19
|
+
|
|
20
|
+
/** The cache to use for `client` (`answers` itself for the default, undefined case). */
|
|
21
|
+
function cacheFor(client: ApiClient | undefined): Map<string, Promise<boolean | undefined>> {
|
|
22
|
+
if (!client) {
|
|
23
|
+
return answers;
|
|
24
|
+
}
|
|
25
|
+
let cache = clientAnswers.get(client);
|
|
26
|
+
if (!cache) {
|
|
27
|
+
cache = new Map();
|
|
28
|
+
clientAnswers.set(client, cache);
|
|
29
|
+
}
|
|
30
|
+
return cache;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Forgets every remembered answer of the default global client - for the tests, and anything that changes the caller's
|
|
34
|
+
* access mid-session. An explicit `ApiClient`'s own cache is scoped to that instance and needs no separate clearing. */
|
|
13
35
|
export function clearMailboxUpdateAccessCache(): void {
|
|
14
36
|
answers.clear();
|
|
15
37
|
}
|
|
16
38
|
|
|
17
39
|
/** 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). */
|
|
18
|
-
function fetchUpdateAccess(mailboxUid: string): Promise<boolean | undefined> {
|
|
19
|
-
|
|
40
|
+
function fetchUpdateAccess(mailboxUid: string, client: ApiClient | undefined): Promise<boolean | undefined> {
|
|
41
|
+
const cache = cacheFor(client);
|
|
42
|
+
let answer = cache.get(mailboxUid);
|
|
20
43
|
if (!answer) {
|
|
21
|
-
answer = getMyMailboxAccess(mailboxUid).then(
|
|
44
|
+
answer = getMyMailboxAccess(mailboxUid, client).then(
|
|
22
45
|
(access) => access.canUpdate,
|
|
23
46
|
() => {
|
|
24
|
-
|
|
47
|
+
cache.delete(mailboxUid);
|
|
25
48
|
return undefined;
|
|
26
49
|
},
|
|
27
50
|
);
|
|
28
|
-
|
|
51
|
+
cache.set(mailboxUid, answer);
|
|
29
52
|
}
|
|
30
53
|
return answer;
|
|
31
54
|
}
|
|
@@ -38,6 +61,7 @@ function fetchUpdateAccess(mailboxUid: string): Promise<boolean | undefined> {
|
|
|
38
61
|
* that then says why it failed.
|
|
39
62
|
*/
|
|
40
63
|
export function useMailboxUpdateAccess(mailbox: Mailbox | undefined): boolean {
|
|
64
|
+
const client = useApiClient();
|
|
41
65
|
const uid = mailbox?.uid;
|
|
42
66
|
const delegated = mailbox?.accessRole === "delegate";
|
|
43
67
|
const [writable, setWritable] = useState(true);
|
|
@@ -47,7 +71,7 @@ export function useMailboxUpdateAccess(mailbox: Mailbox | undefined): boolean {
|
|
|
47
71
|
return;
|
|
48
72
|
}
|
|
49
73
|
let cancelled = false;
|
|
50
|
-
void fetchUpdateAccess(uid).then((canUpdate) => {
|
|
74
|
+
void fetchUpdateAccess(uid, client).then((canUpdate) => {
|
|
51
75
|
if (!cancelled && canUpdate === false) {
|
|
52
76
|
setWritable(false);
|
|
53
77
|
}
|
|
@@ -55,6 +79,6 @@ export function useMailboxUpdateAccess(mailbox: Mailbox | undefined): boolean {
|
|
|
55
79
|
return () => {
|
|
56
80
|
cancelled = true;
|
|
57
81
|
};
|
|
58
|
-
}, [uid, delegated]);
|
|
82
|
+
}, [uid, delegated, client]);
|
|
59
83
|
return writable;
|
|
60
84
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useEffect, useRef } from "react";
|
|
6
|
-
import type { Message } from "
|
|
6
|
+
import type { Message } from "../../../lib/mail/mailApi.js";
|
|
7
|
+
import { useApiClient } from "../../../lib/util/apiClientContext.js";
|
|
7
8
|
import { useMailShell } from "../components/mail/layout/MailShell.js";
|
|
8
9
|
import { setReadState } from "./messageReadState.js";
|
|
9
10
|
|
|
@@ -19,10 +20,11 @@ import { setReadState } from "./messageReadState.js";
|
|
|
19
20
|
*/
|
|
20
21
|
export function useMarkMessageRead(message: Message | null, onPatched: (updated: Message, previous?: Message) => void): void {
|
|
21
22
|
const { trackMessageChange } = useMailShell();
|
|
23
|
+
const client = useApiClient();
|
|
22
24
|
const openUidRef = useRef<string | undefined>(undefined);
|
|
23
25
|
const requestedRef = useRef<Set<string>>(new Set());
|
|
24
|
-
const latestRef = useRef({ onPatched, trackMessageChange });
|
|
25
|
-
latestRef.current = { onPatched, trackMessageChange };
|
|
26
|
+
const latestRef = useRef({ onPatched, trackMessageChange, client });
|
|
27
|
+
latestRef.current = { onPatched, trackMessageChange, client };
|
|
26
28
|
|
|
27
29
|
useEffect(() => {
|
|
28
30
|
if (message?.uid !== openUidRef.current) {
|
|
@@ -39,9 +41,14 @@ export function useMarkMessageRead(message: Message | null, onPatched: (updated:
|
|
|
39
41
|
if (message.flags.read === true) {
|
|
40
42
|
return;
|
|
41
43
|
}
|
|
42
|
-
void setReadState(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
void setReadState(
|
|
45
|
+
message,
|
|
46
|
+
true,
|
|
47
|
+
{
|
|
48
|
+
patch: (updated, previous) => latestRef.current.onPatched(updated, previous),
|
|
49
|
+
track: (previous, next) => latestRef.current.trackMessageChange(previous, next),
|
|
50
|
+
},
|
|
51
|
+
latestRef.current.client,
|
|
52
|
+
);
|
|
46
53
|
}, [message]);
|
|
47
54
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import type { Mailbox, Message } from "
|
|
6
|
+
import type { Mailbox, Message } from "../../../lib/mail/mailApi.js";
|
|
7
7
|
import type { MailboxFolders } from "../components/mail/layout/MailShell.js";
|
|
8
8
|
import {
|
|
9
9
|
DesktopPermission,
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { ReactElement, useRef, useState } from "react";
|
|
6
|
-
import type { Message } from "
|
|
6
|
+
import type { Message } from "../../../lib/mail/mailApi.js";
|
|
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";
|
|
@@ -60,6 +61,7 @@ interface Pending {
|
|
|
60
61
|
*/
|
|
61
62
|
export function usePermanentDelete(): PermanentDelete {
|
|
62
63
|
const { trackMessageChange, refreshFolderCounts } = useMailShell();
|
|
64
|
+
const client = useApiClient();
|
|
63
65
|
const [pending, setPending] = useState<Pending | null>(null);
|
|
64
66
|
const [running, setRunning] = useState(false);
|
|
65
67
|
// Set at once (state is a render later), so a key pressed twice does not open two dialogs.
|
|
@@ -105,7 +107,7 @@ export function usePermanentDelete(): PermanentDelete {
|
|
|
105
107
|
const { request } = pendingRef.current!;
|
|
106
108
|
setRunning(true);
|
|
107
109
|
if (request.kind === "messages") {
|
|
108
|
-
const outcome = await purgeMessages(request.messages);
|
|
110
|
+
const outcome = await purgeMessages(request.messages, client);
|
|
109
111
|
afterDeleted(outcome.deleted);
|
|
110
112
|
notifyPurged(outcome);
|
|
111
113
|
finish(outcome);
|
|
@@ -113,7 +115,7 @@ export function usePermanentDelete(): PermanentDelete {
|
|
|
113
115
|
}
|
|
114
116
|
let outcome: EmptyFolderOutcome;
|
|
115
117
|
try {
|
|
116
|
-
outcome = await purgeFolder(request.folder.uid);
|
|
118
|
+
outcome = await purgeFolder(request.folder.uid, undefined, client);
|
|
117
119
|
} catch (err) {
|
|
118
120
|
notifyApiError(err, `Couldn't empty ${request.folder.name}`);
|
|
119
121
|
// Part of it may have gone before the failure: the caller reloads rather than assume nothing did.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import type { Branding } from "
|
|
5
|
+
import type { Branding } from "../../../lib/branding/brandingApi.js";
|
|
6
6
|
|
|
7
7
|
/** The name the deployment goes by in the browser tab: its branding title, else its company name, else RapidMX. */
|
|
8
8
|
export function brandName(branding?: Pick<Branding, "title" | "companyName"> | null): string {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
HiOutlineInformationCircle,
|
|
14
14
|
HiOutlineXMark,
|
|
15
15
|
} from "react-icons/hi2";
|
|
16
|
-
import CopyButton from "
|
|
16
|
+
import CopyButton from "../../../lib/components/buttons/CopyButton.js";
|
|
17
17
|
import { NotificationAction, NotificationKind, NotificationView, dismiss, setAllPaused, setPaused } from "./store.js";
|
|
18
18
|
import { useNotifications } from "./useNotifications.js";
|
|
19
19
|
import { useSystemErrorNotifications } from "./systemErrors.js";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { useEffect, useRef } from "react";
|
|
6
|
-
import Modal from "
|
|
7
|
-
import CopyButton from "
|
|
6
|
+
import Modal from "../../../lib/components/overlays/Modal.js";
|
|
7
|
+
import CopyButton from "../../../lib/components/buttons/CopyButton.js";
|
|
8
8
|
import { HistoryEntry, NotificationKind } from "./store.js";
|
|
9
9
|
import { useNotifications } from "./useNotifications.js";
|
|
10
10
|
|