cojson 0.15.7 → 0.15.9
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/CHANGELOG.md +12 -0
- package/dist/IncomingMessagesQueue.d.ts +27 -0
- package/dist/IncomingMessagesQueue.d.ts.map +1 -0
- package/dist/IncomingMessagesQueue.js +114 -0
- package/dist/IncomingMessagesQueue.js.map +1 -0
- package/dist/PeerState.d.ts +2 -10
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js +9 -90
- package/dist/PeerState.js.map +1 -1
- package/dist/PriorityBasedMessageQueue.d.ts +2 -1
- package/dist/PriorityBasedMessageQueue.d.ts.map +1 -1
- package/dist/PriorityBasedMessageQueue.js +9 -6
- package/dist/PriorityBasedMessageQueue.js.map +1 -1
- package/dist/SyncStateManager.d.ts +1 -0
- package/dist/SyncStateManager.d.ts.map +1 -1
- package/dist/SyncStateManager.js +1 -1
- package/dist/SyncStateManager.js.map +1 -1
- package/dist/coValue.d.ts +1 -1
- package/dist/coValueCore/coValueCore.d.ts +9 -17
- package/dist/coValueCore/coValueCore.d.ts.map +1 -1
- package/dist/coValueCore/coValueCore.js +75 -50
- package/dist/coValueCore/coValueCore.js.map +1 -1
- package/dist/coValueCore/verifiedState.d.ts +10 -3
- package/dist/coValueCore/verifiedState.d.ts.map +1 -1
- package/dist/coValueCore/verifiedState.js +73 -14
- package/dist/coValueCore/verifiedState.js.map +1 -1
- package/dist/coValues/coMap.d.ts +3 -3
- package/dist/coValues/coStream.d.ts +2 -2
- package/dist/coValues/group.d.ts +1 -1
- package/dist/coValues/group.d.ts.map +1 -1
- package/dist/coValues/group.js +2 -4
- package/dist/coValues/group.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/WasmCrypto.d.ts.map +1 -1
- package/dist/crypto/WasmCrypto.js +2 -1
- package/dist/crypto/WasmCrypto.js.map +1 -1
- package/dist/exports.d.ts +18 -7
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +11 -8
- package/dist/exports.js.map +1 -1
- package/dist/localNode.d.ts +8 -2
- package/dist/localNode.d.ts.map +1 -1
- package/dist/localNode.js +19 -12
- package/dist/localNode.js.map +1 -1
- package/dist/storage/StoreQueue.d.ts +15 -0
- package/dist/storage/StoreQueue.d.ts.map +1 -0
- package/dist/storage/StoreQueue.js +35 -0
- package/dist/storage/StoreQueue.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/knownState.d.ts +18 -0
- package/dist/storage/knownState.d.ts.map +1 -0
- package/dist/storage/knownState.js +63 -0
- package/dist/storage/knownState.js.map +1 -0
- package/dist/storage/sqlite/client.d.ts +37 -0
- package/dist/storage/sqlite/client.d.ts.map +1 -0
- package/dist/storage/sqlite/client.js +89 -0
- package/dist/storage/sqlite/client.js.map +1 -0
- package/dist/storage/sqlite/index.d.ts +5 -0
- package/dist/storage/sqlite/index.d.ts.map +1 -0
- package/dist/storage/sqlite/index.js +13 -0
- package/dist/storage/sqlite/index.js.map +1 -0
- package/dist/storage/sqlite/sqliteMigrations.d.ts +3 -0
- package/dist/storage/sqlite/sqliteMigrations.d.ts.map +1 -0
- package/dist/storage/sqlite/sqliteMigrations.js +44 -0
- package/dist/storage/sqlite/sqliteMigrations.js.map +1 -0
- package/dist/storage/sqlite/types.d.ts +8 -0
- package/dist/storage/sqlite/types.d.ts.map +1 -0
- package/dist/storage/sqlite/types.js +2 -0
- package/dist/storage/sqlite/types.js.map +1 -0
- package/dist/storage/sqliteAsync/client.d.ts +37 -0
- package/dist/storage/sqliteAsync/client.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/client.js +88 -0
- package/dist/storage/sqliteAsync/client.js.map +1 -0
- package/dist/storage/sqliteAsync/index.d.ts +6 -0
- package/dist/storage/sqliteAsync/index.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/index.js +15 -0
- package/dist/storage/sqliteAsync/index.js.map +1 -0
- package/dist/storage/sqliteAsync/types.d.ts +9 -0
- package/dist/storage/sqliteAsync/types.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/types.js +2 -0
- package/dist/storage/sqliteAsync/types.js.map +1 -0
- package/dist/storage/storageAsync.d.ts +22 -0
- package/dist/storage/storageAsync.d.ts.map +1 -0
- package/dist/storage/storageAsync.js +214 -0
- package/dist/storage/storageAsync.js.map +1 -0
- package/dist/storage/storageSync.d.ts +21 -0
- package/dist/storage/storageSync.d.ts.map +1 -0
- package/dist/storage/storageSync.js +206 -0
- package/dist/storage/storageSync.js.map +1 -0
- package/dist/storage/syncUtils.d.ts +13 -0
- package/dist/storage/syncUtils.d.ts.map +1 -0
- package/dist/storage/syncUtils.js +25 -0
- package/dist/storage/syncUtils.js.map +1 -0
- package/dist/storage/types.d.ts +82 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/streamUtils.d.ts +13 -9
- package/dist/streamUtils.d.ts.map +1 -1
- package/dist/streamUtils.js +46 -13
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync.d.ts +22 -14
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +143 -125
- package/dist/sync.js.map +1 -1
- package/dist/tests/IncomingMessagesQueue.test.d.ts +2 -0
- package/dist/tests/IncomingMessagesQueue.test.d.ts.map +1 -0
- package/dist/tests/IncomingMessagesQueue.test.js +437 -0
- package/dist/tests/IncomingMessagesQueue.test.js.map +1 -0
- package/dist/tests/PeerState.test.js +6 -94
- package/dist/tests/PeerState.test.js.map +1 -1
- package/dist/tests/PriorityBasedMessageQueue.test.js +14 -14
- package/dist/tests/PriorityBasedMessageQueue.test.js.map +1 -1
- package/dist/tests/StoreQueue.test.d.ts +2 -0
- package/dist/tests/StoreQueue.test.d.ts.map +1 -0
- package/dist/tests/StoreQueue.test.js +208 -0
- package/dist/tests/StoreQueue.test.js.map +1 -0
- package/dist/tests/SyncStateManager.test.js +3 -1
- package/dist/tests/SyncStateManager.test.js.map +1 -1
- package/dist/tests/account.test.js +9 -9
- package/dist/tests/account.test.js.map +1 -1
- package/dist/tests/coStream.test.js +1 -1
- package/dist/tests/coStream.test.js.map +1 -1
- package/dist/tests/coValueCore.test.js +208 -1
- package/dist/tests/coValueCore.test.js.map +1 -1
- package/dist/tests/coValueCoreLoadingState.test.js +2 -2
- package/dist/tests/coValueCoreLoadingState.test.js.map +1 -1
- package/dist/tests/group.addMember.test.js.map +1 -1
- package/dist/tests/group.removeMember.test.js +1 -1
- package/dist/tests/group.removeMember.test.js.map +1 -1
- package/dist/tests/messagesTestUtils.js +1 -1
- package/dist/tests/messagesTestUtils.js.map +1 -1
- package/dist/tests/sync.auth.test.js +23 -15
- package/dist/tests/sync.auth.test.js.map +1 -1
- package/dist/tests/sync.invite.test.js +10 -16
- package/dist/tests/sync.invite.test.js.map +1 -1
- package/dist/tests/sync.load.test.js +52 -50
- package/dist/tests/sync.load.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +173 -56
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.peerReconciliation.test.js +42 -32
- package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
- package/dist/tests/sync.storage.test.js +162 -62
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.storageAsync.test.d.ts +2 -0
- package/dist/tests/sync.storageAsync.test.d.ts.map +1 -0
- package/dist/tests/sync.storageAsync.test.js +361 -0
- package/dist/tests/sync.storageAsync.test.js.map +1 -0
- package/dist/tests/sync.test.js +16 -21
- package/dist/tests/sync.test.js.map +1 -1
- package/dist/tests/sync.upload.test.js +28 -25
- package/dist/tests/sync.upload.test.js.map +1 -1
- package/dist/tests/testStorage.d.ts +12 -0
- package/dist/tests/testStorage.d.ts.map +1 -0
- package/dist/tests/testStorage.js +151 -0
- package/dist/tests/testStorage.js.map +1 -0
- package/dist/tests/testUtils.d.ts +20 -15
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +79 -45
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/IncomingMessagesQueue.ts +142 -0
- package/src/PeerState.ts +11 -110
- package/src/PriorityBasedMessageQueue.ts +13 -5
- package/src/SyncStateManager.ts +1 -1
- package/src/coValueCore/coValueCore.ts +100 -66
- package/src/coValueCore/verifiedState.ts +91 -21
- package/src/coValues/group.ts +2 -4
- package/src/config.ts +26 -0
- package/src/crypto/WasmCrypto.ts +3 -1
- package/src/exports.ts +20 -27
- package/src/localNode.ts +27 -12
- package/src/storage/StoreQueue.ts +56 -0
- package/src/storage/index.ts +5 -0
- package/src/storage/knownState.ts +88 -0
- package/src/storage/sqlite/client.ts +180 -0
- package/src/storage/sqlite/index.ts +19 -0
- package/src/storage/sqlite/sqliteMigrations.ts +44 -0
- package/src/storage/sqlite/types.ts +7 -0
- package/src/storage/sqliteAsync/client.ts +179 -0
- package/src/storage/sqliteAsync/index.ts +25 -0
- package/src/storage/sqliteAsync/types.ts +8 -0
- package/src/storage/storageAsync.ts +367 -0
- package/src/storage/storageSync.ts +343 -0
- package/src/storage/syncUtils.ts +50 -0
- package/src/storage/types.ts +162 -0
- package/src/streamUtils.ts +61 -19
- package/src/sync.ts +191 -160
- package/src/tests/IncomingMessagesQueue.test.ts +626 -0
- package/src/tests/PeerState.test.ts +6 -118
- package/src/tests/PriorityBasedMessageQueue.test.ts +18 -14
- package/src/tests/StoreQueue.test.ts +283 -0
- package/src/tests/SyncStateManager.test.ts +4 -1
- package/src/tests/account.test.ts +11 -12
- package/src/tests/coStream.test.ts +1 -3
- package/src/tests/coValueCore.test.ts +270 -1
- package/src/tests/coValueCoreLoadingState.test.ts +2 -2
- package/src/tests/group.addMember.test.ts +1 -0
- package/src/tests/group.removeMember.test.ts +2 -8
- package/src/tests/messagesTestUtils.ts +2 -2
- package/src/tests/sync.auth.test.ts +24 -14
- package/src/tests/sync.invite.test.ts +11 -17
- package/src/tests/sync.load.test.ts +53 -49
- package/src/tests/sync.mesh.test.ts +198 -56
- package/src/tests/sync.peerReconciliation.test.ts +44 -34
- package/src/tests/sync.storage.test.ts +231 -64
- package/src/tests/sync.storageAsync.test.ts +486 -0
- package/src/tests/sync.test.ts +17 -23
- package/src/tests/sync.upload.test.ts +29 -24
- package/src/tests/testStorage.ts +216 -0
- package/src/tests/testUtils.ts +89 -54
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CoValueKnownState, NewContentMessage } from "../sync.js";
|
|
2
|
+
type StoreQueueEntry = {
|
|
3
|
+
data: NewContentMessage[];
|
|
4
|
+
correctionCallback: (data: CoValueKnownState) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare class StoreQueue {
|
|
7
|
+
private queue;
|
|
8
|
+
push(data: NewContentMessage[], correctionCallback: (data: CoValueKnownState) => void): void;
|
|
9
|
+
pull(): StoreQueueEntry | undefined;
|
|
10
|
+
processing: boolean;
|
|
11
|
+
processQueue(callback: (data: NewContentMessage[], correctionCallback: (data: CoValueKnownState) => void) => Promise<void>): Promise<void>;
|
|
12
|
+
drain(): void;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=StoreQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoreQueue.d.ts","sourceRoot":"","sources":["../../src/storage/StoreQueue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAElE,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAC1B,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAqC;IAE3C,IAAI,CACT,IAAI,EAAE,iBAAiB,EAAE,EACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI;IAKhD,IAAI;IAIX,UAAU,UAAS;IAEb,YAAY,CAChB,QAAQ,EAAE,CACR,IAAI,EAAE,iBAAiB,EAAE,EACzB,kBAAkB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,KAClD,OAAO,CAAC,IAAI,CAAC;IAuBpB,KAAK;CAGN"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { LinkedList } from "../PriorityBasedMessageQueue.js";
|
|
2
|
+
import { logger } from "../logger.js";
|
|
3
|
+
export class StoreQueue {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.queue = new LinkedList();
|
|
6
|
+
this.processing = false;
|
|
7
|
+
}
|
|
8
|
+
push(data, correctionCallback) {
|
|
9
|
+
this.queue.push({ data, correctionCallback });
|
|
10
|
+
}
|
|
11
|
+
pull() {
|
|
12
|
+
return this.queue.shift();
|
|
13
|
+
}
|
|
14
|
+
async processQueue(callback) {
|
|
15
|
+
if (this.processing) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.processing = true;
|
|
19
|
+
let entry;
|
|
20
|
+
while ((entry = this.pull())) {
|
|
21
|
+
const { data, correctionCallback } = entry;
|
|
22
|
+
try {
|
|
23
|
+
await callback(data, correctionCallback);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
logger.error("Error processing message in store queue", { err });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
this.processing = false;
|
|
30
|
+
}
|
|
31
|
+
drain() {
|
|
32
|
+
while (this.pull()) { }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=StoreQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StoreQueue.js","sourceRoot":"","sources":["../../src/storage/StoreQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,MAAM,OAAO,UAAU;IAAvB;QACU,UAAK,GAAG,IAAI,UAAU,EAAmB,CAAC;QAalD,eAAU,GAAG,KAAK,CAAC;IAgCrB,CAAC;IA3CQ,IAAI,CACT,IAAyB,EACzB,kBAAqD;QAErD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAID,KAAK,CAAC,YAAY,CAChB,QAGkB;QAElB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,KAAkC,CAAC;QAEvC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC;YAE3C,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CoValueCore } from "../exports.js";
|
|
2
|
+
import { CoValueKnownState } from "../sync.js";
|
|
3
|
+
/**
|
|
4
|
+
* Track how much data we have stored inside our storage
|
|
5
|
+
* and provides the API to wait for the data to be fully stored.
|
|
6
|
+
*/
|
|
7
|
+
export declare class StorageKnownState {
|
|
8
|
+
knwonStates: Map<string, CoValueKnownState>;
|
|
9
|
+
getKnownState(id: string): CoValueKnownState;
|
|
10
|
+
setKnownState(id: string, knownState: CoValueKnownState): void;
|
|
11
|
+
handleUpdate(id: string, knownState: CoValueKnownState): void;
|
|
12
|
+
waitForSyncRequests: Map<string, Set<{
|
|
13
|
+
knownState: CoValueKnownState;
|
|
14
|
+
resolve: (value: void) => void;
|
|
15
|
+
}>>;
|
|
16
|
+
waitForSync(id: string, coValue: CoValueCore): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=knownState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knownState.d.ts","sourceRoot":"","sources":["../../src/storage/knownState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAC;AAEhE;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,WAAW,iCAAwC;IAEnD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB;IAY5C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB;IAIvD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB;IAetD,mBAAmB;oBAGH,iBAAiB;iBACpB,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI;QAE9B;IAEJ,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;CAyB7C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getIsUploaded } from "../SyncStateManager.js";
|
|
2
|
+
import { emptyKnownState } from "../sync.js";
|
|
3
|
+
/**
|
|
4
|
+
* Track how much data we have stored inside our storage
|
|
5
|
+
* and provides the API to wait for the data to be fully stored.
|
|
6
|
+
*/
|
|
7
|
+
export class StorageKnownState {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.knwonStates = new Map();
|
|
10
|
+
this.waitForSyncRequests = new Map();
|
|
11
|
+
}
|
|
12
|
+
getKnownState(id) {
|
|
13
|
+
const knownState = this.knwonStates.get(id);
|
|
14
|
+
if (!knownState) {
|
|
15
|
+
const empty = emptyKnownState(id);
|
|
16
|
+
this.knwonStates.set(id, empty);
|
|
17
|
+
return empty;
|
|
18
|
+
}
|
|
19
|
+
return knownState;
|
|
20
|
+
}
|
|
21
|
+
setKnownState(id, knownState) {
|
|
22
|
+
this.knwonStates.set(id, knownState);
|
|
23
|
+
}
|
|
24
|
+
handleUpdate(id, knownState) {
|
|
25
|
+
const requests = this.waitForSyncRequests.get(id);
|
|
26
|
+
if (!requests) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
for (const request of requests) {
|
|
30
|
+
if (isInSync(request.knownState, knownState)) {
|
|
31
|
+
request.resolve();
|
|
32
|
+
requests.delete(request);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
waitForSync(id, coValue) {
|
|
37
|
+
const initialKnownState = coValue.knownState();
|
|
38
|
+
if (isInSync(initialKnownState, this.getKnownState(id))) {
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
const requests = this.waitForSyncRequests.get(id) || new Set();
|
|
42
|
+
this.waitForSyncRequests.set(id, requests);
|
|
43
|
+
return new Promise((resolve) => {
|
|
44
|
+
const unsubscribe = coValue.subscribe((coValue) => {
|
|
45
|
+
req.knownState = coValue.knownState();
|
|
46
|
+
this.handleUpdate(id, this.getKnownState(id));
|
|
47
|
+
}, false);
|
|
48
|
+
const handleResolve = () => {
|
|
49
|
+
resolve();
|
|
50
|
+
unsubscribe();
|
|
51
|
+
};
|
|
52
|
+
const req = { knownState: initialKnownState, resolve: handleResolve };
|
|
53
|
+
requests.add(req);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function isInSync(knownState, knownStateFromStorage) {
|
|
58
|
+
if (!knownStateFromStorage.header && knownState.header) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return getIsUploaded(knownState.sessions, knownStateFromStorage.sessions);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=knownState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knownState.js","sourceRoot":"","sources":["../../src/storage/knownState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Transaction } from "../../coValueCore/verifiedState.js";
|
|
2
|
+
import type { Signature } from "../../crypto/crypto.js";
|
|
3
|
+
import type { RawCoID, SessionID } from "../../exports.js";
|
|
4
|
+
import type { NewContentMessage } from "../../sync.js";
|
|
5
|
+
import type { DBClientInterfaceSync, SessionRow, SignatureAfterRow, StoredCoValueRow, StoredSessionRow, TransactionRow } from "../types.js";
|
|
6
|
+
import type { SQLiteDatabaseDriver } from "./types.js";
|
|
7
|
+
export type RawCoValueRow = {
|
|
8
|
+
id: RawCoID;
|
|
9
|
+
header: string;
|
|
10
|
+
};
|
|
11
|
+
export type RawTransactionRow = {
|
|
12
|
+
ses: number;
|
|
13
|
+
idx: number;
|
|
14
|
+
tx: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
17
|
+
export declare class SQLiteClient implements DBClientInterfaceSync {
|
|
18
|
+
private readonly db;
|
|
19
|
+
constructor(db: SQLiteDatabaseDriver);
|
|
20
|
+
getCoValue(coValueId: RawCoID): StoredCoValueRow | undefined;
|
|
21
|
+
getCoValueSessions(coValueRowId: number): StoredSessionRow[];
|
|
22
|
+
getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): StoredSessionRow | undefined;
|
|
23
|
+
getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): TransactionRow[];
|
|
24
|
+
getSignatures(sessionRowId: number, firstNewTxIdx: number): SignatureAfterRow[];
|
|
25
|
+
addCoValue(msg: NewContentMessage): number;
|
|
26
|
+
addSessionUpdate({ sessionUpdate, }: {
|
|
27
|
+
sessionUpdate: SessionRow;
|
|
28
|
+
}): number;
|
|
29
|
+
addTransaction(sessionRowID: number, nextIdx: number, newTransaction: Transaction): void;
|
|
30
|
+
addSignatureAfter({ sessionRowID, idx, signature, }: {
|
|
31
|
+
sessionRowID: number;
|
|
32
|
+
idx: number;
|
|
33
|
+
signature: Signature;
|
|
34
|
+
}): void;
|
|
35
|
+
transaction(operationsCallback: () => unknown): undefined;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,UAE7C;AAED,qBAAa,YAAa,YAAW,qBAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAuB;gBAE9B,EAAE,EAAE,oBAAoB;IAIpC,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS;IA0B5D,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAO5D,uBAAuB,CACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,gBAAgB,GAAG,SAAS;IAO/B,0BAA0B,CACxB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,cAAc,EAAE;IAiBnB,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,iBAAiB,EAAE;IAOtB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM;IAa1C,gBAAgB,CAAC,EACf,aAAa,GACd,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;KAC3B,GAAG,MAAM;IAqBV,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,WAAW;IAS7B,iBAAiB,CAAC,EAChB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE;IAO9D,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAI9C"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { logger } from "../../logger.js";
|
|
2
|
+
export function getErrorMessage(error) {
|
|
3
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
4
|
+
}
|
|
5
|
+
export class SQLiteClient {
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
getCoValue(coValueId) {
|
|
10
|
+
const coValueRow = this.db.get("SELECT * FROM coValues WHERE id = ?", [coValueId]);
|
|
11
|
+
if (!coValueRow)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
const parsedHeader = (coValueRow?.header &&
|
|
15
|
+
JSON.parse(coValueRow.header));
|
|
16
|
+
return {
|
|
17
|
+
...coValueRow,
|
|
18
|
+
header: parsedHeader,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
const headerValue = coValueRow?.header ?? "";
|
|
23
|
+
logger.warn(`Invalid JSON in header: ${headerValue}`, {
|
|
24
|
+
id: coValueId,
|
|
25
|
+
err: e,
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getCoValueSessions(coValueRowId) {
|
|
31
|
+
return this.db.query("SELECT * FROM sessions WHERE coValue = ?", [coValueRowId]);
|
|
32
|
+
}
|
|
33
|
+
getSingleCoValueSession(coValueRowId, sessionID) {
|
|
34
|
+
return this.db.get("SELECT * FROM sessions WHERE coValue = ? AND sessionID = ?", [coValueRowId, sessionID]);
|
|
35
|
+
}
|
|
36
|
+
getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
|
|
37
|
+
const txs = this.db.query("SELECT * FROM transactions WHERE ses = ? AND idx >= ? AND idx <= ?", [sessionRowId, fromIdx, toIdx]);
|
|
38
|
+
try {
|
|
39
|
+
return txs.map((transactionRow) => ({
|
|
40
|
+
...transactionRow,
|
|
41
|
+
tx: JSON.parse(transactionRow.tx),
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
logger.warn("Invalid JSON in transaction", { err: e });
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
getSignatures(sessionRowId, firstNewTxIdx) {
|
|
50
|
+
return this.db.query("SELECT * FROM signatureAfter WHERE ses = ? AND idx >= ?", [sessionRowId, firstNewTxIdx]);
|
|
51
|
+
}
|
|
52
|
+
addCoValue(msg) {
|
|
53
|
+
const result = this.db.get("INSERT INTO coValues (id, header) VALUES (?, ?) RETURNING rowID", [msg.id, JSON.stringify(msg.header)]);
|
|
54
|
+
if (!result) {
|
|
55
|
+
throw new Error("Failed to add coValue");
|
|
56
|
+
}
|
|
57
|
+
return result.rowID;
|
|
58
|
+
}
|
|
59
|
+
addSessionUpdate({ sessionUpdate, }) {
|
|
60
|
+
const result = this.db.get(`INSERT INTO sessions (coValue, sessionID, lastIdx, lastSignature, bytesSinceLastSignature) VALUES (?, ?, ?, ?, ?)
|
|
61
|
+
ON CONFLICT(coValue, sessionID) DO UPDATE SET lastIdx=excluded.lastIdx, lastSignature=excluded.lastSignature, bytesSinceLastSignature=excluded.bytesSinceLastSignature
|
|
62
|
+
RETURNING rowID`, [
|
|
63
|
+
sessionUpdate.coValue,
|
|
64
|
+
sessionUpdate.sessionID,
|
|
65
|
+
sessionUpdate.lastIdx,
|
|
66
|
+
sessionUpdate.lastSignature,
|
|
67
|
+
sessionUpdate.bytesSinceLastSignature,
|
|
68
|
+
]);
|
|
69
|
+
if (!result) {
|
|
70
|
+
throw new Error("Failed to add session update");
|
|
71
|
+
}
|
|
72
|
+
return result.rowID;
|
|
73
|
+
}
|
|
74
|
+
addTransaction(sessionRowID, nextIdx, newTransaction) {
|
|
75
|
+
this.db.run("INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)", [
|
|
76
|
+
sessionRowID,
|
|
77
|
+
nextIdx,
|
|
78
|
+
JSON.stringify(newTransaction),
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
addSignatureAfter({ sessionRowID, idx, signature, }) {
|
|
82
|
+
this.db.run("INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)", [sessionRowID, idx, signature]);
|
|
83
|
+
}
|
|
84
|
+
transaction(operationsCallback) {
|
|
85
|
+
this.db.transaction(operationsCallback);
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/storage/sqlite/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { StorageApiSync } from "../storageSync.js";
|
|
2
|
+
import type { SQLiteDatabaseDriver } from "./types.js";
|
|
3
|
+
export type { SQLiteDatabaseDriver };
|
|
4
|
+
export declare function getSqliteStorage(db: SQLiteDatabaseDriver): StorageApiSync;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,oBAAoB,kBAWxD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StorageApiSync } from "../storageSync.js";
|
|
2
|
+
import { SQLiteClient } from "./client.js";
|
|
3
|
+
import { getSQLiteMigrationQueries } from "./sqliteMigrations.js";
|
|
4
|
+
export function getSqliteStorage(db) {
|
|
5
|
+
const rows = db.query("PRAGMA user_version", []);
|
|
6
|
+
const userVersion = Number(rows[0]?.user_version) ?? 0;
|
|
7
|
+
const migrations = getSQLiteMigrationQueries(userVersion);
|
|
8
|
+
for (const migration of migrations) {
|
|
9
|
+
db.run(migration, []);
|
|
10
|
+
}
|
|
11
|
+
return new StorageApiSync(new SQLiteClient(db));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAKlE,MAAM,UAAU,gBAAgB,CAAC,EAAwB;IACvD,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAA2B,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,cAAc,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqliteMigrations.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/sqliteMigrations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmC/C,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const migrations = {
|
|
2
|
+
1: [
|
|
3
|
+
`CREATE TABLE IF NOT EXISTS transactions (
|
|
4
|
+
ses INTEGER,
|
|
5
|
+
idx INTEGER,
|
|
6
|
+
tx TEXT NOT NULL,
|
|
7
|
+
PRIMARY KEY (ses, idx)
|
|
8
|
+
) WITHOUT ROWID;`,
|
|
9
|
+
`CREATE TABLE IF NOT EXISTS sessions (
|
|
10
|
+
rowID INTEGER PRIMARY KEY,
|
|
11
|
+
coValue INTEGER NOT NULL,
|
|
12
|
+
sessionID TEXT NOT NULL,
|
|
13
|
+
lastIdx INTEGER,
|
|
14
|
+
lastSignature TEXT,
|
|
15
|
+
UNIQUE (sessionID, coValue)
|
|
16
|
+
);`,
|
|
17
|
+
"CREATE INDEX IF NOT EXISTS sessionsByCoValue ON sessions (coValue);",
|
|
18
|
+
`CREATE TABLE IF NOT EXISTS coValues (
|
|
19
|
+
rowID INTEGER PRIMARY KEY,
|
|
20
|
+
id TEXT NOT NULL UNIQUE,
|
|
21
|
+
header TEXT NOT NULL UNIQUE
|
|
22
|
+
);`,
|
|
23
|
+
"CREATE INDEX IF NOT EXISTS coValuesByID ON coValues (id);",
|
|
24
|
+
"PRAGMA user_version = 1;",
|
|
25
|
+
],
|
|
26
|
+
3: [
|
|
27
|
+
`CREATE TABLE IF NOT EXISTS signatureAfter (
|
|
28
|
+
ses INTEGER,
|
|
29
|
+
idx INTEGER,
|
|
30
|
+
signature TEXT NOT NULL,
|
|
31
|
+
PRIMARY KEY (ses, idx)
|
|
32
|
+
) WITHOUT ROWID;`,
|
|
33
|
+
"ALTER TABLE sessions ADD COLUMN bytesSinceLastSignature INTEGER;",
|
|
34
|
+
"PRAGMA user_version = 3;",
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
export function getSQLiteMigrationQueries(version) {
|
|
38
|
+
return Object.keys(migrations)
|
|
39
|
+
.map((k) => Number.parseInt(k, 10))
|
|
40
|
+
.filter((v) => v > version)
|
|
41
|
+
.sort((a, b) => a - b)
|
|
42
|
+
.flatMap((v) => migrations[v] ?? []);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=sqliteMigrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqliteMigrations.js","sourceRoot":"","sources":["../../../src/storage/sqlite/sqliteMigrations.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,CAAC,EAAE;QACD;;;;;qBAKiB;QACjB;;;;;;;OAOG;QACH,qEAAqE;QACrE;;;;OAIG;QACH,2DAA2D;QAC3D,0BAA0B;KAC3B;IACD,CAAC,EAAE;QACD;;;;;qBAKiB;QACjB,kEAAkE;QAClE,0BAA0B;KAC3B;CACF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface SQLiteDatabaseDriver {
|
|
2
|
+
run(sql: string, params: unknown[]): void;
|
|
3
|
+
get<T>(sql: string, params: unknown[]): T | undefined;
|
|
4
|
+
query<T>(sql: string, params: unknown[]): T[];
|
|
5
|
+
transaction(callback: () => unknown): void;
|
|
6
|
+
closeDb(): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC1C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;IACtD,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9C,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/storage/sqlite/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Transaction } from "../../coValueCore/verifiedState.js";
|
|
2
|
+
import type { Signature } from "../../crypto/crypto.js";
|
|
3
|
+
import type { RawCoID, SessionID } from "../../exports.js";
|
|
4
|
+
import type { NewContentMessage } from "../../sync.js";
|
|
5
|
+
import type { DBClientInterfaceAsync, SessionRow, SignatureAfterRow, StoredCoValueRow, StoredSessionRow, TransactionRow } from "../types.js";
|
|
6
|
+
import type { SQLiteDatabaseDriverAsync } from "./types.js";
|
|
7
|
+
export type RawCoValueRow = {
|
|
8
|
+
id: RawCoID;
|
|
9
|
+
header: string;
|
|
10
|
+
};
|
|
11
|
+
export type RawTransactionRow = {
|
|
12
|
+
ses: number;
|
|
13
|
+
idx: number;
|
|
14
|
+
tx: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
17
|
+
export declare class SQLiteClientAsync implements DBClientInterfaceAsync {
|
|
18
|
+
private readonly db;
|
|
19
|
+
constructor(db: SQLiteDatabaseDriverAsync);
|
|
20
|
+
getCoValue(coValueId: RawCoID): Promise<StoredCoValueRow | undefined>;
|
|
21
|
+
getCoValueSessions(coValueRowId: number): Promise<StoredSessionRow[]>;
|
|
22
|
+
getSingleCoValueSession(coValueRowId: number, sessionID: SessionID): Promise<StoredSessionRow | undefined>;
|
|
23
|
+
getNewTransactionInSession(sessionRowId: number, fromIdx: number, toIdx: number): Promise<TransactionRow[]>;
|
|
24
|
+
getSignatures(sessionRowId: number, firstNewTxIdx: number): Promise<SignatureAfterRow[]>;
|
|
25
|
+
addCoValue(msg: NewContentMessage): Promise<number>;
|
|
26
|
+
addSessionUpdate({ sessionUpdate, }: {
|
|
27
|
+
sessionUpdate: SessionRow;
|
|
28
|
+
}): Promise<number>;
|
|
29
|
+
addTransaction(sessionRowID: number, nextIdx: number, newTransaction: Transaction): void;
|
|
30
|
+
addSignatureAfter({ sessionRowID, idx, signature, }: {
|
|
31
|
+
sessionRowID: number;
|
|
32
|
+
idx: number;
|
|
33
|
+
signature: Signature;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
transaction(operationsCallback: () => unknown): Promise<unknown>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,UAE7C;AAED,qBAAa,iBAAkB,YAAW,sBAAsB;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA4B;gBAEnC,EAAE,EAAE,yBAAyB;IAInC,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IA0BrE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOrE,uBAAuB,CAC3B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAOlC,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,EAAE,CAAC;IAiBtB,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAOzB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAanD,gBAAgB,CAAC,EACrB,aAAa,GACd,EAAE;QACD,aAAa,EAAE,UAAU,CAAC;KAC3B,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnB,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,WAAW;IASvB,iBAAiB,CAAC,EACtB,YAAY,EACZ,GAAG,EACH,SAAS,GACV,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,SAAS,CAAA;KAAE;IAOxD,WAAW,CAAC,kBAAkB,EAAE,MAAM,OAAO;CAGpD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { logger } from "../../logger.js";
|
|
2
|
+
export function getErrorMessage(error) {
|
|
3
|
+
return error instanceof Error ? error.message : "Unknown error";
|
|
4
|
+
}
|
|
5
|
+
export class SQLiteClientAsync {
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
async getCoValue(coValueId) {
|
|
10
|
+
const coValueRow = await this.db.get("SELECT * FROM coValues WHERE id = ?", [coValueId]);
|
|
11
|
+
if (!coValueRow)
|
|
12
|
+
return;
|
|
13
|
+
try {
|
|
14
|
+
const parsedHeader = (coValueRow?.header &&
|
|
15
|
+
JSON.parse(coValueRow.header));
|
|
16
|
+
return {
|
|
17
|
+
...coValueRow,
|
|
18
|
+
header: parsedHeader,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
const headerValue = coValueRow?.header ?? "";
|
|
23
|
+
logger.warn(`Invalid JSON in header: ${headerValue}`, {
|
|
24
|
+
id: coValueId,
|
|
25
|
+
err: e,
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async getCoValueSessions(coValueRowId) {
|
|
31
|
+
return this.db.query("SELECT * FROM sessions WHERE coValue = ?", [coValueRowId]);
|
|
32
|
+
}
|
|
33
|
+
async getSingleCoValueSession(coValueRowId, sessionID) {
|
|
34
|
+
return this.db.get("SELECT * FROM sessions WHERE coValue = ? AND sessionID = ?", [coValueRowId, sessionID]);
|
|
35
|
+
}
|
|
36
|
+
async getNewTransactionInSession(sessionRowId, fromIdx, toIdx) {
|
|
37
|
+
const txs = await this.db.query("SELECT * FROM transactions WHERE ses = ? AND idx >= ? AND idx <= ?", [sessionRowId, fromIdx, toIdx]);
|
|
38
|
+
try {
|
|
39
|
+
return txs.map((transactionRow) => ({
|
|
40
|
+
...transactionRow,
|
|
41
|
+
tx: JSON.parse(transactionRow.tx),
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
logger.warn("Invalid JSON in transaction", { err: e });
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async getSignatures(sessionRowId, firstNewTxIdx) {
|
|
50
|
+
return this.db.query("SELECT * FROM signatureAfter WHERE ses = ? AND idx >= ?", [sessionRowId, firstNewTxIdx]);
|
|
51
|
+
}
|
|
52
|
+
async addCoValue(msg) {
|
|
53
|
+
const result = await this.db.get("INSERT INTO coValues (id, header) VALUES (?, ?) RETURNING rowID", [msg.id, JSON.stringify(msg.header)]);
|
|
54
|
+
if (!result) {
|
|
55
|
+
throw new Error("Failed to add coValue");
|
|
56
|
+
}
|
|
57
|
+
return result.rowID;
|
|
58
|
+
}
|
|
59
|
+
async addSessionUpdate({ sessionUpdate, }) {
|
|
60
|
+
const result = await this.db.get(`INSERT INTO sessions (coValue, sessionID, lastIdx, lastSignature, bytesSinceLastSignature) VALUES (?, ?, ?, ?, ?)
|
|
61
|
+
ON CONFLICT(coValue, sessionID) DO UPDATE SET lastIdx=excluded.lastIdx, lastSignature=excluded.lastSignature, bytesSinceLastSignature=excluded.bytesSinceLastSignature
|
|
62
|
+
RETURNING rowID`, [
|
|
63
|
+
sessionUpdate.coValue,
|
|
64
|
+
sessionUpdate.sessionID,
|
|
65
|
+
sessionUpdate.lastIdx,
|
|
66
|
+
sessionUpdate.lastSignature,
|
|
67
|
+
sessionUpdate.bytesSinceLastSignature,
|
|
68
|
+
]);
|
|
69
|
+
if (!result) {
|
|
70
|
+
throw new Error("Failed to add session update");
|
|
71
|
+
}
|
|
72
|
+
return result.rowID;
|
|
73
|
+
}
|
|
74
|
+
addTransaction(sessionRowID, nextIdx, newTransaction) {
|
|
75
|
+
this.db.run("INSERT INTO transactions (ses, idx, tx) VALUES (?, ?, ?)", [
|
|
76
|
+
sessionRowID,
|
|
77
|
+
nextIdx,
|
|
78
|
+
JSON.stringify(newTransaction),
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
async addSignatureAfter({ sessionRowID, idx, signature, }) {
|
|
82
|
+
this.db.run("INSERT INTO signatureAfter (ses, idx, signature) VALUES (?, ?, ?)", [sessionRowID, idx, signature]);
|
|
83
|
+
}
|
|
84
|
+
async transaction(operationsCallback) {
|
|
85
|
+
return this.db.transaction(operationsCallback);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { SQLiteClientAsync } from "./client.js";
|
|
2
|
+
export type { SQLiteDatabaseDriverAsync } from "./types.js";
|
|
3
|
+
import { StorageApiAsync } from "../storageAsync.js";
|
|
4
|
+
import type { SQLiteDatabaseDriverAsync } from "./types.js";
|
|
5
|
+
export declare function getSqliteStorageAsync(db: SQLiteDatabaseDriverAsync): Promise<StorageApiAsync>;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,yBAAyB,4BAgBxE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { SQLiteClientAsync } from "./client.js";
|
|
2
|
+
import { getSQLiteMigrationQueries } from "../sqlite/sqliteMigrations.js";
|
|
3
|
+
import { StorageApiAsync } from "../storageAsync.js";
|
|
4
|
+
import { SQLiteClientAsync } from "./client.js";
|
|
5
|
+
export async function getSqliteStorageAsync(db) {
|
|
6
|
+
await db.initialize();
|
|
7
|
+
const rows = await db.query("PRAGMA user_version", []);
|
|
8
|
+
const userVersion = Number(rows[0]?.user_version) ?? 0;
|
|
9
|
+
const migrations = getSQLiteMigrationQueries(userVersion);
|
|
10
|
+
for (const migration of migrations) {
|
|
11
|
+
await db.run(migration, []);
|
|
12
|
+
}
|
|
13
|
+
return new StorageApiAsync(new SQLiteClientAsync(db));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAA6B;IACvE,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;IAEtB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,KAAK,CACzB,qBAAqB,EACrB,EAAE,CACH,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAE1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface SQLiteDatabaseDriverAsync {
|
|
2
|
+
initialize(): Promise<void>;
|
|
3
|
+
run(sql: string, params: unknown[]): Promise<void>;
|
|
4
|
+
query<T>(sql: string, params: unknown[]): Promise<T[]>;
|
|
5
|
+
get<T>(sql: string, params: unknown[]): Promise<T | undefined>;
|
|
6
|
+
transaction(callback: () => unknown): Promise<unknown>;
|
|
7
|
+
closeDb(): Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC/D,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/storage/sqliteAsync/types.ts"],"names":[],"mappings":""}
|