cojson 0.1.11 → 0.2.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.
Files changed (56) hide show
  1. package/dist/base64url.js +15 -2
  2. package/dist/base64url.js.map +1 -1
  3. package/dist/coValue.d.ts +1 -1
  4. package/dist/coValueCore.d.ts +9 -3
  5. package/dist/coValueCore.js +100 -7
  6. package/dist/coValueCore.js.map +1 -1
  7. package/dist/coValues/coList.js +2 -1
  8. package/dist/coValues/coList.js.map +1 -1
  9. package/dist/coValues/coMap.d.ts +7 -12
  10. package/dist/coValues/coMap.js +2 -1
  11. package/dist/coValues/coMap.js.map +1 -1
  12. package/dist/coValues/coStream.d.ts +11 -2
  13. package/dist/coValues/coStream.js +59 -15
  14. package/dist/coValues/coStream.js.map +1 -1
  15. package/dist/crypto.d.ts +11 -3
  16. package/dist/crypto.js +51 -16
  17. package/dist/crypto.js.map +1 -1
  18. package/dist/group.d.ts +1 -1
  19. package/dist/index.d.ts +6 -3
  20. package/dist/index.js +5 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/jsonStringify.d.ts +6 -0
  23. package/dist/jsonStringify.js +57 -0
  24. package/dist/jsonStringify.js.map +1 -0
  25. package/dist/jsonValue.d.ts +1 -1
  26. package/dist/media.d.ts +8 -0
  27. package/dist/media.js +2 -0
  28. package/dist/media.js.map +1 -0
  29. package/dist/node.js +1 -1
  30. package/dist/permissions.js +4 -2
  31. package/dist/permissions.js.map +1 -1
  32. package/dist/sync.js +8 -2
  33. package/dist/sync.js.map +1 -1
  34. package/package.json +3 -4
  35. package/src/account.test.ts +5 -0
  36. package/src/base64url.ts +16 -6
  37. package/src/coValue.test.ts +28 -0
  38. package/src/coValue.ts +1 -1
  39. package/src/coValueCore.test.ts +16 -10
  40. package/src/coValueCore.ts +148 -9
  41. package/src/coValues/coList.ts +2 -1
  42. package/src/coValues/coMap.ts +11 -12
  43. package/src/coValues/coStream.ts +83 -21
  44. package/src/crypto.test.ts +5 -0
  45. package/src/crypto.ts +68 -19
  46. package/src/group.test.ts +5 -1
  47. package/src/group.ts +1 -1
  48. package/src/index.ts +7 -1
  49. package/src/jsonStringify.ts +66 -0
  50. package/src/jsonValue.ts +1 -1
  51. package/src/media.ts +9 -0
  52. package/src/node.ts +1 -1
  53. package/src/permissions.test.ts +5 -1
  54. package/src/permissions.ts +5 -2
  55. package/src/sync.test.ts +22 -24
  56. package/src/sync.ts +16 -2
package/dist/sync.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { CoValueCore } from "./coValueCore.js";
2
2
  import { newLoadingState } from "./node.js";
3
+ import { stableStringify } from "./jsonStringify.js";
3
4
  export function emptyKnownState(id) {
4
5
  return {
5
6
  id,
@@ -147,7 +148,6 @@ export class SyncManager {
147
148
  console.error(`Error reading from peer ${peer.id}, handling msg`, JSON.stringify(msg), e);
148
149
  }
149
150
  }
150
- console.log("DONE!!!");
151
151
  }
