jazz-tools 0.13.3 → 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.
- package/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +14 -0
- package/dist/{chunk-YZW2QELD.js → chunk-IYNL2EJM.js} +24 -10
- package/dist/chunk-IYNL2EJM.js.map +1 -0
- package/dist/coValues/inbox.d.ts.map +1 -1
- package/dist/implementation/ContextManager.d.ts +1 -0
- package/dist/implementation/ContextManager.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/testing.js +1 -1
- package/package.json +2 -2
- package/src/coValues/inbox.ts +26 -12
- package/src/implementation/ContextManager.ts +8 -2
- package/src/tests/ContextManager.test.ts +12 -0
- package/src/tests/inbox.test.ts +57 -1
- package/dist/chunk-YZW2QELD.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/coValues/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,QAAQ,EAER,SAAS,EACV,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAgB,WAAW,EAAE,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAe,MAAM,iBAAiB,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,YAAY,EAAE,CAAC;AACpE,KAAK,KAAK,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC;AAEtC,KAAK,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpE,KAAK,oBAAoB,GAAG,WAAW,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;CACzC,CAAC,CAAC;AACH,KAAK,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AACtC,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7B,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACnC,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC,CAAC;AAEH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO;;;EAyB/C;AAED,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,GAAG,SAAS,IAAI,QAAQ,CAAC;IAC7E,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/coValues/inbox.ts"],"names":[],"mappings":"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"}
|
@@ -17,6 +17,7 @@ export type JazzContextManagerAuthProps = {
|
|
17
17
|
export type JazzContextManagerBaseProps<Acc extends Account> = {
|
18
18
|
onAnonymousAccountDiscarded?: (anonymousAccount: Acc) => Promise<void>;
|
19
19
|
onLogOut?: () => void | Promise<unknown>;
|
20
|
+
logOutReplacement?: () => void | Promise<unknown>;
|
20
21
|
};
|
21
22
|
type PlatformSpecificAuthContext<Acc extends Account> = {
|
22
23
|
me: Acc;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ContextManager.d.ts","sourceRoot":"","sources":["../../src/implementation/ContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAmB,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAkB,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAC5E,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IAAI;IAC7D,2BAA2B,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"ContextManager.d.ts","sourceRoot":"","sources":["../../src/implementation/ContextManager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/testing.js
CHANGED
package/package.json
CHANGED
@@ -17,11 +17,11 @@
|
|
17
17
|
},
|
18
18
|
"type": "module",
|
19
19
|
"license": "MIT",
|
20
|
-
"version": "0.13.
|
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.
|
24
|
+
"cojson": "0.13.5"
|
25
25
|
},
|
26
26
|
"devDependencies": {
|
27
27
|
"tsup": "8.3.5",
|
package/src/coValues/inbox.ts
CHANGED
@@ -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<
|
65
|
-
|
66
|
-
|
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
|
-
|
206
|
-
.expectCoValueLoaded(item.value)
|
207
|
-
.getCurrentContent() as RawCoMap;
|
208
|
+
let inboxMessage: RawCoMap | undefined;
|
208
209
|
|
209
|
-
|
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
|
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
|
-
|
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(
|
290
|
-
|
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
|
|
@@ -15,6 +15,7 @@ export type JazzContextManagerAuthProps = {
|
|
15
15
|
export type JazzContextManagerBaseProps<Acc extends Account> = {
|
16
16
|
onAnonymousAccountDiscarded?: (anonymousAccount: Acc) => Promise<void>;
|
17
17
|
onLogOut?: () => void | Promise<unknown>;
|
18
|
+
logOutReplacement?: () => void | Promise<unknown>;
|
18
19
|
};
|
19
20
|
|
20
21
|
type PlatformSpecificAuthContext<Acc extends Account> = {
|
@@ -136,8 +137,13 @@ export class JazzContextManager<
|
|
136
137
|
}
|
137
138
|
|
138
139
|
await this.props.onLogOut?.();
|
139
|
-
|
140
|
-
|
140
|
+
|
141
|
+
if (this.props.logOutReplacement) {
|
142
|
+
await this.props.logOutReplacement();
|
143
|
+
} else {
|
144
|
+
await this.context.logOut();
|
145
|
+
return this.createContext(this.props);
|
146
|
+
}
|
141
147
|
};
|
142
148
|
|
143
149
|
done = () => {
|
@@ -149,6 +149,18 @@ describe("ContextManager", () => {
|
|
149
149
|
expect(onLogOut).toHaveBeenCalled();
|
150
150
|
});
|
151
151
|
|
152
|
+
test("calls logoutReplacement callback instead of the Jazz logout when logging out", async () => {
|
153
|
+
const logOutReplacement = vi.fn();
|
154
|
+
await manager.createContext({ logOutReplacement });
|
155
|
+
|
156
|
+
const context = manager.getCurrentValue();
|
157
|
+
|
158
|
+
await manager.logOut();
|
159
|
+
|
160
|
+
expect(logOutReplacement).toHaveBeenCalled();
|
161
|
+
expect(manager.getCurrentValue()).toBe(context);
|
162
|
+
});
|
163
|
+
|
152
164
|
test("notifies listeners of context changes", async () => {
|
153
165
|
const listener = vi.fn();
|
154
166
|
manager.subscribe(listener);
|
package/src/tests/inbox.test.ts
CHANGED
@@ -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
|
});
|