@remit/imap-worker 0.0.70 → 0.0.71

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remit/imap-worker",
3
- "version": "0.0.70",
3
+ "version": "0.0.71",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { beforeEach, describe, it } from "node:test";
3
- import type { Logger } from "@remit/logger-lambda";
3
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
4
4
  import type { AppendSentMessageEvent } from "../events.js";
5
5
  import {
6
6
  APPEND_SENT_MAX_ATTEMPTS,
@@ -8,16 +8,6 @@ import {
8
8
  handleAppendSentMessage,
9
9
  } from "./append-sent-message.js";
10
10
 
11
- const noopLog = {
12
- info: () => {},
13
- warn: () => {},
14
- error: () => {},
15
- debug: () => {},
16
- fatal: () => {},
17
- trace: () => {},
18
- child: () => noopLog,
19
- } as unknown as Logger;
20
-
21
11
  interface Call {
22
12
  method: string;
23
13
  args: unknown[];
@@ -175,7 +165,7 @@ describe("handleAppendSentMessage", () => {
175
165
  });
176
166
 
177
167
  it("appends a seen RFC822 copy to the Sent folder and drops the outbox row", async () => {
178
- await handleAppendSentMessage(event, noopLog, 1, deps());
168
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
179
169
 
180
170
  const append = called("connection.append")[0];
181
171
  assert.equal(append?.args[0], "INBOX/Sent");
@@ -188,7 +178,7 @@ describe("handleAppendSentMessage", () => {
188
178
  });
189
179
 
190
180
  it("takes the draft's stored attachments with the row (#679)", async () => {
191
- await handleAppendSentMessage(event, noopLog, 1, deps());
181
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
192
182
 
193
183
  // The row is the only reference to those objects. Sweeping has to happen
194
184
  // here too, not only on a discard, or a sent message leaves its files
@@ -201,7 +191,7 @@ describe("handleAppendSentMessage", () => {
201
191
  });
202
192
 
203
193
  it("builds the message from the outbox row's own headers", async () => {
204
- await handleAppendSentMessage(event, noopLog, 1, deps());
194
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
205
195
 
206
196
  const raw = String(called("connection.append")[0]?.args[1] as Buffer);
207
197
  assert.match(raw, /^From: Alice <alice@example\.com>$/m);
@@ -216,7 +206,7 @@ describe("handleAppendSentMessage", () => {
216
206
  it("uses a bare address when the outbox row carries no display name", async () => {
217
207
  h.outbox = { ...h.outbox, fromName: undefined };
218
208
 
219
- await handleAppendSentMessage(event, noopLog, 1, deps());
209
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
220
210
 
221
211
  const raw = String(called("connection.append")[0]?.args[1] as Buffer);
222
212
  assert.match(raw, /^From: alice@example\.com$/m);
@@ -225,7 +215,7 @@ describe("handleAppendSentMessage", () => {
225
215
  it("settles the row as unfiled when the account has no Sent folder at all", async () => {
226
216
  h.sentMailbox = null;
227
217
 
228
- await handleAppendSentMessage(event, noopLog, 1, deps());
218
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
229
219
 
230
220
  assert.equal(called("connection.append").length, 0);
231
221
  assert.equal(called("outboxMessage.delete").length, 0);
@@ -243,7 +233,7 @@ describe("handleAppendSentMessage", () => {
243
233
  it("skips the append while the outbox row is not yet sent", async () => {
244
234
  h.outbox = { ...h.outbox, status: "pending" };
245
235
 
246
- await handleAppendSentMessage(event, noopLog, 1, deps());
236
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
247
237
 
248
238
  assert.equal(called("connection.append").length, 0);
249
239
  assert.equal(called("outboxMessage.delete").length, 0);
@@ -252,7 +242,7 @@ describe("handleAppendSentMessage", () => {
252
242
  it("returns early without touching the outbox when the account is soft-deleted", async () => {
253
243
  h.account = { ...h.account, deletedAt: Date.now() };
254
244
 
255
- await handleAppendSentMessage(event, noopLog, 1, deps());
245
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
256
246
 
257
247
  assert.equal(called("connection.append").length, 0);
258
248
  assert.equal(called("outboxMessage.delete").length, 0);
@@ -264,7 +254,7 @@ describe("handleAppendSentMessage", () => {
264
254
  };
265
255
 
266
256
  await assert.rejects(
267
- handleAppendSentMessage(event, noopLog, 1, deps()),
257
+ handleAppendSentMessage(event, noopLogger, 1, deps()),
268
258
  /server exploded/,
269
259
  );
270
260
 
@@ -282,7 +272,7 @@ describe("handleAppendSentMessage", () => {
282
272
 
283
273
  await handleAppendSentMessage(
284
274
  event,
285
- noopLog,
275
+ noopLogger,
286
276
  APPEND_SENT_MAX_ATTEMPTS,
287
277
  deps(),
288
278
  );
@@ -301,7 +291,7 @@ describe("handleAppendSentMessage", () => {
301
291
  it("settles the row as unfiled when a terminal auth failure acks the record", async () => {
302
292
  h.ackWithoutWork = true;
303
293
 
304
- await handleAppendSentMessage(event, noopLog, 1, deps());
294
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
305
295
 
306
296
  const patch = called("outboxMessage.update")[0]?.args[2] as {
307
297
  status: string;
@@ -313,7 +303,7 @@ describe("handleAppendSentMessage", () => {
313
303
 
314
304
  it("leaves the row alone when the APPEND landed but the delete did not", async () => {
315
305
  await assert.rejects(
316
- handleAppendSentMessage(event, noopLog, 1, depsWithFailingDelete()),
306
+ handleAppendSentMessage(event, noopLogger, 1, depsWithFailingDelete()),
317
307
  /storage down/,
318
308
  );
319
309
 
@@ -325,7 +315,7 @@ describe("handleAppendSentMessage", () => {
325
315
  it("stops redelivering a landed APPEND at the budget instead of filing another copy", async () => {
326
316
  await handleAppendSentMessage(
327
317
  event,
328
- noopLog,
318
+ noopLogger,
329
319
  APPEND_SENT_MAX_ATTEMPTS,
330
320
  depsWithFailingDelete(),
331
321
  );
@@ -335,7 +325,7 @@ describe("handleAppendSentMessage", () => {
335
325
  });
336
326
 
337
327
  it("records the uid the APPEND produced before it deletes the row", async () => {
338
- await handleAppendSentMessage(event, noopLog, 1, deps());
328
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
339
329
 
340
330
  // Order is the whole of it: a uid written after the delete is a uid a
341
331
  // redelivery never sees, and the redelivery is what files the second copy.
@@ -352,7 +342,7 @@ describe("handleAppendSentMessage", () => {
352
342
  // nothing, and "filed" still has to be told apart from "not filed".
353
343
  h.append = async () => ({ uid: 0, uidValidity: 0 });
354
344
 
355
- await handleAppendSentMessage(event, noopLog, 1, deps());
345
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
356
346
 
357
347
  assert.deepEqual(patches(), [{ appendedUid: -1 }]);
358
348
  assert.equal(called("outboxMessage.delete").length, 1);
@@ -361,7 +351,7 @@ describe("handleAppendSentMessage", () => {
361
351
  it("files nothing a second time when a redelivery finds a recorded uid (#858)", async () => {
362
352
  h.outbox = { ...h.outbox, appendedUid: 55 };
363
353
 
364
- await handleAppendSentMessage(event, noopLog, 1, deps());
354
+ await handleAppendSentMessage(event, noopLogger, 1, deps());
365
355
 
366
356
  // The copy is already in the user's Sent folder. All this redelivery owes
367
357
  // is the delete the last attempt could not make.
@@ -382,7 +372,7 @@ describe("handleAppendSentMessage", () => {
382
372
  h.outbox = { ...h.outbox, appendedUid: 55 };
383
373
 
384
374
  await assert.rejects(
385
- handleAppendSentMessage(event, noopLog, 1, depsWithFailingDelete()),
375
+ handleAppendSentMessage(event, noopLogger, 1, depsWithFailingDelete()),
386
376
  /storage down/,
387
377
  );
388
378
 
@@ -392,7 +382,7 @@ describe("handleAppendSentMessage", () => {
392
382
 
393
383
  it("keeps the row when the uid cannot be recorded", async () => {
394
384
  await assert.rejects(
395
- handleAppendSentMessage(event, noopLog, 1, depsWithFailingUpdate()),
385
+ handleAppendSentMessage(event, noopLogger, 1, depsWithFailingUpdate()),
396
386
  /storage down/,
397
387
  );
398
388
 
@@ -425,7 +415,7 @@ describe("handleAppendSentMessage", () => {
425
415
  },
426
416
  };
427
417
 
428
- await handleAppendSentMessage(event, noopLog, 1, failing);
418
+ await handleAppendSentMessage(event, noopLogger, 1, failing);
429
419
 
430
420
  assert.equal(called("connection.append").length, 0);
431
421
  assert.deepEqual(patches(), []);
@@ -436,7 +426,7 @@ describe("handleAppendSentMessage", () => {
436
426
 
437
427
  await handleAppendSentMessage(
438
428
  event,
439
- noopLog,
429
+ noopLogger,
440
430
  APPEND_SENT_MAX_ATTEMPTS,
441
431
  depsWithFailingDelete(),
442
432
  );
@@ -6,21 +6,11 @@ import {
6
6
  S3Client,
7
7
  } from "@aws-sdk/client-s3";
8
8
  import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
9
- import type { Logger } from "@remit/logger-lambda";
9
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
10
10
  import { mockClient } from "aws-sdk-client-mock";
11
11
  import type { DeleteAccountObjectsEvent } from "../events.js";
12
12
  import { handleDeleteAccountObjects } from "./delete-account-objects.js";
13
13
 
14
- const noopLog = {
15
- info: () => {},
16
- warn: () => {},
17
- error: () => {},
18
- debug: () => {},
19
- fatal: () => {},
20
- trace: () => {},
21
- child: () => noopLog,
22
- } as unknown as Logger;
23
-
24
14
  const s3Mock = mockClient(S3Client);
25
15
  const sqsMock = mockClient(SQSClient);
26
16
 
@@ -45,7 +35,7 @@ describe("handleDeleteAccountObjects", () => {
45
35
  });
46
36
  s3Mock.on(DeleteObjectsCommand).resolves({});
47
37
 
48
- await handleDeleteAccountObjects(event, noopLog);
38
+ await handleDeleteAccountObjects(event, noopLogger);
49
39
 
50
40
  const listCall = s3Mock.commandCalls(ListObjectsV2Command)[0];
51
41
  assert.equal(listCall.args[0].input.Prefix, "accounts/cfg-1/");
@@ -72,7 +62,7 @@ describe("handleDeleteAccountObjects", () => {
72
62
  });
73
63
  s3Mock.on(DeleteObjectsCommand).resolves({});
74
64
 
75
- await handleDeleteAccountObjects(event, noopLog);
65
+ await handleDeleteAccountObjects(event, noopLogger);
76
66
 
77
67
  const listCalls = s3Mock.commandCalls(ListObjectsV2Command);
78
68
  assert.equal(listCalls.length, 2);
@@ -83,7 +73,7 @@ describe("handleDeleteAccountObjects", () => {
83
73
  it("skips the delete call when a page holds no keys", async () => {
84
74
  s3Mock.on(ListObjectsV2Command).resolves({ IsTruncated: false });
85
75
 
86
- await handleDeleteAccountObjects(event, noopLog);
76
+ await handleDeleteAccountObjects(event, noopLogger);
87
77
 
88
78
  assert.equal(s3Mock.commandCalls(DeleteObjectsCommand).length, 0);
89
79
  });
@@ -94,7 +84,7 @@ describe("handleDeleteAccountObjects", () => {
94
84
 
95
85
  await handleDeleteAccountObjects(
96
86
  { ...event, continuationToken: "tok-mid" },
97
- noopLog,
87
+ noopLogger,
98
88
  () => 5_000,
99
89
  );
100
90
 
@@ -119,7 +109,7 @@ describe("handleDeleteAccountObjects", () => {
119
109
  });
120
110
  s3Mock.on(DeleteObjectsCommand).resolves({});
121
111
 
122
- await handleDeleteAccountObjects(event, noopLog, () => 120_000);
112
+ await handleDeleteAccountObjects(event, noopLogger, () => 120_000);
123
113
 
124
114
  assert.equal(s3Mock.commandCalls(ListObjectsV2Command).length, 1);
125
115
  assert.equal(sqsMock.commandCalls(SendMessageCommand).length, 0);
@@ -1,20 +1,10 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { beforeEach, describe, it } from "node:test";
3
3
  import type { RoleResolution } from "@remit/data-ports/folder-role";
4
- import type { Logger } from "@remit/logger-lambda";
4
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
5
5
  import type { EmptyTrashEvent } from "../events.js";
6
6
  import { type EmptyTrashDeps, handleEmptyTrash } from "./empty-trash.js";
7
7
 
8
- const noopLog = {
9
- info: () => {},
10
- warn: () => {},
11
- error: () => {},
12
- debug: () => {},
13
- fatal: () => {},
14
- trace: () => {},
15
- child: () => noopLog,
16
- } as unknown as Logger;
17
-
18
8
  interface Call {
19
9
  method: string;
20
10
  args: unknown[];
@@ -224,7 +214,7 @@ describe("handleEmptyTrash", () => {
224
214
  });
225
215
 
226
216
  it("expunges every server uid and both local rows for each trashed message", async () => {
227
- await handleEmptyTrash(event, noopLog, deps());
217
+ await handleEmptyTrash(event, noopLogger, deps());
228
218
 
229
219
  assert.deepEqual(called("connection.deleteMessages")[0]?.args, [[10, 11]]);
230
220
  assert.deepEqual(
@@ -245,7 +235,7 @@ describe("handleEmptyTrash", () => {
245
235
  { messageId: "msg-late", uid: 12, status: "active" },
246
236
  ];
247
237
 
248
- await handleEmptyTrash(event, noopLog, deps());
238
+ await handleEmptyTrash(event, noopLogger, deps());
249
239
 
250
240
  assert.deepEqual(
251
241
  called("message.delete").map((c) => c.args[0]),
@@ -259,7 +249,7 @@ describe("handleEmptyTrash", () => {
259
249
  // exists anywhere, with nothing left to clear the mark.
260
250
  h.connection.search = async () => [];
261
251
 
262
- await handleEmptyTrash(event, noopLog, deps());
252
+ await handleEmptyTrash(event, noopLogger, deps());
263
253
 
264
254
  assert.equal(called("connection.deleteMessages").length, 0);
265
255
  assert.equal(called("message.delete").length, 0);
@@ -274,7 +264,7 @@ describe("handleEmptyTrash", () => {
274
264
  h.localMessages = [deleting("msg-2", 11)];
275
265
  h.connection.search = async () => [];
276
266
 
277
- await handleEmptyTrash(event, noopLog, deps());
267
+ await handleEmptyTrash(event, noopLogger, deps());
278
268
 
279
269
  assert.equal(called("message.delete").length, 0);
280
270
  assert.deepEqual(revertedMessageIds(), ["msg-2"]);
@@ -288,7 +278,7 @@ describe("handleEmptyTrash", () => {
288
278
  h.messagesWithoutListingRow = ["msg-expunging"];
289
279
  h.connection.search = async () => [];
290
280
 
291
- await handleEmptyTrash(event, noopLog, deps());
281
+ await handleEmptyTrash(event, noopLogger, deps());
292
282
 
293
283
  assert.deepEqual(revertedMessageIds(), ["msg-1"]);
294
284
  });
@@ -296,7 +286,7 @@ describe("handleEmptyTrash", () => {
296
286
  it("deletes the message even when it has no thread row", async () => {
297
287
  h.threadMessage = false;
298
288
 
299
- await handleEmptyTrash(event, noopLog, deps());
289
+ await handleEmptyTrash(event, noopLogger, deps());
300
290
 
301
291
  assert.equal(called("message.delete").length, 2);
302
292
  assert.equal(called("threadMessage.delete").length, 0);
@@ -309,7 +299,7 @@ describe("handleEmptyTrash", () => {
309
299
  deletedAt: Date.now(),
310
300
  };
311
301
 
312
- await handleEmptyTrash(event, noopLog, deps());
302
+ await handleEmptyTrash(event, noopLogger, deps());
313
303
 
314
304
  assert.equal(h.getConnectionCount, 0);
315
305
  });
@@ -317,7 +307,10 @@ describe("handleEmptyTrash", () => {
317
307
  it("throws when the account no longer exists", async () => {
318
308
  h.account = null;
319
309
 
320
- await assert.rejects(handleEmptyTrash(event, noopLog, deps()), /not found/);
310
+ await assert.rejects(
311
+ handleEmptyTrash(event, noopLogger, deps()),
312
+ /not found/,
313
+ );
321
314
  });
322
315
 
323
316
  it("acks terminally without connecting when the Trash mailbox was deleted", async () => {
@@ -325,7 +318,7 @@ describe("handleEmptyTrash", () => {
325
318
  name: "NotFoundError",
326
319
  });
327
320
 
328
- await handleEmptyTrash(event, noopLog, deps());
321
+ await handleEmptyTrash(event, noopLogger, deps());
329
322
 
330
323
  assert.equal(h.getConnectionCount, 0);
331
324
  assert.equal(called("message.delete").length, 0);
@@ -339,7 +332,7 @@ describe("handleEmptyTrash", () => {
339
332
  trashMailboxPath: "Trash",
340
333
  } as unknown as EmptyTrashEvent;
341
334
 
342
- await handleEmptyTrash(unversioned, noopLog, deps());
335
+ await handleEmptyTrash(unversioned, noopLogger, deps());
343
336
 
344
337
  assert.equal(h.getConnectionCount, 0, "no connection is ever opened");
345
338
  assert.equal(called("connection.deleteMessages").length, 0);
@@ -353,7 +346,7 @@ describe("handleEmptyTrash", () => {
353
346
  mailbox: { mailboxId: "other-mbx", fullPath: "INBOX/Bak" },
354
347
  };
355
348
 
356
- await handleEmptyTrash(event, noopLog, deps());
349
+ await handleEmptyTrash(event, noopLogger, deps());
357
350
 
358
351
  assert.equal(h.getConnectionCount, 0);
359
352
  assert.equal(called("connection.deleteMessages").length, 0);
@@ -366,7 +359,7 @@ describe("handleEmptyTrash", () => {
366
359
  mailbox: { mailboxId: "trash-mbx", fullPath: "Trash" },
367
360
  };
368
361
 
369
- await handleEmptyTrash(event, noopLog, deps());
362
+ await handleEmptyTrash(event, noopLogger, deps());
370
363
 
371
364
  assert.equal(called("connection.deleteMessages").length, 0);
372
365
  assert.deepEqual(revertedMessageIds(), ["msg-1", "msg-2"]);
@@ -378,7 +371,7 @@ describe("handleEmptyTrash", () => {
378
371
  h.connection.openBox = async () => ({ uidvalidity: 77 });
379
372
  h.mailbox = { mailboxId: "trash-mbx", uidValidity: 77 };
380
373
 
381
- await handleEmptyTrash(event, noopLog, deps());
374
+ await handleEmptyTrash(event, noopLogger, deps());
382
375
 
383
376
  assert.equal(called("connection.deleteMessages").length, 0);
384
377
  assert.deepEqual(revertedMessageIds(), ["msg-1", "msg-2"]);
@@ -394,7 +387,7 @@ describe("handleEmptyTrash", () => {
394
387
  h.connection.openBox = async () => ({ uidvalidity: 77 });
395
388
  h.mailbox = { mailboxId: "trash-mbx", uidValidity: 77 };
396
389
 
397
- await handleEmptyTrash(event, noopLog, deps());
390
+ await handleEmptyTrash(event, noopLogger, deps());
398
391
 
399
392
  assert.deepEqual(revertedMessageIds(), ["msg-1"]);
400
393
  assert.deepEqual(undeletedThreadMessageIds(), ["tm-msg-1"]);
@@ -405,7 +398,7 @@ describe("handleEmptyTrash", () => {
405
398
  // marked `deleting` hides healthy mail until the user notices.
406
399
  h.connection.openBox = async () => ({ uidvalidity: 999 });
407
400
 
408
- await handleEmptyTrash(event, noopLog, deps());
401
+ await handleEmptyTrash(event, noopLogger, deps());
409
402
 
410
403
  assert.equal(
411
404
  (called("mailbox.update")[0]?.args[2] as { cursorState?: string })
@@ -424,7 +417,7 @@ describe("handleEmptyTrash", () => {
424
417
  cursorState: "rebuilding",
425
418
  };
426
419
 
427
- await handleEmptyTrash(event, noopLog, deps());
420
+ await handleEmptyTrash(event, noopLogger, deps());
428
421
 
429
422
  assert.equal(h.getConnectionCount, 0);
430
423
  assert.equal(called("message.delete").length, 0);
@@ -437,7 +430,7 @@ describe("handleEmptyTrash", () => {
437
430
  };
438
431
 
439
432
  await assert.rejects(
440
- handleEmptyTrash(event, noopLog, deps()),
433
+ handleEmptyTrash(event, noopLogger, deps()),
441
434
  /server exploded/,
442
435
  );
443
436
 
@@ -463,7 +456,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
463
456
  movingIntoTrash("msg-moving", 10),
464
457
  ];
465
458
 
466
- await handleEmptyTrash(event, noopLog, deps());
459
+ await handleEmptyTrash(event, noopLogger, deps());
467
460
 
468
461
  assert.deepEqual(
469
462
  called("message.delete").map((c) => c.args[0]),
@@ -480,7 +473,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
480
473
  // uid is somebody else's.
481
474
  h.localMessages = [retryingIntoTrash("msg-retrying", 11)];
482
475
 
483
- await handleEmptyTrash(event, noopLog, deps());
476
+ await handleEmptyTrash(event, noopLogger, deps());
484
477
 
485
478
  assert.equal(called("message.delete").length, 0);
486
479
  assert.equal(called("threadMessage.delete").length, 0);
@@ -495,7 +488,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
495
488
  // `deleting` is hidden from every listing for good.
496
489
  h.localMessages = [deleting("msg-1", 10), markedMidMove("msg-marked", 11)];
497
490
 
498
- await handleEmptyTrash(event, noopLog, deps());
491
+ await handleEmptyTrash(event, noopLogger, deps());
499
492
 
500
493
  assert.deepEqual(
501
494
  called("message.delete").map((c) => c.args[0]),
@@ -522,7 +515,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
522
515
  },
523
516
  ];
524
517
 
525
- await handleEmptyTrash(event, noopLog, deps());
518
+ await handleEmptyTrash(event, noopLogger, deps());
526
519
 
527
520
  assert.deepEqual(
528
521
  called("message.delete").map((c) => c.args[0]),
@@ -547,7 +540,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
547
540
  },
548
541
  ];
549
542
 
550
- await handleEmptyTrash(event, noopLog, deps());
543
+ await handleEmptyTrash(event, noopLogger, deps());
551
544
 
552
545
  assert.deepEqual(
553
546
  called("message.delete").map((c) => c.args[0]),
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { beforeEach, describe, it } from "node:test";
3
- import type { Logger } from "@remit/logger-lambda";
3
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
4
4
  import type {
5
5
  MailboxCreateEvent,
6
6
  MailboxDeleteEvent,
@@ -11,16 +11,6 @@ import {
11
11
  processMailboxManagement,
12
12
  } from "./mailbox-management.js";
13
13
 
14
- const noopLog = {
15
- info: () => {},
16
- warn: () => {},
17
- error: () => {},
18
- debug: () => {},
19
- fatal: () => {},
20
- trace: () => {},
21
- child: () => noopLog,
22
- } as unknown as Logger;
23
-
24
14
  interface Call {
25
15
  method: string;
26
16
  args: unknown[];
@@ -163,7 +153,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
163
153
  });
164
154
 
165
155
  it("creates the folder and writes back the server's UIDVALIDITY and counts", async () => {
166
- await processMailboxManagement(createEvent, noopLog, deps());
156
+ await processMailboxManagement(createEvent, noopLogger, deps());
167
157
 
168
158
  assert.equal(called("connection.createMailbox")[0]?.args[0], "Archive");
169
159
  assert.deepEqual(lastUpdate(), {
@@ -176,13 +166,13 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
176
166
  });
177
167
 
178
168
  it("subscribes only when the event asks for it", async () => {
179
- await processMailboxManagement(createEvent, noopLog, deps());
169
+ await processMailboxManagement(createEvent, noopLogger, deps());
180
170
  assert.equal(called("connection.subscribeMailbox").length, 0);
181
171
 
182
172
  h = fresh();
183
173
  await processMailboxManagement(
184
174
  { ...createEvent, subscribe: true },
185
- noopLog,
175
+ noopLogger,
186
176
  deps(),
187
177
  );
188
178
  assert.equal(called("connection.subscribeMailbox")[0]?.args[0], "Archive");
@@ -191,7 +181,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
191
181
  it("still marks the mailbox synced when the server does not list the new folder", async () => {
192
182
  h.connection.listMailboxes = async () => [];
193
183
 
194
- await processMailboxManagement(createEvent, noopLog, deps());
184
+ await processMailboxManagement(createEvent, noopLogger, deps());
195
185
 
196
186
  assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
197
187
  });
@@ -201,7 +191,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
201
191
  throw new Error("Mailbox already exists");
202
192
  };
203
193
 
204
- await processMailboxManagement(createEvent, noopLog, deps());
194
+ await processMailboxManagement(createEvent, noopLogger, deps());
205
195
 
206
196
  assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
207
197
  });
@@ -212,7 +202,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
212
202
  };
213
203
 
214
204
  await assert.rejects(
215
- processMailboxManagement(createEvent, noopLog, deps()),
205
+ processMailboxManagement(createEvent, noopLogger, deps()),
216
206
  /server exploded/,
217
207
  );
218
208
 
@@ -225,7 +215,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
225
215
  // create is moot and must not poison the account's FIFO.
226
216
  h.mailboxUpdateError = notFoundError();
227
217
 
228
- await processMailboxManagement(createEvent, noopLog, deps());
218
+ await processMailboxManagement(createEvent, noopLogger, deps());
229
219
 
230
220
  assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
231
221
  });
@@ -237,7 +227,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
237
227
  deletedAt: Date.now(),
238
228
  };
239
229
 
240
- await processMailboxManagement(createEvent, noopLog, deps());
230
+ await processMailboxManagement(createEvent, noopLogger, deps());
241
231
 
242
232
  assert.equal(called("connection.createMailbox").length, 0);
243
233
  });
@@ -246,7 +236,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
246
236
  h.account = null;
247
237
 
248
238
  await assert.rejects(
249
- processMailboxManagement(createEvent, noopLog, deps()),
239
+ processMailboxManagement(createEvent, noopLogger, deps()),
250
240
  /not found/,
251
241
  );
252
242
  });
@@ -258,7 +248,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
258
248
  });
259
249
 
260
250
  it("renames on the server and clears the pending oldPath", async () => {
261
- await processMailboxManagement(renameEvent, noopLog, deps());
251
+ await processMailboxManagement(renameEvent, noopLogger, deps());
262
252
 
263
253
  assert.deepEqual(called("connection.renameMailbox")[0]?.args, [
264
254
  "Archive",
@@ -275,7 +265,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
275
265
  throw new Error("Mailbox not found");
276
266
  };
277
267
 
278
- await processMailboxManagement(renameEvent, noopLog, deps());
268
+ await processMailboxManagement(renameEvent, noopLogger, deps());
279
269
 
280
270
  assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
281
271
  assert.equal(called("mailbox.update").length, 0);
@@ -287,7 +277,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
287
277
  };
288
278
  h.mailboxUpdateError = notFoundError();
289
279
 
290
- await processMailboxManagement(renameEvent, noopLog, deps());
280
+ await processMailboxManagement(renameEvent, noopLogger, deps());
291
281
 
292
282
  assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
293
283
  });
@@ -298,7 +288,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
298
288
  };
299
289
 
300
290
  await assert.rejects(
301
- processMailboxManagement(renameEvent, noopLog, deps()),
291
+ processMailboxManagement(renameEvent, noopLogger, deps()),
302
292
  /server exploded/,
303
293
  );
304
294
 
@@ -316,7 +306,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
316
306
  });
317
307
 
318
308
  it("deletes on the server and drops the local row", async () => {
319
- await processMailboxManagement(deleteEvent, noopLog, deps());
309
+ await processMailboxManagement(deleteEvent, noopLogger, deps());
320
310
 
321
311
  assert.equal(called("connection.deleteMailbox")[0]?.args[0], "Archive");
322
312
  assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
@@ -327,7 +317,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
327
317
  throw new Error("Mailbox not found");
328
318
  };
329
319
 
330
- await processMailboxManagement(deleteEvent, noopLog, deps());
320
+ await processMailboxManagement(deleteEvent, noopLogger, deps());
331
321
 
332
322
  assert.equal(called("mailbox.delete").length, 1);
333
323
  });
@@ -337,7 +327,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
337
327
  throw new Error("Cannot delete INBOX");
338
328
  };
339
329
 
340
- await processMailboxManagement(deleteEvent, noopLog, deps());
330
+ await processMailboxManagement(deleteEvent, noopLogger, deps());
341
331
 
342
332
  assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
343
333
  assert.equal(called("mailbox.delete").length, 0);
@@ -349,7 +339,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
349
339
  };
350
340
 
351
341
  await assert.rejects(
352
- processMailboxManagement(deleteEvent, noopLog, deps()),
342
+ processMailboxManagement(deleteEvent, noopLogger, deps()),
353
343
  /server exploded/,
354
344
  );
355
345
 
@@ -362,7 +352,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
362
352
  };
363
353
  h.mailboxUpdateError = notFoundError();
364
354
 
365
- await processMailboxManagement(deleteEvent, noopLog, deps());
355
+ await processMailboxManagement(deleteEvent, noopLogger, deps());
366
356
 
367
357
  assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
368
358
  });
@@ -388,7 +378,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
388
378
  };
389
379
 
390
380
  await assert.doesNotReject(
391
- processMailboxManagement(deleteEvent, noopLog, deps()),
381
+ processMailboxManagement(deleteEvent, noopLogger, deps()),
392
382
  );
393
383
  assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
394
384
  assert.equal(called("mailbox.update").length, 0);
@@ -403,7 +393,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
403
393
  };
404
394
 
405
395
  await assert.rejects(
406
- processMailboxManagement(deleteEvent, noopLog, deps()),
396
+ processMailboxManagement(deleteEvent, noopLogger, deps()),
407
397
  /Command failed/,
408
398
  );
409
399
  assert.deepEqual(lastUpdate(), { syncStatus: "failed" });
@@ -424,7 +414,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
424
414
  };
425
415
 
426
416
  await assert.doesNotReject(
427
- processMailboxManagement(createEvent, noopLog, deps()),
417
+ processMailboxManagement(createEvent, noopLogger, deps()),
428
418
  );
429
419
  assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
430
420
  });
@@ -438,7 +428,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
438
428
  };
439
429
 
440
430
  await assert.rejects(
441
- processMailboxManagement(createEvent, noopLog, deps()),
431
+ processMailboxManagement(createEvent, noopLogger, deps()),
442
432
  /Command failed/,
443
433
  );
444
434
  assert.deepEqual(lastUpdate(), { syncStatus: "failed" });
@@ -453,7 +443,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
453
443
  };
454
444
 
455
445
  await assert.doesNotReject(
456
- processMailboxManagement(renameEvent, noopLog, deps()),
446
+ processMailboxManagement(renameEvent, noopLogger, deps()),
457
447
  );
458
448
  assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
459
449
  });
@@ -467,7 +457,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
467
457
  };
468
458
 
469
459
  await assert.rejects(
470
- processMailboxManagement(renameEvent, noopLog, deps()),
460
+ processMailboxManagement(renameEvent, noopLogger, deps()),
471
461
  /Command failed/,
472
462
  );
473
463
  assert.equal(lastUpdate()?.syncStatus, "failed");
@@ -1,19 +1,9 @@
1
1
  import assert from "node:assert/strict";
2
2
  import { beforeEach, describe, it } from "node:test";
3
- import type { Logger } from "@remit/logger-lambda";
3
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
4
4
  import type { MessageCopyEvent } from "../events.js";
5
5
  import { handleMessageCopy, type MessageCopyDeps } from "./message-copy.js";
6
6
 
7
- const noopLog = {
8
- info: () => {},
9
- warn: () => {},
10
- error: () => {},
11
- debug: () => {},
12
- fatal: () => {},
13
- trace: () => {},
14
- child: () => noopLog,
15
- } as unknown as Logger;
16
-
17
7
  interface Call {
18
8
  method: string;
19
9
  args: unknown[];
@@ -194,7 +184,7 @@ describe("handleMessageCopy", () => {
194
184
  });
195
185
 
196
186
  it("writes the new UID, marks the copy synced, and updates the thread row", async () => {
197
- await handleMessageCopy(event, noopLog, 1, deps());
187
+ await handleMessageCopy(event, noopLogger, 1, deps());
198
188
 
199
189
  assert.deepEqual(called("message.updateUid")[0]?.args, [
200
190
  "new-msg",
@@ -214,7 +204,7 @@ describe("handleMessageCopy", () => {
214
204
  h.connection.copyMessages = async () => ({ uidMap: new Map() });
215
205
  h.destinationHolds = [42];
216
206
 
217
- await handleMessageCopy(event, noopLog, 1, deps());
207
+ await handleMessageCopy(event, noopLogger, 1, deps());
218
208
 
219
209
  assert.ok(askedTheDestination(), "the destination was asked for the copy");
220
210
  assert.deepEqual(called("message.updateUid")[0]?.args, [
@@ -240,7 +230,7 @@ describe("handleMessageCopy", () => {
240
230
  h.connection.copyMessages = async () => ({ uidMap: new Map() });
241
231
  h.destinationHolds = [12, 42];
242
232
 
243
- await handleMessageCopy(event, noopLog, 1, deps());
233
+ await handleMessageCopy(event, noopLogger, 1, deps());
244
234
 
245
235
  assert.deepEqual(called("message.updateUid")[0]?.args, [
246
236
  "new-msg",
@@ -253,7 +243,7 @@ describe("handleMessageCopy", () => {
253
243
  h.connection.copyMessages = async () => ({ uidMap: new Map() });
254
244
  h.destinationHolds = [];
255
245
 
256
- await handleMessageCopy(event, noopLog, 1, deps());
246
+ await handleMessageCopy(event, noopLogger, 1, deps());
257
247
 
258
248
  assert.ok(askedTheDestination());
259
249
  assert.equal(called("message.delete")[0]?.args[0], "new-msg");
@@ -269,7 +259,7 @@ describe("handleMessageCopy", () => {
269
259
  };
270
260
  h.copyRow = { ...unsettledCopyRow(), messageIdHeader: undefined };
271
261
 
272
- await handleMessageCopy(event, noopLog, 1, deps());
262
+ await handleMessageCopy(event, noopLogger, 1, deps());
273
263
 
274
264
  assert.equal(copies, 1, "the COPY is issued once");
275
265
  assert.equal(called("search").length, 0, "there is nothing to ask with");
@@ -285,7 +275,7 @@ describe("handleMessageCopy", () => {
285
275
  it("never copies twice when a redelivered copy already landed", async () => {
286
276
  h.destinationHolds = [42];
287
277
 
288
- await handleMessageCopy(event, noopLog, 2, deps());
278
+ await handleMessageCopy(event, noopLogger, 2, deps());
289
279
 
290
280
  assert.equal(called("copyMessages").length, 0);
291
281
  assert.deepEqual(called("message.updateUid")[0]?.args, [
@@ -305,10 +295,10 @@ describe("handleMessageCopy", () => {
305
295
  };
306
296
 
307
297
  await assert.rejects(
308
- handleMessageCopy(event, noopLog, 1, deps()),
298
+ handleMessageCopy(event, noopLogger, 1, deps()),
309
299
  /connection reset/,
310
300
  );
311
- await handleMessageCopy(event, noopLog, 2, deps());
301
+ await handleMessageCopy(event, noopLogger, 2, deps());
312
302
 
313
303
  assert.equal(copies, 1, "the redelivery issues no second COPY");
314
304
  assert.equal(called("search").length, 0);
@@ -324,7 +314,7 @@ describe("handleMessageCopy", () => {
324
314
  syncStatus: "synced",
325
315
  };
326
316
 
327
- await handleMessageCopy(event, noopLog, 2, deps());
317
+ await handleMessageCopy(event, noopLogger, 2, deps());
328
318
 
329
319
  assert.equal(h.getConnectionCount, 0);
330
320
  assert.equal(called("copyMessages").length, 0);
@@ -333,7 +323,7 @@ describe("handleMessageCopy", () => {
333
323
  it("acks when the copy row no longer exists", async () => {
334
324
  h.copyRow = null;
335
325
 
336
- await handleMessageCopy(event, noopLog, 1, deps());
326
+ await handleMessageCopy(event, noopLogger, 1, deps());
337
327
 
338
328
  assert.equal(h.getConnectionCount, 0);
339
329
  assert.equal(called("message.update").length, 0);
@@ -346,7 +336,7 @@ describe("handleMessageCopy", () => {
346
336
  deletedAt: Date.now(),
347
337
  };
348
338
 
349
- await handleMessageCopy(event, noopLog, 1, deps());
339
+ await handleMessageCopy(event, noopLogger, 1, deps());
350
340
 
351
341
  assert.equal(h.getConnectionCount, 0);
352
342
  });
@@ -355,7 +345,7 @@ describe("handleMessageCopy", () => {
355
345
  h.account = null;
356
346
 
357
347
  await assert.rejects(
358
- handleMessageCopy(event, noopLog, 1, deps()),
348
+ handleMessageCopy(event, noopLogger, 1, deps()),
359
349
  /not found/,
360
350
  );
361
351
  });
@@ -363,7 +353,7 @@ describe("handleMessageCopy", () => {
363
353
  it("acks terminally without connecting when the source mailbox was deleted", async () => {
364
354
  h.mailboxError = notFoundError();
365
355
 
366
- await handleMessageCopy(event, noopLog, 1, deps());
356
+ await handleMessageCopy(event, noopLogger, 1, deps());
367
357
 
368
358
  assert.equal(h.getConnectionCount, 0);
369
359
  assert.equal(called("message.updateUid").length, 0);
@@ -382,7 +372,7 @@ describe("handleMessageCopy", () => {
382
372
  cursorState: "rebuilding",
383
373
  };
384
374
 
385
- await handleMessageCopy(event, noopLog, 1, deps());
375
+ await handleMessageCopy(event, noopLogger, 1, deps());
386
376
 
387
377
  assert.equal(h.getConnectionCount, 0);
388
378
  assert.equal(called("message.updateUid").length, 0);
@@ -405,7 +395,7 @@ describe("handleMessageCopy", () => {
405
395
  };
406
396
  h.destinationHolds = [42];
407
397
 
408
- await handleMessageCopy(event, noopLog, 2, deps());
398
+ await handleMessageCopy(event, noopLogger, 2, deps());
409
399
 
410
400
  assert.ok(askedTheDestination(), "the destination was asked for the copy");
411
401
  assert.deepEqual(called("message.updateUid")[0]?.args, [
@@ -429,7 +419,7 @@ describe("handleMessageCopy", () => {
429
419
  };
430
420
  h.copyRow = { ...unsettledCopyRow(), messageIdHeader: undefined };
431
421
 
432
- await handleMessageCopy(event, noopLog, 2, deps());
422
+ await handleMessageCopy(event, noopLogger, 2, deps());
433
423
 
434
424
  assert.equal(
435
425
  called("message.delete").length,
@@ -453,7 +443,7 @@ describe("handleMessageCopy", () => {
453
443
  cursorState: "rebuilding",
454
444
  };
455
445
 
456
- await handleMessageCopy(event, noopLog, 1, deps());
446
+ await handleMessageCopy(event, noopLogger, 1, deps());
457
447
 
458
448
  assert.deepEqual(
459
449
  called("emitEvent").map((c) => c.args[0]),
@@ -472,7 +462,7 @@ describe("handleMessageCopy", () => {
472
462
  };
473
463
  h.destinationHolds = [];
474
464
 
475
- await handleMessageCopy(event, noopLog, 2, deps());
465
+ await handleMessageCopy(event, noopLogger, 2, deps());
476
466
 
477
467
  assert.ok(askedTheDestination());
478
468
  assert.deepEqual(called("message.delete")[0]?.args, ["new-msg"]);
@@ -481,7 +471,7 @@ describe("handleMessageCopy", () => {
481
471
  it("reconciles the optimistic copy row away when openBox trips a UIDVALIDITY mismatch", async () => {
482
472
  h.connection.openBox = async () => ({ uidvalidity: 999 });
483
473
 
484
- await handleMessageCopy(event, noopLog, 1, deps());
474
+ await handleMessageCopy(event, noopLogger, 1, deps());
485
475
 
486
476
  assert.equal(
487
477
  (called("mailbox.update")[0]?.args[2] as { cursorState?: string })
@@ -500,7 +490,7 @@ describe("handleMessageCopy", () => {
500
490
  };
501
491
 
502
492
  await assert.rejects(
503
- handleMessageCopy(event, noopLog, 1, deps()),
493
+ handleMessageCopy(event, noopLogger, 1, deps()),
504
494
  /TRYCREATE/,
505
495
  );
506
496
 
@@ -513,7 +503,7 @@ describe("handleMessageCopy", () => {
513
503
  throw new Error("NONEXISTENT source message");
514
504
  };
515
505
 
516
- await handleMessageCopy(event, noopLog, 1, deps());
506
+ await handleMessageCopy(event, noopLogger, 1, deps());
517
507
 
518
508
  const update = called("message.update")[0];
519
509
  assert.equal((update?.args[1] as { status?: string })?.status, "deleted");
@@ -526,7 +516,7 @@ describe("handleMessageCopy", () => {
526
516
  };
527
517
 
528
518
  await assert.rejects(
529
- handleMessageCopy(event, noopLog, 1, deps()),
519
+ handleMessageCopy(event, noopLogger, 1, deps()),
530
520
  /server exploded/,
531
521
  );
532
522
 
@@ -548,7 +538,7 @@ describe("handleMessageCopy", () => {
548
538
  return asked === 1 ? [] : [42];
549
539
  };
550
540
 
551
- await handleMessageCopy(event, noopLog, 3, deps());
541
+ await handleMessageCopy(event, noopLogger, 3, deps());
552
542
 
553
543
  assert.deepEqual(called("message.updateUid")[0]?.args, [
554
544
  "new-msg",
@@ -563,7 +553,7 @@ describe("handleMessageCopy", () => {
563
553
  };
564
554
  h.destinationHolds = [];
565
555
 
566
- await handleMessageCopy(event, noopLog, 3, deps());
556
+ await handleMessageCopy(event, noopLogger, 3, deps());
567
557
 
568
558
  assert.equal(called("message.delete")[0]?.args[0], "new-msg");
569
559
  assert.equal(called("threadMessage.deleteMany").length, 1);
@@ -3,6 +3,7 @@ import { beforeEach, describe, it, mock } from "node:test";
3
3
  import type { ThreadMessageItem } from "@remit/data-ports";
4
4
  import type { Logger } from "@remit/logger-lambda";
5
5
  import { renderMetrics, resetMetrics } from "@remit/logger-lambda";
6
+ import { noopLogger } from "@remit/logger-lambda/noop-logger";
6
7
  import type { MessageDeleteEvent } from "../events.js";
7
8
  import {
8
9
  deleteAllThreadMessagesForMessage,
@@ -256,16 +257,6 @@ describe("deleteAllThreadMessagesForMessage (#212)", () => {
256
257
  });
257
258
  });
258
259
 
259
- const noopLog = {
260
- info: () => {},
261
- warn: () => {},
262
- error: () => {},
263
- debug: () => {},
264
- fatal: () => {},
265
- trace: () => {},
266
- child: () => noopLog,
267
- } as unknown as Logger;
268
-
269
260
  interface Call {
270
261
  method: string;
271
262
  args: unknown[];
@@ -543,7 +534,7 @@ describe("handleMessageDelete", () => {
543
534
  });
544
535
 
545
536
  it("moves to trash, rewrites the uid, and flips the thread row to deleted", async () => {
546
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
537
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
547
538
 
548
539
  assert.deepEqual(called("message.updateUid")[0]?.args, [
549
540
  "msg-1",
@@ -569,7 +560,7 @@ describe("handleMessageDelete", () => {
569
560
  sourceNoLongerHoldsTheUid();
570
561
  h.destinationSearchUids = [77];
571
562
 
572
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
563
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
573
564
 
574
565
  assert.deepEqual(called("message.updateUid")[0]?.args, [
575
566
  "msg-1",
@@ -598,7 +589,7 @@ describe("handleMessageDelete", () => {
598
589
  sourceNoLongerHoldsTheUid();
599
590
  h.destinationSearchUids = [12, 77];
600
591
 
601
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
592
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
602
593
 
603
594
  assert.deepEqual(called("message.updateUid")[0]?.args, [
604
595
  "msg-1",
@@ -623,7 +614,7 @@ describe("handleMessageDelete", () => {
623
614
  return { uidvalidity: 1 };
624
615
  }) as Connection["openBox"];
625
616
 
626
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
617
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
627
618
 
628
619
  assert.deepEqual(
629
620
  opened,
@@ -650,7 +641,7 @@ describe("handleMessageDelete", () => {
650
641
  h.destinationSearchUids = [];
651
642
 
652
643
  await assert.rejects(
653
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
644
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
654
645
  /unconfirmed/,
655
646
  );
656
647
 
@@ -683,7 +674,7 @@ describe("handleMessageDelete", () => {
683
674
  sourceNoLongerHoldsTheUid();
684
675
  h.destinationSearchUids = [];
685
676
 
686
- await handleMessageDelete(moveEvent, noopLog, 3, deps());
677
+ await handleMessageDelete(moveEvent, noopLogger, 3, deps());
687
678
 
688
679
  assert.equal(
689
680
  called("threadMessage.deleteMany").length,
@@ -710,7 +701,7 @@ describe("handleMessageDelete", () => {
710
701
  sourceNoLongerHoldsTheUid();
711
702
  h.messageRow = {};
712
703
 
713
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
704
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
714
705
 
715
706
  assert.equal(
716
707
  called("connection.search").filter((c) =>
@@ -739,7 +730,7 @@ describe("handleMessageDelete", () => {
739
730
  sourceNoLongerHoldsTheUid();
740
731
  h.messageRow = undefined;
741
732
 
742
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
733
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
743
734
 
744
735
  assert.equal(called("message.update").length, 0);
745
736
  assert.equal(called("message.delete").length, 0);
@@ -757,7 +748,7 @@ describe("handleMessageDelete", () => {
757
748
  h.destinationSearchUids = [100];
758
749
 
759
750
  await assert.rejects(
760
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
751
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
761
752
  /unconfirmed/,
762
753
  );
763
754
 
@@ -797,7 +788,7 @@ describe("handleMessageDelete", () => {
797
788
  },
798
789
  ];
799
790
 
800
- await handleMessageDelete(moveEvent, noopLog, 3, deps());
791
+ await handleMessageDelete(moveEvent, noopLogger, 3, deps());
801
792
 
802
793
  assert.equal(called("message.delete").length, 0);
803
794
  assert.equal(called("threadMessage.deleteMany").length, 0);
@@ -845,7 +836,7 @@ describe("handleMessageDelete", () => {
845
836
  h.connection.moveMessages = async () => ({ uidMap: new Map() });
846
837
  h.destinationSearchUids = [100];
847
838
 
848
- await handleMessageDelete(moveEvent, noopLog, 3, deps());
839
+ await handleMessageDelete(moveEvent, noopLogger, 3, deps());
849
840
 
850
841
  assert.deepEqual(
851
842
  called("emitEvent").map((c) => c.args[0]),
@@ -874,7 +865,7 @@ describe("handleMessageDelete", () => {
874
865
  moveThrows();
875
866
 
876
867
  await assert.rejects(
877
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
868
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
878
869
  /UID MOVE failed/,
879
870
  );
880
871
 
@@ -891,7 +882,7 @@ describe("handleMessageDelete", () => {
891
882
  moveThrows();
892
883
  sourceNoLongerHoldsTheUid();
893
884
 
894
- await handleMessageDelete(moveEvent, noopLog, 3, deps());
885
+ await handleMessageDelete(moveEvent, noopLogger, 3, deps());
895
886
 
896
887
  assert.equal(
897
888
  called("threadMessage.deleteMany").length,
@@ -905,7 +896,7 @@ describe("handleMessageDelete", () => {
905
896
  it("settles a still-present message at the ceiling back onto its source", async () => {
906
897
  moveThrows();
907
898
 
908
- await handleMessageDelete(moveEvent, noopLog, 3, deps());
899
+ await handleMessageDelete(moveEvent, noopLogger, 3, deps());
909
900
 
910
901
  assert.deepEqual(
911
902
  called("message.updateForMove").at(-1)?.args,
@@ -927,7 +918,7 @@ describe("handleMessageDelete", () => {
927
918
  }) as Connection["openBox"];
928
919
 
929
920
  await assert.rejects(
930
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
921
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
931
922
  /unconfirmed/,
932
923
  );
933
924
 
@@ -958,7 +949,7 @@ describe("handleMessageDelete", () => {
958
949
  operation,
959
950
  } as unknown as MessageDeleteEvent;
960
951
 
961
- await handleMessageDelete(malformed, noopLog, 1, deps());
952
+ await handleMessageDelete(malformed, noopLogger, 1, deps());
962
953
 
963
954
  assert.equal(
964
955
  called("connection.deleteMessages").length,
@@ -991,7 +982,7 @@ describe("handleMessageDelete", () => {
991
982
  destinationMailboxPath: undefined,
992
983
  } as MessageDeleteEvent;
993
984
 
994
- await handleMessageDelete(destinationless, noopLog, 1, deps());
985
+ await handleMessageDelete(destinationless, noopLogger, 1, deps());
995
986
 
996
987
  assert.equal(called("connection.deleteMessages").length, 0);
997
988
  assert.equal(called("message.delete").length, 0);
@@ -1002,7 +993,7 @@ describe("handleMessageDelete", () => {
1002
993
  });
1003
994
 
1004
995
  it("expunges on the server and removes every thread row before the message row", async () => {
1005
- await handleMessageDelete(permanentEvent, noopLog, 1, deps());
996
+ await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
1006
997
 
1007
998
  assert.deepEqual(called("connection.deleteMessages")[0]?.args, [[10]]);
1008
999
  assert.equal(called("threadMessage.delete").length, 2);
@@ -1021,7 +1012,7 @@ describe("handleMessageDelete", () => {
1021
1012
  };
1022
1013
  sourceNoLongerHoldsTheUid();
1023
1014
 
1024
- await handleMessageDelete(permanentEvent, noopLog, 1, deps());
1015
+ await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
1025
1016
 
1026
1017
  assert.equal(called("message.delete").length, 1);
1027
1018
  assert.equal(called("threadMessage.delete").length, 2);
@@ -1042,7 +1033,7 @@ describe("handleMessageDelete", () => {
1042
1033
  sourceNoLongerHoldsTheUid();
1043
1034
 
1044
1035
  await assert.rejects(
1045
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
1036
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
1046
1037
  /not found/,
1047
1038
  );
1048
1039
 
@@ -1070,7 +1061,7 @@ describe("handleMessageDelete", () => {
1070
1061
  };
1071
1062
 
1072
1063
  await assert.rejects(
1073
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
1064
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
1074
1065
  /NONEXISTENT/,
1075
1066
  );
1076
1067
 
@@ -1092,7 +1083,7 @@ describe("handleMessageDelete", () => {
1092
1083
  h.connection.fetchMessages = async () => [];
1093
1084
 
1094
1085
  await assert.rejects(
1095
- handleMessageDelete(permanentEvent, noopLog, 1, deps()),
1086
+ handleMessageDelete(permanentEvent, noopLogger, 1, deps()),
1096
1087
  /NONEXISTENT/,
1097
1088
  );
1098
1089
 
@@ -1117,7 +1108,7 @@ describe("handleMessageDelete", () => {
1117
1108
  };
1118
1109
 
1119
1110
  await assert.rejects(
1120
- handleMessageDelete(permanentEvent, noopLog, 1, deps()),
1111
+ handleMessageDelete(permanentEvent, noopLogger, 1, deps()),
1121
1112
  /NONEXISTENT mailbox does not exist/,
1122
1113
  );
1123
1114
 
@@ -1138,7 +1129,7 @@ describe("handleMessageDelete", () => {
1138
1129
  throw new Error("TRYCREATE: no such mailbox");
1139
1130
  };
1140
1131
 
1141
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1132
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1142
1133
 
1143
1134
  assert.equal(called("connection.createMailbox").length, 0);
1144
1135
  assert.deepEqual(
@@ -1158,7 +1149,7 @@ describe("handleMessageDelete", () => {
1158
1149
  schemaVersion: undefined,
1159
1150
  } as unknown as MessageDeleteEvent;
1160
1151
 
1161
- await handleMessageDelete(unversioned, noopLog, 1, deps());
1152
+ await handleMessageDelete(unversioned, noopLogger, 1, deps());
1162
1153
 
1163
1154
  assert.equal(h.getConnectionCount, 0);
1164
1155
  assert.equal(called("connection.deleteMessages").length, 0);
@@ -1179,7 +1170,7 @@ describe("handleMessageDelete", () => {
1179
1170
  schemaVersion: undefined,
1180
1171
  } as unknown as MessageDeleteEvent;
1181
1172
 
1182
- await handleMessageDelete(unversioned, noopLog, 1, deps());
1173
+ await handleMessageDelete(unversioned, noopLogger, 1, deps());
1183
1174
 
1184
1175
  assert.deepEqual(
1185
1176
  called("threadMessage.update").map((c) => c.args[1]),
@@ -1198,7 +1189,7 @@ describe("handleMessageDelete", () => {
1198
1189
  schemaVersion: undefined,
1199
1190
  } as unknown as MessageDeleteEvent;
1200
1191
 
1201
- await handleMessageDelete(unversioned, noopLog, 1, deps());
1192
+ await handleMessageDelete(unversioned, noopLogger, 1, deps());
1202
1193
 
1203
1194
  assert.equal(called("connection.deleteMessages").length, 0);
1204
1195
  assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
@@ -1215,7 +1206,7 @@ describe("handleMessageDelete", () => {
1215
1206
  };
1216
1207
 
1217
1208
  await assert.rejects(
1218
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
1209
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
1219
1210
  /server exploded/,
1220
1211
  );
1221
1212
 
@@ -1234,7 +1225,7 @@ describe("handleMessageDelete", () => {
1234
1225
  it("hands the optimistic trash move back when openBox trips a UIDVALIDITY mismatch", async () => {
1235
1226
  h.connection.openBox = async () => ({ uidvalidity: 999 });
1236
1227
 
1237
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1228
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1238
1229
 
1239
1230
  assert.equal(
1240
1231
  (called("mailbox.update")[0]?.args[2] as { cursorState?: string })
@@ -1269,7 +1260,7 @@ describe("handleMessageDelete", () => {
1269
1260
 
1270
1261
  await handleMessageDelete(
1271
1262
  moveEvent,
1272
- noopLog,
1263
+ noopLogger,
1273
1264
  MESSAGE_DELETE_MAX_ATTEMPTS,
1274
1265
  deps(),
1275
1266
  );
@@ -1403,7 +1394,7 @@ describe("handleMessageDelete", () => {
1403
1394
  cursorState: "rebuilding",
1404
1395
  };
1405
1396
 
1406
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1397
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1407
1398
 
1408
1399
  assert.equal(called("threadMessage.findAllByMessageId").length, 1);
1409
1400
  });
@@ -1487,7 +1478,7 @@ describe("handleMessageDelete", () => {
1487
1478
  h.sourceSearchUids = [4];
1488
1479
  h.destinationSearchUids = [12];
1489
1480
 
1490
- await handleMessageDelete(moveEvent, noopLog, 2, deps());
1481
+ await handleMessageDelete(moveEvent, noopLogger, 2, deps());
1491
1482
 
1492
1483
  assert.equal(called("message.updateUid").length, 0);
1493
1484
  assert.deepEqual(
@@ -1507,7 +1498,7 @@ describe("handleMessageDelete", () => {
1507
1498
  cursorState: "rebuilding",
1508
1499
  };
1509
1500
 
1510
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1501
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1511
1502
 
1512
1503
  assert.deepEqual(
1513
1504
  called("emitEvent").map((c) => c.args[0]),
@@ -1525,7 +1516,7 @@ describe("handleMessageDelete", () => {
1525
1516
  cursorState: "rebuilding",
1526
1517
  };
1527
1518
 
1528
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1519
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1529
1520
 
1530
1521
  assert.equal(h.getConnectionCount, 0);
1531
1522
  assert.deepEqual(
@@ -1549,7 +1540,7 @@ describe("handleMessageDelete", () => {
1549
1540
  };
1550
1541
  h.allThreadMessages = [];
1551
1542
 
1552
- await handleMessageDelete(permanentEvent, noopLog, 1, deps());
1543
+ await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
1553
1544
 
1554
1545
  assert.equal(h.getConnectionCount, 0);
1555
1546
  assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
@@ -1568,7 +1559,7 @@ describe("handleMessageDelete", () => {
1568
1559
  };
1569
1560
  h.allThreadMessages = [];
1570
1561
 
1571
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1562
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1572
1563
 
1573
1564
  assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
1574
1565
  assert.equal(
@@ -1583,7 +1574,7 @@ describe("handleMessageDelete", () => {
1583
1574
  name: "NotFoundError",
1584
1575
  });
1585
1576
 
1586
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1577
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1587
1578
 
1588
1579
  assert.equal(h.getConnectionCount, 0);
1589
1580
  assert.equal(called("message.updateUid").length, 0);
@@ -1597,7 +1588,7 @@ describe("handleMessageDelete", () => {
1597
1588
  deletedAt: Date.now(),
1598
1589
  };
1599
1590
 
1600
- await handleMessageDelete(moveEvent, noopLog, 1, deps());
1591
+ await handleMessageDelete(moveEvent, noopLogger, 1, deps());
1601
1592
 
1602
1593
  assert.equal(h.getConnectionCount, 0);
1603
1594
  });
@@ -1606,7 +1597,7 @@ describe("handleMessageDelete", () => {
1606
1597
  h.account = null;
1607
1598
 
1608
1599
  await assert.rejects(
1609
- handleMessageDelete(moveEvent, noopLog, 1, deps()),
1600
+ handleMessageDelete(moveEvent, noopLogger, 1, deps()),
1610
1601
  /not found/,
1611
1602
  );
1612
1603
  });