152
152
  catch (e) {
153
153
  console.error(`Error reading from peer ${peer.id}`, e);
@@ -265,7 +265,13 @@ export class SyncManager {
265
265
  ? ourKnownTxIdx - theirFirstNewTxIdx
266
266
  : 0;
267
267
  const newTransactions = newContentForSession.newTransactions.slice(alreadyKnownOffset);
268
- const success = coValue.tryAddTransactions(sessionID, newTransactions, undefined, newContentForSession.lastSignature);
268
+ const before = performance.now();
269
+ const success = await coValue.tryAddTransactionsAsync(sessionID, newTransactions, undefined, newContentForSession.lastSignature);
270
+ const after = performance.now();
271
+ if (after - before > 10) {
272
+ const totalTxLength = newTransactions.map(t => stableStringify(t).length).reduce((a, b) => a + b, 0);
273
+ console.log("Adding incoming transactions took", after - before, "ms", totalTxLength, "bytes = ", "bandwidth: MB/s", (1000 * totalTxLength / (after - before)) / (1024 * 1024));
274
+ }
269
275
  if (!success) {
270
276
  console.error("Failed to add transactions", newTransactions);
271
277
  continue;
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
- "version": "0.1.11",
8
+ "version": "0.2.0",
9
9
  "devDependencies": {
10
10
  "@types/jest": "^29.5.3",
11
11
  "@typescript-eslint/eslint-plugin": "^6.2.1",
@@ -19,9 +19,8 @@
19
19
  "dependencies": {
20
20
  "@noble/ciphers": "^0.1.3",
21
21
  "@noble/curves": "^1.1.0",
22
- "@noble/hashes": "^1.3.1",
23
22
  "@scure/base": "^1.1.1",
24
- "fast-json-stable-stringify": "https://github.com/tirithen/fast-json-stable-stringify#7a3dcf2",
23
+ "hash-wasm": "^4.9.0",
25
24
  "isomorphic-streams": "https://github.com/sgwilym/isomorphic-streams.git#aa9394781bfc92f8d7c981be7daf8af4b4cd4fae"
26
25
  },
27
26
  "scripts": {
@@ -52,5 +51,5 @@
52
51
  "/dist/"
53
52
  ]
54
53
  },
55
- "gitHead": "92eae0e1803850c0a68420e0e2f0dd6190b12bb5"
54
+ "gitHead": "d7e8b0b9da8faeed8a31a60048ee2329323059f0"
56
55
  }
@@ -1,7 +1,12 @@
1
1
  import { newRandomSessionID } from "./coValueCore.js";
2
+ import { cojsonReady } from "./index.js";
2
3
  import { LocalNode } from "./node.js";
3
4
  import { connectedPeers } from "./streamUtils.js";
4
5
 
6
+ beforeEach(async () => {
7
+ await cojsonReady;
8
+ });
9
+
5
10
  test("Can create a node while creating a new account with profile", async () => {
6
11
  const { node, accountID, accountSecret, sessionID } =
7
12
  LocalNode.withNewlyCreatedAccount("Hermes Puggington");
package/src/base64url.ts CHANGED
@@ -25,6 +25,7 @@ export function base64URLtoBytes(base64: string) {
25
25
  }
26
26
 
27
27
  export function bytesToBase64url(bytes: Uint8Array) {
28
+ // const before = performance.now();
28
29
  const m = bytes.length;
29
30
  const k = m % 3;
30
31
  const n = Math.floor(m / 3) * 4 + (k && k + 1);
@@ -43,16 +44,25 @@ export function bytesToBase64url(bytes: Uint8Array) {
43
44
  let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, n));
44
45
  if (k === 1) base64 += "==";
45
46
  if (k === 2) base64 += "=";
47
+ // const after = performance.now();
48
+ // console.log(
49
+ // "bytesToBase64url bandwidth in MB/s for length",
50
+ // (1000 * bytes.length / (after - before)) / (1024 * 1024),
51
+ // bytes.length
52
+ // );
46
53
  return base64;
47
54
  }
48
55
 
49
56
  const alphabet =
50
57
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
51
- const lookup = Object.fromEntries(
52
- Array.from(alphabet).map((a, i) => [a.charCodeAt(0), i])
53
- );
58
+
59
+ const lookup = new Uint8Array(128);
60
+ for (const [i, a] of Array.from(alphabet).entries()) {
61
+ lookup[a.charCodeAt(0)] = i;
62
+ }
54
63
  lookup["=".charCodeAt(0)] = 0;
55
64
 
56
- const encodeLookup = Object.fromEntries(
57
- Array.from(alphabet).map((a, i) => [i, a.charCodeAt(0)])
58
- );
65
+ const encodeLookup = new Uint8Array(64);
66
+ for (const [i, a] of Array.from(alphabet).entries()) {
67
+ encodeLookup[i] = a.charCodeAt(0);
68
+ }
@@ -1,9 +1,14 @@
1
1
  import { accountOrAgentIDfromSessionID } from "./coValueCore.js";
2
2
  import { BinaryCoStream } from "./coValues/coStream.js";
3
3
  import { createdNowUnique } from "./crypto.js";
4
+ import { cojsonReady } from "./index.js";
4
5
  import { LocalNode } from "./node.js";
5
6
  import { randomAnonymousAccountAndSessionID } from "./testUtils.js";
6
7
 
8
+ beforeEach(async () => {
9
+ await cojsonReady;
10
+ });
11
+
7
12
  test("Empty CoMap works", () => {
8
13
  const node = new LocalNode(...randomAnonymousAccountAndSessionID());
9
14
 
@@ -383,5 +388,28 @@ test("Can push into BinaryCoStream", () => {
383
388
  chunks: [],
384
389
  finished: false,
385
390
  });
391
+ editable.pushBinaryStreamChunk(new Uint8Array([1, 2, 3]), "trusting");
392
+ expect(editable.getBinaryChunks()).toEqual({
393
+ mimeType: "text/plain",
394
+ fileName: "test.txt",
395
+ chunks: [new Uint8Array([1, 2, 3])],
396
+ finished: false,
397
+ });
398
+ editable.pushBinaryStreamChunk(new Uint8Array([4, 5, 6]), "trusting");
399
+
400
+ expect(editable.getBinaryChunks()).toEqual({
401
+ mimeType: "text/plain",
402
+ fileName: "test.txt",
403
+ chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
404
+ finished: false,
405
+ });
406
+
407
+ editable.endBinaryStream("trusting");
408
+ expect(editable.getBinaryChunks()).toEqual({
409
+ mimeType: "text/plain",
410
+ fileName: "test.txt",
411
+ chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
412
+ finished: true,
413
+ });
386
414
  });
387
415
  });
package/src/coValue.ts CHANGED
@@ -47,7 +47,7 @@ export interface CoValue {
47
47
  export interface WriteableCoValue extends CoValue {}
48
48
 
49
49
  export type CoValueImpl =
50
- | CoMap<{ [key: string]: JsonValue }, JsonObject | null>
50
+ | CoMap<{ [key: string]: JsonValue | undefined; }, JsonObject | null>
51
51
  | CoList<JsonValue, JsonObject | null>
52
52
  | CoStream<JsonValue, JsonObject | null>
53
53
  | BinaryCoStream<BinaryCoStreamMeta>
@@ -4,6 +4,12 @@ import { createdNowUnique, getAgentSignerSecret, newRandomAgentSecret, sign } fr
4
4
  import { randomAnonymousAccountAndSessionID } from "./testUtils.js";
5
5
  import { MapOpPayload } from "./coValues/coMap.js";
6
6
  import { Role } from "./permissions.js";
7
+ import { cojsonReady } from "./index.js";
8
+ import { stableStringify } from "./jsonStringify.js";
9
+
10
+ beforeEach(async () => {
11
+ await cojsonReady;
12
+ });
7
13
 
8
14
  test("Can create coValue with new agent credentials and add transaction to it", () => {
9
15
  const [account, sessionID] = randomAnonymousAccountAndSessionID();
@@ -19,11 +25,11 @@ test("Can create coValue with new agent credentials and add transaction to it",
19
25
  const transaction: Transaction = {
20
26
  privacy: "trusting",
21
27
  madeAt: Date.now(),
22
- changes: [
28
+ changes: stableStringify([
23
29
  {
24
30
  hello: "world",
25
31
  },
26
- ],
32
+ ]),
27
33
  };
28
34
 
29
35
  const { expectedNewHash } = coValue.expectedNewHashAfter(
@@ -56,11 +62,11 @@ test("transactions with wrong signature are rejected", () => {
56
62
  const transaction: Transaction = {
57
63
  privacy: "trusting",
58
64
  madeAt: Date.now(),
59
- changes: [
65
+ changes: stableStringify([
60
66
  {
61
67
  hello: "world",
62
68
  },
63
- ],
69
+ ]),
64
70
  };
65
71
 
66
72
  const { expectedNewHash } = coValue.expectedNewHashAfter(
@@ -92,11 +98,11 @@ test("transactions with correctly signed, but wrong hash are rejected", () => {
92
98
  const transaction: Transaction = {
93
99
  privacy: "trusting",
94
100
  madeAt: Date.now(),
95
- changes: [
101
+ changes: stableStringify([
96
102
  {
97
103
  hello: "world",
98
104
  },
99
- ],
105
+ ]),
100
106
  };
101
107
 
102
108
  const { expectedNewHash } = coValue.expectedNewHashAfter(
@@ -105,11 +111,11 @@ test("transactions with correctly signed, but wrong hash are rejected", () => {
105
111
  {
106
112
  privacy: "trusting",
107
113
  madeAt: Date.now(),
108
- changes: [
114
+ changes: stableStringify([
109
115
  {
110
116
  hello: "wrong",
111
117
  },
112
- ],
118
+ ]),
113
119
  },
114
120
  ]
115
121
  );
@@ -149,13 +155,13 @@ test("New transactions in a group correctly update owned values, including subsc
149
155
  const resignationThatWeJustLearnedAbout = {
150
156
  privacy: "trusting",
151
157
  madeAt: timeBeforeEdit,
152
- changes: [
158
+ changes: stableStringify([
153
159
  {
154
160
  op: "set",
155
161
  key: account.id,
156
162
  value: "revoked"
157
163
  } satisfies MapOpPayload<typeof account.id, Role>
158
- ]
164
+ ])
159
165
  } satisfies Transaction;
160
166
 
161
167
  const { expectedNewHash } = group.underlyingMap.core.expectedNewHashAfter(sessionID, [
@@ -19,6 +19,7 @@ import {
19
19
  decryptKeySecret,
20
20
  getAgentSignerID,
21
21
  getAgentSealerID,
22
+ decryptRawForTransaction,
22
23
  } from "./crypto.js";
23
24
  import { JsonObject, JsonValue } from "./jsonValue.js";
24
25
  import { base58 } from "@scure/base";
@@ -36,6 +37,7 @@ import {
36
37
  AccountID,
37
38
  GeneralizedControlledAccount,
38
39
  } from "./account.js";
40
+ import { Stringified, parseJSON, stableStringify } from "./jsonStringify.js";
39
41
 
40
42
  export type CoValueHeader = {
41
43
  type: CoValueImpl["type"];
@@ -77,17 +79,18 @@ export type PrivateTransaction = {
77
79
  >;
78
80
  };
79
81
 
82
+
80
83
  export type TrustingTransaction = {
81
84
  privacy: "trusting";
82
85
  madeAt: number;
83
- changes: JsonValue[];
86
+ changes: Stringified<JsonValue[]>;
84
87
  };
85
88
 
86
89
  export type Transaction = PrivateTransaction | TrustingTransaction;
87
90
 
88
91
  export type DecryptedTransaction = {
89
92
  txID: TransactionID;
90
- changes: JsonValue[];
93
+ changes: Stringified<JsonValue[]>;
91
94
  madeAt: number;
92
95
  };
93
96
 
@@ -100,7 +103,7 @@ export class CoValueCore {
100
103
  _sessions: { [key: SessionID]: SessionLog };
101
104
  _cachedContent?: CoValueImpl;
102
105
  listeners: Set<(content?: CoValueImpl) => void> = new Set();
103
- _decryptionCache: {[key: Encrypted<JsonValue[], JsonValue>]: JsonValue[] | undefined} = {}
106
+ _decryptionCache: {[key: Encrypted<JsonValue[], JsonValue>]: Stringified<JsonValue[]> | undefined} = {}
104
107
 
105
108
  constructor(
106
109
  header: CoValueHeader,
@@ -187,10 +190,110 @@ export class CoValueCore {
187
190
  return false;
188
191
  }
189
192
 
193
+ // const beforeHash = performance.now();
190
194
  const { expectedNewHash, newStreamingHash } = this.expectedNewHashAfter(
191
195
  sessionID,
192
196
  newTransactions
193
197
  );
198
+ // const afterHash = performance.now();
199
+ // console.log(
200
+ // "Hashing took",
201
+ // afterHash - beforeHash
202
+ // );
203
+
204
+ if (givenExpectedNewHash && givenExpectedNewHash !== expectedNewHash) {
205
+ console.warn("Invalid hash", {
206
+ expectedNewHash,
207
+ givenExpectedNewHash,
208
+ });
209
+ return false;
210
+ }
211
+
212
+ // const beforeVerify = performance.now();
213
+ if (!verify(newSignature, expectedNewHash, signerID)) {
214
+ console.warn(
215
+ "Invalid signature",
216
+ newSignature,
217
+ expectedNewHash,
218
+ signerID
219
+ );
220
+ return false;
221
+ }
222
+ // const afterVerify = performance.now();
223
+ // console.log(
224
+ // "Verify took",
225
+ // afterVerify - beforeVerify
226
+ // );
227
+
228
+ const transactions = this.sessions[sessionID]?.transactions ?? [];
229
+
230
+ transactions.push(...newTransactions);
231
+
232
+ this._sessions[sessionID] = {
233
+ transactions,
234
+ lastHash: expectedNewHash,
235
+ streamingHash: newStreamingHash,
236
+ lastSignature: newSignature,
237
+ };
238
+
239
+ this._cachedContent = undefined;
240
+
241
+ if (this.listeners.size > 0) {
242
+ const content = this.getCurrentContent();
243
+ for (const listener of this.listeners) {
244
+ listener(content);
245
+ }
246
+ }
247
+
248
+ return true;
249
+ }
250
+
251
+ async tryAddTransactionsAsync(
252
+ sessionID: SessionID,
253
+ newTransactions: Transaction[],
254
+ givenExpectedNewHash: Hash | undefined,
255
+ newSignature: Signature
256
+ ): Promise<boolean> {
257
+ const signerID = getAgentSignerID(
258
+ this.node.resolveAccountAgent(
259
+ accountOrAgentIDfromSessionID(sessionID),
260
+ "Expected to know signer of transaction"
261
+ )
262
+ );
263
+
264
+ if (!signerID) {
265
+ console.warn(
266
+ "Unknown agent",
267
+ accountOrAgentIDfromSessionID(sessionID)
268
+ );
269
+ return false;
270
+ }
271
+
272
+ const nTxBefore = this.sessions[sessionID]?.transactions.length ?? 0;
273
+
274
+ // const beforeHash = performance.now();
275
+ const { expectedNewHash, newStreamingHash } = await this.expectedNewHashAfterAsync(
276
+ sessionID,
277
+ newTransactions
278
+ );
279
+ // const afterHash = performance.now();
280
+ // console.log(
281
+ // "Hashing took",
282
+ // afterHash - beforeHash
283
+ // );
284
+
285
+ const nTxAfter = this.sessions[sessionID]?.transactions.length ?? 0;
286
+
287
+ if (nTxAfter !== nTxBefore) {
288
+ const newTransactionLengthBefore = newTransactions.length;
289
+ newTransactions = newTransactions.slice((nTxAfter - nTxBefore));
290
+ console.warn("Transactions changed while async hashing", {
291
+ nTxBefore,
292
+ nTxAfter,
293
+ newTransactionLengthBefore,
294
+ remainingNewTransactions: newTransactions.length,
295
+ });
296
+ }
194
297
 
195
298
  if (givenExpectedNewHash && givenExpectedNewHash !== expectedNewHash) {
196
299
  console.warn("Invalid hash", {
@@ -200,6 +303,7 @@ export class CoValueCore {
200
303
  return false;
201
304
  }
202
305
 
306
+ // const beforeVerify = performance.now();
203
307
  if (!verify(newSignature, expectedNewHash, signerID)) {
204
308
  console.warn(
205
309
  "Invalid signature",
@@ -209,6 +313,11 @@ export class CoValueCore {
209
313
  );
210
314
  return false;
211
315
  }
316
+ // const afterVerify = performance.now();
317
+ // console.log(
318
+ // "Verify took",
319
+ // afterVerify - beforeVerify
320
+ // );
212
321
 
213
322
  const transactions = this.sessions[sessionID]?.transactions ?? [];
214
323
 
@@ -261,6 +370,32 @@ export class CoValueCore {
261
370
  };
262
371
  }
263
372
 
373
+ async expectedNewHashAfterAsync(
374
+ sessionID: SessionID,
375
+ newTransactions: Transaction[]
376
+ ): Promise<{ expectedNewHash: Hash; newStreamingHash: StreamingHash }> {
377
+ const streamingHash =
378
+ this.sessions[sessionID]?.streamingHash.clone() ??
379
+ new StreamingHash();
380
+ let before = performance.now();
381
+ for (const transaction of newTransactions) {
382
+ streamingHash.update(transaction)
383
+ const after = performance.now();
384
+ if (after - before > 1) {
385
+ console.log("Hashing blocked for", after - before);
386
+ await new Promise((resolve) => setTimeout(resolve, 0));
387
+ before = performance.now();
388
+ }
389
+ }
390
+
391
+ const newStreamingHash = streamingHash.clone();
392
+
393
+ return {
394
+ expectedNewHash: streamingHash.digest(),
395
+ newStreamingHash,
396
+ };
397
+ }
398
+
264
399
  makeTransaction(
265
400
  changes: JsonValue[],
266
401
  privacy: "private" | "trusting"
@@ -278,20 +413,24 @@ export class CoValueCore {
278
413
  );
279
414
  }
280
415
 
416
+ const encrypted = encryptForTransaction(changes, keySecret, {
417
+ in: this.id,
418
+ tx: this.nextTransactionID(),
419
+ });
420
+
421
+ this._decryptionCache[encrypted] = stableStringify(changes);
422
+
281
423
  transaction = {
282
424
  privacy: "private",
283
425
  madeAt,
284
426
  keyUsed: keyID,
285
- encryptedChanges: encryptForTransaction(changes, keySecret, {
286
- in: this.id,
287
- tx: this.nextTransactionID(),
288
- }),
427
+ encryptedChanges: encrypted,
289
428
  };
290
429
  } else {
291
430
  transaction = {
292
431
  privacy: "trusting",
293
432
  madeAt,
294
- changes,
433
+ changes: stableStringify(changes),
295
434
  };
296
435
  }
297
436
 
@@ -364,7 +503,7 @@ export class CoValueCore {
364
503
  let decrytedChanges = this._decryptionCache[tx.encryptedChanges];
365
504
 
366
505
  if (!decrytedChanges) {
367
- decrytedChanges = decryptForTransaction(
506
+ decrytedChanges = decryptRawForTransaction(
368
507
  tx.encryptedChanges,
369
508
  readKey,
370
509
  {
@@ -4,6 +4,7 @@ import { CoValueCore, accountOrAgentIDfromSessionID } from "../coValueCore.js";
4
4
  import { SessionID, TransactionID } from "../ids.js";
5
5
  import { Group } from "../group.js";
6
6
  import { AccountID, isAccountID } from "../account.js";
7
+ import { parseJSON } from "../jsonStringify.js";
7
8
 
8
9
  type OpID = TransactionID & { changeIdx: number };
9
10
 
@@ -98,7 +99,7 @@ export class CoList<T extends JsonValue, Meta extends JsonObject | null = null>
98
99
  changes,
99
100
  madeAt,
100
101
  } of this.core.getValidSortedTransactions()) {
101
- for (const [changeIdx, changeUntyped] of changes.entries()) {
102
+ for (const [changeIdx, changeUntyped] of parseJSON(changes).entries()) {
102
103
  const change = changeUntyped as ListOpPayload<T>;
103
104
 
104
105
  if (change.op === "pre" || change.op === "app") {
@@ -4,15 +4,16 @@ import { CoID, ReadableCoValue, WriteableCoValue } from '../coValue.js';
4
4
  import { CoValueCore, accountOrAgentIDfromSessionID } from '../coValueCore.js';
5
5
  import { AccountID, isAccountID } from '../account.js';
6
6
  import { Group } from '../group.js';
7
+ import { parseJSON } from '../jsonStringify.js';
7
8
 
8
- type MapOp<K extends string, V extends JsonValue> = {
9
+ type MapOp<K extends string, V extends JsonValue | undefined> = {
9
10
  txID: TransactionID;
10
11
  madeAt: number;
11
12
  changeIdx: number;
12
13
  } & MapOpPayload<K, V>;
13
14
  // TODO: add after TransactionID[] for conflicts/ordering
14
15
 
15
- export type MapOpPayload<K extends string, V extends JsonValue> = {
16
+ export type MapOpPayload<K extends string, V extends JsonValue | undefined> = {
16
17
  op: "set";
17
18
  key: K;
18
19
  value: V;
@@ -22,18 +23,16 @@ export type MapOpPayload<K extends string, V extends JsonValue> = {
22
23
  key: K;
23
24
  };
24
25
 
25
- export type MapK<M extends { [key: string]: JsonValue; }> = keyof M & string;
26
- export type MapV<M extends { [key: string]: JsonValue; }> = M[MapK<M>];
27
- export type MapM<M extends { [key: string]: JsonValue; }> = {
28
- [KK in MapK<M>]: M[KK];
29
- }
26
+ export type MapK<M extends { [key: string]: JsonValue | undefined; }> = keyof M & string;
27
+ export type MapV<M extends { [key: string]: JsonValue | undefined; }> = M[MapK<M>];
28
+
30
29
 
31
30
  /** A collaborative map with precise shape `M` and optional static metadata `Meta` */
32
31
  export class CoMap<
33
- M extends { [key: string]: JsonValue; },
32
+ M extends { [key: string]: JsonValue | undefined; },
34
33
  Meta extends JsonObject | null = null,
35
34
  > implements ReadableCoValue {
36
- id: CoID<CoMap<MapM<M>, Meta>>;
35
+ id: CoID<CoMap<M, Meta>>;
37
36
  type = "comap" as const;
38
37
  core: CoValueCore;
39
38
  /** @internal */
@@ -43,7 +42,7 @@ export class CoMap<
43
42
 
44
43
  /** @internal */
45
44
  constructor(core: CoValueCore) {
46
- this.id = core.id as CoID<CoMap<MapM<M>, Meta>>;
45
+ this.id = core.id as CoID<CoMap<M, Meta>>;
47
46
  this.core = core;
48
47
  this.ops = {};
49
48
 
@@ -64,7 +63,7 @@ export class CoMap<
64
63
 
65
64
  for (const { txID, changes, madeAt } of this.core.getValidSortedTransactions()) {
66
65
  for (const [changeIdx, changeUntyped] of (
67
- changes
66
+ parseJSON(changes)
68
67
  ).entries()) {
69
68
  const change = changeUntyped as MapOpPayload<MapK<M>, MapV<M>>;
70
69
  let entries = this.ops[change.key];
@@ -207,7 +206,7 @@ export class CoMap<
207
206
  }
208
207
 
209
208
  export class WriteableCoMap<
210
- M extends { [key: string]: JsonValue; },
209
+ M extends { [key: string]: JsonValue | undefined; },
211
210
  Meta extends JsonObject | null = null,
212
211
  > extends CoMap<M, Meta> implements WriteableCoValue {
213
212
  /** @internal */