@rapidmx/activesync-plugin 1.0.0-beta.2 → 1.0.0-beta.3
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 +4 -4
- package/dist/lib/BaseDeviceSyncStateRoute.js +32 -0
- package/dist/lib/BaseDeviceSyncStateRoute.js.map +1 -1
- package/dist/lib/BaseEasRoute.js +91 -15
- package/dist/lib/BaseEasRoute.js.map +1 -1
- package/dist/lib/EasAuditLog.js +56 -0
- package/dist/lib/EasAuditLog.js.map +1 -0
- package/dist/lib/EasCollectionLease.js +199 -0
- package/dist/lib/EasCollectionLease.js.map +1 -0
- package/dist/lib/EasCollectionStore.js +102 -0
- package/dist/lib/EasCollectionStore.js.map +1 -0
- package/dist/lib/EasCollectionSync.js +294 -0
- package/dist/lib/EasCollectionSync.js.map +1 -0
- package/dist/lib/EasSyncKeyUtils.js +125 -62
- package/dist/lib/EasSyncKeyUtils.js.map +1 -1
- package/dist/lib/MessageMoveRules.js +100 -0
- package/dist/lib/MessageMoveRules.js.map +1 -0
- package/dist/lib/MimeHeaderUtils.js +395 -0
- package/dist/lib/MimeHeaderUtils.js.map +1 -0
- package/dist/lib/RegexPatternUtils.js +30 -0
- package/dist/lib/RegexPatternUtils.js.map +1 -0
- package/dist/lib/RestapiCompat.js +41 -0
- package/dist/lib/RestapiCompat.js.map +1 -0
- package/dist/lib/adapters/CalendarSyncAdapter.js +142 -33
- package/dist/lib/adapters/CalendarSyncAdapter.js.map +1 -1
- package/dist/lib/adapters/EmailSyncAdapter.js +114 -27
- package/dist/lib/adapters/EmailSyncAdapter.js.map +1 -1
- package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js +2 -1
- package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js.map +1 -1
- package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js +2 -1
- package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js.map +1 -1
- package/dist/lib/codec/WbxmlDecoder.js +86 -34
- package/dist/lib/codec/WbxmlDecoder.js.map +1 -1
- package/dist/lib/codec/WbxmlEncoder.js +103 -22
- package/dist/lib/codec/WbxmlEncoder.js.map +1 -1
- package/dist/lib/commands/ComposeMailCommand.js +105 -31
- package/dist/lib/commands/ComposeMailCommand.js.map +1 -1
- package/dist/lib/commands/FolderSyncCommand.js +67 -27
- package/dist/lib/commands/FolderSyncCommand.js.map +1 -1
- package/dist/lib/commands/GetItemEstimateCommand.js +80 -59
- package/dist/lib/commands/GetItemEstimateCommand.js.map +1 -1
- package/dist/lib/commands/ItemOperationsCommand.js +219 -56
- package/dist/lib/commands/ItemOperationsCommand.js.map +1 -1
- package/dist/lib/commands/MeetingResponseCommand.js +212 -53
- package/dist/lib/commands/MeetingResponseCommand.js.map +1 -1
- package/dist/lib/commands/MoveItemsCommand.js +54 -21
- package/dist/lib/commands/MoveItemsCommand.js.map +1 -1
- package/dist/lib/commands/PingCommand.js +288 -56
- package/dist/lib/commands/PingCommand.js.map +1 -1
- package/dist/lib/commands/ProvisionCommand.js +34 -17
- package/dist/lib/commands/ProvisionCommand.js.map +1 -1
- package/dist/lib/commands/ResolveRecipientsCommand.js +43 -5
- package/dist/lib/commands/ResolveRecipientsCommand.js.map +1 -1
- package/dist/lib/commands/SearchCommand.js +92 -17
- package/dist/lib/commands/SearchCommand.js.map +1 -1
- package/dist/lib/commands/SettingsCommand.js +2 -1
- package/dist/lib/commands/SettingsCommand.js.map +1 -1
- package/dist/lib/commands/SmartForwardCommand.js +2 -1
- package/dist/lib/commands/SmartForwardCommand.js.map +1 -1
- package/dist/lib/commands/SmartReplyCommand.js +2 -1
- package/dist/lib/commands/SmartReplyCommand.js.map +1 -1
- package/dist/lib/commands/SyncCommand.js +481 -244
- package/dist/lib/commands/SyncCommand.js.map +1 -1
- package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js +6 -1
- package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js +3 -1
- package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/PingCommandMongo.js +23 -0
- package/dist/lib/commands/mongo/PingCommandMongo.js.map +1 -0
- package/dist/lib/commands/mongo/SearchCommandMongo.js +3 -1
- package/dist/lib/commands/mongo/SearchCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SendMailCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SendMailCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SmartForwardCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SmartForwardCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SmartReplyCommandMongo.js +2 -1
- package/dist/lib/commands/mongo/SmartReplyCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/SyncCommandMongo.js +7 -1
- package/dist/lib/commands/mongo/SyncCommandMongo.js.map +1 -1
- package/dist/lib/commands/mongo/index.js +1 -0
- package/dist/lib/commands/mongo/index.js.map +1 -1
- package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js +6 -1
- package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/ItemOperationsCommandSQL.js +3 -1
- package/dist/lib/commands/sql/ItemOperationsCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/MeetingResponseCommandSQL.js +2 -1
- package/dist/lib/commands/sql/MeetingResponseCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/PingCommandSQL.js +23 -0
- package/dist/lib/commands/sql/PingCommandSQL.js.map +1 -0
- package/dist/lib/commands/sql/SearchCommandSQL.js +3 -1
- package/dist/lib/commands/sql/SearchCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SendMailCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SendMailCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SmartForwardCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SmartForwardCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SmartReplyCommandSQL.js +2 -1
- package/dist/lib/commands/sql/SmartReplyCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/SyncCommandSQL.js +7 -1
- package/dist/lib/commands/sql/SyncCommandSQL.js.map +1 -1
- package/dist/lib/commands/sql/index.js +1 -0
- package/dist/lib/commands/sql/index.js.map +1 -1
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/jobs/EasDeviceStateCleanupJob.js +44 -2
- package/dist/lib/jobs/EasDeviceStateCleanupJob.js.map +1 -1
- package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js +4 -0
- package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js.map +1 -1
- package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js +9 -0
- package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js.map +1 -1
- package/dist/lib/models/EasCollectionChunk.js +2 -0
- package/dist/lib/models/EasCollectionChunk.js.map +1 -0
- package/dist/lib/models/EasCollectionState.js +2 -0
- package/dist/lib/models/EasCollectionState.js.map +1 -0
- package/dist/lib/models/mongo/DeviceSyncStateMongo.js +7 -0
- package/dist/lib/models/mongo/DeviceSyncStateMongo.js.map +1 -1
- package/dist/lib/models/mongo/EasCollectionChunkMongo.js +83 -0
- package/dist/lib/models/mongo/EasCollectionChunkMongo.js.map +1 -0
- package/dist/lib/models/mongo/EasCollectionStateMongo.js +162 -0
- package/dist/lib/models/mongo/EasCollectionStateMongo.js.map +1 -0
- package/dist/lib/models/sql/DeviceSyncStateSQL.js +7 -0
- package/dist/lib/models/sql/DeviceSyncStateSQL.js.map +1 -1
- package/dist/lib/models/sql/EasCollectionChunkSQL.js +83 -0
- package/dist/lib/models/sql/EasCollectionChunkSQL.js.map +1 -0
- package/dist/lib/models/sql/EasCollectionStateSQL.js +162 -0
- package/dist/lib/models/sql/EasCollectionStateSQL.js.map +1 -0
- package/dist/lib/mongo/EasRouteMongo.js +2 -2
- package/dist/lib/mongo/EasRouteMongo.js.map +1 -1
- package/dist/lib/mongo.js +2 -0
- package/dist/lib/mongo.js.map +1 -1
- package/dist/lib/sql/EasRouteSQL.js +2 -2
- package/dist/lib/sql/EasRouteSQL.js.map +1 -1
- package/dist/lib/sql.js +2 -0
- package/dist/lib/sql.js.map +1 -1
- package/dist/types/BaseDeviceSyncStateRoute.d.ts +10 -0
- package/dist/types/BaseEasRoute.d.ts +15 -4
- package/dist/types/EasAuditLog.d.ts +47 -0
- package/dist/types/EasCollectionLease.d.ts +60 -0
- package/dist/types/EasCollectionStore.d.ts +51 -0
- package/dist/types/EasCollectionSync.d.ts +96 -0
- package/dist/types/EasCommandHandler.d.ts +7 -4
- package/dist/types/EasSyncKeyUtils.d.ts +73 -42
- package/dist/types/MessageMoveRules.d.ts +45 -0
- package/dist/types/MimeHeaderUtils.d.ts +73 -0
- package/dist/types/RegexPatternUtils.d.ts +14 -0
- package/dist/types/RestapiCompat.d.ts +24 -0
- package/dist/types/adapters/CalendarSyncAdapter.d.ts +47 -18
- package/dist/types/adapters/EasCollectionSyncAdapter.d.ts +18 -2
- package/dist/types/adapters/EmailSyncAdapter.d.ts +24 -7
- package/dist/types/adapters/mongo/EmailSyncAdapterMongo.d.ts +1 -0
- package/dist/types/adapters/sql/EmailSyncAdapterSQL.d.ts +1 -0
- package/dist/types/codec/WbxmlDecoder.d.ts +39 -0
- package/dist/types/codec/WbxmlEncoder.d.ts +36 -1
- package/dist/types/commands/ComposeMailCommand.d.ts +33 -15
- package/dist/types/commands/FolderSyncCommand.d.ts +4 -1
- package/dist/types/commands/GetItemEstimateCommand.d.ts +20 -15
- package/dist/types/commands/ItemOperationsCommand.d.ts +29 -4
- package/dist/types/commands/MeetingResponseCommand.d.ts +52 -13
- package/dist/types/commands/MoveItemsCommand.d.ts +13 -3
- package/dist/types/commands/PingCommand.d.ts +72 -14
- package/dist/types/commands/ProvisionCommand.d.ts +16 -11
- package/dist/types/commands/ResolveRecipientsCommand.d.ts +4 -0
- package/dist/types/commands/SearchCommand.d.ts +13 -1
- package/dist/types/commands/SyncCommand.d.ts +102 -62
- package/dist/types/commands/mongo/GetItemEstimateCommandMongo.d.ts +3 -0
- package/dist/types/commands/mongo/ItemOperationsCommandMongo.d.ts +2 -0
- package/dist/types/commands/mongo/MeetingResponseCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/PingCommandMongo.d.ts +8 -0
- package/dist/types/commands/mongo/SearchCommandMongo.d.ts +2 -0
- package/dist/types/commands/mongo/SendMailCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SmartForwardCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SmartReplyCommandMongo.d.ts +1 -0
- package/dist/types/commands/mongo/SyncCommandMongo.d.ts +4 -0
- package/dist/types/commands/mongo/index.d.ts +1 -0
- package/dist/types/commands/sql/GetItemEstimateCommandSQL.d.ts +3 -0
- package/dist/types/commands/sql/ItemOperationsCommandSQL.d.ts +2 -0
- package/dist/types/commands/sql/MeetingResponseCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/PingCommandSQL.d.ts +8 -0
- package/dist/types/commands/sql/SearchCommandSQL.d.ts +2 -0
- package/dist/types/commands/sql/SendMailCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SmartForwardCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SmartReplyCommandSQL.d.ts +1 -0
- package/dist/types/commands/sql/SyncCommandSQL.d.ts +4 -0
- package/dist/types/commands/sql/index.d.ts +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/jobs/EasDeviceStateCleanupJob.d.ts +15 -0
- package/dist/types/jobs/mongo/EasDeviceStateCleanupJobMongo.d.ts +2 -0
- package/dist/types/jobs/sql/EasDeviceStateCleanupJobSQL.d.ts +4 -0
- package/dist/types/models/DeviceSyncState.d.ts +13 -2
- package/dist/types/models/EasCollectionChunk.d.ts +20 -0
- package/dist/types/models/EasCollectionState.d.ts +79 -0
- package/dist/types/models/mongo/DeviceSyncStateMongo.d.ts +1 -0
- package/dist/types/models/mongo/EasCollectionChunkMongo.d.ts +16 -0
- package/dist/types/models/mongo/EasCollectionStateMongo.d.ts +27 -0
- package/dist/types/models/sql/DeviceSyncStateSQL.d.ts +1 -0
- package/dist/types/models/sql/EasCollectionChunkSQL.d.ts +16 -0
- package/dist/types/models/sql/EasCollectionStateSQL.d.ts +27 -0
- package/dist/types/mongo.d.ts +2 -0
- package/dist/types/sql.d.ts +2 -0
- package/package.json +267 -238
|
@@ -6,7 +6,13 @@ import * as crypto from "crypto";
|
|
|
6
6
|
import { WbxmlCodePage } from "../codec/WbxmlCodePages.js";
|
|
7
7
|
import { childText, element, findChild, textElement } from "../codec/WbxmlElement.js";
|
|
8
8
|
import { fromCompactDateTime, toCompactDateTime } from "../CompactDateTime.js";
|
|
9
|
+
import { boundIndexedValue } from "../RestapiCompat.js";
|
|
10
|
+
import { isPlainAddress, safeDisplayName } from "../MimeHeaderUtils.js";
|
|
9
11
|
import { AttendeeResponseStatus, AttendeeRole, BusyStatus, RecurrenceFrequency, RecipientType, } from "@rapidmx/restapi";
|
|
12
|
+
/** Most attendees one event may carry from a device - restapi's `MAX_EVENT_ATTENDEES` (REST calendar writes) and
|
|
13
|
+
* `MeetingSchedulingJob`'s default `max_attendees`, and the MAPI plugin's cap. The job mails every attendee, so an
|
|
14
|
+
* unbounded list would make one Sync item a bulk mailing. */
|
|
15
|
+
export const MAX_CALENDAR_ATTENDEES = 500;
|
|
10
16
|
/** Builds the reverse of a forward code-table once at module load, rather than re-deriving it per call. */
|
|
11
17
|
function invert(table) {
|
|
12
18
|
return Object.fromEntries(Object.entries(table).map(([k, v]) => [v, k]));
|
|
@@ -65,9 +71,8 @@ const RECURRENCE_FREQUENCY_FROM_CODE = invert(RECURRENCE_TYPE_CODES);
|
|
|
65
71
|
* its own to source a real value from.
|
|
66
72
|
* - Recurrence patterns keyed by an ordinal weekday (MS-ASCAL `Type` 3/6, e.g. "the 2nd Tuesday of the month")
|
|
67
73
|
* are not emitted - see `RECURRENCE_TYPE_CODES`'s own doc comment.
|
|
68
|
-
* - Recurrence exceptions (individually modified/cancelled occurrences of a recurring series) are not synced
|
|
69
|
-
*
|
|
70
|
-
* replay-protection gap).
|
|
74
|
+
* - Recurrence exceptions (individually modified/cancelled occurrences of a recurring series) are not synced to the
|
|
75
|
+
* device; a device `Change` of the recurrence keeps the series' existing exceptions rather than wiping them.
|
|
71
76
|
*
|
|
72
77
|
* @author Jean-Philippe Steinmetz
|
|
73
78
|
*/
|
|
@@ -110,11 +115,14 @@ export class CalendarSyncAdapter {
|
|
|
110
115
|
...(event.reminderMinutesBeforeStart != null
|
|
111
116
|
? [textElement(WbxmlCodePage.Calendar, "Reminder", String(event.reminderMinutesBeforeStart))]
|
|
112
117
|
: []),
|
|
113
|
-
...(event.recurrenceRule ? [this.recurrenceElement(event.recurrenceRule, event.startDate)] : []),
|
|
118
|
+
...(event.recurrenceRule ? [this.recurrenceElement(event.recurrenceRule, event.startDate, event.timezone)] : []),
|
|
114
119
|
]);
|
|
115
120
|
}
|
|
116
|
-
recurrenceElement(rule, startDate) {
|
|
121
|
+
recurrenceElement(rule, startDate, timezone) {
|
|
117
122
|
const dayOfWeekBits = (rule.byDay ?? []).reduce((sum, day) => sum + (DAY_OF_WEEK_BITS[day] ?? 0), 0);
|
|
123
|
+
// A rule without an explicit day/month recurs on the start date's day/month *as the event's own timezone
|
|
124
|
+
// sees it* - an evening event east of UTC falls on the previous UTC day.
|
|
125
|
+
const local = localDayAndMonth(startDate, timezone);
|
|
118
126
|
return element(WbxmlCodePage.Calendar, "Recurrence", [
|
|
119
127
|
textElement(WbxmlCodePage.Calendar, "Type", RECURRENCE_TYPE_CODES[rule.freq]),
|
|
120
128
|
textElement(WbxmlCodePage.Calendar, "Interval", String(rule.interval)),
|
|
@@ -122,10 +130,10 @@ export class CalendarSyncAdapter {
|
|
|
122
130
|
? [textElement(WbxmlCodePage.Calendar, "DayOfWeek", String(dayOfWeekBits))]
|
|
123
131
|
: []),
|
|
124
132
|
...(rule.freq === RecurrenceFrequency.MONTHLY || rule.freq === RecurrenceFrequency.YEARLY
|
|
125
|
-
? [textElement(WbxmlCodePage.Calendar, "DayOfMonth", String(rule.byMonthDay?.[0] ??
|
|
133
|
+
? [textElement(WbxmlCodePage.Calendar, "DayOfMonth", String(rule.byMonthDay?.[0] ?? local.day))]
|
|
126
134
|
: []),
|
|
127
135
|
...(rule.freq === RecurrenceFrequency.YEARLY
|
|
128
|
-
? [textElement(WbxmlCodePage.Calendar, "MonthOfYear", String(rule.byMonth?.[0] ??
|
|
136
|
+
? [textElement(WbxmlCodePage.Calendar, "MonthOfYear", String(rule.byMonth?.[0] ?? local.month))]
|
|
129
137
|
: []),
|
|
130
138
|
...(rule.until ? [textElement(WbxmlCodePage.Calendar, "Until", toCompactDateTime(rule.until))] : []),
|
|
131
139
|
// See the identical `!= null` reasoning on `reminderMinutesBeforeStart` above.
|
|
@@ -133,23 +141,37 @@ export class CalendarSyncAdapter {
|
|
|
133
141
|
]);
|
|
134
142
|
}
|
|
135
143
|
/**
|
|
136
|
-
* Reverse of `toApplicationData`. `timezone`/`status`/`
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* the returned partial - `newEntityDefaults()` below supplies `icalUid`/`sequence` for a brand new event
|
|
140
|
-
* (`status`/`timezone` are left at the model's own constructor defaults), and `applyChange` leaves all four
|
|
141
|
-
* untouched by construction (merging onto `existing`).
|
|
144
|
+
* Reverse of `toApplicationData`. `timezone`/`status`/`icalUid` have no wire representation at all and are
|
|
145
|
+
* never included in the returned partial - `newEntityDefaults()` supplies `icalUid`/`sequence` for a brand new
|
|
146
|
+
* event, and a `Change` merges onto `existing`.
|
|
142
147
|
*
|
|
143
|
-
* `
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
+
* **Organizer** (`mailbox` = the caller's own mailbox, supplied by `SyncCommand`): a device can only create an
|
|
149
|
+
* event organized by itself - on an `Add`, an `OrganizerEmail` that isn't one of the mailbox's own addresses (or
|
|
150
|
+
* a missing one) is replaced by the mailbox's primary address, since the organizer is who iTIP invitations are
|
|
151
|
+
* sent as. The organizer's display name is always the mailbox's own (`MimeHeaderUtils.safeDisplayName()`: omitted
|
|
152
|
+
* when it looks like an address or has a line break) - never the device's `OrganizerName`, which invitations would
|
|
153
|
+
* otherwise show as the sender's name (e.g. `payroll@corp.com`). On a `Change` the organizer is never reassigned (an
|
|
154
|
+
* attendee's copy of someone else's meeting keeps its real organizer). Without a `mailbox` (direct use),
|
|
155
|
+
* `OrganizerEmail` must be one plain address (`isPlainAddress()`) and `OrganizerName` is kept only when it passes the
|
|
156
|
+
* same rule.
|
|
148
157
|
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
158
|
+
* **Attendees** match restapi's REST calendar validation (`BaseCalendarEventRoute.assertParticipants()`, 400 there):
|
|
159
|
+
* each `Email` must be one plain address (`MimeHeaderUtils.isPlainAddress()`, so not a list like `a@x, b@y`), and at
|
|
160
|
+
* most `MAX_CALENDAR_ATTENDEES` are accepted - refused, never truncated. As in restapi, on a `Change` only a changed
|
|
161
|
+
* list is checked: a device re-sending exactly the addresses the event already has (e.g. an attendee copy filed with
|
|
162
|
+
* a larger or odder list) still saves. A `Name` is kept only when `safeDisplayName()` allows it. A refusal throws,
|
|
163
|
+
* which `SyncCommand` reports as Status 6.
|
|
164
|
+
*
|
|
165
|
+
* **Change merging** (`existing` given): `Attendees`/`Recurrence` are ghosted as a whole element - present ->
|
|
166
|
+
* rebuilt from what's there, absent -> untouched - but a rebuilt attendee the event already had keeps the fields
|
|
167
|
+
* the device didn't send (`AttendeeStatus`/`AttendeeType`/`Name`, and `isOrganizer`), and a rebuilt recurrence
|
|
168
|
+
* keeps the series' existing exceptions (cancelled occurrences have no wire representation here). A change to the
|
|
169
|
+
* time, location, attendees or recurrence bumps `sequence`, as `BaseCalendarEventRoute.update` does, so updated
|
|
170
|
+
* invitations go out - but only on the organizer's copy: when `mailbox` (the item's owner on a `Change`) isn't
|
|
171
|
+
* the organizer, `sequence` is left alone and `inviteSequenceSent` is kept equal to it, so an attendee editing
|
|
172
|
+
* their own copy never makes `MeetingSchedulingJob` send invitations as the organizer.
|
|
151
173
|
*/
|
|
152
|
-
fromApplicationData(el) {
|
|
174
|
+
fromApplicationData(el, existing, mailbox) {
|
|
153
175
|
const partial = {};
|
|
154
176
|
const subject = childText(el, "Subject");
|
|
155
177
|
if (subject !== undefined)
|
|
@@ -175,10 +197,21 @@ export class CalendarSyncAdapter {
|
|
|
175
197
|
partial.busyStatus = mapped;
|
|
176
198
|
}
|
|
177
199
|
const organizerEmail = childText(el, "OrganizerEmail");
|
|
178
|
-
if (
|
|
200
|
+
if (!existing && mailbox) {
|
|
201
|
+
const own = new Set([mailbox.primarySmtpAddress, ...(mailbox.aliasAddresses ?? [])].map((a) => a.toLowerCase()));
|
|
202
|
+
partial.organizer = {
|
|
203
|
+
address: organizerEmail !== undefined && own.has(organizerEmail.toLowerCase()) ? organizerEmail : mailbox.primarySmtpAddress,
|
|
204
|
+
displayName: safeDisplayName(mailbox.displayName),
|
|
205
|
+
type: RecipientType.TO,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
else if (!existing && organizerEmail !== undefined) {
|
|
209
|
+
if (organizerEmail !== "" && !isPlainAddress(organizerEmail)) {
|
|
210
|
+
throw new Error("OrganizerEmail must be a single plain email address.");
|
|
211
|
+
}
|
|
179
212
|
partial.organizer = {
|
|
180
213
|
address: organizerEmail,
|
|
181
|
-
displayName: childText(el, "OrganizerName"),
|
|
214
|
+
displayName: safeDisplayName(childText(el, "OrganizerName")),
|
|
182
215
|
type: RecipientType.TO,
|
|
183
216
|
};
|
|
184
217
|
}
|
|
@@ -187,37 +220,69 @@ export class CalendarSyncAdapter {
|
|
|
187
220
|
partial.reminderMinutesBeforeStart = Number(reminder);
|
|
188
221
|
const attendeesEl = findChild(el, "Attendees");
|
|
189
222
|
if (attendeesEl) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
223
|
+
const attendeeEls = attendeesEl.children.filter((child) => child.tag === "Attendee");
|
|
224
|
+
const attendees = attendeeEls.map((attendeeEl) => this.attendeeFromElement(attendeeEl, existing?.attendees));
|
|
225
|
+
const addresses = (list) => JSON.stringify((list ?? []).map((attendee) => attendee.address));
|
|
226
|
+
if (!existing || addresses(attendees) !== addresses(existing.attendees)) {
|
|
227
|
+
if (attendees.length > MAX_CALENDAR_ATTENDEES) {
|
|
228
|
+
throw new Error(`An event may have at most ${MAX_CALENDAR_ATTENDEES} attendees.`);
|
|
229
|
+
}
|
|
230
|
+
if (!attendees.every((attendee) => isPlainAddress(attendee.address))) {
|
|
231
|
+
throw new Error("Attendee Email must be a single plain email address.");
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
partial.attendees = attendees;
|
|
193
235
|
}
|
|
194
236
|
const recurrenceEl = findChild(el, "Recurrence");
|
|
195
237
|
if (recurrenceEl) {
|
|
196
|
-
partial.recurrenceRule =
|
|
238
|
+
partial.recurrenceRule = {
|
|
239
|
+
...this.recurrenceRuleFromElement(recurrenceEl),
|
|
240
|
+
exceptions: existing?.recurrenceRule?.exceptions ?? [],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
if (existing && mailbox && !isOrganizedBy(existing, mailbox)) {
|
|
244
|
+
// An attendee's copy: the attendee can't reschedule the organizer's meeting for everyone, so the sequence
|
|
245
|
+
// stays put, and the copy is marked as already invited at it so MeetingSchedulingJob never mails a REQUEST
|
|
246
|
+
// on the organizer's behalf because of this edit.
|
|
247
|
+
if (existing.inviteSequenceSent !== existing.sequence) {
|
|
248
|
+
partial.inviteSequenceSent = existing.sequence ?? 0;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else if (existing && isSchedulingRelevantChange(existing, partial)) {
|
|
252
|
+
partial.sequence = (existing.sequence ?? 0) + 1;
|
|
197
253
|
}
|
|
198
254
|
return partial;
|
|
199
255
|
}
|
|
256
|
+
/** Stamps `cancelNoticeSentAt` on an attendee's copy of a meeting before it is deleted, so the deletion is never
|
|
257
|
+
* taken as the organizer cancelling the meeting (see `EasCollectionSyncAdapter.beforeDelete`). */
|
|
258
|
+
beforeDelete(existing, mailbox) {
|
|
259
|
+
if (isOrganizedBy(existing, mailbox) || existing.cancelNoticeSentAt != null) {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
return { cancelNoticeSentAt: new Date() };
|
|
263
|
+
}
|
|
200
264
|
/** `icalUid`/`sequence` have no wire representation on `Add` (see `fromApplicationData`'s own doc comment)
|
|
201
265
|
* - without this, every Sync-created event would fall back to `CalendarEventMongo`/`CalendarEventSQL`'s own
|
|
202
266
|
* constructor default of `icalUid: ""`, violating RFC 5545's uniqueness expectation for `UID`. Mirrors
|
|
203
267
|
* MAPI's identical `RopSaveChangesMessageHandler` pattern (`${crypto.randomUUID()}@mapi`), `@eas` suffix
|
|
204
268
|
* instead. */
|
|
205
269
|
newEntityDefaults() {
|
|
206
|
-
return { icalUid: `${crypto.randomUUID()}@eas
|
|
270
|
+
return { icalUid: boundIndexedValue(`${crypto.randomUUID()}@eas`), sequence: 0 };
|
|
207
271
|
}
|
|
208
|
-
attendeeFromElement(el) {
|
|
272
|
+
attendeeFromElement(el, existingAttendees = []) {
|
|
209
273
|
const address = childText(el, "Email");
|
|
210
274
|
if (!address) {
|
|
211
275
|
throw new Error("Attendee element is missing its required Email child.");
|
|
212
276
|
}
|
|
277
|
+
const known = existingAttendees.find((attendee) => attendee.address.toLowerCase() === address.toLowerCase());
|
|
213
278
|
const attendeeType = childText(el, "AttendeeType");
|
|
214
279
|
const attendeeStatus = childText(el, "AttendeeStatus");
|
|
215
280
|
return {
|
|
216
281
|
address,
|
|
217
|
-
displayName: childText(el, "Name"),
|
|
218
|
-
role: (attendeeType && ATTENDEE_TYPE_FROM_CODE[attendeeType]) || AttendeeRole.REQUIRED,
|
|
219
|
-
responseStatus: (attendeeStatus && ATTENDEE_STATUS_FROM_CODE[attendeeStatus]) || AttendeeResponseStatus.NEEDS_ACTION,
|
|
220
|
-
isOrganizer: false,
|
|
282
|
+
displayName: safeDisplayName(childText(el, "Name") ?? known?.displayName),
|
|
283
|
+
role: (attendeeType && ATTENDEE_TYPE_FROM_CODE[attendeeType]) || known?.role || AttendeeRole.REQUIRED,
|
|
284
|
+
responseStatus: (attendeeStatus && ATTENDEE_STATUS_FROM_CODE[attendeeStatus]) || known?.responseStatus || AttendeeResponseStatus.NEEDS_ACTION,
|
|
285
|
+
isOrganizer: known?.isOrganizer ?? false,
|
|
221
286
|
};
|
|
222
287
|
}
|
|
223
288
|
recurrenceRuleFromElement(el) {
|
|
@@ -252,4 +317,48 @@ export class CalendarSyncAdapter {
|
|
|
252
317
|
};
|
|
253
318
|
}
|
|
254
319
|
}
|
|
320
|
+
/** The calendar day (1-31) and month (1-12) `date` falls on in IANA `timezone`, falling back to UTC for a zone
|
|
321
|
+
* `Intl` doesn't recognize. */
|
|
322
|
+
export function localDayAndMonth(date, timezone) {
|
|
323
|
+
try {
|
|
324
|
+
const parts = new Intl.DateTimeFormat("en-US", { timeZone: timezone, day: "numeric", month: "numeric" }).formatToParts(date);
|
|
325
|
+
return {
|
|
326
|
+
day: Number(parts.find((part) => part.type === "day").value),
|
|
327
|
+
month: Number(parts.find((part) => part.type === "month").value),
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return { day: date.getUTCDate(), month: date.getUTCMonth() + 1 };
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/** `true` when `event`'s organizer is one of `mailbox`'s own addresses - the organizer's copy of a meeting, as opposed
|
|
335
|
+
* to an attendee's copy of someone else's. An event without an organizer address counts as the mailbox's own. */
|
|
336
|
+
export function isOrganizedBy(event, mailbox) {
|
|
337
|
+
const organizer = event.organizer?.address?.toLowerCase();
|
|
338
|
+
if (!organizer) {
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
return [mailbox.primarySmtpAddress, ...(mailbox.aliasAddresses ?? [])].some((address) => address.toLowerCase() === organizer);
|
|
342
|
+
}
|
|
343
|
+
/** Normalizes a value for comparison - `null` (SQL) and `undefined` (Mongo) mean the same "unset". */
|
|
344
|
+
function comparable(value) {
|
|
345
|
+
return JSON.stringify(value ?? null);
|
|
346
|
+
}
|
|
347
|
+
/** `true` when `partial` changes anything invitations carry: time, location, attendees or recurrence. */
|
|
348
|
+
function isSchedulingRelevantChange(existing, partial) {
|
|
349
|
+
const time = (value) => (value ? new Date(value).getTime() : null);
|
|
350
|
+
if (partial.startDate !== undefined && time(partial.startDate) !== time(existing.startDate))
|
|
351
|
+
return true;
|
|
352
|
+
if (partial.endDate !== undefined && time(partial.endDate) !== time(existing.endDate))
|
|
353
|
+
return true;
|
|
354
|
+
if (partial.location !== undefined && partial.location !== (existing.location ?? ""))
|
|
355
|
+
return true;
|
|
356
|
+
const attendeeKey = (attendees) => comparable((attendees ?? []).map((a) => [a.address.toLowerCase(), a.role, a.responseStatus]));
|
|
357
|
+
if (partial.attendees !== undefined && attendeeKey(partial.attendees) !== attendeeKey(existing.attendees))
|
|
358
|
+
return true;
|
|
359
|
+
const ruleKey = (rule) => rule
|
|
360
|
+
? comparable([rule.freq, rule.interval, rule.byDay ?? null, rule.byMonthDay ?? null, rule.byMonth ?? null, rule.count ?? null, time(rule.until)])
|
|
361
|
+
: comparable(null);
|
|
362
|
+
return partial.recurrenceRule !== undefined && ruleKey(partial.recurrenceRule) !== ruleKey(existing.recurrenceRule);
|
|
363
|
+
}
|
|
255
364
|
//# sourceMappingURL=CalendarSyncAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/CalendarSyncAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CalendarSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/CalendarSyncAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,11 +12,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
12
12
|
// SPDX-License-Identifier: MPL-2.0
|
|
13
13
|
///////////////////////////////////////////////////////////////////////////////
|
|
14
14
|
import * as crypto from "crypto";
|
|
15
|
-
import { ObjectDecorators } from "@rapidrest/core";
|
|
16
|
-
import { RepoUtils } from "@rapidrest/service-core";
|
|
15
|
+
import { ApiError, ObjectDecorators } from "@rapidrest/core";
|
|
16
|
+
import { ApiErrors, RepoUtils } from "@rapidrest/service-core";
|
|
17
17
|
import { WbxmlCodePage } from "../codec/WbxmlCodePages.js";
|
|
18
18
|
import { childText, element, findChild, opaqueElement, textElement } from "../codec/WbxmlElement.js";
|
|
19
|
-
import {
|
|
19
|
+
import { isGenuineDraft } from "../MessageMoveRules.js";
|
|
20
|
+
import { boundIndexedValue } from "../RestapiCompat.js";
|
|
21
|
+
import { MessageImportance, RecipientType, } from "@rapidmx/restapi";
|
|
20
22
|
const { Init, Inject } = ObjectDecorators;
|
|
21
23
|
/** MS-ASEMAIL `Importance`: 0=Low, 1=Normal, 2=High. */
|
|
22
24
|
const IMPORTANCE_CODES = {
|
|
@@ -31,6 +33,17 @@ const IMPORTANCE_BY_CODE = {
|
|
|
31
33
|
};
|
|
32
34
|
/** MS-ASAIRSYNCBASE `Body.Type`: 1 = plain text, 2 = HTML, 3 = RTF, 4 = MIME. */
|
|
33
35
|
const BODY_TYPE_PLAIN_TEXT = "1";
|
|
36
|
+
/** MS-ASEMAIL `Flag/Status` value for an active (flagged, not completed) follow-up flag. */
|
|
37
|
+
const FLAG_STATUS_ACTIVE = "2";
|
|
38
|
+
/** Max label uids per `in(...)` lookup - well under `RepoUtils.find()`'s 1000-row page cap. */
|
|
39
|
+
const LABEL_LOOKUP_CHUNK = 500;
|
|
40
|
+
/** The shape of a real entity uid (a lowercase UUID). Anything else in `Message.labelUids` can't be a real label
|
|
41
|
+
* and must never be spliced into an `in(...)` operand, where `me` would resolve to the caller's uid and a comma
|
|
42
|
+
* would split one value into several. */
|
|
43
|
+
const UID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
44
|
+
function labelKey(mailboxUid, labelUid) {
|
|
45
|
+
return `${mailboxUid}/${labelUid}`;
|
|
46
|
+
}
|
|
34
47
|
/**
|
|
35
48
|
* Maps `Message` to/from the EAS `Sync` `Email` collection class (MS-ASEMAIL). Only a plain-text preview of the
|
|
36
49
|
* body is included here (`Message.bodyPreview`, always already loaded on the entity, `Truncated: 1`) rather
|
|
@@ -43,7 +56,12 @@ const BODY_TYPE_PLAIN_TEXT = "1";
|
|
|
43
56
|
* the only `Email` write EAS itself allows) - a plain-text-only pragmatic subset: no HTML body, no attachments
|
|
44
57
|
* (mirrors `ComposeMailCommand`'s own already-documented attachment gap). `To`/`Cc`/`Bcc` (the latter MS-ASEMAIL2's
|
|
45
58
|
* own `Bcc` tag) are ghosted independently per recipient type, not as one combined group - a `Change` touching
|
|
46
|
-
* only one of them leaves the others untouched, carried over from `existing.recipients`.
|
|
59
|
+
* only one of them leaves the others untouched, carried over from `existing.recipients`. A new Draft always gets a body
|
|
60
|
+
* blob (empty when no `Body` was sent), so `ItemOperations` can fetch it like any other message.
|
|
61
|
+
*
|
|
62
|
+
* `Flag` is the MS-ASEMAIL container form in both directions: `<Flag><Status>2</Status></Flag>` (tokenized as
|
|
63
|
+
* `FlagStatus`) for a flagged message, an empty `<Flag/>` otherwise; `Status` 0/1 (cleared/complete) or an empty
|
|
64
|
+
* `Flag` from the device clears `flags.flagged`.
|
|
47
65
|
*
|
|
48
66
|
* Emits MS-ASEMAIL2's `Email2:ConversationId` (read-only - no `fromApplicationData` handling, since EAS itself
|
|
49
67
|
* never lets a client set it) whenever `Message.conversationId` is populated, so a device's threaded-view UI can
|
|
@@ -57,12 +75,11 @@ const BODY_TYPE_PLAIN_TEXT = "1";
|
|
|
57
75
|
* already takes for a stale search-index entry. Deliberately not writable: unlike `Contact.categories` (a
|
|
58
76
|
* plain free-form string array with no separate entity behind it), a `Label` is a real mailbox-scoped entity
|
|
59
77
|
* referenced by uid - a write path would need to resolve category name strings back to `Label`s and create new
|
|
60
|
-
* ones on the fly for names that don't exist yet, real added scope this pragmatic subset defers.
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* further to let a caller pre-resolve names for a whole batch.
|
|
78
|
+
* ones on the fly for names that don't exist yet, real added scope this pragmatic subset defers. Callers
|
|
79
|
+
* rendering a whole Sync page/search result set use `toApplicationDataBatch()`, which resolves every referenced
|
|
80
|
+
* label with one `in(...)` query per mailbox rather than one per labelled message.
|
|
64
81
|
*
|
|
65
|
-
* `labelClass`
|
|
82
|
+
* `labelClass`/`folderClass` are supplied by the Mongo/SQL concrete subclasses.
|
|
66
83
|
*
|
|
67
84
|
* @author Jean-Philippe Steinmetz
|
|
68
85
|
*/
|
|
@@ -75,12 +92,33 @@ export class EmailSyncAdapter {
|
|
|
75
92
|
name: this.labelClass.name,
|
|
76
93
|
args: [this.labelClass],
|
|
77
94
|
});
|
|
95
|
+
this.folderRepo = await this._objectFactory.newInstance(RepoUtils, {
|
|
96
|
+
name: this.folderClass.name,
|
|
97
|
+
args: [this.folderClass],
|
|
98
|
+
});
|
|
78
99
|
}
|
|
79
100
|
async toApplicationData(message) {
|
|
101
|
+
return (await this.toApplicationDataBatch([message]))[0];
|
|
102
|
+
}
|
|
103
|
+
/** Renders a whole page of messages, resolving every referenced `Label` with one `find()` per distinct
|
|
104
|
+
* mailbox (in practice one per page) instead of one per labelled message. */
|
|
105
|
+
async toApplicationDataBatch(messages) {
|
|
106
|
+
const labelNames = await this.resolveLabelNames(messages);
|
|
107
|
+
return messages.map((message) => {
|
|
108
|
+
const categories = [];
|
|
109
|
+
for (const uid of new Set(message.labelUids ?? [])) {
|
|
110
|
+
const name = labelNames.get(labelKey(message.mailboxUid, uid));
|
|
111
|
+
if (name !== undefined) {
|
|
112
|
+
categories.push(name);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return this.render(message, categories);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
render(message, categories) {
|
|
80
119
|
const to = message.recipients.filter((r) => r.type === RecipientType.TO).map((r) => r.address);
|
|
81
120
|
const cc = message.recipients.filter((r) => r.type === RecipientType.CC).map((r) => r.address);
|
|
82
121
|
const bcc = message.recipients.filter((r) => r.type === RecipientType.BCC).map((r) => r.address);
|
|
83
|
-
const categories = await this.resolveLabelNames(message);
|
|
84
122
|
return element(WbxmlCodePage.AirSync, "ApplicationData", [
|
|
85
123
|
textElement(WbxmlCodePage.Email, "Subject", message.subject),
|
|
86
124
|
textElement(WbxmlCodePage.Email, "From", formatAddress(message.from.address, message.from.displayName)),
|
|
@@ -90,7 +128,8 @@ export class EmailSyncAdapter {
|
|
|
90
128
|
textElement(WbxmlCodePage.Email, "DateReceived", message.receivedDate.toISOString()),
|
|
91
129
|
textElement(WbxmlCodePage.Email, "Importance", IMPORTANCE_CODES[message.importance]),
|
|
92
130
|
textElement(WbxmlCodePage.Email, "Read", message.flags.read ? "1" : "0"),
|
|
93
|
-
|
|
131
|
+
// MS-ASEMAIL `Flag` is a container: `<Flag><Status>2</Status></Flag>` (active) or an empty `<Flag/>`.
|
|
132
|
+
element(WbxmlCodePage.Email, "Flag", message.flags.flagged ? [textElement(WbxmlCodePage.Email, "FlagStatus", FLAG_STATUS_ACTIVE)] : []),
|
|
94
133
|
element(WbxmlCodePage.AirSyncBase, "Body", [
|
|
95
134
|
textElement(WbxmlCodePage.AirSyncBase, "Type", BODY_TYPE_PLAIN_TEXT),
|
|
96
135
|
textElement(WbxmlCodePage.AirSyncBase, "EstimatedDataSize", String(Buffer.byteLength(message.bodyPreview, "utf8"))),
|
|
@@ -105,12 +144,42 @@ export class EmailSyncAdapter {
|
|
|
105
144
|
: []),
|
|
106
145
|
]);
|
|
107
146
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
147
|
+
/** Resolves every distinct `labelUids` entry across `messages` to its `Label.name`, keyed by `labelKey()`.
|
|
148
|
+
* Labels are mailbox-scoped, so uids are grouped per `mailboxUid` and each group is fetched with a single
|
|
149
|
+
* `in(...)` query (chunked to stay within `RepoUtils`' page size). A stale uid simply has no entry. */
|
|
150
|
+
async resolveLabelNames(messages) {
|
|
151
|
+
const uidsByMailbox = new Map();
|
|
152
|
+
for (const message of messages) {
|
|
153
|
+
for (const uid of message.labelUids ?? []) {
|
|
154
|
+
if (!UID_PATTERN.test(uid)) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
let uids = uidsByMailbox.get(message.mailboxUid);
|
|
158
|
+
if (!uids) {
|
|
159
|
+
uids = new Set();
|
|
160
|
+
uidsByMailbox.set(message.mailboxUid, uids);
|
|
161
|
+
}
|
|
162
|
+
uids.add(uid);
|
|
163
|
+
}
|
|
111
164
|
}
|
|
112
|
-
const
|
|
113
|
-
|
|
165
|
+
const names = new Map();
|
|
166
|
+
const lookups = [];
|
|
167
|
+
for (const [mailboxUid, uidSet] of uidsByMailbox) {
|
|
168
|
+
const uids = Array.from(uidSet);
|
|
169
|
+
for (let i = 0; i < uids.length; i += LABEL_LOOKUP_CHUNK) {
|
|
170
|
+
const chunk = uids.slice(i, i + LABEL_LOOKUP_CHUNK);
|
|
171
|
+
lookups.push(this.labelRepo.find({ mailboxUid, uid: `in(${chunk.join(",")})`, limit: chunk.length }, {
|
|
172
|
+
ignoreACL: true,
|
|
173
|
+
limit: chunk.length,
|
|
174
|
+
}).then((labels) => {
|
|
175
|
+
for (const label of labels) {
|
|
176
|
+
names.set(labelKey(mailboxUid, label.uid), label.name);
|
|
177
|
+
}
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
await Promise.all(lookups);
|
|
182
|
+
return names;
|
|
114
183
|
}
|
|
115
184
|
/**
|
|
116
185
|
* `Message.bodyBlobKey` is documented (see the `Message` interface itself) as holding raw MIME "unmodified
|
|
@@ -120,7 +189,7 @@ export class EmailSyncAdapter {
|
|
|
120
189
|
* for every consumer, not just this write path - a Draft created/edited via `Sync` must `Fetch` correctly
|
|
121
190
|
* the same way any other message does.
|
|
122
191
|
*/
|
|
123
|
-
async fromApplicationData(el, existing) {
|
|
192
|
+
async fromApplicationData(el, existing, mailbox) {
|
|
124
193
|
const partial = {};
|
|
125
194
|
const subject = childText(el, "Subject");
|
|
126
195
|
if (subject !== undefined)
|
|
@@ -147,25 +216,36 @@ export class EmailSyncAdapter {
|
|
|
147
216
|
partial.importance = IMPORTANCE_BY_CODE[importance] ?? MessageImportance.NORMAL;
|
|
148
217
|
}
|
|
149
218
|
const read = childText(el, "Read");
|
|
150
|
-
|
|
219
|
+
// `Flag` is a container whose `Status` (tokenized as `FlagStatus`) is 0 = cleared, 1 = complete, 2 = active;
|
|
220
|
+
// an empty `<Flag/>` clears the flag.
|
|
221
|
+
const flagEl = findChild(el, "Flag");
|
|
222
|
+
const flag = flagEl ? (childText(flagEl, "FlagStatus") ?? "0") : undefined;
|
|
151
223
|
if (read !== undefined || flag !== undefined) {
|
|
152
224
|
const baseFlags = existing?.flags ?? { read: false, flagged: false, answered: false, forwarded: false };
|
|
153
225
|
partial.flags = {
|
|
154
226
|
...baseFlags,
|
|
155
227
|
...(read !== undefined ? { read: read === "1" } : {}),
|
|
156
|
-
...(flag !== undefined ? { flagged: flag ===
|
|
228
|
+
...(flag !== undefined ? { flagged: flag === FLAG_STATUS_ACTIVE } : {}),
|
|
157
229
|
};
|
|
158
230
|
}
|
|
159
231
|
const bodyEl = findChild(el, "Body");
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
// -
|
|
164
|
-
//
|
|
165
|
-
|
|
232
|
+
// A new Draft always gets a body blob (empty when the device sent no Body) - every consumer of
|
|
233
|
+
// `bodyBlobKey` (`ItemOperations` Fetch, exports) expects it to resolve to real MIME.
|
|
234
|
+
if (bodyEl || !existing) {
|
|
235
|
+
// [MS-ASCMD]/[MS-ASEMAIL] only let a client change the body of a Draft. Any other message's blob is its
|
|
236
|
+
// original MIME - evidence a retention/legal hold may depend on, and possibly shared with other rows
|
|
237
|
+
// (an inbox-rule copy reuses the delivered message's `bodyBlobKey`) - so a Change is refused (the
|
|
238
|
+
// caller reports Status 6) rather than applied.
|
|
239
|
+
if (existing && !(await this.isDraft(existing))) {
|
|
240
|
+
throw new ApiError(ApiErrors.INVALID_REQUEST, 400, "Only a Draft's body can be changed.");
|
|
241
|
+
}
|
|
242
|
+
const text = (bodyEl && childText(bodyEl, "Data")) ?? "";
|
|
243
|
+
// Always a fresh key, never an overwrite of `existing.bodyBlobKey`: an existing blob may be shared, and
|
|
244
|
+
// leaving it intact means a Change that then fails its version check can't corrupt the stored body.
|
|
245
|
+
const bodyBlobKey = `bodies/${crypto.randomUUID()}`;
|
|
166
246
|
const mime = buildPlainTextMime({
|
|
167
247
|
subject: partial.subject ?? existing?.subject ?? "",
|
|
168
|
-
from: existing?.from,
|
|
248
|
+
from: existing?.from ?? (mailbox ? { address: mailbox.primarySmtpAddress, displayName: mailbox.displayName, type: RecipientType.TO } : undefined),
|
|
169
249
|
recipients: partial.recipients ?? existing?.recipients ?? [],
|
|
170
250
|
date: existing?.sentDate ?? new Date(),
|
|
171
251
|
text,
|
|
@@ -176,13 +256,20 @@ export class EmailSyncAdapter {
|
|
|
176
256
|
}
|
|
177
257
|
return partial;
|
|
178
258
|
}
|
|
259
|
+
/** Whether `message` is a genuine draft (`MessageMoveRules.isGenuineDraft`): in its mailbox's Drafts folder, and
|
|
260
|
+
* never delivered. Moving any other message into Drafts is refused over ActiveSync, so its body can't be rewritten
|
|
261
|
+
* here by first moving it there. */
|
|
262
|
+
async isDraft(message) {
|
|
263
|
+
const folder = await this.folderRepo.findOne(message.folderUid, { ignoreACL: true });
|
|
264
|
+
return isGenuineDraft(message, folder?.type);
|
|
265
|
+
}
|
|
179
266
|
/** Defaults for a brand-new Draft created via a client-originated `Add` - `from` is the caller's own
|
|
180
267
|
* mailbox address, per `ComposeMailCommand`'s identical `{ address, type: RecipientType.TO }` shape
|
|
181
268
|
* convention for a `from` field (the `Recipient` struct's `type` is only meaningful for real recipients;
|
|
182
269
|
* it's reused here as a harmless placeholder). */
|
|
183
270
|
newEntityDefaults(mailbox) {
|
|
184
271
|
return {
|
|
185
|
-
messageId: `<${crypto.randomUUID()}@eas
|
|
272
|
+
messageId: boundIndexedValue(`<${crypto.randomUUID()}@eas>`),
|
|
186
273
|
subject: "",
|
|
187
274
|
from: { address: mailbox.primarySmtpAddress, displayName: mailbox.displayName, type: RecipientType.TO },
|
|
188
275
|
recipients: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/EmailSyncAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmailSyncAdapter.js","sourceRoot":"","sources":["../../../src/adapters/EmailSyncAdapter.ts"],"names":[],"mappings":"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"}
|