jazz-tools 0.13.4 → 0.13.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/coValues/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/coValues/inbox.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  parseInviteLink,
36
36
  randomSessionProvider,
37
37
  subscribeToCoValue
38
- } from "./chunk-JNC2UVYB.js";
38
+ } from "./chunk-IYNL2EJM.js";
39
39
 
40
40
  // src/index.ts
41
41
  import { MAX_RECOMMENDED_TX_SIZE, cojsonInternals } from "cojson";
package/dist/testing.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  createAnonymousJazzContext,
6
6
  createJazzContext,
7
7
  randomSessionProvider
8
- } from "./chunk-JNC2UVYB.js";
8
+ } from "./chunk-IYNL2EJM.js";
9
9
 
10
10
  // src/testing.ts
11
11
  import { LocalNode } from "cojson";
package/package.json CHANGED
@@ -17,11 +17,11 @@
17
17
  },
18
18
  "type": "module",
19
19
  "license": "MIT",
20
- "version": "0.13.4",
20
+ "version": "0.13.5",
21
21
  "dependencies": {
22
22
  "@scure/bip39": "^1.3.0",
23
23
  "fast-myers-diff": "^3.2.0",
24
- "cojson": "0.13.2"
24
+ "cojson": "0.13.5"
25
25
  },
26
26
  "devDependencies": {
27
27
  "tsup": "8.3.5",
@@ -61,10 +61,10 @@ type InboxMessage<I extends CoValue, O extends CoValue | undefined> = RawCoMap<{
61
61
  error: string | undefined;
62
62
  }>;
63
63
 
64
- function createInboxMessage<I extends CoValue, O extends CoValue | undefined>(
65
- payload: I,
66
- inboxOwner: RawAccount,
67
- ) {
64
+ async function createInboxMessage<
65
+ I extends CoValue,
66
+ O extends CoValue | undefined,
67
+ >(payload: I, inboxOwner: RawAccount) {
68
68
  const group = payload._raw.group;
69
69
 
70
70
  if (group instanceof RawAccount) {
@@ -80,6 +80,9 @@ function createInboxMessage<I extends CoValue, O extends CoValue | undefined>(
80
80
  error: undefined,
81
81
  });
82
82
 
83
+ await payload._raw.core.waitForSync();
84
+ await message.core.waitForSync();
85
+
83
86
  return message;
84
87
  }
85
88
 
@@ -202,14 +205,18 @@ export class Inbox {
202
205
  const stringifiedError = String(error);
203
206
  errors.push(stringifiedError);
204
207
 
205
- const inboxMessage = node
206
- .expectCoValueLoaded(item.value)
207
- .getCurrentContent() as RawCoMap;
208
+ let inboxMessage: RawCoMap | undefined;
208
209
 
209
- inboxMessage.set("error", stringifiedError);
210
+ try {
211
+ inboxMessage = node
212
+ .expectCoValueLoaded(item.value)
213
+ .getCurrentContent() as RawCoMap;
214
+
215
+ inboxMessage.set("error", stringifiedError);
216
+ } catch (error) {}
210
217
 
211
218
  if (errors.length > retries) {
212
- inboxMessage.set("processed", true);
219
+ inboxMessage?.set("processed", true);
213
220
  this.processed.push(txKey);
214
221
  this.failed.push({ errors, value: item.value });
215
222
  } else {
@@ -227,7 +234,12 @@ export class Inbox {
227
234
  }
228
235
  };
229
236
 
230
- return this.messages.subscribe(handleNewMessages);
237
+ const unsubscribe = this.messages.subscribe(handleNewMessages);
238
+
239
+ return () => {
240
+ unsubscribe();
241
+ clearFailTimer();
242
+ };
231
243
  }
232
244
 
233
245
  static async load(account: Account) {
@@ -286,8 +298,10 @@ export class InboxSender<I extends CoValue, O extends CoValue | undefined> {
286
298
  return this.owner;
287
299
  }
288
300
 
289
- sendMessage(message: I): Promise<O extends CoValue ? ID<O> : undefined> {
290
- const inboxMessage = createInboxMessage<I, O>(message, this.owner);
301
+ async sendMessage(
302
+ message: I,
303
+ ): Promise<O extends CoValue ? ID<O> : undefined> {
304
+ const inboxMessage = await createInboxMessage<I, O>(message, this.owner);
291
305
 
292
306
  this.messages.push(inboxMessage.id);
293
307
 
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from "vitest";
1
+ import { describe, expect, it, vi } from "vitest";
2
2
  import { Account } from "../coValues/account";
3
3
  import { CoMap } from "../coValues/coMap";
4
4
  import { Group } from "../coValues/group";
@@ -191,6 +191,8 @@ describe("Inbox", () => {
191
191
  },
192
192
  );
193
193
 
194
+ const errorLogSpy = vi.spyOn(console, "error").mockImplementation(() => {});
195
+
194
196
  const unsubscribe = receiverInbox.subscribe(Message, async () => {
195
197
  return Promise.reject(new Error("Failed"));
196
198
  });
@@ -203,6 +205,13 @@ describe("Inbox", () => {
203
205
  );
204
206
 
205
207
  unsubscribe();
208
+
209
+ expect(errorLogSpy).toHaveBeenCalledWith(
210
+ "Error processing inbox message",
211
+ expect.any(Error),
212
+ );
213
+
214
+ errorLogSpy.mockRestore();
206
215
  });
207
216
 
208
217
  it("should mark messages as processed", async () => {
@@ -297,6 +306,7 @@ describe("Inbox", () => {
297
306
  owner: Group.create({ owner: sender }),
298
307
  },
299
308
  );
309
+ const errorLogSpy = vi.spyOn(console, "error").mockImplementation(() => {});
300
310
 
301
311
  // Setup inbox sender
302
312
  const inboxSender = await InboxSender.load(receiver.id, sender);
@@ -319,5 +329,51 @@ describe("Inbox", () => {
319
329
  const [failed] = Object.values(receiverInbox.failed.items).flat();
320
330
  expect(failed?.value.errors.length).toBe(3);
321
331
  unsubscribe();
332
+
333
+ expect(errorLogSpy).toHaveBeenCalledWith(
334
+ "Error processing inbox message",
335
+ expect.any(Error),
336
+ );
337
+
338
+ errorLogSpy.mockRestore();
339
+ });
340
+
341
+ it("should not break the subscription if the message is unavailable", async () => {
342
+ const { clientAccount: sender, serverAccount: receiver } =
343
+ await setupTwoNodes();
344
+
345
+ const receiverInbox = await Inbox.load(receiver);
346
+
347
+ const inboxSender = await InboxSender.load(receiver.id, sender);
348
+ inboxSender.messages.push(`co_z123234` as any);
349
+
350
+ const spy = vi.fn();
351
+
352
+ const errorLogSpy = vi.spyOn(console, "error").mockImplementation(() => {});
353
+
354
+ // Subscribe to inbox messages
355
+ const unsubscribe = receiverInbox.subscribe(
356
+ Message,
357
+ async () => {
358
+ spy();
359
+ },
360
+ { retries: 2 },
361
+ );
362
+
363
+ await waitFor(() => {
364
+ const [failed] = Object.values(receiverInbox.failed.items).flat();
365
+
366
+ expect(failed?.value.errors.length).toBe(3);
367
+ });
368
+
369
+ expect(spy).not.toHaveBeenCalled();
370
+ unsubscribe();
371
+
372
+ expect(errorLogSpy).toHaveBeenCalledWith(
373
+ "Error processing inbox message",
374
+ expect.any(Error),
375
+ );
376
+
377
+ errorLogSpy.mockRestore();
322
378
  });
323
379
  });