@nocobase/app-plugin-mail 0.0.0-stage → 1.0.0-beta.11
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/CHANGELOG.md +324 -0
- package/README.md +55 -2
- package/dist/client/components/index.d.ts +19 -0
- package/dist/client/components/index.d.ts.map +1 -0
- package/dist/client/components/index.js +19 -0
- package/dist/client/components/index.js.map +1 -0
- package/dist/client/components/mail-account-card.d.ts +14 -0
- package/dist/client/components/mail-account-card.d.ts.map +1 -0
- package/dist/client/components/mail-account-card.js +18 -0
- package/dist/client/components/mail-account-card.js.map +1 -0
- package/dist/client/components/mail-account-connector.d.ts +32 -0
- package/dist/client/components/mail-account-connector.d.ts.map +1 -0
- package/dist/client/components/mail-account-connector.js +59 -0
- package/dist/client/components/mail-account-connector.js.map +1 -0
- package/dist/client/components/mail-composer.d.ts +4 -0
- package/dist/client/components/mail-composer.d.ts.map +1 -0
- package/dist/client/components/mail-composer.js +312 -0
- package/dist/client/components/mail-composer.js.map +1 -0
- package/dist/client/components/mail-conversation-view.d.ts +64 -0
- package/dist/client/components/mail-conversation-view.d.ts.map +1 -0
- package/dist/client/components/mail-conversation-view.js +196 -0
- package/dist/client/components/mail-conversation-view.js.map +1 -0
- package/dist/client/components/mail-dev-page-shell.d.ts +10 -0
- package/dist/client/components/mail-dev-page-shell.d.ts.map +1 -0
- package/dist/client/components/mail-dev-page-shell.js +7 -0
- package/dist/client/components/mail-dev-page-shell.js.map +1 -0
- package/dist/client/components/mail-html-body.d.ts +9 -0
- package/dist/client/components/mail-html-body.d.ts.map +1 -0
- package/dist/client/components/mail-html-body.js +60 -0
- package/dist/client/components/mail-html-body.js.map +1 -0
- package/dist/client/components/mail-image-resizer.d.ts +10 -0
- package/dist/client/components/mail-image-resizer.d.ts.map +1 -0
- package/dist/client/components/mail-image-resizer.js +168 -0
- package/dist/client/components/mail-image-resizer.js.map +1 -0
- package/dist/client/components/mail-label-manager.d.ts +3 -0
- package/dist/client/components/mail-label-manager.d.ts.map +1 -0
- package/dist/client/components/mail-label-manager.js +145 -0
- package/dist/client/components/mail-label-manager.js.map +1 -0
- package/dist/client/components/mail-label-tag.d.ts +15 -0
- package/dist/client/components/mail-label-tag.d.ts.map +1 -0
- package/dist/client/components/mail-label-tag.js +12 -0
- package/dist/client/components/mail-label-tag.js.map +1 -0
- package/dist/client/components/mail-management-form-actions.d.ts +14 -0
- package/dist/client/components/mail-management-form-actions.d.ts.map +1 -0
- package/dist/client/components/mail-management-form-actions.js +8 -0
- package/dist/client/components/mail-management-form-actions.js.map +1 -0
- package/dist/client/components/mail-management-list-item.d.ts +11 -0
- package/dist/client/components/mail-management-list-item.d.ts.map +1 -0
- package/dist/client/components/mail-management-list-item.js +8 -0
- package/dist/client/components/mail-management-list-item.js.map +1 -0
- package/dist/client/components/mail-message-content.d.ts +9 -0
- package/dist/client/components/mail-message-content.d.ts.map +1 -0
- package/dist/client/components/mail-message-content.js +44 -0
- package/dist/client/components/mail-message-content.js.map +1 -0
- package/dist/client/components/mail-message-list.d.ts +25 -0
- package/dist/client/components/mail-message-list.d.ts.map +1 -0
- package/dist/client/components/mail-message-list.js +77 -0
- package/dist/client/components/mail-message-list.js.map +1 -0
- package/dist/client/components/mail-navigation-icon.d.ts +5 -0
- package/dist/client/components/mail-navigation-icon.d.ts.map +1 -0
- package/dist/client/components/mail-navigation-icon.js +63 -0
- package/dist/client/components/mail-navigation-icon.js.map +1 -0
- package/dist/client/components/mail-page-header.d.ts +9 -0
- package/dist/client/components/mail-page-header.d.ts.map +1 -0
- package/dist/client/components/mail-page-header.js +6 -0
- package/dist/client/components/mail-page-header.js.map +1 -0
- package/dist/client/components/mail-pagination.d.ts +12 -0
- package/dist/client/components/mail-pagination.d.ts.map +1 -0
- package/dist/client/components/mail-pagination.js +62 -0
- package/dist/client/components/mail-pagination.js.map +1 -0
- package/dist/client/components/mail-provider-card.d.ts +13 -0
- package/dist/client/components/mail-provider-card.d.ts.map +1 -0
- package/dist/client/components/mail-provider-card.js +11 -0
- package/dist/client/components/mail-provider-card.js.map +1 -0
- package/dist/client/components/mail-rich-text-editor.d.ts +64 -0
- package/dist/client/components/mail-rich-text-editor.d.ts.map +1 -0
- package/dist/client/components/mail-rich-text-editor.js +199 -0
- package/dist/client/components/mail-rich-text-editor.js.map +1 -0
- package/dist/client/components/mail-scheduled-status.d.ts +8 -0
- package/dist/client/components/mail-scheduled-status.d.ts.map +1 -0
- package/dist/client/components/mail-scheduled-status.js +52 -0
- package/dist/client/components/mail-scheduled-status.js.map +1 -0
- package/dist/client/components/mail-signature-manager.d.ts +8 -0
- package/dist/client/components/mail-signature-manager.d.ts.map +1 -0
- package/dist/client/components/mail-signature-manager.js +255 -0
- package/dist/client/components/mail-signature-manager.js.map +1 -0
- package/dist/client/components/mail-status-badge.d.ts +8 -0
- package/dist/client/components/mail-status-badge.d.ts.map +1 -0
- package/dist/client/components/mail-status-badge.js +12 -0
- package/dist/client/components/mail-status-badge.js.map +1 -0
- package/dist/client/components/mail-sync-policy-fields.d.ts +14 -0
- package/dist/client/components/mail-sync-policy-fields.d.ts.map +1 -0
- package/dist/client/components/mail-sync-policy-fields.js +27 -0
- package/dist/client/components/mail-sync-policy-fields.js.map +1 -0
- package/dist/client/components/mail-template-manager.d.ts +3 -0
- package/dist/client/components/mail-template-manager.d.ts.map +1 -0
- package/dist/client/components/mail-template-manager.js +135 -0
- package/dist/client/components/mail-template-manager.js.map +1 -0
- package/dist/client/components/mail-text-body.d.ts +5 -0
- package/dist/client/components/mail-text-body.d.ts.map +1 -0
- package/dist/client/components/mail-text-body.js +11 -0
- package/dist/client/components/mail-text-body.js.map +1 -0
- package/dist/client/components/mail-workspace-composer.d.ts +4 -0
- package/dist/client/components/mail-workspace-composer.d.ts.map +1 -0
- package/dist/client/components/mail-workspace-composer.js +74 -0
- package/dist/client/components/mail-workspace-composer.js.map +1 -0
- package/dist/client/components/mailbox-sidebar.d.ts +38 -0
- package/dist/client/components/mailbox-sidebar.d.ts.map +1 -0
- package/dist/client/components/mailbox-sidebar.js +71 -0
- package/dist/client/components/mailbox-sidebar.js.map +1 -0
- package/dist/client/components/page-container.d.ts +4 -0
- package/dist/client/components/page-container.d.ts.map +1 -0
- package/dist/client/components/page-container.js +6 -0
- package/dist/client/components/page-container.js.map +1 -0
- package/dist/client/components/page-header.d.ts +8 -0
- package/dist/client/components/page-header.d.ts.map +1 -0
- package/dist/client/components/page-header.js +5 -0
- package/dist/client/components/page-header.js.map +1 -0
- package/dist/client/components/public.d.ts +19 -0
- package/dist/client/components/public.d.ts.map +1 -0
- package/dist/client/components/public.js +18 -0
- package/dist/client/components/public.js.map +1 -0
- package/dist/client/components/ui/button.d.ts +7 -0
- package/dist/client/components/ui/button.d.ts.map +1 -0
- package/dist/client/components/ui/button.js +19 -0
- package/dist/client/components/ui/button.js.map +1 -0
- package/dist/client/components/ui/calendar.d.ts +9 -0
- package/dist/client/components/ui/calendar.d.ts.map +1 -0
- package/dist/client/components/ui/calendar.js +23 -0
- package/dist/client/components/ui/calendar.js.map +1 -0
- package/dist/client/components/ui/card.d.ts +3 -0
- package/dist/client/components/ui/card.d.ts.map +1 -0
- package/dist/client/components/ui/card.js +6 -0
- package/dist/client/components/ui/card.js.map +1 -0
- package/dist/client/components/ui/checkbox.d.ts +5 -0
- package/dist/client/components/ui/checkbox.d.ts.map +1 -0
- package/dist/client/components/ui/checkbox.js +8 -0
- package/dist/client/components/ui/checkbox.js.map +1 -0
- package/dist/client/components/ui/collapsible.d.ts +6 -0
- package/dist/client/components/ui/collapsible.d.ts.map +1 -0
- package/dist/client/components/ui/collapsible.js +12 -0
- package/dist/client/components/ui/collapsible.js.map +1 -0
- package/dist/client/components/ui/dialog.d.ts +14 -0
- package/dist/client/components/ui/dialog.d.ts.map +1 -0
- package/dist/client/components/ui/dialog.js +36 -0
- package/dist/client/components/ui/dialog.js.map +1 -0
- package/dist/client/components/ui/dropdown-menu.d.ts +8 -0
- package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/client/components/ui/dropdown-menu.js +21 -0
- package/dist/client/components/ui/dropdown-menu.js.map +1 -0
- package/dist/client/components/ui/input.d.ts +4 -0
- package/dist/client/components/ui/input.d.ts.map +1 -0
- package/dist/client/components/ui/input.js +7 -0
- package/dist/client/components/ui/input.js.map +1 -0
- package/dist/client/components/ui/native-select.d.ts +4 -0
- package/dist/client/components/ui/native-select.d.ts.map +1 -0
- package/dist/client/components/ui/native-select.js +7 -0
- package/dist/client/components/ui/native-select.js.map +1 -0
- package/dist/client/components/ui/popover.d.ts +10 -0
- package/dist/client/components/ui/popover.d.ts.map +1 -0
- package/dist/client/components/ui/popover.js +23 -0
- package/dist/client/components/ui/popover.js.map +1 -0
- package/dist/client/components/ui/sheet.d.ts +13 -0
- package/dist/client/components/ui/sheet.d.ts.map +1 -0
- package/dist/client/components/ui/sheet.js +28 -0
- package/dist/client/components/ui/sheet.js.map +1 -0
- package/dist/client/components/ui/textarea.d.ts +4 -0
- package/dist/client/components/ui/textarea.d.ts.map +1 -0
- package/dist/client/components/ui/textarea.js +6 -0
- package/dist/client/components/ui/textarea.js.map +1 -0
- package/dist/client/components/ui/tooltip.d.ts +7 -0
- package/dist/client/components/ui/tooltip.d.ts.map +1 -0
- package/dist/client/components/ui/tooltip.js +16 -0
- package/dist/client/components/ui/tooltip.js.map +1 -0
- package/dist/client/contracts/composer.d.ts +68 -0
- package/dist/client/contracts/composer.d.ts.map +1 -0
- package/dist/client/contracts/composer.js +12 -0
- package/dist/client/contracts/composer.js.map +1 -0
- package/dist/client/hooks/use-mail-composer.d.ts +52 -0
- package/dist/client/hooks/use-mail-composer.d.ts.map +1 -0
- package/dist/client/hooks/use-mail-composer.js +633 -0
- package/dist/client/hooks/use-mail-composer.js.map +1 -0
- package/dist/client/hooks/use-mail-invalidations.d.ts +3 -0
- package/dist/client/hooks/use-mail-invalidations.d.ts.map +1 -0
- package/dist/client/hooks/use-mail-invalidations.js +28 -0
- package/dist/client/hooks/use-mail-invalidations.js.map +1 -0
- package/dist/client/hooks/use-mail-table-page.d.ts +12 -0
- package/dist/client/hooks/use-mail-table-page.d.ts.map +1 -0
- package/dist/client/hooks/use-mail-table-page.js +22 -0
- package/dist/client/hooks/use-mail-table-page.js.map +1 -0
- package/dist/client/hooks/use-mail-workspace-data.d.ts +35 -0
- package/dist/client/hooks/use-mail-workspace-data.d.ts.map +1 -0
- package/dist/client/hooks/use-mail-workspace-data.js +409 -0
- package/dist/client/hooks/use-mail-workspace-data.js.map +1 -0
- package/dist/client/index.d.ts +14 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/lib/mail-address.d.ts +5 -0
- package/dist/client/lib/mail-address.d.ts.map +1 -0
- package/dist/client/lib/mail-address.js +14 -0
- package/dist/client/lib/mail-address.js.map +1 -0
- package/dist/client/lib/mail-body-theme.d.ts +3 -0
- package/dist/client/lib/mail-body-theme.d.ts.map +1 -0
- package/dist/client/lib/mail-body-theme.js +69 -0
- package/dist/client/lib/mail-body-theme.js.map +1 -0
- package/dist/client/lib/mail-composer-state.d.ts +36 -0
- package/dist/client/lib/mail-composer-state.d.ts.map +1 -0
- package/dist/client/lib/mail-composer-state.js +212 -0
- package/dist/client/lib/mail-composer-state.js.map +1 -0
- package/dist/client/lib/mail-editor-headings.d.ts +3 -0
- package/dist/client/lib/mail-editor-headings.d.ts.map +1 -0
- package/dist/client/lib/mail-editor-headings.js +27 -0
- package/dist/client/lib/mail-editor-headings.js.map +1 -0
- package/dist/client/lib/mail-editor-images.d.ts +10 -0
- package/dist/client/lib/mail-editor-images.d.ts.map +1 -0
- package/dist/client/lib/mail-editor-images.js +82 -0
- package/dist/client/lib/mail-editor-images.js.map +1 -0
- package/dist/client/lib/mail-editor-labels.d.ts +3 -0
- package/dist/client/lib/mail-editor-labels.d.ts.map +1 -0
- package/dist/client/lib/mail-editor-labels.js +43 -0
- package/dist/client/lib/mail-editor-labels.js.map +1 -0
- package/dist/client/lib/mail-error-description.d.ts +7 -0
- package/dist/client/lib/mail-error-description.d.ts.map +1 -0
- package/dist/client/lib/mail-error-description.js +84 -0
- package/dist/client/lib/mail-error-description.js.map +1 -0
- package/dist/client/lib/mail-folders.d.ts +40 -0
- package/dist/client/lib/mail-folders.d.ts.map +1 -0
- package/dist/client/lib/mail-folders.js +215 -0
- package/dist/client/lib/mail-folders.js.map +1 -0
- package/dist/client/lib/mail-forward-content.d.ts +19 -0
- package/dist/client/lib/mail-forward-content.d.ts.map +1 -0
- package/dist/client/lib/mail-forward-content.js +120 -0
- package/dist/client/lib/mail-forward-content.js.map +1 -0
- package/dist/client/lib/mail-inline-images.d.ts +6 -0
- package/dist/client/lib/mail-inline-images.d.ts.map +1 -0
- package/dist/client/lib/mail-inline-images.js +41 -0
- package/dist/client/lib/mail-inline-images.js.map +1 -0
- package/dist/client/lib/mail-label.d.ts +10 -0
- package/dist/client/lib/mail-label.d.ts.map +1 -0
- package/dist/client/lib/mail-label.js +47 -0
- package/dist/client/lib/mail-label.js.map +1 -0
- package/dist/client/lib/mail-message-document.d.ts +6 -0
- package/dist/client/lib/mail-message-document.d.ts.map +1 -0
- package/dist/client/lib/mail-message-document.js +68 -0
- package/dist/client/lib/mail-message-document.js.map +1 -0
- package/dist/client/lib/mail-pending-delivery.d.ts +22 -0
- package/dist/client/lib/mail-pending-delivery.d.ts.map +1 -0
- package/dist/client/lib/mail-pending-delivery.js +81 -0
- package/dist/client/lib/mail-pending-delivery.js.map +1 -0
- package/dist/client/lib/mail-quoted-content.d.ts +8 -0
- package/dist/client/lib/mail-quoted-content.d.ts.map +1 -0
- package/dist/client/lib/mail-quoted-content.js +62 -0
- package/dist/client/lib/mail-quoted-content.js.map +1 -0
- package/dist/client/lib/mail-reply-content.d.ts +9 -0
- package/dist/client/lib/mail-reply-content.d.ts.map +1 -0
- package/dist/client/lib/mail-reply-content.js +50 -0
- package/dist/client/lib/mail-reply-content.js.map +1 -0
- package/dist/client/lib/mail-signature.d.ts +8 -0
- package/dist/client/lib/mail-signature.d.ts.map +1 -0
- package/dist/client/lib/mail-signature.js +40 -0
- package/dist/client/lib/mail-signature.js.map +1 -0
- package/dist/client/lib/mail-template.d.ts +14 -0
- package/dist/client/lib/mail-template.d.ts.map +1 -0
- package/dist/client/lib/mail-template.js +189 -0
- package/dist/client/lib/mail-template.js.map +1 -0
- package/dist/client/lib/utils.d.ts +2 -0
- package/dist/client/lib/utils.d.ts.map +1 -0
- package/dist/client/lib/utils.js +2 -0
- package/dist/client/lib/utils.js.map +1 -0
- package/dist/client/locales/en-US.d.ts +555 -0
- package/dist/client/locales/en-US.d.ts.map +1 -0
- package/dist/client/locales/en-US.js +553 -0
- package/dist/client/locales/en-US.js.map +1 -0
- package/dist/client/locales/index.d.ts +4 -0
- package/dist/client/locales/index.d.ts.map +1 -0
- package/dist/client/locales/index.js +6 -0
- package/dist/client/locales/index.js.map +1 -0
- package/dist/client/locales/zh-CN.d.ts +4 -0
- package/dist/client/locales/zh-CN.d.ts.map +1 -0
- package/dist/client/locales/zh-CN.js +553 -0
- package/dist/client/locales/zh-CN.js.map +1 -0
- package/dist/client/mail-client.d.ts +112 -0
- package/dist/client/mail-client.d.ts.map +1 -0
- package/dist/client/mail-client.js +412 -0
- package/dist/client/mail-client.js.map +1 -0
- package/dist/client/namespace.d.ts +4 -0
- package/dist/client/namespace.d.ts.map +1 -0
- package/dist/client/namespace.js +3 -0
- package/dist/client/namespace.js.map +1 -0
- package/dist/client/pages/mail-accounts-page.d.ts +8 -0
- package/dist/client/pages/mail-accounts-page.d.ts.map +1 -0
- package/dist/client/pages/mail-accounts-page.js +463 -0
- package/dist/client/pages/mail-accounts-page.js.map +1 -0
- package/dist/client/pages/mail-workspace-page.d.ts +15 -0
- package/dist/client/pages/mail-workspace-page.d.ts.map +1 -0
- package/dist/client/pages/mail-workspace-page.js +834 -0
- package/dist/client/pages/mail-workspace-page.js.map +1 -0
- package/dist/client/plugin.d.ts +7 -0
- package/dist/client/plugin.d.ts.map +1 -0
- package/dist/client/plugin.js +10 -0
- package/dist/client/plugin.js.map +1 -0
- package/dist/client/runtime.d.ts +5 -0
- package/dist/client/runtime.d.ts.map +1 -0
- package/dist/client/runtime.js +7 -0
- package/dist/client/runtime.js.map +1 -0
- package/dist/client/service-provider.d.ts +10 -0
- package/dist/client/service-provider.d.ts.map +1 -0
- package/dist/client/service-provider.js +15 -0
- package/dist/client/service-provider.js.map +1 -0
- package/dist/client/subscription.d.ts +8 -0
- package/dist/client/subscription.d.ts.map +1 -0
- package/dist/client/subscription.js +33 -0
- package/dist/client/subscription.js.map +1 -0
- package/dist/database/migrations/.manifest.json +21 -0
- package/dist/database/migrations/202609030001_create_mail_tables.d.ts +4 -0
- package/dist/database/migrations/202609030001_create_mail_tables.d.ts.map +1 -0
- package/dist/database/migrations/202609030001_create_mail_tables.js +536 -0
- package/dist/database/migrations/202609030001_create_mail_tables.js.map +1 -0
- package/dist/database/migrations/202609200001_backfill_mail_conversations.d.ts +4 -0
- package/dist/database/migrations/202609200001_backfill_mail_conversations.d.ts.map +1 -0
- package/dist/database/migrations/202609200001_backfill_mail_conversations.js +42 -0
- package/dist/database/migrations/202609200001_backfill_mail_conversations.js.map +1 -0
- package/dist/database/migrations/202609210001_normalize_mail_folders.d.ts +4 -0
- package/dist/database/migrations/202609210001_normalize_mail_folders.d.ts.map +1 -0
- package/dist/database/migrations/202609210001_normalize_mail_folders.js +42 -0
- package/dist/database/migrations/202609210001_normalize_mail_folders.js.map +1 -0
- package/dist/database/migrations/202609260001_add_mail_sync_retry_attempts.d.ts +4 -0
- package/dist/database/migrations/202609260001_add_mail_sync_retry_attempts.d.ts.map +1 -0
- package/dist/database/migrations/202609260001_add_mail_sync_retry_attempts.js +17 -0
- package/dist/database/migrations/202609260001_add_mail_sync_retry_attempts.js.map +1 -0
- package/dist/server/adapter-resolver.d.ts +14 -0
- package/dist/server/adapter-resolver.d.ts.map +1 -0
- package/dist/server/adapter-resolver.js +21 -0
- package/dist/server/adapter-resolver.js.map +1 -0
- package/dist/server/adapters/gmail/adapter.d.ts +42 -0
- package/dist/server/adapters/gmail/adapter.d.ts.map +1 -0
- package/dist/server/adapters/gmail/adapter.js +800 -0
- package/dist/server/adapters/gmail/adapter.js.map +1 -0
- package/dist/server/adapters/gmail/auth.d.ts +9 -0
- package/dist/server/adapters/gmail/auth.d.ts.map +1 -0
- package/dist/server/adapters/gmail/auth.js +178 -0
- package/dist/server/adapters/gmail/auth.js.map +1 -0
- package/dist/server/adapters/gmail/batch.d.ts +8 -0
- package/dist/server/adapters/gmail/batch.d.ts.map +1 -0
- package/dist/server/adapters/gmail/batch.js +116 -0
- package/dist/server/adapters/gmail/batch.js.map +1 -0
- package/dist/server/adapters/gmail/concurrency.d.ts +2 -0
- package/dist/server/adapters/gmail/concurrency.d.ts.map +1 -0
- package/dist/server/adapters/gmail/concurrency.js +12 -0
- package/dist/server/adapters/gmail/concurrency.js.map +1 -0
- package/dist/server/adapters/gmail/constants.d.ts +7 -0
- package/dist/server/adapters/gmail/constants.d.ts.map +1 -0
- package/dist/server/adapters/gmail/constants.js +19 -0
- package/dist/server/adapters/gmail/constants.js.map +1 -0
- package/dist/server/adapters/gmail/definition.d.ts +4 -0
- package/dist/server/adapters/gmail/definition.d.ts.map +1 -0
- package/dist/server/adapters/gmail/definition.js +58 -0
- package/dist/server/adapters/gmail/definition.js.map +1 -0
- package/dist/server/adapters/gmail/errors.d.ts +12 -0
- package/dist/server/adapters/gmail/errors.d.ts.map +1 -0
- package/dist/server/adapters/gmail/errors.js +58 -0
- package/dist/server/adapters/gmail/errors.js.map +1 -0
- package/dist/server/adapters/gmail/http.d.ts +11 -0
- package/dist/server/adapters/gmail/http.d.ts.map +1 -0
- package/dist/server/adapters/gmail/http.js +152 -0
- package/dist/server/adapters/gmail/http.js.map +1 -0
- package/dist/server/adapters/gmail/index.d.ts +4 -0
- package/dist/server/adapters/gmail/index.d.ts.map +1 -0
- package/dist/server/adapters/gmail/index.js +3 -0
- package/dist/server/adapters/gmail/index.js.map +1 -0
- package/dist/server/adapters/gmail/mime.d.ts +7 -0
- package/dist/server/adapters/gmail/mime.d.ts.map +1 -0
- package/dist/server/adapters/gmail/mime.js +189 -0
- package/dist/server/adapters/gmail/mime.js.map +1 -0
- package/dist/server/adapters/gmail/normalize.d.ts +7 -0
- package/dist/server/adapters/gmail/normalize.d.ts.map +1 -0
- package/dist/server/adapters/gmail/normalize.js +104 -0
- package/dist/server/adapters/gmail/normalize.js.map +1 -0
- package/dist/server/adapters/gmail/quota.d.ts +3 -0
- package/dist/server/adapters/gmail/quota.d.ts.map +1 -0
- package/dist/server/adapters/gmail/quota.js +112 -0
- package/dist/server/adapters/gmail/quota.js.map +1 -0
- package/dist/server/adapters/gmail/sync.d.ts +5 -0
- package/dist/server/adapters/gmail/sync.d.ts.map +1 -0
- package/dist/server/adapters/gmail/sync.js +32 -0
- package/dist/server/adapters/gmail/sync.js.map +1 -0
- package/dist/server/adapters/gmail/types.d.ts +141 -0
- package/dist/server/adapters/gmail/types.d.ts.map +1 -0
- package/dist/server/adapters/gmail/types.js +2 -0
- package/dist/server/adapters/gmail/types.js.map +1 -0
- package/dist/server/adapters/imap-smtp/adapter.d.ts +40 -0
- package/dist/server/adapters/imap-smtp/adapter.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/adapter.js +721 -0
- package/dist/server/adapters/imap-smtp/adapter.js.map +1 -0
- package/dist/server/adapters/imap-smtp/config.d.ts +19 -0
- package/dist/server/adapters/imap-smtp/config.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/config.js +2 -0
- package/dist/server/adapters/imap-smtp/config.js.map +1 -0
- package/dist/server/adapters/imap-smtp/connection.d.ts +9 -0
- package/dist/server/adapters/imap-smtp/connection.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/connection.js +72 -0
- package/dist/server/adapters/imap-smtp/connection.js.map +1 -0
- package/dist/server/adapters/imap-smtp/constants.d.ts +7 -0
- package/dist/server/adapters/imap-smtp/constants.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/constants.js +16 -0
- package/dist/server/adapters/imap-smtp/constants.js.map +1 -0
- package/dist/server/adapters/imap-smtp/content.d.ts +11 -0
- package/dist/server/adapters/imap-smtp/content.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/content.js +157 -0
- package/dist/server/adapters/imap-smtp/content.js.map +1 -0
- package/dist/server/adapters/imap-smtp/definition.d.ts +4 -0
- package/dist/server/adapters/imap-smtp/definition.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/definition.js +59 -0
- package/dist/server/adapters/imap-smtp/definition.js.map +1 -0
- package/dist/server/adapters/imap-smtp/errors.d.ts +10 -0
- package/dist/server/adapters/imap-smtp/errors.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/errors.js +95 -0
- package/dist/server/adapters/imap-smtp/errors.js.map +1 -0
- package/dist/server/adapters/imap-smtp/folders.d.ts +7 -0
- package/dist/server/adapters/imap-smtp/folders.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/folders.js +39 -0
- package/dist/server/adapters/imap-smtp/folders.js.map +1 -0
- package/dist/server/adapters/imap-smtp/index.d.ts +3 -0
- package/dist/server/adapters/imap-smtp/index.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/index.js +2 -0
- package/dist/server/adapters/imap-smtp/index.js.map +1 -0
- package/dist/server/adapters/imap-smtp/locators.d.ts +23 -0
- package/dist/server/adapters/imap-smtp/locators.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/locators.js +156 -0
- package/dist/server/adapters/imap-smtp/locators.js.map +1 -0
- package/dist/server/adapters/imap-smtp/normalize.d.ts +27 -0
- package/dist/server/adapters/imap-smtp/normalize.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/normalize.js +64 -0
- package/dist/server/adapters/imap-smtp/normalize.js.map +1 -0
- package/dist/server/adapters/imap-smtp/types.d.ts +21 -0
- package/dist/server/adapters/imap-smtp/types.d.ts.map +1 -0
- package/dist/server/adapters/imap-smtp/types.js +2 -0
- package/dist/server/adapters/imap-smtp/types.js.map +1 -0
- package/dist/server/adapters/incomplete-message.d.ts +4 -0
- package/dist/server/adapters/incomplete-message.d.ts.map +1 -0
- package/dist/server/adapters/incomplete-message.js +21 -0
- package/dist/server/adapters/incomplete-message.js.map +1 -0
- package/dist/server/adapters/microsoft/adapter.d.ts +42 -0
- package/dist/server/adapters/microsoft/adapter.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/adapter.js +1063 -0
- package/dist/server/adapters/microsoft/adapter.js.map +1 -0
- package/dist/server/adapters/microsoft/auth.d.ts +10 -0
- package/dist/server/adapters/microsoft/auth.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/auth.js +153 -0
- package/dist/server/adapters/microsoft/auth.js.map +1 -0
- package/dist/server/adapters/microsoft/concurrency.d.ts +2 -0
- package/dist/server/adapters/microsoft/concurrency.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/concurrency.js +15 -0
- package/dist/server/adapters/microsoft/concurrency.js.map +1 -0
- package/dist/server/adapters/microsoft/constants.d.ts +10 -0
- package/dist/server/adapters/microsoft/constants.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/constants.js +46 -0
- package/dist/server/adapters/microsoft/constants.js.map +1 -0
- package/dist/server/adapters/microsoft/content.d.ts +9 -0
- package/dist/server/adapters/microsoft/content.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/content.js +40 -0
- package/dist/server/adapters/microsoft/content.js.map +1 -0
- package/dist/server/adapters/microsoft/definition.d.ts +4 -0
- package/dist/server/adapters/microsoft/definition.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/definition.js +48 -0
- package/dist/server/adapters/microsoft/definition.js.map +1 -0
- package/dist/server/adapters/microsoft/errors.d.ts +12 -0
- package/dist/server/adapters/microsoft/errors.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/errors.js +51 -0
- package/dist/server/adapters/microsoft/errors.js.map +1 -0
- package/dist/server/adapters/microsoft/http.d.ts +13 -0
- package/dist/server/adapters/microsoft/http.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/http.js +115 -0
- package/dist/server/adapters/microsoft/http.js.map +1 -0
- package/dist/server/adapters/microsoft/index.d.ts +4 -0
- package/dist/server/adapters/microsoft/index.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/index.js +3 -0
- package/dist/server/adapters/microsoft/index.js.map +1 -0
- package/dist/server/adapters/microsoft/normalize.d.ts +14 -0
- package/dist/server/adapters/microsoft/normalize.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/normalize.js +110 -0
- package/dist/server/adapters/microsoft/normalize.js.map +1 -0
- package/dist/server/adapters/microsoft/sync.d.ts +12 -0
- package/dist/server/adapters/microsoft/sync.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/sync.js +111 -0
- package/dist/server/adapters/microsoft/sync.js.map +1 -0
- package/dist/server/adapters/microsoft/types.d.ts +128 -0
- package/dist/server/adapters/microsoft/types.d.ts.map +1 -0
- package/dist/server/adapters/microsoft/types.js +2 -0
- package/dist/server/adapters/microsoft/types.js.map +1 -0
- package/dist/server/config.d.ts +56 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +253 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/contracts/persistence.d.ts +220 -0
- package/dist/server/contracts/persistence.d.ts.map +1 -0
- package/dist/server/contracts/persistence.js +2 -0
- package/dist/server/contracts/persistence.js.map +1 -0
- package/dist/server/contracts/provider.d.ts +303 -0
- package/dist/server/contracts/provider.d.ts.map +1 -0
- package/dist/server/contracts/provider.js +4 -0
- package/dist/server/contracts/provider.js.map +1 -0
- package/dist/server/contracts/service.d.ts +82 -0
- package/dist/server/contracts/service.d.ts.map +1 -0
- package/dist/server/contracts/service.js +2 -0
- package/dist/server/contracts/service.js.map +1 -0
- package/dist/server/credentials.d.ts +24 -0
- package/dist/server/credentials.d.ts.map +1 -0
- package/dist/server/credentials.js +263 -0
- package/dist/server/credentials.js.map +1 -0
- package/dist/server/index.d.ts +13 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/jobs/send-scheduled-mail.d.ts +8 -0
- package/dist/server/jobs/send-scheduled-mail.d.ts.map +1 -0
- package/dist/server/jobs/send-scheduled-mail.js +18 -0
- package/dist/server/jobs/send-scheduled-mail.js.map +1 -0
- package/dist/server/jobs/sync-mailbox.d.ts +11 -0
- package/dist/server/jobs/sync-mailbox.d.ts.map +1 -0
- package/dist/server/jobs/sync-mailbox.js +23 -0
- package/dist/server/jobs/sync-mailbox.js.map +1 -0
- package/dist/server/locales/en-US.d.ts +18 -0
- package/dist/server/locales/en-US.d.ts.map +1 -0
- package/dist/server/locales/en-US.js +16 -0
- package/dist/server/locales/en-US.js.map +1 -0
- package/dist/server/locales/index.d.ts +4 -0
- package/dist/server/locales/index.d.ts.map +1 -0
- package/dist/server/locales/index.js +6 -0
- package/dist/server/locales/index.js.map +1 -0
- package/dist/server/locales/zh-CN.d.ts +4 -0
- package/dist/server/locales/zh-CN.d.ts.map +1 -0
- package/dist/server/locales/zh-CN.js +16 -0
- package/dist/server/locales/zh-CN.js.map +1 -0
- package/dist/server/log-pagination.d.ts +2 -0
- package/dist/server/log-pagination.d.ts.map +1 -0
- package/dist/server/log-pagination.js +8 -0
- package/dist/server/log-pagination.js.map +1 -0
- package/dist/server/logging.d.ts +16 -0
- package/dist/server/logging.d.ts.map +1 -0
- package/dist/server/logging.js +24 -0
- package/dist/server/logging.js.map +1 -0
- package/dist/server/operations/index.d.ts +3 -0
- package/dist/server/operations/index.d.ts.map +1 -0
- package/dist/server/operations/index.js +3 -0
- package/dist/server/operations/index.js.map +1 -0
- package/dist/server/operations/message-mutations.d.ts +16 -0
- package/dist/server/operations/message-mutations.d.ts.map +1 -0
- package/dist/server/operations/message-mutations.js +139 -0
- package/dist/server/operations/message-mutations.js.map +1 -0
- package/dist/server/operations/schedule-sync.d.ts +15 -0
- package/dist/server/operations/schedule-sync.d.ts.map +1 -0
- package/dist/server/operations/schedule-sync.js +44 -0
- package/dist/server/operations/schedule-sync.js.map +1 -0
- package/dist/server/operations/send-mail.d.ts +36 -0
- package/dist/server/operations/send-mail.d.ts.map +1 -0
- package/dist/server/operations/send-mail.js +691 -0
- package/dist/server/operations/send-mail.js.map +1 -0
- package/dist/server/operations/sync-mailbox.d.ts +29 -0
- package/dist/server/operations/sync-mailbox.d.ts.map +1 -0
- package/dist/server/operations/sync-mailbox.js +388 -0
- package/dist/server/operations/sync-mailbox.js.map +1 -0
- package/dist/server/outbound-attachments.d.ts +28 -0
- package/dist/server/outbound-attachments.d.ts.map +1 -0
- package/dist/server/outbound-attachments.js +91 -0
- package/dist/server/outbound-attachments.js.map +1 -0
- package/dist/server/plugin.d.ts +4 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +16 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/providers/index.d.ts +4 -0
- package/dist/server/providers/index.d.ts.map +1 -0
- package/dist/server/providers/index.js +8 -0
- package/dist/server/providers/index.js.map +1 -0
- package/dist/server/providers/mail-builtins.d.ts +7 -0
- package/dist/server/providers/mail-builtins.d.ts.map +1 -0
- package/dist/server/providers/mail-builtins.js +17 -0
- package/dist/server/providers/mail-builtins.js.map +1 -0
- package/dist/server/providers/mail-core.d.ts +23 -0
- package/dist/server/providers/mail-core.d.ts.map +1 -0
- package/dist/server/providers/mail-core.js +150 -0
- package/dist/server/providers/mail-core.js.map +1 -0
- package/dist/server/public-types.d.ts +7 -0
- package/dist/server/public-types.d.ts.map +1 -0
- package/dist/server/public-types.js +2 -0
- package/dist/server/public-types.js.map +1 -0
- package/dist/server/realtime.d.ts +11 -0
- package/dist/server/realtime.d.ts.map +1 -0
- package/dist/server/realtime.js +20 -0
- package/dist/server/realtime.js.map +1 -0
- package/dist/server/registry.d.ts +10 -0
- package/dist/server/registry.d.ts.map +1 -0
- package/dist/server/registry.js +21 -0
- package/dist/server/registry.js.map +1 -0
- package/dist/server/routes/api.d.ts +4 -0
- package/dist/server/routes/api.d.ts.map +1 -0
- package/dist/server/routes/api.js +1025 -0
- package/dist/server/routes/api.js.map +1 -0
- package/dist/server/routes/index.d.ts +5 -0
- package/dist/server/routes/index.d.ts.map +1 -0
- package/dist/server/routes/index.js +10 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/oauth-callback.d.ts +5 -0
- package/dist/server/routes/oauth-callback.d.ts.map +1 -0
- package/dist/server/routes/oauth-callback.js +41 -0
- package/dist/server/routes/oauth-callback.js.map +1 -0
- package/dist/server/routes/push-webhook.d.ts +5 -0
- package/dist/server/routes/push-webhook.d.ts.map +1 -0
- package/dist/server/routes/push-webhook.js +95 -0
- package/dist/server/routes/push-webhook.js.map +1 -0
- package/dist/server/routes/schemas.d.ts +345 -0
- package/dist/server/routes/schemas.d.ts.map +1 -0
- package/dist/server/routes/schemas.js +649 -0
- package/dist/server/routes/schemas.js.map +1 -0
- package/dist/server/runtime/account-removals.d.ts +8 -0
- package/dist/server/runtime/account-removals.d.ts.map +1 -0
- package/dist/server/runtime/account-removals.js +84 -0
- package/dist/server/runtime/account-removals.js.map +1 -0
- package/dist/server/runtime/background-tasks.d.ts +8 -0
- package/dist/server/runtime/background-tasks.d.ts.map +1 -0
- package/dist/server/runtime/background-tasks.js +18 -0
- package/dist/server/runtime/background-tasks.js.map +1 -0
- package/dist/server/runtime/outbox-relay.d.ts +19 -0
- package/dist/server/runtime/outbox-relay.d.ts.map +1 -0
- package/dist/server/runtime/outbox-relay.js +41 -0
- package/dist/server/runtime/outbox-relay.js.map +1 -0
- package/dist/server/runtime/push-subscriptions.d.ts +15 -0
- package/dist/server/runtime/push-subscriptions.d.ts.map +1 -0
- package/dist/server/runtime/push-subscriptions.js +144 -0
- package/dist/server/runtime/push-subscriptions.js.map +1 -0
- package/dist/server/runtime.d.ts +67 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +296 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/service.d.ts +75 -0
- package/dist/server/service.d.ts.map +1 -0
- package/dist/server/service.js +213 -0
- package/dist/server/service.js.map +1 -0
- package/dist/server/services/access.d.ts +10 -0
- package/dist/server/services/access.d.ts.map +1 -0
- package/dist/server/services/access.js +33 -0
- package/dist/server/services/access.js.map +1 -0
- package/dist/server/services/accounts.d.ts +10 -0
- package/dist/server/services/accounts.d.ts.map +1 -0
- package/dist/server/services/accounts.js +58 -0
- package/dist/server/services/accounts.js.map +1 -0
- package/dist/server/services/attachments.d.ts +12 -0
- package/dist/server/services/attachments.d.ts.map +1 -0
- package/dist/server/services/attachments.js +92 -0
- package/dist/server/services/attachments.js.map +1 -0
- package/dist/server/services/authorization.d.ts +15 -0
- package/dist/server/services/authorization.d.ts.map +1 -0
- package/dist/server/services/authorization.js +221 -0
- package/dist/server/services/authorization.js.map +1 -0
- package/dist/server/services/dependencies.d.ts +30 -0
- package/dist/server/services/dependencies.d.ts.map +1 -0
- package/dist/server/services/dependencies.js +2 -0
- package/dist/server/services/dependencies.js.map +1 -0
- package/dist/server/services/draft-content.d.ts +10 -0
- package/dist/server/services/draft-content.d.ts.map +1 -0
- package/dist/server/services/draft-content.js +81 -0
- package/dist/server/services/draft-content.js.map +1 -0
- package/dist/server/services/drafts.d.ts +12 -0
- package/dist/server/services/drafts.d.ts.map +1 -0
- package/dist/server/services/drafts.js +173 -0
- package/dist/server/services/drafts.js.map +1 -0
- package/dist/server/services/errors.d.ts +76 -0
- package/dist/server/services/errors.d.ts.map +1 -0
- package/dist/server/services/errors.js +131 -0
- package/dist/server/services/errors.js.map +1 -0
- package/dist/server/services/input.d.ts +7 -0
- package/dist/server/services/input.d.ts.map +1 -0
- package/dist/server/services/input.js +37 -0
- package/dist/server/services/input.js.map +1 -0
- package/dist/server/services/management.d.ts +17 -0
- package/dist/server/services/management.d.ts.map +1 -0
- package/dist/server/services/management.js +133 -0
- package/dist/server/services/management.js.map +1 -0
- package/dist/server/services/messages.d.ts +18 -0
- package/dist/server/services/messages.d.ts.map +1 -0
- package/dist/server/services/messages.js +77 -0
- package/dist/server/services/messages.js.map +1 -0
- package/dist/server/services/preferences.d.ts +21 -0
- package/dist/server/services/preferences.d.ts.map +1 -0
- package/dist/server/services/preferences.js +186 -0
- package/dist/server/services/preferences.js.map +1 -0
- package/dist/server/services/provider-lifecycle.d.ts +5 -0
- package/dist/server/services/provider-lifecycle.d.ts.map +1 -0
- package/dist/server/services/provider-lifecycle.js +46 -0
- package/dist/server/services/provider-lifecycle.js.map +1 -0
- package/dist/server/services/providers.d.ts +8 -0
- package/dist/server/services/providers.d.ts.map +1 -0
- package/dist/server/services/providers.js +58 -0
- package/dist/server/services/providers.js.map +1 -0
- package/dist/server/services/submissions.d.ts +14 -0
- package/dist/server/services/submissions.d.ts.map +1 -0
- package/dist/server/services/submissions.js +93 -0
- package/dist/server/services/submissions.js.map +1 -0
- package/dist/server/services/sync.d.ts +15 -0
- package/dist/server/services/sync.d.ts.map +1 -0
- package/dist/server/services/sync.js +74 -0
- package/dist/server/services/sync.js.map +1 -0
- package/dist/server/store/account-guard.d.ts +4 -0
- package/dist/server/store/account-guard.d.ts.map +1 -0
- package/dist/server/store/account-guard.js +13 -0
- package/dist/server/store/account-guard.js.map +1 -0
- package/dist/server/store/account-removals.d.ts +13 -0
- package/dist/server/store/account-removals.d.ts.map +1 -0
- package/dist/server/store/account-removals.js +170 -0
- package/dist/server/store/account-removals.js.map +1 -0
- package/dist/server/store/account-writes.d.ts +6 -0
- package/dist/server/store/account-writes.d.ts.map +1 -0
- package/dist/server/store/account-writes.js +137 -0
- package/dist/server/store/account-writes.js.map +1 -0
- package/dist/server/store/accounts.d.ts +16 -0
- package/dist/server/store/accounts.d.ts.map +1 -0
- package/dist/server/store/accounts.js +142 -0
- package/dist/server/store/accounts.js.map +1 -0
- package/dist/server/store/attachments.d.ts +13 -0
- package/dist/server/store/attachments.d.ts.map +1 -0
- package/dist/server/store/attachments.js +157 -0
- package/dist/server/store/attachments.js.map +1 -0
- package/dist/server/store/authorization.d.ts +10 -0
- package/dist/server/store/authorization.d.ts.map +1 -0
- package/dist/server/store/authorization.js +71 -0
- package/dist/server/store/authorization.js.map +1 -0
- package/dist/server/store/draft-states.d.ts +5 -0
- package/dist/server/store/draft-states.d.ts.map +1 -0
- package/dist/server/store/draft-states.js +96 -0
- package/dist/server/store/draft-states.js.map +1 -0
- package/dist/server/store/mappers.d.ts +22 -0
- package/dist/server/store/mappers.d.ts.map +1 -0
- package/dist/server/store/mappers.js +378 -0
- package/dist/server/store/mappers.js.map +1 -0
- package/dist/server/store/message-cursor.d.ts +8 -0
- package/dist/server/store/message-cursor.d.ts.map +1 -0
- package/dist/server/store/message-cursor.js +26 -0
- package/dist/server/store/message-cursor.js.map +1 -0
- package/dist/server/store/message-queries.d.ts +8 -0
- package/dist/server/store/message-queries.d.ts.map +1 -0
- package/dist/server/store/message-queries.js +116 -0
- package/dist/server/store/message-queries.js.map +1 -0
- package/dist/server/store/message-writes.d.ts +8 -0
- package/dist/server/store/message-writes.d.ts.map +1 -0
- package/dist/server/store/message-writes.js +180 -0
- package/dist/server/store/message-writes.js.map +1 -0
- package/dist/server/store/messages.d.ts +32 -0
- package/dist/server/store/messages.d.ts.map +1 -0
- package/dist/server/store/messages.js +564 -0
- package/dist/server/store/messages.js.map +1 -0
- package/dist/server/store/metadata.d.ts +22 -0
- package/dist/server/store/metadata.d.ts.map +1 -0
- package/dist/server/store/metadata.js +178 -0
- package/dist/server/store/metadata.js.map +1 -0
- package/dist/server/store/outbox.d.ts +11 -0
- package/dist/server/store/outbox.d.ts.map +1 -0
- package/dist/server/store/outbox.js +98 -0
- package/dist/server/store/outbox.js.map +1 -0
- package/dist/server/store/push.d.ts +22 -0
- package/dist/server/store/push.d.ts.map +1 -0
- package/dist/server/store/push.js +302 -0
- package/dist/server/store/push.js.map +1 -0
- package/dist/server/store/rows.d.ts +224 -0
- package/dist/server/store/rows.d.ts.map +1 -0
- package/dist/server/store/rows.js +2 -0
- package/dist/server/store/rows.js.map +1 -0
- package/dist/server/store/scheduled-drafts.d.ts +6 -0
- package/dist/server/store/scheduled-drafts.d.ts.map +1 -0
- package/dist/server/store/scheduled-drafts.js +38 -0
- package/dist/server/store/scheduled-drafts.js.map +1 -0
- package/dist/server/store/serialization.d.ts +6 -0
- package/dist/server/store/serialization.d.ts.map +1 -0
- package/dist/server/store/serialization.js +27 -0
- package/dist/server/store/serialization.js.map +1 -0
- package/dist/server/store/submissions.d.ts +23 -0
- package/dist/server/store/submissions.d.ts.map +1 -0
- package/dist/server/store/submissions.js +498 -0
- package/dist/server/store/submissions.js.map +1 -0
- package/dist/server/store/sync-writes.d.ts +5 -0
- package/dist/server/store/sync-writes.d.ts.map +1 -0
- package/dist/server/store/sync-writes.js +48 -0
- package/dist/server/store/sync-writes.js.map +1 -0
- package/dist/server/store/sync.d.ts +27 -0
- package/dist/server/store/sync.d.ts.map +1 -0
- package/dist/server/store/sync.js +508 -0
- package/dist/server/store/sync.js.map +1 -0
- package/dist/server/store/templates.d.ts +10 -0
- package/dist/server/store/templates.d.ts.map +1 -0
- package/dist/server/store/templates.js +70 -0
- package/dist/server/store/templates.js.map +1 -0
- package/dist/server/store.d.ts +128 -0
- package/dist/server/store.d.ts.map +1 -0
- package/dist/server/store.js +343 -0
- package/dist/server/store.js.map +1 -0
- package/dist/server/tokens.d.ts +13 -0
- package/dist/server/tokens.d.ts.map +1 -0
- package/dist/server/tokens.js +9 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/server/types.d.ts +6 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +6 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/views.d.ts +6 -0
- package/dist/server/views.d.ts.map +1 -0
- package/dist/server/views.js +65 -0
- package/dist/server/views.js.map +1 -0
- package/dist/shared/inline-images.d.ts +12 -0
- package/dist/shared/inline-images.d.ts.map +1 -0
- package/dist/shared/inline-images.js +15 -0
- package/dist/shared/inline-images.js.map +1 -0
- package/dist/shared/mail-sync-date.d.ts +2 -0
- package/dist/shared/mail-sync-date.d.ts.map +1 -0
- package/dist/shared/mail-sync-date.js +10 -0
- package/dist/shared/mail-sync-date.js.map +1 -0
- package/dist/shared/mail.d.ts +667 -0
- package/dist/shared/mail.d.ts.map +1 -0
- package/dist/shared/mail.js +50 -0
- package/dist/shared/mail.js.map +1 -0
- package/dist/shared/realtime.d.ts +5 -0
- package/dist/shared/realtime.d.ts.map +1 -0
- package/dist/shared/realtime.js +2 -0
- package/dist/shared/realtime.js.map +1 -0
- package/package.json +123 -3
- package/skills/nocobase-app-plugin-mail/SKILL.md +118 -0
- package/skills/nocobase-app-plugin-mail/references/client-integration.md +94 -0
- package/skills/nocobase-app-plugin-mail/references/configuration-and-accounts.md +167 -0
- package/skills/nocobase-app-plugin-mail/references/http-api.md +131 -0
- package/skills/nocobase-app-plugin-mail/references/public-api.md +117 -0
- package/skills/nocobase-app-plugin-mail/references/sending-and-drafts.md +53 -0
- package/skills/nocobase-app-plugin-mail/references/synchronization-and-diagnostics.md +57 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SendMailOperation } from '../operations/send-mail.js';
|
|
2
|
+
import { type MailOperationContext, type MailOffsetPage, type MailSubmissionLogView, type MailSubmissionView } from '../../shared/mail.js';
|
|
3
|
+
import { type MailServiceDependencies } from './dependencies.js';
|
|
4
|
+
export declare class MailSubmissionsService {
|
|
5
|
+
private readonly dependencies;
|
|
6
|
+
private readonly sendMail;
|
|
7
|
+
constructor(dependencies: MailServiceDependencies<'countSubmissions' | 'getAccount' | 'getMessage' | 'closeDraft' | 'getScheduledSubmission' | 'getSubmissionByIdempotencyKey' | 'listSubmissions' | 'transitionSubmission', 'outbox' | 'messageChangeNotifier' | 'logger'>, sendMail: SendMailOperation);
|
|
8
|
+
listSubmissionsPage(context: MailOperationContext, bulkOnly?: boolean, offset?: number, groupByBatch?: boolean, limit?: number): Promise<MailOffsetPage<MailSubmissionLogView>>;
|
|
9
|
+
listSubmissions(context: MailOperationContext, bulkOnly?: boolean, offset?: number, groupByBatch?: boolean, limit?: number): Promise<readonly MailSubmissionLogView[]>;
|
|
10
|
+
transitionSubmission(context: MailOperationContext, submissionId: string, action: 'retry' | 'cancel'): Promise<MailSubmissionLogView>;
|
|
11
|
+
sendMessage(context: MailOperationContext, input: import('../../shared/mail.js').MailComposeInput): Promise<MailSubmissionView>;
|
|
12
|
+
sendBulk(context: MailOperationContext, input: import('../../shared/mail.js').MailBulkComposeInput): Promise<readonly MailSubmissionView[]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=submissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submissions.d.ts","sourceRoot":"","sources":["../../../server/services/submissions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAGjE,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAW7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAXR,YAAY,EAAE,uBAAuB,CAClD,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,wBAAwB,GACxB,+BAA+B,GAC/B,iBAAiB,GACjB,sBAAsB,EACxB,QAAQ,GAAG,uBAAuB,GAAG,QAAQ,CAC9C,EACgB,QAAQ,EAAE,iBAAiB;IAGjC,mBAAmB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,UAAQ,EAChB,MAAM,SAAI,EACV,YAAY,UAAQ,EACpB,KAAK,SAAK,GACT,OAAO,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;IAYpC,eAAe,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,UAAQ,EAChB,MAAM,SAAI,EACV,YAAY,UAAQ,EACpB,KAAK,GAAE,MAAgC,GACtC,OAAO,CAAC,SAAS,qBAAqB,EAAE,CAAC;IAY/B,oBAAoB,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GAAG,QAAQ,GACzB,OAAO,CAAC,qBAAqB,CAAC;IA+BpB,WAAW,CACtB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,GACrD,OAAO,CAAC,kBAAkB,CAAC;IAIjB,QAAQ,CACnB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,GACzD,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;CAwF1C"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { notifyMailMessageChange } from '../realtime.js';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { toSubmissionLogView, toSubmissionView } from '../views.js';
|
|
4
|
+
import { mailInvalidArgument, mailNotFound } from './errors.js';
|
|
5
|
+
export class MailSubmissionsService {
|
|
6
|
+
dependencies;
|
|
7
|
+
sendMail;
|
|
8
|
+
constructor(dependencies, sendMail) {
|
|
9
|
+
this.dependencies = dependencies;
|
|
10
|
+
this.sendMail = sendMail;
|
|
11
|
+
}
|
|
12
|
+
async listSubmissionsPage(context, bulkOnly = false, offset = 0, groupByBatch = false, limit = 20) {
|
|
13
|
+
const [items, total] = await Promise.all([
|
|
14
|
+
this.listSubmissions(context, bulkOnly, offset, groupByBatch, limit),
|
|
15
|
+
this.dependencies.store.countSubmissions(context.actorId, bulkOnly, groupByBatch),
|
|
16
|
+
]);
|
|
17
|
+
return { items, total };
|
|
18
|
+
}
|
|
19
|
+
async listSubmissions(context, bulkOnly = false, offset = 0, groupByBatch = false, limit = groupByBatch ? 20 : 100) {
|
|
20
|
+
return (await this.dependencies.store.listSubmissions(context.actorId, bulkOnly, offset, groupByBatch, limit)).map(toSubmissionLogView);
|
|
21
|
+
}
|
|
22
|
+
async transitionSubmission(context, submissionId, action) {
|
|
23
|
+
const scheduled = await this.dependencies.store.getScheduledSubmission(submissionId);
|
|
24
|
+
const account = scheduled
|
|
25
|
+
? await this.dependencies.store.getAccount(scheduled.submission.accountId)
|
|
26
|
+
: undefined;
|
|
27
|
+
if (!scheduled ||
|
|
28
|
+
!account ||
|
|
29
|
+
account.userId !== context.actorId ||
|
|
30
|
+
scheduled.actorId !== context.actorId) {
|
|
31
|
+
throw mailNotFound('MAIL_SUBMISSION_NOT_FOUND', 'Mail submission was not found.', 'submissionId');
|
|
32
|
+
}
|
|
33
|
+
const submission = await this.dependencies.store.transitionSubmission(submissionId, action);
|
|
34
|
+
if (action === 'retry')
|
|
35
|
+
this.dependencies.outbox?.kick();
|
|
36
|
+
notifyMailMessageChange(this.dependencies.messageChangeNotifier, context.actorId, this.dependencies.logger);
|
|
37
|
+
return toSubmissionLogView(submission);
|
|
38
|
+
}
|
|
39
|
+
async sendMessage(context, input) {
|
|
40
|
+
return toSubmissionView(await this.sendMail.execute(context, input));
|
|
41
|
+
}
|
|
42
|
+
async sendBulk(context, input) {
|
|
43
|
+
if (input.recipients.length === 0 || input.recipients.length > 100) {
|
|
44
|
+
throw mailInvalidArgument('Bulk mail requires between 1 and 100 recipients.', 'recipients');
|
|
45
|
+
}
|
|
46
|
+
const submissions = [];
|
|
47
|
+
const bulkKeyPrefix = `bulk:${createHash('sha256').update(input.idempotencyKey).digest('hex')}`;
|
|
48
|
+
const anchor = await this.dependencies.store.getSubmissionByIdempotencyKey(input.accountId, `${bulkKeyPrefix}:0`);
|
|
49
|
+
const persisted = anchor
|
|
50
|
+
? await this.dependencies.store.getScheduledSubmission(anchor.id)
|
|
51
|
+
: undefined;
|
|
52
|
+
if (anchor &&
|
|
53
|
+
(persisted?.input.sourceDraft?.messageId !== input.sourceDraftMessageId ||
|
|
54
|
+
(persisted?.input.sourceDraft &&
|
|
55
|
+
persisted.input.sourceDraft.submissionKeys.length !==
|
|
56
|
+
input.recipients.length))) {
|
|
57
|
+
throw mailInvalidArgument('The batch idempotency key belongs to a different draft or recipient count.');
|
|
58
|
+
}
|
|
59
|
+
const source = input.sourceDraftMessageId
|
|
60
|
+
? await this.dependencies.store.getMessage(context.actorId, input.accountId, input.sourceDraftMessageId)
|
|
61
|
+
: undefined;
|
|
62
|
+
if (input.sourceDraftMessageId && !anchor && !source?.draft)
|
|
63
|
+
throw mailNotFound('MAIL_DRAFT_NOT_FOUND', 'Mail draft was not found.', 'sourceDraftMessageId');
|
|
64
|
+
const sourceDraft = persisted?.input.sourceDraft ??
|
|
65
|
+
(source?.updatedAt
|
|
66
|
+
? {
|
|
67
|
+
messageId: source.id,
|
|
68
|
+
updatedAt: source.updatedAt,
|
|
69
|
+
submissionKeys: input.recipients.map((_, index) => `${bulkKeyPrefix}:${index}`),
|
|
70
|
+
}
|
|
71
|
+
: undefined);
|
|
72
|
+
for (const [index, recipient] of input.recipients.entries()) {
|
|
73
|
+
const idempotencyKey = `${bulkKeyPrefix}:${index}`;
|
|
74
|
+
const existing = await this.dependencies.store.getSubmissionByIdempotencyKey(input.accountId, idempotencyKey);
|
|
75
|
+
submissions.push(toSubmissionView(await this.sendMail.execute(context, {
|
|
76
|
+
...input,
|
|
77
|
+
draftMessageId: undefined,
|
|
78
|
+
sourceDraft,
|
|
79
|
+
to: [recipient],
|
|
80
|
+
cc: [],
|
|
81
|
+
bcc: [],
|
|
82
|
+
scheduledAt: input.scheduledAt ??
|
|
83
|
+
existing?.scheduledAt ??
|
|
84
|
+
new Date(Date.now() + 1_000).toISOString(),
|
|
85
|
+
idempotencyKey,
|
|
86
|
+
})));
|
|
87
|
+
}
|
|
88
|
+
await this.dependencies.store.closeDraft(input.accountId, input.sourceDraftMessageId, input.draftKey);
|
|
89
|
+
notifyMailMessageChange(this.dependencies.messageChangeNotifier, context.actorId, this.dependencies.logger);
|
|
90
|
+
return submissions;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=submissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submissions.js","sourceRoot":"","sources":["../../../server/services/submissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type MailOperationContext, type MailOffsetPage, type MailStartSyncInput, type MailSyncRunView } from '../../shared/mail.js';
|
|
2
|
+
import { type MailServiceDependencies } from './dependencies.js';
|
|
3
|
+
export declare class MailSyncService {
|
|
4
|
+
private readonly dependencies;
|
|
5
|
+
private readonly scheduler;
|
|
6
|
+
constructor(dependencies: MailServiceDependencies<'cancelSyncRun' | 'countSyncRuns' | 'createSyncRun' | 'findActiveSyncRun' | 'getAccount' | 'getSyncCursor' | 'getSyncRun' | 'listSyncRuns', 'outbox'>, syncBatchSize: number);
|
|
7
|
+
startSync(context: MailOperationContext, input: MailStartSyncInput): Promise<MailSyncRunView>;
|
|
8
|
+
getSyncRun(context: MailOperationContext, syncRunId: string): Promise<MailSyncRunView | undefined>;
|
|
9
|
+
listSyncRunsPage(context: MailOperationContext, offset?: number, limit?: number): Promise<MailOffsetPage<MailSyncRunView>>;
|
|
10
|
+
listSyncRuns(context: MailOperationContext, offset?: number, limit?: number): Promise<readonly MailSyncRunView[]>;
|
|
11
|
+
retrySyncRun(context: MailOperationContext, syncRunId: string): Promise<MailSyncRunView>;
|
|
12
|
+
cancelSyncRun(context: MailOperationContext, syncRunId: string): Promise<MailSyncRunView>;
|
|
13
|
+
private requireOwnedSyncRun;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../server/services/sync.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EAEvB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIjE,qBAAa,eAAe;IAGxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAF/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;gBAE3B,YAAY,EAAE,uBAAuB,CAClD,eAAe,GACf,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,cAAc,EAChB,QAAQ,CACT,EACD,aAAa,EAAE,MAAM;IAKV,SAAS,CACpB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,eAAe,CAAC;IAed,UAAU,CACrB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAO1B,gBAAgB,CAC3B,OAAO,EAAE,oBAAoB,EAC7B,MAAM,SAAI,EACV,KAAK,SAAK,GACT,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAQ9B,YAAY,CACvB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,SAAI,EACV,KAAK,SAAM,GACV,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAMzB,YAAY,CACvB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC;IAwBd,aAAa,CACxB,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC;YAiBb,mBAAmB;CAclC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { MailSyncScheduler } from '../operations/schedule-sync.js';
|
|
2
|
+
import { toSyncRunView } from '../views.js';
|
|
3
|
+
import { requireActiveAccount, requireOwnedAccount } from './access.js';
|
|
4
|
+
import { mailSyncDateMonthsAgo } from '../../shared/mail-sync-date.js';
|
|
5
|
+
import { mailFailedPrecondition, mailNotFound } from './errors.js';
|
|
6
|
+
export class MailSyncService {
|
|
7
|
+
dependencies;
|
|
8
|
+
scheduler;
|
|
9
|
+
constructor(dependencies, syncBatchSize) {
|
|
10
|
+
this.dependencies = dependencies;
|
|
11
|
+
this.scheduler = new MailSyncScheduler(dependencies.store, syncBatchSize);
|
|
12
|
+
}
|
|
13
|
+
async startSync(context, input) {
|
|
14
|
+
const account = await requireActiveAccount(this.dependencies.store, context, input.accountId);
|
|
15
|
+
const { run } = await this.scheduler.request(account, context.actorId, input);
|
|
16
|
+
this.dependencies.outbox.kick();
|
|
17
|
+
return toSyncRunView(run);
|
|
18
|
+
}
|
|
19
|
+
async getSyncRun(context, syncRunId) {
|
|
20
|
+
const run = await this.dependencies.store.getSyncRun(syncRunId);
|
|
21
|
+
if (!run)
|
|
22
|
+
return undefined;
|
|
23
|
+
const account = await this.dependencies.store.getAccount(run.accountId);
|
|
24
|
+
return account?.userId === context.actorId ? toSyncRunView(run) : undefined;
|
|
25
|
+
}
|
|
26
|
+
async listSyncRunsPage(context, offset = 0, limit = 20) {
|
|
27
|
+
const [items, total] = await Promise.all([
|
|
28
|
+
this.listSyncRuns(context, offset, limit),
|
|
29
|
+
this.dependencies.store.countSyncRuns(context.actorId),
|
|
30
|
+
]);
|
|
31
|
+
return { items, total };
|
|
32
|
+
}
|
|
33
|
+
async listSyncRuns(context, offset = 0, limit = 100) {
|
|
34
|
+
return (await this.dependencies.store.listSyncRuns(context.actorId, offset, limit)).map(toSyncRunView);
|
|
35
|
+
}
|
|
36
|
+
async retrySyncRun(context, syncRunId) {
|
|
37
|
+
const run = await this.requireOwnedSyncRun(context, syncRunId);
|
|
38
|
+
if (!['failed', 'cancelled'].includes(run.status)) {
|
|
39
|
+
throw mailFailedPrecondition('MAIL_SYNC_RUN_STATE_INVALID', 'Only failed or cancelled sync runs can be retried.');
|
|
40
|
+
}
|
|
41
|
+
const receivedAfter = run.mode === 'initial'
|
|
42
|
+
? (validDateOrUndefined(run.policy.receivedAfter) ??
|
|
43
|
+
validDateOrUndefined((await this.dependencies.store.getAccount(run.accountId))
|
|
44
|
+
?.initialSyncReceivedAfter) ??
|
|
45
|
+
new Date(`${mailSyncDateMonthsAgo(1)}T00:00:00Z`).toISOString())
|
|
46
|
+
: undefined;
|
|
47
|
+
return this.startSync(context, {
|
|
48
|
+
accountId: run.accountId,
|
|
49
|
+
mode: run.mode,
|
|
50
|
+
receivedAfter,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async cancelSyncRun(context, syncRunId) {
|
|
54
|
+
const run = await this.requireOwnedSyncRun(context, syncRunId);
|
|
55
|
+
if (!['pending', 'running'].includes(run.status)) {
|
|
56
|
+
throw mailFailedPrecondition('MAIL_SYNC_RUN_STATE_INVALID', 'Only active sync runs can be cancelled.');
|
|
57
|
+
}
|
|
58
|
+
const cancelled = await this.dependencies.store.cancelSyncRun(syncRunId);
|
|
59
|
+
if (!cancelled)
|
|
60
|
+
throw mailFailedPrecondition('MAIL_SYNC_RUN_STATE_INVALID', 'Mail sync run is no longer active.');
|
|
61
|
+
return toSyncRunView(cancelled);
|
|
62
|
+
}
|
|
63
|
+
async requireOwnedSyncRun(context, syncRunId) {
|
|
64
|
+
const run = await this.dependencies.store.getSyncRun(syncRunId);
|
|
65
|
+
if (!run)
|
|
66
|
+
throw mailNotFound('MAIL_SYNC_RUN_NOT_FOUND', 'Mail sync run was not found.', 'syncRunId');
|
|
67
|
+
await requireOwnedAccount(this.dependencies.store, context, run.accountId);
|
|
68
|
+
return run;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function validDateOrUndefined(value) {
|
|
72
|
+
return value && Number.isFinite(Date.parse(value)) ? value : undefined;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../server/services/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { QueryAdapter } from '@nocobase/db';
|
|
2
|
+
/** Call inside the writing transaction. Serialize writes with account removal. */
|
|
3
|
+
export declare function lockWritableAccount(query: QueryAdapter, accountId: string): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=account-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-guard.d.ts","sourceRoot":"","sources":["../../../server/store/account-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,kFAAkF;AAClF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { mailAccountRemoving } from '../services/errors.js';
|
|
2
|
+
/** Call inside the writing transaction. Serialize writes with account removal. */
|
|
3
|
+
export async function lockWritableAccount(query, accountId) {
|
|
4
|
+
const result = await query
|
|
5
|
+
.updateTable('mailAccounts')
|
|
6
|
+
.set({ id: accountId })
|
|
7
|
+
.where('id', '=', accountId)
|
|
8
|
+
.where('status', '!=', 'removing')
|
|
9
|
+
.execute();
|
|
10
|
+
if (result.updatedCount !== 1)
|
|
11
|
+
throw mailAccountRemoving();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=account-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-guard.js","sourceRoot":"","sources":["../../../server/store/account-guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAmB,EACnB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,KAAK;SACvB,WAAW,CAAa,cAAc,CAAC;SACvC,GAAG,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;SACtB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;SAC3B,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;SACjC,OAAO,EAAE,CAAC;IACb,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;QAAE,MAAM,mBAAmB,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DatabaseManager } from '@nocobase/db';
|
|
2
|
+
import type { MailAccountRemoval } from '../contracts/persistence.js';
|
|
3
|
+
export declare class MailAccountRemovalsStore {
|
|
4
|
+
private readonly database;
|
|
5
|
+
constructor(database: DatabaseManager);
|
|
6
|
+
claimAccountRemoval(): Promise<MailAccountRemoval | undefined>;
|
|
7
|
+
renewAccountRemoval(task: MailAccountRemoval): Promise<boolean>;
|
|
8
|
+
releaseAccountRemoval(task: MailAccountRemoval, failed: boolean): Promise<void>;
|
|
9
|
+
/** A single bounded transaction; true means only external cleanup remains. */
|
|
10
|
+
deleteAccountBatch(task: MailAccountRemoval): Promise<boolean>;
|
|
11
|
+
finishAccountRemoval(task: MailAccountRemoval): Promise<boolean>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=account-removals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-removals.d.ts","sourceRoot":"","sources":["../../../server/store/account-removals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AActE,qBAAa,wBAAwB;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,eAAe;IAEhD,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAmC9D,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAa/D,qBAAqB,CAChC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAehB,8EAA8E;IACjE,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmG9D,oBAAoB,CAC/B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,OAAO,CAAC;CAgBpB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
const BATCH_SIZE = 500;
|
|
3
|
+
export class MailAccountRemovalsStore {
|
|
4
|
+
database;
|
|
5
|
+
constructor(database) {
|
|
6
|
+
this.database = database;
|
|
7
|
+
}
|
|
8
|
+
async claimAccountRemoval() {
|
|
9
|
+
const now = new Date().toISOString();
|
|
10
|
+
const ready = (eb) => eb.and([
|
|
11
|
+
eb.eb('availableAt', '<=', now),
|
|
12
|
+
eb.or([
|
|
13
|
+
eb.eb('leaseToken', 'is', null),
|
|
14
|
+
eb.eb('leaseExpiresAt', '<=', now),
|
|
15
|
+
]),
|
|
16
|
+
]);
|
|
17
|
+
const row = await this.database
|
|
18
|
+
.query()
|
|
19
|
+
.selectFrom('mailAccountRemovals')
|
|
20
|
+
.select('accountId')
|
|
21
|
+
.where(ready)
|
|
22
|
+
.orderBy('availableAt')
|
|
23
|
+
.orderBy('accountId')
|
|
24
|
+
.executeTakeFirst();
|
|
25
|
+
if (!row)
|
|
26
|
+
return undefined;
|
|
27
|
+
const leaseToken = randomUUID();
|
|
28
|
+
const result = await this.database
|
|
29
|
+
.query()
|
|
30
|
+
.updateTable('mailAccountRemovals')
|
|
31
|
+
.set({
|
|
32
|
+
leaseToken,
|
|
33
|
+
leaseExpiresAt: new Date(Date.now() + 60_000).toISOString(),
|
|
34
|
+
})
|
|
35
|
+
.where('accountId', '=', row.accountId)
|
|
36
|
+
.where(ready)
|
|
37
|
+
.execute();
|
|
38
|
+
return result.updatedCount === 1
|
|
39
|
+
? { accountId: row.accountId, leaseToken }
|
|
40
|
+
: undefined;
|
|
41
|
+
}
|
|
42
|
+
async renewAccountRemoval(task) {
|
|
43
|
+
const now = new Date();
|
|
44
|
+
const result = await this.database
|
|
45
|
+
.query()
|
|
46
|
+
.updateTable('mailAccountRemovals')
|
|
47
|
+
.set({ leaseExpiresAt: new Date(now.getTime() + 60_000).toISOString() })
|
|
48
|
+
.where('accountId', '=', task.accountId)
|
|
49
|
+
.where('leaseToken', '=', task.leaseToken)
|
|
50
|
+
.where('leaseExpiresAt', '>', now.toISOString())
|
|
51
|
+
.execute();
|
|
52
|
+
return result.updatedCount === 1;
|
|
53
|
+
}
|
|
54
|
+
async releaseAccountRemoval(task, failed) {
|
|
55
|
+
await this.database
|
|
56
|
+
.query()
|
|
57
|
+
.updateTable('mailAccountRemovals')
|
|
58
|
+
.set({
|
|
59
|
+
failed,
|
|
60
|
+
leaseToken: null,
|
|
61
|
+
leaseExpiresAt: null,
|
|
62
|
+
availableAt: new Date(Date.now() + (failed ? 30_000 : 0)).toISOString(),
|
|
63
|
+
})
|
|
64
|
+
.where('accountId', '=', task.accountId)
|
|
65
|
+
.where('leaseToken', '=', task.leaseToken)
|
|
66
|
+
.execute();
|
|
67
|
+
}
|
|
68
|
+
/** A single bounded transaction; true means only external cleanup remains. */
|
|
69
|
+
async deleteAccountBatch(task) {
|
|
70
|
+
return this.database.transaction(async ({ query }) => {
|
|
71
|
+
// The fencing update also serializes expired-lease takeovers with this batch.
|
|
72
|
+
const locked = await query
|
|
73
|
+
.updateTable('mailAccountRemovals')
|
|
74
|
+
.set({ leaseToken: task.leaseToken })
|
|
75
|
+
.where('accountId', '=', task.accountId)
|
|
76
|
+
.where('leaseToken', '=', task.leaseToken)
|
|
77
|
+
.execute();
|
|
78
|
+
if (locked.updatedCount !== 1)
|
|
79
|
+
return false;
|
|
80
|
+
const account = await query
|
|
81
|
+
.selectFrom('mailAccounts')
|
|
82
|
+
.select('status')
|
|
83
|
+
.where('id', '=', task.accountId)
|
|
84
|
+
.executeTakeFirst();
|
|
85
|
+
if (account && account.status !== 'removing')
|
|
86
|
+
throw new Error('Mail account is not being removed.');
|
|
87
|
+
const belongsTo = (column, table) => (eb) => eb.eb(column, 'in', eb
|
|
88
|
+
.selectFrom(table)
|
|
89
|
+
.select('id')
|
|
90
|
+
.where('accountId', '=', task.accountId));
|
|
91
|
+
const accountFilter = (eb) => eb.eb('accountId', '=', task.accountId);
|
|
92
|
+
const stages = [
|
|
93
|
+
{
|
|
94
|
+
table: 'mailMessageLabels',
|
|
95
|
+
keys: ['messageId', 'labelId'],
|
|
96
|
+
filter: belongsTo('messageId', 'mailMessages'),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
table: 'mailMessageFolders',
|
|
100
|
+
// Match the account/folder/message index when selecting each batch.
|
|
101
|
+
keys: ['providerFolderId', 'messageId'],
|
|
102
|
+
filter: accountFilter,
|
|
103
|
+
},
|
|
104
|
+
{ table: 'mailMessages', keys: ['id'], filter: accountFilter },
|
|
105
|
+
{ table: 'mailDraftStates', keys: ['id'], filter: accountFilter },
|
|
106
|
+
{
|
|
107
|
+
table: 'mailSyncTombstones',
|
|
108
|
+
keys: ['runId', 'providerMessageId'],
|
|
109
|
+
filter: belongsTo('runId', 'mailSyncRuns'),
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
table: 'mailOutbox',
|
|
113
|
+
keys: ['id'],
|
|
114
|
+
filter: belongsTo('aggregateId', 'mailSyncRuns'),
|
|
115
|
+
},
|
|
116
|
+
{ table: 'mailSyncRuns', keys: ['id'], filter: accountFilter },
|
|
117
|
+
{
|
|
118
|
+
table: 'mailOutbox',
|
|
119
|
+
keys: ['id'],
|
|
120
|
+
filter: belongsTo('aggregateId', 'mailSubmissions'),
|
|
121
|
+
},
|
|
122
|
+
{ table: 'mailSubmissions', keys: ['id'], filter: accountFilter },
|
|
123
|
+
{ table: 'mailSignatures', keys: ['id'], filter: accountFilter },
|
|
124
|
+
{ table: 'mailIdentities', keys: ['id'], filter: accountFilter },
|
|
125
|
+
{ table: 'mailFolders', keys: ['id'], filter: accountFilter },
|
|
126
|
+
];
|
|
127
|
+
for (const stage of stages) {
|
|
128
|
+
let selection = query
|
|
129
|
+
.selectFrom(stage.table)
|
|
130
|
+
.select(stage.keys)
|
|
131
|
+
.where(stage.filter)
|
|
132
|
+
.limit(BATCH_SIZE);
|
|
133
|
+
for (const key of stage.keys)
|
|
134
|
+
selection = selection.orderBy(key);
|
|
135
|
+
const rows = await selection.execute();
|
|
136
|
+
if (rows.length === 0)
|
|
137
|
+
continue;
|
|
138
|
+
// Composite keys use small chunks to respect dialect expression/parameter limits.
|
|
139
|
+
for (let offset = 0; offset < rows.length; offset += 100) {
|
|
140
|
+
await query
|
|
141
|
+
.deleteFrom(stage.table)
|
|
142
|
+
.where((eb) => eb.or(rows
|
|
143
|
+
.slice(offset, offset + 100)
|
|
144
|
+
.map((row) => eb.and(stage.keys.map((key) => eb.eb(key, '=', row[key]))))))
|
|
145
|
+
.execute();
|
|
146
|
+
}
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
async finishAccountRemoval(task) {
|
|
153
|
+
return this.database.transaction(async ({ query }) => {
|
|
154
|
+
const result = await query
|
|
155
|
+
.deleteFrom('mailAccountRemovals')
|
|
156
|
+
.where('accountId', '=', task.accountId)
|
|
157
|
+
.where('leaseToken', '=', task.leaseToken)
|
|
158
|
+
.execute();
|
|
159
|
+
if (result.deletedCount !== 1)
|
|
160
|
+
return false;
|
|
161
|
+
await query
|
|
162
|
+
.deleteFrom('mailAccounts')
|
|
163
|
+
.where('id', '=', task.accountId)
|
|
164
|
+
.where('status', '=', 'removing')
|
|
165
|
+
.execute();
|
|
166
|
+
return true;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=account-removals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-removals.js","sourceRoot":"","sources":["../../../server/store/account-removals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type QueryAdapter } from '@nocobase/db';
|
|
2
|
+
import { type MailAccount, type MailIdentity, type MailSignature } from '../../shared/mail.js';
|
|
3
|
+
export declare function persistAccount(query: QueryAdapter, account: MailAccount): Promise<void>;
|
|
4
|
+
export declare function replaceAccountIdentities(query: QueryAdapter, accountId: string, identities: readonly MailIdentity[]): Promise<void>;
|
|
5
|
+
export declare function saveSignature(query: QueryAdapter, signature: MailSignature): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=account-writes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-writes.d.ts","sourceRoot":"","sources":["../../../server/store/account-writes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAQ9B,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,YAAY,EAAE,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { lockWritableAccount } from './account-guard.js';
|
|
2
|
+
import { toAccountRow, toIdentityRow } from './mappers.js';
|
|
3
|
+
export async function persistAccount(query, account) {
|
|
4
|
+
const now = new Date().toISOString();
|
|
5
|
+
const existing = await query
|
|
6
|
+
.selectFrom('mailAccounts')
|
|
7
|
+
.select('id')
|
|
8
|
+
.where('id', '=', account.id)
|
|
9
|
+
.executeTakeFirst();
|
|
10
|
+
const row = toAccountRow(account, now, existing ? undefined : now);
|
|
11
|
+
if (existing) {
|
|
12
|
+
await lockWritableAccount(query, account.id);
|
|
13
|
+
await query
|
|
14
|
+
.updateTable('mailAccounts')
|
|
15
|
+
.set(row)
|
|
16
|
+
.where('id', '=', account.id)
|
|
17
|
+
.execute();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
await query.insertInto('mailAccounts').values(row).execute();
|
|
21
|
+
}
|
|
22
|
+
export async function replaceAccountIdentities(query, accountId, identities) {
|
|
23
|
+
await query
|
|
24
|
+
.updateTable('mailIdentities')
|
|
25
|
+
.set({ primaryForAccountId: null })
|
|
26
|
+
.where('accountId', '=', accountId)
|
|
27
|
+
.execute();
|
|
28
|
+
const existingIds = await query
|
|
29
|
+
.selectFrom('mailIdentities')
|
|
30
|
+
.where('accountId', '=', accountId)
|
|
31
|
+
.pluck('id');
|
|
32
|
+
const nextIds = new Set(identities.map((identity) => identity.id));
|
|
33
|
+
const staleIds = existingIds.filter((id) => !nextIds.has(id));
|
|
34
|
+
for (const identity of identities) {
|
|
35
|
+
const row = toIdentityRow(identity);
|
|
36
|
+
if (existingIds.includes(identity.id)) {
|
|
37
|
+
await query
|
|
38
|
+
.updateTable('mailIdentities')
|
|
39
|
+
.set(row)
|
|
40
|
+
.where('id', '=', identity.id)
|
|
41
|
+
.execute();
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
await query
|
|
45
|
+
.insertInto('mailIdentities')
|
|
46
|
+
.values(row)
|
|
47
|
+
.execute();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (staleIds.length > 0 && identities.length > 0) {
|
|
51
|
+
const fallbackIdentityId = identities.find((identity) => identity.isPrimary)?.id ?? identities[0].id;
|
|
52
|
+
await query
|
|
53
|
+
.updateTable('mailSignatures')
|
|
54
|
+
.set({
|
|
55
|
+
identityId: fallbackIdentityId,
|
|
56
|
+
defaultForIdentityId: null,
|
|
57
|
+
})
|
|
58
|
+
.where('accountId', '=', accountId)
|
|
59
|
+
.where('identityId', 'in', staleIds)
|
|
60
|
+
.execute();
|
|
61
|
+
await query
|
|
62
|
+
.deleteFrom('mailIdentities')
|
|
63
|
+
.where('id', 'in', staleIds)
|
|
64
|
+
.execute();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function saveSignature(query, signature) {
|
|
68
|
+
const existing = await query
|
|
69
|
+
.selectFrom('mailSignatures')
|
|
70
|
+
.select(['id', 'identityId'])
|
|
71
|
+
.where('id', '=', signature.id)
|
|
72
|
+
.executeTakeFirst();
|
|
73
|
+
const legacyIdentityId = existing?.identityId ??
|
|
74
|
+
(await findPrimaryIdentityId(query, signature.accountId));
|
|
75
|
+
if (!legacyIdentityId) {
|
|
76
|
+
throw new Error('Mail account has no sending identity.');
|
|
77
|
+
}
|
|
78
|
+
if (signature.isDefault) {
|
|
79
|
+
await query
|
|
80
|
+
.updateTable('mailSignatures')
|
|
81
|
+
.set({
|
|
82
|
+
defaultForAccountId: null,
|
|
83
|
+
defaultForIdentityId: null,
|
|
84
|
+
updatedAt: signature.updatedAt,
|
|
85
|
+
})
|
|
86
|
+
.where('accountId', '=', signature.accountId)
|
|
87
|
+
.execute();
|
|
88
|
+
await query
|
|
89
|
+
.updateTable('mailSignatures')
|
|
90
|
+
.set({ defaultForIdentityId: null })
|
|
91
|
+
.where('identityId', '=', legacyIdentityId)
|
|
92
|
+
.execute();
|
|
93
|
+
}
|
|
94
|
+
const row = {
|
|
95
|
+
id: signature.id,
|
|
96
|
+
accountId: signature.accountId,
|
|
97
|
+
identityId: legacyIdentityId,
|
|
98
|
+
name: signature.name,
|
|
99
|
+
text: signature.text,
|
|
100
|
+
html: signature.html,
|
|
101
|
+
defaultForAccountId: signature.isDefault ? signature.accountId : null,
|
|
102
|
+
defaultForIdentityId: signature.isDefault ? legacyIdentityId : null,
|
|
103
|
+
createdAt: signature.createdAt,
|
|
104
|
+
updatedAt: signature.updatedAt,
|
|
105
|
+
};
|
|
106
|
+
if (existing) {
|
|
107
|
+
await query
|
|
108
|
+
.updateTable('mailSignatures')
|
|
109
|
+
.set(row)
|
|
110
|
+
.where('id', '=', signature.id)
|
|
111
|
+
.execute();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
await query
|
|
115
|
+
.insertInto('mailSignatures')
|
|
116
|
+
.values(row)
|
|
117
|
+
.execute();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function findPrimaryIdentityId(query, accountId) {
|
|
121
|
+
const primary = await query
|
|
122
|
+
.selectFrom('mailIdentities')
|
|
123
|
+
.select('id')
|
|
124
|
+
.where('accountId', '=', accountId)
|
|
125
|
+
.where('primaryForAccountId', '=', accountId)
|
|
126
|
+
.executeTakeFirst();
|
|
127
|
+
if (primary)
|
|
128
|
+
return primary.id;
|
|
129
|
+
const first = await query
|
|
130
|
+
.selectFrom('mailIdentities')
|
|
131
|
+
.select('id')
|
|
132
|
+
.where('accountId', '=', accountId)
|
|
133
|
+
.orderBy('address', 'asc')
|
|
134
|
+
.executeTakeFirst();
|
|
135
|
+
return first?.id;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=account-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-writes.js","sourceRoot":"","sources":["../../../server/store/account-writes.ts"],"names":[],"mappings":"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"}
|