cojson 0.19.19 → 0.19.20
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 +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/exports.d.ts +7 -1
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +4 -1
- package/dist/exports.js.map +1 -1
- package/dist/queue/IncomingMessagesQueue.d.ts +6 -7
- package/dist/queue/IncomingMessagesQueue.d.ts.map +1 -1
- package/dist/queue/IncomingMessagesQueue.js +7 -30
- package/dist/queue/IncomingMessagesQueue.js.map +1 -1
- package/dist/queue/LinkedList.d.ts +1 -1
- package/dist/queue/LinkedList.d.ts.map +1 -1
- package/dist/queue/LinkedList.js.map +1 -1
- package/dist/queue/StorageStreamingQueue.d.ts +43 -0
- package/dist/queue/StorageStreamingQueue.d.ts.map +1 -0
- package/dist/queue/StorageStreamingQueue.js +70 -0
- package/dist/queue/StorageStreamingQueue.js.map +1 -0
- package/dist/storage/storageSync.d.ts +8 -2
- package/dist/storage/storageSync.d.ts.map +1 -1
- package/dist/storage/storageSync.js +56 -44
- package/dist/storage/storageSync.js.map +1 -1
- package/dist/storage/types.d.ts +2 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/sync.d.ts +17 -0
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +74 -5
- package/dist/sync.js.map +1 -1
- package/dist/tests/IncomingMessagesQueue.test.js +4 -150
- package/dist/tests/IncomingMessagesQueue.test.js.map +1 -1
- package/dist/tests/StorageStreamingQueue.test.d.ts +2 -0
- package/dist/tests/StorageStreamingQueue.test.d.ts.map +1 -0
- package/dist/tests/StorageStreamingQueue.test.js +213 -0
- package/dist/tests/StorageStreamingQueue.test.js.map +1 -0
- package/dist/tests/SyncManager.processQueues.test.d.ts +2 -0
- package/dist/tests/SyncManager.processQueues.test.d.ts.map +1 -0
- package/dist/tests/SyncManager.processQueues.test.js +208 -0
- package/dist/tests/SyncManager.processQueues.test.js.map +1 -0
- package/dist/tests/setup.d.ts +2 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +4 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/sync.garbageCollection.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +19 -19
- package/dist/tests/sync.storage.test.js +176 -20
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.test.js +1 -1
- package/dist/tests/sync.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +2 -2
- package/dist/tests/testUtils.js +2 -2
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +4 -4
- package/src/config.ts +13 -0
- package/src/exports.ts +6 -0
- package/src/queue/IncomingMessagesQueue.ts +7 -39
- package/src/queue/LinkedList.ts +1 -1
- package/src/queue/StorageStreamingQueue.ts +96 -0
- package/src/storage/storageSync.ts +99 -55
- package/src/storage/types.ts +3 -0
- package/src/sync.ts +84 -5
- package/src/tests/IncomingMessagesQueue.test.ts +4 -206
- package/src/tests/StorageStreamingQueue.test.ts +276 -0
- package/src/tests/SyncManager.processQueues.test.ts +287 -0
- package/src/tests/setup.ts +4 -0
- package/src/tests/sync.garbageCollection.test.ts +1 -3
- package/src/tests/sync.mesh.test.ts +19 -19
- package/src/tests/sync.storage.test.ts +224 -32
- package/src/tests/sync.test.ts +1 -9
- package/src/tests/testUtils.ts +2 -2
- package/vitest.config.ts +1 -0
package/.turbo/turbo-build.log
CHANGED
package/dist/config.d.ts
CHANGED
|
@@ -33,4 +33,10 @@ export declare const GARBAGE_COLLECTOR_CONFIG: {
|
|
|
33
33
|
};
|
|
34
34
|
export declare function setGarbageCollectorMaxAge(maxAge: number): void;
|
|
35
35
|
export declare function setGarbageCollectorInterval(interval: number): void;
|
|
36
|
+
export declare const WEBSOCKET_CONFIG: {
|
|
37
|
+
MAX_OUTGOING_MESSAGES_CHUNK_BYTES: number;
|
|
38
|
+
OUTGOING_MESSAGES_CHUNK_DELAY: number;
|
|
39
|
+
};
|
|
40
|
+
export declare function setMaxOutgoingMessagesChunkBytes(bytes: number): void;
|
|
41
|
+
export declare function setOutgoingMessagesChunkDelay(delay: number): void;
|
|
36
42
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;IAE7B;;;OAGG;;CAEJ,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,QAEnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,QAE7C;AAED,eAAO,MAAM,uBAAuB;;;;CAInC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,QAE7D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,QAEvD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,QAExD;AAED,eAAO,MAAM,qBAAqB;;CAEjC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,QAE3D;AAED,eAAO,MAAM,wBAAwB;;;CAGpC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,QAEvD;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,QAE3D"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;IAE7B;;;OAGG;;CAEJ,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,QAEnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,QAE7C;AAED,eAAO,MAAM,uBAAuB;;;;CAInC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,QAE7D;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,QAEvD;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,QAExD;AAED,eAAO,MAAM,qBAAqB;;CAEjC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,QAE3D;AAED,eAAO,MAAM,wBAAwB;;;CAGpC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,QAEvD;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,QAE3D;AAED,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,QAE7D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,QAE1D"}
|
package/dist/config.js
CHANGED
|
@@ -49,4 +49,14 @@ export function setGarbageCollectorMaxAge(maxAge) {
|
|
|
49
49
|
export function setGarbageCollectorInterval(interval) {
|
|
50
50
|
GARBAGE_COLLECTOR_CONFIG.INTERVAL = interval;
|
|
51
51
|
}
|
|
52
|
+
export const WEBSOCKET_CONFIG = {
|
|
53
|
+
MAX_OUTGOING_MESSAGES_CHUNK_BYTES: 25000,
|
|
54
|
+
OUTGOING_MESSAGES_CHUNK_DELAY: 5,
|
|
55
|
+
};
|
|
56
|
+
export function setMaxOutgoingMessagesChunkBytes(bytes) {
|
|
57
|
+
WEBSOCKET_CONFIG.MAX_OUTGOING_MESSAGES_CHUNK_BYTES = bytes;
|
|
58
|
+
}
|
|
59
|
+
export function setOutgoingMessagesChunkDelay(delay) {
|
|
60
|
+
WEBSOCKET_CONFIG.OUTGOING_MESSAGES_CHUNK_DELAY = delay;
|
|
61
|
+
}
|
|
52
62
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,uBAAuB,EAAE,GAAG,GAAG,IAAI;IACnC;;;OAGG;IACH,iBAAiB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;CACnC,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,kBAAkB,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,kBAAkB,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,KAAM;IACf,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,UAAkB;IAC5D,uBAAuB,CAAC,WAAW,GAAG,UAAU,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,uBAAuB,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,uBAAuB,CAAC,WAAW,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,6BAA6B,EAAE,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,qBAAqB,CAAC,6BAA6B,GAAG,MAAM,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,aAAa;IACtC,QAAQ,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY;CACtC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,wBAAwB,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,wBAAwB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,uBAAuB,EAAE,GAAG,GAAG,IAAI;IACnC;;;OAGG;IACH,iBAAiB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;CACnC,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,kBAAkB,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,kBAAkB,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,KAAM;IACf,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,UAAkB;IAC5D,uBAAuB,CAAC,WAAW,GAAG,UAAU,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,uBAAuB,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,uBAAuB,CAAC,WAAW,GAAG,KAAK,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,6BAA6B,EAAE,EAAE;CAClC,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,qBAAqB,CAAC,6BAA6B,GAAG,MAAM,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,aAAa;IACtC,QAAQ,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY;CACtC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,wBAAwB,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAAgB;IAC1D,wBAAwB,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iCAAiC,EAAE,KAAM;IACzC,6BAA6B,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,UAAU,gCAAgC,CAAC,KAAa;IAC5D,gBAAgB,CAAC,iCAAiC,GAAG,KAAK,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,gBAAgB,CAAC,6BAA6B,GAAG,KAAK,CAAC;AACzD,CAAC"}
|
package/dist/exports.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ import { setSyncStateTrackingBatchDelay } from "./UnsyncedCoValuesTracker.js";
|
|
|
33
33
|
import { emptyKnownState } from "./knownState.js";
|
|
34
34
|
import { getContentMessageSize, getTransactionSize } from "./coValueContentMessage.js";
|
|
35
35
|
import { getDependedOnCoValuesFromRawData } from "./coValueCore/utils.js";
|
|
36
|
-
import { setCoValueLoadingMaxRetries, setCoValueLoadingRetryDelay, setCoValueLoadingTimeout, setIncomingMessagesTimeBudget, setMaxRecommendedTxSize } from "./config.js";
|
|
36
|
+
import { setCoValueLoadingMaxRetries, setCoValueLoadingRetryDelay, setCoValueLoadingTimeout, setIncomingMessagesTimeBudget, setMaxOutgoingMessagesChunkBytes, setOutgoingMessagesChunkDelay, setMaxRecommendedTxSize } from "./config.js";
|
|
37
37
|
import { LogLevel, logger } from "./logger.js";
|
|
38
38
|
import { getPriorityFromHeader } from "./priority.js";
|
|
39
39
|
import { getDependedOnCoValues } from "./storage/syncUtils.js";
|
|
@@ -90,6 +90,12 @@ export declare const cojsonInternals: {
|
|
|
90
90
|
};
|
|
91
91
|
setMaxRecommendedTxSize: typeof setMaxRecommendedTxSize;
|
|
92
92
|
canBeBranched: typeof canBeBranched;
|
|
93
|
+
WEBSOCKET_CONFIG: {
|
|
94
|
+
MAX_OUTGOING_MESSAGES_CHUNK_BYTES: number;
|
|
95
|
+
OUTGOING_MESSAGES_CHUNK_DELAY: number;
|
|
96
|
+
};
|
|
97
|
+
setMaxOutgoingMessagesChunkBytes: typeof setMaxOutgoingMessagesChunkBytes;
|
|
98
|
+
setOutgoingMessagesChunkDelay: typeof setOutgoingMessagesChunkDelay;
|
|
93
99
|
};
|
|
94
100
|
export { LocalNode, RawGroup, Role, EVERYONE, Everyone, RawCoMap, RawCoList, RawCoStream, RawBinaryCoStream, RawCoValue, RawCoID, CoID, AnyRawCoValue, RawAccount, RawAccountID, ControlledAccount, AccountMeta, RawAccountMigration, RawProfile as Profile, SessionID, Media, CoValueCore, ControlledAgent, JsonObject, JsonValue, Peer, BinaryStreamInfo, BinaryCoStreamMeta, AgentID, AgentSecret, InviteSecret, CryptoProvider, SyncMessage, isRawCoID, emptyKnownState, RawCoPlainText, stringifyOpID, logger, LogLevel, base64URLtoBytes, bytesToBase64url, hwrServerPeerSelector, isAccountRole, };
|
|
95
101
|
export type { Value, DisconnectedError, CoValueUniqueness, Stringified, CoStreamItem, BinaryStreamItem, BinaryStreamStart, OpID, AccountRole, AvailableCoValueCore, PeerState, SyncWhen, CoValueHeader, };
|
package/dist/exports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,aAAa,EACb,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,kCAAkC,EACnC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,cAAc,EAGf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAA4B,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"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"}
|
package/dist/exports.js
CHANGED
|
@@ -21,7 +21,7 @@ import { setSyncStateTrackingBatchDelay } from "./UnsyncedCoValuesTracker.js";
|
|
|
21
21
|
import { emptyKnownState } from "./knownState.js";
|
|
22
22
|
import { getContentMessageSize, getTransactionSize, } from "./coValueContentMessage.js";
|
|
23
23
|
import { getDependedOnCoValuesFromRawData } from "./coValueCore/utils.js";
|
|
24
|
-
import { CO_VALUE_LOADING_CONFIG, TRANSACTION_CONFIG, setCoValueLoadingMaxRetries, setCoValueLoadingRetryDelay, setCoValueLoadingTimeout, setIncomingMessagesTimeBudget, setMaxRecommendedTxSize, } from "./config.js";
|
|
24
|
+
import { CO_VALUE_LOADING_CONFIG, TRANSACTION_CONFIG, WEBSOCKET_CONFIG, setCoValueLoadingMaxRetries, setCoValueLoadingRetryDelay, setCoValueLoadingTimeout, setIncomingMessagesTimeBudget, setMaxOutgoingMessagesChunkBytes, setOutgoingMessagesChunkDelay, setMaxRecommendedTxSize, } from "./config.js";
|
|
25
25
|
import { LogLevel, logger } from "./logger.js";
|
|
26
26
|
import { CO_VALUE_PRIORITY, getPriorityFromHeader } from "./priority.js";
|
|
27
27
|
import { getDependedOnCoValues } from "./storage/syncUtils.js";
|
|
@@ -65,6 +65,9 @@ export const cojsonInternals = {
|
|
|
65
65
|
TRANSACTION_CONFIG,
|
|
66
66
|
setMaxRecommendedTxSize,
|
|
67
67
|
canBeBranched,
|
|
68
|
+
WEBSOCKET_CONFIG,
|
|
69
|
+
setMaxOutgoingMessagesChunkBytes,
|
|
70
|
+
setOutgoingMessagesChunkDelay,
|
|
68
71
|
};
|
|
69
72
|
export { LocalNode, RawGroup, EVERYONE, RawCoMap, RawCoList, RawCoStream, RawBinaryCoStream, RawAccount, ControlledAccount, RawProfile as Profile, CoValueCore, ControlledAgent, CryptoProvider, isRawCoID, emptyKnownState, RawCoPlainText, stringifyOpID, logger, LogLevel, base64URLtoBytes, bytesToBase64url, hwrServerPeerSelector, isAccountRole, };
|
|
70
73
|
export * from "./storage/index.js";
|
package/dist/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,26 +2,25 @@ import type { PeerState } from "../PeerState.js";
|
|
|
2
2
|
import type { SyncMessage } from "../sync.js";
|
|
3
3
|
import { LinkedList } from "./LinkedList.js";
|
|
4
4
|
/**
|
|
5
|
-
* A queue that
|
|
5
|
+
* A queue that manages incoming sync messages across different peers using a round-robin approach.
|
|
6
6
|
*
|
|
7
7
|
* This class manages incoming sync messages from multiple peers, ensuring fair processing
|
|
8
|
-
* by cycling through each peer's message queue in a round-robin fashion.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* by cycling through each peer's message queue in a round-robin fashion.
|
|
9
|
+
*
|
|
10
|
+
* Queue processing and scheduling is handled by SyncManager.processQueues().
|
|
11
11
|
*/
|
|
12
12
|
export declare class IncomingMessagesQueue {
|
|
13
|
+
private processQueues;
|
|
13
14
|
private pullCounter;
|
|
14
15
|
private pushCounter;
|
|
15
16
|
queues: [LinkedList<SyncMessage>, PeerState][];
|
|
16
17
|
peerToQueue: WeakMap<PeerState, LinkedList<SyncMessage>>;
|
|
17
18
|
currentQueue: number;
|
|
18
|
-
constructor();
|
|
19
|
+
constructor(processQueues: () => void);
|
|
19
20
|
push(msg: SyncMessage, peer: PeerState): void;
|
|
20
21
|
pull(): {
|
|
21
22
|
msg: SyncMessage;
|
|
22
23
|
peer: PeerState;
|
|
23
24
|
} | undefined;
|
|
24
|
-
processing: boolean;
|
|
25
|
-
processQueue(callback: (msg: SyncMessage, peer: PeerState) => void): Promise<void>;
|
|
26
25
|
}
|
|
27
26
|
//# sourceMappingURL=IncomingMessagesQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncomingMessagesQueue.d.ts","sourceRoot":"","sources":["../../src/queue/IncomingMessagesQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"IncomingMessagesQueue.d.ts","sourceRoot":"","sources":["../../src/queue/IncomingMessagesQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;GAOG;AACH,qBAAa,qBAAqB;IAQpB,OAAO,CAAC,aAAa;IAPjC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;IAE7B,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;IAC/C,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,YAAY,SAAK;gBAEG,aAAa,EAAE,MAAM,IAAI;IAsCtC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS;IAmBtC,IAAI;;;;CA+BZ"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { ValueType, metrics } from "@opentelemetry/api";
|
|
2
|
-
import { SYNC_SCHEDULER_CONFIG } from "../config.js";
|
|
3
|
-
import { logger } from "../logger.js";
|
|
4
2
|
import { LinkedList } from "./LinkedList.js";
|
|
5
3
|
/**
|
|
6
|
-
* A queue that
|
|
4
|
+
* A queue that manages incoming sync messages across different peers using a round-robin approach.
|
|
7
5
|
*
|
|
8
6
|
* This class manages incoming sync messages from multiple peers, ensuring fair processing
|
|
9
|
-
* by cycling through each peer's message queue in a round-robin fashion.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* by cycling through each peer's message queue in a round-robin fashion.
|
|
8
|
+
*
|
|
9
|
+
* Queue processing and scheduling is handled by SyncManager.processQueues().
|
|
12
10
|
*/
|
|
13
11
|
export class IncomingMessagesQueue {
|
|
14
|
-
constructor() {
|
|
12
|
+
constructor(processQueues) {
|
|
13
|
+
this.processQueues = processQueues;
|
|
15
14
|
this.currentQueue = 0;
|
|
16
|
-
this.processing = false;
|
|
17
15
|
this.pullCounter = metrics
|
|
18
16
|
.getMeter("cojson")
|
|
19
17
|
.createCounter(`jazz.messagequeue.incoming.pulled`, {
|
|
@@ -62,6 +60,7 @@ export class IncomingMessagesQueue {
|
|
|
62
60
|
this.pushCounter.add(1, {
|
|
63
61
|
peerRole: peer.role,
|
|
64
62
|
});
|
|
63
|
+
this.processQueues();
|
|
65
64
|
}
|
|
66
65
|
pull() {
|
|
67
66
|
const entry = this.queues[this.currentQueue];
|
|
@@ -88,27 +87,5 @@ export class IncomingMessagesQueue {
|
|
|
88
87
|
}
|
|
89
88
|
return undefined;
|
|
90
89
|
}
|
|
91
|
-
async processQueue(callback) {
|
|
92
|
-
this.processing = true;
|
|
93
|
-
let entry;
|
|
94
|
-
let lastTimer = performance.now();
|
|
95
|
-
while ((entry = this.pull())) {
|
|
96
|
-
const { msg, peer } = entry;
|
|
97
|
-
try {
|
|
98
|
-
callback(msg, peer);
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
logger.error("Error processing message", { err });
|
|
102
|
-
}
|
|
103
|
-
const currentTimer = performance.now();
|
|
104
|
-
// We check if we have blocked the main thread for too long
|
|
105
|
-
// and if so, we schedule a timer task to yield to the event loop
|
|
106
|
-
if (currentTimer - lastTimer >
|
|
107
|
-
SYNC_SCHEDULER_CONFIG.INCOMING_MESSAGES_TIME_BUDGET) {
|
|
108
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
this.processing = false;
|
|
112
|
-
}
|
|
113
90
|
}
|
|
114
91
|
//# sourceMappingURL=IncomingMessagesQueue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncomingMessagesQueue.js","sourceRoot":"","sources":["../../src/queue/IncomingMessagesQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,SAAS,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"IncomingMessagesQueue.js","sourceRoot":"","sources":["../../src/queue/IncomingMessagesQueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,6 @@ declare class QueueMeter {
|
|
|
32
32
|
pull(): void;
|
|
33
33
|
push(): void;
|
|
34
34
|
}
|
|
35
|
-
export declare function meteredList<T>(type: "incoming" | "outgoing", attrs?: Record<string, string | number>): LinkedList<T>;
|
|
35
|
+
export declare function meteredList<T>(type: "incoming" | "outgoing" | "storage-streaming", attrs?: Record<string, string | number>): LinkedList<T>;
|
|
36
36
|
export {};
|
|
37
37
|
//# sourceMappingURL=LinkedList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkedList.d.ts","sourceRoot":"","sources":["../../src/queue/LinkedList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS;IACpE,MAAM,EAAE,CAAC,CAAC;CACX,GACG,CAAC,GACD,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACrC,CAAC;AACF;;;GAGG;AAEH,qBAAa,UAAU,CAAC,CAAC;IACX,OAAO,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,EAAE,UAAU,YAAA;IAEtC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,MAAM,SAAK;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;IAiBb,KAAK;IAoBL,OAAO;CAGR;AACD,cAAM,UAAU;IAMZ,OAAO,CAAC,KAAK,CAAC;IALhB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;gBAG3B,MAAM,EAAE,MAAM,EACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAA;IA0B1C,IAAI;IAIJ,IAAI;CAGZ;AACD,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,UAAU,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"LinkedList.d.ts","sourceRoot":"","sources":["../../src/queue/LinkedList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS;IACpE,MAAM,EAAE,CAAC,CAAC;CACX,GACG,CAAC,GACD,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3B,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,KAAK,EAAE,CAAC,CAAC;IACT,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACrC,CAAC;AACF;;;GAGG;AAEH,qBAAa,UAAU,CAAC,CAAC;IACX,OAAO,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,EAAE,UAAU,YAAA;IAEtC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAa;IAChD,MAAM,SAAK;IAEX,IAAI,CAAC,KAAK,EAAE,CAAC;IAiBb,KAAK;IAoBL,OAAO;CAGR;AACD,cAAM,UAAU;IAMZ,OAAO,CAAC,KAAK,CAAC;IALhB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;gBAG3B,MAAM,EAAE,MAAM,EACN,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,YAAA;IA0B1C,IAAI;IAIJ,IAAI;CAGZ;AACD,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,mBAAmB,EACnD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,iBAGxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkedList.js","sourceRoot":"","sources":["../../src/queue/LinkedList.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"LinkedList.js","sourceRoot":"","sources":["../../src/queue/LinkedList.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type CoValuePriority } from "../priority.js";
|
|
2
|
+
/**
|
|
3
|
+
* A callback that pushes content when invoked.
|
|
4
|
+
* Content is only fetched from the database when this callback is called.
|
|
5
|
+
*/
|
|
6
|
+
export type ContentCallback = () => void;
|
|
7
|
+
/**
|
|
8
|
+
* A priority-based queue for storage content streaming.
|
|
9
|
+
*
|
|
10
|
+
* This queue manages content streaming for all priority levels (HIGH, MEDIUM, LOW).
|
|
11
|
+
* Content is processed in priority order: HIGH first, then MEDIUM, then LOW.
|
|
12
|
+
*
|
|
13
|
+
* Key features:
|
|
14
|
+
* - Stores callbacks to get content (lazy evaluation) rather than content itself
|
|
15
|
+
* - Priority-based ordering: HIGH > MEDIUM > LOW
|
|
16
|
+
*/
|
|
17
|
+
export declare class StorageStreamingQueue {
|
|
18
|
+
private queues;
|
|
19
|
+
constructor();
|
|
20
|
+
private getQueue;
|
|
21
|
+
/**
|
|
22
|
+
* Push a content callback to the queue with explicit priority.
|
|
23
|
+
* The callback will be invoked when the entry is pulled and processed.
|
|
24
|
+
*
|
|
25
|
+
* @param entry - Callback that pushes content when invoked
|
|
26
|
+
* @param priority - Priority for this entry (HIGH, MEDIUM, or LOW)
|
|
27
|
+
*/
|
|
28
|
+
push(entry: ContentCallback, priority: CoValuePriority): void;
|
|
29
|
+
/**
|
|
30
|
+
* Pull the next entry from the queue.
|
|
31
|
+
* Returns undefined if no entries are available.
|
|
32
|
+
* Priority order: HIGH > MEDIUM > LOW
|
|
33
|
+
*/
|
|
34
|
+
pull(): ContentCallback | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Check if the queue is empty (no pending entries).
|
|
37
|
+
*/
|
|
38
|
+
isEmpty(): boolean;
|
|
39
|
+
private listener;
|
|
40
|
+
setListener(listener: () => void): void;
|
|
41
|
+
emit(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=StorageStreamingQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageStreamingQueue.d.ts","sourceRoot":"","sources":["../../src/queue/StorageStreamingQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGzE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC;AAezC;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsB;;IAUpC,OAAO,CAAC,QAAQ;IAIhB;;;;;;OAMG;IACI,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIpE;;;;OAIG;IACI,IAAI,IAAI,eAAe,GAAG,SAAS;IAiB1C;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB,OAAO,CAAC,QAAQ,CAA2B;IAC3C,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,IAAI,IAAI,IAAI;CAGb"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { CO_VALUE_PRIORITY } from "../priority.js";
|
|
2
|
+
import { meteredList } from "./LinkedList.js";
|
|
3
|
+
// All priorities use the queue, processed in order: HIGH > MEDIUM > LOW
|
|
4
|
+
const PRIORITY_TO_QUEUE_INDEX = {
|
|
5
|
+
[CO_VALUE_PRIORITY.HIGH]: 0,
|
|
6
|
+
[CO_VALUE_PRIORITY.MEDIUM]: 1,
|
|
7
|
+
[CO_VALUE_PRIORITY.LOW]: 2,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A priority-based queue for storage content streaming.
|
|
11
|
+
*
|
|
12
|
+
* This queue manages content streaming for all priority levels (HIGH, MEDIUM, LOW).
|
|
13
|
+
* Content is processed in priority order: HIGH first, then MEDIUM, then LOW.
|
|
14
|
+
*
|
|
15
|
+
* Key features:
|
|
16
|
+
* - Stores callbacks to get content (lazy evaluation) rather than content itself
|
|
17
|
+
* - Priority-based ordering: HIGH > MEDIUM > LOW
|
|
18
|
+
*/
|
|
19
|
+
export class StorageStreamingQueue {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.queues = [
|
|
22
|
+
meteredList("storage-streaming", { priority: CO_VALUE_PRIORITY.HIGH }),
|
|
23
|
+
meteredList("storage-streaming", { priority: CO_VALUE_PRIORITY.MEDIUM }),
|
|
24
|
+
meteredList("storage-streaming", { priority: CO_VALUE_PRIORITY.LOW }),
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
getQueue(priority) {
|
|
28
|
+
return this.queues[PRIORITY_TO_QUEUE_INDEX[priority]];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Push a content callback to the queue with explicit priority.
|
|
32
|
+
* The callback will be invoked when the entry is pulled and processed.
|
|
33
|
+
*
|
|
34
|
+
* @param entry - Callback that pushes content when invoked
|
|
35
|
+
* @param priority - Priority for this entry (HIGH, MEDIUM, or LOW)
|
|
36
|
+
*/
|
|
37
|
+
push(entry, priority) {
|
|
38
|
+
this.getQueue(priority).push(entry);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pull the next entry from the queue.
|
|
42
|
+
* Returns undefined if no entries are available.
|
|
43
|
+
* Priority order: HIGH > MEDIUM > LOW
|
|
44
|
+
*/
|
|
45
|
+
pull() {
|
|
46
|
+
// Find the first non-empty queue (HIGH > MEDIUM > LOW)
|
|
47
|
+
const queueIndex = this.queues.findIndex((queue) => queue.length > 0);
|
|
48
|
+
if (queueIndex === -1) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
const entry = this.queues[queueIndex]?.shift();
|
|
52
|
+
if (!entry) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
return entry;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if the queue is empty (no pending entries).
|
|
59
|
+
*/
|
|
60
|
+
isEmpty() {
|
|
61
|
+
return this.queues.every((queue) => queue.length === 0);
|
|
62
|
+
}
|
|
63
|
+
setListener(listener) {
|
|
64
|
+
this.listener = listener;
|
|
65
|
+
}
|
|
66
|
+
emit() {
|
|
67
|
+
this.listener?.();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=StorageStreamingQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageStreamingQueue.js","sourceRoot":"","sources":["../../src/queue/StorageStreamingQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAc,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAQ1D,wEAAwE;AACxE,MAAM,uBAAuB,GAAG;IAC9B,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7B,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;CAClB,CAAC;AAQX;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IAGhC;QACE,IAAI,CAAC,MAAM,GAAG;YACZ,WAAW,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,CAAC;YACtE,WAAW,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACxE,WAAW,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC;SACtE,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,QAAyB;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;;;;;OAMG;IACI,IAAI,CAAC,KAAsB,EAAE,QAAyB;QAC3D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACI,IAAI;QACT,uDAAuD;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEtE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;QAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAGD,WAAW,CAAC,QAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -3,15 +3,21 @@ import { NewContentMessage, type PeerID } from "../sync.js";
|
|
|
3
3
|
import { StorageKnownState } from "./knownState.js";
|
|
4
4
|
import { CoValueKnownState } from "../knownState.js";
|
|
5
5
|
import type { CorrectionCallback, DBClientInterfaceSync, StoredCoValueRow } from "./types.js";
|
|
6
|
+
import { StorageStreamingQueue } from "../queue/StorageStreamingQueue.js";
|
|
6
7
|
export declare class StorageApiSync implements StorageAPI {
|
|
7
|
-
private streamingCounter;
|
|
8
8
|
private readonly dbClient;
|
|
9
9
|
private loadedCoValues;
|
|
10
|
+
/**
|
|
11
|
+
* Queue for streaming content that will be pulled by SyncManager.
|
|
12
|
+
* Only used when content requires streaming (multiple chunks).
|
|
13
|
+
*/
|
|
14
|
+
readonly streamingQueue: StorageStreamingQueue;
|
|
10
15
|
constructor(dbClient: DBClientInterfaceSync);
|
|
11
16
|
knownStates: StorageKnownState;
|
|
12
17
|
getKnownState(id: string): CoValueKnownState;
|
|
13
18
|
load(id: string, callback: (data: NewContentMessage) => void, done: (found: boolean) => void): Promise<void>;
|
|
14
|
-
loadCoValue(id: string, callback: (data: NewContentMessage) => void, done?: (found: boolean) => void):
|
|
19
|
+
loadCoValue(id: string, callback: (data: NewContentMessage) => void, done?: (found: boolean) => void): void;
|
|
20
|
+
private loadSessionTransactions;
|
|
15
21
|
pushContentWithDependencies(coValueRow: StoredCoValueRow, contentMessage: NewContentMessage, pushCallback: (data: NewContentMessage) => void): Promise<void>;
|
|
16
22
|
store(msg: NewContentMessage, correctionCallback: CorrectionCallback): boolean;
|
|
17
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storageSync.d.ts","sourceRoot":"","sources":["../../src/storage/storageSync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storageSync.d.ts","sourceRoot":"","sources":["../../src/storage/storageSync.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,OAAO,EAEP,KAAK,UAAU,EAEhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EAGrB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAEL,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAG3C,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,cAAc,CAAsB;IAE5C;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;gBAEnC,QAAQ,EAAE,qBAAqB;IAK3C,WAAW,oBAA2B;IAEtC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAItC,IAAI,CACR,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAC3C,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAKhC,WAAW,CACT,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EAC3C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI;IAsIjC,OAAO,CAAC,uBAAuB;IAqBzB,2BAA2B,CAC/B,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EAAE,iBAAiB,EACjC,YAAY,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI;IAkBjD,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB;IAIpE;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,WAAW;IA0DnB,OAAO,CAAC,SAAS;IAiEjB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAI5C,sBAAsB,CACpB,OAAO,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,EAC3D,IAAI,CAAC,EAAE,MAAM,IAAI,GAChB,IAAI;IAKP,qBAAqB,CACnB,QAAQ,EAAE,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,IAAI,GAChD,IAAI;IAKP,qBAAqB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAIxC,KAAK;CAGN"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import { metrics } from "@opentelemetry/api";
|
|
2
1
|
import { createContentMessage, exceedsRecommendedSize, } from "../coValueContentMessage.js";
|
|
3
2
|
import { logger, } from "../exports.js";
|
|
4
3
|
import { StorageKnownState } from "./knownState.js";
|
|
5
4
|
import { emptyKnownState, setSessionCounter, } from "../knownState.js";
|
|
6
5
|
import { collectNewTxs, getDependedOnCoValues, getNewTransactionsSize, } from "./syncUtils.js";
|
|
6
|
+
import { StorageStreamingQueue, } from "../queue/StorageStreamingQueue.js";
|
|
7
|
+
import { getPriorityFromHeader } from "../priority.js";
|
|
7
8
|
export class StorageApiSync {
|
|
8
9
|
constructor(dbClient) {
|
|
9
10
|
this.loadedCoValues = new Set();
|
|
10
11
|
this.knownStates = new StorageKnownState();
|
|
11
12
|
this.dbClient = dbClient;
|
|
12
|
-
this.
|
|
13
|
-
.getMeter("cojson")
|
|
14
|
-
.createUpDownCounter(`jazz.storage.streaming`, {
|
|
15
|
-
description: "Number of streaming coValues",
|
|
16
|
-
unit: "1",
|
|
17
|
-
});
|
|
18
|
-
this.streamingCounter.add(0);
|
|
13
|
+
this.streamingQueue = new StorageStreamingQueue();
|
|
19
14
|
}
|
|
20
15
|
getKnownState(id) {
|
|
21
16
|
return this.knownStates.getKnownState(id);
|
|
@@ -23,7 +18,7 @@ export class StorageApiSync {
|
|
|
23
18
|
async load(id, callback, done) {
|
|
24
19
|
await this.loadCoValue(id, callback, done);
|
|
25
20
|
}
|
|
26
|
-
|
|
21
|
+
loadCoValue(id, callback, done) {
|
|
27
22
|
const coValueRow = this.dbClient.getCoValue(id);
|
|
28
23
|
if (!coValueRow) {
|
|
29
24
|
done?.(false);
|
|
@@ -36,8 +31,15 @@ export class StorageApiSync {
|
|
|
36
31
|
const signatures = this.dbClient.getSignatures(sessionRow.rowID, 0);
|
|
37
32
|
if (signatures.length > 0) {
|
|
38
33
|
contentStreaming = true;
|
|
39
|
-
signaturesBySession.set(sessionRow.sessionID, signatures);
|
|
40
34
|
}
|
|
35
|
+
const lastSignature = signatures[signatures.length - 1];
|
|
36
|
+
if (lastSignature?.signature !== sessionRow.lastSignature) {
|
|
37
|
+
signatures.push({
|
|
38
|
+
idx: sessionRow.lastIdx,
|
|
39
|
+
signature: sessionRow.lastSignature,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
signaturesBySession.set(sessionRow.sessionID, signatures);
|
|
41
43
|
}
|
|
42
44
|
const knownState = this.knownStates.getKnownState(coValueRow.id);
|
|
43
45
|
knownState.header = true;
|
|
@@ -45,52 +47,62 @@ export class StorageApiSync {
|
|
|
45
47
|
setSessionCounter(knownState.sessions, sessionRow.sessionID, sessionRow.lastIdx);
|
|
46
48
|
}
|
|
47
49
|
this.loadedCoValues.add(coValueRow.id);
|
|
48
|
-
|
|
50
|
+
const priority = getPriorityFromHeader(coValueRow.header);
|
|
51
|
+
const contentMessage = createContentMessage(coValueRow.id, coValueRow.header);
|
|
49
52
|
if (contentStreaming) {
|
|
50
|
-
this.streamingCounter.add(1);
|
|
51
53
|
contentMessage.expectContentUntil = knownState.sessions;
|
|
52
54
|
}
|
|
55
|
+
const streamingQueue = [];
|
|
53
56
|
for (const sessionRow of allCoValueSessions) {
|
|
54
|
-
const signatures = signaturesBySession.get(sessionRow.sessionID)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (lastSignature?.signature !== sessionRow.lastSignature) {
|
|
58
|
-
signatures.push({
|
|
59
|
-
idx: sessionRow.lastIdx,
|
|
60
|
-
signature: sessionRow.lastSignature,
|
|
61
|
-
});
|
|
57
|
+
const signatures = signaturesBySession.get(sessionRow.sessionID);
|
|
58
|
+
if (!signatures) {
|
|
59
|
+
throw new Error("Signatures not found for session");
|
|
62
60
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
idx = signature.idx + 1;
|
|
73
|
-
if (signatures.length > 1) {
|
|
74
|
-
this.pushContentWithDependencies(coValueRow, contentMessage, callback);
|
|
75
|
-
contentMessage = createContentMessage(coValueRow.id, coValueRow.header);
|
|
76
|
-
// Introduce a delay to not block the main thread
|
|
77
|
-
// for the entire content processing
|
|
78
|
-
await new Promise((resolve) => setTimeout(resolve));
|
|
61
|
+
const firstSignature = signatures[0];
|
|
62
|
+
if (!firstSignature) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
this.loadSessionTransactions(contentMessage, sessionRow, 0, firstSignature);
|
|
66
|
+
for (let i = 1; i < signatures.length; i++) {
|
|
67
|
+
const prevSignature = signatures[i - 1];
|
|
68
|
+
if (!prevSignature) {
|
|
69
|
+
throw new Error("Previous signature is nullish");
|
|
79
70
|
}
|
|
71
|
+
streamingQueue.push(() => {
|
|
72
|
+
const contentMessage = createContentMessage(coValueRow.id, coValueRow.header);
|
|
73
|
+
const signature = signatures[i];
|
|
74
|
+
if (!signature)
|
|
75
|
+
throw new Error("Signature item is nullish");
|
|
76
|
+
this.loadSessionTransactions(contentMessage, sessionRow, prevSignature.idx + 1, signature);
|
|
77
|
+
if (Object.keys(contentMessage.new).length > 0) {
|
|
78
|
+
this.pushContentWithDependencies(coValueRow, contentMessage, callback);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
// Send the first chunk
|
|
84
|
+
this.pushContentWithDependencies(coValueRow, contentMessage, callback);
|
|
85
|
+
this.knownStates.handleUpdate(coValueRow.id, knownState);
|
|
86
|
+
// All priorities go through the queue (HIGH > MEDIUM > LOW)
|
|
87
|
+
for (const pushStreamingContent of streamingQueue) {
|
|
88
|
+
this.streamingQueue.push(pushStreamingContent, priority);
|
|
87
89
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
+
// Trigger the queue to process the entries
|
|
91
|
+
if (streamingQueue.length > 0) {
|
|
92
|
+
this.streamingQueue.emit();
|
|
90
93
|
}
|
|
91
|
-
this.knownStates.handleUpdate(coValueRow.id, knownState);
|
|
92
94
|
done?.(true);
|
|
93
95
|
}
|
|
96
|
+
loadSessionTransactions(contentMessage, sessionRow, idx, signature) {
|
|
97
|
+
const newTxsInSession = this.dbClient.getNewTransactionInSession(sessionRow.rowID, idx, signature.idx);
|
|
98
|
+
collectNewTxs({
|
|
99
|
+
newTxsInSession,
|
|
100
|
+
contentMessage,
|
|
101
|
+
sessionRow,
|
|
102
|
+
firstNewTxIdx: idx,
|
|
103
|
+
signature: signature.signature,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
94
106
|
async pushContentWithDependencies(coValueRow, contentMessage, pushCallback) {
|
|
95
107
|
const dependedOnCoValuesList = getDependedOnCoValues(coValueRow.header, contentMessage);
|
|
96
108
|
for (const dependedOnCoValue of dependedOnCoValuesList) {
|