@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.
Files changed (201) hide show
  1. package/README.md +4 -4
  2. package/dist/lib/BaseDeviceSyncStateRoute.js +32 -0
  3. package/dist/lib/BaseDeviceSyncStateRoute.js.map +1 -1
  4. package/dist/lib/BaseEasRoute.js +91 -15
  5. package/dist/lib/BaseEasRoute.js.map +1 -1
  6. package/dist/lib/EasAuditLog.js +56 -0
  7. package/dist/lib/EasAuditLog.js.map +1 -0
  8. package/dist/lib/EasCollectionLease.js +199 -0
  9. package/dist/lib/EasCollectionLease.js.map +1 -0
  10. package/dist/lib/EasCollectionStore.js +102 -0
  11. package/dist/lib/EasCollectionStore.js.map +1 -0
  12. package/dist/lib/EasCollectionSync.js +294 -0
  13. package/dist/lib/EasCollectionSync.js.map +1 -0
  14. package/dist/lib/EasSyncKeyUtils.js +125 -62
  15. package/dist/lib/EasSyncKeyUtils.js.map +1 -1
  16. package/dist/lib/MessageMoveRules.js +100 -0
  17. package/dist/lib/MessageMoveRules.js.map +1 -0
  18. package/dist/lib/MimeHeaderUtils.js +395 -0
  19. package/dist/lib/MimeHeaderUtils.js.map +1 -0
  20. package/dist/lib/RegexPatternUtils.js +30 -0
  21. package/dist/lib/RegexPatternUtils.js.map +1 -0
  22. package/dist/lib/RestapiCompat.js +41 -0
  23. package/dist/lib/RestapiCompat.js.map +1 -0
  24. package/dist/lib/adapters/CalendarSyncAdapter.js +142 -33
  25. package/dist/lib/adapters/CalendarSyncAdapter.js.map +1 -1
  26. package/dist/lib/adapters/EmailSyncAdapter.js +114 -27
  27. package/dist/lib/adapters/EmailSyncAdapter.js.map +1 -1
  28. package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js +2 -1
  29. package/dist/lib/adapters/mongo/EmailSyncAdapterMongo.js.map +1 -1
  30. package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js +2 -1
  31. package/dist/lib/adapters/sql/EmailSyncAdapterSQL.js.map +1 -1
  32. package/dist/lib/codec/WbxmlDecoder.js +86 -34
  33. package/dist/lib/codec/WbxmlDecoder.js.map +1 -1
  34. package/dist/lib/codec/WbxmlEncoder.js +103 -22
  35. package/dist/lib/codec/WbxmlEncoder.js.map +1 -1
  36. package/dist/lib/commands/ComposeMailCommand.js +105 -31
  37. package/dist/lib/commands/ComposeMailCommand.js.map +1 -1
  38. package/dist/lib/commands/FolderSyncCommand.js +67 -27
  39. package/dist/lib/commands/FolderSyncCommand.js.map +1 -1
  40. package/dist/lib/commands/GetItemEstimateCommand.js +80 -59
  41. package/dist/lib/commands/GetItemEstimateCommand.js.map +1 -1
  42. package/dist/lib/commands/ItemOperationsCommand.js +219 -56
  43. package/dist/lib/commands/ItemOperationsCommand.js.map +1 -1
  44. package/dist/lib/commands/MeetingResponseCommand.js +212 -53
  45. package/dist/lib/commands/MeetingResponseCommand.js.map +1 -1
  46. package/dist/lib/commands/MoveItemsCommand.js +54 -21
  47. package/dist/lib/commands/MoveItemsCommand.js.map +1 -1
  48. package/dist/lib/commands/PingCommand.js +288 -56
  49. package/dist/lib/commands/PingCommand.js.map +1 -1
  50. package/dist/lib/commands/ProvisionCommand.js +34 -17
  51. package/dist/lib/commands/ProvisionCommand.js.map +1 -1
  52. package/dist/lib/commands/ResolveRecipientsCommand.js +43 -5
  53. package/dist/lib/commands/ResolveRecipientsCommand.js.map +1 -1
  54. package/dist/lib/commands/SearchCommand.js +92 -17
  55. package/dist/lib/commands/SearchCommand.js.map +1 -1
  56. package/dist/lib/commands/SettingsCommand.js +2 -1
  57. package/dist/lib/commands/SettingsCommand.js.map +1 -1
  58. package/dist/lib/commands/SmartForwardCommand.js +2 -1
  59. package/dist/lib/commands/SmartForwardCommand.js.map +1 -1
  60. package/dist/lib/commands/SmartReplyCommand.js +2 -1
  61. package/dist/lib/commands/SmartReplyCommand.js.map +1 -1
  62. package/dist/lib/commands/SyncCommand.js +481 -244
  63. package/dist/lib/commands/SyncCommand.js.map +1 -1
  64. package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js +6 -1
  65. package/dist/lib/commands/mongo/GetItemEstimateCommandMongo.js.map +1 -1
  66. package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js +3 -1
  67. package/dist/lib/commands/mongo/ItemOperationsCommandMongo.js.map +1 -1
  68. package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js +2 -1
  69. package/dist/lib/commands/mongo/MeetingResponseCommandMongo.js.map +1 -1
  70. package/dist/lib/commands/mongo/PingCommandMongo.js +23 -0
  71. package/dist/lib/commands/mongo/PingCommandMongo.js.map +1 -0
  72. package/dist/lib/commands/mongo/SearchCommandMongo.js +3 -1
  73. package/dist/lib/commands/mongo/SearchCommandMongo.js.map +1 -1
  74. package/dist/lib/commands/mongo/SendMailCommandMongo.js +2 -1
  75. package/dist/lib/commands/mongo/SendMailCommandMongo.js.map +1 -1
  76. package/dist/lib/commands/mongo/SmartForwardCommandMongo.js +2 -1
  77. package/dist/lib/commands/mongo/SmartForwardCommandMongo.js.map +1 -1
  78. package/dist/lib/commands/mongo/SmartReplyCommandMongo.js +2 -1
  79. package/dist/lib/commands/mongo/SmartReplyCommandMongo.js.map +1 -1
  80. package/dist/lib/commands/mongo/SyncCommandMongo.js +7 -1
  81. package/dist/lib/commands/mongo/SyncCommandMongo.js.map +1 -1
  82. package/dist/lib/commands/mongo/index.js +1 -0
  83. package/dist/lib/commands/mongo/index.js.map +1 -1
  84. package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js +6 -1
  85. package/dist/lib/commands/sql/GetItemEstimateCommandSQL.js.map +1 -1
  86. package/dist/lib/commands/sql/ItemOperationsCommandSQL.js +3 -1
  87. package/dist/lib/commands/sql/ItemOperationsCommandSQL.js.map +1 -1
  88. package/dist/lib/commands/sql/MeetingResponseCommandSQL.js +2 -1
  89. package/dist/lib/commands/sql/MeetingResponseCommandSQL.js.map +1 -1
  90. package/dist/lib/commands/sql/PingCommandSQL.js +23 -0
  91. package/dist/lib/commands/sql/PingCommandSQL.js.map +1 -0
  92. package/dist/lib/commands/sql/SearchCommandSQL.js +3 -1
  93. package/dist/lib/commands/sql/SearchCommandSQL.js.map +1 -1
  94. package/dist/lib/commands/sql/SendMailCommandSQL.js +2 -1
  95. package/dist/lib/commands/sql/SendMailCommandSQL.js.map +1 -1
  96. package/dist/lib/commands/sql/SmartForwardCommandSQL.js +2 -1
  97. package/dist/lib/commands/sql/SmartForwardCommandSQL.js.map +1 -1
  98. package/dist/lib/commands/sql/SmartReplyCommandSQL.js +2 -1
  99. package/dist/lib/commands/sql/SmartReplyCommandSQL.js.map +1 -1
  100. package/dist/lib/commands/sql/SyncCommandSQL.js +7 -1
  101. package/dist/lib/commands/sql/SyncCommandSQL.js.map +1 -1
  102. package/dist/lib/commands/sql/index.js +1 -0
  103. package/dist/lib/commands/sql/index.js.map +1 -1
  104. package/dist/lib/index.js +5 -0
  105. package/dist/lib/index.js.map +1 -1
  106. package/dist/lib/jobs/EasDeviceStateCleanupJob.js +44 -2
  107. package/dist/lib/jobs/EasDeviceStateCleanupJob.js.map +1 -1
  108. package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js +4 -0
  109. package/dist/lib/jobs/mongo/EasDeviceStateCleanupJobMongo.js.map +1 -1
  110. package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js +9 -0
  111. package/dist/lib/jobs/sql/EasDeviceStateCleanupJobSQL.js.map +1 -1
  112. package/dist/lib/models/EasCollectionChunk.js +2 -0
  113. package/dist/lib/models/EasCollectionChunk.js.map +1 -0
  114. package/dist/lib/models/EasCollectionState.js +2 -0
  115. package/dist/lib/models/EasCollectionState.js.map +1 -0
  116. package/dist/lib/models/mongo/DeviceSyncStateMongo.js +7 -0
  117. package/dist/lib/models/mongo/DeviceSyncStateMongo.js.map +1 -1
  118. package/dist/lib/models/mongo/EasCollectionChunkMongo.js +83 -0
  119. package/dist/lib/models/mongo/EasCollectionChunkMongo.js.map +1 -0
  120. package/dist/lib/models/mongo/EasCollectionStateMongo.js +162 -0
  121. package/dist/lib/models/mongo/EasCollectionStateMongo.js.map +1 -0
  122. package/dist/lib/models/sql/DeviceSyncStateSQL.js +7 -0
  123. package/dist/lib/models/sql/DeviceSyncStateSQL.js.map +1 -1
  124. package/dist/lib/models/sql/EasCollectionChunkSQL.js +83 -0
  125. package/dist/lib/models/sql/EasCollectionChunkSQL.js.map +1 -0
  126. package/dist/lib/models/sql/EasCollectionStateSQL.js +162 -0
  127. package/dist/lib/models/sql/EasCollectionStateSQL.js.map +1 -0
  128. package/dist/lib/mongo/EasRouteMongo.js +2 -2
  129. package/dist/lib/mongo/EasRouteMongo.js.map +1 -1
  130. package/dist/lib/mongo.js +2 -0
  131. package/dist/lib/mongo.js.map +1 -1
  132. package/dist/lib/sql/EasRouteSQL.js +2 -2
  133. package/dist/lib/sql/EasRouteSQL.js.map +1 -1
  134. package/dist/lib/sql.js +2 -0
  135. package/dist/lib/sql.js.map +1 -1
  136. package/dist/types/BaseDeviceSyncStateRoute.d.ts +10 -0
  137. package/dist/types/BaseEasRoute.d.ts +15 -4
  138. package/dist/types/EasAuditLog.d.ts +47 -0
  139. package/dist/types/EasCollectionLease.d.ts +60 -0
  140. package/dist/types/EasCollectionStore.d.ts +51 -0
  141. package/dist/types/EasCollectionSync.d.ts +96 -0
  142. package/dist/types/EasCommandHandler.d.ts +7 -4
  143. package/dist/types/EasSyncKeyUtils.d.ts +73 -42
  144. package/dist/types/MessageMoveRules.d.ts +45 -0
  145. package/dist/types/MimeHeaderUtils.d.ts +73 -0
  146. package/dist/types/RegexPatternUtils.d.ts +14 -0
  147. package/dist/types/RestapiCompat.d.ts +24 -0
  148. package/dist/types/adapters/CalendarSyncAdapter.d.ts +47 -18
  149. package/dist/types/adapters/EasCollectionSyncAdapter.d.ts +18 -2
  150. package/dist/types/adapters/EmailSyncAdapter.d.ts +24 -7
  151. package/dist/types/adapters/mongo/EmailSyncAdapterMongo.d.ts +1 -0
  152. package/dist/types/adapters/sql/EmailSyncAdapterSQL.d.ts +1 -0
  153. package/dist/types/codec/WbxmlDecoder.d.ts +39 -0
  154. package/dist/types/codec/WbxmlEncoder.d.ts +36 -1
  155. package/dist/types/commands/ComposeMailCommand.d.ts +33 -15
  156. package/dist/types/commands/FolderSyncCommand.d.ts +4 -1
  157. package/dist/types/commands/GetItemEstimateCommand.d.ts +20 -15
  158. package/dist/types/commands/ItemOperationsCommand.d.ts +29 -4
  159. package/dist/types/commands/MeetingResponseCommand.d.ts +52 -13
  160. package/dist/types/commands/MoveItemsCommand.d.ts +13 -3
  161. package/dist/types/commands/PingCommand.d.ts +72 -14
  162. package/dist/types/commands/ProvisionCommand.d.ts +16 -11
  163. package/dist/types/commands/ResolveRecipientsCommand.d.ts +4 -0
  164. package/dist/types/commands/SearchCommand.d.ts +13 -1
  165. package/dist/types/commands/SyncCommand.d.ts +102 -62
  166. package/dist/types/commands/mongo/GetItemEstimateCommandMongo.d.ts +3 -0
  167. package/dist/types/commands/mongo/ItemOperationsCommandMongo.d.ts +2 -0
  168. package/dist/types/commands/mongo/MeetingResponseCommandMongo.d.ts +1 -0
  169. package/dist/types/commands/mongo/PingCommandMongo.d.ts +8 -0
  170. package/dist/types/commands/mongo/SearchCommandMongo.d.ts +2 -0
  171. package/dist/types/commands/mongo/SendMailCommandMongo.d.ts +1 -0
  172. package/dist/types/commands/mongo/SmartForwardCommandMongo.d.ts +1 -0
  173. package/dist/types/commands/mongo/SmartReplyCommandMongo.d.ts +1 -0
  174. package/dist/types/commands/mongo/SyncCommandMongo.d.ts +4 -0
  175. package/dist/types/commands/mongo/index.d.ts +1 -0
  176. package/dist/types/commands/sql/GetItemEstimateCommandSQL.d.ts +3 -0
  177. package/dist/types/commands/sql/ItemOperationsCommandSQL.d.ts +2 -0
  178. package/dist/types/commands/sql/MeetingResponseCommandSQL.d.ts +1 -0
  179. package/dist/types/commands/sql/PingCommandSQL.d.ts +8 -0
  180. package/dist/types/commands/sql/SearchCommandSQL.d.ts +2 -0
  181. package/dist/types/commands/sql/SendMailCommandSQL.d.ts +1 -0
  182. package/dist/types/commands/sql/SmartForwardCommandSQL.d.ts +1 -0
  183. package/dist/types/commands/sql/SmartReplyCommandSQL.d.ts +1 -0
  184. package/dist/types/commands/sql/SyncCommandSQL.d.ts +4 -0
  185. package/dist/types/commands/sql/index.d.ts +1 -0
  186. package/dist/types/index.d.ts +5 -0
  187. package/dist/types/jobs/EasDeviceStateCleanupJob.d.ts +15 -0
  188. package/dist/types/jobs/mongo/EasDeviceStateCleanupJobMongo.d.ts +2 -0
  189. package/dist/types/jobs/sql/EasDeviceStateCleanupJobSQL.d.ts +4 -0
  190. package/dist/types/models/DeviceSyncState.d.ts +13 -2
  191. package/dist/types/models/EasCollectionChunk.d.ts +20 -0
  192. package/dist/types/models/EasCollectionState.d.ts +79 -0
  193. package/dist/types/models/mongo/DeviceSyncStateMongo.d.ts +1 -0
  194. package/dist/types/models/mongo/EasCollectionChunkMongo.d.ts +16 -0
  195. package/dist/types/models/mongo/EasCollectionStateMongo.d.ts +27 -0
  196. package/dist/types/models/sql/DeviceSyncStateSQL.d.ts +1 -0
  197. package/dist/types/models/sql/EasCollectionChunkSQL.d.ts +16 -0
  198. package/dist/types/models/sql/EasCollectionStateSQL.d.ts +27 -0
  199. package/dist/types/mongo.d.ts +2 -0
  200. package/dist/types/sql.d.ts +2 -0
  201. 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
