@push.rocks/smartjmap 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.smartconfig.json +1 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.jmapclient.d.ts +22 -13
- package/dist_ts/classes.jmapclient.js +294 -153
- package/dist_ts/classes.jmapserver.d.ts +49 -4
- package/dist_ts/classes.jmapserver.js +852 -330
- package/dist_ts/interfaces.backend.d.ts +19 -0
- package/dist_ts/interfaces.backend.js +1 -1
- package/package.json +5 -6
- package/readme.md +36 -5
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.jmapclient.ts +360 -157
- package/ts/classes.jmapserver.ts +1271 -439
- package/ts/interfaces.backend.ts +21 -0
|
@@ -35,18 +35,8 @@ const EMAIL_PROPERTIES = [
|
|
|
35
35
|
export class JmapClient extends plugins.events.EventEmitter {
|
|
36
36
|
constructor(config) {
|
|
37
37
|
super();
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.apiUrl = '';
|
|
41
|
-
this.mailbox = null;
|
|
42
|
-
this.connected = false;
|
|
43
|
-
this.stopped = false;
|
|
44
|
-
this.lastEmailState = null;
|
|
45
|
-
this.seenEmailIds = new Set();
|
|
46
|
-
this.pollTimer = null;
|
|
47
|
-
this.sseAbortController = null;
|
|
48
|
-
this.fetchingDeltas = false;
|
|
49
|
-
this.deltaQueued = false;
|
|
38
|
+
this.generationCounter = 0;
|
|
39
|
+
this.connectionGeneration = null;
|
|
50
40
|
const auth = config.auth;
|
|
51
41
|
const hasBearer = typeof auth.accessToken === 'string';
|
|
52
42
|
const hasBasic = typeof auth.user === 'string' && typeof auth.pass === 'string';
|
|
@@ -69,21 +59,28 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
69
59
|
* Failures are emitted as 'error' events; connect() does not throw.
|
|
70
60
|
*/
|
|
71
61
|
async connect() {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.
|
|
75
|
-
|
|
62
|
+
const previousGeneration = this.connectionGeneration;
|
|
63
|
+
const generation = this.createConnectionGeneration();
|
|
64
|
+
this.connectionGeneration = generation;
|
|
65
|
+
if (previousGeneration) {
|
|
66
|
+
this.teardownGeneration(previousGeneration, new Error('JMAP connection was superseded by a newer connect().'));
|
|
67
|
+
}
|
|
76
68
|
try {
|
|
77
69
|
const response = await fetch(this.config.sessionUrl, {
|
|
78
70
|
headers: {
|
|
79
71
|
authorization: this.getAuthHeader(),
|
|
80
72
|
accept: 'application/json',
|
|
81
73
|
},
|
|
74
|
+
signal: generation.abortController.signal,
|
|
82
75
|
});
|
|
76
|
+
this.assertCurrentGeneration(generation);
|
|
83
77
|
if (!response.ok) {
|
|
84
|
-
|
|
78
|
+
const error = await this.createHttpError(response, 'Failed to fetch JMAP session');
|
|
79
|
+
this.assertCurrentGeneration(generation);
|
|
80
|
+
throw error;
|
|
85
81
|
}
|
|
86
82
|
const session = (await response.json());
|
|
83
|
+
this.assertCurrentGeneration(generation);
|
|
87
84
|
if (!session.capabilities || !(JMAP_CORE_CAPABILITY in session.capabilities)) {
|
|
88
85
|
throw new Error(`JMAP session is missing the ${JMAP_CORE_CAPABILITY} capability.`);
|
|
89
86
|
}
|
|
@@ -95,27 +92,31 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
95
92
|
if (!accountId) {
|
|
96
93
|
throw new Error('JMAP session has no primary account for urn:ietf:params:jmap:mail.');
|
|
97
94
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
generation.session = session;
|
|
96
|
+
generation.accountId = accountId;
|
|
97
|
+
generation.apiUrl = new URL(session.apiUrl, this.config.sessionUrl).toString();
|
|
98
|
+
generation.mailbox = await this.resolveMailbox(generation);
|
|
99
|
+
this.assertCurrentGeneration(generation);
|
|
102
100
|
// Capture the Email state before the initial sweep so no change is lost
|
|
103
101
|
// between the sweep and the start of watching (dedupe handles overlap).
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
this.connected = true;
|
|
102
|
+
generation.lastEmailState = await this.fetchEmailState(generation);
|
|
103
|
+
this.assertCurrentGeneration(generation);
|
|
104
|
+
generation.connected = true;
|
|
110
105
|
this.emit('connected');
|
|
111
|
-
await this.emitInitialEmails();
|
|
112
|
-
this.
|
|
106
|
+
await this.emitInitialEmails(generation);
|
|
107
|
+
this.assertCurrentGeneration(generation);
|
|
108
|
+
this.startWatching(generation);
|
|
113
109
|
}
|
|
114
110
|
catch (error) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
if (!this.isCurrentGeneration(generation)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const shouldEmitError = !generation.abortController.signal.aborted;
|
|
115
|
+
this.connectionGeneration = null;
|
|
116
|
+
generation.connected = false;
|
|
117
|
+
this.teardownGeneration(generation, error);
|
|
118
|
+
if (!shouldEmitError)
|
|
119
|
+
return;
|
|
119
120
|
this.emit('error', error);
|
|
120
121
|
}
|
|
121
122
|
}
|
|
@@ -124,10 +125,14 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
124
125
|
* 'disconnected' when the client was connected. Leaves no open handles.
|
|
125
126
|
*/
|
|
126
127
|
async disconnect() {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
const generation = this.connectionGeneration;
|
|
129
|
+
if (!generation)
|
|
130
|
+
return;
|
|
131
|
+
this.connectionGeneration = null;
|
|
132
|
+
const wasConnected = generation.connected;
|
|
133
|
+
generation.connected = false;
|
|
134
|
+
this.teardownGeneration(generation, new Error('JMAP client disconnected.'));
|
|
135
|
+
if (wasConnected) {
|
|
131
136
|
this.emit('disconnected');
|
|
132
137
|
}
|
|
133
138
|
}
|
|
@@ -138,10 +143,14 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
138
143
|
* JmapError with `httpStatus`/`problemType`/`jmapErrorType` fields.
|
|
139
144
|
*/
|
|
140
145
|
async request(methodCalls) {
|
|
141
|
-
|
|
146
|
+
return await this.requestWithGeneration(this.requireConnectedGeneration(), methodCalls);
|
|
147
|
+
}
|
|
148
|
+
async requestWithGeneration(generation, methodCalls) {
|
|
149
|
+
this.assertCurrentGeneration(generation);
|
|
150
|
+
if (!generation.apiUrl) {
|
|
142
151
|
throw new Error('JmapClient is not connected yet — call connect() first.');
|
|
143
152
|
}
|
|
144
|
-
const response = await fetch(
|
|
153
|
+
const response = await fetch(generation.apiUrl, {
|
|
145
154
|
method: 'POST',
|
|
146
155
|
headers: {
|
|
147
156
|
authorization: this.getAuthHeader(),
|
|
@@ -152,11 +161,16 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
152
161
|
using: [JMAP_CORE_CAPABILITY, JMAP_MAIL_CAPABILITY, JMAP_SUBMISSION_CAPABILITY],
|
|
153
162
|
methodCalls,
|
|
154
163
|
}),
|
|
164
|
+
signal: generation.abortController.signal,
|
|
155
165
|
});
|
|
166
|
+
this.assertCurrentGeneration(generation);
|
|
156
167
|
if (!response.ok) {
|
|
157
|
-
|
|
168
|
+
const error = await this.createHttpError(response, 'JMAP API request failed');
|
|
169
|
+
this.assertCurrentGeneration(generation);
|
|
170
|
+
throw error;
|
|
158
171
|
}
|
|
159
172
|
const parsed = (await response.json());
|
|
173
|
+
this.assertCurrentGeneration(generation);
|
|
160
174
|
const methodResponses = parsed.methodResponses ?? [];
|
|
161
175
|
for (const [name, args, callId] of methodResponses) {
|
|
162
176
|
if (name === 'error') {
|
|
@@ -171,8 +185,11 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
171
185
|
}
|
|
172
186
|
/** Returns all mailboxes of the account (Mailbox/get with ids: null). */
|
|
173
187
|
async getMailboxes() {
|
|
174
|
-
|
|
175
|
-
|
|
188
|
+
return await this.getMailboxesWithGeneration(this.requireConnectedGeneration());
|
|
189
|
+
}
|
|
190
|
+
async getMailboxesWithGeneration(generation) {
|
|
191
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
192
|
+
['Mailbox/get', { accountId: generation.accountId, ids: null }, 'mb0'],
|
|
176
193
|
]);
|
|
177
194
|
return (responses[0][1].list ?? []);
|
|
178
195
|
}
|
|
@@ -181,26 +198,32 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
181
198
|
* Email/get and returns resolved messages, newest first.
|
|
182
199
|
*/
|
|
183
200
|
async queryEmails(filter, limit) {
|
|
184
|
-
|
|
201
|
+
return await this.queryEmailsWithGeneration(this.requireConnectedGeneration(), filter, limit);
|
|
202
|
+
}
|
|
203
|
+
async queryEmailsWithGeneration(generation, filter, limit) {
|
|
204
|
+
const effectiveFilter = filter ?? (generation.mailbox ? { inMailbox: generation.mailbox.id } : {});
|
|
185
205
|
const queryArgs = {
|
|
186
|
-
accountId:
|
|
206
|
+
accountId: generation.accountId,
|
|
187
207
|
filter: effectiveFilter,
|
|
188
208
|
sort: [{ property: 'receivedAt', isAscending: false }],
|
|
189
209
|
};
|
|
190
210
|
if (typeof limit === 'number') {
|
|
191
211
|
queryArgs.limit = limit;
|
|
192
212
|
}
|
|
193
|
-
const responses = await this.
|
|
213
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
214
|
+
['Email/query', queryArgs, 'q0'],
|
|
215
|
+
]);
|
|
194
216
|
const ids = responses[0][1].ids ?? [];
|
|
195
217
|
if (!ids.length) {
|
|
196
218
|
return [];
|
|
197
219
|
}
|
|
198
|
-
const emails = await this.getEmailObjects(ids);
|
|
220
|
+
const emails = await this.getEmailObjects(generation, ids);
|
|
199
221
|
return emails.map((email) => this.toMessage(email));
|
|
200
222
|
}
|
|
201
223
|
/** Fetches a single email with all body values resolved (RFC 8621 §4.2, fetchAllBodyValues). */
|
|
202
224
|
async getEmail(id) {
|
|
203
|
-
const
|
|
225
|
+
const generation = this.requireConnectedGeneration();
|
|
226
|
+
const [email] = await this.getEmailObjects(generation, [id]);
|
|
204
227
|
if (!email) {
|
|
205
228
|
throw new Error(`Email "${id}" not found.`);
|
|
206
229
|
}
|
|
@@ -208,11 +231,51 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
208
231
|
}
|
|
209
232
|
/** Replaces the full keywords object of an email via Email/set. */
|
|
210
233
|
async setKeywords(emailId, keywords) {
|
|
211
|
-
await this.updateEmail(emailId, { keywords });
|
|
234
|
+
await this.updateEmail(this.requireConnectedGeneration(), emailId, { keywords });
|
|
212
235
|
}
|
|
213
236
|
/** Convenience: sets the $seen keyword via an Email/set keywords patch. */
|
|
214
237
|
async markSeen(emailId) {
|
|
215
|
-
await this.updateEmail(emailId, { 'keywords/$seen': true });
|
|
238
|
+
await this.updateEmail(this.requireConnectedGeneration(), emailId, { 'keywords/$seen': true });
|
|
239
|
+
}
|
|
240
|
+
/** Convenience: removes the $seen keyword via an Email/set keywords patch. */
|
|
241
|
+
async markUnseen(emailId) {
|
|
242
|
+
await this.updateEmail(this.requireConnectedGeneration(), emailId, { 'keywords/$seen': null });
|
|
243
|
+
}
|
|
244
|
+
/** Convenience: adds or removes the $flagged keyword. */
|
|
245
|
+
async setFlagged(emailId, flagged) {
|
|
246
|
+
await this.updateEmail(this.requireConnectedGeneration(), emailId, {
|
|
247
|
+
'keywords/$flagged': flagged ? true : null,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Replaces the email's mailbox membership. Pass one mailbox id for a
|
|
252
|
+
* provider-style move, or multiple ids when the remote JMAP account
|
|
253
|
+
* supports multi-mailbox membership.
|
|
254
|
+
*/
|
|
255
|
+
async setMailboxes(emailId, mailboxIds) {
|
|
256
|
+
const generation = this.requireConnectedGeneration();
|
|
257
|
+
const uniqueMailboxIds = [...new Set(mailboxIds.filter(Boolean))];
|
|
258
|
+
if (!uniqueMailboxIds.length) {
|
|
259
|
+
throw new Error('setMailboxes requires at least one mailbox id.');
|
|
260
|
+
}
|
|
261
|
+
await this.updateEmail(generation, emailId, {
|
|
262
|
+
mailboxIds: Object.fromEntries(uniqueMailboxIds.map((mailboxId) => [mailboxId, true])),
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/** Permanently destroys an email via Email/set. */
|
|
266
|
+
async destroyEmail(emailId) {
|
|
267
|
+
const generation = this.requireConnectedGeneration();
|
|
268
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
269
|
+
['Email/set', { accountId: generation.accountId, destroy: [emailId] }, 'd0'],
|
|
270
|
+
]);
|
|
271
|
+
const result = responses[0][1];
|
|
272
|
+
const notDestroyed = result.notDestroyed?.[emailId];
|
|
273
|
+
if (notDestroyed) {
|
|
274
|
+
throw new JmapError(`Email/set destroy of "${emailId}" failed: ${notDestroyed.type}${notDestroyed.description ? ` — ${notDestroyed.description}` : ''}`, {
|
|
275
|
+
jmapErrorType: notDestroyed.type,
|
|
276
|
+
jmapErrorDescription: notDestroyed.description,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
216
279
|
}
|
|
217
280
|
/**
|
|
218
281
|
* Sends an email: Identity/get lookup, Email/set create (into the mailbox
|
|
@@ -220,8 +283,9 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
220
283
|
* EmailSubmission/set referencing the created email.
|
|
221
284
|
*/
|
|
222
285
|
async sendEmail(outgoing) {
|
|
223
|
-
const
|
|
224
|
-
|
|
286
|
+
const generation = this.requireConnectedGeneration();
|
|
287
|
+
const identityResponses = await this.requestWithGeneration(generation, [
|
|
288
|
+
['Identity/get', { accountId: generation.accountId }, 'i0'],
|
|
225
289
|
]);
|
|
226
290
|
const identities = identityResponses[0][1].list ?? [];
|
|
227
291
|
const identity = (outgoing.from
|
|
@@ -231,10 +295,10 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
231
295
|
throw new Error('No JMAP identity available for sending.');
|
|
232
296
|
}
|
|
233
297
|
const from = outgoing.from ?? { name: identity.name ?? null, email: identity.email };
|
|
234
|
-
const mailboxes = await this.
|
|
298
|
+
const mailboxes = await this.getMailboxesWithGeneration(generation);
|
|
235
299
|
const targetMailbox = mailboxes.find((mb) => mb.role === 'sent') ??
|
|
236
300
|
mailboxes.find((mb) => mb.role === 'drafts') ??
|
|
237
|
-
|
|
301
|
+
generation.mailbox;
|
|
238
302
|
if (!targetMailbox) {
|
|
239
303
|
throw new Error('No mailbox available to store the outgoing email in.');
|
|
240
304
|
}
|
|
@@ -280,12 +344,12 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
280
344
|
disposition: 'attachment',
|
|
281
345
|
}));
|
|
282
346
|
}
|
|
283
|
-
const responses = await this.
|
|
284
|
-
['Email/set', { accountId:
|
|
347
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
348
|
+
['Email/set', { accountId: generation.accountId, create: { newEmail: emailCreate } }, 'c0'],
|
|
285
349
|
[
|
|
286
350
|
'EmailSubmission/set',
|
|
287
351
|
{
|
|
288
|
-
accountId:
|
|
352
|
+
accountId: generation.accountId,
|
|
289
353
|
create: { newSubmission: { emailId: '#newEmail', identityId: identity.id } },
|
|
290
354
|
},
|
|
291
355
|
'c1',
|
|
@@ -311,11 +375,12 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
311
375
|
* `sendEmail({ attachments: [...] })` or any other blob reference.
|
|
312
376
|
*/
|
|
313
377
|
async uploadBlob(data, type = 'application/octet-stream') {
|
|
314
|
-
const
|
|
378
|
+
const generation = this.requireConnectedGeneration();
|
|
379
|
+
const template = generation.session?.uploadUrl;
|
|
315
380
|
if (!template) {
|
|
316
381
|
throw new Error('JMAP session provides no uploadUrl — call connect() first.');
|
|
317
382
|
}
|
|
318
|
-
const expanded = template.replace('{accountId}', encodeURIComponent(
|
|
383
|
+
const expanded = template.replace('{accountId}', encodeURIComponent(generation.accountId));
|
|
319
384
|
const url = new URL(expanded, this.config.sessionUrl).toString();
|
|
320
385
|
// Re-wrap so the bytes are backed by a plain ArrayBuffer (BodyInit-safe).
|
|
321
386
|
const body = data.buffer instanceof ArrayBuffer ? data : new Uint8Array(data);
|
|
@@ -327,38 +392,102 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
327
392
|
accept: 'application/json',
|
|
328
393
|
},
|
|
329
394
|
body,
|
|
395
|
+
signal: generation.abortController.signal,
|
|
330
396
|
});
|
|
397
|
+
this.assertCurrentGeneration(generation);
|
|
331
398
|
if (!response.ok) {
|
|
332
|
-
|
|
399
|
+
const error = await this.createHttpError(response, 'Failed to upload blob');
|
|
400
|
+
this.assertCurrentGeneration(generation);
|
|
401
|
+
throw error;
|
|
333
402
|
}
|
|
334
|
-
|
|
403
|
+
const result = (await response.json());
|
|
404
|
+
this.assertCurrentGeneration(generation);
|
|
405
|
+
return result;
|
|
335
406
|
}
|
|
336
407
|
/**
|
|
337
408
|
* Downloads a blob's raw bytes using the session downloadUrl template
|
|
338
409
|
* (RFC 8620 §6.2: {accountId}, {blobId}, {type}, {name}).
|
|
339
410
|
*/
|
|
340
411
|
async downloadBlob(blobId, type = 'application/octet-stream', name = 'blob') {
|
|
341
|
-
const
|
|
412
|
+
const generation = this.requireConnectedGeneration();
|
|
413
|
+
const template = generation.session?.downloadUrl;
|
|
342
414
|
if (!template) {
|
|
343
415
|
throw new Error('JMAP session provides no downloadUrl — call connect() first.');
|
|
344
416
|
}
|
|
345
417
|
const expanded = template
|
|
346
|
-
.replace('{accountId}', encodeURIComponent(
|
|
418
|
+
.replace('{accountId}', encodeURIComponent(generation.accountId))
|
|
347
419
|
.replace('{blobId}', encodeURIComponent(blobId))
|
|
348
420
|
.replace('{type}', encodeURIComponent(type))
|
|
349
421
|
.replace('{name}', encodeURIComponent(name));
|
|
350
422
|
const url = new URL(expanded, this.config.sessionUrl).toString();
|
|
351
423
|
const response = await fetch(url, {
|
|
352
424
|
headers: { authorization: this.getAuthHeader() },
|
|
425
|
+
signal: generation.abortController.signal,
|
|
353
426
|
});
|
|
427
|
+
this.assertCurrentGeneration(generation);
|
|
354
428
|
if (!response.ok) {
|
|
355
|
-
|
|
429
|
+
const error = await this.createHttpError(response, `Failed to download blob "${blobId}"`);
|
|
430
|
+
this.assertCurrentGeneration(generation);
|
|
431
|
+
throw error;
|
|
356
432
|
}
|
|
357
|
-
|
|
433
|
+
const data = new Uint8Array(await response.arrayBuffer());
|
|
434
|
+
this.assertCurrentGeneration(generation);
|
|
435
|
+
return data;
|
|
358
436
|
}
|
|
359
437
|
// ======================
|
|
360
438
|
// internal helpers
|
|
361
439
|
// ======================
|
|
440
|
+
createConnectionGeneration() {
|
|
441
|
+
return {
|
|
442
|
+
id: ++this.generationCounter,
|
|
443
|
+
abortController: new AbortController(),
|
|
444
|
+
session: null,
|
|
445
|
+
accountId: '',
|
|
446
|
+
apiUrl: '',
|
|
447
|
+
mailbox: null,
|
|
448
|
+
connected: false,
|
|
449
|
+
lastEmailState: null,
|
|
450
|
+
seenEmailIds: new Set(),
|
|
451
|
+
pollTimer: null,
|
|
452
|
+
sseAbortController: null,
|
|
453
|
+
fetchingDeltas: false,
|
|
454
|
+
deltaQueued: false,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
isCurrentGeneration(generation) {
|
|
458
|
+
return (this.connectionGeneration === generation &&
|
|
459
|
+
!generation.abortController.signal.aborted);
|
|
460
|
+
}
|
|
461
|
+
assertCurrentGeneration(generation) {
|
|
462
|
+
if (this.isCurrentGeneration(generation))
|
|
463
|
+
return;
|
|
464
|
+
const reason = generation.abortController.signal.reason;
|
|
465
|
+
throw reason instanceof Error
|
|
466
|
+
? reason
|
|
467
|
+
: new Error(`JMAP connection generation ${generation.id} is no longer active.`);
|
|
468
|
+
}
|
|
469
|
+
requireConnectedGeneration() {
|
|
470
|
+
const generation = this.connectionGeneration;
|
|
471
|
+
if (!generation || !generation.connected) {
|
|
472
|
+
throw new Error('JmapClient is not connected yet — call connect() first.');
|
|
473
|
+
}
|
|
474
|
+
this.assertCurrentGeneration(generation);
|
|
475
|
+
return generation;
|
|
476
|
+
}
|
|
477
|
+
teardownGeneration(generation, reason) {
|
|
478
|
+
if (!generation.abortController.signal.aborted) {
|
|
479
|
+
generation.abortController.abort(reason);
|
|
480
|
+
}
|
|
481
|
+
if (generation.sseAbortController) {
|
|
482
|
+
generation.sseAbortController.abort(reason);
|
|
483
|
+
generation.sseAbortController = null;
|
|
484
|
+
}
|
|
485
|
+
if (generation.pollTimer) {
|
|
486
|
+
clearInterval(generation.pollTimer);
|
|
487
|
+
generation.pollTimer = null;
|
|
488
|
+
}
|
|
489
|
+
generation.deltaQueued = false;
|
|
490
|
+
}
|
|
362
491
|
getAuthHeader() {
|
|
363
492
|
const auth = this.config.auth;
|
|
364
493
|
if (typeof auth.accessToken === 'string') {
|
|
@@ -381,9 +510,9 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
381
510
|
}
|
|
382
511
|
return new JmapError(`${messagePrefix}: HTTP ${response.status}${problemDetail ? ` — ${problemDetail}` : ''}${problemType ? ` (${problemType})` : ''}`, { httpStatus: response.status, problemType, problemDetail });
|
|
383
512
|
}
|
|
384
|
-
async resolveMailbox() {
|
|
385
|
-
const responses = await this.
|
|
386
|
-
['Mailbox/get', { accountId:
|
|
513
|
+
async resolveMailbox(generation) {
|
|
514
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
515
|
+
['Mailbox/get', { accountId: generation.accountId, ids: null }, 'mb0'],
|
|
387
516
|
]);
|
|
388
517
|
const list = (responses[0][1].list ?? []);
|
|
389
518
|
const wanted = this.config.mailbox ?? 'INBOX';
|
|
@@ -396,18 +525,18 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
396
525
|
}
|
|
397
526
|
return mailbox;
|
|
398
527
|
}
|
|
399
|
-
async fetchEmailState() {
|
|
400
|
-
const responses = await this.
|
|
401
|
-
['Email/get', { accountId:
|
|
528
|
+
async fetchEmailState(generation) {
|
|
529
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
530
|
+
['Email/get', { accountId: generation.accountId, ids: [] }, 'st0'],
|
|
402
531
|
]);
|
|
403
532
|
return String(responses[0][1].state ?? '');
|
|
404
533
|
}
|
|
405
|
-
async getEmailObjects(ids) {
|
|
406
|
-
const responses = await this.
|
|
534
|
+
async getEmailObjects(generation, ids) {
|
|
535
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
407
536
|
[
|
|
408
537
|
'Email/get',
|
|
409
538
|
{
|
|
410
|
-
accountId:
|
|
539
|
+
accountId: generation.accountId,
|
|
411
540
|
ids,
|
|
412
541
|
properties: EMAIL_PROPERTIES,
|
|
413
542
|
fetchAllBodyValues: true,
|
|
@@ -417,9 +546,9 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
417
546
|
]);
|
|
418
547
|
return (responses[0][1].list ?? []);
|
|
419
548
|
}
|
|
420
|
-
async updateEmail(emailId, patch) {
|
|
421
|
-
const responses = await this.
|
|
422
|
-
['Email/set', { accountId:
|
|
549
|
+
async updateEmail(generation, emailId, patch) {
|
|
550
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
551
|
+
['Email/set', { accountId: generation.accountId, update: { [emailId]: patch } }, 'u0'],
|
|
423
552
|
]);
|
|
424
553
|
const result = responses[0][1];
|
|
425
554
|
const notUpdated = result.notUpdated?.[emailId];
|
|
@@ -461,30 +590,30 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
461
590
|
raw: email,
|
|
462
591
|
};
|
|
463
592
|
}
|
|
464
|
-
emitMessage(message) {
|
|
465
|
-
if (this.seenEmailIds.has(message.id)) {
|
|
593
|
+
emitMessage(generation, message) {
|
|
594
|
+
if (!this.isCurrentGeneration(generation) || generation.seenEmailIds.has(message.id)) {
|
|
466
595
|
return;
|
|
467
596
|
}
|
|
468
|
-
|
|
597
|
+
generation.seenEmailIds.add(message.id);
|
|
469
598
|
this.emit('message', message);
|
|
470
599
|
}
|
|
471
|
-
async emitInitialEmails() {
|
|
472
|
-
const messages = await this.
|
|
600
|
+
async emitInitialEmails(generation) {
|
|
601
|
+
const messages = await this.queryEmailsWithGeneration(generation);
|
|
602
|
+
this.assertCurrentGeneration(generation);
|
|
473
603
|
// queryEmails sorts newest first; emit oldest first for natural ordering
|
|
474
604
|
for (const message of messages.reverse()) {
|
|
475
|
-
this.emitMessage(message);
|
|
605
|
+
this.emitMessage(generation, message);
|
|
476
606
|
}
|
|
477
607
|
}
|
|
478
|
-
startWatching() {
|
|
479
|
-
if (this.
|
|
608
|
+
startWatching(generation) {
|
|
609
|
+
if (!this.isCurrentGeneration(generation))
|
|
480
610
|
return;
|
|
481
|
-
|
|
482
|
-
const eventSourceUrl = this.session?.eventSourceUrl;
|
|
611
|
+
const eventSourceUrl = generation.session?.eventSourceUrl;
|
|
483
612
|
if (eventSourceUrl) {
|
|
484
|
-
this.startEventStream(eventSourceUrl);
|
|
613
|
+
this.startEventStream(generation, eventSourceUrl);
|
|
485
614
|
}
|
|
486
615
|
else {
|
|
487
|
-
this.startPolling();
|
|
616
|
+
this.startPolling(generation);
|
|
488
617
|
}
|
|
489
618
|
}
|
|
490
619
|
/**
|
|
@@ -493,7 +622,9 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
493
622
|
* EventSource because JMAP requires an Authorization header, which the
|
|
494
623
|
* WHATWG EventSource API cannot send.
|
|
495
624
|
*/
|
|
496
|
-
startEventStream(templateUrl) {
|
|
625
|
+
startEventStream(generation, templateUrl) {
|
|
626
|
+
if (!this.isCurrentGeneration(generation))
|
|
627
|
+
return;
|
|
497
628
|
const expanded = templateUrl
|
|
498
629
|
.replace('{types}', '*')
|
|
499
630
|
.replace('{closeafter}', 'no')
|
|
@@ -501,28 +632,35 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
501
632
|
const url = new URL(expanded, this.config.sessionUrl).toString();
|
|
502
633
|
// Last stream wins under any interleaving: abort a previous stream before
|
|
503
634
|
// installing the new controller.
|
|
504
|
-
if (
|
|
505
|
-
|
|
635
|
+
if (generation.sseAbortController) {
|
|
636
|
+
generation.sseAbortController.abort(new Error('JMAP event stream was superseded.'));
|
|
506
637
|
}
|
|
507
638
|
const abortController = new AbortController();
|
|
508
|
-
|
|
509
|
-
void this.runEventStream(url, abortController);
|
|
639
|
+
generation.sseAbortController = abortController;
|
|
640
|
+
void this.runEventStream(generation, url, abortController);
|
|
510
641
|
}
|
|
511
|
-
async runEventStream(url, abortController) {
|
|
642
|
+
async runEventStream(generation, url, abortController) {
|
|
512
643
|
try {
|
|
644
|
+
const signal = AbortSignal.any([
|
|
645
|
+
generation.abortController.signal,
|
|
646
|
+
abortController.signal,
|
|
647
|
+
]);
|
|
513
648
|
const response = await fetch(url, {
|
|
514
649
|
headers: {
|
|
515
650
|
authorization: this.getAuthHeader(),
|
|
516
651
|
accept: 'text/event-stream',
|
|
517
652
|
},
|
|
518
|
-
signal
|
|
653
|
+
signal,
|
|
519
654
|
});
|
|
655
|
+
this.assertCurrentGeneration(generation);
|
|
656
|
+
if (abortController.signal.aborted)
|
|
657
|
+
return;
|
|
520
658
|
if (!response.ok || !response.body) {
|
|
521
659
|
throw new Error(`JMAP event source unavailable (HTTP ${response.status}).`);
|
|
522
660
|
}
|
|
523
661
|
// The stream is live; catch up on anything that changed between the
|
|
524
662
|
// initial state snapshot and the stream being established.
|
|
525
|
-
void this.fetchDeltas();
|
|
663
|
+
void this.fetchDeltas(generation);
|
|
526
664
|
const reader = response.body.getReader();
|
|
527
665
|
const decoder = new TextDecoder();
|
|
528
666
|
let buffer = '';
|
|
@@ -530,6 +668,9 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
530
668
|
let dataLines = [];
|
|
531
669
|
while (true) {
|
|
532
670
|
const { done, value } = await reader.read();
|
|
671
|
+
this.assertCurrentGeneration(generation);
|
|
672
|
+
if (abortController.signal.aborted)
|
|
673
|
+
return;
|
|
533
674
|
if (done) {
|
|
534
675
|
break;
|
|
535
676
|
}
|
|
@@ -540,7 +681,7 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
540
681
|
buffer = buffer.slice(newlineIndex + 1);
|
|
541
682
|
if (line === '') {
|
|
542
683
|
if (dataLines.length) {
|
|
543
|
-
this.handleEventStreamEvent(eventName, dataLines.join('\n'));
|
|
684
|
+
this.handleEventStreamEvent(generation, eventName, dataLines.join('\n'));
|
|
544
685
|
}
|
|
545
686
|
eventName = 'message';
|
|
546
687
|
dataLines = [];
|
|
@@ -559,28 +700,32 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
559
700
|
}
|
|
560
701
|
// Stream ended server-side: fall back to polling (mirroring the catch
|
|
561
702
|
// guards so a superseded stream's continuation stays inert).
|
|
562
|
-
if (
|
|
563
|
-
if (
|
|
564
|
-
|
|
703
|
+
if (this.isCurrentGeneration(generation) && !abortController.signal.aborted) {
|
|
704
|
+
if (generation.sseAbortController === abortController) {
|
|
705
|
+
generation.sseAbortController = null;
|
|
565
706
|
}
|
|
566
|
-
this.startPolling();
|
|
707
|
+
this.startPolling(generation);
|
|
567
708
|
}
|
|
568
709
|
}
|
|
569
710
|
catch (error) {
|
|
570
|
-
if (this.
|
|
711
|
+
if (!this.isCurrentGeneration(generation) ||
|
|
712
|
+
generation.abortController.signal.aborted ||
|
|
713
|
+
abortController.signal.aborted) {
|
|
571
714
|
return;
|
|
572
715
|
}
|
|
573
716
|
// Event stream unavailable or broken: abort so any held response body
|
|
574
717
|
// (e.g. an unconsumed non-OK response) releases its connection, then
|
|
575
718
|
// fall back to polling.
|
|
576
|
-
abortController.abort();
|
|
577
|
-
if (
|
|
578
|
-
|
|
719
|
+
abortController.abort(error);
|
|
720
|
+
if (generation.sseAbortController === abortController) {
|
|
721
|
+
generation.sseAbortController = null;
|
|
579
722
|
}
|
|
580
|
-
this.startPolling();
|
|
723
|
+
this.startPolling(generation);
|
|
581
724
|
}
|
|
582
725
|
}
|
|
583
|
-
handleEventStreamEvent(eventName, data) {
|
|
726
|
+
handleEventStreamEvent(generation, eventName, data) {
|
|
727
|
+
if (!this.isCurrentGeneration(generation))
|
|
728
|
+
return;
|
|
584
729
|
let parsed;
|
|
585
730
|
try {
|
|
586
731
|
parsed = JSON.parse(data);
|
|
@@ -591,72 +736,75 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
591
736
|
if (eventName !== 'state' && parsed?.['@type'] !== 'StateChange') {
|
|
592
737
|
return;
|
|
593
738
|
}
|
|
594
|
-
const changed = parsed?.changed?.[
|
|
739
|
+
const changed = parsed?.changed?.[generation.accountId];
|
|
595
740
|
const emailState = changed?.Email;
|
|
596
|
-
if (typeof emailState === 'string' && emailState !==
|
|
597
|
-
void this.fetchDeltas();
|
|
741
|
+
if (typeof emailState === 'string' && emailState !== generation.lastEmailState) {
|
|
742
|
+
void this.fetchDeltas(generation);
|
|
598
743
|
}
|
|
599
744
|
}
|
|
600
|
-
startPolling() {
|
|
601
|
-
if (
|
|
745
|
+
startPolling(generation) {
|
|
746
|
+
if (generation.pollTimer || !this.isCurrentGeneration(generation)) {
|
|
602
747
|
return;
|
|
603
748
|
}
|
|
604
749
|
const interval = this.config.pollIntervalMs ?? 30000;
|
|
605
|
-
|
|
606
|
-
void this.fetchDeltas();
|
|
750
|
+
generation.pollTimer = setInterval(() => {
|
|
751
|
+
void this.fetchDeltas(generation);
|
|
607
752
|
}, interval);
|
|
608
753
|
}
|
|
609
|
-
async fetchDeltas() {
|
|
610
|
-
if (this.
|
|
754
|
+
async fetchDeltas(generation) {
|
|
755
|
+
if (!this.isCurrentGeneration(generation))
|
|
611
756
|
return;
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
this.deltaQueued = true;
|
|
757
|
+
if (generation.fetchingDeltas) {
|
|
758
|
+
generation.deltaQueued = true;
|
|
615
759
|
return;
|
|
616
760
|
}
|
|
617
|
-
|
|
761
|
+
generation.fetchingDeltas = true;
|
|
618
762
|
try {
|
|
619
763
|
do {
|
|
620
|
-
|
|
621
|
-
await this.fetchDeltasOnce();
|
|
622
|
-
} while (
|
|
764
|
+
generation.deltaQueued = false;
|
|
765
|
+
await this.fetchDeltasOnce(generation);
|
|
766
|
+
} while (generation.deltaQueued && this.isCurrentGeneration(generation));
|
|
623
767
|
}
|
|
624
768
|
finally {
|
|
625
|
-
|
|
769
|
+
generation.fetchingDeltas = false;
|
|
626
770
|
}
|
|
627
771
|
}
|
|
628
|
-
async fetchDeltasOnce() {
|
|
772
|
+
async fetchDeltasOnce(generation) {
|
|
629
773
|
try {
|
|
630
774
|
let hasMore = true;
|
|
631
|
-
while (hasMore &&
|
|
632
|
-
const sinceState =
|
|
633
|
-
const responses = await this.
|
|
634
|
-
['Email/changes', { accountId:
|
|
775
|
+
while (hasMore && this.isCurrentGeneration(generation)) {
|
|
776
|
+
const sinceState = generation.lastEmailState;
|
|
777
|
+
const responses = await this.requestWithGeneration(generation, [
|
|
778
|
+
['Email/changes', { accountId: generation.accountId, sinceState }, 'ch0'],
|
|
635
779
|
]);
|
|
780
|
+
this.assertCurrentGeneration(generation);
|
|
636
781
|
const changes = responses[0][1];
|
|
637
|
-
|
|
638
|
-
hasMore =
|
|
782
|
+
generation.lastEmailState = String(changes.newState ?? sinceState);
|
|
783
|
+
hasMore =
|
|
784
|
+
changes.hasMoreChanges === true && generation.lastEmailState !== sinceState;
|
|
639
785
|
const createdIds = changes.created ?? [];
|
|
640
786
|
if (createdIds.length) {
|
|
641
|
-
const emails = await this.getEmailObjects(createdIds);
|
|
787
|
+
const emails = await this.getEmailObjects(generation, createdIds);
|
|
788
|
+
this.assertCurrentGeneration(generation);
|
|
642
789
|
for (const email of emails) {
|
|
643
|
-
if (
|
|
644
|
-
this.emitMessage(this.toMessage(email));
|
|
790
|
+
if (generation.mailbox && email.mailboxIds?.[generation.mailbox.id]) {
|
|
791
|
+
this.emitMessage(generation, this.toMessage(email));
|
|
645
792
|
}
|
|
646
793
|
}
|
|
647
794
|
}
|
|
648
795
|
}
|
|
649
796
|
}
|
|
650
797
|
catch (error) {
|
|
651
|
-
if (this.
|
|
798
|
+
if (!this.isCurrentGeneration(generation))
|
|
652
799
|
return;
|
|
653
|
-
}
|
|
654
800
|
if (error?.jmapErrorType === 'cannotCalculateChanges') {
|
|
655
801
|
try {
|
|
656
|
-
await this.resyncViaQuery();
|
|
802
|
+
await this.resyncViaQuery(generation);
|
|
657
803
|
}
|
|
658
804
|
catch (resyncError) {
|
|
659
|
-
this.
|
|
805
|
+
if (this.isCurrentGeneration(generation)) {
|
|
806
|
+
this.emit('error', resyncError);
|
|
807
|
+
}
|
|
660
808
|
}
|
|
661
809
|
}
|
|
662
810
|
else {
|
|
@@ -665,22 +813,15 @@ export class JmapClient extends plugins.events.EventEmitter {
|
|
|
665
813
|
}
|
|
666
814
|
}
|
|
667
815
|
/** Full resync fallback when the server cannot calculate changes. */
|
|
668
|
-
async resyncViaQuery() {
|
|
669
|
-
|
|
670
|
-
|
|
816
|
+
async resyncViaQuery(generation) {
|
|
817
|
+
const state = await this.fetchEmailState(generation);
|
|
818
|
+
this.assertCurrentGeneration(generation);
|
|
819
|
+
generation.lastEmailState = state;
|
|
820
|
+
const messages = await this.queryEmailsWithGeneration(generation);
|
|
821
|
+
this.assertCurrentGeneration(generation);
|
|
671
822
|
for (const message of messages.reverse()) {
|
|
672
|
-
this.emitMessage(message);
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
teardownWatchers() {
|
|
676
|
-
if (this.sseAbortController) {
|
|
677
|
-
this.sseAbortController.abort();
|
|
678
|
-
this.sseAbortController = null;
|
|
679
|
-
}
|
|
680
|
-
if (this.pollTimer) {
|
|
681
|
-
clearInterval(this.pollTimer);
|
|
682
|
-
this.pollTimer = null;
|
|
823
|
+
this.emitMessage(generation, message);
|
|
683
824
|
}
|
|
684
825
|
}
|
|
685
826
|
}
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qbWFwY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5qbWFwY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUEySzVFLDJGQUEyRjtBQUMzRixNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFRbEMsWUFBWSxPQUFlLEVBQUUsU0FBNkIsRUFBRTtRQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztRQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLElBQUk7SUFDSixRQUFRO0lBQ1IsVUFBVTtJQUNWLFlBQVk7SUFDWixVQUFVO0lBQ1YsTUFBTTtJQUNOLFlBQVk7SUFDWixRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxTQUFTO0lBQ1QsZUFBZTtJQUNmLFNBQVM7SUFDVCxZQUFZO0lBQ1osVUFBVTtJQUNWLFVBQVU7SUFDVixhQUFhO0NBQ2QsQ0FBQztBQUVGLE1BQU0sT0FBTyxVQUFXLFNBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBZXpELFlBQVksTUFBeUI7UUFDbkMsS0FBSyxFQUFFLENBQUM7UUFkRixZQUFPLEdBQXdCLElBQUksQ0FBQztRQUNwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLFdBQU0sR0FBVyxFQUFF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
|
|
827
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5qbWFwY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5qbWFwY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUNBQWlDLENBQUM7QUEySzVFLDJGQUEyRjtBQUMzRixNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFRbEMsWUFBWSxPQUFlLEVBQUUsU0FBNkIsRUFBRTtRQUMxRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztRQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLElBQUk7SUFDSixRQUFRO0lBQ1IsVUFBVTtJQUNWLFlBQVk7SUFDWixVQUFVO0lBQ1YsTUFBTTtJQUNOLFlBQVk7SUFDWixRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxTQUFTO0lBQ1QsZUFBZTtJQUNmLFNBQVM7SUFDVCxZQUFZO0lBQ1osVUFBVTtJQUNWLFVBQVU7SUFDVixhQUFhO0NBQ2QsQ0FBQztBQWtCRixNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUt6RCxZQUFZLE1BQXlCO1FBQ25DLEtBQUssRUFBRSxDQUFDO1FBSkYsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLHlCQUFvQixHQUFpQyxJQUFJLENBQUM7UUFLaEUsTUFBTSxJQUFJ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
|