@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
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
* The cache is dropped (`clearPinnedSignerCache()`) whenever a key session locks (subscribed on first use), on sign-out
|
|
17
17
|
* (`AppShell`), and after the reader adds, edits or deletes contacts (the contacts pages) - so a contact removed
|
|
18
18
|
* because its key was revoked doesn't keep vouching for signatures until the TTL runs out.
|
|
19
|
+
*
|
|
20
|
+
* **Explicit-client callers get their own cache**, a `WeakMap<ApiClient, Map<...>>` alongside the default
|
|
21
|
+
* global-path `Map` - the same split `useMailboxUpdateAccess.ts` already uses, for the same reason: two
|
|
22
|
+
* `tauri-client` accounts must never answer each other's "who does this sender's key belong to" question from
|
|
23
|
+
* one shared cache keyed only by `mailboxUid` (mailbox uids are not guaranteed unique across accounts/servers).
|
|
19
24
|
*/
|
|
20
25
|
import {
|
|
21
26
|
Contact,
|
|
@@ -25,18 +30,38 @@ import {
|
|
|
25
30
|
listContacts,
|
|
26
31
|
pinnedSigningFingerprintsFor,
|
|
27
32
|
signerKeyStateFor,
|
|
28
|
-
} from "
|
|
33
|
+
} from "../../../../lib/contacts/contactsApi.js";
|
|
29
34
|
import { keyPinnedSince } from "../contacts/contactKeys.js";
|
|
30
|
-
import { listFolders } from "
|
|
31
|
-
import { subscribeKeySession } from "
|
|
35
|
+
import { listFolders } from "../../../../lib/mail/mailApi.js";
|
|
36
|
+
import { subscribeKeySession } from "../../../../lib/crypto/keySession.js";
|
|
37
|
+
import type { ApiClient } from "../../../../lib/util/api.js";
|
|
32
38
|
|
|
33
39
|
/** How long one mailbox's loaded contact list is reused before it is fetched again. */
|
|
34
40
|
export const CONTACTS_CACHE_TTL_MS = 60_000;
|
|
35
41
|
|
|
36
|
-
|
|
42
|
+
interface ContactsCacheEntry {
|
|
43
|
+
loadedAt: number;
|
|
44
|
+
contacts: Promise<Contact[]>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const contactsCache = new Map<string, ContactsCacheEntry>();
|
|
48
|
+
const contactsCacheByClient = new WeakMap<ApiClient, Map<string, ContactsCacheEntry>>();
|
|
49
|
+
|
|
50
|
+
function cacheFor(client: ApiClient | undefined): Map<string, ContactsCacheEntry> {
|
|
51
|
+
if (!client) {
|
|
52
|
+
return contactsCache;
|
|
53
|
+
}
|
|
54
|
+
let cache = contactsCacheByClient.get(client);
|
|
55
|
+
if (!cache) {
|
|
56
|
+
cache = new Map();
|
|
57
|
+
contactsCacheByClient.set(client, cache);
|
|
58
|
+
}
|
|
59
|
+
return cache;
|
|
60
|
+
}
|
|
37
61
|
|
|
38
|
-
/** Forgets every cached contact list - on sign-out, a key-session lock, after the
|
|
39
|
-
* in tests.
|
|
62
|
+
/** Forgets every cached contact list for the default global path - on sign-out, a key-session lock, after the
|
|
63
|
+
* reader changes their contacts, and in tests. Does not clear any explicit-client cache: those are scoped to
|
|
64
|
+
* their own `ApiClient` and garbage-collected with it, with no shared "the app signed out" moment to clear on. */
|
|
40
65
|
export function clearPinnedSignerCache(): void {
|
|
41
66
|
contactsCache.clear();
|
|
42
67
|
}
|
|
@@ -57,12 +82,12 @@ function subscribeToLocksOnce(): void {
|
|
|
57
82
|
});
|
|
58
83
|
}
|
|
59
84
|
|
|
60
|
-
async function loadMailboxContacts(mailboxUid: string): Promise<Contact[]> {
|
|
61
|
-
const folders = await listFolders(mailboxUid);
|
|
85
|
+
async function loadMailboxContacts(mailboxUid: string, client: ApiClient | undefined): Promise<Contact[]> {
|
|
86
|
+
const folders = await listFolders(mailboxUid, client);
|
|
62
87
|
const contacts: Contact[] = [];
|
|
63
88
|
for (const folder of folders.filter((f) => f.type === "contacts")) {
|
|
64
89
|
for (let page = 0; page < PINNED_FINGERPRINT_MAX_PAGES; page++) {
|
|
65
|
-
const batch = await listContacts(folder.uid, { limit: PINNED_FINGERPRINT_PAGE_SIZE, page });
|
|
90
|
+
const batch = await listContacts(folder.uid, { limit: PINNED_FINGERPRINT_PAGE_SIZE, page }, client);
|
|
66
91
|
contacts.push(...batch);
|
|
67
92
|
if (batch.length < PINNED_FINGERPRINT_PAGE_SIZE) {
|
|
68
93
|
break;
|
|
@@ -73,15 +98,16 @@ async function loadMailboxContacts(mailboxUid: string): Promise<Contact[]> {
|
|
|
73
98
|
}
|
|
74
99
|
|
|
75
100
|
/** `mailboxUid`'s contacts, from the cache when fresh. Rejects if they can't be loaded. */
|
|
76
|
-
function cachedMailboxContacts(mailboxUid: string): Promise<Contact[]> {
|
|
101
|
+
function cachedMailboxContacts(mailboxUid: string, client: ApiClient | undefined): Promise<Contact[]> {
|
|
77
102
|
subscribeToLocksOnce();
|
|
78
|
-
|
|
103
|
+
const cache = cacheFor(client);
|
|
104
|
+
let entry = cache.get(mailboxUid);
|
|
79
105
|
if (!entry || Date.now() - entry.loadedAt > CONTACTS_CACHE_TTL_MS) {
|
|
80
|
-
const created = { loadedAt: Date.now(), contacts: loadMailboxContacts(mailboxUid) };
|
|
81
|
-
|
|
106
|
+
const created = { loadedAt: Date.now(), contacts: loadMailboxContacts(mailboxUid, client) };
|
|
107
|
+
cache.set(mailboxUid, created);
|
|
82
108
|
created.contacts.catch(() => {
|
|
83
|
-
if (
|
|
84
|
-
|
|
109
|
+
if (cache.get(mailboxUid) === created) {
|
|
110
|
+
cache.delete(mailboxUid);
|
|
85
111
|
}
|
|
86
112
|
});
|
|
87
113
|
entry = created;
|
|
@@ -90,8 +116,8 @@ function cachedMailboxContacts(mailboxUid: string): Promise<Contact[]> {
|
|
|
90
116
|
}
|
|
91
117
|
|
|
92
118
|
/** The sender `address`'s pinned signing fingerprints from `mailboxUid`'s contacts. Rejects if they can't be loaded. */
|
|
93
|
-
export async function getPinnedSignerFingerprints(mailboxUid: string, address: string): Promise<string[]> {
|
|
94
|
-
return pinnedSigningFingerprintsFor(await cachedMailboxContacts(mailboxUid), address);
|
|
119
|
+
export async function getPinnedSignerFingerprints(mailboxUid: string, address: string, client?: ApiClient): Promise<string[]> {
|
|
120
|
+
return pinnedSigningFingerprintsFor(await cachedMailboxContacts(mailboxUid, client), address);
|
|
95
121
|
}
|
|
96
122
|
|
|
97
123
|
/** A sender's signing-key state (`signerKeyStateFor()`) plus what a key-changed notice needs to show and link. */
|
|
@@ -104,8 +130,8 @@ export interface SenderKeyState extends SignerKeyState {
|
|
|
104
130
|
|
|
105
131
|
/** The sender `address`'s signing-key state from `mailboxUid`'s (cached) contacts, for a "signing key changed" comparison
|
|
106
132
|
* or to spot a recorded conflict. Reads stored contacts only. Rejects if they can't be loaded. */
|
|
107
|
-
export async function getSignerKeyState(mailboxUid: string, address: string): Promise<SenderKeyState> {
|
|
108
|
-
const contacts = await cachedMailboxContacts(mailboxUid);
|
|
133
|
+
export async function getSignerKeyState(mailboxUid: string, address: string, client?: ApiClient): Promise<SenderKeyState> {
|
|
134
|
+
const contacts = await cachedMailboxContacts(mailboxUid, client);
|
|
109
135
|
const state = signerKeyStateFor(contacts, address);
|
|
110
136
|
const wanted = address.trim().toLowerCase();
|
|
111
137
|
const matching = contacts.filter((contact) => contact.emails.some((email) => email.address.trim().toLowerCase() === wanted));
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
6
|
import { HiOutlineExclamationTriangle, HiOutlineLockClosed } from "react-icons/hi2";
|
|
7
|
-
import Alert from "
|
|
8
|
-
import Button from "
|
|
7
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
8
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
9
9
|
import { useResolvedTheme } from "../../../appearance/resolvedTheme.js";
|
|
10
10
|
import { formatColour } from "./color.js";
|
|
11
11
|
import { useThemeSurface } from "./themeSurface.js";
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { ApiRequestError, apiUrl } from "
|
|
7
|
-
import type { Attachment } from "
|
|
8
|
-
import type { MimeAttachment } from "
|
|
9
|
-
import Alert from "
|
|
10
|
-
import Button from "
|
|
11
|
-
import Skeleton from "
|
|
6
|
+
import { ApiRequestError, apiUrl } from "../../../../../lib/util/api.js";
|
|
7
|
+
import type { Attachment } from "../../../../../lib/mail/mailApi.js";
|
|
8
|
+
import type { MimeAttachment } from "../../../../../lib/crypto/mime.js";
|
|
9
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
10
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
11
|
+
import Skeleton from "../../../../../lib/components/feedback/Skeleton.js";
|
|
12
12
|
import { useResolvedTheme } from "../../../appearance/resolvedTheme.js";
|
|
13
13
|
import { BodyContent, attachmentSource, cachedBodyContent, fetchBodyContent, makeCidResolver } from "./bodyContent.js";
|
|
14
14
|
import { prepareBodyHtml } from "./bodyHtml.js";
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import ContactAvatar from "
|
|
7
|
-
import Skeleton from "
|
|
8
|
-
import type { MailAddressLike } from "
|
|
6
|
+
import ContactAvatar from "../../../../../lib/components/avatar/ContactAvatar.js";
|
|
7
|
+
import Skeleton from "../../../../../lib/components/feedback/Skeleton.js";
|
|
8
|
+
import type { MailAddressLike } from "../../../../../lib/mail/mailAddress.js";
|
|
9
9
|
import MailAddress from "../MailAddress.js";
|
|
10
10
|
import { UnreadBar, UnreadLabel } from "../unreadStyle.js";
|
|
11
11
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { useMemo } from "react";
|
|
6
|
-
import Alert from "
|
|
7
|
-
import CopyButton from "
|
|
8
|
-
import Drawer from "
|
|
6
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
7
|
+
import CopyButton from "../../../../../lib/components/buttons/CopyButton.js";
|
|
8
|
+
import Drawer from "../../../../../lib/components/overlays/Drawer.js";
|
|
9
9
|
import { MAX_SOURCE_DISPLAY_CHARS, headerText, sourceText } from "./messageExport.js";
|
|
10
10
|
|
|
11
11
|
/** What the dialog is showing a message's source for: the whole of it, or only its header lines ("Message details"). */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import Button from "
|
|
6
|
+
import Button from "../../../../../lib/components/buttons/Button.js";
|
|
7
7
|
import type { OutgoingReply } from "../../../mail/outbox/outgoingReplies.js";
|
|
8
8
|
import MailAddress, { RecipientLine } from "../MailAddress.js";
|
|
9
9
|
import MessageBody from "./MessageBody.js";
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { ApiRequestError, apiUrl } from "
|
|
6
|
-
import { Attachment, attachmentContentUrl } from "
|
|
7
|
-
import type { MimeAttachment } from "
|
|
5
|
+
import { ApiRequestError, apiUrl } from "../../../../../lib/util/api.js";
|
|
6
|
+
import { Attachment, attachmentContentUrl } from "../../../../../lib/mail/mailApi.js";
|
|
7
|
+
import type { MimeAttachment } from "../../../../../lib/crypto/mime.js";
|
|
8
8
|
|
|
9
9
|
/** What a message's body is: server-sanitized HTML, or plain text (a message with no HTML part, or the server's plain-text fallback). */
|
|
10
10
|
export type BodyContent = { kind: "html"; html: string } | { kind: "text"; text: string };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { sanitizeMessageBodyHtml } from "
|
|
5
|
+
import { sanitizeMessageBodyHtml } from "../../../../../lib/mail/messageBodySanitizer.js";
|
|
6
6
|
import { parseColour } from "./color.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import { binaryStringToBytes, extractAddresses, parseMimeEntity } from "
|
|
5
|
+
import { binaryStringToBytes, extractAddresses, parseMimeEntity } from "../../../../../lib/crypto/mime.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* What the reading pane does with a message's raw RFC 5322 source (`getMessageRawContent()`, a binary string): show it, save it as a
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// Copyright (C) 2026 Jean-Philippe Steinmetz
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
|
-
import type { Attachment } from "
|
|
6
|
-
import type { MimeAttachment } from "
|
|
5
|
+
import type { Attachment } from "../../../../../lib/mail/mailApi.js";
|
|
6
|
+
import type { MimeAttachment } from "../../../../../lib/crypto/mime.js";
|
|
7
7
|
import { BodyContent, attachmentSource, makeCidResolver } from "./bodyContent.js";
|
|
8
8
|
import { prepareBodyHtml } from "./bodyHtml.js";
|
|
9
9
|
import { frameCsp } from "./frameDocument.js";
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
moveMessage,
|
|
13
13
|
reportMessage,
|
|
14
14
|
setMessageFlagged,
|
|
15
|
-
} from "
|
|
15
|
+
} from "../../../../../lib/mail/mailApi.js";
|
|
16
16
|
import {
|
|
17
17
|
SenderListsChange,
|
|
18
18
|
addBlockedSender,
|
|
@@ -20,8 +20,9 @@ import {
|
|
|
20
20
|
checkSenderEntry,
|
|
21
21
|
removeBlockedSender,
|
|
22
22
|
removeSafeSender,
|
|
23
|
-
} from "
|
|
24
|
-
import { ApiRequestError } from "
|
|
23
|
+
} from "../../../../../lib/mail/senderListsApi.js";
|
|
24
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
25
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
25
26
|
import type { CountTracker } from "../../../mail/folderCounts.js";
|
|
26
27
|
import { resolveFolderOfType } from "../../../mail/folderOfType.js";
|
|
27
28
|
import { setReadStateMany } from "../../../mail/messageReadState.js";
|
|
@@ -100,6 +101,7 @@ function isNotFound(err: unknown): boolean {
|
|
|
100
101
|
export function useMessageActions(params: MessageActionsParams): MessageActions {
|
|
101
102
|
const { message, newest, remember, folders, inJunk, inDeletedItems, ownAddresses = [], trackMessageChange, onMoved, onChanged, onFolderCreated } = params;
|
|
102
103
|
const [busy, setBusy] = useState(false);
|
|
104
|
+
const client = useApiClient();
|
|
103
105
|
const permanent = usePermanentDelete();
|
|
104
106
|
|
|
105
107
|
/** Runs one action with the card's other actions held meanwhile. */
|
|
@@ -113,7 +115,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
function folderOf(type: Folder["type"], name: string): Promise<string> {
|
|
116
|
-
return resolveFolderOfType(message.mailboxUid, type, name, folders, onFolderCreated);
|
|
118
|
+
return resolveFolderOfType(message.mailboxUid, type, name, folders, onFolderCreated, client);
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
/** The card's part of a message having left its folder for `updated`'s: the folder badges and the local search index. */
|
|
@@ -126,7 +128,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
126
128
|
/** Moves the message into its mailbox's folder of `type`, and tells the folder badges and the local search index. */
|
|
127
129
|
async function moveToType(type: Folder["type"], name: string): Promise<Message> {
|
|
128
130
|
const before = newest();
|
|
129
|
-
const updated = await moveMessage(before, await folderOf(type, name));
|
|
131
|
+
const updated = await moveMessage(before, await folderOf(type, name), client);
|
|
130
132
|
relocated(before, updated);
|
|
131
133
|
return updated;
|
|
132
134
|
}
|
|
@@ -154,7 +156,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
154
156
|
{
|
|
155
157
|
label: "Undo",
|
|
156
158
|
onClick: () => {
|
|
157
|
-
removeSafeSender(message.mailboxUid, safeSender).then(
|
|
159
|
+
removeSafeSender(message.mailboxUid, safeSender, client).then(
|
|
158
160
|
() => notify({ kind: "info", title: `${safeSender} is no longer a safe sender`, message: "This message stays in the Inbox." }),
|
|
159
161
|
(err) => notifyApiError(err, "Couldn't undo trusting this sender"),
|
|
160
162
|
);
|
|
@@ -188,7 +190,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
188
190
|
await exclusive(async () => {
|
|
189
191
|
let result: MessageReportResult;
|
|
190
192
|
try {
|
|
191
|
-
result = await reportMessage(message.uid, kind, { alwaysTrustSender });
|
|
193
|
+
result = await reportMessage(message.uid, kind, { alwaysTrustSender }, client);
|
|
192
194
|
} catch (err) {
|
|
193
195
|
if (isNotFound(err)) {
|
|
194
196
|
await reportByMoving(kind, alwaysTrustSender);
|
|
@@ -225,13 +227,18 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
225
227
|
await exclusive(async () => {
|
|
226
228
|
const before = newest();
|
|
227
229
|
try {
|
|
228
|
-
await setReadStateMany(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
230
|
+
await setReadStateMany(
|
|
231
|
+
[before],
|
|
232
|
+
before.flags.read !== true,
|
|
233
|
+
{
|
|
234
|
+
patch: (updated, previous) => {
|
|
235
|
+
remember(updated);
|
|
236
|
+
onChanged?.(updated, previous);
|
|
237
|
+
},
|
|
238
|
+
track: trackMessageChange,
|
|
232
239
|
},
|
|
233
|
-
|
|
234
|
-
|
|
240
|
+
client,
|
|
241
|
+
);
|
|
235
242
|
} catch (err) {
|
|
236
243
|
notifyApiError(err, "Couldn't update the message");
|
|
237
244
|
}
|
|
@@ -242,7 +249,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
242
249
|
await exclusive(async () => {
|
|
243
250
|
const before = newest();
|
|
244
251
|
try {
|
|
245
|
-
const updated = await setMessageFlagged(before, before.flags.flagged !== true);
|
|
252
|
+
const updated = await setMessageFlagged(before, before.flags.flagged !== true, client);
|
|
246
253
|
remember(updated);
|
|
247
254
|
onChanged?.(updated, before);
|
|
248
255
|
} catch (err) {
|
|
@@ -289,7 +296,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
289
296
|
let result: Awaited<ReturnType<typeof blockSender>>;
|
|
290
297
|
try {
|
|
291
298
|
const [junkUid, inboxUid] = await Promise.all([folderOf("junk", "Junk Email"), folderOf("inbox", "Inbox")]);
|
|
292
|
-
result = await blockSender(message.mailboxUid, addresses, junkUid, inboxUid);
|
|
299
|
+
result = await blockSender(message.mailboxUid, addresses, junkUid, inboxUid, client);
|
|
293
300
|
} catch (err) {
|
|
294
301
|
notifyApiError(err, "Couldn't block this sender");
|
|
295
302
|
return;
|
|
@@ -306,7 +313,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
306
313
|
{
|
|
307
314
|
label: "Undo",
|
|
308
315
|
onClick: () => {
|
|
309
|
-
removeSenderRule(result.rule).then(
|
|
316
|
+
removeSenderRule(result.rule, client).then(
|
|
310
317
|
() => notify({ kind: "info", title: `Unblocked ${address}`, message: "The block was removed. This message stays where it is." }),
|
|
311
318
|
(err) => notifyApiError(err, "Couldn't undo the block"),
|
|
312
319
|
);
|
|
@@ -331,7 +338,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
331
338
|
}
|
|
332
339
|
let added: SenderListsChange;
|
|
333
340
|
try {
|
|
334
|
-
added = await addBlockedSender(message.mailboxUid, listed);
|
|
341
|
+
added = await addBlockedSender(message.mailboxUid, listed, client);
|
|
335
342
|
} catch (err) {
|
|
336
343
|
if (isNotFound(err)) {
|
|
337
344
|
await blockWithRules(all, message.from.address);
|
|
@@ -351,7 +358,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
351
358
|
{
|
|
352
359
|
label: "Undo",
|
|
353
360
|
onClick: () => {
|
|
354
|
-
removeBlockedSender(message.mailboxUid, listed).then(
|
|
361
|
+
removeBlockedSender(message.mailboxUid, listed, client).then(
|
|
355
362
|
() => notify({ kind: "info", title: `Unblocked ${listed}`, message: "The block was removed. This message stays where it is." }),
|
|
356
363
|
(err) => notifyApiError(err, "Couldn't undo the block"),
|
|
357
364
|
);
|
|
@@ -370,7 +377,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
370
377
|
let result: Awaited<ReturnType<typeof neverBlockSender>>;
|
|
371
378
|
try {
|
|
372
379
|
const [junkUid, inboxUid] = await Promise.all([folderOf("junk", "Junk Email"), folderOf("inbox", "Inbox")]);
|
|
373
|
-
result = await neverBlockSender(message.mailboxUid, addresses, junkUid, inboxUid);
|
|
380
|
+
result = await neverBlockSender(message.mailboxUid, addresses, junkUid, inboxUid, client);
|
|
374
381
|
} catch (err) {
|
|
375
382
|
notifyApiError(err, "Couldn't stop blocking this sender");
|
|
376
383
|
return;
|
|
@@ -392,7 +399,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
392
399
|
}
|
|
393
400
|
let added: SenderListsChange;
|
|
394
401
|
try {
|
|
395
|
-
added = await addSafeSender(message.mailboxUid, listed);
|
|
402
|
+
added = await addSafeSender(message.mailboxUid, listed, client);
|
|
396
403
|
} catch (err) {
|
|
397
404
|
if (isNotFound(err)) {
|
|
398
405
|
await neverBlockWithRules(all, message.from.address);
|
|
@@ -413,7 +420,7 @@ export function useMessageActions(params: MessageActionsParams): MessageActions
|
|
|
413
420
|
{
|
|
414
421
|
label: "Undo",
|
|
415
422
|
onClick: () => {
|
|
416
|
-
removeSafeSender(message.mailboxUid, listed).then(
|
|
423
|
+
removeSafeSender(message.mailboxUid, listed, client).then(
|
|
417
424
|
() => notify({ kind: "info", title: `${listed} is no longer a safe sender`, message: "Its mail is filtered as usual again." }),
|
|
418
425
|
(err) => notifyApiError(err, "Couldn't undo the change"),
|
|
419
426
|
);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import type { Message } from "
|
|
6
|
+
import type { Message } from "../../../../lib/mail/mailApi.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* How an unread message looks in every list of mail (the message list, the conversation list and its child rows, the
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
* evaluation try again, never a retry loop. A stored seal is remembered (`currentVerificationSeal()`) so a message
|
|
19
19
|
* reopened before its list copy is refreshed opens that seal instead of building another.
|
|
20
20
|
*/
|
|
21
|
-
import { ApiRequestError } from "
|
|
22
|
-
import { getKeyVault } from "
|
|
23
|
-
import { subscribeKeySession } from "
|
|
24
|
-
import { type Message, setMessageVerificationSeal } from "
|
|
25
|
-
import type { SealToWrite } from "
|
|
21
|
+
import { ApiClient, ApiRequestError } from "../../../../lib/util/api.js";
|
|
22
|
+
import { getKeyVault } from "../../../../lib/crypto/keyvaultApi.js";
|
|
23
|
+
import { subscribeKeySession } from "../../../../lib/crypto/keySession.js";
|
|
24
|
+
import { type Message, setMessageVerificationSeal } from "../../../../lib/mail/mailApi.js";
|
|
25
|
+
import type { SealToWrite } from "../../../../lib/crypto/messageSecurity.js";
|
|
26
26
|
|
|
27
27
|
/** How long one mailbox's vault generation is reused before it is read again. */
|
|
28
28
|
export const VAULT_GENERATION_TTL_MS = 60_000;
|
|
@@ -59,23 +59,27 @@ function subscribeToLocksOnce(): void {
|
|
|
59
59
|
|
|
60
60
|
/** Reads `mailboxUid`'s current vault `masterKeyGeneration`, uncached: `undefined` when the vault can't be read or
|
|
61
61
|
* reports none. Never rejects. */
|
|
62
|
-
export async function readVaultGeneration(mailboxUid: string): Promise<number | undefined> {
|
|
62
|
+
export async function readVaultGeneration(mailboxUid: string, client?: ApiClient): Promise<number | undefined> {
|
|
63
63
|
try {
|
|
64
|
-
const { masterKeyGeneration } = await getKeyVault(mailboxUid);
|
|
64
|
+
const { masterKeyGeneration } = await getKeyVault(mailboxUid, client);
|
|
65
65
|
return Number.isSafeInteger(masterKeyGeneration) && masterKeyGeneration! >= 0 ? masterKeyGeneration : undefined;
|
|
66
66
|
} catch {
|
|
67
67
|
return undefined;
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
/** `mailboxUid`'s current vault `masterKeyGeneration`, or `undefined` when it can't be read. Never rejects.
|
|
72
|
-
|
|
71
|
+
/** `mailboxUid`'s current vault `masterKeyGeneration`, or `undefined` when it can't be read. Never rejects.
|
|
72
|
+
*
|
|
73
|
+
* The cache below is keyed by `mailboxUid` alone, not by `client` - fine for every caller today (a
|
|
74
|
+
* `mailboxUid` belongs to one account's own `ApiClient`), but worth knowing if a future caller ever reused
|
|
75
|
+
* the same `mailboxUid` string across two different `ApiClient`s. */
|
|
76
|
+
export function getVaultGeneration(mailboxUid: string, client?: ApiClient): Promise<number | undefined> {
|
|
73
77
|
subscribeToLocksOnce();
|
|
74
78
|
const entry = generationCache.get(mailboxUid);
|
|
75
79
|
if (entry && Date.now() - entry.loadedAt <= VAULT_GENERATION_TTL_MS) {
|
|
76
80
|
return entry.generation;
|
|
77
81
|
}
|
|
78
|
-
const created = { loadedAt: Date.now(), generation: readVaultGeneration(mailboxUid) };
|
|
82
|
+
const created = { loadedAt: Date.now(), generation: readVaultGeneration(mailboxUid, client) };
|
|
79
83
|
generationCache.set(mailboxUid, created);
|
|
80
84
|
void created.generation.then((generation) => {
|
|
81
85
|
// Only a readable generation is reused; an unavailable one is read again next time.
|
|
@@ -106,14 +110,14 @@ export function verificationSealPending(messageUid: string, generation: number):
|
|
|
106
110
|
|
|
107
111
|
/** Stores `sealToWrite` on `messageUid`, best effort - see this module's doc comment. Resolves `true` when a request was
|
|
108
112
|
* sent, `false` when the write was skipped as already attempted. Never rejects. */
|
|
109
|
-
export async function sendVerificationSeal(messageUid: string, sealToWrite: SealToWrite): Promise<boolean> {
|
|
113
|
+
export async function sendVerificationSeal(messageUid: string, sealToWrite: SealToWrite, client?: ApiClient): Promise<boolean> {
|
|
110
114
|
const key = `${messageUid}:${sealToWrite.masterKeyGeneration}`;
|
|
111
115
|
if (attemptedWrites.has(key)) {
|
|
112
116
|
return false;
|
|
113
117
|
}
|
|
114
118
|
attemptedWrites.add(key);
|
|
115
119
|
try {
|
|
116
|
-
await setMessageVerificationSeal(messageUid, sealToWrite.seal, sealToWrite.masterKeyGeneration);
|
|
120
|
+
await setMessageVerificationSeal(messageUid, sealToWrite.seal, sealToWrite.masterKeyGeneration, client);
|
|
117
121
|
storedSeals.set(messageUid, sealToWrite);
|
|
118
122
|
} catch (err) {
|
|
119
123
|
// `VerificationSealConflictError` is an `ApiRequestError` with status 409.
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
* answer arrives.
|
|
19
19
|
*/
|
|
20
20
|
import { useEffect, useMemo, useState } from "react";
|
|
21
|
-
import type { Mailbox } from "
|
|
22
|
-
import { getMyMailboxAccess } from "
|
|
21
|
+
import type { Mailbox } from "../../../../lib/mail/mailApi.js";
|
|
22
|
+
import { getMyMailboxAccess } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
23
|
+
import type { ApiClient } from "../../../../lib/util/api.js";
|
|
24
|
+
import { useApiClient } from "../../../../lib/util/apiClientContext.js";
|
|
23
25
|
|
|
24
26
|
/** `true` writable, `false` known view-only, `undefined` couldn't tell (treated as writable). */
|
|
25
27
|
export type MailboxWritability = boolean | undefined;
|
|
@@ -42,15 +44,19 @@ export function peekMailboxWritability(mailbox: Mailbox, userUid: string | undef
|
|
|
42
44
|
return isImplicitlyWritable(mailbox, userUid, trusted) ? true : settled.get(mailbox.uid);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
/** Whether the caller can create items in `mailbox`. Never rejects.
|
|
46
|
-
|
|
47
|
+
/** Whether the caller can create items in `mailbox`. Never rejects.
|
|
48
|
+
*
|
|
49
|
+
* `inFlight`/`settled` are keyed by `mailbox.uid` alone, not by `client` - fine for every caller today (a
|
|
50
|
+
* mailbox uid belongs to one account's own `ApiClient`), but worth knowing if a future caller ever reused
|
|
51
|
+
* the same mailbox uid across two different `ApiClient`s. */
|
|
52
|
+
export function getMailboxWritability(mailbox: Mailbox, userUid: string | undefined, trusted?: boolean, client?: ApiClient): Promise<MailboxWritability> {
|
|
47
53
|
const known = peekMailboxWritability(mailbox, userUid, trusted);
|
|
48
54
|
if (known !== undefined) {
|
|
49
55
|
return Promise.resolve(known);
|
|
50
56
|
}
|
|
51
57
|
let request = inFlight.get(mailbox.uid);
|
|
52
58
|
if (!request) {
|
|
53
|
-
request = getMyMailboxAccess(mailbox.uid).then(
|
|
59
|
+
request = getMyMailboxAccess(mailbox.uid, client).then(
|
|
54
60
|
(access) => {
|
|
55
61
|
settled.set(mailbox.uid, access.canCreate);
|
|
56
62
|
inFlight.delete(mailbox.uid);
|
|
@@ -70,11 +76,12 @@ export function getMailboxWritability(mailbox: Mailbox, userUid: string | undefi
|
|
|
70
76
|
/** Per-mailbox writability answers for `mailboxes`, filled in as each one arrives (already-known answers are
|
|
71
77
|
* present from the first render). */
|
|
72
78
|
export function useMailboxWritability(mailboxes: Mailbox[], userUid: string | undefined, trusted?: boolean): Record<string, MailboxWritability> {
|
|
79
|
+
const client = useApiClient();
|
|
73
80
|
const [answers, setAnswers] = useState<Record<string, MailboxWritability>>({});
|
|
74
81
|
useEffect(() => {
|
|
75
82
|
let cancelled = false;
|
|
76
83
|
for (const mailbox of mailboxes) {
|
|
77
|
-
void getMailboxWritability(mailbox, userUid, trusted).then((writable) => {
|
|
84
|
+
void getMailboxWritability(mailbox, userUid, trusted, client).then((writable) => {
|
|
78
85
|
if (!cancelled) {
|
|
79
86
|
setAnswers((prev) => ({ ...prev, [mailbox.uid]: writable }));
|
|
80
87
|
}
|
|
@@ -83,7 +90,7 @@ export function useMailboxWritability(mailboxes: Mailbox[], userUid: string | un
|
|
|
83
90
|
return () => {
|
|
84
91
|
cancelled = true;
|
|
85
92
|
};
|
|
86
|
-
}, [mailboxes, userUid, trusted]);
|
|
93
|
+
}, [mailboxes, userUid, trusted, client]);
|
|
87
94
|
return useMemo(() => {
|
|
88
95
|
const merged: Record<string, MailboxWritability> = {};
|
|
89
96
|
for (const mailbox of mailboxes) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { ReactNode, useState } from "react";
|
|
6
|
-
import Button from "
|
|
6
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
7
7
|
|
|
8
8
|
const INPUT_CLASS =
|
|
9
9
|
"flex-1 text-sm py-2 px-3 border border-border rounded-sm bg-surface text-text focus:outline-none focus:border-primary";
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
6
|
import { HiOutlineCheckCircle, HiOutlineExclamationTriangle, HiOutlineXCircle } from "react-icons/hi2";
|
|
7
|
-
import Alert from "
|
|
8
|
-
import Button from "
|
|
9
|
-
import CopyButton from "
|
|
10
|
-
import type { EnrollmentResult, SignEnrollmentStep } from "
|
|
7
|
+
import Alert from "../../../../lib/components/feedback/Alert.js";
|
|
8
|
+
import Button from "../../../../lib/components/buttons/Button.js";
|
|
9
|
+
import CopyButton from "../../../../lib/components/buttons/CopyButton.js";
|
|
10
|
+
import type { EnrollmentResult, SignEnrollmentStep } from "../../../../lib/crypto/keyvaultApi.js";
|
|
11
11
|
import type { EnrollmentSnapshot } from "../../signing/enrollmentTracker.js";
|
|
12
12
|
import type { SigningEnrollmentInfo } from "../../signing/signingInfo.js";
|
|
13
13
|
import {
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React, { createContext, PropsWithChildren, ReactNode, useContext, useEffect, useMemo, useState } from "react";
|
|
6
6
|
import { HiOutlineBars3 } from "react-icons/hi2";
|
|
7
|
-
import { ApiRequestError } from "
|
|
8
|
-
import Drawer from "
|
|
9
|
-
import { Mailbox, listMailboxes } from "
|
|
10
|
-
import
|
|
11
|
-
import
|
|
7
|
+
import { ApiRequestError } from "../../../../../lib/util/api.js";
|
|
8
|
+
import Drawer from "../../../../../lib/components/overlays/Drawer.js";
|
|
9
|
+
import { Mailbox, listMailboxes } from "../../../../../lib/mail/mailApi.js";
|
|
10
|
+
import { useApiClient } from "../../../../../lib/util/apiClientContext.js";
|
|
11
|
+
import Alert from "../../../../../lib/components/feedback/Alert.js";
|
|
12
|
+
import Skeleton, { SkeletonList } from "../../../../../lib/components/feedback/Skeleton.js";
|
|
12
13
|
import AppShell, { AppShellProps } from "../../layout/AppShell.js";
|
|
13
14
|
import { useLocation, useNavigate } from "../../../navigation/index.js";
|
|
14
15
|
import MailboxProvisioning from "../../layout/MailboxProvisioning.js";
|
|
@@ -93,6 +94,7 @@ export default function SettingsShell({
|
|
|
93
94
|
pluginNav,
|
|
94
95
|
children,
|
|
95
96
|
}: PropsWithChildren<SettingsShellProps>) {
|
|
97
|
+
const client = useApiClient();
|
|
96
98
|
const [status, setStatus] = useState<Status>("checking");
|
|
97
99
|
const [error, setError] = useState<string | null>(null);
|
|
98
100
|
const [mailboxes, setMailboxes] = useState<Mailbox[]>([]);
|
|
@@ -116,7 +118,7 @@ export default function SettingsShell({
|
|
|
116
118
|
if (!userUid) {
|
|
117
119
|
return;
|
|
118
120
|
}
|
|
119
|
-
listMailboxes({ limit: 100 })
|
|
121
|
+
listMailboxes({ limit: 100 }, client)
|
|
120
122
|
.then((result) => {
|
|
121
123
|
setMailboxes(orderMailboxes(result, userUid));
|
|
122
124
|
setStatus("ready");
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
///////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
import React from "react";
|
|
6
|
-
import { ResolvedPrincipal } from "
|
|
6
|
+
import { ResolvedPrincipal } from "../../../../lib/mail/mailboxAccessApi.js";
|
|
7
7
|
import PrincipalResolver, { describePerson } from "./PrincipalResolver.js";
|
|
8
8
|
|
|
9
9
|
export interface PrincipalListFieldProps {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
ResolvedPrincipal,
|
|
9
9
|
resolveMailboxPrincipal,
|
|
10
10
|
setMailboxAccess,
|
|
11
|
-
} from "
|
|
11
|
+
} from "../../../../lib/mail/mailboxAccessApi.js";
|
|
12
12
|
import PrincipalResolver, { describePerson } from "./PrincipalResolver.js";
|
|
13
13
|
|
|
14
14
|
export { describePerson };
|