- * deferred, matching this library's "pragmatic subset" precedent elsewhere (e.g. `FolderSyncCommand`'s SyncKey
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] ?? startDate.getUTCDate()))]
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] ?? startDate.getUTCMonth() + 1))]
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`/`sequence`/`icalUid` have no wire representation at
137
- * all (see this class's own "pragmatic subset" doc comment for `timezone`; the other three are purely
138
- * server-managed identifiers/state a client was never sent in the first place) and are never included in
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
- * `OrganizerEmail` is required for a new event (there is nowhere else to default it from - this adapter
144
- * has no mailbox context of its own) - a real calendar client always sends it regardless, since it already
145
- * knows its own account's address. Omitting it on an `Add` throws, which `SyncCommand.applyAdd` turns into
146
- * Status `6` ("client has sent a malformed or invalid item"), the spec's own designated code for exactly
147
- * this case.
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
- * `Attendees`/`Recurrence` are ghosted as a whole element, like `ContactsSyncAdapter`'s arrays: present at
150
- * all -> rebuilt entirely from what's there; absent -> left untouched on a `Change`.
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 (organizerEmail !== undefined) {
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
- partial.attendees = attendeesEl.children
191
- .filter((child) => child.tag === "Attendee")
192
- .map((attendeeEl) => this.attendeeFromElement(attendeeEl));
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 = this.recurrenceRuleFromElement(recurrenceEl);
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`, sequence: 0 };
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 { MessageImportance, RecipientType } from "@rapidmx/restapi";
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. One `find()`
61
- * per message that actually has labels (most won't, since labels are opt-in) - not batched across a whole Sync
62
- * page/search result set, a documented, modest N+1 tradeoff rather than widening this adapter's own interface
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` is supplied by the Mongo/SQL concrete subclasses.
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
- textElement(WbxmlCodePage.Email, "Flag", message.flags.flagged ? "1" : "0"),
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
- async resolveLabelNames(message) {
109
- if (!message.labelUids || message.labelUids.length === 0) {
110
- return [];
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 labels = await this.labelRepo.find({ mailboxUid: message.mailboxUid, uid: `in(${message.labelUids.join(",")})` }, { ignoreACL: true });
113
- return labels.map((label) => label.name);
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
- const flag = childText(el, "Flag");
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 === "1" } : {}),
228
+ ...(flag !== undefined ? { flagged: flag === FLAG_STATUS_ACTIVE } : {}),
157
229
  };
158
230
  }
159
231
  const bodyEl = findChild(el, "Body");
160
- if (bodyEl) {
161
- const text = childText(bodyEl, "Data") ?? "";
162
- // Reuse the existing blob key on a Change (overwriting its content) rather than minting a new one
163
- // - a fresh key is only needed the first time a body is set (a bare `existing.bodyBlobKey` of ""
164
- // means an earlier Add never included a Body element at all).
165
- const bodyBlobKey = existing?.bodyBlobKey || `bodies/${crypto.randomUUID()}`;
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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"}