cojson 0.2.0 → 0.2.2
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/dist/coValueCore.d.ts +6 -1
- package/dist/coValueCore.js +86 -42
- package/dist/coValueCore.js.map +1 -1
- package/dist/coValues/coStream.d.ts +1 -1
- package/dist/coValues/coStream.js +18 -9
- package/dist/coValues/coStream.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/streamUtils.js +14 -5
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync.js +38 -15
- package/dist/sync.js.map +1 -1
- package/package.json +2 -2
- package/src/coValue.test.ts +113 -4
- package/src/coValueCore.ts +156 -72
- package/src/coValues/coStream.ts +19 -15
- package/src/index.ts +2 -1
- package/src/streamUtils.ts +26 -6
- package/src/sync.test.ts +3 -2
- package/src/sync.ts +55 -25
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.2.
|
|
8
|
+
"version": "0.2.2",
|
|
9
9
|
"devDependencies": {
|
|
10
10
|
"@types/jest": "^29.5.3",
|
|
11
11
|
"@typescript-eslint/eslint-plugin": "^6.2.1",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"/dist/"
|
|
52
52
|
]
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "ee7e3ee5a7ad3fa2b0e85c791f9ff05ca87669ba"
|
|
55
55
|
}
|
package/src/coValue.test.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
|
+
import { MAX_RECOMMENDED_TX_SIZE, cojsonReady } from "./index.js";
|
|
5
5
|
import { LocalNode } from "./node.js";
|
|
6
6
|
import { randomAnonymousAccountAndSessionID } from "./testUtils.js";
|
|
7
7
|
|
|
@@ -382,14 +382,14 @@ test("Can push into BinaryCoStream", () => {
|
|
|
382
382
|
|
|
383
383
|
content.edit((editable) => {
|
|
384
384
|
editable.startBinaryStream({mimeType: "text/plain", fileName: "test.txt"}, "trusting");
|
|
385
|
-
expect(editable.getBinaryChunks()).toEqual({
|
|
385
|
+
expect(editable.getBinaryChunks(true)).toEqual({
|
|
386
386
|
mimeType: "text/plain",
|
|
387
387
|
fileName: "test.txt",
|
|
388
388
|
chunks: [],
|
|
389
389
|
finished: false,
|
|
390
390
|
});
|
|
391
391
|
editable.pushBinaryStreamChunk(new Uint8Array([1, 2, 3]), "trusting");
|
|
392
|
-
expect(editable.getBinaryChunks()).toEqual({
|
|
392
|
+
expect(editable.getBinaryChunks(true)).toEqual({
|
|
393
393
|
mimeType: "text/plain",
|
|
394
394
|
fileName: "test.txt",
|
|
395
395
|
chunks: [new Uint8Array([1, 2, 3])],
|
|
@@ -397,7 +397,7 @@ test("Can push into BinaryCoStream", () => {
|
|
|
397
397
|
});
|
|
398
398
|
editable.pushBinaryStreamChunk(new Uint8Array([4, 5, 6]), "trusting");
|
|
399
399
|
|
|
400
|
-
expect(editable.getBinaryChunks()).toEqual({
|
|
400
|
+
expect(editable.getBinaryChunks(true)).toEqual({
|
|
401
401
|
mimeType: "text/plain",
|
|
402
402
|
fileName: "test.txt",
|
|
403
403
|
chunks: [new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])],
|
|
@@ -413,3 +413,112 @@ test("Can push into BinaryCoStream", () => {
|
|
|
413
413
|
});
|
|
414
414
|
});
|
|
415
415
|
});
|
|
416
|
+
|
|
417
|
+
test("When adding large transactions (small fraction of MAX_RECOMMENDED_TX_SIZE), we store an inbetween signature every time we reach MAX_RECOMMENDED_TX_SIZE and split up newContentSince accordingly", () => {
|
|
418
|
+
const node = new LocalNode(...randomAnonymousAccountAndSessionID());
|
|
419
|
+
|
|
420
|
+
const coValue = node.createCoValue({
|
|
421
|
+
type: "costream",
|
|
422
|
+
ruleset: { type: "unsafeAllowAll" },
|
|
423
|
+
meta: { type: "binary" },
|
|
424
|
+
...createdNowUnique(),
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
const content = coValue.getCurrentContent();
|
|
428
|
+
|
|
429
|
+
if (content.type !== "costream" || content.meta?.type !== "binary" || !(content instanceof BinaryCoStream)) {
|
|
430
|
+
throw new Error("Expected binary stream");
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
content.edit((editable) => {
|
|
434
|
+
editable.startBinaryStream({mimeType: "text/plain", fileName: "test.txt"}, "trusting");
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
for (let i = 0; i < 10; i++) {
|
|
438
|
+
const chunk = new Uint8Array(MAX_RECOMMENDED_TX_SIZE/3 + 100);
|
|
439
|
+
|
|
440
|
+
content.edit((editable) => {
|
|
441
|
+
editable.pushBinaryStreamChunk(chunk, "trusting");
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
content.edit((editable) => {
|
|
446
|
+
editable.endBinaryStream("trusting");
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
const sessionEntry = coValue._sessions[node.currentSessionID]!;
|
|
450
|
+
expect(sessionEntry.transactions.length).toEqual(12);
|
|
451
|
+
expect(sessionEntry.signatureAfter[0]).not.toBeDefined();
|
|
452
|
+
expect(sessionEntry.signatureAfter[1]).not.toBeDefined();
|
|
453
|
+
expect(sessionEntry.signatureAfter[2]).not.toBeDefined();
|
|
454
|
+
expect(sessionEntry.signatureAfter[3]).toBeDefined();
|
|
455
|
+
expect(sessionEntry.signatureAfter[4]).not.toBeDefined();
|
|
456
|
+
expect(sessionEntry.signatureAfter[5]).not.toBeDefined();
|
|
457
|
+
expect(sessionEntry.signatureAfter[6]).toBeDefined();
|
|
458
|
+
expect(sessionEntry.signatureAfter[7]).not.toBeDefined();
|
|
459
|
+
expect(sessionEntry.signatureAfter[8]).not.toBeDefined();
|
|
460
|
+
expect(sessionEntry.signatureAfter[9]).toBeDefined();
|
|
461
|
+
expect(sessionEntry.signatureAfter[10]).not.toBeDefined();
|
|
462
|
+
expect(sessionEntry.signatureAfter[11]).not.toBeDefined();
|
|
463
|
+
|
|
464
|
+
const newContent = coValue.newContentSince({id: coValue.id, header: false, sessions: {}})!;
|
|
465
|
+
|
|
466
|
+
expect(newContent.length).toEqual(5)
|
|
467
|
+
expect(newContent[0]!.header).toBeDefined();
|
|
468
|
+
expect(newContent[1]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[3]);
|
|
469
|
+
expect(newContent[2]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[6]);
|
|
470
|
+
expect(newContent[3]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[9]);
|
|
471
|
+
expect(newContent[4]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.lastSignature);
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
test("When adding large transactions (bigger than MAX_RECOMMENDED_TX_SIZE), we store an inbetween signature after every large transaction and split up newContentSince accordingly", () => {
|
|
475
|
+
const node = new LocalNode(...randomAnonymousAccountAndSessionID());
|
|
476
|
+
|
|
477
|
+
const coValue = node.createCoValue({
|
|
478
|
+
type: "costream",
|
|
479
|
+
ruleset: { type: "unsafeAllowAll" },
|
|
480
|
+
meta: { type: "binary" },
|
|
481
|
+
...createdNowUnique(),
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
const content = coValue.getCurrentContent();
|
|
485
|
+
|
|
486
|
+
if (content.type !== "costream" || content.meta?.type !== "binary" || !(content instanceof BinaryCoStream)) {
|
|
487
|
+
throw new Error("Expected binary stream");
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
content.edit((editable) => {
|
|
491
|
+
editable.startBinaryStream({mimeType: "text/plain", fileName: "test.txt"}, "trusting");
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
const chunk = new Uint8Array(MAX_RECOMMENDED_TX_SIZE + 100);
|
|
495
|
+
|
|
496
|
+
for (let i = 0; i < 3; i++) {
|
|
497
|
+
content.edit((editable) => {
|
|
498
|
+
editable.pushBinaryStreamChunk(chunk, "trusting");
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
content.edit((editable) => {
|
|
503
|
+
editable.endBinaryStream("trusting");
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
const sessionEntry = coValue._sessions[node.currentSessionID]!;
|
|
507
|
+
expect(sessionEntry.transactions.length).toEqual(5);
|
|
508
|
+
expect(sessionEntry.signatureAfter[0]).not.toBeDefined();
|
|
509
|
+
expect(sessionEntry.signatureAfter[1]).toBeDefined();
|
|
510
|
+
expect(sessionEntry.signatureAfter[2]).toBeDefined();
|
|
511
|
+
expect(sessionEntry.signatureAfter[3]).toBeDefined();
|
|
512
|
+
expect(sessionEntry.signatureAfter[4]).not.toBeDefined();
|
|
513
|
+
|
|
514
|
+
const newContent = coValue.newContentSince({id: coValue.id, header: false, sessions: {}})!;
|
|
515
|
+
|
|
516
|
+
expect(newContent.length).toEqual(5)
|
|
517
|
+
expect(newContent[0]!.header).toBeDefined();
|
|
518
|
+
expect(newContent[1]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[1]);
|
|
519
|
+
expect(newContent[2]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[2]);
|
|
520
|
+
expect(newContent[3]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.signatureAfter[3]);
|
|
521
|
+
expect(newContent[4]!.new[node.currentSessionID]!.lastSignature).toEqual(sessionEntry.lastSignature);
|
|
522
|
+
});
|
|
523
|
+
|
|
524
|
+
|
package/src/coValueCore.ts
CHANGED
|
@@ -14,7 +14,6 @@ import {
|
|
|
14
14
|
sign,
|
|
15
15
|
verify,
|
|
16
16
|
encryptForTransaction,
|
|
17
|
-
decryptForTransaction,
|
|
18
17
|
KeyID,
|
|
19
18
|
decryptKeySecret,
|
|
20
19
|
getAgentSignerID,
|
|
@@ -33,11 +32,10 @@ import { LocalNode } from "./node.js";
|
|
|
33
32
|
import { CoValueKnownState, NewContentMessage } from "./sync.js";
|
|
34
33
|
import { AgentID, RawCoID, SessionID, TransactionID } from "./ids.js";
|
|
35
34
|
import { CoList } from "./coValues/coList.js";
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
import { Stringified, parseJSON, stableStringify } from "./jsonStringify.js";
|
|
35
|
+
import { AccountID, GeneralizedControlledAccount } from "./account.js";
|
|
36
|
+
import { Stringified, stableStringify } from "./jsonStringify.js";
|
|
37
|
+
|
|
38
|
+
export const MAX_RECOMMENDED_TX_SIZE = 100 * 1024;
|
|
41
39
|
|
|
42
40
|
export type CoValueHeader = {
|
|
43
41
|
type: CoValueImpl["type"];
|
|
@@ -66,6 +64,7 @@ type SessionLog = {
|
|
|
66
64
|
transactions: Transaction[];
|
|
67
65
|
lastHash?: Hash;
|
|
68
66
|
streamingHash: StreamingHash;
|
|
67
|
+
signatureAfter: { [txIdx: number]: Signature | undefined };
|
|
69
68
|
lastSignature: Signature;
|
|
70
69
|
};
|
|
71
70
|
|
|
@@ -79,7 +78,6 @@ export type PrivateTransaction = {
|
|
|
79
78
|
>;
|
|
80
79
|
};
|
|
81
80
|
|
|
82
|
-
|
|
83
81
|
export type TrustingTransaction = {
|
|
84
82
|
privacy: "trusting";
|
|
85
83
|
madeAt: number;
|
|
@@ -103,7 +101,11 @@ export class CoValueCore {
|
|
|
103
101
|
_sessions: { [key: SessionID]: SessionLog };
|
|
104
102
|
_cachedContent?: CoValueImpl;
|
|
105
103
|
listeners: Set<(content?: CoValueImpl) => void> = new Set();
|
|
106
|
-
_decryptionCache: {
|
|
104
|
+
_decryptionCache: {
|
|
105
|
+
[key: Encrypted<JsonValue[], JsonValue>]:
|
|
106
|
+
| Stringified<JsonValue[]>
|
|
107
|
+
| undefined;
|
|
108
|
+
} = {};
|
|
107
109
|
|
|
108
110
|
constructor(
|
|
109
111
|
header: CoValueHeader,
|
|
@@ -212,7 +214,8 @@ export class CoValueCore {
|
|
|
212
214
|
// const beforeVerify = performance.now();
|
|
213
215
|
if (!verify(newSignature, expectedNewHash, signerID)) {
|
|
214
216
|
console.warn(
|
|
215
|
-
"Invalid signature",
|
|
217
|
+
"Invalid signature in",
|
|
218
|
+
this.id,
|
|
216
219
|
newSignature,
|
|
217
220
|
expectedNewHash,
|
|
218
221
|
signerID
|
|
@@ -225,25 +228,13 @@ export class CoValueCore {
|
|
|
225
228
|
// afterVerify - beforeVerify
|
|
226
229
|
// );
|
|
227
230
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
}
|
|
231
|
+
this.doAddTransactions(
|
|
232
|
+
sessionID,
|
|
233
|
+
newTransactions,
|
|
234
|
+
newSignature,
|
|
235
|
+
expectedNewHash,
|
|
236
|
+
newStreamingHash
|
|
237
|
+
);
|
|
247
238
|
|
|
248
239
|
return true;
|
|
249
240
|
}
|
|
@@ -272,10 +263,8 @@ export class CoValueCore {
|
|
|
272
263
|
const nTxBefore = this.sessions[sessionID]?.transactions.length ?? 0;
|
|
273
264
|
|
|
274
265
|
// const beforeHash = performance.now();
|
|
275
|
-
const { expectedNewHash, newStreamingHash } =
|
|
276
|
-
sessionID,
|
|
277
|
-
newTransactions
|
|
278
|
-
);
|
|
266
|
+
const { expectedNewHash, newStreamingHash } =
|
|
267
|
+
await this.expectedNewHashAfterAsync(sessionID, newTransactions);
|
|
279
268
|
// const afterHash = performance.now();
|
|
280
269
|
// console.log(
|
|
281
270
|
// "Hashing took",
|
|
@@ -286,7 +275,7 @@ export class CoValueCore {
|
|
|
286
275
|
|
|
287
276
|
if (nTxAfter !== nTxBefore) {
|
|
288
277
|
const newTransactionLengthBefore = newTransactions.length;
|
|
289
|
-
newTransactions = newTransactions.slice(
|
|
278
|
+
newTransactions = newTransactions.slice(nTxAfter - nTxBefore);
|
|
290
279
|
console.warn("Transactions changed while async hashing", {
|
|
291
280
|
nTxBefore,
|
|
292
281
|
nTxAfter,
|
|
@@ -306,7 +295,8 @@ export class CoValueCore {
|
|
|
306
295
|
// const beforeVerify = performance.now();
|
|
307
296
|
if (!verify(newSignature, expectedNewHash, signerID)) {
|
|
308
297
|
console.warn(
|
|
309
|
-
"Invalid signature",
|
|
298
|
+
"Invalid signature in",
|
|
299
|
+
this.id,
|
|
310
300
|
newSignature,
|
|
311
301
|
expectedNewHash,
|
|
312
302
|
signerID
|
|
@@ -319,15 +309,61 @@ export class CoValueCore {
|
|
|
319
309
|
// afterVerify - beforeVerify
|
|
320
310
|
// );
|
|
321
311
|
|
|
322
|
-
|
|
312
|
+
this.doAddTransactions(
|
|
313
|
+
sessionID,
|
|
314
|
+
newTransactions,
|
|
315
|
+
newSignature,
|
|
316
|
+
expectedNewHash,
|
|
317
|
+
newStreamingHash
|
|
318
|
+
);
|
|
323
319
|
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
private doAddTransactions(
|
|
324
|
+
sessionID: SessionID,
|
|
325
|
+
newTransactions: Transaction[],
|
|
326
|
+
newSignature: Signature,
|
|
327
|
+
expectedNewHash: Hash,
|
|
328
|
+
newStreamingHash: StreamingHash
|
|
329
|
+
) {
|
|
330
|
+
const transactions = this.sessions[sessionID]?.transactions ?? [];
|
|
324
331
|
transactions.push(...newTransactions);
|
|
325
332
|
|
|
333
|
+
const signatureAfter = this.sessions[sessionID]?.signatureAfter ?? {};
|
|
334
|
+
|
|
335
|
+
const lastInbetweenSignatureIdx = Object.keys(signatureAfter).reduce(
|
|
336
|
+
(max, idx) => (parseInt(idx) > max ? parseInt(idx) : max),
|
|
337
|
+
-1
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
const sizeOfTxsSinceLastInbetweenSignature = transactions
|
|
341
|
+
.slice(lastInbetweenSignatureIdx + 1)
|
|
342
|
+
.reduce(
|
|
343
|
+
(sum, tx) =>
|
|
344
|
+
sum +
|
|
345
|
+
(tx.privacy === "private"
|
|
346
|
+
? tx.encryptedChanges.length
|
|
347
|
+
: tx.changes.length),
|
|
348
|
+
0
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
if (sizeOfTxsSinceLastInbetweenSignature > 100 * 1024) {
|
|
352
|
+
// console.log(
|
|
353
|
+
// "Saving inbetween signature for tx ",
|
|
354
|
+
// sessionID,
|
|
355
|
+
// transactions.length - 1,
|
|
356
|
+
// sizeOfTxsSinceLastInbetweenSignature
|
|
357
|
+
// );
|
|
358
|
+
signatureAfter[transactions.length - 1] = newSignature;
|
|
359
|
+
}
|
|
360
|
+
|
|
326
361
|
this._sessions[sessionID] = {
|
|
327
362
|
transactions,
|
|
328
363
|
lastHash: expectedNewHash,
|
|
329
364
|
streamingHash: newStreamingHash,
|
|
330
365
|
lastSignature: newSignature,
|
|
366
|
+
signatureAfter: signatureAfter,
|
|
331
367
|
};
|
|
332
368
|
|
|
333
369
|
this._cachedContent = undefined;
|
|
@@ -338,8 +374,6 @@ export class CoValueCore {
|
|
|
338
374
|
listener(content);
|
|
339
375
|
}
|
|
340
376
|
}
|
|
341
|
-
|
|
342
|
-
return true;
|
|
343
377
|
}
|
|
344
378
|
|
|
345
379
|
subscribe(listener: (content?: CoValueImpl) => void): () => void {
|
|
@@ -379,10 +413,10 @@ export class CoValueCore {
|
|
|
379
413
|
new StreamingHash();
|
|
380
414
|
let before = performance.now();
|
|
381
415
|
for (const transaction of newTransactions) {
|
|
382
|
-
streamingHash.update(transaction)
|
|
416
|
+
streamingHash.update(transaction);
|
|
383
417
|
const after = performance.now();
|
|
384
418
|
if (after - before > 1) {
|
|
385
|
-
console.log("Hashing blocked for", after - before);
|
|
419
|
+
// console.log("Hashing blocked for", after - before);
|
|
386
420
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
387
421
|
before = performance.now();
|
|
388
422
|
}
|
|
@@ -500,7 +534,8 @@ export class CoValueCore {
|
|
|
500
534
|
if (!readKey) {
|
|
501
535
|
return undefined;
|
|
502
536
|
} else {
|
|
503
|
-
let decrytedChanges =
|
|
537
|
+
let decrytedChanges =
|
|
538
|
+
this._decryptionCache[tx.encryptedChanges];
|
|
504
539
|
|
|
505
540
|
if (!decrytedChanges) {
|
|
506
541
|
decrytedChanges = decryptRawForTransaction(
|
|
@@ -511,7 +546,8 @@ export class CoValueCore {
|
|
|
511
546
|
tx: txID,
|
|
512
547
|
}
|
|
513
548
|
);
|
|
514
|
-
this._decryptionCache[tx.encryptedChanges] =
|
|
549
|
+
this._decryptionCache[tx.encryptedChanges] =
|
|
550
|
+
decrytedChanges;
|
|
515
551
|
}
|
|
516
552
|
|
|
517
553
|
if (!decrytedChanges) {
|
|
@@ -683,47 +719,95 @@ export class CoValueCore {
|
|
|
683
719
|
|
|
684
720
|
newContentSince(
|
|
685
721
|
knownState: CoValueKnownState | undefined
|
|
686
|
-
): NewContentMessage | undefined {
|
|
687
|
-
|
|
722
|
+
): NewContentMessage[] | undefined {
|
|
723
|
+
let currentPiece: NewContentMessage = {
|
|
688
724
|
action: "content",
|
|
689
725
|
id: this.id,
|
|
690
726
|
header: knownState?.header ? undefined : this.header,
|
|
691
|
-
new:
|
|
692
|
-
|
|
693
|
-
.map(([sessionID, log]) => {
|
|
694
|
-
const newTransactions = log.transactions.slice(
|
|
695
|
-
knownState?.sessions[sessionID as SessionID] || 0
|
|
696
|
-
);
|
|
727
|
+
new: {},
|
|
728
|
+
};
|
|
697
729
|
|
|
698
|
-
|
|
699
|
-
newTransactions.length === 0 ||
|
|
700
|
-
!log.lastHash ||
|
|
701
|
-
!log.lastSignature
|
|
702
|
-
) {
|
|
703
|
-
return undefined;
|
|
704
|
-
}
|
|
730
|
+
const pieces = [currentPiece];
|
|
705
731
|
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
{
|
|
709
|
-
after:
|
|
710
|
-
knownState?.sessions[
|
|
711
|
-
sessionID as SessionID
|
|
712
|
-
] || 0,
|
|
713
|
-
newTransactions,
|
|
714
|
-
lastSignature: log.lastSignature,
|
|
715
|
-
},
|
|
716
|
-
];
|
|
717
|
-
})
|
|
718
|
-
.filter((x): x is Exclude<typeof x, undefined> => !!x)
|
|
719
|
-
),
|
|
732
|
+
const sentState: CoValueKnownState["sessions"] = {
|
|
733
|
+
...knownState?.sessions,
|
|
720
734
|
};
|
|
721
735
|
|
|
722
|
-
|
|
736
|
+
let newTxsWereAdded = true;
|
|
737
|
+
let pieceSize = 0;
|
|
738
|
+
while (newTxsWereAdded) {
|
|
739
|
+
newTxsWereAdded = false;
|
|
740
|
+
|
|
741
|
+
for (const [sessionID, log] of Object.entries(this.sessions) as [
|
|
742
|
+
SessionID,
|
|
743
|
+
SessionLog
|
|
744
|
+
][]) {
|
|
745
|
+
const nextKnownSignatureIdx = Object.keys(log.signatureAfter)
|
|
746
|
+
.map(Number)
|
|
747
|
+
.sort((a, b) => a - b)
|
|
748
|
+
.find((idx) => idx >= (sentState[sessionID] ?? -1));
|
|
749
|
+
|
|
750
|
+
const txsToAdd = log.transactions.slice(
|
|
751
|
+
sentState[sessionID] ?? 0,
|
|
752
|
+
nextKnownSignatureIdx === undefined
|
|
753
|
+
? undefined
|
|
754
|
+
: nextKnownSignatureIdx + 1
|
|
755
|
+
);
|
|
756
|
+
|
|
757
|
+
if (txsToAdd.length === 0) continue;
|
|
758
|
+
|
|
759
|
+
newTxsWereAdded = true;
|
|
760
|
+
|
|
761
|
+
const oldPieceSize = pieceSize;
|
|
762
|
+
pieceSize += txsToAdd.reduce(
|
|
763
|
+
(sum, tx) =>
|
|
764
|
+
sum +
|
|
765
|
+
(tx.privacy === "private"
|
|
766
|
+
? tx.encryptedChanges.length
|
|
767
|
+
: tx.changes.length),
|
|
768
|
+
0
|
|
769
|
+
);
|
|
770
|
+
|
|
771
|
+
if (pieceSize >= MAX_RECOMMENDED_TX_SIZE) {
|
|
772
|
+
currentPiece = {
|
|
773
|
+
action: "content",
|
|
774
|
+
id: this.id,
|
|
775
|
+
header: undefined,
|
|
776
|
+
new: {},
|
|
777
|
+
};
|
|
778
|
+
pieces.push(currentPiece);
|
|
779
|
+
pieceSize = pieceSize - oldPieceSize;
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
let sessionEntry = currentPiece.new[sessionID];
|
|
783
|
+
if (!sessionEntry) {
|
|
784
|
+
sessionEntry = {
|
|
785
|
+
after: sentState[sessionID] ?? 0,
|
|
786
|
+
newTransactions: [],
|
|
787
|
+
lastSignature: "WILL_BE_REPLACED" as Signature
|
|
788
|
+
};
|
|
789
|
+
currentPiece.new[sessionID] = sessionEntry;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
sessionEntry.newTransactions.push(...txsToAdd);
|
|
793
|
+
sessionEntry.lastSignature = nextKnownSignatureIdx === undefined
|
|
794
|
+
? log.lastSignature!
|
|
795
|
+
: log.signatureAfter[nextKnownSignatureIdx]!
|
|
796
|
+
|
|
797
|
+
sentState[sessionID] =
|
|
798
|
+
(sentState[sessionID] || 0) + txsToAdd.length;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
const piecesWithContent = pieces.filter(
|
|
803
|
+
(piece) => Object.keys(piece.new).length > 0 || piece.header
|
|
804
|
+
);
|
|
805
|
+
|
|
806
|
+
if (piecesWithContent.length === 0) {
|
|
723
807
|
return undefined;
|
|
724
808
|
}
|
|
725
809
|
|
|
726
|
-
return
|
|
810
|
+
return piecesWithContent;
|
|
727
811
|
}
|
|
728
812
|
|
|
729
813
|
getDependedOnCoValues(): RawCoID[] {
|
package/src/coValues/coStream.ts
CHANGED
|
@@ -169,10 +169,10 @@ export class BinaryCoStream<
|
|
|
169
169
|
{
|
|
170
170
|
id!: CoID<BinaryCoStream<Meta>>;
|
|
171
171
|
|
|
172
|
-
getBinaryChunks():
|
|
172
|
+
getBinaryChunks(allowUnfinished?: boolean):
|
|
173
173
|
| (BinaryChunkInfo & { chunks: Uint8Array[]; finished: boolean })
|
|
174
174
|
| undefined {
|
|
175
|
-
const before = performance.now();
|
|
175
|
+
// const before = performance.now();
|
|
176
176
|
const items = this.getSingleStream();
|
|
177
177
|
|
|
178
178
|
if (!items) return;
|
|
@@ -184,10 +184,14 @@ export class BinaryCoStream<
|
|
|
184
184
|
return;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
+
const end = items[items.length - 1];
|
|
188
|
+
|
|
189
|
+
if (end?.type !== "end" && !allowUnfinished) return;
|
|
190
|
+
|
|
187
191
|
const chunks: Uint8Array[] = [];
|
|
188
192
|
|
|
189
193
|
let finished = false;
|
|
190
|
-
let totalLength = 0;
|
|
194
|
+
// let totalLength = 0;
|
|
191
195
|
|
|
192
196
|
for (const item of items.slice(1)) {
|
|
193
197
|
if (item.type === "end") {
|
|
@@ -203,15 +207,15 @@ export class BinaryCoStream<
|
|
|
203
207
|
const chunk = base64URLtoBytes(
|
|
204
208
|
item.chunk.slice(binary_U_prefixLength)
|
|
205
209
|
);
|
|
206
|
-
totalLength += chunk.length;
|
|
210
|
+
// totalLength += chunk.length;
|
|
207
211
|
chunks.push(chunk);
|
|
208
212
|
}
|
|
209
213
|
|
|
210
|
-
const after = performance.now();
|
|
211
|
-
console.log(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
);
|
|
214
|
+
// const after = performance.now();
|
|
215
|
+
// console.log(
|
|
216
|
+
// "getBinaryChunks bandwidth in MB/s",
|
|
217
|
+
// (1000 * totalLength) / (after - before) / (1024 * 1024)
|
|
218
|
+
// );
|
|
215
219
|
|
|
216
220
|
return {
|
|
217
221
|
mimeType: start.mimeType,
|
|
@@ -286,7 +290,7 @@ export class WriteableBinaryCoStream<
|
|
|
286
290
|
chunk: Uint8Array,
|
|
287
291
|
privacy: "private" | "trusting" = "private"
|
|
288
292
|
) {
|
|
289
|
-
const before = performance.now();
|
|
293
|
+
// const before = performance.now();
|
|
290
294
|
this.push(
|
|
291
295
|
{
|
|
292
296
|
type: "chunk",
|
|
@@ -294,11 +298,11 @@ export class WriteableBinaryCoStream<
|
|
|
294
298
|
} satisfies BinaryStreamChunk,
|
|
295
299
|
privacy
|
|
296
300
|
);
|
|
297
|
-
const after = performance.now();
|
|
298
|
-
console.log(
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
);
|
|
301
|
+
// const after = performance.now();
|
|
302
|
+
// console.log(
|
|
303
|
+
// "pushBinaryStreamChunk bandwidth in MB/s",
|
|
304
|
+
// (1000 * chunk.length) / (after - before) / (1024 * 1024)
|
|
305
|
+
// );
|
|
302
306
|
}
|
|
303
307
|
|
|
304
308
|
endBinaryStream(privacy: "private" | "trusting" = "private") {
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CoValueCore, newRandomSessionID } from "./coValueCore.js";
|
|
1
|
+
import { CoValueCore, newRandomSessionID, MAX_RECOMMENDED_TX_SIZE } from "./coValueCore.js";
|
|
2
2
|
import { LocalNode } from "./node.js";
|
|
3
3
|
import type { CoValue, ReadableCoValue } from "./coValue.js";
|
|
4
4
|
import { CoMap, WriteableCoMap } from "./coValues/coMap.js";
|
|
@@ -74,6 +74,7 @@ export {
|
|
|
74
74
|
AnonymousControlledAccount,
|
|
75
75
|
ControlledAccount,
|
|
76
76
|
cryptoReady as cojsonReady,
|
|
77
|
+
MAX_RECOMMENDED_TX_SIZE
|
|
77
78
|
};
|
|
78
79
|
|
|
79
80
|
export type {
|